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

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 +33 -46
  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,14 @@ 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
  }
122
123
  #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,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);
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);
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));
127
125
  image-rendering: pixelated;
128
- background-position: 0px 0px;
129
- background-attachment: fixed;
130
- background-origin: -box;
131
126
  box-sizing: border-box;
132
127
  width: 100%;
133
128
  height: 100%;
@@ -285,6 +280,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
285
280
  super();
286
281
  this._restoreCachedInititalValues();
287
282
  this._canvas = this._getDomElement('node-projects-designer-canvas-canvas');
283
+ this._canvasShadowRoot = this._canvas.attachShadow({ mode: 'open' });
288
284
  this._canvasContainer = this._getDomElement('node-projects-designer-canvas-canvasContainer');
289
285
  this._outercanvas2 = this._getDomElement('node-projects-designer-canvas-outercanvas2');
290
286
  this.clickOverlay = this._getDomElement('node-projects-designer-canvas-clickOverlay');
@@ -337,15 +333,30 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
337
333
  return this._additionalStyle;
338
334
  }
339
335
  applyAllStyles() {
340
- let styles = [this.constructor.style];
336
+ let styles = [];
341
337
  if (this._additionalStyle)
342
- styles.push(cssFromString(AbstractStylesheetService.buildPatchedStyleSheet(this._additionalStyle)));
338
+ styles.push(...this._additionalStyle);
343
339
  if (this.instanceServiceContainer.stylesheetService) {
344
340
  styles.push(...this.instanceServiceContainer.stylesheetService
345
341
  .getStylesheets()
346
- .map(x => cssFromString(AbstractStylesheetService.buildPatchedStyleSheet([cssFromString(x.content)]))));
342
+ .map(x => cssFromString(x.content)));
347
343
  }
348
- this.shadowRoot.adoptedStyleSheets = styles;
344
+ let backgroundSet = false;
345
+ for (const s of styles) {
346
+ for (let r of s.cssRules) {
347
+ if (r instanceof CSSStyleRule) {
348
+ if (r.selectorText.split(',').includes(':host')) {
349
+ if (r.style.background) {
350
+ this._canvas.style.background = r.style.background;
351
+ backgroundSet = true;
352
+ }
353
+ }
354
+ }
355
+ }
356
+ }
357
+ if (!backgroundSet)
358
+ this._canvas.style.background = '';
359
+ this._canvasShadowRoot.adoptedStyleSheets = styles;
349
360
  }
350
361
  /* --- start IUiCommandHandler --- */
351
362
  async executeCommand(command) {
@@ -431,11 +442,10 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
431
442
  }
432
443
  }
433
444
  disableBackgroud() {
434
- this._backgroundImage = this._canvas.style.backgroundImage;
435
445
  this._canvas.style.backgroundImage = 'none';
436
446
  }
437
447
  enableBackground() {
438
- this._canvas.style.backgroundImage = this._backgroundImage;
448
+ this._canvas.style.backgroundImage = 'var(--node-projects-web-component-designer-background)';
439
449
  }
440
450
  zoomToFit() {
441
451
  const autoZomOffset = 10;
@@ -571,6 +581,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
571
581
  this.instanceServiceContainer.register("designItemDocumentPositionService", designItemDocumentPositionService(this));
572
582
  }
573
583
  this.rootDesignItem = DesignItem.GetOrCreateDesignItem(this._canvas, this._canvas, this.serviceContainer, this.instanceServiceContainer);
584
+ //this.rootDesignItem.setView(<any>this._canvasShadowRoot);
574
585
  const contentService = this.serviceContainer.getLastService('contentService');
575
586
  if (contentService) {
576
587
  this.instanceServiceContainer.register("contentService", contentService(this));
@@ -695,7 +706,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
695
706
  }
696
707
  async reparseDocumentStylesheets() {
697
708
  if (this.instanceServiceContainer.stylesheetService) {
698
- const styleElements = this.rootDesignItem.element.querySelectorAll('style');
709
+ const styleElements = this.rootDesignItem.querySelectorAll('style');
699
710
  let i = 1;
700
711
  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
712
  await this.instanceServiceContainer.stylesheetService.setDocumentStylesheets(intStyleSheets);
@@ -852,10 +863,10 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
852
863
  let input = this._getDomElement('node-projects-designer-search-input');
853
864
  this._getDomElement('node-projects-designer-search-result').innerHTML = "0 selected";
854
865
  if (input.value != "") {
855
- let selectedElements = this.shadowRoot.querySelectorAll(input.value);
866
+ let selectedElements = this._canvasShadowRoot.querySelectorAll(input.value);
856
867
  let designItems = [];
857
868
  for (let i = 0; i <= selectedElements.length; i++) {
858
- if (this._canvasContainer.contains(selectedElements[i]))
869
+ if (this._canvasShadowRoot.contains(selectedElements[i]))
859
870
  designItems.push(DesignItem.GetDesignItem(selectedElements[i]));
860
871
  }
861
872
  if (designItems.length > 0) {
@@ -978,54 +989,30 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
978
989
  }
979
990
  //TODO: remove
980
991
  elementFromPoint(x, y) {
981
- let elements = this.shadowRoot.elementsFromPoint(x, y);
992
+ let elements = this._canvasShadowRoot.elementsFromPoint(x, y);
982
993
  let element = elements[0];
983
- if (element === this.clickOverlay)
984
- element = elements[1];
985
- if (element === this.clickOverlay)
986
- element = this._canvas;
987
994
  return element;
988
995
  }
989
996
  elementsFromPoint(x, y) {
990
997
  let retVal = [];
991
- let elements = this.shadowRoot.elementsFromPoint(x, y);
998
+ let elements = this._canvasShadowRoot.elementsFromPoint(x, y);
992
999
  for (let e of elements) {
993
- if (e == this.clickOverlay)
1000
+ if (e.getRootNode() !== this._canvasShadowRoot)
994
1001
  continue;
995
- if (e == this.overlayLayer)
996
- continue;
997
- if (e.getRootNode() !== this.shadowRoot)
998
- continue;
999
- if (e == this._outercanvas2)
1000
- break;
1001
1002
  retVal.push(e);
1002
- if (e === this._canvas)
1003
- break;
1004
1003
  }
1005
1004
  return retVal;
1006
1005
  }
1007
1006
  getElementAtPoint(point, ignoreElementCallback) {
1008
- const elements = this.shadowRoot.elementsFromPoint(point.x, point.y);
1007
+ const elements = this._canvasShadowRoot.elementsFromPoint(point.x, point.y);
1009
1008
  let currentElement = null;
1010
1009
  for (let i = 0; i < elements.length; i++) {
1011
1010
  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
1011
  if (ignoreElementCallback && ignoreElementCallback(currentElement)) {
1025
1012
  currentElement = null;
1026
1013
  continue;
1027
1014
  }
1028
- if (currentElement.getRootNode() !== this.shadowRoot) {
1015
+ if (currentElement.getRootNode() !== this._canvasShadowRoot) {
1029
1016
  currentElement = null;
1030
1017
  continue;
1031
1018
  }
@@ -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.70",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "jochen.kuehner@gmx.de",