@node-projects/web-component-designer 0.1.64 → 0.1.71

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 (28) hide show
  1. package/dist/elements/helper/ElementHelper.js +3 -3
  2. package/dist/elements/helper/TransformHelper.js +3 -1
  3. package/dist/elements/item/DesignItem.d.ts +3 -1
  4. package/dist/elements/item/DesignItem.js +23 -3
  5. package/dist/elements/item/IDesignItem.d.ts +3 -0
  6. package/dist/elements/services/dragDropService/DragDropService.js +1 -1
  7. package/dist/elements/services/stylesheetService/AbstractStylesheetService.d.ts +0 -2
  8. package/dist/elements/services/stylesheetService/AbstractStylesheetService.js +0 -63
  9. package/dist/elements/widgets/designerView/designerCanvas.d.ts +1 -0
  10. package/dist/elements/widgets/designerView/designerCanvas.js +21 -47
  11. package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtension.js +1 -1
  12. package/dist/elements/widgets/designerView/extensions/CanvasExtension.js +1 -1
  13. package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtension.d.ts +2 -2
  14. package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtension.js +5 -5
  15. package/dist/elements/widgets/designerView/extensions/ExtensionManager.d.ts +1 -0
  16. package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +5 -0
  17. package/dist/elements/widgets/designerView/extensions/InvisibleElementExtension.d.ts +3 -2
  18. package/dist/elements/widgets/designerView/extensions/InvisibleElementExtension.js +9 -5
  19. package/dist/elements/widgets/designerView/extensions/PositionExtension.js +1 -1
  20. package/dist/elements/widgets/designerView/extensions/ResizeExtension.d.ts +2 -2
  21. package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +4 -4
  22. package/dist/elements/widgets/designerView/tools/DrawEllipsisTool.js +1 -0
  23. package/dist/elements/widgets/designerView/tools/DrawLineTool.js +1 -0
  24. package/dist/elements/widgets/designerView/tools/DrawPathTool.js +1 -0
  25. package/dist/elements/widgets/designerView/tools/DrawRectTool.js +1 -0
  26. package/dist/elements/widgets/designerView/tools/MagicWandSelectorTool.js +1 -1
  27. package/dist/elements/widgets/designerView/tools/RectangleSelectorTool.js +1 -1
  28. package/package.json +1 -1
@@ -76,7 +76,7 @@ export function getElementsWindowOffsetWithoutSelfAndParentTransformations(eleme
76
76
  let t = element.style.transform;
77
77
  element.style.transform = '';
78
78
  const bcEl = element.getBoundingClientRect();
79
- const bcPar = element.parentElement.getBoundingClientRect();
79
+ const bcPar = element.parentElement ? element.parentElement.getBoundingClientRect() : element.getRootNode().host.getBoundingClientRect();
80
80
  element.style.transform = t;
81
81
  const currLeft = (bcEl.left - bcPar.left) / zoom;
82
82
  const currTop = (bcEl.top - bcPar.top) / zoom;
@@ -86,7 +86,7 @@ export function getElementsWindowOffsetWithoutSelfAndParentTransformations(eleme
86
86
  const cacheEntry = { offsetLeft: currLeft, offsetTop: currTop };
87
87
  lst.push(cacheEntry);
88
88
  ch.set(element, cacheEntry);
89
- element = element.parentElement;
89
+ element = element.parentElement ? element.parentElement : element.getRootNode().host;
90
90
  }
91
91
  else if (element instanceof SVGGraphicsElement) {
92
92
  let bbox = element.getBBox();
@@ -113,7 +113,7 @@ export function getElementsWindowOffsetWithoutSelfAndParentTransformations(eleme
113
113
  ch.set(element, cacheEntry);
114
114
  offsetLeft += element.offsetLeft;
115
115
  offsetTop += element.offsetTop;
116
- element = element.offsetParent;
116
+ element = element.offsetParent ? element.offsetParent : element.getRootNode().host;
117
117
  }
118
118
  }
119
119
  return { offsetLeft: offsetLeft, offsetTop: offsetTop };
@@ -1,4 +1,6 @@
1
1
  import { getElementsWindowOffsetWithoutSelfAndParentTransformations, getParentElementIncludingSlots } from "./ElementHelper.js";
2
+ //TODO:
3
+ //transform-box
2
4
  let identityMatrix = [
3
5
  1, 0, 0, 0,
4
6
  0, 1, 0, 0,
@@ -150,7 +152,7 @@ export function getResultingTransformationBetweenElementAndAllAncestors(element,
150
152
  return originalElementAndAllParentsMultipliedMatrix;
151
153
  }
152
154
  export function getByParentsTransformedPointRelatedToCanvas(element, point, designerCanvas, cache) {
153
- const canvas = element.closest('#node-projects-designer-canvas-canvas');
155
+ const canvas = designerCanvas.rootDesignItem.node;
154
156
  let actualElement = element;
155
157
  let parentElementTransformOriginToPointVectorTransformed;
156
158
  let byParentTransformedPointRelatedToCanvas = { x: 0, y: 0 };
@@ -73,6 +73,7 @@ export declare class DesignItem implements IDesignItem {
73
73
  get lockAtDesignTime(): boolean;
74
74
  set lockAtDesignTime(value: boolean);
75
75
  static createDesignItemFromInstance(node: Node, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer): DesignItem;
76
+ querySelectorAll(selectors: string): NodeListOf<HTMLElement>;
76
77
  updateChildrenFromNodesChildren(): void;
77
78
  constructor(node: Node, parsedNode: any, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer);
78
79
  setView(node: Element): void;
@@ -85,7 +86,8 @@ export declare class DesignItem implements IDesignItem {
85
86
  updateStyleInSheetOrLocal(name: string, value?: string | null, important?: boolean, forceSet?: boolean): void;
86
87
  getStyleFromSheetOrLocal(name: string, fallback?: string): string;
87
88
  getStyleFromSheetOrLocalOrComputed(name: string, fallback?: string): string;
88
- getComputedStyle(name: string, fallback?: string): string;
89
+ getComputedStyleProperty(name: string, fallback?: string): string;
90
+ getComputedStyle(): CSSStyleDeclaration;
89
91
  _stylesCache: IStyleRule[];
90
92
  _cacheClearTimer: NodeJS.Timeout;
91
93
  getAllStyles(): IStyleRule[];
@@ -340,6 +340,14 @@ export class DesignItem {
340
340
  designItem.updateChildrenFromNodesChildren();
341
341
  return designItem;
342
342
  }
343
+ querySelectorAll(selectors) {
344
+ if (this.isRootItem) {
345
+ return this.node.shadowRoot.querySelectorAll(selectors);
346
+ }
347
+ else {
348
+ return this.element.querySelectorAll(selectors);
349
+ }
350
+ }
343
351
  updateChildrenFromNodesChildren() {
344
352
  this._childArray = [];
345
353
  if (this.nodeType == NodeType.Element) {
@@ -457,7 +465,7 @@ export class DesignItem {
457
465
  }
458
466
  return value ?? fallback;
459
467
  }
460
- getComputedStyle(name, fallback = null) {
468
+ getComputedStyleProperty(name, fallback = null) {
461
469
  let nm = name;
462
470
  if (!nm.startsWith('--'))
463
471
  nm = PropertiesHelper.camelToDashCase(name);
@@ -467,6 +475,12 @@ export class DesignItem {
467
475
  }
468
476
  return value ?? fallback;
469
477
  }
478
+ getComputedStyle() {
479
+ /*if (this.isRootItem) {
480
+ return window.getComputedStyle((<ShadowRoot>this.node).host);
481
+ }*/
482
+ return window.getComputedStyle(this.element);
483
+ }
470
484
  _stylesCache = null;
471
485
  _cacheClearTimer;
472
486
  getAllStyles() {
@@ -512,7 +526,10 @@ export class DesignItem {
512
526
  }
513
527
  if (index == null || this._childArray.length == 0 || index >= this._childArray.length) {
514
528
  this._childArray.push(designItem);
515
- if (this.view instanceof HTMLTemplateElement) {
529
+ if (this.isRootItem) {
530
+ this.node.shadowRoot.appendChild(designItem.view);
531
+ }
532
+ else if (this.view instanceof HTMLTemplateElement) {
516
533
  this.view.content.appendChild(designItem.view);
517
534
  }
518
535
  else
@@ -520,7 +537,10 @@ export class DesignItem {
520
537
  }
521
538
  else {
522
539
  let el = this._childArray[index];
523
- if (this.view instanceof HTMLTemplateElement) {
540
+ if (this.isRootItem) {
541
+ this.node.shadowRoot.insertBefore(designItem.view, el.element);
542
+ }
543
+ else if (this.view instanceof HTMLTemplateElement) {
524
544
  this.view.content.insertBefore(designItem.view, el.element);
525
545
  }
526
546
  else
@@ -72,4 +72,7 @@ export interface IDesignItem {
72
72
  hideAtRunTime: boolean;
73
73
  lockAtDesignTime: boolean;
74
74
  getPlacementService(style?: CSSStyleDeclaration): IPlacementService;
75
+ getComputedStyleProperty(name: string, fallback: string): string;
76
+ getComputedStyle(): CSSStyleDeclaration;
77
+ querySelectorAll(selectors: string): NodeListOf<HTMLElement>;
75
78
  }
@@ -41,7 +41,7 @@ export class DragDropService {
41
41
  const di = await designerCanvas.serviceContainer.forSomeServicesTillResult("instanceService", (service) => service.getElement(elementDefinition, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer));
42
42
  const grp = di.openGroup("Insert of &lt;" + di.name + "&gt;");
43
43
  di.setStyle('position', 'absolute');
44
- const containerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainer, getComputedStyle(newContainer.element)));
44
+ const containerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainer, newContainer.getComputedStyle()));
45
45
  containerService.enterContainer(newContainer, [di]);
46
46
  const containerPos = designerCanvas.getNormalizedElementCoordinates(newContainer.element);
47
47
  const evCoord = designerCanvas.getNormalizedEventCoordinates(event);
@@ -42,6 +42,4 @@ export declare abstract class AbstractStylesheetService implements IStylesheetSe
42
42
  }>;
43
43
  stylesheetsChanged: TypedEvent<void>;
44
44
  protected elementMatchesASelector(designItem: IDesignItem, selectors: string[]): boolean;
45
- static buildPatchedStyleSheet(value: CSSStyleSheet[]): string;
46
- private static traverseAndCollectRules;
47
45
  }
@@ -89,67 +89,4 @@ export class AbstractStylesheetService {
89
89
  }
90
90
  return false;
91
91
  }
92
- static buildPatchedStyleSheet(value) {
93
- let style = '';
94
- for (let s of value) {
95
- style += this.traverseAndCollectRules(s);
96
- }
97
- return style;
98
- }
99
- static traverseAndCollectRules(ruleContainer, noPatch = false) {
100
- let t = '';
101
- for (let rule of ruleContainer.cssRules) {
102
- if ((rule instanceof CSSContainerRule
103
- || rule instanceof CSSSupportsRule
104
- || rule instanceof CSSMediaRule)
105
- && rule.cssRules) {
106
- t += rule.cssText.split(rule.conditionText)[0] + rule.conditionText + " { " + this.traverseAndCollectRules(rule) + " }";
107
- }
108
- else if (rule instanceof CSSKeyframesRule
109
- && rule.cssRules) {
110
- t += rule.cssText;
111
- }
112
- else if (rule instanceof CSSStyleRule) {
113
- let sel = "";
114
- if (!noPatch) {
115
- let parts = rule.selectorText.split(',');
116
- for (let p of parts) {
117
- if (sel)
118
- sel += ',';
119
- if (p.startsWith(':host')) {
120
- sel += p.replace(':host', DesignerCanvas.cssprefixConstant);
121
- continue;
122
- }
123
- else if (p == ':root')
124
- sel += p;
125
- else if (p.includes(DesignerCanvas.cssprefixConstant)) {
126
- sel += p;
127
- continue;
128
- }
129
- sel += DesignerCanvas.cssprefixConstant + p.trimStart();
130
- }
131
- }
132
- else {
133
- sel = rule.selectorText;
134
- }
135
- t += sel;
136
- let cssText = rule.style.cssText;
137
- //bugfix for chrome issue: https://bugs.chromium.org/p/chromium/issues/detail?id=1394353
138
- if (rule.styleMap && rule.styleMap.get('grid-template') && rule.styleMap.get('grid-template').toString().includes('repeat(')) {
139
- let entr = rule.styleMap.entries();
140
- cssText = '';
141
- for (let e of entr) {
142
- cssText += e[0] + ':' + e[1].toString() + ';';
143
- }
144
- }
145
- t += '{' + cssText;
146
- if (rule.cssRules?.length) {
147
- const part = this.traverseAndCollectRules(rule, true);
148
- t += part;
149
- }
150
- t += '}';
151
- }
152
- }
153
- return t;
154
- }
155
92
  }
@@ -51,6 +51,7 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
51
51
  onZoomFactorChanged: TypedEvent<number>;
52
52
  get canvas(): HTMLElement;
53
53
  private _canvas;
54
+ private _canvasShadowRoot;
54
55
  private _canvasContainer;
55
56
  private _outercanvas2;
56
57
  private _lastHoverDesignItem;
@@ -19,7 +19,6 @@ import { ContextMenu } from '../../helper/contextMenu/ContextMenu.js';
19
19
  import { NodeType } from '../../item/NodeType.js';
20
20
  import { StylesheetChangedAction } from '../../services/undoService/transactionItems/StylesheetChangedAction.js';
21
21
  import { SetDesignItemsAction } from '../../services/undoService/transactionItems/SetDesignItemsAction.js';
22
- import { AbstractStylesheetService } from '../../services/stylesheetService/AbstractStylesheetService.js';
23
22
  export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
24
23
  // Public Properties
25
24
  serviceContainer;
@@ -96,6 +95,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
96
95
  }
97
96
  // Private Variables
98
97
  _canvas;
98
+ _canvasShadowRoot;
99
99
  _canvasContainer;
100
100
  _outercanvas2;
101
101
  _lastHoverDesignItem;
@@ -115,19 +115,16 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
115
115
  font-weight: inherit;
116
116
  font-style: inherit;
117
117
  line-height: inherit;
118
+ --node-projects-web-component-designer-background: inherit;
118
119
  }
119
120
  * {
120
121
  touch-action: none;
121
122
  }
123
+ #node-projects-designer-canvas-canvasContainer {
124
+ background: var(--node-projects-web-component-designer-background, border-box fixed 0px 0px repeat url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAFXmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjIwIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMjAiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSIyMCIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMjAiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjMwMC8xIgogICB0aWZmOllSZXNvbHV0aW9uPSIzMDAvMSIKICAgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIKICAgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyMi0xMi0wOFQwOToxNTo0OCswMTowMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMi0xMi0wOFQwOToxNTo0OCswMTowMCI+CiAgIDxkYzp0aXRsZT4KICAgIDxyZGY6QWx0PgogICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+QmFja2dyb3VuZGdyaWRfMTBweDwvcmRmOmxpPgogICAgPC9yZGY6QWx0PgogICA8L2RjOnRpdGxlPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJwcm9kdWNlZCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWZmaW5pdHkgRGVzaWduZXIgMS4xMC42IgogICAgICBzdEV2dDp3aGVuPSIyMDIyLTEyLTA4VDA5OjE1OjQ4KzAxOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cjw/eHBhY2tldCBlbmQ9InIiPz4fvgn+AAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kc8rRFEUxz8GjRhRLCiLl7BCftTExmLkV2ExnvJr8+bNvBk1b+b13kiyVbaKEhu/FvwFbJW1UkRKlrImNug5b2ZqJplzO/d87vfec7r3XPCpSd10KnrATGXs8FhImZtfUPwvBKjCTx/Nmu5YUzOjKiXt854yL952ebVKn/vXaqIxR4eyKuEh3bIzwuPCk6sZy+Md4UY9oUWFz4Q7bbmg8J2nR3L86nE8x98e22p4GHz1wkq8iCNFrCdsU1heTpuZXNHz9/FeEoilZmcktoq34BBmjBAKE4wwTJBeBmUO0iX96ZYVJfJ7svnTpCVXl9liDZtl4iTI0CnqilSPSTREj8lIsub1/29fHaO/L1c9EILKZ9d9bwf/Nvxsue7Xkev+HEP5E1ymCvnpQxj4EH2roLUdQN0GnF8VtMguXGxC06Ol2VpWKhf3GQa8nULtPDTcQPVirmf5fU4eQF2Xr7qGvX3okPN1S790cWfsRnax1QAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAC9JREFUOI1jfPr0KQNuICUlhUeWCY8cQTCqeWRoZvz//z8e6WfPntHK5lHNI0MzAMChCNMTuPcnAAAAAElFTkSuQmCC));
125
+ }
122
126
  #node-projects-designer-canvas-canvas {
123
- background-color: var(--canvas-background, white);
124
- /* 10px grid, using http://www.patternify.com/ */
125
- //background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAFFJREFUeNpicChb7DAQmMGhbLHD////GQjh8nW3qapu1OJRi0ctHiYWl6+7TRAnLbxCVXWjcTxq8ajFoxaPllyjcTxq8ajFI8hiAAAAAP//AwCQfdyctxBQfwAAAABJRU5ErkJggg==);
126
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAFXmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjIwIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMjAiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSIyMCIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMjAiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjMwMC8xIgogICB0aWZmOllSZXNvbHV0aW9uPSIzMDAvMSIKICAgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIKICAgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyMi0xMi0wOFQwOToxNTo0OCswMTowMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMi0xMi0wOFQwOToxNTo0OCswMTowMCI+CiAgIDxkYzp0aXRsZT4KICAgIDxyZGY6QWx0PgogICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+QmFja2dyb3VuZGdyaWRfMTBweDwvcmRmOmxpPgogICAgPC9yZGY6QWx0PgogICA8L2RjOnRpdGxlPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJwcm9kdWNlZCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWZmaW5pdHkgRGVzaWduZXIgMS4xMC42IgogICAgICBzdEV2dDp3aGVuPSIyMDIyLTEyLTA4VDA5OjE1OjQ4KzAxOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cjw/eHBhY2tldCBlbmQ9InIiPz4fvgn+AAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kc8rRFEUxz8GjRhRLCiLl7BCftTExmLkV2ExnvJr8+bNvBk1b+b13kiyVbaKEhu/FvwFbJW1UkRKlrImNug5b2ZqJplzO/d87vfec7r3XPCpSd10KnrATGXs8FhImZtfUPwvBKjCTx/Nmu5YUzOjKiXt854yL952ebVKn/vXaqIxR4eyKuEh3bIzwuPCk6sZy+Md4UY9oUWFz4Q7bbmg8J2nR3L86nE8x98e22p4GHz1wkq8iCNFrCdsU1heTpuZXNHz9/FeEoilZmcktoq34BBmjBAKE4wwTJBeBmUO0iX96ZYVJfJ7svnTpCVXl9liDZtl4iTI0CnqilSPSTREj8lIsub1/29fHaO/L1c9EILKZ9d9bwf/Nvxsue7Xkev+HEP5E1ymCvnpQxj4EH2roLUdQN0GnF8VtMguXGxC06Ol2VpWKhf3GQa8nULtPDTcQPVirmf5fU4eQF2Xr7qGvX3okPN1S790cWfsRnax1QAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAC9JREFUOI1jfPr0KQNuICUlhUeWCY8cQTCqeWRoZvz//z8e6WfPntHK5lHNI0MzAMChCNMTuPcnAAAAAElFTkSuQmCC);
127
127
  image-rendering: pixelated;
128
- background-position: 0px 0px;
129
- background-attachment: fixed;
130
- background-origin: -box;
131
128
  box-sizing: border-box;
132
129
  width: 100%;
133
130
  height: 100%;
@@ -285,6 +282,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
285
282
  super();
286
283
  this._restoreCachedInititalValues();
287
284
  this._canvas = this._getDomElement('node-projects-designer-canvas-canvas');
285
+ this._canvasShadowRoot = this._canvas.attachShadow({ mode: 'open' });
288
286
  this._canvasContainer = this._getDomElement('node-projects-designer-canvas-canvasContainer');
289
287
  this._outercanvas2 = this._getDomElement('node-projects-designer-canvas-outercanvas2');
290
288
  this.clickOverlay = this._getDomElement('node-projects-designer-canvas-clickOverlay');
@@ -337,15 +335,15 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
337
335
  return this._additionalStyle;
338
336
  }
339
337
  applyAllStyles() {
340
- let styles = [this.constructor.style];
338
+ let styles = [];
341
339
  if (this._additionalStyle)
342
- styles.push(cssFromString(AbstractStylesheetService.buildPatchedStyleSheet(this._additionalStyle)));
340
+ styles.push(...this._additionalStyle);
343
341
  if (this.instanceServiceContainer.stylesheetService) {
344
342
  styles.push(...this.instanceServiceContainer.stylesheetService
345
343
  .getStylesheets()
346
- .map(x => cssFromString(AbstractStylesheetService.buildPatchedStyleSheet([cssFromString(x.content)]))));
344
+ .map(x => cssFromString(x.content)));
347
345
  }
348
- this.shadowRoot.adoptedStyleSheets = styles;
346
+ this._canvasShadowRoot.adoptedStyleSheets = styles;
349
347
  }
350
348
  /* --- start IUiCommandHandler --- */
351
349
  async executeCommand(command) {
@@ -431,11 +429,10 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
431
429
  }
432
430
  }
433
431
  disableBackgroud() {
434
- this._backgroundImage = this._canvas.style.backgroundImage;
435
- this._canvas.style.backgroundImage = 'none';
432
+ this._canvasContainer.style.backgroundImage = 'none';
436
433
  }
437
434
  enableBackground() {
438
- this._canvas.style.backgroundImage = this._backgroundImage;
435
+ this._canvasContainer.style.backgroundImage = 'var(--node-projects-web-component-designer-background)';
439
436
  }
440
437
  zoomToFit() {
441
438
  const autoZomOffset = 10;
@@ -571,6 +568,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
571
568
  this.instanceServiceContainer.register("designItemDocumentPositionService", designItemDocumentPositionService(this));
572
569
  }
573
570
  this.rootDesignItem = DesignItem.GetOrCreateDesignItem(this._canvas, this._canvas, this.serviceContainer, this.instanceServiceContainer);
571
+ //this.rootDesignItem.setView(<any>this._canvasShadowRoot);
574
572
  const contentService = this.serviceContainer.getLastService('contentService');
575
573
  if (contentService) {
576
574
  this.instanceServiceContainer.register("contentService", contentService(this));
@@ -695,7 +693,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
695
693
  }
696
694
  async reparseDocumentStylesheets() {
697
695
  if (this.instanceServiceContainer.stylesheetService) {
698
- const styleElements = this.rootDesignItem.element.querySelectorAll('style');
696
+ const styleElements = this.rootDesignItem.querySelectorAll('style');
699
697
  let i = 1;
700
698
  const intStyleSheets = [...styleElements].map(x => ({ name: '&lt;style&gt; #' + (x.id ? x.id + '(' + i++ + ')' : i++), content: DesignItem.GetDesignItem(x).content, designItem: DesignItem.GetDesignItem(x) }));
701
699
  await this.instanceServiceContainer.stylesheetService.setDocumentStylesheets(intStyleSheets);
@@ -852,10 +850,10 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
852
850
  let input = this._getDomElement('node-projects-designer-search-input');
853
851
  this._getDomElement('node-projects-designer-search-result').innerHTML = "0 selected";
854
852
  if (input.value != "") {
855
- let selectedElements = this.shadowRoot.querySelectorAll(input.value);
853
+ let selectedElements = this._canvasShadowRoot.querySelectorAll(input.value);
856
854
  let designItems = [];
857
855
  for (let i = 0; i <= selectedElements.length; i++) {
858
- if (this._canvasContainer.contains(selectedElements[i]))
856
+ if (this._canvasShadowRoot.contains(selectedElements[i]))
859
857
  designItems.push(DesignItem.GetDesignItem(selectedElements[i]));
860
858
  }
861
859
  if (designItems.length > 0) {
@@ -978,54 +976,30 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
978
976
  }
979
977
  //TODO: remove
980
978
  elementFromPoint(x, y) {
981
- let elements = this.shadowRoot.elementsFromPoint(x, y);
979
+ let elements = this._canvasShadowRoot.elementsFromPoint(x, y);
982
980
  let element = elements[0];
983
- if (element === this.clickOverlay)
984
- element = elements[1];
985
- if (element === this.clickOverlay)
986
- element = this._canvas;
987
981
  return element;
988
982
  }
989
983
  elementsFromPoint(x, y) {
990
984
  let retVal = [];
991
- let elements = this.shadowRoot.elementsFromPoint(x, y);
985
+ let elements = this._canvasShadowRoot.elementsFromPoint(x, y);
992
986
  for (let e of elements) {
993
- if (e == this.clickOverlay)
994
- continue;
995
- if (e == this.overlayLayer)
987
+ if (e.getRootNode() !== this._canvasShadowRoot)
996
988
  continue;
997
- if (e.getRootNode() !== this.shadowRoot)
998
- continue;
999
- if (e == this._outercanvas2)
1000
- break;
1001
989
  retVal.push(e);
1002
- if (e === this._canvas)
1003
- break;
1004
990
  }
1005
991
  return retVal;
1006
992
  }
1007
993
  getElementAtPoint(point, ignoreElementCallback) {
1008
- const elements = this.shadowRoot.elementsFromPoint(point.x, point.y);
994
+ const elements = this._canvasShadowRoot.elementsFromPoint(point.x, point.y);
1009
995
  let currentElement = null;
1010
996
  for (let i = 0; i < elements.length; i++) {
1011
997
  currentElement = elements[i];
1012
- if (currentElement == this._outercanvas2) {
1013
- currentElement = null;
1014
- break;
1015
- }
1016
- if (currentElement == this.clickOverlay) {
1017
- currentElement = null;
1018
- continue;
1019
- }
1020
- if (currentElement == this.overlayLayer) {
1021
- currentElement = null;
1022
- continue;
1023
- }
1024
998
  if (ignoreElementCallback && ignoreElementCallback(currentElement)) {
1025
999
  currentElement = null;
1026
1000
  continue;
1027
1001
  }
1028
- if (currentElement.getRootNode() !== this.shadowRoot) {
1002
+ if (currentElement.getRootNode() !== this._canvasShadowRoot) {
1029
1003
  currentElement = null;
1030
1004
  continue;
1031
1005
  }
@@ -9,7 +9,7 @@ export class AltToEnterContainerExtension extends AbstractExtension {
9
9
  this.refresh();
10
10
  }
11
11
  refresh() {
12
- let itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
12
+ const itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
13
13
  this._text = this._drawText("Press ALT to enter container", itemRect.x + 5, itemRect.y + 12, 'svg-text-enter-container', this._text, OverlayLayer.Foreground);
14
14
  this._text.style.fontSize = (14 / this.designerCanvas.scaleFactor) + 'px';
15
15
  this._text.setAttribute('x', '' + (itemRect.x + 5 / this.designerCanvas.scaleFactor));
@@ -4,7 +4,7 @@ export class CanvasExtension extends AbstractExtension {
4
4
  super(extensionManager, designerView, extendedItem);
5
5
  }
6
6
  extend() {
7
- let itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
7
+ const itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
8
8
  const computedStyle = getComputedStyle(this.extendedItem.element);
9
9
  if (computedStyle.margin !== '0px') {
10
10
  const left = Number.parseFloat(computedStyle.marginLeft.replace('px', ''));
@@ -7,9 +7,9 @@ export declare class ElementDragTitleExtension extends AbstractExtension {
7
7
  private _text;
8
8
  private _width;
9
9
  constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
10
- extend(): void;
10
+ extend(cache: Record<string | symbol, any>, event?: Event): void;
11
11
  _drawMoveOverlay(itemRect: DOMRect): void;
12
- refresh(): void;
12
+ refresh(cache: Record<string | symbol, any>, event?: Event): void;
13
13
  _pointerEvent(event: PointerEvent): void;
14
14
  dispose(): void;
15
15
  }
@@ -10,8 +10,8 @@ export class ElementDragTitleExtension extends AbstractExtension {
10
10
  constructor(extensionManager, designerView, extendedItem) {
11
11
  super(extensionManager, designerView, extendedItem);
12
12
  }
13
- extend() {
14
- const transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas);
13
+ extend(cache, event) {
14
+ const transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas, cache);
15
15
  if (!isNaN(transformedCornerPoints[0].x)) {
16
16
  const boundRect = this.extendedItem.element.getBoundingClientRect();
17
17
  let w = getTextWidth(this.extendedItem.name, '10px monospace');
@@ -28,13 +28,13 @@ export class ElementDragTitleExtension extends AbstractExtension {
28
28
  this._rect.addEventListener('pointerdown', (e) => this._pointerEvent(e));
29
29
  this._rect.addEventListener('pointermove', (e) => this._pointerEvent(e));
30
30
  this._rect.addEventListener('pointerup', (e) => this._pointerEvent(e));
31
- this.refresh();
31
+ this.refresh(cache, event);
32
32
  }
33
33
  }
34
34
  _drawMoveOverlay(itemRect) {
35
35
  }
36
- refresh() {
37
- const transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, { x: 0, y: 16 }, this.designerCanvas);
36
+ refresh(cache, event) {
37
+ const transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, { x: 0, y: 16 }, this.designerCanvas, cache);
38
38
  const angle = Math.atan2((transformedCornerPoints[1].y - transformedCornerPoints[0].y), (transformedCornerPoints[1].x - transformedCornerPoints[0].x)) * 180 / Math.PI;
39
39
  const transformedCornerPointsTx = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, { x: 0, y: 5 }, this.designerCanvas);
40
40
  if (!isNaN(transformedCornerPoints[0].x)) {
@@ -7,6 +7,7 @@ export declare class ExtensionManager implements IExtensionManager {
7
7
  designerCanvas: IDesignerCanvas;
8
8
  designItemsWithExtentions: Set<IDesignItem>;
9
9
  constructor(designerCanvas: IDesignerCanvas);
10
+ private refreshAllExtensionsTimeout;
10
11
  private _contentChanged;
11
12
  private _selectedElementsChanged;
12
13
  applyExtension(designItem: IDesignItem, extensionType: ExtensionType, event?: Event, recursive?: boolean): IDesignerExtension[];
@@ -8,6 +8,11 @@ export class ExtensionManager {
8
8
  this.designerCanvas = designerCanvas;
9
9
  designerCanvas.instanceServiceContainer.selectionService.onSelectionChanged.on(this._selectedElementsChanged.bind(this));
10
10
  designerCanvas.instanceServiceContainer.contentService.onContentChanged.on(this._contentChanged.bind(this));
11
+ setTimeout(() => this.refreshAllExtensionsTimeout(), 20);
12
+ }
13
+ refreshAllExtensionsTimeout() {
14
+ this.refreshAllAppliedExtentions();
15
+ setTimeout(() => this.refreshAllExtensionsTimeout(), 20);
11
16
  }
12
17
  _contentChanged(contentChanged) {
13
18
  requestAnimationFrame(() => {
@@ -4,8 +4,9 @@ import { AbstractExtension } from './AbstractExtension.js';
4
4
  import { IExtensionManager } from './IExtensionManger.js';
5
5
  export declare class InvisibleElementExtension extends AbstractExtension {
6
6
  private _rect;
7
+ private lastPoints;
7
8
  constructor(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, extendedItem: IDesignItem);
8
- extend(): void;
9
- refresh(): void;
9
+ extend(cache: Record<string | symbol, any>, event?: Event): void;
10
+ refresh(cache: Record<string | symbol, any>, event?: Event): void;
10
11
  dispose(): void;
11
12
  }
@@ -3,15 +3,19 @@ import { AbstractExtension } from './AbstractExtension.js';
3
3
  import { OverlayLayer } from "./OverlayLayer.js";
4
4
  export class InvisibleElementExtension extends AbstractExtension {
5
5
  _rect;
6
+ lastPoints;
6
7
  constructor(extensionManager, designerCanvas, extendedItem) {
7
8
  super(extensionManager, designerCanvas, extendedItem);
8
9
  }
9
- extend() {
10
- this.refresh();
10
+ extend(cache, event) {
11
+ this.refresh(cache, event);
11
12
  }
12
- refresh() {
13
- let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas);
14
- this._rect = this._drawTransformedRect(transformedCornerPoints, 'svg-invisible-div', this._rect, OverlayLayer.Background);
13
+ refresh(cache, event) {
14
+ const t = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas, cache);
15
+ if (!this.lastPoints || this.lastPoints[0].x != t[0].x || this.lastPoints[0].y != t[0].y || this.lastPoints[1].x != t[1].x || this.lastPoints[1].y != t[1].y || this.lastPoints[2].x != t[2].x || this.lastPoints[2].y != t[2].y || this.lastPoints[3].x != t[3].x || this.lastPoints[3].y != t[3].y) {
16
+ this.lastPoints = t;
17
+ this._rect = this._drawTransformedRect(t, 'svg-invisible-div', this._rect, OverlayLayer.Background);
18
+ }
15
19
  }
16
20
  dispose() {
17
21
  this._removeAllOverlays();
@@ -14,7 +14,7 @@ export class PositionExtension extends AbstractExtension {
14
14
  }
15
15
  refresh() {
16
16
  const itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
17
- const itemParentRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element.parentElement);
17
+ const itemParentRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.parent.element);
18
18
  this._line1 = this._drawLine(itemParentRect.x, itemRect.y + itemRect.height / 2, itemRect.x, itemRect.y + itemRect.height / 2, 'svg-position', this._line1);
19
19
  this._line2 = this._drawLine(itemParentRect.x + itemParentRect.width, itemRect.y + itemRect.height / 2, itemRect.x + itemRect.width, itemRect.y + itemRect.height / 2, 'svg-position', this._line2);
20
20
  this._line3 = this._drawLine(itemRect.x + itemRect.width / 2, itemParentRect.y, itemRect.x + itemRect.width / 2, itemRect.y, 'svg-position', this._line3);
@@ -19,8 +19,8 @@ export declare class ResizeExtension extends AbstractExtension {
19
19
  private _initialComputedTransformOrigins;
20
20
  private _initialTransformOrigins;
21
21
  constructor(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, extendedItem: IDesignItem, resizeAllSelected: boolean);
22
- extend(): void;
23
- refresh(): void;
22
+ extend(cache: Record<string | symbol, any>, event?: Event): void;
23
+ refresh(cache: Record<string | symbol, any>, event?: Event): void;
24
24
  _drawResizerOverlay(x: number, y: number, cursor: string, oldCircle?: SVGCircleElement): SVGCircleElement;
25
25
  _pointerActionTypeResize(circle: SVGCircleElement, event: PointerEvent, actionMode: string): void;
26
26
  dispose(): void;
@@ -22,12 +22,12 @@ export class ResizeExtension extends AbstractExtension {
22
22
  super(extensionManager, designerCanvas, extendedItem);
23
23
  this.resizeAllSelected = resizeAllSelected;
24
24
  }
25
- extend() {
26
- this.refresh();
25
+ extend(cache, event) {
26
+ this.refresh(cache, event);
27
27
  }
28
- refresh() {
28
+ refresh(cache, event) {
29
29
  //#region Resizer circles
30
- let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas);
30
+ let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas, cache);
31
31
  this._circle1 = this._drawResizerOverlay(transformedCornerPoints[0].x, transformedCornerPoints[0].y, 'nw-resize', this._circle1);
32
32
  this._circle2 = this._drawResizerOverlay((transformedCornerPoints[0].x + (transformedCornerPoints[1].x - transformedCornerPoints[0].x) / 2), (transformedCornerPoints[0].y + (transformedCornerPoints[1].y - transformedCornerPoints[0].y) / 2), 'n-resize', this._circle2);
33
33
  this._circle3 = this._drawResizerOverlay(transformedCornerPoints[1].x, transformedCornerPoints[1].y, 'ne-resize', this._circle3);
@@ -79,6 +79,7 @@ export class DrawEllipsisTool {
79
79
  this._path.setAttribute("cy", (this._cy - mvY).toString());
80
80
  this._path.removeAttribute("stroke");
81
81
  this._path.removeAttribute("stroke-width");
82
+ this._path.removeAttribute("overlay-source");
82
83
  svg.style.left = (mvX) + 'px';
83
84
  svg.style.top = (mvY) + 'px';
84
85
  svg.style.position = 'absolute';
@@ -63,6 +63,7 @@ export class DrawLineTool {
63
63
  this._path.setAttribute("y2", (this._endPoint.y - mvY).toString());
64
64
  this._path.removeAttribute("stroke");
65
65
  this._path.removeAttribute("stroke-width");
66
+ this._path.removeAttribute("overlay-source");
66
67
  svg.appendChild(this._path);
67
68
  svg.style.left = (mvX) + 'px';
68
69
  svg.style.top = (mvY) + 'px';
@@ -105,6 +105,7 @@ export class DrawPathTool {
105
105
  this._path.setAttribute("d", d);
106
106
  this._path.removeAttribute("stroke");
107
107
  this._path.removeAttribute("stroke-width");
108
+ this._path.removeAttribute("overlay-source");
108
109
  svg.appendChild(this._path);
109
110
  svg.style.left = (mvX) + 'px';
110
111
  svg.style.top = (mvY) + 'px';
@@ -93,6 +93,7 @@ export class DrawRectTool {
93
93
  this._path.setAttribute("y", (this._py - mvY).toString());
94
94
  this._path.removeAttribute("stroke");
95
95
  this._path.removeAttribute("stroke-width");
96
+ this._path.removeAttribute("overlay-source");
96
97
  svg.appendChild(this._path);
97
98
  svg.style.left = (mvX) + 'px';
98
99
  svg.style.top = (mvY) + 'px';
@@ -28,7 +28,7 @@ export class MagicWandSelectorTool {
28
28
  case EventNames.PointerUp:
29
29
  event.target.releasePointerCapture(event.pointerId);
30
30
  designerCanvas.releaseActiveTool();
31
- const elements = designerCanvas.rootDesignItem.element.querySelectorAll('*');
31
+ const elements = designerCanvas.rootDesignItem.querySelectorAll('*');
32
32
  const inSelectionElements = [];
33
33
  let point = designerCanvas.overlayLayer.createPoint();
34
34
  for (let e of elements) {
@@ -50,7 +50,7 @@ export class RectangleSelectorTool {
50
50
  case EventNames.PointerUp:
51
51
  event.target.releasePointerCapture(event.pointerId);
52
52
  designerCanvas.releaseActiveTool();
53
- const elements = designerCanvas.rootDesignItem.element.querySelectorAll('*');
53
+ const elements = designerCanvas.rootDesignItem.querySelectorAll('*');
54
54
  let inSelectionElements = [];
55
55
  let point = designerCanvas.overlayLayer.createPoint();
56
56
  for (let e of elements) {
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.64",
4
+ "version": "0.1.71",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "jochen.kuehner@gmx.de",