@node-projects/web-component-designer 0.1.72 → 0.1.74
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/services/placementService/SnaplinesProviderService.js +1 -3
- package/dist/elements/widgets/designerView/designerCanvas.js +1 -1
- package/dist/elements/widgets/designerView/designerView.js +0 -1
- package/dist/elements/widgets/designerView/extensions/AbstractExtensionBase.d.ts +3 -0
- package/dist/elements/widgets/designerView/extensions/AbstractExtensionBase.js +21 -0
- package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtension.js +17 -18
- package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtensionProvider.js +2 -1
- package/dist/elements/widgets/designerView/extensions/InvisibleElementExtension.d.ts +0 -1
- package/dist/elements/widgets/designerView/extensions/InvisibleElementExtension.js +1 -3
- package/dist/elements/widgets/designerView/extensions/PositionExtension.d.ts +1 -0
- package/dist/elements/widgets/designerView/extensions/PositionExtension.js +23 -20
- package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +10 -8
- package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.d.ts +1 -1
- package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.js +23 -18
- package/dist/elements/widgets/designerView/overlayLayerView.d.ts +1 -0
- package/dist/elements/widgets/designerView/overlayLayerView.js +17 -0
- package/dist/elements/widgets/propertyGrid/PropertyGridWithHeader.js +9 -5
- package/package.json +1 -1
- package/dist/elements/services/propertiesService/IPropertyTabsService.d.ts +0 -8
- package/dist/elements/services/propertiesService/IPropertyTabsService.js +0 -1
- package/dist/elements/services/propertiesService/PropertyTabsService.d.ts +0 -27
- package/dist/elements/services/propertiesService/PropertyTabsService.js +0 -53
- package/dist/elements/services/refactorService/BindingsRefactorService copy.d.ts +0 -6
- package/dist/elements/services/refactorService/BindingsRefactorService copy.js +0 -21
- package/dist/elements/services/refactorService/RefactorService.d.ts +0 -5
- package/dist/elements/services/refactorService/RefactorService.js +0 -17
- package/dist/elements/widgets/refactorView/code-view-simple.d.ts +0 -23
- package/dist/elements/widgets/refactorView/code-view-simple.js +0 -55
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { DomHelper } from '@node-projects/base-custom-webcomponent';
|
|
2
1
|
export const provideSnaplinesWithDistance = 'provideSnaplinesWithDistance';
|
|
3
2
|
export const provideSnaplinesWithDistanceDistance = 'provideSnaplinesWithDistanceDistance';
|
|
4
3
|
export class SnaplinesProviderService {
|
|
@@ -13,8 +12,7 @@ export class SnaplinesProviderService {
|
|
|
13
12
|
const positionsMiddleH = [];
|
|
14
13
|
const positionsV = [];
|
|
15
14
|
const positionsMiddleV = [];
|
|
16
|
-
let
|
|
17
|
-
for (let n of DomHelper.getAllChildNodes(containerItem.element, false, ignoreElements)) {
|
|
15
|
+
for (let n of containerItem.querySelectorAll('*')) {
|
|
18
16
|
if (!ignMap.has(n)) {
|
|
19
17
|
const p = n.getBoundingClientRect();
|
|
20
18
|
const pLeft = (p.x - outerRect.x) / canvas.scaleFactor;
|
|
@@ -439,7 +439,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
439
439
|
let maxX = 0, maxY = 0, minX = 0, minY = 0;
|
|
440
440
|
this.canvasOffset = { x: 0, y: 0 };
|
|
441
441
|
this.zoomFactor = 1;
|
|
442
|
-
for (let n of
|
|
442
|
+
for (let n of this.rootDesignItem.querySelectorAll('*')) {
|
|
443
443
|
if (n instanceof Element) {
|
|
444
444
|
const rect = n.getBoundingClientRect();
|
|
445
445
|
minX = minX < rect.x ? minX : rect.x;
|
|
@@ -314,7 +314,6 @@ export class DesignerView extends BaseCustomWebComponentConstructorAppend {
|
|
|
314
314
|
this._toolbar.initialize(this.serviceContainer, this);
|
|
315
315
|
}
|
|
316
316
|
getHTML() {
|
|
317
|
-
//this.instanceServiceContainer.selectionService.setSelectedElements(null);
|
|
318
317
|
if (this._designerCanvas.rootDesignItem.childCount > 0) {
|
|
319
318
|
return DomConverter.ConvertToString(Array.from(this._designerCanvas.rootDesignItem.children()), true, true);
|
|
320
319
|
}
|
|
@@ -9,6 +9,8 @@ export declare abstract class AbstractExtensionBase {
|
|
|
9
9
|
protected extensionManager: IExtensionManager;
|
|
10
10
|
protected designerCanvas: IDesignerCanvas;
|
|
11
11
|
constructor(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas);
|
|
12
|
+
private _backup;
|
|
13
|
+
protected _valuesHaveChanges(...values: any[]): boolean;
|
|
12
14
|
protected _removeAllOverlays(): void;
|
|
13
15
|
protected _addOverlay(element: SVGGraphicsElement, overlayLayer?: OverlayLayer): void;
|
|
14
16
|
protected _drawGroup(className?: string, group?: SVGGElement, overlayLayer?: OverlayLayer): SVGGElement;
|
|
@@ -16,6 +18,7 @@ export declare abstract class AbstractExtensionBase {
|
|
|
16
18
|
protected _drawCircle(x: number, y: number, radius: number, className?: string, circle?: SVGCircleElement, overlayLayer?: OverlayLayer): SVGCircleElement;
|
|
17
19
|
protected _drawRect(x: number, y: number, w: number, h: number, className?: string, rect?: SVGRectElement, overlayLayer?: OverlayLayer): SVGRectElement;
|
|
18
20
|
protected _drawText(text: string, x: number, y: number, className?: string, textEl?: SVGTextElement, overlayLayer?: OverlayLayer): SVGTextElement;
|
|
21
|
+
protected _drawHTML(html: string | HTMLElement, x: number, y: number, w: number, h: number, className?: string, htmlObj?: SVGForeignObjectElement, overlayLayer?: OverlayLayer): SVGForeignObjectElement;
|
|
19
22
|
protected _drawTextWithBackground(text: string, x: number, y: number, backgroundColor: string, className?: string, existingEls?: [SVGFilterElement, SVGFEFloodElement, SVGTextElement, SVGTextElement], overlayLayer?: OverlayLayer): [SVGFilterElement, SVGFEFloodElement, SVGTextElement, SVGTextElement];
|
|
20
23
|
protected _drawTransformedRect(points: [IPoint, IPoint, IPoint, IPoint], className?: string, path?: SVGPathElement, overlayLayer?: OverlayLayer): SVGPathElement;
|
|
21
24
|
}
|
|
@@ -9,6 +9,20 @@ export class AbstractExtensionBase {
|
|
|
9
9
|
this.designerCanvas = designerCanvas;
|
|
10
10
|
this.overlayLayerView = designerCanvas.overlayLayer;
|
|
11
11
|
}
|
|
12
|
+
_backup;
|
|
13
|
+
_valuesHaveChanges(...values) {
|
|
14
|
+
if (this._backup == null) {
|
|
15
|
+
this._backup = values;
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
for (let i = 0; i < values.length; i++) {
|
|
19
|
+
if (values[i] !== this._backup[i]) {
|
|
20
|
+
this._backup = values;
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
12
26
|
_removeAllOverlays() {
|
|
13
27
|
for (let o of this.overlays) {
|
|
14
28
|
try {
|
|
@@ -59,6 +73,13 @@ export class AbstractExtensionBase {
|
|
|
59
73
|
}
|
|
60
74
|
return newText;
|
|
61
75
|
}
|
|
76
|
+
_drawHTML(html, x, y, w, h, className, htmlObj, overlayLayer) {
|
|
77
|
+
const newHtml = this.overlayLayerView.drawHTML(this.constructor.name, html, x, y, w, h, className, htmlObj, overlayLayer);
|
|
78
|
+
if (!htmlObj) {
|
|
79
|
+
this.overlays.push(newHtml);
|
|
80
|
+
}
|
|
81
|
+
return newHtml;
|
|
82
|
+
}
|
|
62
83
|
_drawTextWithBackground(text, x, y, backgroundColor, className, existingEls, overlayLayer) {
|
|
63
84
|
const newEls = this.overlayLayerView.drawTextWithBackground(this.constructor.name, text, x, y, backgroundColor, className, existingEls, overlayLayer);
|
|
64
85
|
if (!existingEls) {
|
|
@@ -21,10 +21,7 @@ export class ElementDragTitleExtension extends AbstractExtension {
|
|
|
21
21
|
if (w > this._width)
|
|
22
22
|
text = this.extendedItem.name.substring(0, 10) + '…';
|
|
23
23
|
this._rect = this._drawRect(transformedCornerPoints[0].x, transformedCornerPoints[0].y - 16, this._width, 15, 'svg-primary-selection-move', this._rect);
|
|
24
|
-
this._text = this.
|
|
25
|
-
const title = document.createElementNS("http://www.w3.org/2000/svg", "title");
|
|
26
|
-
title.textContent = this.extendedItem.name;
|
|
27
|
-
this._text.appendChild(title);
|
|
24
|
+
this._text = this._drawHTML('<span>' + text + '</span>', (boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, transformedCornerPoints[0].y - 16, this._width, 15, 'svg-text-primary', this._text);
|
|
28
25
|
this._rect.addEventListener('pointerdown', (e) => this._pointerEvent(e));
|
|
29
26
|
this._rect.addEventListener('pointermove', (e) => this._pointerEvent(e));
|
|
30
27
|
this._rect.addEventListener('pointerup', (e) => this._pointerEvent(e));
|
|
@@ -36,21 +33,23 @@ export class ElementDragTitleExtension extends AbstractExtension {
|
|
|
36
33
|
refresh(cache, event) {
|
|
37
34
|
const transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, { x: 0, y: 16 }, this.designerCanvas, cache);
|
|
38
35
|
const angle = Math.atan2((transformedCornerPoints[1].y - transformedCornerPoints[0].y), (transformedCornerPoints[1].x - transformedCornerPoints[0].x)) * 180 / Math.PI;
|
|
39
|
-
const transformedCornerPointsTx = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, { x: 0, y: 5 }, this.designerCanvas);
|
|
40
36
|
if (!isNaN(transformedCornerPoints[0].x)) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
37
|
+
if (this._valuesHaveChanges(transformedCornerPoints[0].x, transformedCornerPoints[0].y, angle)) {
|
|
38
|
+
const h = (15 / this.designerCanvas.scaleFactor);
|
|
39
|
+
const w = (this._width / this.designerCanvas.scaleFactor);
|
|
40
|
+
this._rect.setAttribute('x', '' + transformedCornerPoints[0].x);
|
|
41
|
+
this._rect.setAttribute('y', '' + transformedCornerPoints[0].y);
|
|
42
|
+
this._rect.style.rotate = angle + 'deg';
|
|
43
|
+
this._rect.style.transformBox = 'fill-box';
|
|
44
|
+
this._rect.setAttribute('height', '' + h);
|
|
45
|
+
this._rect.setAttribute('width', '' + w);
|
|
46
|
+
this._rect.style.strokeWidth = (1 / this.designerCanvas.scaleFactor).toString();
|
|
47
|
+
this._text.setAttribute('x', '' + transformedCornerPoints[0].x);
|
|
48
|
+
this._text.setAttribute('y', '' + transformedCornerPoints[0].y);
|
|
49
|
+
this._text.style.fontSize = (10 / this.designerCanvas.scaleFactor) + 'px';
|
|
50
|
+
this._text.style.transformBox = 'fill-box';
|
|
51
|
+
this._text.style.rotate = angle + 'deg';
|
|
52
|
+
}
|
|
54
53
|
}
|
|
55
54
|
}
|
|
56
55
|
_pointerEvent(event) {
|
|
@@ -8,6 +8,7 @@ export class ElementDragTitleExtensionProvider {
|
|
|
8
8
|
return new ElementDragTitleExtension(extensionManager, designerView, designItem);
|
|
9
9
|
}
|
|
10
10
|
style = css `
|
|
11
|
-
.svg-text-primary { stroke: none;
|
|
11
|
+
.svg-text-primary { stroke: none; color: white; font-family: monospace; }
|
|
12
|
+
.svg-text-primary.span { width: 100%; position: absolute; text-overflow: ellipsis; overflow: hidden; }
|
|
12
13
|
`;
|
|
13
14
|
}
|
|
@@ -4,7 +4,6 @@ import { AbstractExtension } from './AbstractExtension.js';
|
|
|
4
4
|
import { IExtensionManager } from './IExtensionManger.js';
|
|
5
5
|
export declare class InvisibleElementExtension extends AbstractExtension {
|
|
6
6
|
private _rect;
|
|
7
|
-
private lastPoints;
|
|
8
7
|
constructor(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, extendedItem: IDesignItem);
|
|
9
8
|
extend(cache: Record<string | symbol, any>, event?: Event): void;
|
|
10
9
|
refresh(cache: Record<string | symbol, any>, event?: Event): void;
|
|
@@ -3,7 +3,6 @@ import { AbstractExtension } from './AbstractExtension.js';
|
|
|
3
3
|
import { OverlayLayer } from "./OverlayLayer.js";
|
|
4
4
|
export class InvisibleElementExtension extends AbstractExtension {
|
|
5
5
|
_rect;
|
|
6
|
-
lastPoints;
|
|
7
6
|
constructor(extensionManager, designerCanvas, extendedItem) {
|
|
8
7
|
super(extensionManager, designerCanvas, extendedItem);
|
|
9
8
|
}
|
|
@@ -12,8 +11,7 @@ export class InvisibleElementExtension extends AbstractExtension {
|
|
|
12
11
|
}
|
|
13
12
|
refresh(cache, event) {
|
|
14
13
|
const t = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas, cache);
|
|
15
|
-
if (
|
|
16
|
-
this.lastPoints = t;
|
|
14
|
+
if (this._valuesHaveChanges(t[0].x, t[0].y, t[1].x, t[1].y, t[2].x, t[2].y, t[3].x, t[3].y)) {
|
|
17
15
|
this._rect = this._drawTransformedRect(t, 'svg-invisible-div', this._rect, OverlayLayer.Background);
|
|
18
16
|
}
|
|
19
17
|
}
|
|
@@ -11,6 +11,7 @@ export declare class PositionExtension extends AbstractExtension {
|
|
|
11
11
|
private _textY;
|
|
12
12
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
13
13
|
extend(): void;
|
|
14
|
+
_oldValues: any[];
|
|
14
15
|
refresh(): void;
|
|
15
16
|
dispose(): void;
|
|
16
17
|
}
|
|
@@ -12,29 +12,32 @@ export class PositionExtension extends AbstractExtension {
|
|
|
12
12
|
extend() {
|
|
13
13
|
this.refresh();
|
|
14
14
|
}
|
|
15
|
+
_oldValues = [];
|
|
15
16
|
refresh() {
|
|
16
17
|
const itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
|
|
17
18
|
const itemParentRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.parent.element);
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
19
|
+
if (this._valuesHaveChanges(this.designerCanvas.scaleFactor, itemRect.x, itemRect.y, itemParentRect.x, itemParentRect.y, itemRect.height, itemRect.width, itemParentRect.height, itemParentRect.width)) {
|
|
20
|
+
this._line1 = this._drawLine(itemParentRect.x, itemRect.y + itemRect.height / 2, itemRect.x, itemRect.y + itemRect.height / 2, 'svg-position', this._line1);
|
|
21
|
+
this._line2 = this._drawLine(itemParentRect.x + itemParentRect.width, itemRect.y + itemRect.height / 2, itemRect.x + itemRect.width, itemRect.y + itemRect.height / 2, 'svg-position', this._line2);
|
|
22
|
+
this._line3 = this._drawLine(itemRect.x + itemRect.width / 2, itemParentRect.y, itemRect.x + itemRect.width / 2, itemRect.y, 'svg-position', this._line3);
|
|
23
|
+
this._line4 = this._drawLine(itemRect.x + itemRect.width / 2, itemParentRect.y + itemParentRect.height, itemRect.x + itemRect.width / 2, itemRect.y + itemRect.height, 'svg-position', this._line4);
|
|
24
|
+
this._line1.style.strokeWidth = '' + (1 / this.designerCanvas.scaleFactor);
|
|
25
|
+
this._line2.style.strokeWidth = '' + (1 / this.designerCanvas.scaleFactor);
|
|
26
|
+
this._line3.style.strokeWidth = '' + (1 / this.designerCanvas.scaleFactor);
|
|
27
|
+
this._line4.style.strokeWidth = '' + (1 / this.designerCanvas.scaleFactor);
|
|
28
|
+
this._line1.style.strokeDasharray = '' + (4 / this.designerCanvas.scaleFactor);
|
|
29
|
+
this._line2.style.strokeDasharray = '' + (4 / this.designerCanvas.scaleFactor);
|
|
30
|
+
this._line3.style.strokeDasharray = '' + (4 / this.designerCanvas.scaleFactor);
|
|
31
|
+
this._line4.style.strokeDasharray = '' + (4 / this.designerCanvas.scaleFactor);
|
|
32
|
+
let x = Math.round(itemRect.x - itemParentRect.x);
|
|
33
|
+
let y = Math.round(itemRect.y - itemParentRect.y);
|
|
34
|
+
this._textX = this._drawTextWithBackground('' + x, itemParentRect.x + x / 2, itemRect.y + itemRect.height / 2, 'white', 'svg-position-text', this._textX);
|
|
35
|
+
this._textX[2].style.fontSize = (12 / this.designerCanvas.scaleFactor) + 'px';
|
|
36
|
+
this._textX[3].style.fontSize = (12 / this.designerCanvas.scaleFactor) + 'px';
|
|
37
|
+
this._textY = this._drawTextWithBackground('' + y, itemRect.x + itemRect.width / 2, itemParentRect.y + y / 2, 'white', 'svg-position-text', this._textY);
|
|
38
|
+
this._textY[2].style.fontSize = (12 / this.designerCanvas.scaleFactor) + 'px';
|
|
39
|
+
this._textY[3].style.fontSize = (12 / this.designerCanvas.scaleFactor) + 'px';
|
|
40
|
+
}
|
|
38
41
|
}
|
|
39
42
|
dispose() {
|
|
40
43
|
this._removeAllOverlays();
|
|
@@ -32,14 +32,16 @@ export class ResizeExtension extends AbstractExtension {
|
|
|
32
32
|
this.remove();
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
35
|
+
if (this._valuesHaveChanges(transformedCornerPoints[0].x, transformedCornerPoints[0].y, transformedCornerPoints[1].x, transformedCornerPoints[1].y, transformedCornerPoints[2].x, transformedCornerPoints[2].y, transformedCornerPoints[3].x, transformedCornerPoints[3].y)) {
|
|
36
|
+
this._circle1 = this._drawResizerOverlay(transformedCornerPoints[0].x, transformedCornerPoints[0].y, 'nw-resize', this._circle1);
|
|
37
|
+
this._circle2 = this._drawResizerOverlay((transformedCornerPoints[0].x + (transformedCornerPoints[1].x - transformedCornerPoints[0].x) / 2), (transformedCornerPoints[0].y + (transformedCornerPoints[1].y - transformedCornerPoints[0].y) / 2), 'n-resize', this._circle2);
|
|
38
|
+
this._circle3 = this._drawResizerOverlay(transformedCornerPoints[1].x, transformedCornerPoints[1].y, 'ne-resize', this._circle3);
|
|
39
|
+
this._circle4 = this._drawResizerOverlay((transformedCornerPoints[0].x + (transformedCornerPoints[2].x - transformedCornerPoints[0].x) / 2), (transformedCornerPoints[0].y + (transformedCornerPoints[2].y - transformedCornerPoints[0].y) / 2), 'w-resize', this._circle4);
|
|
40
|
+
this._circle5 = this._drawResizerOverlay(transformedCornerPoints[2].x, transformedCornerPoints[2].y, 'sw-resize', this._circle5);
|
|
41
|
+
this._circle6 = this._drawResizerOverlay((transformedCornerPoints[2].x + (transformedCornerPoints[3].x - transformedCornerPoints[2].x) / 2), (transformedCornerPoints[2].y + (transformedCornerPoints[3].y - transformedCornerPoints[2].y) / 2), 's-resize', this._circle6);
|
|
42
|
+
this._circle8 = this._drawResizerOverlay((transformedCornerPoints[1].x + (transformedCornerPoints[3].x - transformedCornerPoints[1].x) / 2), (transformedCornerPoints[1].y + (transformedCornerPoints[3].y - transformedCornerPoints[1].y) / 2), 'e-resize', this._circle8);
|
|
43
|
+
this._circle7 = this._drawResizerOverlay(transformedCornerPoints[3].x, transformedCornerPoints[3].y, 'se-resize', this._circle7);
|
|
44
|
+
}
|
|
43
45
|
//#endregion Circles
|
|
44
46
|
}
|
|
45
47
|
_drawResizerOverlay(x, y, cursor, oldCircle) {
|
|
@@ -8,8 +8,8 @@ export declare class TransformOriginExtension extends AbstractExtension {
|
|
|
8
8
|
private _circle2;
|
|
9
9
|
private _oldValue;
|
|
10
10
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
11
|
+
refresh(cache: Record<string | symbol, any>, event?: Event): void;
|
|
11
12
|
extend(cache: Record<string | symbol, any>, event?: Event): void;
|
|
12
13
|
pointerEvent(event: PointerEvent): void;
|
|
13
|
-
refresh(cache: Record<string | symbol, any>, event?: Event): void;
|
|
14
14
|
dispose(): void;
|
|
15
15
|
}
|
|
@@ -10,6 +10,23 @@ export class TransformOriginExtension extends AbstractExtension {
|
|
|
10
10
|
constructor(extensionManager, designerView, extendedItem) {
|
|
11
11
|
super(extensionManager, designerView, extendedItem);
|
|
12
12
|
}
|
|
13
|
+
refresh(cache, event) {
|
|
14
|
+
const computed = getComputedStyle(this.extendedItem.element);
|
|
15
|
+
const to = computed.transformOrigin.split(' '); // This value remains the same regardless of scalefactor
|
|
16
|
+
const toDOMPoint = getDesignerCanvasNormalizedTransformedPoint(this.extendedItem.element, { x: parseFloat(to[0]) * this.designerCanvas.zoomFactor, y: parseFloat(to[1]) * this.designerCanvas.zoomFactor }, this.designerCanvas, cache);
|
|
17
|
+
if (this._valuesHaveChanges(toDOMPoint.x, toDOMPoint.y, this.designerCanvas.zoomFactor)) {
|
|
18
|
+
this._removeAllOverlays();
|
|
19
|
+
this._circle = this._drawCircle(toDOMPoint.x, toDOMPoint.y, 5 / this.designerCanvas.zoomFactor, 'svg-transform-origin');
|
|
20
|
+
this._circle.style.strokeWidth = (1 / this.designerCanvas.zoomFactor).toString();
|
|
21
|
+
this._circle.style.cursor = 'pointer';
|
|
22
|
+
this._circle2 = this._drawCircle(toDOMPoint.x, toDOMPoint.y, 1 / this.designerCanvas.zoomFactor, 'svg-transform-origin');
|
|
23
|
+
this._circle2.style.strokeWidth = (1 / this.designerCanvas.zoomFactor).toString();
|
|
24
|
+
this._circle2.style.pointerEvents = 'none';
|
|
25
|
+
this._circle.addEventListener(EventNames.PointerDown, event => this.pointerEvent(event));
|
|
26
|
+
this._circle.addEventListener(EventNames.PointerMove, event => this.pointerEvent(event));
|
|
27
|
+
this._circle.addEventListener(EventNames.PointerUp, event => this.pointerEvent(event)); //TODO: -> assign to window
|
|
28
|
+
}
|
|
29
|
+
}
|
|
13
30
|
extend(cache, event) {
|
|
14
31
|
const computed = getComputedStyle(this.extendedItem.element);
|
|
15
32
|
const to = computed.transformOrigin.split(' '); // This value remains the same regardless of scalefactor
|
|
@@ -18,18 +35,12 @@ export class TransformOriginExtension extends AbstractExtension {
|
|
|
18
35
|
this.remove();
|
|
19
36
|
return;
|
|
20
37
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
this._circle.addEventListener(EventNames.PointerDown, event => this.pointerEvent(event));
|
|
28
|
-
this._circle.addEventListener(EventNames.PointerMove, event => this.pointerEvent(event));
|
|
29
|
-
this._circle.addEventListener(EventNames.PointerUp, event => this.pointerEvent(event)); //TODO: -> assign to window
|
|
30
|
-
let old = this.extendedItem.getStyleFromSheetOrLocal('transform-origin');
|
|
31
|
-
if (old) {
|
|
32
|
-
this._oldValue = old;
|
|
38
|
+
else {
|
|
39
|
+
let old = this.extendedItem.getStyleFromSheetOrLocal('transform-origin');
|
|
40
|
+
if (old) {
|
|
41
|
+
this._oldValue = old;
|
|
42
|
+
}
|
|
43
|
+
this.refresh(cache, event);
|
|
33
44
|
}
|
|
34
45
|
}
|
|
35
46
|
pointerEvent(event) {
|
|
@@ -88,12 +99,6 @@ export class TransformOriginExtension extends AbstractExtension {
|
|
|
88
99
|
break;
|
|
89
100
|
}
|
|
90
101
|
}
|
|
91
|
-
refresh(cache, event) {
|
|
92
|
-
if (this._circle) {
|
|
93
|
-
this._removeAllOverlays();
|
|
94
|
-
this.extend(cache, event);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
102
|
dispose() {
|
|
98
103
|
this._removeAllOverlays();
|
|
99
104
|
}
|
|
@@ -32,5 +32,6 @@ export declare class OverlayLayerView extends BaseCustomWebComponentConstructorA
|
|
|
32
32
|
drawRect(overlaySource: string, x: number, y: number, w: number, h: number, className?: string, rect?: SVGRectElement, overlayLayer?: OverlayLayer): SVGRectElement;
|
|
33
33
|
drawPath(overlaySource: string, data: string, className?: string, path?: SVGPathElement, overlayLayer?: OverlayLayer): SVGPathElement;
|
|
34
34
|
drawText(overlaySource: string, text: string, x: number, y: number, className?: string, textEl?: SVGTextElement, overlayLayer?: OverlayLayer): SVGTextElement;
|
|
35
|
+
drawHTML(overlaySource: string, html: HTMLElement | string, x: number, y: number, w: number, h: number, className?: string, htmlObj?: SVGForeignObjectElement, overlayLayer?: OverlayLayer): SVGForeignObjectElement;
|
|
35
36
|
drawTextWithBackground(overlaySource: string, text: string, x: number, y: number, backgroundColor: string, className?: string, existingEls?: [SVGFilterElement, SVGFEFloodElement, SVGTextElement, SVGTextElement], overlayLayer?: OverlayLayer): [SVGFilterElement, SVGFEFloodElement, SVGTextElement, SVGTextElement];
|
|
36
37
|
}
|
|
@@ -205,6 +205,23 @@ export class OverlayLayerView extends BaseCustomWebComponentConstructorAppend {
|
|
|
205
205
|
textEl.setAttribute('class', className);
|
|
206
206
|
return textEl;
|
|
207
207
|
}
|
|
208
|
+
drawHTML(overlaySource, html, x, y, w, h, className, htmlObj, overlayLayer) {
|
|
209
|
+
if (!htmlObj) {
|
|
210
|
+
htmlObj = document.createElementNS("http://www.w3.org/2000/svg", "foreignObject");
|
|
211
|
+
this.addOverlay(overlaySource, htmlObj, overlayLayer);
|
|
212
|
+
}
|
|
213
|
+
htmlObj.setAttribute('x', x);
|
|
214
|
+
htmlObj.setAttribute('y', y);
|
|
215
|
+
htmlObj.setAttribute('width', w);
|
|
216
|
+
htmlObj.setAttribute('height', h);
|
|
217
|
+
if (typeof html === 'string')
|
|
218
|
+
htmlObj.innerHTML = html;
|
|
219
|
+
else
|
|
220
|
+
htmlObj.appendChild(html);
|
|
221
|
+
if (className)
|
|
222
|
+
htmlObj.setAttribute('class', className);
|
|
223
|
+
return htmlObj;
|
|
224
|
+
}
|
|
208
225
|
drawTextWithBackground(overlaySource, text, x, y, backgroundColor, className, existingEls, overlayLayer) {
|
|
209
226
|
if (!existingEls) {
|
|
210
227
|
let filter = document.createElementNS("http://www.w3.org/2000/svg", "filter");
|
|
@@ -37,6 +37,7 @@ export class PropertyGridWithHeader extends BaseCustomWebComponentLazyAppend {
|
|
|
37
37
|
overflow: hidden;
|
|
38
38
|
font-size: 12px;
|
|
39
39
|
height: 20px;
|
|
40
|
+
border: none;
|
|
40
41
|
}
|
|
41
42
|
#pg {
|
|
42
43
|
height: calc(100% - 64px);
|
|
@@ -44,7 +45,7 @@ export class PropertyGridWithHeader extends BaseCustomWebComponentLazyAppend {
|
|
|
44
45
|
`;
|
|
45
46
|
static template = html `
|
|
46
47
|
<div class="root">
|
|
47
|
-
<span style="grid-column: span 3;" class="desc">Type:</span><
|
|
48
|
+
<span style="grid-column: span 3;" class="desc">Type:</span><input type="text" readonly id="type">
|
|
48
49
|
<button id="config" style="display: none; grid-column: 5; grid-row: span 3; height: calc(100% - 10px); margin-left: 10px;">config</button>
|
|
49
50
|
<div title="id" id="idRect" style="grid-column: 1; width: 7px; height: 7px; border: 1px solid white;"></div>
|
|
50
51
|
<span style="grid-column: span 2;" class="desc">Id:</span><input type="text" id="id">
|
|
@@ -137,10 +138,13 @@ export class PropertyGridWithHeader extends BaseCustomWebComponentLazyAppend {
|
|
|
137
138
|
else {
|
|
138
139
|
this._configButton.style.display = 'none';
|
|
139
140
|
}
|
|
140
|
-
if (this._instanceServiceContainer.selectionService.primarySelection?.nodeType == NodeType.Element)
|
|
141
|
-
this._type.
|
|
142
|
-
|
|
143
|
-
|
|
141
|
+
if (this._instanceServiceContainer.selectionService.primarySelection?.nodeType == NodeType.Element) {
|
|
142
|
+
this._type.value = this._instanceServiceContainer.selectionService.primarySelection?.name ?? '';
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
this._type.value = this._instanceServiceContainer.selectionService.primarySelection?.node?.nodeName ?? '';
|
|
146
|
+
}
|
|
147
|
+
this._type.title = this._type.value;
|
|
144
148
|
this._id.value = this._instanceServiceContainer.selectionService.primarySelection?.id ?? '';
|
|
145
149
|
if (this._instanceServiceContainer.selectionService.primarySelection?.element?.nodeType != NodeType.Element) {
|
|
146
150
|
this._content.value = this._instanceServiceContainer.selectionService.primarySelection?.content ?? '';
|
package/package.json
CHANGED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { IDesignItem } from '../../item/IDesignItem.js';
|
|
2
|
-
import { IPropertiesService } from './IPropertiesService.js';
|
|
3
|
-
export interface IPropertyTabsService {
|
|
4
|
-
getPropertygroups(designItems: IDesignItem[]): {
|
|
5
|
-
name: string;
|
|
6
|
-
propertiesService: IPropertiesService;
|
|
7
|
-
}[];
|
|
8
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { IDesignItem } from '../../item/IDesignItem.js';
|
|
2
|
-
import { IPropertiesService } from './IPropertiesService.js';
|
|
3
|
-
import { IPropertyTabsService } from './IPropertyTabsService.js';
|
|
4
|
-
import { AttachedPropertiesService } from './services/AttachedPropertiesService.js';
|
|
5
|
-
export declare class PropertyTabsService implements IPropertyTabsService {
|
|
6
|
-
protected _attachedPropertiesService: AttachedPropertiesService;
|
|
7
|
-
protected _pgList: {
|
|
8
|
-
name: string;
|
|
9
|
-
propertiesService: IPropertiesService;
|
|
10
|
-
}[];
|
|
11
|
-
protected _svgPgList: {
|
|
12
|
-
name: string;
|
|
13
|
-
propertiesService: IPropertiesService;
|
|
14
|
-
}[];
|
|
15
|
-
protected _gridChild: {
|
|
16
|
-
name: string;
|
|
17
|
-
propertiesService: IPropertiesService;
|
|
18
|
-
}[];
|
|
19
|
-
protected _flexChild: {
|
|
20
|
-
name: string;
|
|
21
|
-
propertiesService: IPropertiesService;
|
|
22
|
-
}[];
|
|
23
|
-
getPropertygroups(designItems: IDesignItem[]): {
|
|
24
|
-
name: string;
|
|
25
|
-
propertiesService: IPropertiesService;
|
|
26
|
-
}[];
|
|
27
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { NodeType } from '../../item/NodeType.js';
|
|
2
|
-
import { AttachedPropertiesService } from './services/AttachedPropertiesService.js';
|
|
3
|
-
import { AttributesPropertiesService } from './services/AttributesPropertiesService.js';
|
|
4
|
-
import { CommonPropertiesService } from './services/CommonPropertiesService.js';
|
|
5
|
-
import { CssCurrentPropertiesService } from './services/CssCurrentPropertiesService.js';
|
|
6
|
-
import { CssCustomPropertiesService } from './services/CssCustomPropertiesService.js';
|
|
7
|
-
import { CssPropertiesService } from './services/CssPropertiesService.js';
|
|
8
|
-
export class PropertyTabsService {
|
|
9
|
-
_attachedPropertiesService = new AttachedPropertiesService();
|
|
10
|
-
_pgList = [
|
|
11
|
-
{ name: 'properties', propertiesService: null },
|
|
12
|
-
{ name: 'attached', propertiesService: this._attachedPropertiesService },
|
|
13
|
-
{ name: 'attributes', propertiesService: new AttributesPropertiesService() },
|
|
14
|
-
{ name: 'common', propertiesService: new CommonPropertiesService() },
|
|
15
|
-
{ name: 'styles', propertiesService: new CssCurrentPropertiesService() },
|
|
16
|
-
{ name: 'css vars', propertiesService: new CssCustomPropertiesService() },
|
|
17
|
-
{ name: 'layout', propertiesService: new CssPropertiesService("layout") },
|
|
18
|
-
{ name: 'flex', propertiesService: new CssPropertiesService("flex") },
|
|
19
|
-
{ name: 'grid', propertiesService: new CssPropertiesService("grid") },
|
|
20
|
-
];
|
|
21
|
-
_svgPgList = [
|
|
22
|
-
{ name: 'properties', propertiesService: null },
|
|
23
|
-
{ name: 'attached', propertiesService: this._attachedPropertiesService },
|
|
24
|
-
{ name: 'attributes', propertiesService: new AttributesPropertiesService() },
|
|
25
|
-
{ name: 'styles', propertiesService: new CssCurrentPropertiesService() },
|
|
26
|
-
{ name: 'css vars', propertiesService: new CssCustomPropertiesService() },
|
|
27
|
-
{ name: 'layout', propertiesService: new CssPropertiesService("layout") },
|
|
28
|
-
{ name: 'svg', propertiesService: new CssPropertiesService("svg") },
|
|
29
|
-
];
|
|
30
|
-
_gridChild = [
|
|
31
|
-
{ name: 'gridChild', propertiesService: new CssPropertiesService("gridChild") },
|
|
32
|
-
];
|
|
33
|
-
_flexChild = [
|
|
34
|
-
{ name: 'flexChild', propertiesService: new CssPropertiesService("flexChild") },
|
|
35
|
-
];
|
|
36
|
-
getPropertygroups(designItems) {
|
|
37
|
-
if (designItems == null || designItems.length == 0)
|
|
38
|
-
return [];
|
|
39
|
-
if (designItems[0].nodeType == NodeType.TextNode || designItems[0].nodeType == NodeType.Comment)
|
|
40
|
-
return [];
|
|
41
|
-
this._pgList[0].propertiesService = designItems[0].serviceContainer.getLastServiceWhere('propertyService', x => x.isHandledElement(designItems[0]));
|
|
42
|
-
this._svgPgList[0].propertiesService = designItems[0].serviceContainer.getLastServiceWhere('propertyService', x => x.isHandledElement(designItems[0]));
|
|
43
|
-
let lst = this._pgList;
|
|
44
|
-
if (designItems[0].element instanceof SVGElement)
|
|
45
|
-
lst = this._svgPgList;
|
|
46
|
-
const parentStyle = getComputedStyle(designItems[0].element.parentElement);
|
|
47
|
-
if (parentStyle.display.includes('grid'))
|
|
48
|
-
lst = [...lst, this._gridChild[0]];
|
|
49
|
-
else if (parentStyle.display.includes('flex'))
|
|
50
|
-
lst = [...lst, this._flexChild[0]];
|
|
51
|
-
return lst;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { IDesignItem } from "../../item/IDesignItem.js";
|
|
2
|
-
import { IRefactoring } from "./IRefactoring.js";
|
|
3
|
-
export declare class BindingsRefactorService {
|
|
4
|
-
getRefactorings(designItems: IDesignItem[]): IRefactoring[];
|
|
5
|
-
refactor(refactoring: IRefactoring, oldValue: string, newValue: string): void;
|
|
6
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
export class BindingsRefactorService {
|
|
2
|
-
getRefactorings(designItems) {
|
|
3
|
-
let refactorings = [];
|
|
4
|
-
for (let d of designItems) {
|
|
5
|
-
let bindings = d.serviceContainer.bindingService.getBindings(d);
|
|
6
|
-
if (bindings) {
|
|
7
|
-
for (let b of bindings) {
|
|
8
|
-
for (let s of b.bindableObjectNames) {
|
|
9
|
-
refactorings.push({ service: this, name: s, itemType: 'bindableObject', designItem: d, type: 'binding', sourceObject: b, display: b.target + '/' + b.targetName });
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
return refactorings;
|
|
15
|
-
}
|
|
16
|
-
refactor(refactoring, oldValue, newValue) {
|
|
17
|
-
let binding = refactoring.sourceObject;
|
|
18
|
-
binding.bindableObjectNames = binding.bindableObjectNames.map(x => x == oldValue ? newValue : x);
|
|
19
|
-
refactoring.designItem.serviceContainer.bindingService.setBinding(refactoring.designItem, binding);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export class RefactorService {
|
|
2
|
-
getRefactorings(designItems) {
|
|
3
|
-
let refactorings = {};
|
|
4
|
-
for (let d of designItems) {
|
|
5
|
-
let bindings = d.serviceContainer.bindingService.getBindings(d);
|
|
6
|
-
for (let b of bindings) {
|
|
7
|
-
for (let s of b.bindableObjectNames) {
|
|
8
|
-
if (!refactorings[s]) {
|
|
9
|
-
refactorings[s] = [];
|
|
10
|
-
}
|
|
11
|
-
refactorings[s].push({ name: s, designItem: d, type: 'binding', sourceObject: b });
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
return refactorings;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { BaseCustomWebComponentConstructorAppend, TypedEvent } from '@node-projects/base-custom-webcomponent';
|
|
2
|
-
import { ICodeView } from './ICodeView.js';
|
|
3
|
-
import { IActivateable } from '../../../interfaces/IActivateable.js';
|
|
4
|
-
import { IStringPosition } from '../../services/htmlWriterService/IStringPosition.js';
|
|
5
|
-
import { IUiCommandHandler } from '../../../commandHandling/IUiCommandHandler.js';
|
|
6
|
-
import { IUiCommand } from '../../../commandHandling/IUiCommand.js';
|
|
7
|
-
export declare class CodeViewSimple extends BaseCustomWebComponentConstructorAppend implements ICodeView, IActivateable, IUiCommandHandler {
|
|
8
|
-
dispose(): void;
|
|
9
|
-
canvasElement: HTMLElement;
|
|
10
|
-
elementsToPackages: Map<string, string>;
|
|
11
|
-
onTextChanged: TypedEvent<string>;
|
|
12
|
-
private _text;
|
|
13
|
-
static readonly style: CSSStyleSheet;
|
|
14
|
-
static readonly template: HTMLTemplateElement;
|
|
15
|
-
executeCommand(command: IUiCommand): void;
|
|
16
|
-
canExecuteCommand(command: IUiCommand): boolean;
|
|
17
|
-
ready(): Promise<void>;
|
|
18
|
-
focusEditor(): void;
|
|
19
|
-
activated(): void;
|
|
20
|
-
update(code: any): void;
|
|
21
|
-
getText(): string;
|
|
22
|
-
setSelection(position: IStringPosition): void;
|
|
23
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { BaseCustomWebComponentConstructorAppend, css, html, TypedEvent } from '@node-projects/base-custom-webcomponent';
|
|
2
|
-
export class CodeViewSimple extends BaseCustomWebComponentConstructorAppend {
|
|
3
|
-
dispose() {
|
|
4
|
-
}
|
|
5
|
-
canvasElement;
|
|
6
|
-
elementsToPackages;
|
|
7
|
-
onTextChanged = new TypedEvent();
|
|
8
|
-
_text;
|
|
9
|
-
static style = css `
|
|
10
|
-
:host {
|
|
11
|
-
display: block;
|
|
12
|
-
height: 100%;
|
|
13
|
-
width: 100%;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
textarea {
|
|
17
|
-
height: 100%;
|
|
18
|
-
width: 100%;
|
|
19
|
-
resize: none;
|
|
20
|
-
white-space: nowrap;
|
|
21
|
-
box-sizing: border-box;
|
|
22
|
-
}
|
|
23
|
-
`;
|
|
24
|
-
static template = html `
|
|
25
|
-
<div id="container" style="width: 100%; height: 100%; position: absolute;">
|
|
26
|
-
<textarea id="text"></textarea>
|
|
27
|
-
</div>
|
|
28
|
-
`;
|
|
29
|
-
executeCommand(command) {
|
|
30
|
-
}
|
|
31
|
-
canExecuteCommand(command) {
|
|
32
|
-
return false;
|
|
33
|
-
}
|
|
34
|
-
async ready() {
|
|
35
|
-
this._text = this._getDomElement('text');
|
|
36
|
-
}
|
|
37
|
-
focusEditor() {
|
|
38
|
-
requestAnimationFrame(() => {
|
|
39
|
-
this.focus();
|
|
40
|
-
this._text.focus();
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
activated() {
|
|
44
|
-
}
|
|
45
|
-
update(code) {
|
|
46
|
-
this._text.value = code;
|
|
47
|
-
}
|
|
48
|
-
getText() {
|
|
49
|
-
return this._text.value;
|
|
50
|
-
}
|
|
51
|
-
setSelection(position) {
|
|
52
|
-
this._text.setSelectionRange(position.start, position.start + position.length);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
customElements.define('node-projects-code-view-simple', CodeViewSimple);
|