@eclipse-glsp/client 2.6.0-next.6 → 2.6.0-next.8
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.
- package/lib/features/bounds/glsp-hidden-bounds-updater.d.ts +1 -1
- package/lib/features/bounds/glsp-hidden-bounds-updater.d.ts.map +1 -1
- package/lib/features/bounds/glsp-hidden-bounds-updater.js +4 -1
- package/lib/features/bounds/glsp-hidden-bounds-updater.js.map +1 -1
- package/lib/features/change-bounds/movement-restrictor.d.ts +12 -4
- package/lib/features/change-bounds/movement-restrictor.d.ts.map +1 -1
- package/lib/features/change-bounds/movement-restrictor.js +44 -17
- package/lib/features/change-bounds/movement-restrictor.js.map +1 -1
- package/lib/features/decoration/decoration-module.d.ts +1 -1
- package/lib/features/decoration/decoration-module.d.ts.map +1 -1
- package/lib/features/decoration/decoration-module.js +2 -1
- package/lib/features/decoration/decoration-module.js.map +1 -1
- package/lib/features/decoration/decoration-placer.d.ts +9 -3
- package/lib/features/decoration/decoration-placer.d.ts.map +1 -1
- package/lib/features/decoration/decoration-placer.js +32 -1
- package/lib/features/decoration/decoration-placer.js.map +1 -1
- package/lib/utils/gmodel-util.d.ts +32 -2
- package/lib/utils/gmodel-util.d.ts.map +1 -1
- package/lib/utils/gmodel-util.js +29 -1
- package/lib/utils/gmodel-util.js.map +1 -1
- package/package.json +3 -3
- package/src/features/bounds/glsp-hidden-bounds-updater.ts +5 -1
- package/src/features/change-bounds/movement-restrictor.ts +72 -19
- package/src/features/decoration/decoration-module.ts +2 -1
- package/src/features/decoration/decoration-placer.ts +49 -4
- package/src/utils/gmodel-util.ts +59 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/********************************************************************************
|
|
2
|
-
* Copyright (c) 2022-
|
|
2
|
+
* Copyright (c) 2022-2025 EclipseSource and others.
|
|
3
3
|
*
|
|
4
4
|
* This program and the accompanying materials are made available under the
|
|
5
5
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glsp-hidden-bounds-updater.d.ts","sourceRoot":"","sources":["../../../src/features/bounds/glsp-hidden-bounds-updater.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAElF,OAAO,EACH,MAAM,EACN,UAAU,EAEV,kBAAkB,EAIlB,uBAAuB,EAEvB,aAAa,EACb,mBAAmB,EACnB,UAAU,EACV,cAAc,EAGjB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,uBAAuB,EAAqD,MAAM,yBAAyB,CAAC;AAIrH,qBAAa,aAAc,SAAQ,UAAU;IACzC,UAAU,CAAC,EAAE,UAAU,CAAC;CAC3B;AAED;;;;GAIG;AACH,qBACa,uBAAwB,SAAQ,mBAAmB;IACpB,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IAEnG,SAAS,CAAC,aAAa,EAAE,uBAAuB,EAAE,CAAM;IAExD,SAAS,CAAC,qBAAqB,IAAI,GAAG,CAAC,uBAAuB,EAAE,aAAa,CAAC;IAIrE,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,GAAG,KAAK;IAQrD,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"glsp-hidden-bounds-updater.d.ts","sourceRoot":"","sources":["../../../src/features/bounds/glsp-hidden-bounds-updater.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAElF,OAAO,EACH,MAAM,EACN,UAAU,EAEV,kBAAkB,EAIlB,uBAAuB,EAEvB,aAAa,EACb,mBAAmB,EACnB,UAAU,EACV,cAAc,EAGjB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,uBAAuB,EAAqD,MAAM,yBAAyB,CAAC;AAIrH,qBAAa,aAAc,SAAQ,UAAU;IACzC,UAAU,CAAC,EAAE,UAAU,CAAC;CAC3B;AAED;;;;GAIG;AACH,qBACa,uBAAwB,SAAQ,mBAAmB;IACpB,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IAEnG,SAAS,CAAC,aAAa,EAAE,uBAAuB,EAAE,CAAM;IAExD,SAAS,CAAC,qBAAqB,IAAI,GAAG,CAAC,uBAAuB,EAAE,aAAa,CAAC;IAIrE,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,GAAG,KAAK;IAQrD,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IA6DzC,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI;IAYrD,SAAS,CAAC,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;CAG/F"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/********************************************************************************
|
|
3
|
-
* Copyright (c) 2022-
|
|
3
|
+
* Copyright (c) 2022-2025 EclipseSource and others.
|
|
4
4
|
*
|
|
5
5
|
* This program and the accompanying materials are made available under the
|
|
6
6
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -54,6 +54,9 @@ let GLSPHiddenBoundsUpdater = class GLSPHiddenBoundsUpdater extends sprotty_1.Hi
|
|
|
54
54
|
return vnode;
|
|
55
55
|
}
|
|
56
56
|
postUpdate(cause) {
|
|
57
|
+
if (cause === undefined || cause.kind !== sprotty_1.RequestBoundsAction.KIND) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
57
60
|
if (local_bounds_1.LocalRequestBoundsAction.is(cause) && cause.elementIDs) {
|
|
58
61
|
this.focusOnElements(cause.elementIDs);
|
|
59
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glsp-hidden-bounds-updater.js","sourceRoot":"","sources":["../../../src/features/bounds/glsp-hidden-bounds-updater.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;kFAckF;;;;;;;;;;;;AAElF,mDAgB+B;AAC/B,yCAAyD;AAEzD,yDAAqH;AACrH,+CAA4C;AAC5C,iDAAqF;AAErF,MAAa,aAAc,SAAQ,oBAAU;CAE5C;AAFD,sCAEC;AAED;;;;GAIG;AAEI,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,6BAAmB;IAAzD;;QAGO,kBAAa,GAA8B,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"glsp-hidden-bounds-updater.js","sourceRoot":"","sources":["../../../src/features/bounds/glsp-hidden-bounds-updater.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/********************************************************************************
|
|
2
|
-
* Copyright (c) 2019-
|
|
2
|
+
* Copyright (c) 2019-2025 EclipseSource and others.
|
|
3
3
|
*
|
|
4
4
|
* This program and the accompanying materials are made available under the
|
|
5
5
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -13,9 +13,10 @@
|
|
|
13
13
|
*
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
|
-
import { GModelElement, Point } from '@eclipse-glsp/sprotty';
|
|
16
|
+
import { GModelElement, GNode, Point } from '@eclipse-glsp/sprotty';
|
|
17
17
|
import { ModifyCSSFeedbackAction } from '../../base/feedback/css-feedback';
|
|
18
18
|
import { BoundsAwareModelElement } from '../../utils/gmodel-util';
|
|
19
|
+
import { ContainerElement } from '../hints/model';
|
|
19
20
|
/**
|
|
20
21
|
* A `MovementRestrictor` is an optional service that can be used by tools to validate
|
|
21
22
|
* whether a certain move operation (e.g. `ChangeBoundsOperation`) in the diagram is valid.
|
|
@@ -34,14 +35,21 @@ export interface IMovementRestrictor {
|
|
|
34
35
|
*/
|
|
35
36
|
cssClasses?: string[];
|
|
36
37
|
}
|
|
38
|
+
export interface MoveElementContext {
|
|
39
|
+
element: GModelElement;
|
|
40
|
+
elementAtNewLocation: BoundsAwareModelElement;
|
|
41
|
+
parentContainers: ContainerElement[];
|
|
42
|
+
childNodes: GNode[];
|
|
43
|
+
}
|
|
37
44
|
/**
|
|
38
45
|
* A `IMovementRestrictor` that checks for overlapping elements. Move operations
|
|
39
|
-
* are only valid if the element does not collide with another element after moving.
|
|
46
|
+
* are only valid if the element does not collide with another element/node after moving.
|
|
40
47
|
*/
|
|
41
48
|
export declare class NoOverlapMovementRestrictor implements IMovementRestrictor {
|
|
42
49
|
cssClasses: string[];
|
|
43
50
|
validate(element: GModelElement, newLocation?: Point): boolean;
|
|
44
|
-
protected
|
|
51
|
+
protected createMoveElementContext(element: GModelElement, newLocation: Point): MoveElementContext;
|
|
52
|
+
protected isBoundsRelevant(element: GModelElement, moveContext: MoveElementContext): element is BoundsAwareModelElement;
|
|
45
53
|
protected areOverlapping(element1: BoundsAwareModelElement, element2: BoundsAwareModelElement): boolean;
|
|
46
54
|
}
|
|
47
55
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"movement-restrictor.d.ts","sourceRoot":"","sources":["../../../src/features/change-bounds/movement-restrictor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAClF,OAAO,
|
|
1
|
+
{"version":3,"file":"movement-restrictor.d.ts","sourceRoot":"","sources":["../../../src/features/change-bounds/movement-restrictor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAClF,OAAO,EAIH,aAAa,EACb,KAAK,EAIL,KAAK,EAER,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAqB,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC9F,OAAO,EAAE,uBAAuB,EAA2B,MAAM,yBAAyB,CAAC;AAE3F,OAAO,EAAE,gBAAgB,EAAiB,MAAM,gBAAgB,CAAC;AAGjE;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAChC;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;IAC/D;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,aAAa,CAAC;IACvB,oBAAoB,EAAE,uBAAuB,CAAC;IAC9C,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;IACrC,UAAU,EAAE,KAAK,EAAE,CAAC;CACvB;AAED;;;GAGG;AACH,qBACa,2BAA4B,YAAW,mBAAmB;IACnE,UAAU,WAA4B;IAEtC,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,KAAK,GAAG,OAAO;IAc9D,SAAS,CAAC,wBAAwB,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,GAAG,kBAAkB;IAgBlG,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,GAAG,OAAO,IAAI,uBAAuB;IA0BvH,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,uBAAuB,EAAE,QAAQ,EAAE,uBAAuB,GAAG,OAAO;CAG1G;AAED;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC7C,OAAO,EAAE,aAAa,EACtB,kBAAkB,EAAE,mBAAmB,GACxC,uBAAuB,CAMzB;AAED;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC7C,OAAO,EAAE,aAAa,EACtB,kBAAkB,EAAE,mBAAmB,GACxC,uBAAuB,CAOzB;AAED,wBAAgB,2BAA2B,CACvC,OAAO,EAAE,aAAa,EACtB,kBAAkB,EAAE,mBAAmB,EACvC,KAAK,EAAE,OAAO,GACf,uBAAuB,CAIzB"}
|
|
@@ -11,7 +11,7 @@ exports.createMovementRestrictionFeedback = createMovementRestrictionFeedback;
|
|
|
11
11
|
exports.removeMovementRestrictionFeedback = removeMovementRestrictionFeedback;
|
|
12
12
|
exports.movementRestrictionFeedback = movementRestrictionFeedback;
|
|
13
13
|
/********************************************************************************
|
|
14
|
-
* Copyright (c) 2019-
|
|
14
|
+
* Copyright (c) 2019-2025 EclipseSource and others.
|
|
15
15
|
*
|
|
16
16
|
* This program and the accompanying materials are made available under the
|
|
17
17
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -28,33 +28,60 @@ exports.movementRestrictionFeedback = movementRestrictionFeedback;
|
|
|
28
28
|
const sprotty_1 = require("@eclipse-glsp/sprotty");
|
|
29
29
|
const inversify_1 = require("inversify");
|
|
30
30
|
const css_feedback_1 = require("../../base/feedback/css-feedback");
|
|
31
|
+
const gmodel_util_1 = require("../../utils/gmodel-util");
|
|
31
32
|
const viewpoint_util_1 = require("../../utils/viewpoint-util");
|
|
32
|
-
const model_1 = require("
|
|
33
|
+
const model_1 = require("../hints/model");
|
|
34
|
+
const model_2 = require("./model");
|
|
33
35
|
/**
|
|
34
36
|
* A `IMovementRestrictor` that checks for overlapping elements. Move operations
|
|
35
|
-
* are only valid if the element does not collide with another element after moving.
|
|
37
|
+
* are only valid if the element does not collide with another element/node after moving.
|
|
36
38
|
*/
|
|
37
39
|
let NoOverlapMovementRestrictor = class NoOverlapMovementRestrictor {
|
|
38
40
|
constructor() {
|
|
39
41
|
this.cssClasses = ['movement-not-allowed'];
|
|
40
42
|
}
|
|
41
43
|
validate(element, newLocation) {
|
|
42
|
-
if (!(0, sprotty_1.isMoveable)(element) || !newLocation) {
|
|
44
|
+
if (!(element instanceof sprotty_1.GChildElement) || !(0, sprotty_1.isMoveable)(element) || !newLocation) {
|
|
43
45
|
return false;
|
|
44
46
|
}
|
|
45
|
-
|
|
47
|
+
const moveContext = this.createMoveElementContext(element, newLocation);
|
|
48
|
+
const elementsToValidate = Array.from(element.root.index.all()).filter(e => this.isBoundsRelevant(e, moveContext));
|
|
49
|
+
const valid = !elementsToValidate.some(e => this.areOverlapping(e, moveContext.elementAtNewLocation));
|
|
50
|
+
return valid;
|
|
51
|
+
}
|
|
52
|
+
createMoveElementContext(element, newLocation) {
|
|
53
|
+
const parentContainers = (0, gmodel_util_1.getParents)(element, model_1.isContainable);
|
|
54
|
+
const childNodes = (0, gmodel_util_1.getChildren)(element, (0, sprotty_1.toTypeGuard)(sprotty_1.GNode));
|
|
55
|
+
// Create a mock element at the newLocation for overlap checking
|
|
46
56
|
const dimensions = (0, sprotty_1.isBoundsAware)(element) ? element.bounds : { width: 1, height: 1 };
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
57
|
+
const elementAtNewLocation = Object.create(element);
|
|
58
|
+
elementAtNewLocation.bounds = { ...dimensions, ...newLocation };
|
|
59
|
+
return {
|
|
60
|
+
element,
|
|
61
|
+
elementAtNewLocation,
|
|
62
|
+
parentContainers,
|
|
63
|
+
childNodes
|
|
64
|
+
};
|
|
55
65
|
}
|
|
56
|
-
isBoundsRelevant(element,
|
|
57
|
-
|
|
66
|
+
isBoundsRelevant(element, moveContext) {
|
|
67
|
+
var _a;
|
|
68
|
+
// Only consider GNodes that are not the element being moved (or one of its children)
|
|
69
|
+
if (!(element instanceof sprotty_1.GNode) ||
|
|
70
|
+
element.id === moveContext.element.id ||
|
|
71
|
+
moveContext.childNodes.some(child => child.id === element.id)) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
// Do not consider parent containers of the element being moved
|
|
75
|
+
if (moveContext.parentContainers.length > 0 && moveContext.parentContainers.some(container => container.id === element.id)) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
// If the element is a ghost element (node creation), don't consider overlap checks for potential parent containers
|
|
79
|
+
if (((_a = moveContext.element.cssClasses) === null || _a === void 0 ? void 0 : _a.includes(css_feedback_1.CSS_GHOST_ELEMENT)) &&
|
|
80
|
+
(0, model_1.isContainable)(element) &&
|
|
81
|
+
element.isContainableElement(moveContext.element.type)) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
return true;
|
|
58
85
|
}
|
|
59
86
|
areOverlapping(element1, element2) {
|
|
60
87
|
return sprotty_1.Bounds.overlap((0, viewpoint_util_1.toAbsoluteBounds)(element1), (0, viewpoint_util_1.toAbsoluteBounds)(element2));
|
|
@@ -73,7 +100,7 @@ exports.NoOverlapMovementRestrictor = NoOverlapMovementRestrictor = __decorate([
|
|
|
73
100
|
function createMovementRestrictionFeedback(element, movementRestrictor) {
|
|
74
101
|
const elements = [element];
|
|
75
102
|
if (element instanceof sprotty_1.GParentElement) {
|
|
76
|
-
element.children.filter(child => child instanceof
|
|
103
|
+
element.children.filter(child => child instanceof model_2.GResizeHandle).forEach(e => elements.push(e));
|
|
77
104
|
}
|
|
78
105
|
return css_feedback_1.ModifyCSSFeedbackAction.create({ elements, add: movementRestrictor.cssClasses });
|
|
79
106
|
}
|
|
@@ -86,7 +113,7 @@ function createMovementRestrictionFeedback(element, movementRestrictor) {
|
|
|
86
113
|
function removeMovementRestrictionFeedback(element, movementRestrictor) {
|
|
87
114
|
const elements = [element];
|
|
88
115
|
if (element instanceof sprotty_1.GParentElement) {
|
|
89
|
-
element.children.filter(child => child instanceof
|
|
116
|
+
element.children.filter(child => child instanceof model_2.GResizeHandle).forEach(e => elements.push(e));
|
|
90
117
|
}
|
|
91
118
|
return css_feedback_1.ModifyCSSFeedbackAction.create({ elements, remove: movementRestrictor.cssClasses });
|
|
92
119
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"movement-restrictor.js","sourceRoot":"","sources":["../../../src/features/change-bounds/movement-restrictor.ts"],"names":[],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"movement-restrictor.js","sourceRoot":"","sources":["../../../src/features/change-bounds/movement-restrictor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/********************************************************************************
|
|
2
|
-
* Copyright (c) 2019-
|
|
2
|
+
* Copyright (c) 2019-2025 EclipseSource and others.
|
|
3
3
|
*
|
|
4
4
|
* This program and the accompanying materials are made available under the
|
|
5
5
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decoration-module.d.ts","sourceRoot":"","sources":["../../../src/features/decoration/decoration-module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAClF,OAAO,EAAE,aAAa,EAAwB,MAAM,uBAAuB,CAAC;AAC5E,OAAO,6BAA6B,CAAC;AAGrC,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"decoration-module.d.ts","sourceRoot":"","sources":["../../../src/features/decoration/decoration-module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAClF,OAAO,EAAE,aAAa,EAAwB,MAAM,uBAAuB,CAAC;AAC5E,OAAO,6BAA6B,CAAC;AAGrC,eAAO,MAAM,gBAAgB,eAM5B,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.decorationModule = void 0;
|
|
4
4
|
/********************************************************************************
|
|
5
|
-
* Copyright (c) 2019-
|
|
5
|
+
* Copyright (c) 2019-2025 EclipseSource and others.
|
|
6
6
|
*
|
|
7
7
|
* This program and the accompanying materials are made available under the
|
|
8
8
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -21,5 +21,6 @@ require("../../../css/decoration.css");
|
|
|
21
21
|
const decoration_placer_1 = require("./decoration-placer");
|
|
22
22
|
exports.decorationModule = new sprotty_1.FeatureModule(bind => {
|
|
23
23
|
(0, sprotty_1.bindAsService)(bind, sprotty_1.TYPES.IVNodePostprocessor, decoration_placer_1.GlspDecorationPlacer);
|
|
24
|
+
bind(sprotty_1.TYPES.ISvgExportPostprocessor).toService(decoration_placer_1.GlspDecorationPlacer);
|
|
24
25
|
}, { featureId: Symbol('decoration') });
|
|
25
26
|
//# sourceMappingURL=decoration-module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decoration-module.js","sourceRoot":"","sources":["../../../src/features/decoration/decoration-module.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;kFAckF;AAClF,mDAA4E;AAC5E,uCAAqC;AACrC,2DAA2D;AAE9C,QAAA,gBAAgB,GAAG,IAAI,uBAAa,CAC7C,IAAI,CAAC,EAAE;IACH,IAAA,uBAAa,EAAC,IAAI,EAAE,eAAK,CAAC,mBAAmB,EAAE,wCAAoB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"decoration-module.js","sourceRoot":"","sources":["../../../src/features/decoration/decoration-module.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;kFAckF;AAClF,mDAA4E;AAC5E,uCAAqC;AACrC,2DAA2D;AAE9C,QAAA,gBAAgB,GAAG,IAAI,uBAAa,CAC7C,IAAI,CAAC,EAAE;IACH,IAAA,uBAAa,EAAC,IAAI,EAAE,eAAK,CAAC,mBAAmB,EAAE,wCAAoB,CAAC,CAAC;IACrE,IAAI,CAAC,eAAK,CAAC,uBAAuB,CAAC,CAAC,SAAS,CAAC,wCAAoB,CAAC,CAAC;AACxE,CAAC,EACD,EAAE,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,CACtC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/********************************************************************************
|
|
2
|
-
* Copyright (c) 2019-
|
|
2
|
+
* Copyright (c) 2019-2025 EclipseSource and others.
|
|
3
3
|
*
|
|
4
4
|
* This program and the accompanying materials are made available under the
|
|
5
5
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -13,9 +13,15 @@
|
|
|
13
13
|
*
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
|
-
import { Decoration, DecorationPlacer, GModelElement, Point } from '@eclipse-glsp/sprotty';
|
|
17
|
-
|
|
16
|
+
import { Action, DOMHelper, Decoration, DecorationPlacer, GModelElement, ISvgExportPostProcessor, LazyInjector, Point } from '@eclipse-glsp/sprotty';
|
|
17
|
+
import { EditorContextService } from '../../base/editor-context-service';
|
|
18
|
+
export declare class GlspDecorationPlacer extends DecorationPlacer implements ISvgExportPostProcessor {
|
|
18
19
|
protected static readonly DECORATION_OFFSET: Point;
|
|
20
|
+
protected domHelper: DOMHelper;
|
|
21
|
+
protected lazyInjector: LazyInjector;
|
|
22
|
+
get editorContextService(): EditorContextService;
|
|
19
23
|
protected getPosition(element: GModelElement & Decoration): Point;
|
|
24
|
+
postUpdate(cause?: Action): void;
|
|
25
|
+
postUpdate(element: SVGSVGElement, cause?: Action): void;
|
|
20
26
|
}
|
|
21
27
|
//# sourceMappingURL=decoration-placer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decoration-placer.d.ts","sourceRoot":"","sources":["../../../src/features/decoration/decoration-placer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAClF,OAAO,
|
|
1
|
+
{"version":3,"file":"decoration-placer.d.ts","sourceRoot":"","sources":["../../../src/features/decoration/decoration-placer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAClF,OAAO,EACH,MAAM,EACN,SAAS,EACT,UAAU,EACV,gBAAgB,EAEhB,aAAa,EAEb,uBAAuB,EACvB,YAAY,EACZ,KAAK,EAIR,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAGzE,qBACa,oBAAqB,SAAQ,gBAAiB,YAAW,uBAAuB;IACzF,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,KAAK,CAAoB;IAEtE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC;IAG/B,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IAErC,IAAI,oBAAoB,IAAI,oBAAoB,CAE/C;cAEkB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,UAAU,GAAG,KAAK;IAajE,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAEhC,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;CAiBpE"}
|
|
@@ -5,11 +5,14 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
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
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
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
|
+
};
|
|
8
11
|
var GlspDecorationPlacer_1;
|
|
9
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
13
|
exports.GlspDecorationPlacer = void 0;
|
|
11
14
|
/********************************************************************************
|
|
12
|
-
* Copyright (c) 2019-
|
|
15
|
+
* Copyright (c) 2019-2025 EclipseSource and others.
|
|
13
16
|
*
|
|
14
17
|
* This program and the accompanying materials are made available under the
|
|
15
18
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -25,7 +28,12 @@ exports.GlspDecorationPlacer = void 0;
|
|
|
25
28
|
********************************************************************************/
|
|
26
29
|
const sprotty_1 = require("@eclipse-glsp/sprotty");
|
|
27
30
|
const inversify_1 = require("inversify");
|
|
31
|
+
const editor_context_service_1 = require("../../base/editor-context-service");
|
|
32
|
+
const gmodel_util_1 = require("../../utils/gmodel-util");
|
|
28
33
|
let GlspDecorationPlacer = GlspDecorationPlacer_1 = class GlspDecorationPlacer extends sprotty_1.DecorationPlacer {
|
|
34
|
+
get editorContextService() {
|
|
35
|
+
return this.lazyInjector.get(editor_context_service_1.EditorContextService);
|
|
36
|
+
}
|
|
29
37
|
getPosition(element) {
|
|
30
38
|
if (element instanceof sprotty_1.GChildElement && element.parent instanceof sprotty_1.GRoutableElement) {
|
|
31
39
|
return super.getPosition(element);
|
|
@@ -38,9 +46,32 @@ let GlspDecorationPlacer = GlspDecorationPlacer_1 = class GlspDecorationPlacer e
|
|
|
38
46
|
}
|
|
39
47
|
return sprotty_1.Point.ORIGIN;
|
|
40
48
|
}
|
|
49
|
+
postUpdate(elementOrCause, _cause) {
|
|
50
|
+
// Called as HiddenVNodePostprocessor => no-op
|
|
51
|
+
if (!elementOrCause || sprotty_1.Action.is(elementOrCause)) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
// Called as ISvgExportPostProcessor
|
|
55
|
+
// Adjust the position of all decorations in the exported SVG
|
|
56
|
+
const svg = elementOrCause;
|
|
57
|
+
const translate = `translate(-${GlspDecorationPlacer_1.DECORATION_OFFSET.x}px, -${GlspDecorationPlacer_1.DECORATION_OFFSET.y}px)`;
|
|
58
|
+
(0, gmodel_util_1.filter)(this.editorContextService.modelRoot.index, sprotty_1.isDecoration).forEach(decoration => {
|
|
59
|
+
const domId = this.domHelper.createUniqueDOMElementId(decoration);
|
|
60
|
+
const element = svg.querySelector(`#${domId}`);
|
|
61
|
+
element.style.transform = translate;
|
|
62
|
+
});
|
|
63
|
+
}
|
|
41
64
|
};
|
|
42
65
|
exports.GlspDecorationPlacer = GlspDecorationPlacer;
|
|
43
66
|
GlspDecorationPlacer.DECORATION_OFFSET = { x: 12, y: 10 };
|
|
67
|
+
__decorate([
|
|
68
|
+
(0, inversify_1.inject)(sprotty_1.TYPES.DOMHelper),
|
|
69
|
+
__metadata("design:type", sprotty_1.DOMHelper)
|
|
70
|
+
], GlspDecorationPlacer.prototype, "domHelper", void 0);
|
|
71
|
+
__decorate([
|
|
72
|
+
(0, inversify_1.inject)(sprotty_1.LazyInjector),
|
|
73
|
+
__metadata("design:type", Object)
|
|
74
|
+
], GlspDecorationPlacer.prototype, "lazyInjector", void 0);
|
|
44
75
|
exports.GlspDecorationPlacer = GlspDecorationPlacer = GlspDecorationPlacer_1 = __decorate([
|
|
45
76
|
(0, inversify_1.injectable)()
|
|
46
77
|
], GlspDecorationPlacer);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decoration-placer.js","sourceRoot":"","sources":["../../../src/features/decoration/decoration-placer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"decoration-placer.js","sourceRoot":"","sources":["../../../src/features/decoration/decoration-placer.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;kFAckF;AAClF,mDAc+B;AAC/B,yCAA+C;AAC/C,8EAAyE;AACzE,yDAAiD;AAG1C,IAAM,oBAAoB,4BAA1B,MAAM,oBAAqB,SAAQ,0BAAgB;IAQtD,IAAI,oBAAoB;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,6CAAoB,CAAC,CAAC;IACvD,CAAC;IAEkB,WAAW,CAAC,OAAmC;QAC9D,IAAI,OAAO,YAAY,uBAAa,IAAI,OAAO,CAAC,MAAM,YAAY,0BAAgB,EAAE,CAAC;YACjF,OAAO,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,IAAA,oBAAU,EAAC,OAAO,CAAC,EAAE,CAAC;YACtB,OAAO;gBACH,CAAC,EAAE,CAAC,sBAAoB,CAAC,iBAAiB,CAAC,CAAC;gBAC5C,CAAC,EAAE,CAAC,sBAAoB,CAAC,iBAAiB,CAAC,CAAC;aAC/C,CAAC;QACN,CAAC;QACD,OAAO,eAAK,CAAC,MAAM,CAAC;IACxB,CAAC;IAKQ,UAAU,CAAC,cAAuC,EAAE,MAAe;QACxE,8CAA8C;QAC9C,IAAI,CAAC,cAAc,IAAI,gBAAM,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/C,OAAO;QACX,CAAC;QAED,oCAAoC;QACpC,6DAA6D;QAC7D,MAAM,GAAG,GAAG,cAAc,CAAC;QAC3B,MAAM,SAAS,GAAG,cAAc,sBAAoB,CAAC,iBAAiB,CAAC,CAAC,QAAQ,sBAAoB,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC;QAC9H,IAAA,oBAAM,EAAC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,KAAK,EAAE,sBAAY,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YACjF,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAa,IAAI,KAAK,EAAE,CAAC,CAAC;YAC3D,OAAQ,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC;;AA3CQ,oDAAoB;AACH,sCAAiB,GAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,AAA1B,CAA2B;AAE5D;IADT,IAAA,kBAAM,EAAC,eAAK,CAAC,SAAS,CAAC;8BACH,mBAAS;uDAAC;AAGrB;IADT,IAAA,kBAAM,EAAC,sBAAY,CAAC;;0DACgB;+BAN5B,oBAAoB;IADhC,IAAA,sBAAU,GAAE;GACA,oBAAoB,CA4ChC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/********************************************************************************
|
|
2
|
-
* Copyright (c) 2019-
|
|
2
|
+
* Copyright (c) 2019-2025 EclipseSource and others.
|
|
3
3
|
*
|
|
4
4
|
* This program and the accompanying materials are made available under the
|
|
5
5
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
|
-
import { BoundsAware, EdgeRouterRegistry, ElementAndBounds, ElementAndRoutingPoints, FluentIterable, GModelElement, GModelElementSchema, GParentElement, GRoutableElement, GRoutingHandle, Locateable, ModelIndexImpl, Point, RoutedPoint, Selectable, TypeGuard } from '@eclipse-glsp/sprotty';
|
|
16
|
+
import { BoundsAware, EdgeRouterRegistry, ElementAndBounds, ElementAndRoutingPoints, FluentIterable, GChildElement, GModelElement, GModelElementSchema, GParentElement, GRoutableElement, GRoutingHandle, Locateable, ModelIndexImpl, Point, RoutedPoint, Selectable, TypeGuard } from '@eclipse-glsp/sprotty';
|
|
17
17
|
import { ResizeHandleLocation } from '../features/change-bounds/model';
|
|
18
18
|
/**
|
|
19
19
|
* Helper type to represent a filter predicate for {@link GModelElement}s. This is used to retrieve
|
|
@@ -45,6 +45,36 @@ export declare function forEachElement<T>(index: ModelIndexImpl, predicate: Mode
|
|
|
45
45
|
* (correctly casted to also include the additional type of the predicate).
|
|
46
46
|
*/
|
|
47
47
|
export declare function getMatchingElements<T>(index: ModelIndexImpl, predicate: ModelFilterPredicate<T>): (GModelElement & T)[];
|
|
48
|
+
/**
|
|
49
|
+
* Retrieves an array of all parent elements for the given element that match the given type guard.
|
|
50
|
+
* @param element The {@link GModelElement} for which the parent elements should be retrieved.
|
|
51
|
+
* @param guard The type guard that should be used.
|
|
52
|
+
* @returns An array of all parent elements that match the type guard
|
|
53
|
+
* (correctly casted to also include the additional type of the guard).
|
|
54
|
+
*/
|
|
55
|
+
export declare function getParents<T extends GParentElement>(element: GModelElement, guard: TypeGuard<T>): T[];
|
|
56
|
+
/**
|
|
57
|
+
* Retrieves an array of all parent elements for the given element that match the given {@link ModelFilterPredicate}.
|
|
58
|
+
* @param element The {@link GModelElement} for which the parent elements should be retrieved.
|
|
59
|
+
* @param predicate The filter predicate that should be used.
|
|
60
|
+
* @returns An array of all parent elements that match the filter predicate
|
|
61
|
+
* (correctly casted to also include the additional type of the predicate).
|
|
62
|
+
*/
|
|
63
|
+
export declare function getParents<T>(element: GModelElement, predicate: ModelFilterPredicate<T>): (GParentElement & T)[];
|
|
64
|
+
/** * Retrieves an array of all child elements for the given element that match the given type guard.
|
|
65
|
+
* @param element The {@link GModelElement} for which the child elements should be retrieved.
|
|
66
|
+
* @param guard The type guard that should be used.
|
|
67
|
+
* @returns An array of all child elements that match the type guard
|
|
68
|
+
* (correctly casted to also include the additional type of the guard).
|
|
69
|
+
*/
|
|
70
|
+
export declare function getChildren<T extends GChildElement>(element: GModelElement, guard: TypeGuard<T>): T[];
|
|
71
|
+
/** * Retrieves an array of all child elements for the given element that match the given {@link ModelFilterPredicate}.
|
|
72
|
+
* @param element The {@link GModelElement} for which the child elements should be retrieved.
|
|
73
|
+
* @param predicate The filter predicate that should be used.
|
|
74
|
+
* @returns An array of all child elements that match the filter predicate
|
|
75
|
+
* (correctly casted to also include the additional type of the predicate).
|
|
76
|
+
*/
|
|
77
|
+
export declare function getChildren<T>(element: GModelElement, predicate: ModelFilterPredicate<T>): (GChildElement & T)[];
|
|
48
78
|
/**
|
|
49
79
|
* Invokes the given model index to retrieve the corresponding model elements for the given set of ids. Ids that
|
|
50
80
|
* have no corresponding element in the index will be ignored.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gmodel-util.d.ts","sourceRoot":"","sources":["../../src/utils/gmodel-util.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAClF,OAAO,EACH,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,
|
|
1
|
+
{"version":3,"file":"gmodel-util.d.ts","sourceRoot":"","sources":["../../src/utils/gmodel-util.ts"],"names":[],"mappings":"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"}
|
package/lib/utils/gmodel-util.js
CHANGED
|
@@ -4,6 +4,8 @@ exports.ROUTE_KINDS = exports.ROUTING_POINT_KINDS = exports.ALL_ROUTING_POINTS =
|
|
|
4
4
|
exports.filter = filter;
|
|
5
5
|
exports.forEachElement = forEachElement;
|
|
6
6
|
exports.getMatchingElements = getMatchingElements;
|
|
7
|
+
exports.getParents = getParents;
|
|
8
|
+
exports.getChildren = getChildren;
|
|
7
9
|
exports.getElements = getElements;
|
|
8
10
|
exports.getSelectedElementCount = getSelectedElementCount;
|
|
9
11
|
exports.hasSelectedElements = hasSelectedElements;
|
|
@@ -33,7 +35,7 @@ exports.getDescendantIds = getDescendantIds;
|
|
|
33
35
|
exports.isNotDescendantOfAnyElement = isNotDescendantOfAnyElement;
|
|
34
36
|
exports.removeDescendants = removeDescendants;
|
|
35
37
|
/********************************************************************************
|
|
36
|
-
* Copyright (c) 2019-
|
|
38
|
+
* Copyright (c) 2019-2025 EclipseSource and others.
|
|
37
39
|
*
|
|
38
40
|
* This program and the accompanying materials are made available under the
|
|
39
41
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -78,6 +80,32 @@ function forEachElement(index, predicate, runnable) {
|
|
|
78
80
|
function getMatchingElements(index, predicate) {
|
|
79
81
|
return Array.from(filter(index, predicate));
|
|
80
82
|
}
|
|
83
|
+
function getParents(element, filterPredicate) {
|
|
84
|
+
const parents = [];
|
|
85
|
+
let current = element;
|
|
86
|
+
while (current instanceof sprotty_1.GChildElement) {
|
|
87
|
+
const parent = current.parent;
|
|
88
|
+
if (filterPredicate(parent)) {
|
|
89
|
+
parents.push(parent);
|
|
90
|
+
}
|
|
91
|
+
current = parent;
|
|
92
|
+
}
|
|
93
|
+
return parents;
|
|
94
|
+
}
|
|
95
|
+
function getChildren(element, filterPredicate) {
|
|
96
|
+
const children = [];
|
|
97
|
+
if (element instanceof sprotty_1.GParentElement) {
|
|
98
|
+
for (const child of element.children) {
|
|
99
|
+
if (filterPredicate(child)) {
|
|
100
|
+
children.push(child);
|
|
101
|
+
}
|
|
102
|
+
if (child instanceof sprotty_1.GParentElement) {
|
|
103
|
+
children.push(...getChildren(child, filterPredicate));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return children;
|
|
108
|
+
}
|
|
81
109
|
/**
|
|
82
110
|
* Invokes the given model index to retrieve the corresponding model elements for the given set of ids. Ids that
|
|
83
111
|
* have no corresponding element in the index will be ignored.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gmodel-util.js","sourceRoot":"","sources":["../../src/utils/gmodel-util.ts"],"names":[],"mappings":";;;AA0DA,wBAEC;AASD,wCAMC;AASD,kDAEC;
|
|
1
|
+
{"version":3,"file":"gmodel-util.js","sourceRoot":"","sources":["../../src/utils/gmodel-util.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eclipse-glsp/client",
|
|
3
|
-
"version": "2.6.0-next.
|
|
3
|
+
"version": "2.6.0-next.8+8c40df4",
|
|
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.6.0-next.
|
|
49
|
+
"@eclipse-glsp/sprotty": "2.6.0-next.8+8c40df4",
|
|
50
50
|
"autocompleter": "^9.1.2",
|
|
51
51
|
"file-saver": "^2.0.5",
|
|
52
52
|
"lodash": "4.17.21",
|
|
@@ -63,5 +63,5 @@
|
|
|
63
63
|
"publishConfig": {
|
|
64
64
|
"access": "public"
|
|
65
65
|
},
|
|
66
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "8c40df47b964efec74056b221a5827c1174bd1a1"
|
|
67
67
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/********************************************************************************
|
|
2
|
-
* Copyright (c) 2022-
|
|
2
|
+
* Copyright (c) 2022-2025 EclipseSource and others.
|
|
3
3
|
*
|
|
4
4
|
* This program and the accompanying materials are made available under the
|
|
5
5
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -65,6 +65,10 @@ export class GLSPHiddenBoundsUpdater extends HiddenBoundsUpdater {
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
override postUpdate(cause?: Action): void {
|
|
68
|
+
if (cause === undefined || cause.kind !== RequestBoundsAction.KIND) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
68
72
|
if (LocalRequestBoundsAction.is(cause) && cause.elementIDs) {
|
|
69
73
|
this.focusOnElements(cause.elementIDs);
|
|
70
74
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/********************************************************************************
|
|
2
|
-
* Copyright (c) 2019-
|
|
2
|
+
* Copyright (c) 2019-2025 EclipseSource and others.
|
|
3
3
|
*
|
|
4
4
|
* This program and the accompanying materials are made available under the
|
|
5
5
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -13,11 +13,23 @@
|
|
|
13
13
|
*
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
Bounds,
|
|
18
|
+
Dimension,
|
|
19
|
+
GChildElement,
|
|
20
|
+
GModelElement,
|
|
21
|
+
GNode,
|
|
22
|
+
GParentElement,
|
|
23
|
+
isBoundsAware,
|
|
24
|
+
isMoveable,
|
|
25
|
+
Point,
|
|
26
|
+
toTypeGuard
|
|
27
|
+
} from '@eclipse-glsp/sprotty';
|
|
17
28
|
import { injectable } from 'inversify';
|
|
18
|
-
import { ModifyCSSFeedbackAction } from '../../base/feedback/css-feedback';
|
|
19
|
-
import { BoundsAwareModelElement } from '../../utils/gmodel-util';
|
|
29
|
+
import { CSS_GHOST_ELEMENT, ModifyCSSFeedbackAction } from '../../base/feedback/css-feedback';
|
|
30
|
+
import { BoundsAwareModelElement, getChildren, getParents } from '../../utils/gmodel-util';
|
|
20
31
|
import { toAbsoluteBounds } from '../../utils/viewpoint-util';
|
|
32
|
+
import { ContainerElement, isContainable } from '../hints/model';
|
|
21
33
|
import { GResizeHandle } from './model';
|
|
22
34
|
|
|
23
35
|
/**
|
|
@@ -39,34 +51,75 @@ export interface IMovementRestrictor {
|
|
|
39
51
|
cssClasses?: string[];
|
|
40
52
|
}
|
|
41
53
|
|
|
54
|
+
export interface MoveElementContext {
|
|
55
|
+
element: GModelElement;
|
|
56
|
+
elementAtNewLocation: BoundsAwareModelElement;
|
|
57
|
+
parentContainers: ContainerElement[];
|
|
58
|
+
childNodes: GNode[];
|
|
59
|
+
}
|
|
60
|
+
|
|
42
61
|
/**
|
|
43
62
|
* A `IMovementRestrictor` that checks for overlapping elements. Move operations
|
|
44
|
-
* are only valid if the element does not collide with another element after moving.
|
|
63
|
+
* are only valid if the element does not collide with another element/node after moving.
|
|
45
64
|
*/
|
|
46
65
|
@injectable()
|
|
47
66
|
export class NoOverlapMovementRestrictor implements IMovementRestrictor {
|
|
48
67
|
cssClasses = ['movement-not-allowed'];
|
|
49
68
|
|
|
50
69
|
validate(element: GModelElement, newLocation?: Point): boolean {
|
|
51
|
-
if (!isMoveable(element) || !newLocation) {
|
|
70
|
+
if (!(element instanceof GChildElement) || !isMoveable(element) || !newLocation) {
|
|
52
71
|
return false;
|
|
53
72
|
}
|
|
54
|
-
|
|
73
|
+
|
|
74
|
+
const moveContext = this.createMoveElementContext(element, newLocation);
|
|
75
|
+
const elementsToValidate = Array.from(element.root.index.all()).filter(e =>
|
|
76
|
+
this.isBoundsRelevant(e, moveContext)
|
|
77
|
+
) as BoundsAwareModelElement[];
|
|
78
|
+
|
|
79
|
+
const valid = !elementsToValidate.some(e => this.areOverlapping(e, moveContext.elementAtNewLocation));
|
|
80
|
+
return valid;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
protected createMoveElementContext(element: GModelElement, newLocation: Point): MoveElementContext {
|
|
84
|
+
const parentContainers = getParents(element, isContainable);
|
|
85
|
+
const childNodes = getChildren(element, toTypeGuard(GNode));
|
|
86
|
+
// Create a mock element at the newLocation for overlap checking
|
|
55
87
|
const dimensions: Dimension = isBoundsAware(element) ? element.bounds : { width: 1, height: 1 };
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
).some(e => this.areOverlapping(e, ghostElement));
|
|
88
|
+
const elementAtNewLocation = Object.create(element) as BoundsAwareModelElement as BoundsAwareModelElement;
|
|
89
|
+
elementAtNewLocation.bounds = { ...dimensions, ...newLocation };
|
|
90
|
+
|
|
91
|
+
return {
|
|
92
|
+
element,
|
|
93
|
+
elementAtNewLocation,
|
|
94
|
+
parentContainers,
|
|
95
|
+
childNodes
|
|
96
|
+
};
|
|
66
97
|
}
|
|
67
98
|
|
|
68
|
-
protected isBoundsRelevant(element: GModelElement,
|
|
69
|
-
|
|
99
|
+
protected isBoundsRelevant(element: GModelElement, moveContext: MoveElementContext): element is BoundsAwareModelElement {
|
|
100
|
+
// Only consider GNodes that are not the element being moved (or one of its children)
|
|
101
|
+
if (
|
|
102
|
+
!(element instanceof GNode) ||
|
|
103
|
+
element.id === moveContext.element.id ||
|
|
104
|
+
moveContext.childNodes.some(child => child.id === element.id)
|
|
105
|
+
) {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Do not consider parent containers of the element being moved
|
|
110
|
+
if (moveContext.parentContainers.length > 0 && moveContext.parentContainers.some(container => container.id === element.id)) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// If the element is a ghost element (node creation), don't consider overlap checks for potential parent containers
|
|
115
|
+
if (
|
|
116
|
+
moveContext.element.cssClasses?.includes(CSS_GHOST_ELEMENT) &&
|
|
117
|
+
isContainable(element) &&
|
|
118
|
+
element.isContainableElement(moveContext.element.type)
|
|
119
|
+
) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
return true;
|
|
70
123
|
}
|
|
71
124
|
|
|
72
125
|
protected areOverlapping(element1: BoundsAwareModelElement, element2: BoundsAwareModelElement): boolean {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/********************************************************************************
|
|
2
|
-
* Copyright (c) 2019-
|
|
2
|
+
* Copyright (c) 2019-2025 EclipseSource and others.
|
|
3
3
|
*
|
|
4
4
|
* This program and the accompanying materials are made available under the
|
|
5
5
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -20,6 +20,7 @@ import { GlspDecorationPlacer } from './decoration-placer';
|
|
|
20
20
|
export const decorationModule = new FeatureModule(
|
|
21
21
|
bind => {
|
|
22
22
|
bindAsService(bind, TYPES.IVNodePostprocessor, GlspDecorationPlacer);
|
|
23
|
+
bind(TYPES.ISvgExportPostprocessor).toService(GlspDecorationPlacer);
|
|
23
24
|
},
|
|
24
25
|
{ featureId: Symbol('decoration') }
|
|
25
26
|
);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/********************************************************************************
|
|
2
|
-
* Copyright (c) 2019-
|
|
2
|
+
* Copyright (c) 2019-2025 EclipseSource and others.
|
|
3
3
|
*
|
|
4
4
|
* This program and the accompanying materials are made available under the
|
|
5
5
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -13,12 +13,37 @@
|
|
|
13
13
|
*
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
|
-
import {
|
|
17
|
-
|
|
16
|
+
import {
|
|
17
|
+
Action,
|
|
18
|
+
DOMHelper,
|
|
19
|
+
Decoration,
|
|
20
|
+
DecorationPlacer,
|
|
21
|
+
GChildElement,
|
|
22
|
+
GModelElement,
|
|
23
|
+
GRoutableElement,
|
|
24
|
+
ISvgExportPostProcessor,
|
|
25
|
+
LazyInjector,
|
|
26
|
+
Point,
|
|
27
|
+
TYPES,
|
|
28
|
+
isDecoration,
|
|
29
|
+
isSizeable
|
|
30
|
+
} from '@eclipse-glsp/sprotty';
|
|
31
|
+
import { inject, injectable } from 'inversify';
|
|
32
|
+
import { EditorContextService } from '../../base/editor-context-service';
|
|
33
|
+
import { filter } from '../../utils/gmodel-util';
|
|
18
34
|
|
|
19
35
|
@injectable()
|
|
20
|
-
export class GlspDecorationPlacer extends DecorationPlacer {
|
|
36
|
+
export class GlspDecorationPlacer extends DecorationPlacer implements ISvgExportPostProcessor {
|
|
21
37
|
protected static readonly DECORATION_OFFSET: Point = { x: 12, y: 10 };
|
|
38
|
+
@inject(TYPES.DOMHelper)
|
|
39
|
+
protected domHelper: DOMHelper;
|
|
40
|
+
|
|
41
|
+
@inject(LazyInjector)
|
|
42
|
+
protected lazyInjector: LazyInjector;
|
|
43
|
+
|
|
44
|
+
get editorContextService(): EditorContextService {
|
|
45
|
+
return this.lazyInjector.get(EditorContextService);
|
|
46
|
+
}
|
|
22
47
|
|
|
23
48
|
protected override getPosition(element: GModelElement & Decoration): Point {
|
|
24
49
|
if (element instanceof GChildElement && element.parent instanceof GRoutableElement) {
|
|
@@ -32,4 +57,24 @@ export class GlspDecorationPlacer extends DecorationPlacer {
|
|
|
32
57
|
}
|
|
33
58
|
return Point.ORIGIN;
|
|
34
59
|
}
|
|
60
|
+
// HiddenVNodePostprocessor implementation
|
|
61
|
+
override postUpdate(cause?: Action): void;
|
|
62
|
+
// ISvgExportPostProcessor implementation
|
|
63
|
+
override postUpdate(element: SVGSVGElement, cause?: Action): void;
|
|
64
|
+
override postUpdate(elementOrCause?: SVGSVGElement | Action, _cause?: Action): void {
|
|
65
|
+
// Called as HiddenVNodePostprocessor => no-op
|
|
66
|
+
if (!elementOrCause || Action.is(elementOrCause)) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Called as ISvgExportPostProcessor
|
|
71
|
+
// Adjust the position of all decorations in the exported SVG
|
|
72
|
+
const svg = elementOrCause;
|
|
73
|
+
const translate = `translate(-${GlspDecorationPlacer.DECORATION_OFFSET.x}px, -${GlspDecorationPlacer.DECORATION_OFFSET.y}px)`;
|
|
74
|
+
filter(this.editorContextService.modelRoot.index, isDecoration).forEach(decoration => {
|
|
75
|
+
const domId = this.domHelper.createUniqueDOMElementId(decoration);
|
|
76
|
+
const element = svg.querySelector<SVGElement>(`#${domId}`);
|
|
77
|
+
element!.style.transform = translate;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
35
80
|
}
|
package/src/utils/gmodel-util.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/********************************************************************************
|
|
2
|
-
* Copyright (c) 2019-
|
|
2
|
+
* Copyright (c) 2019-2025 EclipseSource and others.
|
|
3
3
|
*
|
|
4
4
|
* This program and the accompanying materials are made available under the
|
|
5
5
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
@@ -86,6 +86,63 @@ export function getMatchingElements<T>(index: ModelIndexImpl, predicate: ModelFi
|
|
|
86
86
|
return Array.from(filter(index, predicate));
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
+
/**
|
|
90
|
+
* Retrieves an array of all parent elements for the given element that match the given type guard.
|
|
91
|
+
* @param element The {@link GModelElement} for which the parent elements should be retrieved.
|
|
92
|
+
* @param guard The type guard that should be used.
|
|
93
|
+
* @returns An array of all parent elements that match the type guard
|
|
94
|
+
* (correctly casted to also include the additional type of the guard).
|
|
95
|
+
*/
|
|
96
|
+
export function getParents<T extends GParentElement>(element: GModelElement, guard: TypeGuard<T>): T[];
|
|
97
|
+
/**
|
|
98
|
+
* Retrieves an array of all parent elements for the given element that match the given {@link ModelFilterPredicate}.
|
|
99
|
+
* @param element The {@link GModelElement} for which the parent elements should be retrieved.
|
|
100
|
+
* @param predicate The filter predicate that should be used.
|
|
101
|
+
* @returns An array of all parent elements that match the filter predicate
|
|
102
|
+
* (correctly casted to also include the additional type of the predicate).
|
|
103
|
+
*/
|
|
104
|
+
export function getParents<T>(element: GModelElement, predicate: ModelFilterPredicate<T>): (GParentElement & T)[];
|
|
105
|
+
export function getParents(element: GModelElement, filterPredicate: (parent: GParentElement) => boolean): GParentElement[] {
|
|
106
|
+
const parents: GParentElement[] = [];
|
|
107
|
+
let current: GModelElement | undefined = element;
|
|
108
|
+
while (current instanceof GChildElement) {
|
|
109
|
+
const parent: GParentElement = current.parent;
|
|
110
|
+
if (filterPredicate(parent)) {
|
|
111
|
+
parents.push(parent);
|
|
112
|
+
}
|
|
113
|
+
current = parent;
|
|
114
|
+
}
|
|
115
|
+
return parents;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/** * Retrieves an array of all child elements for the given element that match the given type guard.
|
|
119
|
+
* @param element The {@link GModelElement} for which the child elements should be retrieved.
|
|
120
|
+
* @param guard The type guard that should be used.
|
|
121
|
+
* @returns An array of all child elements that match the type guard
|
|
122
|
+
* (correctly casted to also include the additional type of the guard).
|
|
123
|
+
*/
|
|
124
|
+
export function getChildren<T extends GChildElement>(element: GModelElement, guard: TypeGuard<T>): T[];
|
|
125
|
+
/** * Retrieves an array of all child elements for the given element that match the given {@link ModelFilterPredicate}.
|
|
126
|
+
* @param element The {@link GModelElement} for which the child elements should be retrieved.
|
|
127
|
+
* @param predicate The filter predicate that should be used.
|
|
128
|
+
* @returns An array of all child elements that match the filter predicate
|
|
129
|
+
* (correctly casted to also include the additional type of the predicate).
|
|
130
|
+
*/
|
|
131
|
+
export function getChildren<T>(element: GModelElement, predicate: ModelFilterPredicate<T>): (GChildElement & T)[];
|
|
132
|
+
export function getChildren(element: GModelElement, filterPredicate: (parent: GChildElement) => boolean): GChildElement[] {
|
|
133
|
+
const children: GChildElement[] = [];
|
|
134
|
+
if (element instanceof GParentElement) {
|
|
135
|
+
for (const child of element.children) {
|
|
136
|
+
if (filterPredicate(child)) {
|
|
137
|
+
children.push(child);
|
|
138
|
+
}
|
|
139
|
+
if (child instanceof GParentElement) {
|
|
140
|
+
children.push(...getChildren(child, filterPredicate as any));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return children;
|
|
145
|
+
}
|
|
89
146
|
/**
|
|
90
147
|
* Invokes the given model index to retrieve the corresponding model elements for the given set of ids. Ids that
|
|
91
148
|
* have no corresponding element in the index will be ignored.
|
|
@@ -104,6 +161,7 @@ export function getElements<S extends GModelElement>(index: ModelIndexImpl, elem
|
|
|
104
161
|
};
|
|
105
162
|
return elementsIDs.map(id => index.getById(id)).filter(filterFn);
|
|
106
163
|
}
|
|
164
|
+
|
|
107
165
|
/**
|
|
108
166
|
* Retrieves the amount of currently selected elements in the given {@link ModelIndexImpl}.
|
|
109
167
|
* @param index The {@link ModelIndexImpl}.
|