@node-projects/web-component-designer 0.0.83 → 0.0.84

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.
@@ -9,7 +9,7 @@ import { DefaultPlacementService } from './placementService/DefaultPlacementServ
9
9
  import { DefaultHtmlParserService } from './htmlParserService/DefaultHtmlParserService.js';
10
10
  import { Lit2PropertiesService } from './propertiesService/services/Lit2PropertiesService.js';
11
11
  import { ExtensionType } from '../widgets/designerView/extensions/ExtensionType.js';
12
- import { PrimarySelectionDefaultExtensionProvider } from '../widgets/designerView/extensions/PrimarySelectionDefaultExtensionProvider.js';
12
+ import { ElementDragTitleExtensionProvider } from '../widgets/designerView/extensions/ElementDragTitleExtensionProvider.js';
13
13
  import { GridExtensionProvider } from '../widgets/designerView/extensions/GridExtensionProvider.js';
14
14
  import { TransformOriginExtensionProvider } from '../widgets/designerView/extensions/TransformOriginExtensionProvider.js';
15
15
  import { CanvasExtensionProvider } from '../widgets/designerView/extensions/CanvasExtensionProvider.js';
@@ -79,10 +79,11 @@ export function createDefaultServiceContainer() {
79
79
  serviceContainer.designerExtensions.set(ExtensionType.Permanent, [
80
80
  // new ResizeExtensionProvider(false),
81
81
  new InvisibleDivExtensionProvider(),
82
- new IframeExtensionProvider()
82
+ new IframeExtensionProvider(),
83
+ // new ElementDragTitleExtensionProvider(),
83
84
  ]);
84
85
  serviceContainer.designerExtensions.set(ExtensionType.PrimarySelection, [
85
- new PrimarySelectionDefaultExtensionProvider(),
86
+ new ElementDragTitleExtensionProvider(),
86
87
  new GridExtensionProvider(),
87
88
  new TransformOriginExtensionProvider(),
88
89
  new CanvasExtensionProvider(),
@@ -632,7 +632,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
632
632
  return currentElement;
633
633
  }
634
634
  _rect;
635
- _pointerEventHandler(event) {
635
+ _pointerEventHandler(event, forceElement = null) {
636
636
  this._fillCalculationrects();
637
637
  if (this._pointerextensions) {
638
638
  for (let pe of this._pointerextensions)
@@ -642,9 +642,14 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
642
642
  return;
643
643
  if (event.buttons == 2)
644
644
  return;
645
- let currentElement = this.serviceContainer.elementAtPointService.getElementAtPoint(this, { x: event.x, y: event.y });
646
- if (currentElement === this._outercanvas2 || currentElement === this.overlayLayer || !currentElement) {
647
- currentElement = this._canvas;
645
+ let currentElement;
646
+ if (forceElement)
647
+ currentElement = forceElement;
648
+ else {
649
+ currentElement = this.serviceContainer.elementAtPointService.getElementAtPoint(this, { x: event.x, y: event.y });
650
+ if (currentElement === this._outercanvas2 || currentElement === this.overlayLayer || !currentElement) {
651
+ currentElement = this._canvas;
652
+ }
648
653
  } /* else {
649
654
  if (!DesignerCanvas.hasOrIsParent(currentElement, this._canvas))
650
655
  return;
@@ -0,0 +1,14 @@
1
+ import { IDesignItem } from "../../../item/IDesignItem";
2
+ import { IDesignerCanvas } from "../IDesignerCanvas";
3
+ import { AbstractExtension } from './AbstractExtension';
4
+ import { IExtensionManager } from "./IExtensionManger";
5
+ export declare class ElementDragTitleExtension extends AbstractExtension {
6
+ private _rect;
7
+ private _text;
8
+ constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
9
+ extend(): void;
10
+ _drawMoveOverlay(itemRect: DOMRect): void;
11
+ refresh(): void;
12
+ _pointerEvent(event: PointerEvent): void;
13
+ dispose(): void;
14
+ }
@@ -0,0 +1,38 @@
1
+ import { AbstractExtension } from './AbstractExtension';
2
+ export class ElementDragTitleExtension extends AbstractExtension {
3
+ _rect;
4
+ _text;
5
+ constructor(extensionManager, designerView, extendedItem) {
6
+ super(extensionManager, designerView, extendedItem);
7
+ }
8
+ extend() {
9
+ const boundRect = this.extendedItem.element.getBoundingClientRect();
10
+ this._rect = this._drawRect((boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 16, 60, 15, 'svg-primary-selection-move', this._rect);
11
+ this._text = this._drawText(this.extendedItem.name.substring(0, 10) + '…', (boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 5, 'svg-text-primary', this._text);
12
+ this._rect.addEventListener('pointerdown', (e) => this._pointerEvent(e));
13
+ this._rect.addEventListener('pointermove', (e) => this._pointerEvent(e));
14
+ this._rect.addEventListener('pointerup', (e) => this._pointerEvent(e));
15
+ }
16
+ _drawMoveOverlay(itemRect) {
17
+ }
18
+ refresh() {
19
+ const boundRect = this.extendedItem.element.getBoundingClientRect();
20
+ const xr = (boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor;
21
+ const yr = (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 16;
22
+ this._rect.setAttribute('x', xr);
23
+ this._rect.setAttribute('y', yr);
24
+ const x = (boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor;
25
+ const y = (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 5;
26
+ this._text.setAttribute('x', x);
27
+ this._text.setAttribute('y', y);
28
+ }
29
+ _pointerEvent(event) {
30
+ event.preventDefault();
31
+ event.stopPropagation();
32
+ //@ts-ignore
33
+ this.designerCanvas._pointerEventHandlerBound(event, this.extendedItem.element);
34
+ }
35
+ dispose() {
36
+ this._removeAllOverlays();
37
+ }
38
+ }
@@ -0,0 +1,10 @@
1
+ import { IDesignerExtensionProvider } from "./IDesignerExtensionProvider";
2
+ import { IDesignItem } from "../../../item/IDesignItem";
3
+ import { IDesignerCanvas } from "../IDesignerCanvas";
4
+ import { IDesignerExtension } from "./IDesignerExtension";
5
+ import { IExtensionManager } from "./IExtensionManger";
6
+ export declare class ElementDragTitleExtensionProvider implements IDesignerExtensionProvider {
7
+ shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
8
+ getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
9
+ readonly style: CSSStyleSheet;
10
+ }
@@ -0,0 +1,13 @@
1
+ import { ElementDragTitleExtension } from "./ElementDragTitleExtension";
2
+ import { css } from "@node-projects/base-custom-webcomponent";
3
+ export class ElementDragTitleExtensionProvider {
4
+ shouldExtend(extensionManager, designerView, designItem) {
5
+ return true;
6
+ }
7
+ getExtension(extensionManager, designerView, designItem) {
8
+ return new ElementDragTitleExtension(extensionManager, designerView, designItem);
9
+ }
10
+ style = css `
11
+ .svg-text-primary { stroke: none; fill: white; stroke-width: 1; font-size: 10px; font-family: monospace; }
12
+ `;
13
+ }
@@ -6,9 +6,9 @@ export class IframeExtension extends AbstractExtension {
6
6
  extend() {
7
7
  // forward events to designer, so iframe is selectable via click
8
8
  let iframe = this.extendedItem.element;
9
- iframe.contentWindow.onpointerdown = (e) => this._pointerEvent(e);
10
- iframe.contentWindow.onpointermove = (e) => this._pointerEvent(e);
11
- iframe.contentWindow.onpointerup = (e) => this._pointerEvent(e);
9
+ iframe.contentWindow.addEventListener('pointerdown', (e) => this._pointerEvent(e), { capture: true });
10
+ iframe.contentWindow.addEventListener('pointermove', (e) => this._pointerEvent(e), { capture: true });
11
+ iframe.contentWindow.addEventListener('pointerup', (e) => this._pointerEvent(e), { capture: true });
12
12
  }
13
13
  _pointerEvent(event) {
14
14
  const rect = this.extendedItem.element.getBoundingClientRect();
@@ -0,0 +1,13 @@
1
+ import { IDesignItem } from "../../../item/IDesignItem";
2
+ import { IDesignerCanvas } from "../IDesignerCanvas";
3
+ import { AbstractExtension } from './AbstractExtension';
4
+ import { IExtensionManager } from "./IExtensionManger";
5
+ export declare class PrimarySelectionDefaultExtension extends AbstractExtension {
6
+ private _rect;
7
+ private _text;
8
+ constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
9
+ extend(): void;
10
+ _drawMoveOverlay(itemRect: DOMRect): void;
11
+ refresh(): void;
12
+ dispose(): void;
13
+ }
@@ -0,0 +1,21 @@
1
+ import { AbstractExtension } from './AbstractExtension';
2
+ export class PrimarySelectionDefaultExtension extends AbstractExtension {
3
+ _rect;
4
+ _text;
5
+ constructor(extensionManager, designerView, extendedItem) {
6
+ super(extensionManager, designerView, extendedItem);
7
+ }
8
+ extend() {
9
+ this.refresh();
10
+ }
11
+ _drawMoveOverlay(itemRect) {
12
+ }
13
+ refresh() {
14
+ const boundRect = this.extendedItem.element.getBoundingClientRect();
15
+ this._rect = this._drawRect((boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 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) / this.designerCanvas.scaleFactor, (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 5, 'svg-text-primary', this._text);
17
+ }
18
+ dispose() {
19
+ this._removeAllOverlays();
20
+ }
21
+ }
@@ -0,0 +1,10 @@
1
+ import { IDesignerExtensionProvider } from "./IDesignerExtensionProvider";
2
+ import { IDesignItem } from "../../../item/IDesignItem";
3
+ import { IDesignerCanvas } from "../IDesignerCanvas";
4
+ import { IDesignerExtension } from "./IDesignerExtension";
5
+ import { IExtensionManager } from "./IExtensionManger";
6
+ export declare class PrimarySelectionDefaultExtensionProvider implements IDesignerExtensionProvider {
7
+ shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
8
+ getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
9
+ readonly style: CSSStyleSheet;
10
+ }
@@ -0,0 +1,13 @@
1
+ import { PrimarySelectionDefaultExtension } from "./PrimarySelectionDefaultExtension";
2
+ import { css } from "@node-projects/base-custom-webcomponent";
3
+ export class PrimarySelectionDefaultExtensionProvider {
4
+ shouldExtend(extensionManager, designerView, designItem) {
5
+ return true;
6
+ }
7
+ getExtension(extensionManager, designerView, designItem) {
8
+ return new PrimarySelectionDefaultExtension(extensionManager, designerView, designItem);
9
+ }
10
+ style = css `
11
+ .svg-text-primary { stroke: none; fill: white; stroke-width: 1; font-size: 10px; font-family: monospace; }
12
+ `;
13
+ }
@@ -22,35 +22,36 @@ export class TransformOriginExtension extends AbstractExtension {
22
22
  pointerEvent(event) {
23
23
  event.stopPropagation();
24
24
  const rect = this.extendedItem.element.getBoundingClientRect();
25
+ const rectNr = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element); //.getBoundingClientRect();
25
26
  const computed = getComputedStyle(this.extendedItem.element);
26
27
  const to = computed.transformOrigin.split(' ');
28
+ const normalized = this.designerCanvas.getNormalizedEventCoordinates(event);
27
29
  switch (event.type) {
28
30
  case EventNames.PointerDown:
29
31
  event.target.setPointerCapture(event.pointerId);
30
- this._startPos = { x: event.x, y: event.y };
32
+ this._startPos = { x: normalized.x, y: normalized.y };
31
33
  break;
32
34
  case EventNames.PointerMove:
33
35
  if (this._startPos && event.buttons > 0) {
34
- const dx = event.x - this._startPos.x;
35
- const dy = event.y - this._startPos.y;
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));
36
+ const dx = normalized.x - this._startPos.x;
37
+ const dy = normalized.y - this._startPos.y;
38
+ this._circle.setAttribute('cx', ((rect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor + Number.parseFloat(to[0].replace('px', '')) + dx));
39
+ this._circle.setAttribute('cy', ((rect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor + Number.parseFloat(to[1].replace('px', '')) + dy));
40
+ this._circle2.setAttribute('cx', ((rect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor + Number.parseFloat(to[0].replace('px', '')) + dx));
41
+ this._circle2.setAttribute('cy', ((rect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor + Number.parseFloat(to[1].replace('px', '')) + dy));
40
42
  }
41
43
  break;
42
44
  case EventNames.PointerUp:
43
45
  event.target.releasePointerCapture(event.pointerId);
44
46
  if (this._startPos) {
45
- const dx = event.x - this._startPos.x;
46
- const dy = event.y - this._startPos.y;
47
+ const dx = normalized.x - this._startPos.x;
48
+ const dy = normalized.y - this._startPos.y;
47
49
  const x = Number.parseFloat(to[0].replace('px', ''));
48
50
  const y = Number.parseFloat(to[1].replace('px', ''));
49
51
  const newX = (dx + x);
50
52
  const newY = (dy + y);
51
- const przX = Math.round(newX / rect.width * 10000) / 100; //round to 2 decimal places
52
- const przY = Math.round(newY / rect.height * 10000) / 100;
53
- //this.extendedItem.setStyle('transform-origin',newX + 'px ' + newY + 'px');
53
+ const przX = Math.round(newX / rectNr.width * 10000) / 100;
54
+ const przY = Math.round(newY / rectNr.height * 10000) / 100;
54
55
  this.extendedItem.setStyle('transform-origin', przX + '% ' + przY + '%');
55
56
  this.refresh();
56
57
  this._startPos = null;
package/dist/index.d.ts CHANGED
@@ -132,6 +132,8 @@ export * from "./elements/widgets/designerView/extensions/GrayOutExtension.js";
132
132
  export * from "./elements/widgets/designerView/extensions/GrayOutExtensionProvider.js";
133
133
  export * from "./elements/widgets/designerView/extensions/GridExtension.js";
134
134
  export * from "./elements/widgets/designerView/extensions/GridExtensionProvider.js";
135
+ export * from "./elements/widgets/designerView/extensions/IframeExtension.js";
136
+ export * from "./elements/widgets/designerView/extensions/IframeExtensionProvider.js";
135
137
  export * from "./elements/widgets/designerView/extensions/InvisibleDivExtension.js";
136
138
  export * from "./elements/widgets/designerView/extensions/InvisibleDivExtensionProvider.js";
137
139
  export * from "./elements/widgets/designerView/extensions/MouseOverExtension.js";
@@ -140,8 +142,8 @@ export * from "./elements/widgets/designerView/extensions/PathExtension.js";
140
142
  export * from "./elements/widgets/designerView/extensions/PathExtensionProvider.js";
141
143
  export * from "./elements/widgets/designerView/extensions/PositionExtension.js";
142
144
  export * from "./elements/widgets/designerView/extensions/PositionExtensionProvider.js";
143
- export * from "./elements/widgets/designerView/extensions/PrimarySelectionDefaultExtension.js";
144
- export * from "./elements/widgets/designerView/extensions/PrimarySelectionDefaultExtensionProvider.js";
145
+ export * from "./elements/widgets/designerView/extensions/ElementDragTitleExtension.js";
146
+ export * from "./elements/widgets/designerView/extensions/ElementDragTitleExtensionProvider.js";
145
147
  export * from "./elements/widgets/designerView/extensions/ResizeExtension.js";
146
148
  export * from "./elements/widgets/designerView/extensions/ResizeExtensionProvider.js";
147
149
  export * from "./elements/widgets/designerView/extensions/RotateExtension.js";
package/dist/index.js CHANGED
@@ -92,6 +92,8 @@ export * from "./elements/widgets/designerView/extensions/GrayOutExtension.js";
92
92
  export * from "./elements/widgets/designerView/extensions/GrayOutExtensionProvider.js";
93
93
  export * from "./elements/widgets/designerView/extensions/GridExtension.js";
94
94
  export * from "./elements/widgets/designerView/extensions/GridExtensionProvider.js";
95
+ export * from "./elements/widgets/designerView/extensions/IframeExtension.js";
96
+ export * from "./elements/widgets/designerView/extensions/IframeExtensionProvider.js";
95
97
  export * from "./elements/widgets/designerView/extensions/InvisibleDivExtension.js";
96
98
  export * from "./elements/widgets/designerView/extensions/InvisibleDivExtensionProvider.js";
97
99
  export * from "./elements/widgets/designerView/extensions/MouseOverExtension.js";
@@ -100,8 +102,8 @@ export * from "./elements/widgets/designerView/extensions/PathExtension.js";
100
102
  export * from "./elements/widgets/designerView/extensions/PathExtensionProvider.js";
101
103
  export * from "./elements/widgets/designerView/extensions/PositionExtension.js";
102
104
  export * from "./elements/widgets/designerView/extensions/PositionExtensionProvider.js";
103
- export * from "./elements/widgets/designerView/extensions/PrimarySelectionDefaultExtension.js";
104
- export * from "./elements/widgets/designerView/extensions/PrimarySelectionDefaultExtensionProvider.js";
105
+ export * from "./elements/widgets/designerView/extensions/ElementDragTitleExtension.js";
106
+ export * from "./elements/widgets/designerView/extensions/ElementDragTitleExtensionProvider.js";
105
107
  export * from "./elements/widgets/designerView/extensions/ResizeExtension.js";
106
108
  export * from "./elements/widgets/designerView/extensions/ResizeExtensionProvider.js";
107
109
  export * from "./elements/widgets/designerView/extensions/RotateExtension.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.83",
4
+ "version": "0.0.84",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "",