@node-projects/web-component-designer 0.0.38 → 0.0.39

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 (47) hide show
  1. package/dist/elements/controls/ThicknessEditor.js +1 -1
  2. package/dist/elements/services/ServiceContainer.d.ts +2 -0
  3. package/dist/elements/services/ServiceContainer.js +1 -0
  4. package/dist/elements/widgets/designerView/designerCanvas.d.ts +1 -0
  5. package/dist/elements/widgets/designerView/designerCanvas.js +11 -1
  6. package/dist/elements/widgets/designerView/extensions/AbstractExtension copy.d.ts +22 -0
  7. package/dist/elements/widgets/designerView/extensions/AbstractExtension copy.js +52 -0
  8. package/dist/elements/widgets/designerView/extensions/AbstractExtension.d.ts +2 -12
  9. package/dist/elements/widgets/designerView/extensions/AbstractExtension.js +3 -73
  10. package/dist/elements/widgets/designerView/extensions/AbstractExtensionBase.d.ts +16 -0
  11. package/dist/elements/widgets/designerView/extensions/AbstractExtensionBase.js +50 -0
  12. package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtension.js +2 -2
  13. package/dist/elements/widgets/designerView/extensions/CanvasExtension.js +2 -2
  14. package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.js +4 -4
  15. package/dist/elements/widgets/designerView/extensions/ExtensionManager.d.ts +1 -0
  16. package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +14 -0
  17. package/dist/elements/widgets/designerView/extensions/ExtensionType.d.ts +0 -3
  18. package/dist/elements/widgets/designerView/extensions/ExtensionType.js +0 -3
  19. package/dist/elements/widgets/designerView/extensions/GrayOutExtension.js +5 -5
  20. package/dist/elements/widgets/designerView/extensions/GridExtension.js +2 -2
  21. package/dist/elements/widgets/designerView/extensions/IExtensionManger.d.ts +1 -0
  22. package/dist/elements/widgets/designerView/extensions/InvisibleDivExtension.js +1 -1
  23. package/dist/elements/widgets/designerView/extensions/MouseOverExtension.js +2 -2
  24. package/dist/elements/widgets/designerView/extensions/PathExtension.js +2 -2
  25. package/dist/elements/widgets/designerView/extensions/PositionExtension.js +6 -6
  26. package/dist/elements/widgets/designerView/extensions/PrimarySelectionDefaultExtension.js +2 -2
  27. package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +21 -21
  28. package/dist/elements/widgets/designerView/extensions/RotateExtension.js +3 -3
  29. package/dist/elements/widgets/designerView/extensions/SelectionDefaultExtension.js +1 -1
  30. package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.js +6 -6
  31. package/dist/elements/widgets/designerView/extensions/pointerExtensions/AbstractDesignerPointerExtension.d.ts +3 -14
  32. package/dist/elements/widgets/designerView/extensions/pointerExtensions/AbstractDesignerPointerExtension.js +4 -75
  33. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorLinePointerExtension copy.d.ts +13 -0
  34. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorLinePointerExtension copy.js +27 -0
  35. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorLinePointerExtension.d.ts +13 -0
  36. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorLinePointerExtension.js +26 -0
  37. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorLinePointerExtensionProvider.d.ts +7 -0
  38. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorLinePointerExtensionProvider.js +10 -0
  39. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectanglePointerExtension copy.d.ts +7 -1
  40. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectanglePointerExtension copy.js +15 -8
  41. package/dist/elements/widgets/designerView/extensions/pointerExtensions/IDesignerPointerExtension.d.ts +1 -1
  42. package/dist/elements/widgets/designerView/extensions/pointerExtensions/IDesignerPointerExtensionProvider.d.ts +1 -4
  43. package/dist/elements/widgets/designerView/overlayLayerView.d.ts +4 -0
  44. package/dist/elements/widgets/designerView/overlayLayerView.js +55 -0
  45. package/dist/index.d.ts +5 -0
  46. package/dist/index.js +3 -0
  47. package/package.json +1 -1
@@ -123,7 +123,6 @@ export class ThicknessEditor extends BaseCustomWebComponentConstructorAppend {
123
123
  }
124
124
  ready() {
125
125
  this._parseAttributesToProperties();
126
- this._updateValue();
127
126
  this._leftInput = this._getDomElement('left');
128
127
  this._topInput = this._getDomElement('top');
129
128
  this._rightInput = this._getDomElement('right');
@@ -140,6 +139,7 @@ export class ThicknessEditor extends BaseCustomWebComponentConstructorAppend {
140
139
  this._topInput.onblur = (e) => this._valueTop = this._topInput.value;
141
140
  this._rightInput.onblur = (e) => this._valueRight = this._rightInput.value;
142
141
  this._bottomInput.onblur = (e) => this._valueBottom = this._bottomInput.value;
142
+ this._updateValue();
143
143
  }
144
144
  }
145
145
  customElements.define('node-projects-thickness-editor', ThicknessEditor);
@@ -21,6 +21,7 @@ import { ISnaplinesProviderService } from "./placementService/ISnaplinesProvider
21
21
  import { IPrepareElementsForDesignerService } from './instanceService/IPrepareElementsForDesignerService';
22
22
  import { IDragDropService } from './dragDropService/IDragDropService';
23
23
  import { ICopyPasteService } from "./copyPasteService/ICopyPasteService.js";
24
+ import { IDesignerPointerExtensionProvider } from "../widgets/designerView/extensions/pointerExtensions/IDesignerPointerExtensionProvider.js";
24
25
  interface ServiceNameMap {
25
26
  "propertyService": IPropertiesService;
26
27
  "containerService": IPlacementService;
@@ -43,6 +44,7 @@ export declare class ServiceContainer extends BaseServiceContainer<ServiceNameMa
43
44
  demoViewWidget: new (...args: any[]) => IDemoView & HTMLElement;
44
45
  };
45
46
  readonly designerExtensions: Map<(ExtensionType | string), IDesignerExtensionProvider[]>;
47
+ readonly designerPointerExtensions: IDesignerPointerExtensionProvider[];
46
48
  designerContextMenuExtensions: IContextMenuExtension[];
47
49
  readonly globalContext: GlobalContext;
48
50
  readonly designerTools: Map<string | NamedTools, ITool>;
@@ -8,6 +8,7 @@ export class ServiceContainer extends BaseServiceContainer {
8
8
  demoViewWidget: DemoView
9
9
  };
10
10
  designerExtensions = new Map();
11
+ designerPointerExtensions = [];
11
12
  designerContextMenuExtensions;
12
13
  globalContext = new GlobalContext(this);
13
14
  designerTools = new Map();
@@ -40,6 +40,7 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
40
40
  static readonly style: CSSStyleSheet;
41
41
  static readonly template: HTMLTemplateElement;
42
42
  extensionManager: IExtensionManager;
43
+ private _pointerextensions;
43
44
  private _onDblClickBound;
44
45
  constructor();
45
46
  get designerWidth(): string;
@@ -103,13 +103,13 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
103
103
  <div style="width: 100%;height: 100%;">
104
104
  <div id="node-projects-designer-canvas-outercanvas2" style="width: 100%;height: 100%;position: relative;overflow: auto;">
105
105
  <div id="node-projects-designer-canvas-canvasContainer" style="width: 100%;height: 100%;margin: auto;position: absolute;top: 0;/* bottom: 0; does not work with fixed sized when size is bigger then view */left: 0;user-select: none;">
106
- <!-- <div id="zoomHelper" style="width: 10px; height: 10px; position: absolute; top: 0; left: 0; pointer-events: none;"></div> -->
107
106
  <div id="node-projects-designer-canvas-canvas" part="canvas" tabindex="0"></div>
108
107
  </div>
109
108
  </div>
110
109
  </div>
111
110
  </div>`;
112
111
  extensionManager;
112
+ _pointerextensions;
113
113
  _onDblClickBound;
114
114
  constructor() {
115
115
  super();
@@ -276,6 +276,12 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
276
276
  this._canvasContainer.appendChild(this.overlayLayer);
277
277
  this.snapLines = new Snaplines(this.overlayLayer);
278
278
  this.snapLines.initialize(this.rootDesignItem);
279
+ if (this.serviceContainer.designerPointerExtensions)
280
+ for (let pe of this.serviceContainer.designerPointerExtensions) {
281
+ if (!this._pointerextensions)
282
+ this._pointerextensions = [];
283
+ this._pointerextensions.push(pe.getExtension(this));
284
+ }
279
285
  if (this.children) {
280
286
  let children = this.children;
281
287
  if (this.children.length == 1 && this.children[0] instanceof HTMLSlotElement) {
@@ -548,6 +554,10 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
548
554
  _rect;
549
555
  _pointerEventHandler(event) {
550
556
  this._fillCalculationrects();
557
+ if (this._pointerextensions) {
558
+ for (let pe of this._pointerextensions)
559
+ pe.refresh(event);
560
+ }
551
561
  if (event.composedPath().indexOf(this.eatEvents) >= 0)
552
562
  return;
553
563
  if (event.button == 2)
@@ -0,0 +1,22 @@
1
+ import { IDesignItem } from "../../../item/IDesignItem";
2
+ import { IDesignerCanvas } from "../IDesignerCanvas";
3
+ import { IDesignerExtension } from "./IDesignerExtension";
4
+ import { IExtensionManager } from "./IExtensionManger";
5
+ import { OverlayLayerView } from '../overlayLayerView';
6
+ import { OverlayLayer } from './OverlayLayer';
7
+ export declare abstract class AbstractExtension implements IDesignerExtension {
8
+ protected overlays: SVGGraphicsElement[];
9
+ protected overlayLayerView: OverlayLayerView;
10
+ protected extensionManager: IExtensionManager;
11
+ protected designerView: IDesignerCanvas;
12
+ protected extendedItem: IDesignItem;
13
+ constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
14
+ abstract extend(): any;
15
+ abstract refresh(): any;
16
+ abstract dispose(): any;
17
+ protected _removeAllOverlays(): void;
18
+ _drawLine(x1: number, y1: number, x2: number, y2: number, className?: string, line?: SVGLineElement, overlayLayer?: OverlayLayer): SVGLineElement;
19
+ _drawCircle(x: number, y: number, radius: number, className?: string, circle?: SVGCircleElement, overlayLayer?: OverlayLayer): SVGCircleElement;
20
+ _drawRect(x: number, y: number, w: number, h: number, className?: string, rect?: SVGRectElement, overlayLayer?: OverlayLayer): SVGRectElement;
21
+ _drawText(text: string, x: number, y: number, className?: string, textEl?: SVGTextElement, overlayLayer?: OverlayLayer): SVGTextElement;
22
+ }
@@ -0,0 +1,52 @@
1
+ export class AbstractExtension {
2
+ overlays = [];
3
+ overlayLayerView;
4
+ extensionManager;
5
+ designerView;
6
+ extendedItem;
7
+ constructor(extensionManager, designerView, extendedItem) {
8
+ this.extensionManager = extensionManager;
9
+ this.designerView = designerView;
10
+ this.extendedItem = extendedItem;
11
+ this.overlayLayerView = designerView.overlayLayer;
12
+ }
13
+ _removeAllOverlays() {
14
+ for (let o of this.overlays) {
15
+ try {
16
+ this.overlayLayerView.removeOverlay(o);
17
+ }
18
+ catch (err) {
19
+ console.error(err);
20
+ }
21
+ }
22
+ this.overlays = [];
23
+ }
24
+ _drawLine(x1, y1, x2, y2, className, line, overlayLayer) {
25
+ const newLine = this.overlayLayerView.drawLine(x1, y1, x2, y2, className, line, overlayLayer);
26
+ if (!line) {
27
+ this.overlays.push(newLine);
28
+ }
29
+ return newLine;
30
+ }
31
+ _drawCircle(x, y, radius, className, circle, overlayLayer) {
32
+ const newCircle = this.overlayLayerView.drawCircle(x, y, radius, className, circle, overlayLayer);
33
+ if (!circle) {
34
+ this.overlays.push(newCircle);
35
+ }
36
+ return circle;
37
+ }
38
+ _drawRect(x, y, w, h, className, rect, overlayLayer) {
39
+ const newRect = this.overlayLayerView.drawRect(x, y, w, h, className, rect, overlayLayer);
40
+ if (!rect) {
41
+ this.overlays.push(newRect);
42
+ }
43
+ return newRect;
44
+ }
45
+ _drawText(text, x, y, className, textEl, overlayLayer) {
46
+ const newText = this.overlayLayerView.drawText(text, x, y, className, textEl, overlayLayer);
47
+ if (!textEl) {
48
+ this.overlays.push(newText);
49
+ }
50
+ return newText;
51
+ }
52
+ }
@@ -2,21 +2,11 @@ import { IDesignItem } from "../../../item/IDesignItem";
2
2
  import { IDesignerCanvas } from "../IDesignerCanvas";
3
3
  import { IDesignerExtension } from "./IDesignerExtension";
4
4
  import { IExtensionManager } from "./IExtensionManger";
5
- import { OverlayLayerView } from '../overlayLayerView';
6
- import { OverlayLayer } from './OverlayLayer';
7
- export declare abstract class AbstractExtension implements IDesignerExtension {
8
- protected overlays: SVGGraphicsElement[];
9
- protected overlayLayerView: OverlayLayerView;
10
- protected extensionManager: IExtensionManager;
11
- protected designerView: IDesignerCanvas;
5
+ import { AbstractExtensionBase } from "./AbstractExtensionBase.js";
6
+ export declare abstract class AbstractExtension extends AbstractExtensionBase implements IDesignerExtension {
12
7
  protected extendedItem: IDesignItem;
13
8
  constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
14
9
  abstract extend(): any;
15
10
  abstract refresh(): any;
16
11
  abstract dispose(): any;
17
- protected _removeAllOverlays(): void;
18
- _drawLineOverlay(x1: number, y1: number, x2: number, y2: number, className?: string, line?: SVGLineElement, overlayLayer?: OverlayLayer): SVGLineElement;
19
- _drawCircleOverlay(x: number, y: number, radius: number, className?: string, circle?: SVGCircleElement, overlayLayer?: OverlayLayer): SVGCircleElement;
20
- _drawRect(x: number, y: number, w: number, h: number, className?: string, rect?: SVGRectElement, overlayLayer?: OverlayLayer): SVGRectElement;
21
- _drawText(text: string, x: number, y: number, className?: string, textEl?: SVGTextElement, overlayLayer?: OverlayLayer): SVGTextElement;
22
12
  }
@@ -1,78 +1,8 @@
1
- export class AbstractExtension {
2
- overlays = [];
3
- overlayLayerView;
4
- extensionManager;
5
- designerView;
1
+ import { AbstractExtensionBase } from "./AbstractExtensionBase.js";
2
+ export class AbstractExtension extends AbstractExtensionBase {
6
3
  extendedItem;
7
4
  constructor(extensionManager, designerView, extendedItem) {
8
- this.extensionManager = extensionManager;
9
- this.designerView = designerView;
5
+ super(extensionManager, designerView);
10
6
  this.extendedItem = extendedItem;
11
- this.overlayLayerView = designerView.overlayLayer;
12
- }
13
- _removeAllOverlays() {
14
- for (let o of this.overlays) {
15
- try {
16
- this.overlayLayerView.removeOverlay(o);
17
- }
18
- catch (err) {
19
- console.error(err);
20
- }
21
- }
22
- this.overlays = [];
23
- }
24
- _drawLineOverlay(x1, y1, x2, y2, className, line, overlayLayer) {
25
- if (!line) {
26
- line = document.createElementNS("http://www.w3.org/2000/svg", "line");
27
- this.overlayLayerView.addOverlay(line, overlayLayer);
28
- this.overlays.push(line);
29
- }
30
- line.setAttribute('x1', x1);
31
- line.setAttribute('y1', y1);
32
- line.setAttribute('x2', x2);
33
- line.setAttribute('y2', y2);
34
- if (className)
35
- line.setAttribute('class', className);
36
- return line;
37
- }
38
- _drawCircleOverlay(x, y, radius, className, circle, overlayLayer) {
39
- if (!circle) {
40
- circle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
41
- this.overlayLayerView.addOverlay(circle, overlayLayer);
42
- this.overlays.push(circle);
43
- }
44
- circle.setAttribute('cx', x);
45
- circle.setAttribute('cy', y);
46
- circle.setAttribute('r', radius);
47
- if (className)
48
- circle.setAttribute('class', className);
49
- return circle;
50
- }
51
- _drawRect(x, y, w, h, className, rect, overlayLayer) {
52
- if (!rect) {
53
- rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
54
- this.overlayLayerView.addOverlay(rect, overlayLayer);
55
- this.overlays.push(rect);
56
- }
57
- rect.setAttribute('x', x);
58
- rect.setAttribute('y', y);
59
- rect.setAttribute('width', w);
60
- rect.setAttribute('height', h);
61
- if (className)
62
- rect.setAttribute('class', className);
63
- return rect;
64
- }
65
- _drawText(text, x, y, className, textEl, overlayLayer) {
66
- if (!textEl) {
67
- textEl = document.createElementNS("http://www.w3.org/2000/svg", "text");
68
- this.overlayLayerView.addOverlay(textEl, overlayLayer);
69
- this.overlays.push(textEl);
70
- }
71
- textEl.setAttribute('x', x);
72
- textEl.setAttribute('y', y);
73
- textEl.textContent = text;
74
- if (className)
75
- textEl.setAttribute('class', className);
76
- return textEl;
77
7
  }
78
8
  }
@@ -0,0 +1,16 @@
1
+ import { IDesignerCanvas } from "../IDesignerCanvas";
2
+ import { IExtensionManager } from "./IExtensionManger";
3
+ import { OverlayLayerView } from '../overlayLayerView';
4
+ import { OverlayLayer } from './OverlayLayer';
5
+ export declare abstract class AbstractExtensionBase {
6
+ protected overlays: SVGGraphicsElement[];
7
+ protected overlayLayerView: OverlayLayerView;
8
+ protected extensionManager: IExtensionManager;
9
+ protected designerCanvas: IDesignerCanvas;
10
+ constructor(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas);
11
+ protected _removeAllOverlays(): void;
12
+ protected _drawLine(x1: number, y1: number, x2: number, y2: number, className?: string, line?: SVGLineElement, overlayLayer?: OverlayLayer): SVGLineElement;
13
+ protected _drawCircle(x: number, y: number, radius: number, className?: string, circle?: SVGCircleElement, overlayLayer?: OverlayLayer): SVGCircleElement;
14
+ protected _drawRect(x: number, y: number, w: number, h: number, className?: string, rect?: SVGRectElement, overlayLayer?: OverlayLayer): SVGRectElement;
15
+ protected _drawText(text: string, x: number, y: number, className?: string, textEl?: SVGTextElement, overlayLayer?: OverlayLayer): SVGTextElement;
16
+ }
@@ -0,0 +1,50 @@
1
+ export class AbstractExtensionBase {
2
+ overlays = [];
3
+ overlayLayerView;
4
+ extensionManager;
5
+ designerCanvas;
6
+ constructor(extensionManager, designerCanvas) {
7
+ this.extensionManager = extensionManager;
8
+ this.designerCanvas = designerCanvas;
9
+ this.overlayLayerView = designerCanvas.overlayLayer;
10
+ }
11
+ _removeAllOverlays() {
12
+ for (let o of this.overlays) {
13
+ try {
14
+ this.overlayLayerView.removeOverlay(o);
15
+ }
16
+ catch (err) {
17
+ console.error(err);
18
+ }
19
+ }
20
+ this.overlays = [];
21
+ }
22
+ _drawLine(x1, y1, x2, y2, className, line, overlayLayer) {
23
+ const newLine = this.overlayLayerView.drawLine(x1, y1, x2, y2, className, line, overlayLayer);
24
+ if (!line) {
25
+ this.overlays.push(newLine);
26
+ }
27
+ return newLine;
28
+ }
29
+ _drawCircle(x, y, radius, className, circle, overlayLayer) {
30
+ const newCircle = this.overlayLayerView.drawCircle(x, y, radius, className, circle, overlayLayer);
31
+ if (!circle) {
32
+ this.overlays.push(newCircle);
33
+ }
34
+ return newCircle;
35
+ }
36
+ _drawRect(x, y, w, h, className, rect, overlayLayer) {
37
+ const newRect = this.overlayLayerView.drawRect(x, y, w, h, className, rect, overlayLayer);
38
+ if (!rect) {
39
+ this.overlays.push(newRect);
40
+ }
41
+ return newRect;
42
+ }
43
+ _drawText(text, x, y, className, textEl, overlayLayer) {
44
+ const newText = this.overlayLayerView.drawText(text, x, y, className, textEl, overlayLayer);
45
+ if (!textEl) {
46
+ this.overlays.push(newText);
47
+ }
48
+ return newText;
49
+ }
50
+ }
@@ -11,8 +11,8 @@ export class AltToEnterContainerExtension extends AbstractExtension {
11
11
  }
12
12
  refresh() {
13
13
  let itemRect = this.extendedItem.element.getBoundingClientRect();
14
- this._text = this._drawText("Press ALT to enter container", itemRect.x - this.designerView.containerBoundingRect.x + 5, itemRect.y - this.designerView.containerBoundingRect.y + 12, 'svg-text-enter-container', this._text, OverlayLayer.Background);
15
- this._rect = this._drawRect(itemRect.x - this.designerView.containerBoundingRect.x, itemRect.y - this.designerView.containerBoundingRect.y, itemRect.width, itemRect.height, 'svg-rect-enter-container', this._rect, OverlayLayer.Background);
14
+ this._text = this._drawText("Press ALT to enter container", itemRect.x - this.designerCanvas.containerBoundingRect.x + 5, itemRect.y - this.designerCanvas.containerBoundingRect.y + 12, 'svg-text-enter-container', this._text, OverlayLayer.Background);
15
+ this._rect = this._drawRect(itemRect.x - this.designerCanvas.containerBoundingRect.x, itemRect.y - this.designerCanvas.containerBoundingRect.y, itemRect.width, itemRect.height, 'svg-rect-enter-container', this._rect, OverlayLayer.Background);
16
16
  }
17
17
  dispose() {
18
18
  this._removeAllOverlays();
@@ -7,8 +7,8 @@ export class CanvasExtension extends AbstractExtension {
7
7
  let itemRect = this.extendedItem.element.getBoundingClientRect();
8
8
  const computedStyle = getComputedStyle(this.extendedItem.element);
9
9
  if (computedStyle.margin !== '0px') {
10
- const xOffset = itemRect.x - this.designerView.containerBoundingRect.x;
11
- const yOffset = itemRect.y - this.designerView.containerBoundingRect.y;
10
+ const xOffset = itemRect.x - this.designerCanvas.containerBoundingRect.x;
11
+ const yOffset = itemRect.y - this.designerCanvas.containerBoundingRect.y;
12
12
  const left = Number.parseFloat(computedStyle.marginLeft.replace('px', ''));
13
13
  const top = Number.parseFloat(computedStyle.marginTop.replace('px', ''));
14
14
  const right = Number.parseFloat(computedStyle.marginRight.replace('px', ''));
@@ -29,13 +29,13 @@ export class EditTextExtension extends AbstractExtension {
29
29
  this.extendedItem.element.addEventListener('input', this._contentEditedBound);
30
30
  this.extendedItem.element.addEventListener('blur', this._blurBound);
31
31
  this.extendedItem.element.focus();
32
- this.designerView.eatEvents = this.extendedItem.element;
32
+ this.designerCanvas.eatEvents = this.extendedItem.element;
33
33
  let itemRect = this.extendedItem.element.getBoundingClientRect();
34
34
  const elements = EditTextExtension.template.content.cloneNode(true);
35
35
  elements.querySelectorAll('button').forEach(x => x.onclick = () => this._formatSelection(x.dataset['command']));
36
36
  let foreignObject = document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject');
37
- foreignObject.setAttribute('x', '' + (itemRect.x - this.designerView.containerBoundingRect.x));
38
- foreignObject.setAttribute('y', '' + (itemRect.y - this.designerView.containerBoundingRect.y - 30));
37
+ foreignObject.setAttribute('x', '' + (itemRect.x - this.designerCanvas.containerBoundingRect.x));
38
+ foreignObject.setAttribute('y', '' + (itemRect.y - this.designerCanvas.containerBoundingRect.y - 30));
39
39
  foreignObject.setAttribute('width', '96');
40
40
  foreignObject.setAttribute('height', '24');
41
41
  foreignObject.appendChild(elements);
@@ -50,7 +50,7 @@ export class EditTextExtension extends AbstractExtension {
50
50
  this.extendedItem.element.removeAttribute('contenteditable');
51
51
  this.extendedItem.element.removeEventListener('input', this._contentEditedBound);
52
52
  this.extendedItem.element.removeEventListener('blur', this._blurBound);
53
- this.designerView.eatEvents = null;
53
+ this.designerCanvas.eatEvents = null;
54
54
  this.extendedItem.updateChildrenFromNodesChildren();
55
55
  }
56
56
  _contentEdited() {
@@ -12,4 +12,5 @@ export declare class ExtensionManager implements IExtensionManager {
12
12
  removeExtensions(designItems: IDesignItem[], extensionType?: ExtensionType): void;
13
13
  refreshExtension(designItem: IDesignItem, extensionType?: ExtensionType): void;
14
14
  refreshExtensions(designItems: IDesignItem[], extensionType?: ExtensionType): void;
15
+ refreshAllExtensions(designItems: IDesignItem[]): void;
15
16
  }
@@ -200,4 +200,18 @@ export class ExtensionManager {
200
200
  }
201
201
  }
202
202
  }
203
+ refreshAllExtensions(designItems) {
204
+ if (designItems) {
205
+ this.refreshExtensions(designItems, ExtensionType.Permanent);
206
+ this.refreshExtensions(designItems, ExtensionType.Selection);
207
+ this.refreshExtensions(designItems, ExtensionType.PrimarySelection);
208
+ this.refreshExtensions(designItems, ExtensionType.PrimarySelectionContainer);
209
+ this.refreshExtensions(designItems, ExtensionType.MouseOver);
210
+ this.refreshExtensions(designItems, ExtensionType.OnlyOneItemSelected);
211
+ this.refreshExtensions(designItems, ExtensionType.MultipleItemsSelected);
212
+ this.refreshExtensions(designItems, ExtensionType.ContainerDragOver);
213
+ this.refreshExtensions(designItems, ExtensionType.ContainerDrag);
214
+ this.refreshExtensions(designItems, ExtensionType.Doubleclick);
215
+ }
216
+ }
203
217
  }
@@ -14,8 +14,5 @@ export declare enum ExtensionType {
14
14
  * Extension for the Current Container wich the dragged element is contained.
15
15
  */
16
16
  ContainerDrag = 256,
17
- /**
18
- * Extension for the Current Container wich the dragged element is contained.
19
- */
20
17
  Doubleclick = 512
21
18
  }
@@ -15,8 +15,5 @@ export var ExtensionType;
15
15
  * Extension for the Current Container wich the dragged element is contained.
16
16
  */
17
17
  ExtensionType[ExtensionType["ContainerDrag"] = 256] = "ContainerDrag";
18
- /**
19
- * Extension for the Current Container wich the dragged element is contained.
20
- */
21
18
  ExtensionType[ExtensionType["Doubleclick"] = 512] = "Doubleclick";
22
19
  })(ExtensionType || (ExtensionType = {}));
@@ -18,11 +18,11 @@ export class GrayOutExtension extends AbstractExtension {
18
18
  this.drawGrayOut(itemRect);
19
19
  }
20
20
  drawGrayOut(rect) {
21
- let r = { x: rect.x - this.designerView.containerBoundingRect.x, y: rect.y - this.designerView.containerBoundingRect.y, width: rect.width, height: rect.height };
22
- const pathPoints = "M0 0 L0 " + this.designerView.containerBoundingRect.height + "L" + r.x + " " + this.designerView.containerBoundingRect.height + "L" + r.x + " 0" + " L0 0" +
23
- "M" + r.x + " 0 L" + r.x + " " + r.y + "L" + this.designerView.containerBoundingRect.width + " " + r.y + "L" + this.designerView.containerBoundingRect.width + " 0" + "L" + r.x + " 0" +
24
- "M" + r.x + " " + (r.y + r.height) + "L" + r.x + " " + this.designerView.containerBoundingRect.height + "L" + this.designerView.containerBoundingRect.width + " " + this.designerView.containerBoundingRect.height + "L" + this.designerView.containerBoundingRect.width + " " + (r.y + r.height) + "L" + r.x + " " + (r.y + r.height) +
25
- "M" + (r.x + r.width) + " " + r.y + "L" + (r.x + r.width) + " " + (r.y + r.height) + "L" + this.designerView.containerBoundingRect.width + " " + (r.y + r.height) + "L" + this.designerView.containerBoundingRect.width + " " + (r.y) + "L" + (r.x + r.width) + " " + r.y;
21
+ let r = { x: rect.x - this.designerCanvas.containerBoundingRect.x, y: rect.y - this.designerCanvas.containerBoundingRect.y, width: rect.width, height: rect.height };
22
+ const pathPoints = "M0 0 L0 " + this.designerCanvas.containerBoundingRect.height + "L" + r.x + " " + this.designerCanvas.containerBoundingRect.height + "L" + r.x + " 0" + " L0 0" +
23
+ "M" + r.x + " 0 L" + r.x + " " + r.y + "L" + this.designerCanvas.containerBoundingRect.width + " " + r.y + "L" + this.designerCanvas.containerBoundingRect.width + " 0" + "L" + r.x + " 0" +
24
+ "M" + r.x + " " + (r.y + r.height) + "L" + r.x + " " + this.designerCanvas.containerBoundingRect.height + "L" + this.designerCanvas.containerBoundingRect.width + " " + this.designerCanvas.containerBoundingRect.height + "L" + this.designerCanvas.containerBoundingRect.width + " " + (r.y + r.height) + "L" + r.x + " " + (r.y + r.height) +
25
+ "M" + (r.x + r.width) + " " + r.y + "L" + (r.x + r.width) + " " + (r.y + r.height) + "L" + this.designerCanvas.containerBoundingRect.width + " " + (r.y + r.height) + "L" + this.designerCanvas.containerBoundingRect.width + " " + (r.y) + "L" + (r.x + r.width) + " " + r.y;
26
26
  this._path.setAttribute("d", pathPoints);
27
27
  }
28
28
  dispose() {
@@ -13,8 +13,8 @@ export class GridExtension extends AbstractExtension {
13
13
  let xGap = 0;
14
14
  let yGap = 0;
15
15
  let rw = 0;
16
- let xOffset = itemRect.x - this.designerView.containerBoundingRect.x;
17
- let yOffset = itemRect.y - this.designerView.containerBoundingRect.y;
16
+ let xOffset = itemRect.x - this.designerCanvas.containerBoundingRect.x;
17
+ let yOffset = itemRect.y - this.designerCanvas.containerBoundingRect.y;
18
18
  let gridA = null;
19
19
  if (computedStyle.gridTemplateAreas && computedStyle.gridTemplateAreas !== 'none')
20
20
  gridA = computedStyle.gridTemplateAreas.split('\"');
@@ -7,4 +7,5 @@ export interface IExtensionManager {
7
7
  removeExtensions(designItems: IDesignItem[], extensionType?: ExtensionType): any;
8
8
  refreshExtension(designItem: IDesignItem, extensionType?: ExtensionType): any;
9
9
  refreshExtensions(designItems: IDesignItem[], extensionType?: ExtensionType): any;
10
+ refreshAllExtensions(designItems: IDesignItem[]): any;
10
11
  }
@@ -14,7 +14,7 @@ export class InvisibleDivExtension extends AbstractExtension {
14
14
  const top = Number.parseFloat(computedStyle.marginTop.replace('px', ''));
15
15
  const right = Number.parseFloat(computedStyle.marginRight.replace('px', ''));
16
16
  const bottom = Number.parseFloat(computedStyle.marginBottom.replace('px', ''));
17
- this._rect = this._drawRect(itemRect.x - this.designerView.containerBoundingRect.x - left, itemRect.y - this.designerView.containerBoundingRect.y - top, left + itemRect.width + right, top + itemRect.height + bottom, 'svg-invisible-div', this._rect);
17
+ this._rect = this._drawRect(itemRect.x - this.designerCanvas.containerBoundingRect.x - left, itemRect.y - this.designerCanvas.containerBoundingRect.y - top, left + itemRect.width + right, top + itemRect.height + bottom, 'svg-invisible-div', this._rect);
18
18
  }
19
19
  dispose() {
20
20
  this._removeAllOverlays();
@@ -10,8 +10,8 @@ export class MouseOverExtension extends AbstractExtension {
10
10
  }
11
11
  refresh() {
12
12
  let itemRect = this.extendedItem.element.getBoundingClientRect();
13
- const xOffset = itemRect.x - this.designerView.containerBoundingRect.x;
14
- const yOffset = itemRect.y - this.designerView.containerBoundingRect.y;
13
+ const xOffset = itemRect.x - this.designerCanvas.containerBoundingRect.x;
14
+ const yOffset = itemRect.y - this.designerCanvas.containerBoundingRect.y;
15
15
  this._rect = this._drawRect(xOffset - offset, yOffset - offset, itemRect.width + offset + offset, itemRect.height + offset + offset, 'svg-hover', this._rect);
16
16
  }
17
17
  dispose() {
@@ -63,10 +63,10 @@ export class PathExtension extends AbstractExtension {
63
63
  }
64
64
  }
65
65
  _drawPathCircle(x, y) {
66
- this._drawCircleOverlay(this._parentRect.x - this.designerView.containerBoundingRect.x + x, this._parentRect.y - this.designerView.containerBoundingRect.y + y, 3, 'svg-path');
66
+ this._drawCircle(this._parentRect.x - this.designerCanvas.containerBoundingRect.x + x, this._parentRect.y - this.designerCanvas.containerBoundingRect.y + y, 3, 'svg-path');
67
67
  }
68
68
  _drawPathLine(x1, y1, x2, y2) {
69
- this._drawLineOverlay(this._parentRect.x - this.designerView.containerBoundingRect.x + x1, this._parentRect.y - this.designerView.containerBoundingRect.y + y1, this._parentRect.x - this.designerView.containerBoundingRect.x + x2, this._parentRect.y - this.designerView.containerBoundingRect.y + y2, 'svg-path-line');
69
+ this._drawLine(this._parentRect.x - this.designerCanvas.containerBoundingRect.x + x1, this._parentRect.y - this.designerCanvas.containerBoundingRect.y + y1, this._parentRect.x - this.designerCanvas.containerBoundingRect.x + x2, this._parentRect.y - this.designerCanvas.containerBoundingRect.y + y2, 'svg-path-line');
70
70
  }
71
71
  refresh() {
72
72
  this._removeAllOverlays();
@@ -13,8 +13,8 @@ export class PositionExtension extends AbstractExtension {
13
13
  refresh() {
14
14
  const computedStyle = getComputedStyle(this.extendedItem.element);
15
15
  let itemRect = this.extendedItem.element.getBoundingClientRect();
16
- const xOffset = itemRect.x - this.designerView.containerBoundingRect.x;
17
- const yOffset = itemRect.y - this.designerView.containerBoundingRect.y;
16
+ const xOffset = itemRect.x - this.designerCanvas.containerBoundingRect.x;
17
+ const yOffset = itemRect.y - this.designerCanvas.containerBoundingRect.y;
18
18
  let left = Number.parseFloat(computedStyle.left.replace('px', ''));
19
19
  if (isNaN(left))
20
20
  left = 0;
@@ -34,10 +34,10 @@ export class PositionExtension extends AbstractExtension {
34
34
  tx = Number.parseFloat(transforms[4]);
35
35
  ty = Number.parseFloat(transforms[5].replace(')', ''));
36
36
  }
37
- this._line1 = this._drawLineOverlay(xOffset - left - tx, yOffset + itemRect.height / 2, xOffset, yOffset + itemRect.height / 2, 'svg-position', this._line1);
38
- this._line2 = this._drawLineOverlay(xOffset + itemRect.width / 2, yOffset - top - ty, xOffset + itemRect.width / 2, yOffset, 'svg-position', this._line2);
39
- this._line3 = this._drawLineOverlay(xOffset + itemRect.width, yOffset + itemRect.height / 2, xOffset + itemRect.width + right + -1 * tx, yOffset + itemRect.height / 2, 'svg-position', this._line3);
40
- this._line4 = this._drawLineOverlay(xOffset + itemRect.width / 2, yOffset + itemRect.height, xOffset + itemRect.width / 2, yOffset + itemRect.height + bottom + -1 * ty, 'svg-position', this._line4);
37
+ this._line1 = this._drawLine(xOffset - left - tx, yOffset + itemRect.height / 2, xOffset, yOffset + itemRect.height / 2, 'svg-position', this._line1);
38
+ this._line2 = this._drawLine(xOffset + itemRect.width / 2, yOffset - top - ty, xOffset + itemRect.width / 2, yOffset, 'svg-position', this._line2);
39
+ this._line3 = this._drawLine(xOffset + itemRect.width, yOffset + itemRect.height / 2, xOffset + itemRect.width + right + -1 * tx, yOffset + itemRect.height / 2, 'svg-position', this._line3);
40
+ this._line4 = this._drawLine(xOffset + itemRect.width / 2, yOffset + itemRect.height, xOffset + itemRect.width / 2, yOffset + itemRect.height + bottom + -1 * ty, 'svg-position', this._line4);
41
41
  }
42
42
  dispose() {
43
43
  this._removeAllOverlays();
@@ -12,8 +12,8 @@ export class PrimarySelectionDefaultExtension extends AbstractExtension {
12
12
  }
13
13
  refresh() {
14
14
  const boundRect = this.extendedItem.element.getBoundingClientRect();
15
- this._rect = this._drawRect(boundRect.x - this.designerView.containerBoundingRect.x, boundRect.y - this.designerView.containerBoundingRect.y - 16, 60, 15, 'svg-primary-selection-move', this._rect);
16
- this._text = this._drawText(this.extendedItem.name.substring(0, 10) + '…', boundRect.x - this.designerView.containerBoundingRect.x, boundRect.y - this.designerView.containerBoundingRect.y - 5, 'svg-text', this._text);
15
+ this._rect = this._drawRect(boundRect.x - this.designerCanvas.containerBoundingRect.x, boundRect.y - this.designerCanvas.containerBoundingRect.y - 16, 60, 15, 'svg-primary-selection-move', this._rect);
16
+ this._text = this._drawText(this.extendedItem.name.substring(0, 10) + '…', boundRect.x - this.designerCanvas.containerBoundingRect.x, boundRect.y - this.designerCanvas.containerBoundingRect.y - 5, 'svg-text', this._text);
17
17
  }
18
18
  dispose() {
19
19
  this._removeAllOverlays();
@@ -21,14 +21,14 @@ export class ResizeExtension extends AbstractExtension {
21
21
  }
22
22
  refresh() {
23
23
  const rect = this.extendedItem.element.getBoundingClientRect();
24
- this._circle1 = this._drawResizerOverlay(rect.x - this.designerView.containerBoundingRect.x, rect.y - this.designerView.containerBoundingRect.y, 'nw-resize', this._circle1);
25
- this._circle2 = this._drawResizerOverlay(rect.x + (rect.width / 2) - this.designerView.containerBoundingRect.x, rect.y - this.designerView.containerBoundingRect.y, 'n-resize', this._circle2);
26
- this._circle3 = this._drawResizerOverlay(rect.x + rect.width - this.designerView.containerBoundingRect.x, rect.y - this.designerView.containerBoundingRect.y, 'ne-resize', this._circle3);
27
- this._circle4 = this._drawResizerOverlay(rect.x - this.designerView.containerBoundingRect.x, rect.y + rect.height - this.designerView.containerBoundingRect.y, 'sw-resize', this._circle4);
28
- this._circle5 = this._drawResizerOverlay(rect.x + (rect.width / 2) - this.designerView.containerBoundingRect.x, rect.y + rect.height - this.designerView.containerBoundingRect.y, 's-resize', this._circle5);
29
- this._circle6 = this._drawResizerOverlay(rect.x + rect.width - this.designerView.containerBoundingRect.x, rect.y + rect.height - this.designerView.containerBoundingRect.y, 'se-resize', this._circle6);
30
- this._circle7 = this._drawResizerOverlay(rect.x - this.designerView.containerBoundingRect.x, rect.y + (rect.height / 2) - this.designerView.containerBoundingRect.y, 'w-resize', this._circle7);
31
- this._circle8 = this._drawResizerOverlay(rect.x + rect.width - this.designerView.containerBoundingRect.x, rect.y + (rect.height / 2) - this.designerView.containerBoundingRect.y, 'e-resize', this._circle8);
24
+ this._circle1 = this._drawResizerOverlay(rect.x - this.designerCanvas.containerBoundingRect.x, rect.y - this.designerCanvas.containerBoundingRect.y, 'nw-resize', this._circle1);
25
+ this._circle2 = this._drawResizerOverlay(rect.x + (rect.width / 2) - this.designerCanvas.containerBoundingRect.x, rect.y - this.designerCanvas.containerBoundingRect.y, 'n-resize', this._circle2);
26
+ this._circle3 = this._drawResizerOverlay(rect.x + rect.width - this.designerCanvas.containerBoundingRect.x, rect.y - this.designerCanvas.containerBoundingRect.y, 'ne-resize', this._circle3);
27
+ this._circle4 = this._drawResizerOverlay(rect.x - this.designerCanvas.containerBoundingRect.x, rect.y + rect.height - this.designerCanvas.containerBoundingRect.y, 'sw-resize', this._circle4);
28
+ this._circle5 = this._drawResizerOverlay(rect.x + (rect.width / 2) - this.designerCanvas.containerBoundingRect.x, rect.y + rect.height - this.designerCanvas.containerBoundingRect.y, 's-resize', this._circle5);
29
+ this._circle6 = this._drawResizerOverlay(rect.x + rect.width - this.designerCanvas.containerBoundingRect.x, rect.y + rect.height - this.designerCanvas.containerBoundingRect.y, 'se-resize', this._circle6);
30
+ this._circle7 = this._drawResizerOverlay(rect.x - this.designerCanvas.containerBoundingRect.x, rect.y + (rect.height / 2) - this.designerCanvas.containerBoundingRect.y, 'w-resize', this._circle7);
31
+ this._circle8 = this._drawResizerOverlay(rect.x + rect.width - this.designerCanvas.containerBoundingRect.x, rect.y + (rect.height / 2) - this.designerCanvas.containerBoundingRect.y, 'e-resize', this._circle8);
32
32
  if (rect.width < 12) {
33
33
  this._circle2.style.display = 'none';
34
34
  this._circle5.style.display = 'none';
@@ -47,7 +47,7 @@ export class ResizeExtension extends AbstractExtension {
47
47
  }
48
48
  }
49
49
  _drawResizerOverlay(x, y, cursor, oldCircle) {
50
- let circle = this._drawCircleOverlay(x, y, 3, 'svg-primary-resizer', oldCircle);
50
+ let circle = this._drawCircle(x, y, 3, 'svg-primary-resizer', oldCircle);
51
51
  if (!oldCircle) {
52
52
  circle.addEventListener(EventNames.PointerDown, event => this._pointerActionTypeResize(event, cursor));
53
53
  circle.addEventListener(EventNames.PointerMove, event => this._pointerActionTypeResize(event, cursor));
@@ -58,24 +58,24 @@ export class ResizeExtension extends AbstractExtension {
58
58
  }
59
59
  _pointerActionTypeResize(event, actionMode = 'se-resize') {
60
60
  event.stopPropagation();
61
- const currentPoint = this.designerView.getNormalizedEventCoordinates(event); //, this.extendedItem.element, event.type === 'pointerdown' ? null : this._initialPoint);
61
+ const currentPoint = this.designerCanvas.getNormalizedEventCoordinates(event); //, this.extendedItem.element, event.type === 'pointerdown' ? null : this._initialPoint);
62
62
  switch (event.type) {
63
63
  case EventNames.PointerDown:
64
64
  event.target.setPointerCapture(event.pointerId);
65
65
  this._initialPoint = currentPoint;
66
66
  this._initialSizes = [];
67
67
  this._actionModeStarted = actionMode;
68
- for (const designItem of this.designerView.instanceServiceContainer.selectionService.selectedElements) {
68
+ for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
69
69
  let rect = designItem.element.getBoundingClientRect();
70
70
  this._initialSizes.push({ width: rect.width, height: rect.height });
71
71
  }
72
- if (this.designerView.alignOnSnap)
73
- this.designerView.snapLines.calculateSnaplines(this.designerView.instanceServiceContainer.selectionService.selectedElements);
72
+ if (this.designerCanvas.alignOnSnap)
73
+ this.designerCanvas.snapLines.calculateSnaplines(this.designerCanvas.instanceServiceContainer.selectionService.selectedElements);
74
74
  break;
75
75
  case EventNames.PointerMove:
76
76
  if (this._initialPoint) {
77
- const containerService = this.designerView.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(this.extendedItem.parent));
78
- const diff = containerService.placePoint(event, this.designerView, this.extendedItem.parent, this._initialPoint, { x: 0, y: 0 }, currentPoint, this.designerView.instanceServiceContainer.selectionService.selectedElements);
77
+ const containerService = this.designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(this.extendedItem.parent));
78
+ const diff = containerService.placePoint(event, this.designerCanvas, this.extendedItem.parent, this._initialPoint, { x: 0, y: 0 }, currentPoint, this.designerCanvas.instanceServiceContainer.selectionService.selectedElements);
79
79
  let trackX = diff.x - this._initialPoint.x;
80
80
  let trackY = diff.y - this._initialPoint.y;
81
81
  let i = 0;
@@ -84,7 +84,7 @@ export class ResizeExtension extends AbstractExtension {
84
84
  this.extendedItem.element.style.width = this._initialSizes[i].width + trackX + 'px';
85
85
  this.extendedItem.element.style.height = this._initialSizes[i].height + trackY + 'px';
86
86
  if (this.resizeAllSelected) {
87
- for (const designItem of this.designerView.instanceServiceContainer.selectionService.selectedElements) {
87
+ for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
88
88
  if (designItem !== this.extendedItem) {
89
89
  designItem.element.style.width = this._initialSizes[i].width + trackX + 'px';
90
90
  designItem.element.style.height = this._initialSizes[i].height + trackY + 'px';
@@ -95,7 +95,7 @@ export class ResizeExtension extends AbstractExtension {
95
95
  case 's-resize':
96
96
  this.extendedItem.element.style.height = this._initialSizes[i].height + trackY + 'px';
97
97
  if (this.resizeAllSelected) {
98
- for (const designItem of this.designerView.instanceServiceContainer.selectionService.selectedElements) {
98
+ for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
99
99
  if (designItem !== this.extendedItem) {
100
100
  designItem.element.style.height = this._initialSizes[i].height + trackY + 'px';
101
101
  }
@@ -105,7 +105,7 @@ export class ResizeExtension extends AbstractExtension {
105
105
  case 'e-resize':
106
106
  this.extendedItem.element.style.width = this._initialSizes[i].width + trackX + 'px';
107
107
  if (this.resizeAllSelected) {
108
- for (const designItem of this.designerView.instanceServiceContainer.selectionService.selectedElements) {
108
+ for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
109
109
  if (designItem !== this.extendedItem) {
110
110
  designItem.element.style.width = this._initialSizes[i].width + trackX + 'px';
111
111
  }
@@ -114,16 +114,16 @@ export class ResizeExtension extends AbstractExtension {
114
114
  break;
115
115
  //for other resize modes we need a replacement
116
116
  }
117
- this.extensionManager.refreshExtensions(this.designerView.instanceServiceContainer.selectionService.selectedElements);
117
+ this.extensionManager.refreshExtensions(this.designerCanvas.instanceServiceContainer.selectionService.selectedElements);
118
118
  }
119
119
  break;
120
120
  case EventNames.PointerUp:
121
121
  event.target.releasePointerCapture(event.pointerId);
122
- let cg = this.extendedItem.openGroup("Resize Elements", this.designerView.instanceServiceContainer.selectionService.selectedElements);
122
+ let cg = this.extendedItem.openGroup("Resize Elements", this.designerCanvas.instanceServiceContainer.selectionService.selectedElements);
123
123
  this.extendedItem.setStyle('width', this.extendedItem.element.style.width);
124
124
  this.extendedItem.setStyle('height', this.extendedItem.element.style.height);
125
125
  if (this.resizeAllSelected) {
126
- for (const designItem of this.designerView.instanceServiceContainer.selectionService.selectedElements) {
126
+ for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
127
127
  if (designItem !== this.extendedItem) {
128
128
  designItem.setStyle('width', designItem.element.style.width);
129
129
  designItem.setStyle('height', designItem.element.style.height);
@@ -26,7 +26,7 @@ export class RotateExtension extends AbstractExtension {
26
26
  g.addEventListener(EventNames.PointerMove, event => this._pointerActionTypeRotate(event));
27
27
  g.addEventListener(EventNames.PointerUp, event => this._pointerActionTypeRotate(event));
28
28
  g.setAttribute('class', 'svg-primary-rotate');
29
- g.setAttribute('transform', 'translate(' + (itemRect.x - this.designerView.containerBoundingRect.x - 13) + ',' + (itemRect.y - this.designerView.containerBoundingRect.y - 8.5) + ')');
29
+ g.setAttribute('transform', 'translate(' + (itemRect.x - this.designerCanvas.containerBoundingRect.x - 13) + ',' + (itemRect.y - this.designerCanvas.containerBoundingRect.y - 8.5) + ')');
30
30
  this.overlayLayerView.addOverlay(g);
31
31
  this.overlays.push(g);
32
32
  }
@@ -48,10 +48,10 @@ export class RotateExtension extends AbstractExtension {
48
48
  var radians = Math.atan2(mouse_x - center_x, mouse_y - center_y);
49
49
  var degree = (radians * (180 / Math.PI) * -1) + 90;
50
50
  img.css('-moz-transform', 'rotate(' + degree + 'deg)');*/
51
- this.extensionManager.refreshExtensions(this.designerView.instanceServiceContainer.selectionService.selectedElements);
51
+ this.extensionManager.refreshExtensions(this.designerCanvas.instanceServiceContainer.selectionService.selectedElements);
52
52
  break;
53
53
  case EventNames.PointerUp:
54
- let cg = this.extendedItem.openGroup("Rotate Elements", this.designerView.instanceServiceContainer.selectionService.selectedElements);
54
+ let cg = this.extendedItem.openGroup("Rotate Elements", this.designerCanvas.instanceServiceContainer.selectionService.selectedElements);
55
55
  /*for (const designItem of this.instanceServiceContainer.selectionService.selectedElements) {
56
56
  designItem.setStyle('width', (<HTMLElement>designItem.element).style.width);
57
57
  designItem.setStyle('height', (<HTMLElement>designItem.element).style.height);
@@ -14,7 +14,7 @@ export class SelectionDefaultExtension extends AbstractExtension {
14
14
  const top = Number.parseFloat(computedStyle.marginTop.replace('px', ''));
15
15
  const right = Number.parseFloat(computedStyle.marginRight.replace('px', ''));
16
16
  const bottom = Number.parseFloat(computedStyle.marginBottom.replace('px', ''));
17
- this._rect = this._drawRect(itemRect.x - this.designerView.containerBoundingRect.x - left, itemRect.y - this.designerView.containerBoundingRect.y - top, left + itemRect.width + right, top + itemRect.height + bottom, 'svg-selection', this._rect);
17
+ this._rect = this._drawRect(itemRect.x - this.designerCanvas.containerBoundingRect.x - left, itemRect.y - this.designerCanvas.containerBoundingRect.y - top, left + itemRect.width + right, top + itemRect.height + bottom, 'svg-selection', this._rect);
18
18
  }
19
19
  dispose() {
20
20
  this._removeAllOverlays();
@@ -11,9 +11,9 @@ export class TransformOriginExtension extends AbstractExtension {
11
11
  const rect = this.extendedItem.element.getBoundingClientRect();
12
12
  const computed = getComputedStyle(this.extendedItem.element);
13
13
  const to = computed.transformOrigin.split(' ');
14
- this._circle = this._drawCircleOverlay(rect.x - this.designerView.containerBoundingRect.x + Number.parseFloat(to[0].replace('px', '')), rect.y - this.designerView.containerBoundingRect.y + Number.parseFloat(to[1].replace('px', '')), 5, 'svg-transform-origin');
14
+ this._circle = this._drawCircle(rect.x - this.designerCanvas.containerBoundingRect.x + Number.parseFloat(to[0].replace('px', '')), rect.y - this.designerCanvas.containerBoundingRect.y + Number.parseFloat(to[1].replace('px', '')), 5, 'svg-transform-origin');
15
15
  this._circle.setAttribute('style', 'cursor: pointer');
16
- this._circle2 = this._drawCircleOverlay(rect.x - this.designerView.containerBoundingRect.x + Number.parseFloat(to[0].replace('px', '')), rect.y - this.designerView.containerBoundingRect.y + Number.parseFloat(to[1].replace('px', '')), 1, 'svg-transform-origin');
16
+ this._circle2 = this._drawCircle(rect.x - this.designerCanvas.containerBoundingRect.x + Number.parseFloat(to[0].replace('px', '')), rect.y - this.designerCanvas.containerBoundingRect.y + Number.parseFloat(to[1].replace('px', '')), 1, 'svg-transform-origin');
17
17
  this._circle2.setAttribute('style', 'pointer-events: none');
18
18
  this._circle.addEventListener(EventNames.PointerDown, event => this.pointerEvent(event));
19
19
  this._circle.addEventListener(EventNames.PointerMove, event => this.pointerEvent(event));
@@ -33,10 +33,10 @@ export class TransformOriginExtension extends AbstractExtension {
33
33
  if (this._startPos && event.buttons > 0) {
34
34
  const dx = event.x - this._startPos.x;
35
35
  const dy = event.y - this._startPos.y;
36
- this._circle.setAttribute('cx', (rect.x - this.designerView.containerBoundingRect.x + Number.parseFloat(to[0].replace('px', '')) + dx));
37
- this._circle.setAttribute('cy', (rect.y - this.designerView.containerBoundingRect.y + Number.parseFloat(to[1].replace('px', '')) + dy));
38
- this._circle2.setAttribute('cx', (rect.x - this.designerView.containerBoundingRect.x + Number.parseFloat(to[0].replace('px', '')) + dx));
39
- this._circle2.setAttribute('cy', (rect.y - this.designerView.containerBoundingRect.y + Number.parseFloat(to[1].replace('px', '')) + dy));
36
+ this._circle.setAttribute('cx', (rect.x - this.designerCanvas.containerBoundingRect.x + Number.parseFloat(to[0].replace('px', '')) + dx));
37
+ this._circle.setAttribute('cy', (rect.y - this.designerCanvas.containerBoundingRect.y + Number.parseFloat(to[1].replace('px', '')) + dy));
38
+ this._circle2.setAttribute('cx', (rect.x - this.designerCanvas.containerBoundingRect.x + Number.parseFloat(to[0].replace('px', '')) + dx));
39
+ this._circle2.setAttribute('cy', (rect.y - this.designerCanvas.containerBoundingRect.y + Number.parseFloat(to[1].replace('px', '')) + dy));
40
40
  }
41
41
  break;
42
42
  case EventNames.PointerUp:
@@ -1,22 +1,11 @@
1
1
  import { IDesignItem } from "../../../../item/IDesignItem.js";
2
2
  import { IDesignerCanvas } from "../../IDesignerCanvas.js";
3
- import { OverlayLayerView } from "../../overlayLayerView.js";
4
3
  import { IExtensionManager } from "../IExtensionManger.js";
5
- import { OverlayLayer } from "../OverlayLayer.js";
6
4
  import { IDesignerPointerExtension } from "./IDesignerPointerExtension.js";
7
- export declare abstract class AbstractDesignerPointerExtension implements IDesignerPointerExtension {
8
- protected overlays: SVGGraphicsElement[];
9
- protected overlayLayerView: OverlayLayerView;
10
- protected extensionManager: IExtensionManager;
11
- protected designerView: IDesignerCanvas;
5
+ import { AbstractExtensionBase } from '../AbstractExtensionBase';
6
+ export declare abstract class AbstractDesignerPointerExtension extends AbstractExtensionBase implements IDesignerPointerExtension {
12
7
  protected extendedItem: IDesignItem;
13
- constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem?: IDesignItem);
14
- abstract extend(event: PointerEvent): any;
8
+ constructor(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas);
15
9
  abstract refresh(event: PointerEvent): any;
16
10
  abstract dispose(): any;
17
- protected _removeAllOverlays(): void;
18
- _drawLineOverlay(x1: number, y1: number, x2: number, y2: number, className?: string, line?: SVGLineElement, overlayLayer?: OverlayLayer): SVGLineElement;
19
- _drawCircleOverlay(x: number, y: number, radius: number, className?: string, circle?: SVGCircleElement, overlayLayer?: OverlayLayer): SVGCircleElement;
20
- _drawRect(x: number, y: number, w: number, h: number, className?: string, rect?: SVGRectElement, overlayLayer?: OverlayLayer): SVGRectElement;
21
- _drawText(text: string, x: number, y: number, className?: string, textEl?: SVGTextElement, overlayLayer?: OverlayLayer): SVGTextElement;
22
11
  }
@@ -1,82 +1,11 @@
1
+ import { AbstractExtensionBase } from '../AbstractExtensionBase';
1
2
  //todo:
2
3
  //move draw functions to overlay layer
3
4
  //implement designerpointerextension
4
5
  //create ruler
5
- export class AbstractDesignerPointerExtension {
6
- overlays = [];
7
- overlayLayerView;
8
- extensionManager;
9
- designerView;
6
+ export class AbstractDesignerPointerExtension extends AbstractExtensionBase {
10
7
  extendedItem;
11
- constructor(extensionManager, designerView, extendedItem) {
12
- this.extensionManager = extensionManager;
13
- this.designerView = designerView;
14
- this.extendedItem = extendedItem;
15
- this.overlayLayerView = designerView.overlayLayer;
16
- }
17
- _removeAllOverlays() {
18
- for (let o of this.overlays) {
19
- try {
20
- this.overlayLayerView.removeOverlay(o);
21
- }
22
- catch (err) {
23
- console.error(err);
24
- }
25
- }
26
- this.overlays = [];
27
- }
28
- _drawLineOverlay(x1, y1, x2, y2, className, line, overlayLayer) {
29
- if (!line) {
30
- line = document.createElementNS("http://www.w3.org/2000/svg", "line");
31
- this.overlayLayerView.addOverlay(line, overlayLayer);
32
- this.overlays.push(line);
33
- }
34
- line.setAttribute('x1', x1);
35
- line.setAttribute('y1', y1);
36
- line.setAttribute('x2', x2);
37
- line.setAttribute('y2', y2);
38
- if (className)
39
- line.setAttribute('class', className);
40
- return line;
41
- }
42
- _drawCircleOverlay(x, y, radius, className, circle, overlayLayer) {
43
- if (!circle) {
44
- circle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
45
- this.overlayLayerView.addOverlay(circle, overlayLayer);
46
- this.overlays.push(circle);
47
- }
48
- circle.setAttribute('cx', x);
49
- circle.setAttribute('cy', y);
50
- circle.setAttribute('r', radius);
51
- if (className)
52
- circle.setAttribute('class', className);
53
- return circle;
54
- }
55
- _drawRect(x, y, w, h, className, rect, overlayLayer) {
56
- if (!rect) {
57
- rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
58
- this.overlayLayerView.addOverlay(rect, overlayLayer);
59
- this.overlays.push(rect);
60
- }
61
- rect.setAttribute('x', x);
62
- rect.setAttribute('y', y);
63
- rect.setAttribute('width', w);
64
- rect.setAttribute('height', h);
65
- if (className)
66
- rect.setAttribute('class', className);
67
- return rect;
68
- }
69
- _drawText(text, x, y, className, textEl, overlayLayer) {
70
- if (!textEl) {
71
- textEl = document.createElementNS("http://www.w3.org/2000/svg", "text");
72
- this.overlayLayerView.addOverlay(textEl, overlayLayer);
73
- this.overlays.push(textEl);
74
- }
75
- textEl.setAttribute('x', x);
76
- textEl.setAttribute('y', y);
77
- textEl.textContent = text;
78
- if (className)
79
- textEl.setAttribute('class', className);
80
- return textEl;
8
+ constructor(extensionManager, designerCanvas) {
9
+ super(extensionManager, designerCanvas);
81
10
  }
82
11
  }
@@ -0,0 +1,13 @@
1
+ import { AbstractDesignerPointerExtension } from './AbstractDesignerPointerExtension';
2
+ export declare class CursorRectanglePointerExtension extends AbstractDesignerPointerExtension {
3
+ private _lineOffset;
4
+ private _lineLength;
5
+ private _line1;
6
+ private _line2;
7
+ private _line3;
8
+ private _line4;
9
+ extend(event: PointerEvent): void;
10
+ refresh(event: PointerEvent): void;
11
+ dispose(): void;
12
+ style: CSSStyleSheet;
13
+ }
@@ -0,0 +1,27 @@
1
+ import { css } from '@node-projects/base-custom-webcomponent';
2
+ import { OverlayLayer } from '../OverlayLayer.js';
3
+ import { AbstractDesignerPointerExtension } from './AbstractDesignerPointerExtension';
4
+ export class CursorRectanglePointerExtension extends AbstractDesignerPointerExtension {
5
+ _lineOffset = 5;
6
+ _lineLength = 10;
7
+ _line1;
8
+ _line2;
9
+ _line3;
10
+ _line4;
11
+ extend(event) {
12
+ this.refresh(event);
13
+ }
14
+ refresh(event) {
15
+ let mp = this.designerView.getNormalizedEventCoordinates(event);
16
+ 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);
17
+ 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);
18
+ 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);
19
+ 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);
20
+ }
21
+ dispose() {
22
+ super._removeAllOverlays();
23
+ }
24
+ style = css `
25
+ .svg-cursor-line { stroke: black; pointer-events: none }
26
+ `;
27
+ }
@@ -0,0 +1,13 @@
1
+ import { AbstractDesignerPointerExtension } from './AbstractDesignerPointerExtension';
2
+ export declare class CursorLinePointerExtension extends AbstractDesignerPointerExtension {
3
+ private _lineOffset;
4
+ private _lineLength;
5
+ private _circle;
6
+ private _line1;
7
+ private _line2;
8
+ private _line3;
9
+ private _line4;
10
+ refresh(event: PointerEvent): void;
11
+ dispose(): void;
12
+ style: CSSStyleSheet;
13
+ }
@@ -0,0 +1,26 @@
1
+ import { css } from '@node-projects/base-custom-webcomponent';
2
+ import { OverlayLayer } from '../OverlayLayer.js';
3
+ import { AbstractDesignerPointerExtension } from './AbstractDesignerPointerExtension';
4
+ export class CursorLinePointerExtension extends AbstractDesignerPointerExtension {
5
+ _lineOffset = 5;
6
+ _lineLength = 10;
7
+ _circle;
8
+ _line1;
9
+ _line2;
10
+ _line3;
11
+ _line4;
12
+ refresh(event) {
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);
19
+ }
20
+ dispose() {
21
+ super._removeAllOverlays();
22
+ }
23
+ style = css `
24
+ .svg-cursor-line { stroke: black; pointer-events: none }
25
+ `;
26
+ }
@@ -0,0 +1,7 @@
1
+ import { IDesignerCanvas } from '../../IDesignerCanvas.js';
2
+ import { IDesignerPointerExtension } from './IDesignerPointerExtension.js';
3
+ import { IDesignerPointerExtensionProvider } from './IDesignerPointerExtensionProvider.js';
4
+ export declare class CursorLinePointerExtensionProvider implements IDesignerPointerExtensionProvider {
5
+ getExtension(designerCanvas: IDesignerCanvas): IDesignerPointerExtension;
6
+ style: CSSStyleSheet;
7
+ }
@@ -0,0 +1,10 @@
1
+ import { css } from '@node-projects/base-custom-webcomponent';
2
+ import { CursorLinePointerExtension } from './CursorLinePointerExtension.js';
3
+ export class CursorLinePointerExtensionProvider {
4
+ getExtension(designerCanvas) {
5
+ return new CursorLinePointerExtension(designerCanvas.extensionManager, designerCanvas);
6
+ }
7
+ style = css `
8
+ .svg-cursor-line { stroke: black; pointer-events: none }
9
+ `;
10
+ }
@@ -1,7 +1,13 @@
1
1
  import { AbstractDesignerPointerExtension } from './AbstractDesignerPointerExtension';
2
2
  export declare class CursorRectanglePointerExtension extends AbstractDesignerPointerExtension {
3
- private _rect;
3
+ private _lineOffset;
4
+ private _lineLength;
5
+ private _line1;
6
+ private _line2;
7
+ private _line3;
8
+ private _line4;
4
9
  extend(event: PointerEvent): void;
5
10
  refresh(event: PointerEvent): void;
6
11
  dispose(): void;
12
+ style: CSSStyleSheet;
7
13
  }
@@ -1,20 +1,27 @@
1
+ import { css } from '@node-projects/base-custom-webcomponent';
1
2
  import { OverlayLayer } from '../OverlayLayer.js';
2
3
  import { AbstractDesignerPointerExtension } from './AbstractDesignerPointerExtension';
3
4
  export class CursorRectanglePointerExtension extends AbstractDesignerPointerExtension {
4
- _rect;
5
+ _lineOffset = 5;
6
+ _lineLength = 10;
7
+ _line1;
8
+ _line2;
9
+ _line3;
10
+ _line4;
5
11
  extend(event) {
6
- this._rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
7
- this.overlayLayerView.addOverlay(this._rect, OverlayLayer.Foregorund);
12
+ this.refresh(event);
8
13
  }
9
14
  refresh(event) {
10
15
  let mp = this.designerView.getNormalizedEventCoordinates(event);
11
- this._rect.setAttribute('class', 'svg-selector');
12
- this._rect.setAttribute('x', (mp.x - 5));
13
- this._rect.setAttribute('y', (mp.y - 5));
14
- this._rect.setAttribute('width', (10));
15
- this._rect.setAttribute('height', (10));
16
+ 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);
17
+ 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);
18
+ 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);
19
+ 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);
16
20
  }
17
21
  dispose() {
18
22
  super._removeAllOverlays();
19
23
  }
24
+ style = css `
25
+ .svg-cursor-line { stroke: black; pointer-events: none }
26
+ `;
20
27
  }
@@ -1,5 +1,5 @@
1
1
  import { IDisposable } from "../../../../../interfaces/IDisposable.js";
2
2
  export interface IDesignerPointerExtension extends IDisposable {
3
- extend(event: PointerEvent): any;
4
3
  refresh(event: PointerEvent): any;
4
+ style?: CSSStyleSheet;
5
5
  }
@@ -1,9 +1,6 @@
1
- import { IDesignItem } from "../../../../item/IDesignItem.js";
2
1
  import { IDesignerCanvas } from "../../IDesignerCanvas.js";
3
- import { IExtensionManager } from "../IExtensionManger.js";
4
2
  import { IDesignerPointerExtension } from "./IDesignerPointerExtension.js";
5
3
  export interface IDesignerPointerExtensionProvider {
6
- shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
7
- getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerPointerExtension;
4
+ getExtension(designerView: IDesignerCanvas): IDesignerPointerExtension;
8
5
  style?: CSSStyleSheet;
9
6
  }
@@ -17,4 +17,8 @@ export declare class OverlayLayerView extends BaseCustomWebComponentConstructorA
17
17
  removeAllNodesWithClass(className: string): void;
18
18
  createPoint(): DOMPointInit;
19
19
  elementFromPoint(x: number, y: number): Element;
20
+ drawLine(x1: number, y1: number, x2: number, y2: number, className?: string, line?: SVGLineElement, overlayLayer?: OverlayLayer): SVGLineElement;
21
+ drawCircle(x: number, y: number, radius: number, className?: string, circle?: SVGCircleElement, overlayLayer?: OverlayLayer): SVGCircleElement;
22
+ drawRect(x: number, y: number, w: number, h: number, className?: string, rect?: SVGRectElement, overlayLayer?: OverlayLayer): SVGRectElement;
23
+ drawText(text: string, x: number, y: number, className?: string, textEl?: SVGTextElement, overlayLayer?: OverlayLayer): SVGTextElement;
20
24
  }
@@ -47,6 +47,11 @@ export class OverlayLayerView extends BaseCustomWebComponentConstructorAppend {
47
47
  }
48
48
  }
49
49
  }
50
+ for (const ext of this._serviceContainer.designerPointerExtensions) {
51
+ if (ext.style) {
52
+ styles.push(ext.style);
53
+ }
54
+ }
50
55
  this.shadowRoot.adoptedStyleSheets = styles;
51
56
  }
52
57
  addOverlay(element, overlayLayer = OverlayLayer.Normal) {
@@ -85,5 +90,55 @@ export class OverlayLayerView extends BaseCustomWebComponentConstructorAppend {
85
90
  //@ts-ignore
86
91
  return this.shadowRoot.elementFromPoint(x, y);
87
92
  }
93
+ drawLine(x1, y1, x2, y2, className, line, overlayLayer) {
94
+ if (!line) {
95
+ line = document.createElementNS("http://www.w3.org/2000/svg", "line");
96
+ this.addOverlay(line, overlayLayer);
97
+ }
98
+ line.setAttribute('x1', x1);
99
+ line.setAttribute('y1', y1);
100
+ line.setAttribute('x2', x2);
101
+ line.setAttribute('y2', y2);
102
+ if (className)
103
+ line.setAttribute('class', className);
104
+ return line;
105
+ }
106
+ drawCircle(x, y, radius, className, circle, overlayLayer) {
107
+ if (!circle) {
108
+ circle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
109
+ this.addOverlay(circle, overlayLayer);
110
+ }
111
+ circle.setAttribute('cx', x);
112
+ circle.setAttribute('cy', y);
113
+ circle.setAttribute('r', radius);
114
+ if (className)
115
+ circle.setAttribute('class', className);
116
+ return circle;
117
+ }
118
+ drawRect(x, y, w, h, className, rect, overlayLayer) {
119
+ if (!rect) {
120
+ rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
121
+ this.addOverlay(rect, overlayLayer);
122
+ }
123
+ rect.setAttribute('x', x);
124
+ rect.setAttribute('y', y);
125
+ rect.setAttribute('width', w);
126
+ rect.setAttribute('height', h);
127
+ if (className)
128
+ rect.setAttribute('class', className);
129
+ return rect;
130
+ }
131
+ drawText(text, x, y, className, textEl, overlayLayer) {
132
+ if (!textEl) {
133
+ textEl = document.createElementNS("http://www.w3.org/2000/svg", "text");
134
+ this.addOverlay(textEl, overlayLayer);
135
+ }
136
+ textEl.setAttribute('x', x);
137
+ textEl.setAttribute('y', y);
138
+ textEl.textContent = text;
139
+ if (className)
140
+ textEl.setAttribute('class', className);
141
+ return textEl;
142
+ }
88
143
  }
89
144
  customElements.define(OverlayLayerView.is, OverlayLayerView);
package/dist/index.d.ts CHANGED
@@ -135,6 +135,11 @@ export * from "./elements/widgets/designerView/extensions/contextMenu/CopyPasteC
135
135
  export * from "./elements/widgets/designerView/extensions/contextMenu/ItemsBelowContextMenu.js";
136
136
  export * from "./elements/widgets/designerView/extensions/contextMenu/MultipleItemsSelectedContextMenu.js";
137
137
  export * from "./elements/widgets/designerView/extensions/contextMenu/ZMoveContextMenu.js";
138
+ export type { IDesignerPointerExtension } from "./elements/widgets/designerView/extensions/pointerExtensions/IDesignerPointerExtension.js";
139
+ export type { IDesignerPointerExtensionProvider } from "./elements/widgets/designerView/extensions/pointerExtensions/IDesignerPointerExtensionProvider.js";
140
+ export * from "./elements/widgets/designerView/extensions/pointerExtensions/AbstractDesignerPointerExtension.js";
141
+ export * from "./elements/widgets/designerView/extensions/pointerExtensions/CursorLinePointerExtension.js";
142
+ export * from "./elements/widgets/designerView/extensions/pointerExtensions/CursorLinePointerExtensionProvider.js";
138
143
  export * from "./elements/widgets/demoView/demoView.js";
139
144
  export * from "./elements/widgets/paletteView/paletteElements.js";
140
145
  export * from "./elements/widgets/paletteView/paletteView.js";
package/dist/index.js CHANGED
@@ -98,6 +98,9 @@ export * from "./elements/widgets/designerView/extensions/contextMenu/CopyPasteC
98
98
  export * from "./elements/widgets/designerView/extensions/contextMenu/ItemsBelowContextMenu.js";
99
99
  export * from "./elements/widgets/designerView/extensions/contextMenu/MultipleItemsSelectedContextMenu.js";
100
100
  export * from "./elements/widgets/designerView/extensions/contextMenu/ZMoveContextMenu.js";
101
+ export * from "./elements/widgets/designerView/extensions/pointerExtensions/AbstractDesignerPointerExtension.js";
102
+ export * from "./elements/widgets/designerView/extensions/pointerExtensions/CursorLinePointerExtension.js";
103
+ export * from "./elements/widgets/designerView/extensions/pointerExtensions/CursorLinePointerExtensionProvider.js";
101
104
  export * from "./elements/widgets/demoView/demoView.js";
102
105
  export * from "./elements/widgets/paletteView/paletteElements.js";
103
106
  export * from "./elements/widgets/paletteView/paletteView.js";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "description": "A UI designer for Polymer apps",
3
3
  "name": "@node-projects/web-component-designer",
4
- "version": "0.0.38",
4
+ "version": "0.0.39",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "",