@node-projects/web-component-designer 0.1.73 → 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.
Files changed (25) hide show
  1. package/dist/elements/widgets/designerView/extensions/AbstractExtensionBase.d.ts +3 -0
  2. package/dist/elements/widgets/designerView/extensions/AbstractExtensionBase.js +21 -0
  3. package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtension.js +17 -18
  4. package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtensionProvider.js +2 -1
  5. package/dist/elements/widgets/designerView/extensions/InvisibleElementExtension.d.ts +0 -1
  6. package/dist/elements/widgets/designerView/extensions/InvisibleElementExtension.js +1 -3
  7. package/dist/elements/widgets/designerView/extensions/PositionExtension.d.ts +1 -0
  8. package/dist/elements/widgets/designerView/extensions/PositionExtension.js +23 -20
  9. package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +10 -8
  10. package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.d.ts +1 -1
  11. package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.js +23 -18
  12. package/dist/elements/widgets/designerView/overlayLayerView.d.ts +1 -0
  13. package/dist/elements/widgets/designerView/overlayLayerView.js +17 -0
  14. package/dist/elements/widgets/propertyGrid/PropertyGridWithHeader.js +9 -5
  15. package/package.json +1 -1
  16. package/dist/elements/services/propertiesService/IPropertyTabsService.d.ts +0 -8
  17. package/dist/elements/services/propertiesService/IPropertyTabsService.js +0 -1
  18. package/dist/elements/services/propertiesService/PropertyTabsService.d.ts +0 -27
  19. package/dist/elements/services/propertiesService/PropertyTabsService.js +0 -53
  20. package/dist/elements/services/refactorService/BindingsRefactorService copy.d.ts +0 -6
  21. package/dist/elements/services/refactorService/BindingsRefactorService copy.js +0 -21
  22. package/dist/elements/services/refactorService/RefactorService.d.ts +0 -5
  23. package/dist/elements/services/refactorService/RefactorService.js +0 -17
  24. package/dist/elements/widgets/refactorView/code-view-simple.d.ts +0 -23
  25. package/dist/elements/widgets/refactorView/code-view-simple.js +0 -55
@@ -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._drawText(text, (boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 5, 'svg-text-primary', this._text);
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
- const h = (15 / this.designerCanvas.scaleFactor);
42
- const w = (this._width / this.designerCanvas.scaleFactor);
43
- this._rect.setAttribute('x', '' + transformedCornerPoints[0].x);
44
- this._rect.setAttribute('y', '' + transformedCornerPoints[0].y);
45
- this._rect.style.rotate = angle + 'deg';
46
- this._rect.style.transformBox = 'fill-box';
47
- this._rect.setAttribute('height', '' + h);
48
- this._rect.setAttribute('width', '' + w);
49
- this._rect.style.strokeWidth = (1 / this.designerCanvas.scaleFactor).toString();
50
- this._text.setAttribute('x', '' + transformedCornerPointsTx[0].x);
51
- this._text.setAttribute('y', '' + transformedCornerPointsTx[0].y);
52
- this._text.style.fontSize = (10 / this.designerCanvas.scaleFactor) + 'px';
53
- this._text.setAttribute('transform', 'rotate(' + angle + ' ' + transformedCornerPointsTx[0].x + ' ' + transformedCornerPointsTx[0].y + ')');
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; fill: white; font-family: monospace; }
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 (!this.lastPoints || this.lastPoints[0].x != t[0].x || this.lastPoints[0].y != t[0].y || this.lastPoints[1].x != t[1].x || this.lastPoints[1].y != t[1].y || this.lastPoints[2].x != t[2].x || this.lastPoints[2].y != t[2].y || this.lastPoints[3].x != t[3].x || this.lastPoints[3].y != t[3].y) {
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
- this._line1 = this._drawLine(itemParentRect.x, itemRect.y + itemRect.height / 2, itemRect.x, itemRect.y + itemRect.height / 2, 'svg-position', this._line1);
19
- 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);
20
- this._line3 = this._drawLine(itemRect.x + itemRect.width / 2, itemParentRect.y, itemRect.x + itemRect.width / 2, itemRect.y, 'svg-position', this._line3);
21
- 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);
22
- this._line1.style.strokeWidth = '' + (1 / this.designerCanvas.scaleFactor);
23
- this._line2.style.strokeWidth = '' + (1 / this.designerCanvas.scaleFactor);
24
- this._line3.style.strokeWidth = '' + (1 / this.designerCanvas.scaleFactor);
25
- this._line4.style.strokeWidth = '' + (1 / this.designerCanvas.scaleFactor);
26
- this._line1.style.strokeDasharray = '' + (4 / this.designerCanvas.scaleFactor);
27
- this._line2.style.strokeDasharray = '' + (4 / this.designerCanvas.scaleFactor);
28
- this._line3.style.strokeDasharray = '' + (4 / this.designerCanvas.scaleFactor);
29
- this._line4.style.strokeDasharray = '' + (4 / this.designerCanvas.scaleFactor);
30
- let x = Math.round(itemRect.x - itemParentRect.x);
31
- let y = Math.round(itemRect.y - itemParentRect.y);
32
- this._textX = this._drawTextWithBackground('' + x, itemParentRect.x + x / 2, itemRect.y + itemRect.height / 2, 'white', 'svg-position-text', this._textX);
33
- this._textX[2].style.fontSize = (12 / this.designerCanvas.scaleFactor) + 'px';
34
- this._textX[3].style.fontSize = (12 / this.designerCanvas.scaleFactor) + 'px';
35
- this._textY = this._drawTextWithBackground('' + y, itemRect.x + itemRect.width / 2, itemParentRect.y + y / 2, 'white', 'svg-position-text', this._textY);
36
- this._textY[2].style.fontSize = (12 / this.designerCanvas.scaleFactor) + 'px';
37
- this._textY[3].style.fontSize = (12 / this.designerCanvas.scaleFactor) + 'px';
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
- this._circle1 = this._drawResizerOverlay(transformedCornerPoints[0].x, transformedCornerPoints[0].y, 'nw-resize', this._circle1);
36
- 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);
37
- this._circle3 = this._drawResizerOverlay(transformedCornerPoints[1].x, transformedCornerPoints[1].y, 'ne-resize', this._circle3);
38
- 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);
39
- this._circle5 = this._drawResizerOverlay(transformedCornerPoints[2].x, transformedCornerPoints[2].y, 'sw-resize', this._circle5);
40
- 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);
41
- 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);
42
- this._circle7 = this._drawResizerOverlay(transformedCornerPoints[3].x, transformedCornerPoints[3].y, 'se-resize', this._circle7);
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
- this._circle = this._drawCircle(toDOMPoint.x, toDOMPoint.y, 5 / this.designerCanvas.zoomFactor, 'svg-transform-origin');
22
- this._circle.style.strokeWidth = (1 / this.designerCanvas.zoomFactor).toString();
23
- this._circle.style.cursor = 'pointer';
24
- this._circle2 = this._drawCircle(toDOMPoint.x, toDOMPoint.y, 1 / this.designerCanvas.zoomFactor, 'svg-transform-origin');
25
- this._circle2.style.strokeWidth = (1 / this.designerCanvas.zoomFactor).toString();
26
- this._circle2.style.pointerEvents = 'none';
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><span id="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.innerText = this._instanceServiceContainer.selectionService.primarySelection?.name ?? '';
142
- else
143
- this._type.innerText = this._instanceServiceContainer.selectionService.primarySelection?.node?.nodeName ?? '';
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,7 +1,7 @@
1
1
  {
2
2
  "description": "A UI designer for Polymer apps",
3
3
  "name": "@node-projects/web-component-designer",
4
- "version": "0.1.73",
4
+ "version": "0.1.74",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "jochen.kuehner@gmx.de",
@@ -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,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,5 +0,0 @@
1
- import { IDesignItem } from "../../item/IDesignItem.js";
2
- import { IRefactoring } from "./IRefactoring.js";
3
- export declare class RefactorService {
4
- getRefactorings(designItems: IDesignItem[]): Record<string, IRefactoring[]>;
5
- }
@@ -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);