@eclipse-glsp/client 2.2.0-next.330 → 2.2.0-next.332

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 (180) hide show
  1. package/{lib/features/routing/glsp-manhattan-edge-router.d.ts → css/debug.css} +10 -5
  2. package/css/glsp-sprotty.css +5 -0
  3. package/css/grid.css +20 -0
  4. package/css/keyboard-tool-palette.css +0 -6
  5. package/css/tool-palette.css +30 -26
  6. package/lib/base/default.module.js +1 -1
  7. package/lib/base/default.module.js.map +1 -1
  8. package/lib/base/index.d.ts +1 -1
  9. package/lib/base/index.d.ts.map +1 -1
  10. package/lib/base/index.js +1 -1
  11. package/lib/base/index.js.map +1 -1
  12. package/lib/base/ui-extension/index.d.ts +18 -0
  13. package/lib/base/ui-extension/index.d.ts.map +1 -0
  14. package/lib/base/ui-extension/index.js +34 -0
  15. package/lib/base/ui-extension/index.js.map +1 -0
  16. package/lib/base/{ui-extension-registry.d.ts → ui-extension/ui-extension-registry.d.ts} +1 -1
  17. package/lib/base/ui-extension/ui-extension-registry.d.ts.map +1 -0
  18. package/lib/base/ui-extension/ui-extension-registry.js.map +1 -0
  19. package/lib/base/ui-extension/ui-extension.d.ts +39 -0
  20. package/lib/base/ui-extension/ui-extension.d.ts.map +1 -0
  21. package/lib/base/ui-extension/ui-extension.js +120 -0
  22. package/lib/base/ui-extension/ui-extension.js.map +1 -0
  23. package/lib/features/accessibility/keyboard-tool-palette/keyboard-tool-palette.d.ts.map +1 -1
  24. package/lib/features/accessibility/keyboard-tool-palette/keyboard-tool-palette.js +21 -7
  25. package/lib/features/accessibility/keyboard-tool-palette/keyboard-tool-palette.js.map +1 -1
  26. package/lib/features/accessibility/resize-key-tool/resize-key-handler.d.ts +2 -4
  27. package/lib/features/accessibility/resize-key-tool/resize-key-handler.d.ts.map +1 -1
  28. package/lib/features/accessibility/resize-key-tool/resize-key-handler.js +11 -7
  29. package/lib/features/accessibility/resize-key-tool/resize-key-handler.js.map +1 -1
  30. package/lib/features/accessibility/view-key-tools/movement-key-tool.d.ts +5 -6
  31. package/lib/features/accessibility/view-key-tools/movement-key-tool.d.ts.map +1 -1
  32. package/lib/features/accessibility/view-key-tools/movement-key-tool.js +12 -8
  33. package/lib/features/accessibility/view-key-tools/movement-key-tool.js.map +1 -1
  34. package/lib/features/change-bounds/snap.d.ts +1 -22
  35. package/lib/features/change-bounds/snap.d.ts.map +1 -1
  36. package/lib/features/change-bounds/snap.js +1 -37
  37. package/lib/features/change-bounds/snap.js.map +1 -1
  38. package/lib/features/command-palette/command-palette.d.ts.map +1 -1
  39. package/lib/features/command-palette/command-palette.js +4 -3
  40. package/lib/features/command-palette/command-palette.js.map +1 -1
  41. package/lib/features/debug/debug-bounds-decorator.d.ts +35 -0
  42. package/lib/features/debug/debug-bounds-decorator.d.ts.map +1 -0
  43. package/lib/features/debug/debug-bounds-decorator.js +149 -0
  44. package/lib/features/debug/debug-bounds-decorator.js.map +1 -0
  45. package/lib/features/debug/debug-manager.d.ts +29 -0
  46. package/lib/features/debug/debug-manager.d.ts.map +1 -0
  47. package/lib/features/debug/debug-manager.js +72 -0
  48. package/lib/features/debug/debug-manager.js.map +1 -0
  49. package/lib/features/debug/debug-model.d.ts +37 -0
  50. package/lib/features/debug/debug-model.d.ts.map +1 -0
  51. package/lib/features/debug/debug-model.js +73 -0
  52. package/lib/features/debug/debug-model.js.map +1 -0
  53. package/lib/features/debug/debug-module.d.ts +19 -0
  54. package/lib/features/debug/debug-module.d.ts.map +1 -0
  55. package/lib/features/debug/debug-module.js +31 -0
  56. package/lib/features/debug/debug-module.js.map +1 -0
  57. package/lib/features/debug/index.d.ts +20 -0
  58. package/lib/features/debug/index.d.ts.map +1 -0
  59. package/lib/features/debug/index.js +36 -0
  60. package/lib/features/debug/index.js.map +1 -0
  61. package/lib/features/grid/grid-manager.d.ts +32 -0
  62. package/lib/features/grid/grid-manager.d.ts.map +1 -0
  63. package/lib/features/grid/grid-manager.js +74 -0
  64. package/lib/features/grid/grid-manager.js.map +1 -0
  65. package/lib/features/grid/grid-model.d.ts +37 -0
  66. package/lib/features/grid/grid-model.d.ts.map +1 -0
  67. package/lib/features/grid/grid-model.js +73 -0
  68. package/lib/features/grid/grid-model.js.map +1 -0
  69. package/lib/features/grid/grid-module.d.ts +19 -0
  70. package/lib/features/grid/grid-module.d.ts.map +1 -0
  71. package/lib/features/grid/grid-module.js +32 -0
  72. package/lib/features/grid/grid-module.js.map +1 -0
  73. package/lib/features/grid/grid-snapper.d.ts +45 -0
  74. package/lib/features/grid/grid-snapper.d.ts.map +1 -0
  75. package/lib/features/grid/grid-snapper.js +83 -0
  76. package/lib/features/grid/grid-snapper.js.map +1 -0
  77. package/lib/features/grid/grid.d.ts +18 -0
  78. package/lib/features/grid/grid.d.ts.map +1 -0
  79. package/lib/features/grid/grid.js +3 -0
  80. package/lib/features/grid/grid.js.map +1 -0
  81. package/lib/features/grid/index.d.ts +21 -0
  82. package/lib/features/grid/index.d.ts.map +1 -0
  83. package/lib/features/grid/index.js +37 -0
  84. package/lib/features/grid/index.js.map +1 -0
  85. package/lib/features/helper-lines/helper-line-manager-default.d.ts +4 -1
  86. package/lib/features/helper-lines/helper-line-manager-default.d.ts.map +1 -1
  87. package/lib/features/helper-lines/helper-line-manager-default.js +11 -1
  88. package/lib/features/helper-lines/helper-line-manager-default.js.map +1 -1
  89. package/lib/features/index.d.ts +2 -0
  90. package/lib/features/index.d.ts.map +1 -1
  91. package/lib/features/index.js +2 -0
  92. package/lib/features/index.js.map +1 -1
  93. package/lib/features/label-edit-ui/label-edit-ui.d.ts.map +1 -1
  94. package/lib/features/label-edit-ui/label-edit-ui.js +4 -3
  95. package/lib/features/label-edit-ui/label-edit-ui.js.map +1 -1
  96. package/lib/features/routing/edge-router.d.ts +30 -0
  97. package/lib/features/routing/edge-router.d.ts.map +1 -0
  98. package/lib/features/routing/edge-router.js +116 -0
  99. package/lib/features/routing/edge-router.js.map +1 -0
  100. package/lib/features/routing/index.d.ts +1 -1
  101. package/lib/features/routing/index.d.ts.map +1 -1
  102. package/lib/features/routing/index.js +1 -1
  103. package/lib/features/routing/index.js.map +1 -1
  104. package/lib/features/routing/routing-module.d.ts.map +1 -1
  105. package/lib/features/routing/routing-module.js +4 -4
  106. package/lib/features/routing/routing-module.js.map +1 -1
  107. package/lib/features/tool-palette/tool-palette.d.ts +7 -0
  108. package/lib/features/tool-palette/tool-palette.d.ts.map +1 -1
  109. package/lib/features/tool-palette/tool-palette.js +80 -2
  110. package/lib/features/tool-palette/tool-palette.js.map +1 -1
  111. package/lib/features/viewport/index.d.ts +1 -0
  112. package/lib/features/viewport/index.d.ts.map +1 -1
  113. package/lib/features/viewport/index.js +1 -0
  114. package/lib/features/viewport/index.js.map +1 -1
  115. package/lib/features/viewport/origin-viewport.d.ts +36 -0
  116. package/lib/features/viewport/origin-viewport.d.ts.map +1 -0
  117. package/lib/features/viewport/origin-viewport.js +75 -0
  118. package/lib/features/viewport/origin-viewport.js.map +1 -0
  119. package/lib/features/viewport/viewport-modules.d.ts.map +1 -1
  120. package/lib/features/viewport/viewport-modules.js +4 -2
  121. package/lib/features/viewport/viewport-modules.js.map +1 -1
  122. package/lib/views/base-view-module.d.ts.map +1 -1
  123. package/lib/views/base-view-module.js +3 -2
  124. package/lib/views/base-view-module.js.map +1 -1
  125. package/lib/views/ggraph-view.d.ts +26 -0
  126. package/lib/views/ggraph-view.d.ts.map +1 -0
  127. package/lib/views/ggraph-view.js +71 -0
  128. package/lib/views/ggraph-view.js.map +1 -0
  129. package/lib/views/glsp-projection-view.d.ts +6 -1
  130. package/lib/views/glsp-projection-view.d.ts.map +1 -1
  131. package/lib/views/glsp-projection-view.js +30 -6
  132. package/lib/views/glsp-projection-view.js.map +1 -1
  133. package/lib/views/index.d.ts +1 -0
  134. package/lib/views/index.d.ts.map +1 -1
  135. package/lib/views/index.js +1 -0
  136. package/lib/views/index.js.map +1 -1
  137. package/package.json +3 -3
  138. package/src/base/default.module.ts +1 -1
  139. package/src/base/index.ts +1 -1
  140. package/src/base/ui-extension/index.ts +17 -0
  141. package/src/base/{ui-extension-registry.ts → ui-extension/ui-extension-registry.ts} +1 -1
  142. package/src/base/ui-extension/ui-extension.ts +119 -0
  143. package/src/features/accessibility/keyboard-tool-palette/keyboard-tool-palette.ts +24 -7
  144. package/src/features/accessibility/resize-key-tool/resize-key-handler.ts +9 -9
  145. package/src/features/accessibility/view-key-tools/movement-key-tool.ts +13 -11
  146. package/src/features/change-bounds/{snap.spec.ts → point-position-updater.spec.ts} +1 -12
  147. package/src/features/change-bounds/snap.ts +1 -24
  148. package/src/features/command-palette/command-palette.ts +2 -1
  149. package/src/features/debug/debug-bounds-decorator.tsx +171 -0
  150. package/src/features/debug/debug-manager.ts +56 -0
  151. package/src/features/debug/debug-model.ts +63 -0
  152. package/src/features/debug/debug-module.ts +32 -0
  153. package/src/features/debug/index.ts +19 -0
  154. package/src/features/grid/grid-manager.ts +60 -0
  155. package/src/features/grid/grid-model.ts +62 -0
  156. package/src/features/grid/grid-module.ts +34 -0
  157. package/src/features/grid/grid-snapper.spec.ts +30 -0
  158. package/src/features/grid/grid-snapper.ts +59 -0
  159. package/src/features/grid/grid.ts +18 -0
  160. package/src/features/grid/index.ts +20 -0
  161. package/src/features/helper-lines/helper-line-manager-default.ts +10 -2
  162. package/src/features/index.ts +2 -0
  163. package/src/features/label-edit-ui/label-edit-ui.ts +2 -1
  164. package/src/features/routing/{glsp-manhattan-edge-router.ts → edge-router.ts} +72 -2
  165. package/src/features/routing/index.ts +1 -1
  166. package/src/features/routing/routing-module.ts +3 -5
  167. package/src/features/tool-palette/tool-palette.ts +80 -3
  168. package/src/features/viewport/index.ts +1 -0
  169. package/src/features/viewport/origin-viewport.ts +68 -0
  170. package/src/features/viewport/viewport-modules.ts +4 -2
  171. package/src/views/base-view-module.ts +3 -3
  172. package/src/views/ggraph-view.tsx +56 -0
  173. package/src/views/glsp-projection-view.tsx +34 -7
  174. package/src/views/index.ts +1 -0
  175. package/lib/base/ui-extension-registry.d.ts.map +0 -1
  176. package/lib/base/ui-extension-registry.js.map +0 -1
  177. package/lib/features/routing/glsp-manhattan-edge-router.d.ts.map +0 -1
  178. package/lib/features/routing/glsp-manhattan-edge-router.js +0 -68
  179. package/lib/features/routing/glsp-manhattan-edge-router.js.map +0 -1
  180. /package/lib/base/{ui-extension-registry.js → ui-extension/ui-extension-registry.js} +0 -0
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.GGraphView = void 0;
13
+ /********************************************************************************
14
+ * Copyright (c) 2024 EclipseSource and others.
15
+ *
16
+ * This program and the accompanying materials are made available under the
17
+ * terms of the Eclipse Public License v. 2.0 which is available at
18
+ * http://www.eclipse.org/legal/epl-2.0.
19
+ *
20
+ * This Source Code may also be made available under the following Secondary
21
+ * Licenses when the conditions for such availability set forth in the Eclipse
22
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
23
+ * with the GNU Classpath Exception which is available at
24
+ * https://www.gnu.org/software/classpath/license.html.
25
+ *
26
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
27
+ ********************************************************************************/
28
+ const sprotty_1 = require("@eclipse-glsp/sprotty");
29
+ const inversify_1 = require("inversify");
30
+ const features_1 = require("../features");
31
+ let GGraphView = class GGraphView extends sprotty_1.SGraphView {
32
+ render(model, context) {
33
+ const graph = super.render(model, context);
34
+ if (graph.data) {
35
+ graph.data.style = Object.assign(Object.assign({}, graph.data.style), this.getGridStyle(model, context));
36
+ }
37
+ return graph;
38
+ }
39
+ getGridStyle(model, context) {
40
+ var _a;
41
+ if (!((_a = this.gridManager) === null || _a === void 0 ? void 0 : _a.isGridVisible)) {
42
+ return {};
43
+ }
44
+ const bounds = this.getBackgroundBounds(model, context, this.gridManager);
45
+ return {
46
+ backgroundPosition: `${bounds.x}px ${bounds.y}px`,
47
+ backgroundSize: `${bounds.width}px ${bounds.height}px`,
48
+ // we do not set the background image directly in the style object, because we want to toggle it on and off via CSS
49
+ '--grid-background-image': this.getBackgroundImage(model, context, this.gridManager)
50
+ };
51
+ }
52
+ getBackgroundBounds(viewport, context, gridManager) {
53
+ const position = sprotty_1.Point.multiplyScalar(sprotty_1.Point.subtract(gridManager.grid, viewport.scroll), viewport.zoom);
54
+ const size = sprotty_1.Dimension.fromPoint(sprotty_1.Point.multiplyScalar(gridManager.grid, viewport.zoom));
55
+ return Object.assign(Object.assign({}, position), size);
56
+ }
57
+ getBackgroundImage(model, context, gridManager) {
58
+ // eslint-disable-next-line max-len
59
+ return `url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${gridManager.grid.x} ${gridManager.grid.y}"><rect width="${gridManager.grid.x}" height="${gridManager.grid.y}" x="0" y="0" fill="none" stroke="black" stroke-width="1" stroke-opacity="0.10" /></svg>')`;
60
+ }
61
+ };
62
+ exports.GGraphView = GGraphView;
63
+ __decorate([
64
+ (0, inversify_1.inject)(sprotty_1.TYPES.IGridManager),
65
+ (0, inversify_1.optional)(),
66
+ __metadata("design:type", features_1.GridManager)
67
+ ], GGraphView.prototype, "gridManager", void 0);
68
+ exports.GGraphView = GGraphView = __decorate([
69
+ (0, inversify_1.injectable)()
70
+ ], GGraphView);
71
+ //# sourceMappingURL=ggraph-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ggraph-view.js","sourceRoot":"","sources":["../../src/views/ggraph-view.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;;;;;;;;;;;;kFAckF;AAClF,mDAA4H;AAC5H,yCAAyD;AAEzD,0CAAqD;AAG9C,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,oBAAU;IAG7B,MAAM,CAAC,KAA2B,EAAE,OAAyB;QAClE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3C,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACb,KAAK,CAAC,IAAI,CAAC,KAAK,mCAAQ,KAAK,CAAC,IAAI,CAAC,KAAK,GAAK,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAE,CAAC;QACrF,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAES,YAAY,CAAC,KAA2B,EAAE,OAAyB;;QACzE,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,aAAa,CAAA,EAAE,CAAC;YACnC,OAAO,EAAE,CAAC;QACd,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1E,OAAO;YACH,kBAAkB,EAAE,GAAG,MAAM,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,IAAI;YACjD,cAAc,EAAE,GAAG,MAAM,CAAC,KAAK,MAAM,MAAM,CAAC,MAAM,IAAI;YACtD,mHAAmH;YACnH,yBAAyB,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC;SACvF,CAAC;IACN,CAAC;IAES,mBAAmB,CAAC,QAA8B,EAAE,OAAyB,EAAE,WAAwB;QAC7G,MAAM,QAAQ,GAAG,eAAK,CAAC,cAAc,CAAC,eAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxG,MAAM,IAAI,GAAG,mBAAS,CAAC,SAAS,CAAC,eAAK,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACxF,uCAAY,QAAQ,GAAK,IAAI,EAAG;IACpC,CAAC;IAES,kBAAkB,CAAC,KAA2B,EAAE,OAAyB,EAAE,WAAwB;QACzG,mCAAmC;QACnC,OAAO,sFAAsF,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,kBAAkB,WAAW,CAAC,IAAI,CAAC,CAAC,aAAa,WAAW,CAAC,IAAI,CAAC,CAAC,4FAA4F,CAAC;IACzS,CAAC;CACJ,CAAA;AAlCY,gCAAU;AAC+B;IAAjD,IAAA,kBAAM,EAAC,eAAK,CAAC,YAAY,CAAC;IAAE,IAAA,oBAAQ,GAAE;8BAAyB,sBAAW;+CAAC;qBADnE,UAAU;IADtB,IAAA,sBAAU,GAAE;GACA,UAAU,CAkCtB"}
@@ -13,15 +13,20 @@
13
13
  *
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
- import { Bounds, EdgeRouterRegistry, GViewportRootElement, IViewArgs, ProjectedViewportView, ProjectionParams, RenderingContext, ViewProjection } from '@eclipse-glsp/sprotty';
16
+ import { Bounds, EdgeRouterRegistry, GViewportRootElement, IViewArgs, ProjectedViewportView, ProjectionParams, RenderingContext, SGraphImpl, ViewProjection, Writable } from '@eclipse-glsp/sprotty';
17
17
  import { VNode } from 'snabbdom';
18
+ import { GridManager, GridStyle } from '../features';
18
19
  /**
19
20
  * Special viewport root view that renders horizontal and vertical projection bars for quick navigation.
20
21
  */
21
22
  export declare class GLSPProjectionView extends ProjectedViewportView {
22
23
  edgeRouterRegistry: EdgeRouterRegistry;
24
+ protected gridManager?: GridManager;
23
25
  render(model: Readonly<GViewportRootElement>, context: RenderingContext, args?: IViewArgs): VNode;
24
26
  protected renderSvg(model: Readonly<GViewportRootElement>, context: RenderingContext, args?: IViewArgs): VNode;
27
+ protected getGridStyle(model: Readonly<SGraphImpl>, context: RenderingContext): GridStyle;
28
+ protected getBackgroundBounds(viewport: Readonly<SGraphImpl>, context: RenderingContext, gridManager: GridManager): Writable<Bounds>;
29
+ protected getBackgroundImage(model: Readonly<SGraphImpl>, context: RenderingContext, gridManager: GridManager): string;
25
30
  protected renderProjectionBar(projections: ViewProjection[], model: Readonly<GViewportRootElement>, modelBounds: Bounds, orientation: 'horizontal' | 'vertical'): VNode;
26
31
  protected renderViewport(model: Readonly<GViewportRootElement>, params: ProjectionParams): VNode;
27
32
  protected renderProjection(projection: ViewProjection, model: Readonly<GViewportRootElement>, params: ProjectionParams): VNode;
@@ -1 +1 @@
1
- {"version":3,"file":"glsp-projection-view.d.ts","sourceRoot":"","sources":["../../src/views/glsp-projection-view.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAElF,OAAO,EACH,MAAM,EACN,kBAAkB,EAClB,oBAAoB,EACpB,SAAS,EACT,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EAIjB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,KAAK,EAAiB,MAAM,UAAU,CAAC;AAKhD;;GAEG;AACH,qBACa,kBAAmB,SAAQ,qBAAqB;IAC7B,kBAAkB,EAAE,kBAAkB,CAAC;IAE1D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,KAAK;cAiBvF,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,KAAK;cAYpG,mBAAmB,CAClC,WAAW,EAAE,cAAc,EAAE,EAC7B,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EACrC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,YAAY,GAAG,UAAU,GACvC,KAAK;cAoBW,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,gBAAgB,GAAG,KAAK;cAsCtF,gBAAgB,CAC/B,UAAU,EAAE,cAAc,EAC1B,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EACrC,MAAM,EAAE,gBAAgB,GACzB,KAAK;CA+CX"}
1
+ {"version":3,"file":"glsp-projection-view.d.ts","sourceRoot":"","sources":["../../src/views/glsp-projection-view.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAElF,OAAO,EACH,MAAM,EAEN,kBAAkB,EAClB,oBAAoB,EACpB,SAAS,EAET,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EAEV,cAAc,EACd,QAAQ,EAIX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,KAAK,EAAiB,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAKrD;;GAEG;AACH,qBACa,kBAAmB,SAAQ,qBAAqB;IAC7B,kBAAkB,EAAE,kBAAkB,CAAC;IAC3B,SAAS,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IAEnE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,KAAK;cAavF,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,KAAK;IAYvH,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,gBAAgB,GAAG,SAAS;IAazF,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC;IAMpI,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM;cAKnG,mBAAmB,CAClC,WAAW,EAAE,cAAc,EAAE,EAC7B,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EACrC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,YAAY,GAAG,UAAU,GACvC,KAAK;cAoBW,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,gBAAgB,GAAG,KAAK;cAsCtF,gBAAgB,CAC/B,UAAU,EAAE,cAAc,EAC1B,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EACrC,MAAM,EAAE,gBAAgB,GACzB,KAAK;CA+CX"}
@@ -28,6 +28,7 @@ exports.GLSPProjectionView = void 0;
28
28
  const sprotty_1 = require("@eclipse-glsp/sprotty");
29
29
  const inversify_1 = require("inversify");
30
30
  const snabbdom_1 = require("snabbdom");
31
+ const features_1 = require("../features");
31
32
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
32
33
  const JSX = { createElement: sprotty_1.html };
33
34
  /**
@@ -35,12 +36,8 @@ const JSX = { createElement: sprotty_1.html };
35
36
  */
36
37
  let GLSPProjectionView = class GLSPProjectionView extends sprotty_1.ProjectedViewportView {
37
38
  render(model, context, args) {
38
- const svgElem = this.renderSvg(model, context, args);
39
- if (svgElem.data) {
40
- svgElem.data.class = { 'sprotty-graph': true };
41
- }
42
39
  const rootNode = (JSX.createElement("div", { "class-sprotty-graph": false, style: { width: '100%', height: '100%' } },
43
- svgElem,
40
+ this.renderSvg(model, context, args),
44
41
  this.renderProjections(model, context, args)));
45
42
  (0, sprotty_1.setAttr)(rootNode, 'tabindex', 1);
46
43
  (0, sprotty_1.setAttr)(rootNode, 'aria-label', 'Diagram');
@@ -50,9 +47,31 @@ let GLSPProjectionView = class GLSPProjectionView extends sprotty_1.ProjectedVie
50
47
  const edgeRouting = this.edgeRouterRegistry.routeAllChildren(model);
51
48
  const transform = `scale(${model.zoom}) translate(${-model.scroll.x},${-model.scroll.y})`;
52
49
  const ns = 'http://www.w3.org/2000/svg';
53
- const svg = (0, snabbdom_1.h)('svg', { ns, style: { height: '100%' } }, (0, snabbdom_1.h)('g', { ns, attrs: { transform } }, context.renderChildren(model, { edgeRouting })));
50
+ const svg = (0, snabbdom_1.h)('svg', { ns, style: Object.assign({ height: '100%' }, this.getGridStyle(model, context)), class: { 'sprotty-graph': true } }, (0, snabbdom_1.h)('g', { ns, attrs: { transform } }, context.renderChildren(model, { edgeRouting })));
54
51
  return svg;
55
52
  }
53
+ getGridStyle(model, context) {
54
+ var _a;
55
+ if (!((_a = this.gridManager) === null || _a === void 0 ? void 0 : _a.isGridVisible)) {
56
+ return {};
57
+ }
58
+ const bounds = this.getBackgroundBounds(model, context, this.gridManager);
59
+ return {
60
+ backgroundPosition: `${bounds.x}px ${bounds.y}px`,
61
+ backgroundSize: `${bounds.width}px ${bounds.height}px`,
62
+ // we do not set the background image directly in the style object, because we want to toggle it on and off via CSS
63
+ '--grid-background-image': this.getBackgroundImage(model, context, this.gridManager)
64
+ };
65
+ }
66
+ getBackgroundBounds(viewport, context, gridManager) {
67
+ const position = sprotty_1.Point.multiplyScalar(sprotty_1.Point.subtract(gridManager.grid, viewport.scroll), viewport.zoom);
68
+ const size = sprotty_1.Dimension.fromPoint(sprotty_1.Point.multiplyScalar(gridManager.grid, viewport.zoom));
69
+ return Object.assign(Object.assign({}, position), size);
70
+ }
71
+ getBackgroundImage(model, context, gridManager) {
72
+ // eslint-disable-next-line max-len
73
+ return `url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${gridManager.grid.x} ${gridManager.grid.y}"><rect width="${gridManager.grid.x}" height="${gridManager.grid.y}" x="0" y="0" fill="none" stroke="black" stroke-width="1" stroke-opacity="0.10" /></svg>')`;
74
+ }
56
75
  renderProjectionBar(projections, model, modelBounds, orientation) {
57
76
  const params = { modelBounds, orientation };
58
77
  // NOTE: Here we assume that the projection bars have the same size as the diagram canvas,
@@ -151,6 +170,11 @@ __decorate([
151
170
  (0, inversify_1.inject)(sprotty_1.EdgeRouterRegistry),
152
171
  __metadata("design:type", sprotty_1.EdgeRouterRegistry)
153
172
  ], GLSPProjectionView.prototype, "edgeRouterRegistry", void 0);
173
+ __decorate([
174
+ (0, inversify_1.inject)(sprotty_1.TYPES.IGridManager),
175
+ (0, inversify_1.optional)(),
176
+ __metadata("design:type", features_1.GridManager)
177
+ ], GLSPProjectionView.prototype, "gridManager", void 0);
154
178
  exports.GLSPProjectionView = GLSPProjectionView = __decorate([
155
179
  (0, inversify_1.injectable)()
156
180
  ], GLSPProjectionView);
@@ -1 +1 @@
1
- {"version":3,"file":"glsp-projection-view.js","sourceRoot":"","sources":["../../src/views/glsp-projection-view.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"glsp-projection-view.js","sourceRoot":"","sources":["../../src/views/glsp-projection-view.tsx"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@
16
16
  export * from './base-view-module';
17
17
  export * from './compartments';
18
18
  export * from './gedge-view';
19
+ export * from './ggraph-view';
19
20
  export * from './glsp-projection-view';
20
21
  export * from './issue-marker-view';
21
22
  export * from './rounded-corner';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/views/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAClF,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/views/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAClF,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC"}
@@ -32,6 +32,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
32
32
  __exportStar(require("./base-view-module"), exports);
33
33
  __exportStar(require("./compartments"), exports);
34
34
  __exportStar(require("./gedge-view"), exports);
35
+ __exportStar(require("./ggraph-view"), exports);
35
36
  __exportStar(require("./glsp-projection-view"), exports);
36
37
  __exportStar(require("./issue-marker-view"), exports);
37
38
  __exportStar(require("./rounded-corner"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/views/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;kFAckF;AAClF,qDAAmC;AACnC,iDAA+B;AAC/B,+CAA6B;AAC7B,yDAAuC;AACvC,sDAAoC;AACpC,mDAAiC;AACjC,wDAAsC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/views/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;kFAckF;AAClF,qDAAmC;AACnC,iDAA+B;AAC/B,+CAA6B;AAC7B,gDAA8B;AAC9B,yDAAuC;AACvC,sDAAoC;AACpC,mDAAiC;AACjC,wDAAsC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eclipse-glsp/client",
3
- "version": "2.2.0-next.330+bf4b88a",
3
+ "version": "2.2.0-next.332+ca7c9ae",
4
4
  "description": "A sprotty-based client for GLSP",
5
5
  "keywords": [
6
6
  "eclipse",
@@ -46,7 +46,7 @@
46
46
  "watch": "tsc -w"
47
47
  },
48
48
  "dependencies": {
49
- "@eclipse-glsp/sprotty": "2.2.0-next.330+bf4b88a",
49
+ "@eclipse-glsp/sprotty": "2.2.0-next.332+ca7c9ae",
50
50
  "autocompleter": "^9.1.0",
51
51
  "file-saver": "^2.0.5",
52
52
  "lodash": "4.17.21"
@@ -61,5 +61,5 @@
61
61
  "publishConfig": {
62
62
  "access": "public"
63
63
  },
64
- "gitHead": "bf4b88a15d066b5c7869870afa43e161dc097007"
64
+ "gitHead": "ca7c9aecfaa198b8ceed3bf488abfc3d3d552e07"
65
65
  }
@@ -51,7 +51,7 @@ import { SelectionClearingMouseListener } from './selection-clearing-mouse-liste
51
51
  import { SelectionService } from './selection-service';
52
52
  import { EnableDefaultToolsAction, EnableToolsAction } from './tool-manager/tool';
53
53
  import { DefaultToolsEnablingKeyListener, ToolManager, ToolManagerActionHandler } from './tool-manager/tool-manager';
54
- import { GLSPUIExtensionRegistry } from './ui-extension-registry';
54
+ import { GLSPUIExtensionRegistry } from './ui-extension/ui-extension-registry';
55
55
  import { GLSPKeyTool } from './view/key-tool';
56
56
  import { GLSPMouseTool } from './view/mouse-tool';
57
57
  import { GViewRegistry } from './view/view-registry';
package/src/base/index.ts CHANGED
@@ -28,5 +28,5 @@ export * from './ranked';
28
28
  export * from './selection-clearing-mouse-listener';
29
29
  export * from './selection-service';
30
30
  export * from './tool-manager';
31
- export * from './ui-extension-registry';
31
+ export * from './ui-extension';
32
32
  export * from './view';
@@ -0,0 +1,17 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2024 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
+ export * from './ui-extension';
17
+ export * from './ui-extension-registry';
@@ -16,7 +16,7 @@
16
16
 
17
17
  import { IUIExtension, LazyInjector, MaybePromise, TYPES, UIExtensionRegistry } from '@eclipse-glsp/sprotty';
18
18
  import { inject, injectable, optional } from 'inversify';
19
- import { IDiagramStartup } from './model';
19
+ import { IDiagramStartup } from '../model';
20
20
 
21
21
  @injectable()
22
22
  export class GLSPUIExtensionRegistry extends UIExtensionRegistry implements IDiagramStartup {
@@ -0,0 +1,119 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2024 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 { AbstractUIExtension } from '@eclipse-glsp/sprotty';
18
+ import { injectable } from 'inversify';
19
+
20
+ export const CSS_UI_EXTENSION_CLASS = 'ui-extension';
21
+ export const CSS_HIDDEN_EXTENSION_CLASS = 'hidden';
22
+
23
+ /**
24
+ * Reusable abstract base implementation for UI extensions.
25
+ * Intended for UI extensions that directly interact with the DOM API to create and manage UI elements.
26
+ */
27
+ @injectable()
28
+ export abstract class GLSPAbstractUIExtension extends AbstractUIExtension {
29
+ protected get diagramContainerId(): string {
30
+ return this.options.baseDiv;
31
+ }
32
+
33
+ protected get parentContainerSelector(): string {
34
+ return '#' + this.diagramContainerId;
35
+ }
36
+
37
+ protected get containerSelector(): string {
38
+ return '#' + this.id();
39
+ }
40
+
41
+ protected get initialized(): boolean {
42
+ return !!this.containerElement;
43
+ }
44
+
45
+ protected override initialize(): boolean {
46
+ if (this.initialized) {
47
+ return true;
48
+ }
49
+ try {
50
+ this.containerElement = this.getOrCreateContainer();
51
+ this.initializeContainer(this.containerElement);
52
+ this.initializeContents(this.containerElement);
53
+ } catch (error) {
54
+ const msg = error instanceof Error ? error.message : `Could not retrieve container element for UI extension ${this.id}`;
55
+ this.logger.error(this, msg);
56
+ return false;
57
+ }
58
+ return true;
59
+ }
60
+
61
+ protected override getOrCreateContainer(): HTMLElement {
62
+ if (this.containerElement) {
63
+ return this.containerElement;
64
+ }
65
+ // check if the container already exists, independent from any potential parent container
66
+ // this allows us to use existing elements defined anywhere in the document
67
+ const existingContainer = this.getContainer();
68
+ if (existingContainer) {
69
+ return existingContainer;
70
+ }
71
+ // to create a container the parent container
72
+ const parent = this.getParentContainer();
73
+ if (!parent?.isConnected) {
74
+ throw new Error(`Could not obtain attached parent for initializing UI extension ${this.id}`);
75
+ }
76
+ const container = this.createContainer(parent);
77
+ this.insertContainerIntoParent(container, parent);
78
+ return container;
79
+ }
80
+
81
+ protected getContainer(): HTMLElement | null {
82
+ return document.querySelector<HTMLElement>(this.containerSelector);
83
+ }
84
+
85
+ protected createContainer(parent: HTMLElement): HTMLElement {
86
+ const container = document.createElement('div');
87
+ container.id = parent.id + '_' + this.id();
88
+ return container;
89
+ }
90
+
91
+ protected initializeContainer(container: HTMLElement): void {
92
+ container.classList.add(CSS_UI_EXTENSION_CLASS, this.containerClass());
93
+ }
94
+
95
+ protected getParentContainer(): HTMLElement | null {
96
+ return document.querySelector<HTMLElement>(this.parentContainerSelector)!;
97
+ }
98
+
99
+ protected insertContainerIntoParent(container: HTMLElement, parent: HTMLElement): void {
100
+ parent.insertBefore(container, parent.firstChild);
101
+ }
102
+
103
+ protected override setContainerVisible(visible: boolean): void {
104
+ // the parent class simply sets the style directly, however classes provide more fine-grained control
105
+ if (visible) {
106
+ this.containerElement?.classList.remove(CSS_HIDDEN_EXTENSION_CLASS);
107
+ } else {
108
+ this.containerElement?.classList.add(CSS_HIDDEN_EXTENSION_CLASS);
109
+ }
110
+ }
111
+
112
+ protected isContainerVisible(): boolean {
113
+ return !this.containerElement?.classList.contains(CSS_HIDDEN_EXTENSION_CLASS);
114
+ }
115
+
116
+ protected toggleContainerVisible(): void {
117
+ this.setContainerVisible(!this.isContainerVisible());
118
+ }
119
+ }
@@ -44,7 +44,7 @@ import * as messages from '../toast/messages.json';
44
44
  import { ShowToastMessageAction } from '../toast/toast-handler';
45
45
 
46
46
  const SEARCH_ICON_ID = 'search';
47
- const PALETTE_ICON_ID = 'symbol-color';
47
+ const PALETTE_ICON_ID = 'tools';
48
48
  const CHEVRON_DOWN_ICON_ID = 'chevron-right';
49
49
  const PALETTE_HEIGHT = '500px';
50
50
  const SELECTION_TOOL_KEY: KeyCode[] = ['Digit1', 'Numpad1'];
@@ -212,29 +212,46 @@ export class KeyboardToolPalette extends ToolPalette {
212
212
 
213
213
  protected override createHeaderTools(): HTMLElement {
214
214
  this.headerToolsButtonMapping.clear();
215
+ let mappingIndex = 0;
215
216
 
216
217
  const headerTools = document.createElement('div');
217
218
  headerTools.classList.add('header-tools');
218
219
 
219
220
  this.defaultToolsButton = this.createDefaultToolButton();
220
- this.headerToolsButtonMapping.set(0, this.defaultToolsButton);
221
+ this.headerToolsButtonMapping.set(mappingIndex++, this.defaultToolsButton);
221
222
  headerTools.appendChild(this.defaultToolsButton);
222
223
 
223
224
  this.deleteToolButton = this.createMouseDeleteToolButton();
224
- this.headerToolsButtonMapping.set(1, this.deleteToolButton);
225
+ this.headerToolsButtonMapping.set(mappingIndex++, this.deleteToolButton);
225
226
  headerTools.appendChild(this.deleteToolButton);
226
227
 
227
228
  this.marqueeToolButton = this.createMarqueeToolButton();
228
- this.headerToolsButtonMapping.set(2, this.marqueeToolButton);
229
+ this.headerToolsButtonMapping.set(mappingIndex++, this.marqueeToolButton);
229
230
  headerTools.appendChild(this.marqueeToolButton);
230
231
 
231
232
  this.validateToolButton = this.createValidateButton();
232
- this.headerToolsButtonMapping.set(3, this.validateToolButton);
233
+ this.headerToolsButtonMapping.set(mappingIndex++, this.validateToolButton);
233
234
  headerTools.appendChild(this.validateToolButton);
234
235
 
236
+ const resetViewportButton = this.createResetViewportButton();
237
+ this.headerToolsButtonMapping.set(mappingIndex++, resetViewportButton);
238
+ headerTools.appendChild(resetViewportButton);
239
+
240
+ if (this.gridManager) {
241
+ const toggleGridButton = this.createToggleGridButton();
242
+ this.headerToolsButtonMapping.set(mappingIndex++, toggleGridButton);
243
+ headerTools.appendChild(toggleGridButton);
244
+ }
245
+
246
+ if (this.debugManager) {
247
+ const toggleDebugButton = this.createToggleDebugButton();
248
+ this.headerToolsButtonMapping.set(mappingIndex++, toggleDebugButton);
249
+ headerTools.appendChild(toggleDebugButton);
250
+ }
251
+
235
252
  // Create button for Search
236
253
  this.searchToolButton = this.createSearchButton();
237
- this.headerToolsButtonMapping.set(4, this.searchToolButton);
254
+ this.headerToolsButtonMapping.set(mappingIndex++, this.searchToolButton);
238
255
  headerTools.appendChild(this.searchToolButton);
239
256
 
240
257
  return headerTools;
@@ -324,7 +341,7 @@ export class KeyboardToolPalette extends ToolPalette {
324
341
  searchField.tabIndex = 21;
325
342
  searchField.id = this.containerElement.id + '_search_field';
326
343
  searchField.type = 'text';
327
- searchField.placeholder = ' Search...';
344
+ searchField.placeholder = 'Search...';
328
345
  searchField.style.display = 'none';
329
346
  searchField.onkeyup = ev => {
330
347
  this.requestFilterUpdate(this.searchField.value);
@@ -36,7 +36,7 @@ import { EditorContextService } from '../../../base/editor-context-service';
36
36
  import { IFeedbackActionDispatcher } from '../../../base/feedback/feedback-action-dispatcher';
37
37
  import { Resizable, SelectableBoundsAware, getElements, isSelectableAndBoundsAware, toElementAndBounds } from '../../../utils/gmodel-util';
38
38
  import { isValidMove, isValidSize, minHeight, minWidth } from '../../../utils/layout-utils';
39
- import { GridSnapper } from '../../change-bounds/snap';
39
+ import { Grid } from '../../grid';
40
40
 
41
41
  export enum ResizeType {
42
42
  Increase,
@@ -80,20 +80,20 @@ export class ResizeElementHandler implements IActionHandler {
80
80
  protected debouncedChangeBounds?: DebouncedFunc<() => void>;
81
81
  protected resizeFeedback: FeedbackEmitter;
82
82
 
83
- // Default x resize used if GridSnapper is not provided
83
+ // Default x resize used if grid is not provided
84
84
  static readonly defaultResizeX = 20;
85
85
 
86
- // Default y resize used if GridSnapper is not provided
86
+ // Default y resize used if grid is not provided
87
87
  static readonly defaultResizeY = 20;
88
- protected grid = { x: ResizeElementHandler.defaultResizeX, y: ResizeElementHandler.defaultResizeY };
88
+
89
+ @inject(TYPES.Grid) @optional() protected grid: Grid = {
90
+ x: ResizeElementHandler.defaultResizeX,
91
+ y: ResizeElementHandler.defaultResizeY
92
+ };
89
93
 
90
94
  protected isEditMode = false;
91
95
 
92
- constructor(@inject(TYPES.ISnapper) @optional() protected readonly snapper?: ISnapper) {
93
- if (snapper instanceof GridSnapper) {
94
- this.grid = snapper.grid;
95
- }
96
- }
96
+ constructor(@inject(TYPES.ISnapper) @optional() protected readonly snapper?: ISnapper) {}
97
97
 
98
98
  @postConstruct()
99
99
  protected init(): void {
@@ -20,7 +20,8 @@ import { matchesKeystroke } from 'sprotty/lib/utils/keyboard';
20
20
  import { GLSPActionDispatcher } from '../../../base/action-dispatcher';
21
21
  import { SelectionService } from '../../../base/selection-service';
22
22
  import { Tool } from '../../../base/tool-manager/tool';
23
- import { GridSnapper, unsnapModifier, useSnap } from '../../change-bounds/snap';
23
+ import { unsnapModifier, useSnap } from '../../change-bounds/snap';
24
+ import { Grid } from '../../grid';
24
25
  import { AccessibleKeyShortcutProvider, SetAccessibleKeyShortcutAction } from '../key-shortcut/accessible-key-shortcut';
25
26
  import { MoveElementAction, MoveViewportAction } from '../move-zoom/move-handler';
26
27
 
@@ -33,18 +34,22 @@ export class MovementKeyTool implements Tool {
33
34
 
34
35
  isEditTool = true;
35
36
 
36
- protected readonly movementKeyListener = new MoveKeyListener(this);
37
+ protected movementKeyListener: MoveKeyListener;
37
38
 
38
39
  @inject(KeyTool) protected readonly keytool: KeyTool;
39
40
  @inject(SelectionService) selectionService: SelectionService;
40
41
  @inject(TYPES.ISnapper) @optional() readonly snapper?: ISnapper;
41
42
  @inject(TYPES.IActionDispatcher) readonly actionDispatcher: GLSPActionDispatcher;
43
+ @optional() @inject(TYPES.Grid) protected grid: Grid;
42
44
 
43
45
  get id(): string {
44
46
  return MovementKeyTool.ID;
45
47
  }
46
48
 
47
49
  enable(): void {
50
+ if (!this.movementKeyListener) {
51
+ this.movementKeyListener = new MoveKeyListener(this, this.grid);
52
+ }
48
53
  this.keytool.register(this.movementKeyListener);
49
54
  this.movementKeyListener.registerShortcutKey();
50
55
  }
@@ -55,22 +60,19 @@ export class MovementKeyTool implements Tool {
55
60
  }
56
61
 
57
62
  export class MoveKeyListener extends KeyListener implements AccessibleKeyShortcutProvider {
58
- // Default x distance used if GridSnapper is not provided
63
+ // Default x distance used if grid is not provided
59
64
  static readonly defaultMoveX = 20;
60
65
 
61
- // Default y distance used if GridSnapper is not provided
66
+ // Default y distance used if grid is not provided
62
67
  static readonly defaultMoveY = 20;
63
68
 
64
69
  protected readonly token = MoveKeyListener.name;
65
70
 
66
- protected grid = { x: MoveKeyListener.defaultMoveX, y: MoveKeyListener.defaultMoveY };
67
-
68
- constructor(protected readonly tool: MovementKeyTool) {
71
+ constructor(
72
+ protected readonly tool: MovementKeyTool,
73
+ protected grid: Grid = { x: MoveKeyListener.defaultMoveX, y: MoveKeyListener.defaultMoveY }
74
+ ) {
69
75
  super();
70
-
71
- if (this.tool.snapper instanceof GridSnapper) {
72
- this.grid = this.tool.snapper.grid;
73
- }
74
76
  }
75
77
 
76
78
  registerShortcutKey(): void {
@@ -16,19 +16,8 @@
16
16
 
17
17
  import { GModelElement } from '@eclipse-glsp/sprotty';
18
18
  import { expect } from 'chai';
19
+ import { GridSnapper } from '../grid';
19
20
  import { PointPositionUpdater } from './point-position-updater';
20
- import { GridSnapper } from './snap';
21
-
22
- describe('GridSnapper', () => {
23
- it('snap', () => {
24
- const element = new GModelElement();
25
- const snapper = new GridSnapper();
26
- expect(snapper.snap({ x: 0, y: 0 }, element)).to.be.deep.equals({ x: 0, y: 0 });
27
- expect(snapper.snap({ x: 4, y: 5 }, element)).to.be.deep.equals({ x: 0, y: 10 });
28
- expect(snapper.snap({ x: 8, y: 11 }, element)).to.be.deep.equals({ x: 10, y: 10 });
29
- expect(snapper.snap({ x: -7, y: -4 }, element)).to.be.deep.equals({ x: -10, y: -0 });
30
- });
31
- });
32
21
 
33
22
  describe('PointPositionUpdater', () => {
34
23
  it('updatePosition with no last drag position', () => {