@node-projects/web-component-designer 0.0.153 → 0.0.154

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