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

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 (65) hide show
  1. package/dist/elements/helper/ElementHelper.js +31 -6
  2. package/dist/elements/helper/SvgHelper.d.ts +1 -0
  3. package/dist/elements/helper/SvgHelper.js +13 -0
  4. package/dist/elements/helper/TransformHelper.d.ts +5 -1
  5. package/dist/elements/helper/TransformHelper.js +35 -27
  6. package/dist/elements/helper/contextMenu/ContextMenu.js +9 -1
  7. package/dist/elements/item/DesignItem.d.ts +12 -2
  8. package/dist/elements/item/DesignItem.js +55 -20
  9. package/dist/elements/item/IDesignItem.d.ts +10 -2
  10. package/dist/elements/services/bindingsService/BaseCustomWebcomponentBindingsService.js +1 -1
  11. package/dist/elements/services/htmlParserService/DefaultHtmlParserService.d.ts +1 -1
  12. package/dist/elements/services/htmlParserService/DefaultHtmlParserService.js +3 -3
  13. package/dist/elements/services/htmlParserService/LitElementParserService.js +2 -2
  14. package/dist/elements/services/htmlParserService/NodeHtmlParserService.js +2 -2
  15. package/dist/elements/services/htmlWriterService/AbstractHtmlWriterService.js +3 -3
  16. package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService.js +3 -3
  17. package/dist/elements/services/htmlWriterService/SimpleHtmlWriterService.js +3 -3
  18. package/dist/elements/services/manifestParsers/WebcomponentManifestParserService.d.ts +2 -2
  19. package/dist/elements/services/manifestParsers/WebcomponentManifestParserService.js +3 -2
  20. package/dist/elements/services/modelCommandService/DefaultModelCommandService.js +6 -4
  21. package/dist/elements/services/placementService/DefaultPlacementService.js +5 -5
  22. package/dist/elements/services/propertiesService/IPropertiesService.d.ts +6 -1
  23. package/dist/elements/services/propertiesService/IPropertiesService.js +6 -1
  24. package/dist/elements/services/propertiesService/IProperty.d.ts +1 -0
  25. package/dist/elements/services/propertiesService/propertyEditors/BasePropertyEditor.js +4 -4
  26. package/dist/elements/services/propertiesService/services/AbstractPolymerLikePropertiesService.d.ts +2 -1
  27. package/dist/elements/services/propertiesService/services/AbstractPolymerLikePropertiesService.js +3 -2
  28. package/dist/elements/services/propertiesService/services/AbstractPropertiesService.d.ts +3 -3
  29. package/dist/elements/services/propertiesService/services/AbstractPropertiesService.js +16 -20
  30. package/dist/elements/services/propertiesService/services/AttributesPropertiesService.d.ts +3 -3
  31. package/dist/elements/services/propertiesService/services/AttributesPropertiesService.js +10 -11
  32. package/dist/elements/services/propertiesService/services/CommonPropertiesService.d.ts +2 -1
  33. package/dist/elements/services/propertiesService/services/CommonPropertiesService.js +3 -2
  34. package/dist/elements/services/propertiesService/services/CssPropertiesService.d.ts +2 -1
  35. package/dist/elements/services/propertiesService/services/CssPropertiesService.js +4 -3
  36. package/dist/elements/services/propertiesService/services/ListPropertiesService.d.ts +2 -1
  37. package/dist/elements/services/propertiesService/services/ListPropertiesService.js +3 -2
  38. package/dist/elements/services/propertiesService/services/NativeElementsPropertiesService.d.ts +2 -1
  39. package/dist/elements/services/propertiesService/services/NativeElementsPropertiesService.js +3 -2
  40. package/dist/elements/services/propertiesService/services/WebcomponentManifestPropertiesService.d.ts +2 -2
  41. package/dist/elements/services/propertiesService/services/WebcomponentManifestPropertiesService.js +3 -2
  42. package/dist/elements/services/selectionService/SelectionService.d.ts +4 -0
  43. package/dist/elements/services/selectionService/SelectionService.js +11 -0
  44. package/dist/elements/services/undoService/UndoService.d.ts +1 -1
  45. package/dist/elements/services/undoService/transactionItems/AttributeChangeAction.js +4 -4
  46. package/dist/elements/services/undoService/transactionItems/CssStyleChangeAction.js +4 -4
  47. package/dist/elements/services/undoService/transactionItems/InsertAction.d.ts +2 -2
  48. package/dist/elements/services/undoService/transactionItems/InsertAction.js +5 -5
  49. package/dist/elements/services/undoService/transactionItems/SelectionChangedAction.d.ts +14 -0
  50. package/dist/elements/services/undoService/transactionItems/SelectionChangedAction.js +28 -0
  51. package/dist/elements/widgets/codeView/code-view-monaco.js +21 -1
  52. package/dist/elements/widgets/designerView/designerCanvas.js +8 -4
  53. package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +36 -31
  54. package/dist/elements/widgets/designerView/extensions/RotateExtensionProvider.js +3 -0
  55. package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.js +2 -2
  56. package/dist/elements/widgets/designerView/extensions/svg/EllipsisExtensionProvider.js +2 -1
  57. package/dist/elements/widgets/designerView/extensions/svg/LineExtensionProvider.js +3 -1
  58. package/dist/elements/widgets/designerView/extensions/svg/PathExtensionProvider.js +3 -1
  59. package/dist/elements/widgets/designerView/extensions/svg/RectExtensionProvider.js +3 -1
  60. package/dist/elements/widgets/propertyGrid/PropertyGrid.js +5 -0
  61. package/dist/elements/widgets/propertyGrid/PropertyGridPropertyList.d.ts +1 -0
  62. package/dist/elements/widgets/propertyGrid/PropertyGridPropertyList.js +34 -7
  63. package/dist/index.d.ts +0 -1
  64. package/dist/index.js +0 -1
  65. package/package.json +4 -4
@@ -11,12 +11,18 @@ export var ElementDisplayType;
11
11
  ElementDisplayType[ElementDisplayType["block"] = 2] = "block";
12
12
  })(ElementDisplayType || (ElementDisplayType = {}));
13
13
  export function isInline(element) {
14
+ if (element instanceof SVGElement)
15
+ return false;
14
16
  return element != null && window.getComputedStyle(element).display.startsWith('inline');
15
17
  }
16
18
  export function isInlineAfter(element) {
17
- return element != null && window.getComputedStyle(element).display == 'inline';
19
+ if (element instanceof SVGElement)
20
+ return false;
21
+ return element != null && window.getComputedStyle(element).display.startsWith('inline');
18
22
  }
19
23
  export function getElementDisplaytype(element) {
24
+ if (element instanceof SVGElement)
25
+ return ElementDisplayType.block;
20
26
  const display = window.getComputedStyle(element).display;
21
27
  return display == 'none' ? ElementDisplayType.none : display.startsWith('inline') ? ElementDisplayType.inline : ElementDisplayType.block;
22
28
  }
@@ -44,12 +50,31 @@ export function getParentElementIncludingSlots(element) {
44
50
  return element.parentElement;
45
51
  }
46
52
  export function getElementsWindowOffsetWithoutSelfAndParentTransformations(element) {
47
- var offsetLeft = 0;
48
- var offsetTop = 0;
53
+ let offsetLeft = 0;
54
+ let offsetTop = 0;
49
55
  while (element) {
50
- offsetLeft += element.offsetLeft;
51
- offsetTop += element.offsetTop;
52
- element = element.offsetParent;
56
+ if (element instanceof SVGSVGElement) {
57
+ //todo - fix without transformation
58
+ let t = element.style.transform;
59
+ element.style.transform = '';
60
+ const bcEl = element.getBoundingClientRect();
61
+ const bcPar = element.parentElement.getBoundingClientRect();
62
+ element.style.transform = t;
63
+ offsetLeft += bcEl.left - bcPar.left;
64
+ offsetTop += bcEl.top - bcPar.top;
65
+ element = element.parentElement;
66
+ }
67
+ else if (element instanceof SVGGraphicsElement) {
68
+ let bbox = element.getBBox();
69
+ offsetLeft += bbox.x;
70
+ offsetTop += bbox.y;
71
+ element = element.ownerSVGElement;
72
+ }
73
+ else {
74
+ offsetLeft += element.offsetLeft;
75
+ offsetTop += element.offsetTop;
76
+ element = element.offsetParent;
77
+ }
53
78
  }
54
79
  return { offsetLeft: offsetLeft, offsetTop: offsetTop };
55
80
  }
@@ -0,0 +1 @@
1
+ export declare function isVisualSvgElement(element: SVGElement): boolean;
@@ -0,0 +1,13 @@
1
+ export function isVisualSvgElement(element) {
2
+ let el = element;
3
+ while (el) {
4
+ if (el instanceof SVGSVGElement)
5
+ return true;
6
+ if (el instanceof SVGDefsElement)
7
+ return false;
8
+ if (el instanceof SVGMetadataElement)
9
+ return false;
10
+ el = el.parentElement;
11
+ }
12
+ return true;
13
+ }
@@ -2,7 +2,7 @@ import { IPoint } from "../../interfaces/IPoint.js";
2
2
  import { IDesignerCanvas } from "../widgets/designerView/IDesignerCanvas.js";
3
3
  export declare function combineTransforms(element: HTMLElement, actualTransforms: string, requestedTransformation: string): void;
4
4
  export declare function getDomMatrix(element: HTMLElement): DOMMatrix;
5
- export declare function convertCoordinates(point: DOMPoint, matrix: DOMMatrix): DOMPoint;
5
+ export declare function transformPointByInverseMatrix(point: DOMPoint, matrix: DOMMatrix): DOMPoint;
6
6
  export declare function getRotationMatrix3d(axisOfRotation: 'x' | 'y' | 'z' | 'X' | 'Y' | 'Z', angle: number): any[];
7
7
  export declare function rotateElementByMatrix3d(element: HTMLElement, matrix: number[]): void;
8
8
  export declare function matrixArrayToCssMatrix(matrixArray: number[]): string;
@@ -13,6 +13,10 @@ export declare function getDesignerCanvasNormalizedTransformedOriginWithoutParen
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
15
  export declare function getDesignerCanvasNormalizedTransformedPoint(element: HTMLElement, point: IPoint, designerCanvas: IDesignerCanvas): IPoint;
16
+ export declare function getElementSize(element: HTMLElement): {
17
+ width: number;
18
+ height: number;
19
+ };
16
20
  export declare function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element: HTMLElement, untransformedCornerPointsOffset: IPoint | null, designerCanvas: IDesignerCanvas): [DOMPoint, DOMPoint, DOMPoint, DOMPoint];
17
21
  export declare function extractTranslationFromDOMMatrix(matrix: DOMMatrix): DOMPoint;
18
22
  export declare function extractRotationAngleFromDOMMatrix(matrix: DOMMatrix): number;
@@ -18,8 +18,12 @@ export function combineTransforms(element, actualTransforms, requestedTransforma
18
18
  export function getDomMatrix(element) {
19
19
  return new DOMMatrix(window.getComputedStyle(element).transform);
20
20
  }
21
- export function convertCoordinates(point, matrix) {
22
- return point.matrixTransform(matrix.inverse());
21
+ export function transformPointByInverseMatrix(point, matrix) {
22
+ const inverse = matrix.inverse();
23
+ //fix chrome bug: https://bugs.chromium.org/p/chromium/issues/detail?id=1395645
24
+ inverse.m33 = 1;
25
+ inverse.m44 = 1;
26
+ return point.matrixTransform(inverse);
23
27
  }
24
28
  export function getRotationMatrix3d(axisOfRotation, angle) {
25
29
  const angleInRadians = angle / 180 * Math.PI;
@@ -83,7 +87,7 @@ export function addVectors(vectorA, vectorB) {
83
87
  return [vectorA[0] + vectorB[0], vectorA[1] + vectorB[1]];
84
88
  }
85
89
  export function getDesignerCanvasNormalizedTransformedOriginWithoutParentTransformation(element, designerCanvas) {
86
- const top0 = new DOMPointReadOnly(-parseInt(getComputedStyle(element).transformOrigin.split(' ')[0]), -parseInt(getComputedStyle(element).transformOrigin.split(' ')[1]), 0, 0);
90
+ const top0 = new DOMPointReadOnly(-parseFloat(getComputedStyle(element).transformOrigin.split(' ')[0]), -parseFloat(getComputedStyle(element).transformOrigin.split(' ')[1]), 0, 0);
87
91
  const p0Offsets = getElementsWindowOffsetWithoutSelfAndParentTransformations(element);
88
92
  const transformOriginAbsolutRelatedToWindowWithoutAnyTransformation = new DOMPoint(p0Offsets.offsetLeft - top0.x, p0Offsets.offsetTop - top0.y);
89
93
  const designerCanvasNormalizedTransformedOrigin = new DOMPoint(transformOriginAbsolutRelatedToWindowWithoutAnyTransformation.x - designerCanvas.containerBoundingRect.x, transformOriginAbsolutRelatedToWindowWithoutAnyTransformation.y - designerCanvas.containerBoundingRect.y);
@@ -92,15 +96,18 @@ export function getDesignerCanvasNormalizedTransformedOriginWithoutParentTransfo
92
96
  export function getResultingTransformationBetweenElementAndAllAncestors(element, ancestor, excludeAncestor) {
93
97
  let actualElement = element;
94
98
  let actualElementMatrix;
99
+ let newElementMatrix;
95
100
  let originalElementAndAllParentsMultipliedMatrix;
96
101
  while (actualElement != ancestor) {
97
102
  const newElement = getParentElementIncludingSlots(actualElement);
98
103
  actualElementMatrix = new DOMMatrix(getComputedStyle(actualElement).transform);
104
+ newElementMatrix = new DOMMatrix(getComputedStyle(newElement).transform);
105
+ newElementMatrix.m41 = newElementMatrix.m42 = 0;
99
106
  if (actualElement == element) {
100
- originalElementAndAllParentsMultipliedMatrix = actualElementMatrix.multiply(new DOMMatrix(getComputedStyle(newElement).transform));
107
+ originalElementAndAllParentsMultipliedMatrix = actualElementMatrix.multiply(newElementMatrix);
101
108
  }
102
109
  else if (newElement != ancestor || !excludeAncestor) {
103
- originalElementAndAllParentsMultipliedMatrix = originalElementAndAllParentsMultipliedMatrix.multiply(new DOMMatrix(getComputedStyle(newElement).transform));
110
+ originalElementAndAllParentsMultipliedMatrix = originalElementAndAllParentsMultipliedMatrix.multiply(newElementMatrix);
104
111
  }
105
112
  actualElement = newElement;
106
113
  }
@@ -113,9 +120,11 @@ export function getByParentsTransformedPointRelatedToCanvas(element, point, desi
113
120
  let byParentTransformedPointRelatedToCanvas = { x: 0, y: 0 };
114
121
  while (actualElement != canvas) {
115
122
  const parentElement = getParentElementIncludingSlots(actualElement);
116
- const parentElementTransformOrigin = new DOMPoint(getElementsWindowOffsetWithoutSelfAndParentTransformations(parentElement).offsetLeft - designerCanvas.outerRect.x + parseInt(getComputedStyle(parentElement).transformOrigin.split(' ')[0]), getElementsWindowOffsetWithoutSelfAndParentTransformations(parentElement).offsetTop - designerCanvas.outerRect.y + parseInt(getComputedStyle(parentElement).transformOrigin.split(' ')[1]));
117
- parentElementTransformOrigin.x -= extractTranslationFromDOMMatrix(new DOMMatrix(element.style.transform)).x;
118
- parentElementTransformOrigin.y -= extractTranslationFromDOMMatrix(new DOMMatrix(element.style.transform)).y;
123
+ const parentElementTransformOrigin = new DOMPoint(getElementsWindowOffsetWithoutSelfAndParentTransformations(parentElement).offsetLeft - designerCanvas.outerRect.x + parseFloat(getComputedStyle(parentElement).transformOrigin.split(' ')[0]), getElementsWindowOffsetWithoutSelfAndParentTransformations(parentElement).offsetTop - designerCanvas.outerRect.y + parseFloat(getComputedStyle(parentElement).transformOrigin.split(' ')[1]));
124
+ if (actualElement == element) {
125
+ parentElementTransformOrigin.x -= extractTranslationFromDOMMatrix(new DOMMatrix(element.style.transform)).x;
126
+ parentElementTransformOrigin.y -= extractTranslationFromDOMMatrix(new DOMMatrix(element.style.transform)).y;
127
+ }
119
128
  const parentElementTransformOriginToPointVector = new DOMPointReadOnly(-parentElementTransformOrigin.x + (element == actualElement ? point.x : byParentTransformedPointRelatedToCanvas.x), -parentElementTransformOrigin.y + (element == actualElement ? point.y : byParentTransformedPointRelatedToCanvas.y));
120
129
  parentElementTransformOriginToPointVectorTransformed = parentElementTransformOriginToPointVector.matrixTransform(new DOMMatrix(getComputedStyle(parentElement).transform));
121
130
  byParentTransformedPointRelatedToCanvas = new DOMPoint(parentElementTransformOrigin.x + parentElementTransformOriginToPointVectorTransformed.x, parentElementTransformOrigin.y + parentElementTransformOriginToPointVectorTransformed.y);
@@ -126,6 +135,20 @@ export function getByParentsTransformedPointRelatedToCanvas(element, point, desi
126
135
  export function getDesignerCanvasNormalizedTransformedPoint(element, point, designerCanvas) {
127
136
  return getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, { x: -point.x, y: -point.y }, designerCanvas)[0];
128
137
  }
138
+ export function getElementSize(element) {
139
+ let width = element.offsetWidth;
140
+ let height = element.offsetHeight;
141
+ if (element instanceof SVGElement && element.width) {
142
+ width = element.width.baseVal.value;
143
+ height = element.height.baseVal.value;
144
+ }
145
+ else if (element instanceof SVGGraphicsElement) {
146
+ let bbox = element.getBBox();
147
+ width = bbox.width;
148
+ height = bbox.height;
149
+ }
150
+ return { width, height };
151
+ }
129
152
  export function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, untransformedCornerPointsOffset, designerCanvas) {
130
153
  const topleft = 0;
131
154
  const topright = 1;
@@ -137,22 +160,7 @@ export function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, u
137
160
  x: p0Offsets.offsetLeft - designerCanvas.containerBoundingRect.left,
138
161
  y: p0Offsets.offsetTop - designerCanvas.containerBoundingRect.top
139
162
  });
140
- let width = parseInt(getComputedStyle(element).width.replace('px', ''));
141
- let height = parseInt(getComputedStyle(element).height.replace('px', ''));
142
- if (getComputedStyle(element).boxSizing == 'content-box') {
143
- width += parseInt(getComputedStyle(element).paddingLeft.replace('px', ''))
144
- + parseInt(getComputedStyle(element).marginLeft.replace('px', ''))
145
- + parseInt(getComputedStyle(element).borderLeft.replace('px', ''))
146
- + parseInt(getComputedStyle(element).paddingRight.replace('px', ''))
147
- + parseInt(getComputedStyle(element).marginRight.replace('px', ''))
148
- + parseInt(getComputedStyle(element).borderRight.replace('px', ''));
149
- height += parseInt(getComputedStyle(element).paddingTop.replace('px', ''))
150
- + parseInt(getComputedStyle(element).marginTop.replace('px', ''))
151
- + parseInt(getComputedStyle(element).borderTop.replace('px', ''))
152
- + parseInt(getComputedStyle(element).paddingBottom.replace('px', ''))
153
- + parseInt(getComputedStyle(element).marginBottom.replace('px', ''))
154
- + parseInt(getComputedStyle(element).borderBottom.replace('px', ''));
155
- }
163
+ let { width, height } = getElementSize(element);
156
164
  const elementWithoutTransformCornerDOMPoints = [];
157
165
  elementWithoutTransformCornerDOMPoints[topleft] = DOMPoint.fromPoint({
158
166
  x: p0OffsetsRelatedToCanvas.x - intUntransformedCornerPointsOffset.x,
@@ -171,12 +179,12 @@ export function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, u
171
179
  y: p0OffsetsRelatedToCanvas.y + height + intUntransformedCornerPointsOffset.y
172
180
  });
173
181
  const transformOriginWithoutTransformRelatedToCanvas = DOMPointReadOnly.fromPoint({
174
- x: p0OffsetsRelatedToCanvas.x + parseInt(getComputedStyle(element).transformOrigin.split(' ')[0]),
175
- y: p0OffsetsRelatedToCanvas.y + parseInt(getComputedStyle(element).transformOrigin.split(' ')[1]),
182
+ x: p0OffsetsRelatedToCanvas.x + parseFloat(getComputedStyle(element).transformOrigin.split(' ')[0]),
183
+ y: p0OffsetsRelatedToCanvas.y + parseFloat(getComputedStyle(element).transformOrigin.split(' ')[1]),
176
184
  z: 0,
177
185
  w: 0
178
186
  });
179
- const designerCanvasNormalizedTransformOrigin = getByParentsTransformedPointRelatedToCanvas(element, new DOMPoint(getElementsWindowOffsetWithoutSelfAndParentTransformations(element).offsetLeft - designerCanvas.outerRect.left + parseInt(getComputedStyle(element).transformOrigin.split(' ')[0]), getElementsWindowOffsetWithoutSelfAndParentTransformations(element).offsetTop - designerCanvas.outerRect.top + parseInt(getComputedStyle(element).transformOrigin.split(' ')[1])), designerCanvas);
187
+ const designerCanvasNormalizedTransformOrigin = getByParentsTransformedPointRelatedToCanvas(element, new DOMPoint(getElementsWindowOffsetWithoutSelfAndParentTransformations(element).offsetLeft - designerCanvas.outerRect.left + parseFloat(getComputedStyle(element).transformOrigin.split(' ')[0]), getElementsWindowOffsetWithoutSelfAndParentTransformations(element).offsetTop - designerCanvas.outerRect.top + parseFloat(getComputedStyle(element).transformOrigin.split(' ')[1])), designerCanvas);
180
188
  let top0 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[topleft].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[topleft].y));
181
189
  let top1 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[topright].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[topright].y));
182
190
  let top2 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[bottomleft].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[bottomleft].y));
@@ -178,7 +178,15 @@ export class ContextMenu {
178
178
  this.close();
179
179
  });
180
180
  if (item.children != null) {
181
- li.appendChild(this.renderLevel(item.children));
181
+ let childmenu = this.renderLevel(item.children);
182
+ li.appendChild(childmenu);
183
+ li.addEventListener('mouseenter', () => {
184
+ const childRect = childmenu.getBoundingClientRect();
185
+ if (childRect.top + childRect.height > window.innerHeight) {
186
+ childmenu.style.top = 'unset';
187
+ childmenu.style.bottom = '0';
188
+ }
189
+ });
182
190
  }
183
191
  }
184
192
  lastWasDivider = false;
@@ -15,10 +15,20 @@ export declare class DesignItem implements IDesignItem {
15
15
  clone(): Promise<IDesignItem>;
16
16
  replaceNode(newNode: Node): void;
17
17
  get nodeType(): NodeType;
18
+ private _attributes;
18
19
  get hasAttributes(): boolean;
19
- attributes: Map<string, string>;
20
+ hasAttribute(name: string): boolean;
21
+ getAttribute(name: string): string;
22
+ attributes(): Generator<[string, string], void, unknown>;
23
+ _withoutUndoSetAttribute(name: string, value: string): void;
24
+ _withoutUndoRemoveAttribute(name: string): void;
25
+ private _styles;
20
26
  get hasStyles(): boolean;
21
- styles: Map<string, string>;
27
+ hasStyle(name: string): boolean;
28
+ getStyle(name: string): string;
29
+ styles(): Generator<[string, string], void, unknown>;
30
+ _withoutUndoSetStyle(name: string, value: string): void;
31
+ _withoutUndoRemoveStyle(name: string): void;
22
32
  private static _designItemMap;
23
33
  get element(): Element;
24
34
  get name(): string;
@@ -33,14 +33,48 @@ export class DesignItem {
33
33
  return NodeType.TextNode;
34
34
  return NodeType.Element;
35
35
  }
36
+ _attributes;
36
37
  get hasAttributes() {
37
- return this.attributes.size > 0;
38
+ return this._attributes.size > 0;
38
39
  }
39
- attributes;
40
+ hasAttribute(name) {
41
+ return this._attributes.has(name);
42
+ }
43
+ getAttribute(name) {
44
+ return this._attributes.get(name);
45
+ }
46
+ *attributes() {
47
+ for (let s of this._attributes) {
48
+ yield s;
49
+ }
50
+ }
51
+ _withoutUndoSetAttribute(name, value) {
52
+ this._attributes.set(name, value);
53
+ }
54
+ _withoutUndoRemoveAttribute(name) {
55
+ this._attributes.delete(name);
56
+ }
57
+ _styles;
40
58
  get hasStyles() {
41
- return this.styles.size > 0;
59
+ return this._styles.size > 0;
60
+ }
61
+ hasStyle(name) {
62
+ return this._styles.has(name);
63
+ }
64
+ getStyle(name) {
65
+ return this._styles.get(name);
66
+ }
67
+ *styles() {
68
+ for (let s of this._styles) {
69
+ yield s;
70
+ }
71
+ }
72
+ _withoutUndoSetStyle(name, value) {
73
+ this._styles.set(name, value);
74
+ }
75
+ _withoutUndoRemoveStyle(name) {
76
+ this._styles.delete(name);
42
77
  }
43
- styles;
44
78
  static _designItemMap = new WeakMap();
45
79
  get element() {
46
80
  return this.node;
@@ -140,12 +174,12 @@ export class DesignItem {
140
174
  set hideAtDesignTime(value) {
141
175
  this._hideAtDesignTime = value;
142
176
  if (value)
143
- this.attributes.set(hideAtDesignTimeAttributeName, "");
177
+ this._attributes.set(hideAtDesignTimeAttributeName, "");
144
178
  else
145
- this.attributes.delete(hideAtDesignTimeAttributeName);
179
+ this._attributes.delete(hideAtDesignTimeAttributeName);
146
180
  if (this.element instanceof HTMLElement || this.element instanceof SVGElement) {
147
181
  if (!value)
148
- this.element.style.display = this.styles.get('display') ?? "";
182
+ this.element.style.display = this._styles.get('display') ?? "";
149
183
  else
150
184
  this.element.style.display = 'none';
151
185
  }
@@ -157,12 +191,12 @@ export class DesignItem {
157
191
  set hideAtRunTime(value) {
158
192
  this._hideAtRunTime = value;
159
193
  if (value)
160
- this.attributes.set(hideAtRunTimeAttributeName, "");
194
+ this._attributes.set(hideAtRunTimeAttributeName, "");
161
195
  else
162
- this.attributes.delete(hideAtRunTimeAttributeName);
196
+ this._attributes.delete(hideAtRunTimeAttributeName);
163
197
  if (this.element instanceof HTMLElement || this.element instanceof SVGElement) {
164
198
  if (!value)
165
- this.element.style.opacity = this.styles.get('opacity') ?? "";
199
+ this.element.style.opacity = this._styles.get('opacity') ?? "";
166
200
  else
167
201
  this.element.style.opacity = '0.3';
168
202
  }
@@ -174,9 +208,9 @@ export class DesignItem {
174
208
  set lockAtDesignTime(value) {
175
209
  this._lockAtDesignTime = value;
176
210
  if (value)
177
- this.attributes.set(lockAtDesignTimeAttributeName, "");
211
+ this._attributes.set(lockAtDesignTimeAttributeName, "");
178
212
  else
179
- this.attributes.delete(lockAtDesignTimeAttributeName);
213
+ this._attributes.delete(lockAtDesignTimeAttributeName);
180
214
  if (this.element instanceof HTMLElement || this.element instanceof SVGElement) {
181
215
  if (!value)
182
216
  this.element.style.pointerEvents = 'auto';
@@ -189,7 +223,7 @@ export class DesignItem {
189
223
  if (designItem.nodeType == NodeType.Element) {
190
224
  for (let a of designItem.element.attributes) {
191
225
  if (a.name !== 'style') {
192
- designItem.attributes.set(a.name, a.value);
226
+ designItem._attributes.set(a.name, a.value);
193
227
  if (a.name === hideAtDesignTimeAttributeName)
194
228
  designItem._hideAtDesignTime = true;
195
229
  if (a.name === hideAtRunTimeAttributeName)
@@ -204,7 +238,7 @@ export class DesignItem {
204
238
  if (st) {
205
239
  cssParser.parse(st);
206
240
  for (let e of cssParser.entries) {
207
- designItem.styles.set(e.name, e.value);
241
+ designItem._styles.set(e.name, e.value);
208
242
  }
209
243
  }
210
244
  if (!designItem._lockAtDesignTime) {
@@ -230,8 +264,8 @@ export class DesignItem {
230
264
  this.node = node;
231
265
  this.serviceContainer = serviceContainer;
232
266
  this.instanceServiceContainer = instanceServiceContainer;
233
- this.attributes = new Map();
234
- this.styles = new Map();
267
+ this._attributes = new Map();
268
+ this._styles = new Map();
235
269
  DesignItem._designItemMap.set(node, this);
236
270
  }
237
271
  openGroup(title) {
@@ -257,20 +291,20 @@ export class DesignItem {
257
291
  }
258
292
  setStyle(name, value) {
259
293
  let nm = PropertiesHelper.camelToDashCase(name);
260
- const action = new CssStyleChangeAction(this, nm, value, this.styles.get(nm));
294
+ const action = new CssStyleChangeAction(this, nm, value, this._styles.get(nm));
261
295
  this.instanceServiceContainer.undoService.execute(action);
262
296
  }
263
297
  removeStyle(name) {
264
298
  let nm = PropertiesHelper.camelToDashCase(name);
265
- const action = new CssStyleChangeAction(this, nm, '', this.styles.get(nm));
299
+ const action = new CssStyleChangeAction(this, nm, '', this._styles.get(nm));
266
300
  this.instanceServiceContainer.undoService.execute(action);
267
301
  }
268
302
  setAttribute(name, value) {
269
- const action = new AttributeChangeAction(this, name, value, this.attributes.get(name));
303
+ const action = new AttributeChangeAction(this, name, value, this._attributes.get(name));
270
304
  this.instanceServiceContainer.undoService.execute(action);
271
305
  }
272
306
  removeAttribute(name) {
273
- const action = new AttributeChangeAction(this, name, null, this.attributes.get(name));
307
+ const action = new AttributeChangeAction(this, name, null, this._attributes.get(name));
274
308
  this.instanceServiceContainer.undoService.execute(action);
275
309
  }
276
310
  // Internal implementations wich don't use undo/redo
@@ -289,6 +323,7 @@ export class DesignItem {
289
323
  this.node.insertBefore(designItem.node, el.element);
290
324
  this._childArray.splice(index, 0, designItem);
291
325
  }
326
+ //todo: is this still needed???
292
327
  if (this.instanceServiceContainer.selectionService.primarySelection == designItem)
293
328
  designItem.instanceServiceContainer.designerCanvas.extensionManager.applyExtension(designItem.parent, ExtensionType.PrimarySelectionContainer);
294
329
  }
@@ -14,9 +14,7 @@ export interface IDesignItem {
14
14
  id: string;
15
15
  readonly isRootItem: boolean;
16
16
  readonly hasAttributes: boolean;
17
- readonly attributes: Map<string, string>;
18
17
  readonly hasStyles: boolean;
19
- readonly styles: Map<string, string>;
20
18
  readonly hasChildren: boolean;
21
19
  children(): IterableIterator<IDesignItem>;
22
20
  readonly childCount: number;
@@ -24,6 +22,10 @@ export interface IDesignItem {
24
22
  readonly parent: IDesignItem;
25
23
  _insertChildInternal(designItem: IDesignItem, index?: number): any;
26
24
  _removeChildInternal(designItem: IDesignItem): any;
25
+ _withoutUndoSetStyle(name: string, value: string): any;
26
+ _withoutUndoRemoveStyle(name: string): any;
27
+ _withoutUndoSetAttribute(name: string, value: string): any;
28
+ _withoutUndoRemoveAttribute(name: string): any;
27
29
  indexOf(designItem: IDesignItem): number;
28
30
  insertAdjacentElement(designItem: IDesignItem, where: InsertPosition): any;
29
31
  insertChild(designItem: IDesignItem, index?: number): any;
@@ -42,8 +44,14 @@ export interface IDesignItem {
42
44
  appliedDesignerExtensions: Map<ExtensionType, IDesignerExtension[]>;
43
45
  getOrCreateDesignItem(node: Node): any;
44
46
  openGroup(title: string): ChangeGroup;
47
+ styles(): Iterable<[name: string, value: string]>;
48
+ getStyle(name: string): any;
49
+ hasStyle(name: string): any;
45
50
  setStyle(name: string, value?: string | null): any;
46
51
  removeStyle(name: string): any;
52
+ attributes(): Iterable<[name: string, value: string]>;
53
+ getAttribute(name: string): any;
54
+ hasAttribute(name: string): any;
47
55
  setAttribute(name: string, value?: string | null): any;
48
56
  removeAttribute(name: string): any;
49
57
  hideAtDesignTime: boolean;
@@ -5,7 +5,7 @@ export class BaseCustomWebcomponentBindingsService {
5
5
  static type = 'base-custom-webcomponent-binding';
6
6
  getBindings(designItem) {
7
7
  let bindings = null;
8
- for (let a of designItem.attributes) {
8
+ for (let a of designItem.attributes()) {
9
9
  const name = a[0];
10
10
  const value = a[1];
11
11
  if ((value.startsWith('[[') || value.startsWith('{{')) && (value.endsWith('}}') || value.endsWith(']]'))) {
@@ -4,6 +4,6 @@ import { ServiceContainer } from "../ServiceContainer";
4
4
  import { IHtmlParserService } from "./IHtmlParserService";
5
5
  export declare class DefaultHtmlParserService implements IHtmlParserService {
6
6
  parse(html: string, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer): Promise<IDesignItem[]>;
7
- createDesignItems(elements: HTMLCollection | HTMLElement[], serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer): IDesignItem[];
7
+ createDesignItems(elements: NodeListOf<ChildNode> | Node[] | HTMLCollection | HTMLElement[], serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer): IDesignItem[];
8
8
  private _createDesignItemsRecursive;
9
9
  }
@@ -3,7 +3,7 @@ export class DefaultHtmlParserService {
3
3
  async parse(html, serviceContainer, instanceServiceContainer) {
4
4
  const parser = new DOMParser();
5
5
  const doc = parser.parseFromString(html, 'text/html');
6
- return this.createDesignItems(doc.body.children, serviceContainer, instanceServiceContainer);
6
+ return this.createDesignItems(doc.body.childNodes, serviceContainer, instanceServiceContainer);
7
7
  }
8
8
  createDesignItems(elements, serviceContainer, instanceServiceContainer) {
9
9
  let res = [];
@@ -12,7 +12,7 @@ export class DefaultHtmlParserService {
12
12
  }
13
13
  return res;
14
14
  }
15
- _createDesignItemsRecursive(element, serviceContainer, instanceServiceContainer) {
16
- return DesignItem.createDesignItemFromInstance(element, serviceContainer, instanceServiceContainer);
15
+ _createDesignItemsRecursive(node, serviceContainer, instanceServiceContainer) {
16
+ return DesignItem.createDesignItemFromInstance(node, serviceContainer, instanceServiceContainer);
17
17
  }
18
18
  }
@@ -55,7 +55,7 @@ export class LitElementParserService {
55
55
  let attr = item.attributes;
56
56
  for (let a in attr) {
57
57
  if (a !== 'style') {
58
- designItem.attributes.set(a, attr[a]);
58
+ designItem._withoutUndoSetAttribute(a, attr[a]);
59
59
  if (manualCreatedElement) {
60
60
  element.setAttribute(a, attr[a]);
61
61
  }
@@ -74,7 +74,7 @@ export class LitElementParserService {
74
74
  let styleParser = new CssAttributeParser();
75
75
  styleParser.parse(style);
76
76
  for (let s of styleParser.entries) {
77
- designItem.styles.set(s.name, s.value);
77
+ designItem._withoutUndoSetStyle(s.name, s.value);
78
78
  if (manualCreatedElement) {
79
79
  element.style[s.name] = s.value;
80
80
  }
@@ -45,7 +45,7 @@ export class NodeHtmlParserService {
45
45
  let attr = item.attributes;
46
46
  for (let a in attr) {
47
47
  if (a !== 'style') {
48
- designItem.attributes.set(a, attr[a]);
48
+ designItem._withoutUndoSetAttribute(a, attr[a]);
49
49
  if (manualCreatedElement) {
50
50
  element.setAttribute(a, attr[a]);
51
51
  }
@@ -64,7 +64,7 @@ export class NodeHtmlParserService {
64
64
  let styleParser = new CssAttributeParser();
65
65
  styleParser.parse(style);
66
66
  for (let s of styleParser.entries) {
67
- designItem.styles.set(s.name, s.value);
67
+ designItem._withoutUndoSetStyle(s.name, s.value);
68
68
  if (manualCreatedElement) {
69
69
  element.style[s.name] = s.value;
70
70
  }
@@ -4,7 +4,7 @@ import { PropertiesHelper } from '../propertiesService/services/PropertiesHelper
4
4
  export class AbstractHtmlWriterService {
5
5
  writeAttributes(indentedTextWriter, designItem, options) {
6
6
  if (designItem.hasAttributes) {
7
- for (const a of designItem.attributes) {
7
+ for (const a of designItem.attributes()) {
8
8
  indentedTextWriter.write(' ');
9
9
  if (typeof a[1] === 'string') {
10
10
  if (a[1] === "")
@@ -48,9 +48,9 @@ export class AbstractHtmlWriterService {
48
48
  writeStyles(indentedTextWriter, designItem, options) {
49
49
  if (designItem.hasStyles) {
50
50
  indentedTextWriter.write(' style="');
51
- let styles = designItem.styles;
51
+ let styles = designItem.styles();
52
52
  if (options.compressCssToShorthandProperties)
53
- styles = CssCombiner.combine(styles);
53
+ styles = CssCombiner.combine(new Map(styles));
54
54
  for (const s of styles) {
55
55
  if (s[0]) {
56
56
  indentedTextWriter.write(PropertiesHelper.camelToDashCase(s[0]) + ':' + DomConverter.normalizeAttributeValue(s[1]) + ';');
@@ -12,7 +12,7 @@ var ElementContainerType;
12
12
  export class FormatingHtmlWriterService {
13
13
  writeAttributes(writeContext, designItem) {
14
14
  if (designItem.hasAttributes) {
15
- for (const a of designItem.attributes) {
15
+ for (const a of designItem.attributes()) {
16
16
  writeContext.indentedTextWriter.write(' ');
17
17
  if (typeof a[1] === 'string') {
18
18
  if (a[1] === "")
@@ -30,9 +30,9 @@ export class FormatingHtmlWriterService {
30
30
  writeStyles(writeContext, designItem) {
31
31
  if (designItem.hasStyles) {
32
32
  writeContext.indentedTextWriter.write(' style="');
33
- let styles = designItem.styles;
33
+ let styles = designItem.styles();
34
34
  if (writeContext.options.compressCssToShorthandProperties)
35
- styles = CssCombiner.combine(styles);
35
+ styles = CssCombiner.combine(new Map(styles));
36
36
  for (const s of styles) {
37
37
  if (s[0]) {
38
38
  writeContext.indentedTextWriter.write(PropertiesHelper.camelToDashCase(s[0]) + ':' + DomConverter.normalizeAttributeValue(s[1]) + ';');
@@ -11,7 +11,7 @@ export var ElementContainerType;
11
11
  export class SimpleHtmlWriterService {
12
12
  writeAttributes(writeContext, designItem) {
13
13
  if (designItem.hasAttributes) {
14
- for (const a of designItem.attributes) {
14
+ for (const a of designItem.attributes()) {
15
15
  writeContext.indentedTextWriter.write(' ');
16
16
  if (typeof a[1] === 'string') {
17
17
  if (a[1] === "")
@@ -29,9 +29,9 @@ export class SimpleHtmlWriterService {
29
29
  writeStyles(writeContext, designItem) {
30
30
  if (designItem.hasStyles) {
31
31
  writeContext.indentedTextWriter.write(' style="');
32
- let styles = designItem.styles;
32
+ let styles = designItem.styles();
33
33
  if (writeContext.options.compressCssToShorthandProperties)
34
- styles = CssCombiner.combine(styles);
34
+ styles = CssCombiner.combine(new Map(styles));
35
35
  for (const s of styles) {
36
36
  if (s[0]) {
37
37
  writeContext.indentedTextWriter.write(PropertiesHelper.camelToDashCase(s[0]) + ':' + DomConverter.normalizeAttributeValue(s[1]) + ';');
@@ -1,12 +1,12 @@
1
1
  import { BindingTarget } from "../../item/BindingTarget";
2
2
  import { IElementDefinition } from "../elementsService/IElementDefinition";
3
3
  import { IElementsService } from "../elementsService/IElementsService";
4
- import { IPropertiesService } from "../propertiesService/IPropertiesService";
4
+ import { IPropertiesService, RefreshMode } from "../propertiesService/IPropertiesService";
5
5
  import { IProperty } from "../propertiesService/IProperty";
6
6
  import { IDesignItem } from "../../item/IDesignItem";
7
7
  import { AbstractPropertiesService } from "../propertiesService/services/AbstractPropertiesService";
8
8
  export declare class WebcomponentManifestParserService extends AbstractPropertiesService implements IElementsService, IPropertiesService {
9
- listNeedsRefresh(designItem: IDesignItem): boolean;
9
+ getRefreshMode(designItem: IDesignItem): RefreshMode;
10
10
  private _name;
11
11
  get name(): string;
12
12
  private _packageData;
@@ -1,9 +1,10 @@
1
1
  import { BindingTarget } from "../../item/BindingTarget";
2
+ import { RefreshMode } from "../propertiesService/IPropertiesService";
2
3
  import { PropertyType } from "../propertiesService/PropertyType";
3
4
  import { AbstractPropertiesService } from "../propertiesService/services/AbstractPropertiesService";
4
5
  export class WebcomponentManifestParserService extends AbstractPropertiesService {
5
- listNeedsRefresh(designItem) {
6
- return false;
6
+ getRefreshMode(designItem) {
7
+ return RefreshMode.none;
7
8
  }
8
9
  _name;
9
10
  get name() { return this._name; }