@node-projects/web-component-designer 0.0.116 → 0.0.118

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.
@@ -391,6 +391,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
391
391
  this._updateTransform();
392
392
  this._fillCalculationrects();
393
393
  this.onZoomFactorChanged.emit(this._zoomFactor);
394
+ this.extensionManager.refreshAllAppliedExtentions();
394
395
  }
395
396
  _updateTransform() {
396
397
  this._scaleFactor = this._zoomFactor;
@@ -405,7 +406,8 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
405
406
  this.instanceServiceContainer.undoService.clear();
406
407
  this.overlayLayer.removeAllOverlays();
407
408
  DomHelper.removeAllChildnodes(this.overlayLayer);
408
- this.rootDesignItem.clearChildren();
409
+ for (let i of this.rootDesignItem.children())
410
+ this.rootDesignItem._removeChildInternal(i);
409
411
  this.addDesignItems(designItems);
410
412
  this.instanceServiceContainer.contentService.onContentChanged.emit({ changeType: 'parsed' });
411
413
  }
@@ -11,6 +11,9 @@ export class AltToEnterContainerExtension extends AbstractExtension {
11
11
  refresh() {
12
12
  let itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
13
13
  this._text = this._drawText("Press ALT to enter container", itemRect.x + 5, itemRect.y + 12, 'svg-text-enter-container', this._text, OverlayLayer.Foregorund);
14
+ this._text.style.fontSize = (14 / this.designerCanvas.scaleFactor) + 'px';
15
+ this._text.setAttribute('x', '' + (itemRect.x + 5 / this.designerCanvas.scaleFactor));
16
+ this._text.setAttribute('y', '' + (itemRect.y + 12 / this.designerCanvas.scaleFactor));
14
17
  }
15
18
  dispose() {
16
19
  this._removeAllOverlays();
@@ -8,6 +8,6 @@ export class AltToEnterContainerExtensionProvider {
8
8
  return new AltToEnterContainerExtension(extensionManager, designerView, designItem);
9
9
  }
10
10
  style = css `
11
- .svg-text-enter-container { stroke: none; fill: black; stroke-width: 1; font-size: 14px; font-weight:800; font-family: monospace; }
11
+ .svg-text-enter-container { stroke: none; fill: black; stroke-width: 1; font-weight:800; font-family: monospace; }
12
12
  `;
13
13
  }
@@ -16,19 +16,26 @@ export class ElementDragTitleExtension extends AbstractExtension {
16
16
  this._rect.addEventListener('pointerdown', (e) => this._pointerEvent(e));
17
17
  this._rect.addEventListener('pointermove', (e) => this._pointerEvent(e));
18
18
  this._rect.addEventListener('pointerup', (e) => this._pointerEvent(e));
19
+ this.refresh();
19
20
  }
20
21
  _drawMoveOverlay(itemRect) {
21
22
  }
22
23
  refresh() {
23
24
  const boundRect = this.extendedItem.element.getBoundingClientRect();
24
25
  const xr = (boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor;
25
- const yr = (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 16;
26
+ const h = (15 / this.designerCanvas.scaleFactor);
27
+ const w = (60 / this.designerCanvas.scaleFactor);
28
+ const yr = (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - h;
26
29
  this._rect.setAttribute('x', xr);
27
30
  this._rect.setAttribute('y', yr);
31
+ this._rect.setAttribute('height', '' + h);
32
+ this._rect.setAttribute('width', '' + w);
33
+ this._rect.style.strokeWidth = (1 / this.designerCanvas.scaleFactor).toString();
28
34
  const x = (boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor;
29
- const y = (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 5;
35
+ const y = (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 5 / this.designerCanvas.scaleFactor;
30
36
  this._text.setAttribute('x', x);
31
37
  this._text.setAttribute('y', y);
38
+ this._text.style.fontSize = (10 / this.designerCanvas.scaleFactor) + 'px';
32
39
  }
33
40
  _pointerEvent(event) {
34
41
  event.preventDefault();
@@ -8,6 +8,6 @@ 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; stroke-width: 1; font-size: 10px; font-family: monospace; }
11
+ .svg-text-primary { stroke: none; fill: white; font-family: monospace; }
12
12
  `;
13
13
  }
@@ -4,6 +4,7 @@ import { ExtensionType } from './ExtensionType';
4
4
  import { IExtensionManager } from "./IExtensionManger";
5
5
  export declare class ExtensionManager implements IExtensionManager {
6
6
  designerCanvas: IDesignerCanvas;
7
+ designItemsWithExtentions: Set<IDesignItem>;
7
8
  constructor(designerCanvas: IDesignerCanvas);
8
9
  private _contentChanged;
9
10
  private _selectedElementsChanged;
@@ -14,4 +15,5 @@ export declare class ExtensionManager implements IExtensionManager {
14
15
  refreshExtension(designItem: IDesignItem, extensionType?: ExtensionType): void;
15
16
  refreshExtensions(designItems: IDesignItem[], extensionType?: ExtensionType): void;
16
17
  refreshAllExtensions(designItems: IDesignItem[]): void;
18
+ refreshAllAppliedExtentions(): void;
17
19
  }
@@ -2,6 +2,7 @@ import { DesignItem } from "../../../item/DesignItem";
2
2
  import { ExtensionType } from './ExtensionType';
3
3
  export class ExtensionManager {
4
4
  designerCanvas;
5
+ designItemsWithExtentions = new Set();
5
6
  constructor(designerCanvas) {
6
7
  this.designerCanvas = designerCanvas;
7
8
  designerCanvas.instanceServiceContainer.selectionService.onSelectionChanged.on(this._selectedElementsChanged.bind(this));
@@ -60,6 +61,7 @@ export class ExtensionManager {
60
61
  }
61
62
  appE.push(ext);
62
63
  designItem.appliedDesignerExtensions.set(extensionType, appE);
64
+ this.designItemsWithExtentions.add(designItem);
63
65
  }
64
66
  }
65
67
  }
@@ -89,6 +91,7 @@ export class ExtensionManager {
89
91
  }
90
92
  appE.push(ext);
91
93
  i.appliedDesignerExtensions.set(extensionType, appE);
94
+ this.designItemsWithExtentions.add(i);
92
95
  }
93
96
  }
94
97
  }
@@ -114,6 +117,8 @@ export class ExtensionManager {
114
117
  }
115
118
  }
116
119
  designItem.appliedDesignerExtensions.delete(extensionType);
120
+ if (!designItem.appliedDesignerExtensions.size)
121
+ this.designItemsWithExtentions.delete(designItem);
117
122
  }
118
123
  }
119
124
  else {
@@ -128,6 +133,7 @@ export class ExtensionManager {
128
133
  }
129
134
  }
130
135
  designItem.appliedDesignerExtensions.clear();
136
+ this.designItemsWithExtentions.delete(designItem);
131
137
  }
132
138
  }
133
139
  }
@@ -146,6 +152,8 @@ export class ExtensionManager {
146
152
  }
147
153
  }
148
154
  i.appliedDesignerExtensions.delete(extensionType);
155
+ if (!i.appliedDesignerExtensions.size)
156
+ this.designItemsWithExtentions.delete(i);
149
157
  }
150
158
  }
151
159
  }
@@ -162,6 +170,7 @@ export class ExtensionManager {
162
170
  }
163
171
  }
164
172
  i.appliedDesignerExtensions.clear();
173
+ this.designItemsWithExtentions.delete(i);
165
174
  }
166
175
  }
167
176
  }
@@ -242,4 +251,7 @@ export class ExtensionManager {
242
251
  this.refreshExtensions(designItems, ExtensionType.Doubleclick);
243
252
  }
244
253
  }
254
+ refreshAllAppliedExtentions() {
255
+ this.refreshAllExtensions([...this.designItemsWithExtentions]);
256
+ }
245
257
  }
@@ -8,4 +8,5 @@ export interface IExtensionManager {
8
8
  refreshExtension(designItem: IDesignItem, extensionType?: ExtensionType): any;
9
9
  refreshExtensions(designItems: IDesignItem[], extensionType?: ExtensionType): any;
10
10
  refreshAllExtensions(designItems: IDesignItem[]): any;
11
+ refreshAllAppliedExtentions(): any;
11
12
  }
@@ -13,6 +13,7 @@ export class MouseOverExtension extends AbstractExtension {
13
13
  const xOffset = itemRect.x - this.designerCanvas.containerBoundingRect.x;
14
14
  const yOffset = itemRect.y - this.designerCanvas.containerBoundingRect.y;
15
15
  this._rect = this._drawRect((xOffset - offset) / this.designerCanvas.scaleFactor, (yOffset - offset) / this.designerCanvas.scaleFactor, (itemRect.width + offset + offset) / this.designerCanvas.scaleFactor, (itemRect.height + offset + offset) / this.designerCanvas.scaleFactor, 'svg-hover', this._rect);
16
+ this._rect.style.strokeWidth = (2 / this.designerCanvas.zoomFactor).toString();
16
17
  }
17
18
  dispose() {
18
19
  this._removeAllOverlays();
@@ -26,6 +26,10 @@ export class PathExtension extends AbstractExtension {
26
26
  this._drawPathCircle(p.values[0], p.values[1], p, 0);
27
27
  this._lastPos = { x: p.values[0], y: p.values[1] };
28
28
  break;
29
+ case 'l':
30
+ this._drawPathCircle(p.values[0] + this._lastPos.x, p.values[1] + this._lastPos.y, p, 0);
31
+ this._lastPos = { x: p.values[0] + this._lastPos.x, y: p.values[1] + this._lastPos.y };
32
+ break;
29
33
  case 'H':
30
34
  break;
31
35
  case 'V':
@@ -74,18 +78,19 @@ export class PathExtension extends AbstractExtension {
74
78
  }
75
79
  pointerEvent(event, circle, p, index) {
76
80
  event.stopPropagation();
81
+ const cursorPos = this.designerCanvas.getNormalizedEventCoordinates(event);
77
82
  switch (event.type) {
78
83
  case EventNames.PointerDown:
79
84
  event.target.setPointerCapture(event.pointerId);
80
- this._startPos = { x: event.x, y: event.y };
85
+ this._startPos = cursorPos;
81
86
  this._circlePos = { x: parseFloat(circle.getAttribute("cx")), y: parseFloat(circle.getAttribute("cy")) };
82
87
  this._originalPathPoint = { x: p.values[index], y: p.values[index + 1] };
83
88
  break;
84
89
  case EventNames.PointerMove:
85
90
  if (this._startPos && event.buttons > 0) {
86
91
  this._lastPos = { x: this._startPos.x, y: this._startPos.y };
87
- const cx = event.x - this._lastPos.x + this._circlePos.x;
88
- const cy = event.y - this._lastPos.y + this._circlePos.y;
92
+ const cx = cursorPos.x - this._lastPos.x + this._circlePos.x;
93
+ const cy = cursorPos.y - this._lastPos.y + this._circlePos.y;
89
94
  const dx = cx - this._circlePos.x;
90
95
  const dy = cy - this._circlePos.y;
91
96
  if (event.shiftKey) {
@@ -121,7 +126,8 @@ export class PathExtension extends AbstractExtension {
121
126
  }
122
127
  }
123
128
  _drawPathCircle(x, y, p, index) {
124
- let circle = this._drawCircle((this._parentRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor + x, (this._parentRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor + y, 5, 'svg-path');
129
+ let circle = this._drawCircle((this._parentRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor + x, (this._parentRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor + y, 5 / this.designerCanvas.scaleFactor, 'svg-path');
130
+ circle.style.strokeWidth = (1 / this.designerCanvas.zoomFactor).toString();
125
131
  let circlePos = { x: x, y: y };
126
132
  const items = [];
127
133
  const pidx = this._pathdata.indexOf(p);
@@ -50,13 +50,14 @@ export class ResizeExtension extends AbstractExtension {
50
50
  }
51
51
  }
52
52
  _drawResizerOverlay(x, y, cursor, oldCircle) {
53
- let circle = this._drawCircle(x, y, 3, 'svg-primary-resizer', oldCircle);
53
+ let circle = this._drawCircle(x, y, 3 / this.designerCanvas.zoomFactor, 'svg-primary-resizer', oldCircle);
54
+ circle.style.strokeWidth = (1 / this.designerCanvas.zoomFactor).toString();
54
55
  if (!oldCircle) {
55
56
  circle.addEventListener(EventNames.PointerDown, event => this._pointerActionTypeResize(circle, event, cursor));
56
57
  circle.addEventListener(EventNames.PointerMove, event => this._pointerActionTypeResize(circle, event, cursor));
57
58
  circle.addEventListener(EventNames.PointerUp, event => this._pointerActionTypeResize(circle, event, cursor));
58
59
  }
59
- circle.setAttribute('style', 'cursor: ' + cursor);
60
+ circle.style.cursor = cursor;
60
61
  return circle;
61
62
  }
62
63
  _pointerActionTypeResize(circle, event, actionMode = 'se-resize') {
@@ -15,6 +15,7 @@ export class SelectionDefaultExtension extends AbstractExtension {
15
15
  const right = Number.parseFloat(computedStyle.marginRight.replace('px', ''));
16
16
  const bottom = Number.parseFloat(computedStyle.marginBottom.replace('px', ''));
17
17
  this._rect = this._drawRect(itemRect.x - left, itemRect.y - top, left + itemRect.width + right, top + itemRect.height + bottom, 'svg-selection', this._rect);
18
+ this._rect.style.strokeWidth = (2 / this.designerCanvas.zoomFactor).toString();
18
19
  }
19
20
  dispose() {
20
21
  this._removeAllOverlays();
@@ -11,10 +11,12 @@ export class TransformOriginExtension extends AbstractExtension {
11
11
  const rect = this.extendedItem.element.getBoundingClientRect();
12
12
  const computed = getComputedStyle(this.extendedItem.element);
13
13
  const to = computed.transformOrigin.split(' ');
14
- this._circle = this._drawCircle((rect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor + Number.parseFloat(to[0].replace('px', '')), (rect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor + Number.parseFloat(to[1].replace('px', '')), 5, 'svg-transform-origin');
15
- this._circle.setAttribute('style', 'cursor: pointer');
16
- this._circle2 = this._drawCircle((rect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor + Number.parseFloat(to[0].replace('px', '')), (rect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor + Number.parseFloat(to[1].replace('px', '')), 1, 'svg-transform-origin');
17
- this._circle2.setAttribute('style', 'pointer-events: none');
14
+ this._circle = this._drawCircle((rect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor + Number.parseFloat(to[0].replace('px', '')), (rect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor + Number.parseFloat(to[1].replace('px', '')), 5 / this.designerCanvas.scaleFactor, 'svg-transform-origin');
15
+ this._circle.style.strokeWidth = (1 / this.designerCanvas.zoomFactor).toString();
16
+ this._circle.style.cursor = 'pointer';
17
+ this._circle2 = this._drawCircle((rect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor + Number.parseFloat(to[0].replace('px', '')), (rect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor + Number.parseFloat(to[1].replace('px', '')), 1 / this.designerCanvas.scaleFactor, 'svg-transform-origin');
18
+ this._circle2.style.strokeWidth = (1 / this.designerCanvas.zoomFactor).toString();
19
+ this._circle2.style.pointerEvents = 'none';
18
20
  this._circle.addEventListener(EventNames.PointerDown, event => this.pointerEvent(event));
19
21
  this._circle.addEventListener(EventNames.PointerMove, event => this.pointerEvent(event));
20
22
  this._circle.addEventListener(EventNames.PointerUp, event => this.pointerEvent(event)); //TODO: -> assign to window
@@ -77,6 +77,7 @@ export class PaletteTreeView extends BaseCustomWebComponentConstructorAppend {
77
77
  extensions: ['childcounter', 'dnd5', 'filter'],
78
78
  quicksearch: true,
79
79
  source: [],
80
+ tooltip: true,
80
81
  filter: {
81
82
  autoExpand: true,
82
83
  mode: 'hide',
@@ -78,6 +78,7 @@ export class PropertyGridWithHeader extends BaseCustomWebComponentLazyAppend {
78
78
  let di = DesignItem.GetOrCreateDesignItem(t, this._instanceServiceContainer.selectionService.primarySelection.serviceContainer, this._instanceServiceContainer);
79
79
  this._instanceServiceContainer.selectionService.primarySelection.insertAdjacentElement(di, 'afterbegin');
80
80
  grp.commit();
81
+ this._content.title = this._content.value;
81
82
  }
82
83
  else if (e.key == 'Escape') {
83
84
  this._content.value = this._instanceServiceContainer.selectionService.primarySelection?.element?.textContent ?? '';
@@ -108,6 +109,7 @@ export class PropertyGridWithHeader extends BaseCustomWebComponentLazyAppend {
108
109
  this._content.value = this._instanceServiceContainer.selectionService.primarySelection?.element?.textContent ?? '';
109
110
  else
110
111
  this._content.value = '';
112
+ this._content.title = this._content.value;
111
113
  });
112
114
  }
113
115
  }
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.0.116",
4
+ "version": "0.0.118",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "",
@@ -19,20 +19,20 @@
19
19
  "devDependencies": {
20
20
  "@node-projects/lean-he-esm": "^3.3.0",
21
21
  "@node-projects/node-html-parser-esm": "^2.4.1",
22
- "@papyrs/stylo": "^0.0.37",
22
+ "@papyrs/stylo": "^0.0.39",
23
23
  "@types/codemirror": "^5.60.5",
24
24
  "@types/jquery": "^3.5.14",
25
25
  "@types/jquery.fancytree": "0.0.7",
26
- "ace-builds": "^1.9.6",
26
+ "ace-builds": "^1.11.2",
27
27
  "codemirror": "^6.0.1",
28
- "esprima-next": "^5.8.3",
28
+ "esprima-next": "^5.8.4",
29
29
  "html2canvas": "*",
30
- "jest": "^28.0.8",
30
+ "jest": "^29.1.1",
31
31
  "jquery": "^3.6.1",
32
32
  "jquery.fancytree": "^2.38.2",
33
33
  "monaco-editor": "^0.34.0",
34
- "ts-jest": "^28.0.8",
35
- "typescript": "^4.8.2",
34
+ "ts-jest": "^29.0.2",
35
+ "typescript": "^4.8.4",
36
36
  "typescript-lit-html-plugin": "^0.9.0"
37
37
  },
38
38
  "repository": {