@node-projects/web-component-designer 0.1.11 → 0.1.12

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 (35) hide show
  1. package/dist/elements/helper/ElementHelper.d.ts +1 -1
  2. package/dist/elements/helper/ElementHelper.js +30 -4
  3. package/dist/elements/helper/TransformHelper.d.ts +2 -2
  4. package/dist/elements/helper/TransformHelper.js +11 -7
  5. package/dist/elements/item/DesignItem.d.ts +3 -1
  6. package/dist/elements/item/DesignItem.js +11 -5
  7. package/dist/elements/item/IDesignItem.d.ts +1 -0
  8. package/dist/elements/services/BaseServiceContainer.d.ts +1 -0
  9. package/dist/elements/services/BaseServiceContainer.js +6 -0
  10. package/dist/elements/services/placementService/DefaultPlacementService.js +1 -1
  11. package/dist/elements/services/propertiesService/services/NativeElementsPropertiesService.js +15 -0
  12. package/dist/elements/widgets/designerView/extensions/AbstractExtension.d.ts +2 -2
  13. package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtension.js +1 -1
  14. package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.js +1 -1
  15. package/dist/elements/widgets/designerView/extensions/ExtensionManager.d.ts +1 -1
  16. package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +36 -10
  17. package/dist/elements/widgets/designerView/extensions/IDesignerExtension.d.ts +2 -2
  18. package/dist/elements/widgets/designerView/extensions/IExtensionManger.d.ts +1 -1
  19. package/dist/elements/widgets/designerView/extensions/OverlayLayer.d.ts +1 -1
  20. package/dist/elements/widgets/designerView/extensions/OverlayLayer.js +1 -1
  21. package/dist/elements/widgets/designerView/extensions/SelectionDefaultExtension.d.ts +2 -2
  22. package/dist/elements/widgets/designerView/extensions/SelectionDefaultExtension.js +4 -4
  23. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorLinePointerExtension.js +5 -5
  24. package/dist/elements/widgets/designerView/overlayLayerView.d.ts +6 -0
  25. package/dist/elements/widgets/designerView/overlayLayerView.js +39 -4
  26. package/dist/elements/widgets/designerView/tools/DrawElementTool.js +1 -1
  27. package/dist/elements/widgets/designerView/tools/DrawEllipsisTool.js +1 -1
  28. package/dist/elements/widgets/designerView/tools/DrawLineTool.js +1 -1
  29. package/dist/elements/widgets/designerView/tools/DrawPathTool.js +1 -1
  30. package/dist/elements/widgets/designerView/tools/DrawRectTool.js +1 -1
  31. package/dist/elements/widgets/designerView/tools/MagicWandSelectorTool.js +1 -1
  32. package/dist/elements/widgets/designerView/tools/PointerTool.js +2 -2
  33. package/dist/elements/widgets/designerView/tools/RectangleSelectorTool.js +1 -1
  34. package/dist/elements/widgets/designerView/tools/ZoomTool.js +1 -1
  35. package/package.json +1 -1
@@ -15,7 +15,7 @@ export declare function getElementDisplaytype(element: HTMLElement): ElementDisp
15
15
  export declare function isEmptyTextNode(node: Node): boolean;
16
16
  export declare function getActiveElement(): Element;
17
17
  export declare function getParentElementIncludingSlots(element: Element): Element;
18
- export declare function getElementsWindowOffsetWithoutSelfAndParentTransformations(element: any, zoom: number): {
18
+ export declare function getElementsWindowOffsetWithoutSelfAndParentTransformations(element: any, zoom: number, cache?: Record<string | symbol, any>): {
19
19
  offsetLeft: number;
20
20
  offsetTop: number;
21
21
  };
@@ -55,25 +55,45 @@ export function getParentElementIncludingSlots(element) {
55
55
  }
56
56
  return element.parentElement;
57
57
  }
58
- export function getElementsWindowOffsetWithoutSelfAndParentTransformations(element, zoom) {
58
+ const windowOffsetsCacheKey = Symbol('windowOffsetsCacheKey');
59
+ export function getElementsWindowOffsetWithoutSelfAndParentTransformations(element, zoom, cache = {}) {
59
60
  let offsetLeft = 0;
60
61
  let offsetTop = 0;
62
+ let ch = cache[windowOffsetsCacheKey] = cache[windowOffsetsCacheKey] ?? new Map();
63
+ let lst = [];
61
64
  while (element) {
65
+ let cachedObj = ch.get(element);
66
+ if (cachedObj) {
67
+ offsetLeft += cachedObj.offsetLeft;
68
+ offsetTop += cachedObj.offsetTop;
69
+ lst.forEach(x => { x.offsetLeft += cachedObj.offsetLeft; x.offsetTop += cachedObj.offsetTop; });
70
+ break;
71
+ }
62
72
  if (element instanceof SVGSVGElement) {
63
- //todo - fix without transformation
73
+ //TODO: !huge Perf impact! - fix without transformation
64
74
  let t = element.style.transform;
65
75
  element.style.transform = '';
66
76
  const bcEl = element.getBoundingClientRect();
67
77
  const bcPar = element.parentElement.getBoundingClientRect();
68
78
  element.style.transform = t;
69
- offsetLeft += (bcEl.left - bcPar.left) / zoom;
70
- offsetTop += (bcEl.top - bcPar.top) / zoom;
79
+ const currLeft = (bcEl.left - bcPar.left) / zoom;
80
+ const currTop = (bcEl.top - bcPar.top) / zoom;
81
+ offsetLeft += currLeft;
82
+ offsetTop += currTop;
83
+ lst.forEach(x => { x.offsetLeft += currLeft; x.offsetTop += currTop; });
84
+ const cacheEntry = { offsetLeft: currLeft, offsetTop: currTop };
85
+ lst.push(cacheEntry);
86
+ ch.set(element, cacheEntry);
71
87
  element = element.parentElement;
72
88
  }
73
89
  else if (element instanceof SVGGraphicsElement) {
74
90
  let bbox = element.getBBox();
75
91
  offsetLeft += bbox.x;
76
92
  offsetTop += bbox.y;
93
+ lst.forEach(x => { x.offsetLeft += bbox.x; x.offsetTop += bbox.y; });
94
+ const cacheEntry = { offsetLeft: bbox.x, offsetTop: bbox.y };
95
+ lst.push(cacheEntry);
96
+ ch.set(element, cacheEntry);
77
97
  element = element.ownerSVGElement;
78
98
  }
79
99
  else if (element instanceof HTMLBodyElement) {
@@ -83,6 +103,12 @@ export function getElementsWindowOffsetWithoutSelfAndParentTransformations(eleme
83
103
  element = element.parentElement;
84
104
  }
85
105
  else {
106
+ const currLeft = element.offsetLeft;
107
+ const currTop = element.offsetTop;
108
+ lst.forEach(x => { x.offsetLeft += currLeft; x.offsetTop += currTop; });
109
+ const cacheEntry = { offsetLeft: currLeft, offsetTop: currTop };
110
+ lst.push(cacheEntry);
111
+ ch.set(element, cacheEntry);
86
112
  offsetLeft += element.offsetLeft;
87
113
  offsetTop += element.offsetTop;
88
114
  element = element.offsetParent;
@@ -11,13 +11,13 @@ export declare function getRotationAngleFromMatrix(matrixArray: number[], domMat
11
11
  export declare function addVectors(vectorA: [number, number], vectorB: [number, number]): [number, 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
- export declare function getByParentsTransformedPointRelatedToCanvas(element: HTMLElement, point: DOMPoint, designerCanvas: IDesignerCanvas): IPoint;
14
+ export declare function getByParentsTransformedPointRelatedToCanvas(element: HTMLElement, point: DOMPoint, designerCanvas: IDesignerCanvas, cache?: Record<string | symbol, any>): IPoint;
15
15
  export declare function getDesignerCanvasNormalizedTransformedPoint(element: HTMLElement, point: IPoint, designerCanvas: IDesignerCanvas): IPoint;
16
16
  export declare function getElementSize(element: HTMLElement): {
17
17
  width: number;
18
18
  height: number;
19
19
  };
20
- export declare function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element: HTMLElement, untransformedCornerPointsOffset: IPoint | null, designerCanvas: IDesignerCanvas): [DOMPoint, DOMPoint, DOMPoint, DOMPoint];
20
+ export declare function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element: HTMLElement, untransformedCornerPointsOffset: IPoint | null, designerCanvas: IDesignerCanvas, cache?: Record<string | symbol, any>): [DOMPoint, DOMPoint, DOMPoint, DOMPoint];
21
21
  export declare function extractTranslationFromDOMMatrix(matrix: DOMMatrix): DOMPoint;
22
22
  export declare function extractRotationAngleFromDOMMatrix(matrix: DOMMatrix): number;
23
23
  export declare function normalizeToAbsolutePosition(element: HTMLElement, normalizeProperty: "left" | "top"): string;
@@ -109,6 +109,7 @@ export function getDesignerCanvasNormalizedTransformedOriginWithoutParentTransfo
109
109
  return designerCanvasNormalizedTransformedOrigin;
110
110
  }
111
111
  export function getResultingTransformationBetweenElementAndAllAncestors(element, ancestor, excludeAncestor) {
112
+ //TODO: introduce cache and optimize
112
113
  let actualElement = element;
113
114
  let actualElementMatrix;
114
115
  let newElementMatrix;
@@ -128,14 +129,15 @@ export function getResultingTransformationBetweenElementAndAllAncestors(element,
128
129
  }
129
130
  return originalElementAndAllParentsMultipliedMatrix;
130
131
  }
131
- export function getByParentsTransformedPointRelatedToCanvas(element, point, designerCanvas) {
132
+ export function getByParentsTransformedPointRelatedToCanvas(element, point, designerCanvas, cache) {
132
133
  const canvas = element.closest('#node-projects-designer-canvas-canvas');
133
134
  let actualElement = element;
134
135
  let parentElementTransformOriginToPointVectorTransformed;
135
136
  let byParentTransformedPointRelatedToCanvas = { x: 0, y: 0 };
136
137
  while (actualElement != canvas) {
137
138
  const parentElement = getParentElementIncludingSlots(actualElement);
138
- const parentElementTransformOrigin = new DOMPoint(getElementsWindowOffsetWithoutSelfAndParentTransformations(parentElement, designerCanvas.zoomFactor).offsetLeft - designerCanvas.outerRect.x + parseFloat(getComputedStyle(parentElement).transformOrigin.split(' ')[0]), getElementsWindowOffsetWithoutSelfAndParentTransformations(parentElement, designerCanvas.zoomFactor).offsetTop - designerCanvas.outerRect.y + parseFloat(getComputedStyle(parentElement).transformOrigin.split(' ')[1]));
139
+ const elementWindowOffset = getElementsWindowOffsetWithoutSelfAndParentTransformations(parentElement, designerCanvas.zoomFactor, cache);
140
+ const parentElementTransformOrigin = new DOMPoint(elementWindowOffset.offsetLeft - designerCanvas.outerRect.x + parseFloat(getComputedStyle(parentElement).transformOrigin.split(' ')[0]), elementWindowOffset.offsetTop - designerCanvas.outerRect.y + parseFloat(getComputedStyle(parentElement).transformOrigin.split(' ')[1]));
139
141
  if (actualElement == element) {
140
142
  parentElementTransformOrigin.x -= extractTranslationFromDOMMatrix(new DOMMatrix(element.style.transform)).x;
141
143
  parentElementTransformOrigin.y -= extractTranslationFromDOMMatrix(new DOMMatrix(element.style.transform)).y;
@@ -164,13 +166,13 @@ export function getElementSize(element) {
164
166
  }
165
167
  return { width, height };
166
168
  }
167
- export function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, untransformedCornerPointsOffset, designerCanvas) {
169
+ export function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, untransformedCornerPointsOffset, designerCanvas, cache) {
168
170
  const topleft = 0;
169
171
  const topright = 1;
170
172
  const bottomleft = 2;
171
173
  const bottomright = 3;
172
174
  const intUntransformedCornerPointsOffset = untransformedCornerPointsOffset ? { x: untransformedCornerPointsOffset.x / designerCanvas.scaleFactor, y: untransformedCornerPointsOffset.y / designerCanvas.scaleFactor } : { x: 0, y: 0 };
173
- const p0Offsets = getElementsWindowOffsetWithoutSelfAndParentTransformations(element, designerCanvas.zoomFactor);
175
+ const p0Offsets = getElementsWindowOffsetWithoutSelfAndParentTransformations(element, designerCanvas.zoomFactor, cache);
174
176
  const p0OffsetsRelatedToCanvas = DOMPoint.fromPoint({
175
177
  x: p0Offsets.offsetLeft - designerCanvas.containerBoundingRect.left,
176
178
  y: p0Offsets.offsetTop - designerCanvas.containerBoundingRect.top
@@ -193,13 +195,15 @@ export function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, u
193
195
  x: p0OffsetsRelatedToCanvas.x + width + intUntransformedCornerPointsOffset.x,
194
196
  y: p0OffsetsRelatedToCanvas.y + height + intUntransformedCornerPointsOffset.y
195
197
  });
198
+ const tfX = parseFloat(getComputedStyle(element).transformOrigin.split(' ')[0]);
199
+ const tfY = parseFloat(getComputedStyle(element).transformOrigin.split(' ')[1]);
196
200
  const transformOriginWithoutTransformRelatedToCanvas = DOMPointReadOnly.fromPoint({
197
- x: p0OffsetsRelatedToCanvas.x + parseFloat(getComputedStyle(element).transformOrigin.split(' ')[0]),
198
- y: p0OffsetsRelatedToCanvas.y + parseFloat(getComputedStyle(element).transformOrigin.split(' ')[1]),
201
+ x: p0OffsetsRelatedToCanvas.x + tfX,
202
+ y: p0OffsetsRelatedToCanvas.y + tfY,
199
203
  z: 0,
200
204
  w: 0
201
205
  });
202
- const designerCanvasNormalizedTransformOrigin = getByParentsTransformedPointRelatedToCanvas(element, new DOMPoint(getElementsWindowOffsetWithoutSelfAndParentTransformations(element, designerCanvas.zoomFactor).offsetLeft - designerCanvas.outerRect.left + parseFloat(getComputedStyle(element).transformOrigin.split(' ')[0]), getElementsWindowOffsetWithoutSelfAndParentTransformations(element, designerCanvas.zoomFactor).offsetTop - designerCanvas.outerRect.top + parseFloat(getComputedStyle(element).transformOrigin.split(' ')[1])), designerCanvas);
206
+ const designerCanvasNormalizedTransformOrigin = getByParentsTransformedPointRelatedToCanvas(element, new DOMPoint(p0Offsets.offsetLeft - designerCanvas.outerRect.left + tfX, p0Offsets.offsetTop - designerCanvas.outerRect.top + tfY), designerCanvas, cache);
203
207
  let top0 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[topleft].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[topleft].y));
204
208
  let top1 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[topright].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[topright].y));
205
209
  let top2 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[bottomleft].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[bottomleft].y));
@@ -15,6 +15,7 @@ export declare class DesignItem implements IDesignItem {
15
15
  lastContainerSize: ISize;
16
16
  parsedNode: any;
17
17
  node: Node;
18
+ view: Node;
18
19
  serviceContainer: ServiceContainer;
19
20
  instanceServiceContainer: InstanceServiceContainer;
20
21
  appliedDesignerExtensions: Map<ExtensionType, IDesignerExtension[]>;
@@ -73,6 +74,7 @@ export declare class DesignItem implements IDesignItem {
73
74
  static createDesignItemFromInstance(node: Node, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer): DesignItem;
74
75
  updateChildrenFromNodesChildren(): void;
75
76
  constructor(node: Node, parsedNode: any, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer);
77
+ setView(node: Element): void;
76
78
  openGroup(title: string): ChangeGroup;
77
79
  getOrCreateDesignItem(node: Node): IDesignItem;
78
80
  static GetOrCreateDesignItem(node: Node, parsedNode: any, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer): IDesignItem;
@@ -88,7 +90,7 @@ export declare class DesignItem implements IDesignItem {
88
90
  getAllStyles(): IStyleRule[];
89
91
  setAttribute(name: string, value?: string | null): void;
90
92
  removeAttribute(name: string): void;
91
- _insertChildInternal(designItem: IDesignItem, index?: number): void;
93
+ _insertChildInternal(designItem: DesignItem, index?: number): void;
92
94
  _removeChildInternal(designItem: IDesignItem): void;
93
95
  _refreshIfStyleSheet(): void;
94
96
  getPlacementService(style?: CSSStyleDeclaration): IPlacementService;
@@ -18,6 +18,7 @@ export class DesignItem {
18
18
  lastContainerSize;
19
19
  parsedNode;
20
20
  node;
21
+ view;
21
22
  serviceContainer;
22
23
  instanceServiceContainer;
23
24
  appliedDesignerExtensions = new Map();
@@ -133,10 +134,10 @@ export class DesignItem {
133
134
  }
134
135
  static _designItemMap = new WeakMap();
135
136
  get element() {
136
- return this.node;
137
+ return this.view;
137
138
  }
138
139
  get name() {
139
- return this.element.localName;
140
+ return this.node.localName;
140
141
  }
141
142
  get id() {
142
143
  return this.element.id;
@@ -320,6 +321,7 @@ export class DesignItem {
320
321
  }
321
322
  constructor(node, parsedNode, serviceContainer, instanceServiceContainer) {
322
323
  this.node = node;
324
+ this.view = node;
323
325
  this.parsedNode = parsedNode;
324
326
  this.serviceContainer = serviceContainer;
325
327
  this.instanceServiceContainer = instanceServiceContainer;
@@ -327,6 +329,10 @@ export class DesignItem {
327
329
  this._styles = new Map();
328
330
  DesignItem._designItemMap.set(node, this);
329
331
  }
332
+ setView(node) {
333
+ this.view = node;
334
+ DesignItem._designItemMap.set(node, this);
335
+ }
330
336
  openGroup(title) {
331
337
  return this.instanceServiceContainer.undoService.openGroup(title);
332
338
  }
@@ -451,11 +457,11 @@ export class DesignItem {
451
457
  }
452
458
  if (index == null || this._childArray.length == 0 || index >= this._childArray.length) {
453
459
  this._childArray.push(designItem);
454
- this.element.appendChild(designItem.node);
460
+ this.view.appendChild(designItem.view);
455
461
  }
456
462
  else {
457
463
  let el = this._childArray[index];
458
- this.node.insertBefore(designItem.node, el.element);
464
+ this.view.insertBefore(designItem.view, el.element);
459
465
  this._childArray.splice(index, 0, designItem);
460
466
  }
461
467
  designItem._parent = this;
@@ -486,7 +492,7 @@ export class DesignItem {
486
492
  //Update Stylesheetservice with sheet info
487
493
  //Patch this sheetdata
488
494
  const realContent = this._childArray.reduce((a, b) => a + b.content, '');
489
- this.node.textContent = AbstractStylesheetService.buildPatchedStyleSheet([cssFromString(realContent)]);
495
+ this.view.textContent = AbstractStylesheetService.buildPatchedStyleSheet([cssFromString(realContent)]);
490
496
  this.instanceServiceContainer.designerCanvas.lazyTriggerReparseDocumentStylesheets();
491
497
  }
492
498
  else if (this.name == 'link') {
@@ -11,6 +11,7 @@ import { IPlacementService } from '../services/placementService/IPlacementServic
11
11
  import { TypedEvent } from '@node-projects/base-custom-webcomponent';
12
12
  export interface IDesignItem {
13
13
  lastContainerSize: ISize;
14
+ setView(node: Element): any;
14
15
  replaceNode(newNode: Node): any;
15
16
  nodeReplaced: TypedEvent<void>;
16
17
  clone(): Promise<IDesignItem>;
@@ -8,6 +8,7 @@ export declare class BaseServiceContainer<NameMap> {
8
8
  getLastService<K extends keyof NameMap>(service: K): NameMap[K];
9
9
  getServices<K extends keyof NameMap>(service: K): NameMap[K][];
10
10
  register<K extends keyof NameMap>(name: K, service: NameMap[K]): void;
11
+ registerLast<K extends keyof NameMap>(name: K, service: NameMap[K]): void;
11
12
  registerMultiple<K extends keyof NameMap>(names: K[], service: NameMap[K]): void;
12
13
  forSomeServicesTillResult<K extends keyof NameMap, Y>(service: K, callback: (service: NameMap[K]) => Y): Y;
13
14
  getLastServiceWhere<K extends keyof NameMap, Y>(service: K, callback: (service: NameMap[K]) => Y): NameMap[K];
@@ -17,6 +17,12 @@ export class BaseServiceContainer {
17
17
  this._services.get(name).push(service);
18
18
  this.servicesChanged.emit({ serviceName: name });
19
19
  }
20
+ registerLast(name, service) {
21
+ if (!this._services.has(name))
22
+ this._services.set(name, []);
23
+ this._services.get(name).unshift(service);
24
+ this.servicesChanged.emit({ serviceName: name });
25
+ }
20
26
  registerMultiple(names, service) {
21
27
  for (const name of names) {
22
28
  if (!this._services.has(name))
@@ -20,7 +20,7 @@ export class DefaultPlacementService {
20
20
  canEnter(container, items) {
21
21
  if (!this.isEnterableContainer(container))
22
22
  return false;
23
- if (!items.every(x => !x.element.contains(container.element)))
23
+ if (!items.every(x => !x.element.contains(container.element) && x !== container))
24
24
  return false;
25
25
  return true;
26
26
  }
@@ -178,6 +178,13 @@ export class NativeElementsPropertiesService extends CommonPropertiesService {
178
178
  case 'br':
179
179
  case 'img':
180
180
  case 'iframe':
181
+ case 'h1':
182
+ case 'h2':
183
+ case 'h3':
184
+ case 'h4':
185
+ case 'h5':
186
+ case 'h6':
187
+ case 'p':
181
188
  return true;
182
189
  }
183
190
  return false;
@@ -205,6 +212,14 @@ export class NativeElementsPropertiesService extends CommonPropertiesService {
205
212
  return this.imgProperties;
206
213
  case 'iframe':
207
214
  return this.iframeProperties;
215
+ case 'h1':
216
+ case 'h2':
217
+ case 'h3':
218
+ case 'h4':
219
+ case 'h5':
220
+ case 'h6':
221
+ case 'p':
222
+ return [];
208
223
  }
209
224
  return null;
210
225
  }
@@ -6,7 +6,7 @@ import { AbstractExtensionBase } from "./AbstractExtensionBase.js";
6
6
  export declare abstract class AbstractExtension extends AbstractExtensionBase implements IDesignerExtension {
7
7
  protected extendedItem: IDesignItem;
8
8
  constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
9
- abstract extend(): any;
10
- abstract refresh(): any;
9
+ abstract extend(cache: Record<string | symbol, any>, event?: Event): any;
10
+ abstract refresh(cache: Record<string | symbol, any>, event?: Event): any;
11
11
  abstract dispose(): any;
12
12
  }
@@ -10,7 +10,7 @@ export class AltToEnterContainerExtension extends AbstractExtension {
10
10
  }
11
11
  refresh() {
12
12
  let itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
13
- this._text = this._drawText("Press ALT to enter container", itemRect.x + 5, itemRect.y + 12, 'svg-text-enter-container', this._text, OverlayLayer.Foregorund);
13
+ this._text = this._drawText("Press ALT to enter container", itemRect.x + 5, itemRect.y + 12, 'svg-text-enter-container', this._text, OverlayLayer.Foreground);
14
14
  this._text.style.fontSize = (14 / this.designerCanvas.scaleFactor) + 'px';
15
15
  this._text.setAttribute('x', '' + (itemRect.x + 5 / this.designerCanvas.scaleFactor));
16
16
  this._text.setAttribute('y', '' + (itemRect.y + 12 / this.designerCanvas.scaleFactor));
@@ -43,7 +43,7 @@ export class EditTextExtension extends AbstractExtension {
43
43
  foreignObject.setAttribute('width', '96');
44
44
  foreignObject.setAttribute('height', '24');
45
45
  foreignObject.appendChild(elements);
46
- this._addOverlay(foreignObject, OverlayLayer.Foregorund);
46
+ this._addOverlay(foreignObject, OverlayLayer.Foreground);
47
47
  this.designerCanvas.clickOverlay.style.pointerEvents = 'none';
48
48
  this.extendedItem.element.addEventListener('blur', this._blurBound);
49
49
  this.extendedItem.element.addEventListener('focus', this._focusBound);
@@ -14,7 +14,7 @@ export declare class ExtensionManager implements IExtensionManager {
14
14
  removeExtension(designItem: IDesignItem, extensionType?: ExtensionType): void;
15
15
  removeExtensions(designItems: IDesignItem[], recursive: boolean, extensionType?: ExtensionType): void;
16
16
  refreshExtension(designItem: IDesignItem, extensionType?: ExtensionType, event?: Event): void;
17
- refreshExtensions(designItems: IDesignItem[], extensionType?: ExtensionType, event?: Event, ignoredExtension?: IDesignerExtension): void;
17
+ refreshExtensions(designItems: IDesignItem[], extensionType?: ExtensionType, event?: Event, ignoredExtension?: IDesignerExtension, timeout?: number): void;
18
18
  refreshAllExtensions(designItems: IDesignItem[], ignoredExtension?: IDesignerExtension): void;
19
19
  refreshAllAppliedExtentions(): void;
20
20
  reapplyAllAppliedExtentions(): void;
@@ -55,6 +55,7 @@ export class ExtensionManager {
55
55
  const extProv = this.designerCanvas.serviceContainer.designerExtensions.get(extensionType);
56
56
  let extensions = [];
57
57
  if (extProv) {
58
+ const cache = {};
58
59
  for (let e of extProv) {
59
60
  let shouldAppE = designItem.shouldAppliedDesignerExtensions.get(extensionType);
60
61
  if (!shouldAppE)
@@ -67,7 +68,7 @@ export class ExtensionManager {
67
68
  appE = [];
68
69
  const ext = e.getExtension(this, this.designerCanvas, designItem);
69
70
  try {
70
- ext.extend(event);
71
+ ext.extend(cache, event);
71
72
  extensions.push(ext);
72
73
  }
73
74
  catch (err) {
@@ -89,9 +90,11 @@ export class ExtensionManager {
89
90
  return null;
90
91
  }
91
92
  applyExtensions(designItems, extensionType, event, recursive = false) {
93
+ this.designerCanvas.overlayLayer.startBatch();
92
94
  if (designItems) {
93
95
  const extProv = this.designerCanvas.serviceContainer.designerExtensions.get(extensionType);
94
96
  if (extProv) {
97
+ const cache = {};
95
98
  for (let e of extProv) {
96
99
  for (let i of designItems) {
97
100
  let shouldAppE = i.shouldAppliedDesignerExtensions.get(extensionType);
@@ -105,7 +108,7 @@ export class ExtensionManager {
105
108
  appE = [];
106
109
  const ext = e.getExtension(this, this.designerCanvas, i);
107
110
  try {
108
- ext.extend(event);
111
+ ext.extend(cache, event);
109
112
  }
110
113
  catch (err) {
111
114
  console.error(err);
@@ -123,6 +126,7 @@ export class ExtensionManager {
123
126
  }
124
127
  }
125
128
  }
129
+ this.designerCanvas.overlayLayer.endBatch();
126
130
  }
127
131
  removeExtension(designItem, extensionType) {
128
132
  if (designItem) {
@@ -211,9 +215,10 @@ export class ExtensionManager {
211
215
  if (extensionType) {
212
216
  let exts = designItem.appliedDesignerExtensions.get(extensionType);
213
217
  if (exts) {
218
+ const cache = {};
214
219
  for (let e of exts) {
215
220
  try {
216
- e.refresh(event);
221
+ e.refresh(cache, event);
217
222
  }
218
223
  catch (err) {
219
224
  console.error(err);
@@ -222,10 +227,11 @@ export class ExtensionManager {
222
227
  }
223
228
  }
224
229
  else {
230
+ const cache = {};
225
231
  for (let appE of designItem.appliedDesignerExtensions) {
226
232
  for (let e of appE[1]) {
227
233
  try {
228
- e.refresh(event);
234
+ e.refresh(cache, event);
229
235
  }
230
236
  catch (err) {
231
237
  console.error(err);
@@ -235,16 +241,24 @@ export class ExtensionManager {
235
241
  }
236
242
  }
237
243
  }
238
- refreshExtensions(designItems, extensionType, event, ignoredExtension) {
244
+ refreshExtensions(designItems, extensionType, event, ignoredExtension, timeout) {
245
+ this.designerCanvas.overlayLayer.startBatch();
246
+ const start = performance.now();
239
247
  if (designItems) {
240
248
  if (extensionType) {
241
- for (let i of designItems) {
249
+ const cache = {};
250
+ outer1: for (let i of designItems) {
242
251
  let exts = i.appliedDesignerExtensions.get(extensionType);
243
252
  if (exts) {
244
253
  for (let e of exts) {
245
254
  try {
246
255
  if (e != ignoredExtension)
247
- e.refresh(event);
256
+ e.refresh(cache, event);
257
+ if (timeout) {
258
+ const end = performance.now();
259
+ if (end - start > timeout)
260
+ break outer1;
261
+ }
248
262
  }
249
263
  catch (err) {
250
264
  console.error(err);
@@ -254,12 +268,19 @@ export class ExtensionManager {
254
268
  }
255
269
  }
256
270
  else {
257
- for (let i of designItems) {
271
+ const cache = {};
272
+ outer2: for (let i of designItems) {
258
273
  for (let appE of i.appliedDesignerExtensions) {
259
274
  for (let e of appE[1]) {
260
275
  try {
261
- if (e != ignoredExtension)
262
- e.refresh(event);
276
+ if (e != ignoredExtension) {
277
+ e.refresh(cache, event);
278
+ if (timeout) {
279
+ const end = performance.now();
280
+ if (end - start > timeout)
281
+ break outer2;
282
+ }
283
+ }
263
284
  }
264
285
  catch (err) {
265
286
  console.error(err);
@@ -269,8 +290,10 @@ export class ExtensionManager {
269
290
  }
270
291
  }
271
292
  }
293
+ this.designerCanvas.overlayLayer.endBatch();
272
294
  }
273
295
  refreshAllExtensions(designItems, ignoredExtension) {
296
+ this.designerCanvas.overlayLayer.startBatch();
274
297
  if (designItems) {
275
298
  this.refreshExtensions(designItems, ExtensionType.Permanent, null, ignoredExtension);
276
299
  this.refreshExtensions(designItems, ExtensionType.Selection, null, ignoredExtension);
@@ -286,6 +309,7 @@ export class ExtensionManager {
286
309
  this.refreshExtensions(designItems, ExtensionType.PrimarySelectionAndCanBeEntered, null, ignoredExtension);
287
310
  this.refreshExtensions(designItems, ExtensionType.PrimarySelectionContainerAndCanBeEntered, null, ignoredExtension);
288
311
  }
312
+ this.designerCanvas.overlayLayer.endBatch();
289
313
  }
290
314
  refreshAllAppliedExtentions() {
291
315
  this.refreshAllExtensions([...this.designItemsWithExtentions]);
@@ -293,6 +317,7 @@ export class ExtensionManager {
293
317
  //todo does not work with permanant, when not applied... maybe we need to do in another way
294
318
  //maybe store the "shouldAppliedExtensions??"
295
319
  reapplyAllAppliedExtentions() {
320
+ this.designerCanvas.overlayLayer.startBatch();
296
321
  for (let d of ExtensionManager.getAllChildElements(this.designerCanvas.rootDesignItem)) {
297
322
  const keys = [...d.shouldAppliedDesignerExtensions.keys()];
298
323
  for (let e of keys) {
@@ -300,6 +325,7 @@ export class ExtensionManager {
300
325
  this.applyExtension(d, e);
301
326
  }
302
327
  }
328
+ this.designerCanvas.overlayLayer.endBatch();
303
329
  }
304
330
  static *getAllChildElements(designItem) {
305
331
  if (designItem.nodeType == NodeType.Element)
@@ -1,5 +1,5 @@
1
1
  import { IDisposable } from '../../../../interfaces/IDisposable.js';
2
2
  export interface IDesignerExtension extends IDisposable {
3
- extend(event?: Event): any;
4
- refresh(event?: Event): any;
3
+ extend(cache: Record<string | symbol, any>, event?: Event): any;
4
+ refresh(cache: Record<string | symbol, any>, event?: Event): any;
5
5
  }
@@ -7,7 +7,7 @@ export interface IExtensionManager {
7
7
  removeExtension(designItem: IDesignItem, extensionType?: ExtensionType): any;
8
8
  removeExtensions(designItems: IDesignItem[], recursive: boolean, extensionType?: ExtensionType): any;
9
9
  refreshExtension(designItem: IDesignItem, extensionType?: ExtensionType, event?: Event): any;
10
- refreshExtensions(designItems: IDesignItem[], extensionType?: ExtensionType, event?: Event): any;
10
+ refreshExtensions(designItems: IDesignItem[], extensionType?: ExtensionType, event?: Event, ignoredExtension?: IDesignerExtension, timeout?: number): any;
11
11
  refreshAllExtensions(designItems: IDesignItem[], ignoredExtension?: IDesignerExtension): any;
12
12
  refreshAllAppliedExtentions(): any;
13
13
  reapplyAllAppliedExtentions(): any;
@@ -1,5 +1,5 @@
1
1
  export declare enum OverlayLayer {
2
2
  Background = 10,
3
3
  Normal = 20,
4
- Foregorund = 30
4
+ Foreground = 30
5
5
  }
@@ -2,5 +2,5 @@ export var OverlayLayer;
2
2
  (function (OverlayLayer) {
3
3
  OverlayLayer[OverlayLayer["Background"] = 10] = "Background";
4
4
  OverlayLayer[OverlayLayer["Normal"] = 20] = "Normal";
5
- OverlayLayer[OverlayLayer["Foregorund"] = 30] = "Foregorund";
5
+ OverlayLayer[OverlayLayer["Foreground"] = 30] = "Foreground";
6
6
  })(OverlayLayer || (OverlayLayer = {}));
@@ -8,7 +8,7 @@ export declare class SelectionDefaultExtension extends AbstractExtension {
8
8
  private _line3;
9
9
  private _line4;
10
10
  constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
11
- extend(): void;
12
- refresh(): void;
11
+ extend(cache: Record<string | symbol, any>, event?: Event): void;
12
+ refresh(cache: Record<string | symbol, any>, event?: Event): void;
13
13
  dispose(): void;
14
14
  }
@@ -9,17 +9,17 @@ export class SelectionDefaultExtension extends AbstractExtension {
9
9
  constructor(extensionManager, designerView, extendedItem) {
10
10
  super(extensionManager, designerView, extendedItem);
11
11
  }
12
- extend() {
13
- this.refresh();
12
+ extend(cache, event) {
13
+ this.refresh(cache);
14
14
  }
15
- refresh() {
15
+ refresh(cache, event) {
16
16
  let transformedCornerPoints;
17
17
  if (this.extendedItem.nodeType == NodeType.TextNode) {
18
18
  let rect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
19
19
  transformedCornerPoints = [{ x: rect.x, y: rect.y }, { x: rect.x + rect.width, y: rect.y }, { x: rect.x, y: rect.y + rect.height }, { x: rect.x + rect.width, y: rect.y + rect.height }];
20
20
  }
21
21
  else
22
- transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas);
22
+ transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas, cache);
23
23
  this._line1 = this._drawLine(transformedCornerPoints[0].x, transformedCornerPoints[0].y, transformedCornerPoints[1].x, transformedCornerPoints[1].y, 'svg-selection', this._line1);
24
24
  this._line2 = this._drawLine(transformedCornerPoints[0].x, transformedCornerPoints[0].y, transformedCornerPoints[2].x, transformedCornerPoints[2].y, 'svg-selection', this._line2);
25
25
  this._line3 = this._drawLine(transformedCornerPoints[1].x, transformedCornerPoints[1].y, transformedCornerPoints[3].x, transformedCornerPoints[3].y, 'svg-selection', this._line3);
@@ -11,11 +11,11 @@ export class CursorLinePointerExtension extends AbstractDesignerPointerExtension
11
11
  _line4;
12
12
  refresh(event) {
13
13
  let mp = this.designerCanvas.getNormalizedEventCoordinates(event);
14
- this._circle = this._drawCircle(mp.x, mp.y, 1, 'svg-cursor-line', this._circle, OverlayLayer.Foregorund);
15
- this._line1 = this._drawLine(mp.x, mp.y - this._lineOffset, mp.x, mp.y - this._lineOffset - this._lineLength, 'svg-cursor-line', this._line1, OverlayLayer.Foregorund);
16
- this._line2 = this._drawLine(mp.x, mp.y + this._lineOffset, mp.x, mp.y + this._lineOffset + this._lineLength, 'svg-cursor-line', this._line2, OverlayLayer.Foregorund);
17
- this._line3 = this._drawLine(mp.x - this._lineOffset, mp.y, mp.x - this._lineOffset - this._lineLength, mp.y, 'svg-cursor-line', this._line3, OverlayLayer.Foregorund);
18
- this._line4 = this._drawLine(mp.x + this._lineOffset, mp.y, mp.x + this._lineOffset + this._lineLength, mp.y, 'svg-cursor-line', this._line4, OverlayLayer.Foregorund);
14
+ this._circle = this._drawCircle(mp.x, mp.y, 1, 'svg-cursor-line', this._circle, OverlayLayer.Foreground);
15
+ this._line1 = this._drawLine(mp.x, mp.y - this._lineOffset, mp.x, mp.y - this._lineOffset - this._lineLength, 'svg-cursor-line', this._line1, OverlayLayer.Foreground);
16
+ this._line2 = this._drawLine(mp.x, mp.y + this._lineOffset, mp.x, mp.y + this._lineOffset + this._lineLength, 'svg-cursor-line', this._line2, OverlayLayer.Foreground);
17
+ this._line3 = this._drawLine(mp.x - this._lineOffset, mp.y, mp.x - this._lineOffset - this._lineLength, mp.y, 'svg-cursor-line', this._line3, OverlayLayer.Foreground);
18
+ this._line4 = this._drawLine(mp.x + this._lineOffset, mp.y, mp.x + this._lineOffset + this._lineLength, mp.y, 'svg-cursor-line', this._line4, OverlayLayer.Foreground);
19
19
  }
20
20
  dispose() {
21
21
  super._removeAllOverlays();
@@ -14,6 +14,12 @@ export declare class OverlayLayerView extends BaseCustomWebComponentConstructorA
14
14
  private _id;
15
15
  constructor(serviceContainer: ServiceContainer);
16
16
  private _initialize;
17
+ backgroundFragment: DocumentFragment;
18
+ foregroundFragment: DocumentFragment;
19
+ normalFragment: DocumentFragment;
20
+ batchCount: number;
21
+ startBatch(): void;
22
+ endBatch(): void;
17
23
  addOverlay(overlaySource: string, element: SVGGraphicsElement, overlayLayer?: OverlayLayer): void;
18
24
  removeOverlay(element: SVGElement): void;
19
25
  removeAllNodesWithClass(className: string): void;
@@ -59,17 +59,52 @@ export class OverlayLayerView extends BaseCustomWebComponentConstructorAppend {
59
59
  }
60
60
  this.shadowRoot.adoptedStyleSheets = styles;
61
61
  }
62
+ backgroundFragment;
63
+ foregroundFragment;
64
+ normalFragment;
65
+ batchCount = 0;
66
+ startBatch() {
67
+ if (this.batchCount == 0) {
68
+ this.backgroundFragment = document.createDocumentFragment();
69
+ this.foregroundFragment = document.createDocumentFragment();
70
+ this.normalFragment = document.createDocumentFragment();
71
+ }
72
+ this.batchCount++;
73
+ }
74
+ endBatch() {
75
+ this.batchCount--;
76
+ if (this.batchCount == 0) {
77
+ if (this.backgroundFragment.hasChildNodes)
78
+ this._gBackground.appendChild(this.backgroundFragment);
79
+ if (this.foregroundFragment.hasChildNodes)
80
+ this._gForeground.appendChild(this.foregroundFragment);
81
+ if (this.normalFragment.hasChildNodes)
82
+ this._gNormal.appendChild(this.normalFragment);
83
+ this.backgroundFragment = null;
84
+ this.foregroundFragment = null;
85
+ this.normalFragment = null;
86
+ }
87
+ }
62
88
  addOverlay(overlaySource, element, overlayLayer = OverlayLayer.Normal) {
63
89
  element.setAttribute("overlay-source", overlaySource);
64
90
  switch (overlayLayer) {
65
91
  case OverlayLayer.Background:
66
- this._gBackground.appendChild(element);
92
+ if (this.backgroundFragment)
93
+ this.backgroundFragment.appendChild(element);
94
+ else
95
+ this._gBackground.appendChild(element);
67
96
  break;
68
- case OverlayLayer.Foregorund:
69
- this._gForeground.appendChild(element);
97
+ case OverlayLayer.Foreground:
98
+ if (this.foregroundFragment)
99
+ this.foregroundFragment.appendChild(element);
100
+ else
101
+ this._gForeground.appendChild(element);
70
102
  break;
71
103
  default:
72
- this._gNormal.appendChild(element);
104
+ if (this.normalFragment)
105
+ this.normalFragment.appendChild(element);
106
+ else
107
+ this._gNormal.appendChild(element);
73
108
  break;
74
109
  }
75
110
  }
@@ -51,7 +51,7 @@ export class DrawElementTool {
51
51
  if (!this._rect) {
52
52
  designerCanvas.rootDesignItem.element.appendChild(this._createdItem.element);
53
53
  this._rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
54
- designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._rect, OverlayLayer.Foregorund);
54
+ designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._rect, OverlayLayer.Foreground);
55
55
  this._rect.setAttribute('class', 'svg-draw-new-element');
56
56
  this._rect.setAttribute('x', (this._startPosition.x - designerCanvas.containerBoundingRect.x));
57
57
  this._rect.setAttribute('y', (this._startPosition.y - designerCanvas.containerBoundingRect.y));
@@ -32,7 +32,7 @@ export class DrawEllipsisTool {
32
32
  this._path.setAttribute("cy", currentPoint.y.toString());
33
33
  this._path.setAttribute("rx", "0");
34
34
  this._path.setAttribute("ry", "0");
35
- designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foregorund);
35
+ designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foreground);
36
36
  break;
37
37
  case EventNames.PointerMove:
38
38
  if (this._path) {
@@ -31,7 +31,7 @@ export class DrawLineTool {
31
31
  this._path.setAttribute("y1", currentPoint.y.toString());
32
32
  this._path.setAttribute("x2", currentPoint.x.toString());
33
33
  this._path.setAttribute("y2", currentPoint.y.toString());
34
- designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foregorund);
34
+ designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foreground);
35
35
  break;
36
36
  case EventNames.PointerMove:
37
37
  if (this._path) {
@@ -35,7 +35,7 @@ export class DrawPathTool {
35
35
  this._path.setAttribute("stroke", designerCanvas.serviceContainer.globalContext.strokeColor);
36
36
  this._path.setAttribute("fill", designerCanvas.serviceContainer.globalContext.fillBrush);
37
37
  this._path.setAttribute("stroke-width", designerCanvas.serviceContainer.globalContext.strokeThickness);
38
- designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foregorund);
38
+ designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foreground);
39
39
  this._startPoint = currentPoint;
40
40
  }
41
41
  if (this._lastPoint != null && this._lastPoint.x === currentPoint.x && this._lastPoint.y === currentPoint.y && !this._samePoint) {
@@ -35,7 +35,7 @@ export class DrawRectTool {
35
35
  this._path.setAttribute("y", currentPoint.y.toString());
36
36
  this._path.setAttribute("width", "0");
37
37
  this._path.setAttribute("height", "0");
38
- designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foregorund);
38
+ designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foreground);
39
39
  break;
40
40
  case EventNames.PointerMove:
41
41
  if (this._path) {
@@ -17,7 +17,7 @@ export class MagicWandSelectorTool {
17
17
  this._path.style.strokeDasharray = '' + (2 / designerCanvas.scaleFactor);
18
18
  this._pathD = "M" + currentPoint.x + " " + currentPoint.y;
19
19
  this._path.setAttribute("D", this._pathD);
20
- designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foregorund);
20
+ designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foreground);
21
21
  break;
22
22
  case EventNames.PointerMove:
23
23
  if (this._path) {
@@ -289,7 +289,7 @@ export class PointerTool {
289
289
  }
290
290
  currentContainerService.place(event, designerCanvas, this._actionStartedDesignItem.parent, this._initialPoint, this._initialOffset, cp, this._actionStartedDesignItems);
291
291
  }
292
- designerCanvas.extensionManager.refreshExtensions(this._actionStartedDesignItems, null, event);
292
+ designerCanvas.extensionManager.refreshExtensions(this._actionStartedDesignItems, null, event, null, 20);
293
293
  }
294
294
  }
295
295
  break;
@@ -329,7 +329,7 @@ export class PointerTool {
329
329
  this._dragOverExtensionItem = null;
330
330
  this._moveItemsOffset = { x: 0, y: 0 };
331
331
  }
332
- designerCanvas.extensionManager.refreshExtensions(designerCanvas.instanceServiceContainer.selectionService.selectedElements, null, event);
332
+ designerCanvas.extensionManager.refreshExtensions(designerCanvas.instanceServiceContainer.selectionService.selectedElements, null, event, null, 20);
333
333
  if (this._changeGroup) {
334
334
  this._changeGroup.abort();
335
335
  this._changeGroup = null;
@@ -23,7 +23,7 @@ export class RectangleSelectorTool {
23
23
  this._rect.setAttribute('height', 0);
24
24
  this._rect.style.strokeWidth = '' + (1 / designerCanvas.scaleFactor);
25
25
  this._rect.style.strokeDasharray = '' + (2 / designerCanvas.scaleFactor);
26
- designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._rect, OverlayLayer.Foregorund);
26
+ designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._rect, OverlayLayer.Foreground);
27
27
  break;
28
28
  case EventNames.PointerMove:
29
29
  if (this._initialPoint) {
@@ -23,7 +23,7 @@ export class ZoomTool {
23
23
  this._rect.setAttribute('height', 0);
24
24
  this._rect.style.strokeWidth = '' + (1 / designerCanvas.scaleFactor);
25
25
  this._rect.style.strokeDasharray = '' + (2 / designerCanvas.scaleFactor);
26
- designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._rect, OverlayLayer.Foregorund);
26
+ designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._rect, OverlayLayer.Foreground);
27
27
  break;
28
28
  case EventNames.PointerMove:
29
29
  if (this._startPoint) {
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.11",
4
+ "version": "0.1.12",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "jochen.kuehner@gmx.de",