@node-projects/web-component-designer 0.0.153 → 0.0.154
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/dist/elements/controls/MetricsEditor.d.ts +1 -1
- package/dist/elements/controls/MetricsEditor.js +29 -30
- package/dist/elements/helper/TransformHelper.d.ts +1 -0
- package/dist/elements/helper/TransformHelper.js +3 -0
- package/dist/elements/services/placementService/FlexBoxPlacementService.js +8 -0
- package/dist/elements/widgets/designerView/extensions/RotateExtension.js +4 -2
- package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.js +3 -8
- package/package.json +1 -1
|
@@ -8,7 +8,7 @@ export declare class MetricsEditor extends BaseCustomWebComponentConstructorAppe
|
|
|
8
8
|
static readonly template: HTMLTemplateElement;
|
|
9
9
|
property: string;
|
|
10
10
|
unsetValue: string;
|
|
11
|
-
_updateValue(): void;
|
|
12
11
|
ready(): void;
|
|
13
12
|
onDoubleClick(event: PointerEvent): void;
|
|
13
|
+
onKeyDown(event: KeyboardEvent): void;
|
|
14
14
|
}
|
|
@@ -30,7 +30,7 @@ export class MetricsEditor extends BaseCustomWebComponentConstructorAppend {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
div.ct {
|
|
33
|
-
width:280px;height:
|
|
33
|
+
width:280px;height:120px;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
div span {
|
|
@@ -83,44 +83,43 @@ span {
|
|
|
83
83
|
}`;
|
|
84
84
|
static template = html `
|
|
85
85
|
<div class="ct"><span title="position">position</span>
|
|
86
|
-
<div class="top">-</div><br><div class="left">-</div><div class="ct"><span title="margin">margin</span>
|
|
87
|
-
<div
|
|
88
|
-
<div class="top">-</div><br><div class="left">-</div><div class="ct"><span title="padding">padding</span>
|
|
89
|
-
<div class="top">-</div><br><div class="left">-</div><div class="ct" style="font-size:6px"><div class="left">-</div>
|
|
90
|
-
x
|
|
91
|
-
<div class="right">-</div>
|
|
92
|
-
</div><div class="right">-</div><br><div class="bottom">-</div></div><div class="right">-</div><br><div class="bottom">-</div></div><div class="right">-</div><br><div class="bottom">-</div></div><div class="right">-</div><br><div class="bottom">-</div></div>
|
|
86
|
+
<div data-style="position" @keydown="onKeyDown" @dblclick="onDoubleClick" class="top">-</div><br><div data-style="position" @keydown="onKeyDown" @dblclick="onDoubleClick" class="left">-</div><div class="ct"><span title="margin">margin</span>
|
|
87
|
+
<div data-style="margin" @keydown="onKeyDown" @dblclick="onDoubleClick" class="top">-</div><br><div @keydown="onKeyDown" @dblclick="onDoubleClick" class="left">-</div><div class="ct"><span title="border">border</span>
|
|
88
|
+
<div data-style="border" @keydown="onKeyDown" @dblclick="onDoubleClick" class="top">-</div><br><div @keydown="onKeyDown" @dblclick="onDoubleClick" class="left">-</div><div class="ct"><span title="padding">padding</span>
|
|
89
|
+
<div data-style="padding" @keydown="onKeyDown" @dblclick="onDoubleClick" class="top">-</div><br><div @keydown="onKeyDown" @dblclick="onDoubleClick" class="left">-</div><div class="ct" style="font-size:6px"><div data-style="element" @keydown="onKeyDown" @dblclick="onDoubleClick" class="left">-</div>
|
|
90
|
+
x
|
|
91
|
+
<div data-style="element" @keydown="onKeyDown" @dblclick="onDoubleClick" class="right">-</div>
|
|
92
|
+
</div><div data-style="padding" @keydown="onKeyDown" @dblclick="onDoubleClick" class="right">-</div><br><div data-style="padding" @keydown="onKeyDown" @dblclick="onDoubleClick" class="bottom">-</div></div><div data-style="border" @keydown="onKeyDown" @dblclick="onDoubleClick" class="right">-</div><br><div data-style="border" @keydown="onKeyDown" @dblclick="onDoubleClick" class="bottom">-</div></div><div data-style="margin" @keydown="onKeyDown" @dblclick="onDoubleClick" class="right">-</div><br><div data-style="margin" @keydown="onKeyDown" @dblclick="onDoubleClick" class="bottom">-</div></div><div data-style="position" @keydown="onKeyDown" @dblclick="onDoubleClick" class="right">-</div><br><div data-style="position" @keydown="onKeyDown" @dblclick="onDoubleClick" class="bottom">-</div></div>
|
|
93
93
|
`;
|
|
94
94
|
property;
|
|
95
95
|
unsetValue;
|
|
96
|
-
//private _root: HTMLDivElement;
|
|
97
|
-
//private _contentEditable: HTMLDivElement;
|
|
98
|
-
_updateValue() {
|
|
99
|
-
}
|
|
100
96
|
ready() {
|
|
101
|
-
//this._root = this._getDomElement<HTMLDivElement>("testdiv");
|
|
102
97
|
this._parseAttributesToProperties();
|
|
103
|
-
this._updateValue();
|
|
104
98
|
this._assignEvents();
|
|
105
99
|
}
|
|
106
100
|
onDoubleClick(event) {
|
|
107
|
-
|
|
108
|
-
// contentEditable setzten
|
|
101
|
+
const element = event.target;
|
|
109
102
|
element.setAttribute("contentEditable", "");
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
103
|
+
const range = document.createRange();
|
|
104
|
+
const sel = window.getSelection();
|
|
105
|
+
range.setStart(element.firstChild, 0);
|
|
106
|
+
range.setEndAfter(element.lastChild);
|
|
107
|
+
sel.removeAllRanges();
|
|
108
|
+
sel.addRange(range);
|
|
109
|
+
}
|
|
110
|
+
onKeyDown(event) {
|
|
111
|
+
const element = event.target;
|
|
112
|
+
if (event.key == "Enter") {
|
|
113
|
+
element.removeAttribute("contentEditable");
|
|
114
|
+
const value = element.innerHTML;
|
|
115
|
+
const valueChangedEvent = new CustomEvent('value-changed', {
|
|
116
|
+
detail: {
|
|
117
|
+
style: element.dataset['style'],
|
|
118
|
+
value: value
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
this.dispatchEvent(valueChangedEvent);
|
|
122
|
+
}
|
|
124
123
|
}
|
|
125
124
|
}
|
|
126
125
|
customElements.define('node-projects-metrics-editor', MetricsEditor);
|
|
@@ -12,6 +12,7 @@ export declare function addVectors(vectorA: [number, number], vectorB: [number,
|
|
|
12
12
|
export declare function getDesignerCanvasNormalizedTransformedOriginWithoutParentTransformation(element: HTMLElement, designerCanvas: IDesignerCanvas): DOMPoint;
|
|
13
13
|
export declare function getResultingTransformationBetweenElementAndAllAncestors(element: HTMLElement, ancestor: HTMLElement, excludeAncestor?: boolean): DOMMatrix;
|
|
14
14
|
export declare function getByParentsTransformedPointRelatedToCanvas(element: HTMLElement, point: DOMPoint, designerCanvas: IDesignerCanvas): IPoint;
|
|
15
|
+
export declare function getDesignerCanvasNormalizedTransformedPoint(element: HTMLElement, point: IPoint, designerCanvas: IDesignerCanvas): IPoint;
|
|
15
16
|
export declare function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element: HTMLElement, untransformedCornerPointsOffset: IPoint | null, designerCanvas: IDesignerCanvas): [DOMPoint, DOMPoint, DOMPoint, DOMPoint];
|
|
16
17
|
export declare function extractTranslationFromDOMMatrix(matrix: DOMMatrix): DOMPoint;
|
|
17
18
|
export declare function extractRotationAngleFromDOMMatrix(matrix: DOMMatrix): number;
|
|
@@ -123,6 +123,9 @@ export function getByParentsTransformedPointRelatedToCanvas(element, point, desi
|
|
|
123
123
|
}
|
|
124
124
|
return byParentTransformedPointRelatedToCanvas;
|
|
125
125
|
}
|
|
126
|
+
export function getDesignerCanvasNormalizedTransformedPoint(element, point, designerCanvas) {
|
|
127
|
+
return getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, { x: -point.x, y: -point.y }, designerCanvas)[0];
|
|
128
|
+
}
|
|
126
129
|
export function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, untransformedCornerPointsOffset, designerCanvas) {
|
|
127
130
|
const topleft = 0;
|
|
128
131
|
const topright = 1;
|
|
@@ -57,18 +57,22 @@ export class FlexBoxPlacementService {
|
|
|
57
57
|
if (elBefore && elBefore[0] != items[0]) {
|
|
58
58
|
if (posBefore + 1 === posDrag)
|
|
59
59
|
return;
|
|
60
|
+
const sel = [...container.instanceServiceContainer.selectionService.selectedElements];
|
|
60
61
|
let cg = items[0].openGroup('move in flexbox');
|
|
61
62
|
items[0].remove();
|
|
62
63
|
elBefore[0].insertAdjacentElement(items[0], 'afterend');
|
|
63
64
|
cg.commit();
|
|
65
|
+
container.instanceServiceContainer.selectionService.setSelectedElements(sel);
|
|
64
66
|
}
|
|
65
67
|
else if (elBefore == null) {
|
|
66
68
|
if (posDrag == 0)
|
|
67
69
|
return;
|
|
70
|
+
const sel = [...container.instanceServiceContainer.selectionService.selectedElements];
|
|
68
71
|
let cg = items[0].openGroup('move in flexbox');
|
|
69
72
|
items[0].remove();
|
|
70
73
|
container.insertChild(items[0], 0);
|
|
71
74
|
cg.commit();
|
|
75
|
+
container.instanceServiceContainer.selectionService.setSelectedElements(sel);
|
|
72
76
|
}
|
|
73
77
|
}
|
|
74
78
|
else if (style.flexDirection == 'column') {
|
|
@@ -84,18 +88,22 @@ export class FlexBoxPlacementService {
|
|
|
84
88
|
if (elBefore && elBefore[0] != items[0]) {
|
|
85
89
|
if (posBefore + 1 === posDrag)
|
|
86
90
|
return;
|
|
91
|
+
const sel = [...container.instanceServiceContainer.selectionService.selectedElements];
|
|
87
92
|
let cg = items[0].openGroup('move in flexbox');
|
|
88
93
|
items[0].remove();
|
|
89
94
|
elBefore[0].insertAdjacentElement(items[0], 'afterend');
|
|
90
95
|
cg.commit();
|
|
96
|
+
container.instanceServiceContainer.selectionService.setSelectedElements(sel);
|
|
91
97
|
}
|
|
92
98
|
else if (elBefore == null) {
|
|
93
99
|
if (posDrag == 0)
|
|
94
100
|
return;
|
|
101
|
+
const sel = [...container.instanceServiceContainer.selectionService.selectedElements];
|
|
95
102
|
let cg = items[0].openGroup('move in flexbox');
|
|
96
103
|
items[0].remove();
|
|
97
104
|
container.insertChild(items[0], 0);
|
|
98
105
|
cg.commit();
|
|
106
|
+
container.instanceServiceContainer.selectionService.setSelectedElements(sel);
|
|
99
107
|
}
|
|
100
108
|
}
|
|
101
109
|
placementView.extensionManager.refreshAllExtensions([container]);
|
|
@@ -75,10 +75,12 @@ export class RotateExtension extends AbstractExtension {
|
|
|
75
75
|
let angle = Math.atan2(currentPoint.y - transformOriginInPx.y, currentPoint.x - transformOriginInPx.x) * (180 / Math.PI);
|
|
76
76
|
angle = angle - this._initialOverlayAngle + this._initialElementAngle;
|
|
77
77
|
angle *= -1;
|
|
78
|
+
if (!event.ctrlKey)
|
|
79
|
+
angle = Math.ceil(angle / 15) * 15;
|
|
78
80
|
const rotationMatrix3d = getRotationMatrix3d('z', angle);
|
|
79
81
|
rotateElementByMatrix3d(this.extendedItem.element, rotationMatrix3d);
|
|
80
|
-
|
|
81
|
-
|
|
82
|
+
const transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, { x: 30, y: 30 }, this.designerCanvas);
|
|
83
|
+
const angleTextPosition = transformedCornerPoints[0];
|
|
82
84
|
this._textAngle = this._drawTextWithBackground(this._actualRotationAngle + '°', angleTextPosition.x, angleTextPosition.y, 'white', 'svg-rotate-text', this._textAngle);
|
|
83
85
|
this._textAngle[2].style.fontSize = (12 / this.designerCanvas.scaleFactor) + 'px';
|
|
84
86
|
this._textAngle[3].style.fontSize = (12 / this.designerCanvas.scaleFactor) + 'px';
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { EventNames } from "../../../../enums/EventNames";
|
|
2
2
|
import { convertCssUnit, getCssUnit } from "../../../helper/CssUnitConverter";
|
|
3
|
+
import { getDesignerCanvasNormalizedTransformedPoint } from "../../../helper/TransformHelper";
|
|
3
4
|
import { AbstractExtension } from './AbstractExtension';
|
|
4
5
|
export class TransformOriginExtension extends AbstractExtension {
|
|
5
6
|
_startPos;
|
|
@@ -10,21 +11,15 @@ export class TransformOriginExtension extends AbstractExtension {
|
|
|
10
11
|
super(extensionManager, designerView, extendedItem);
|
|
11
12
|
}
|
|
12
13
|
extend() {
|
|
13
|
-
const rect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
|
|
14
14
|
const computed = getComputedStyle(this.extendedItem.element);
|
|
15
|
-
const x = 0;
|
|
16
|
-
const y = 1;
|
|
17
15
|
const to = computed.transformOrigin.split(' '); // This value remains the same regardless of scalefactor
|
|
18
|
-
const
|
|
19
|
-
toInPercentage[0] = parseInt(to[0]) / parseInt(getComputedStyle(this.extendedItem.element).width); // This value remains the same regardless of scalefactor
|
|
20
|
-
toInPercentage[1] = parseInt(to[1]) / parseInt(getComputedStyle(this.extendedItem.element).height); // This value remains the same regardless of scalefactor
|
|
21
|
-
const toDOMPoint = new DOMPoint(rect.x + toInPercentage[x] * rect.width, rect.y + toInPercentage[y] * rect.height);
|
|
16
|
+
const toDOMPoint = getDesignerCanvasNormalizedTransformedPoint(this.extendedItem.element, { x: parseFloat(to[0]), y: parseFloat(to[1]) }, this.designerCanvas);
|
|
22
17
|
this._circle = this._drawCircle(toDOMPoint.x, toDOMPoint.y, 5 / this.designerCanvas.zoomFactor, 'svg-transform-origin');
|
|
23
18
|
this._circle.style.strokeWidth = (1 / this.designerCanvas.zoomFactor).toString();
|
|
24
19
|
this._circle.style.cursor = 'pointer';
|
|
25
20
|
this._circle2 = this._drawCircle(toDOMPoint.x, toDOMPoint.y, 1 / this.designerCanvas.zoomFactor, 'svg-transform-origin');
|
|
26
21
|
this._circle2.style.strokeWidth = (1 / this.designerCanvas.zoomFactor).toString();
|
|
27
|
-
this._circle2.style.pointerEvents = '
|
|
22
|
+
this._circle2.style.pointerEvents = 'none';
|
|
28
23
|
this._circle.addEventListener(EventNames.PointerDown, event => this.pointerEvent(event));
|
|
29
24
|
this._circle.addEventListener(EventNames.PointerMove, event => this.pointerEvent(event));
|
|
30
25
|
this._circle.addEventListener(EventNames.PointerUp, event => this.pointerEvent(event)); //TODO: -> assign to window
|