@node-projects/web-component-designer 0.1.127 → 0.1.129

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 (29) hide show
  1. package/dist/elements/documentContainer.js +34 -24
  2. package/dist/elements/services/DefaultServiceBootstrap.js +4 -2
  3. package/dist/elements/services/placementService/AbsolutePlacementService.d.ts +6 -6
  4. package/dist/elements/services/placementService/AbsolutePlacementService.js +22 -20
  5. package/dist/elements/services/placementService/DefaultPlacementService.d.ts +3 -2
  6. package/dist/elements/services/placementService/FlexBoxPlacementService.d.ts +5 -5
  7. package/dist/elements/services/placementService/FlexBoxPlacementService.js +8 -8
  8. package/dist/elements/services/placementService/GridPlacementService.d.ts +5 -5
  9. package/dist/elements/services/placementService/GridPlacementService.js +9 -9
  10. package/dist/elements/services/placementService/IPlacementService.d.ts +5 -5
  11. package/dist/elements/services/propertiesService/services/AbstractPropertiesService.js +6 -4
  12. package/dist/elements/widgets/designerView/IDesignerCanvas.d.ts +0 -1
  13. package/dist/elements/widgets/designerView/designerCanvas.d.ts +0 -1
  14. package/dist/elements/widgets/designerView/designerCanvas.js +2 -6
  15. package/dist/elements/widgets/designerView/extensions/MarginExtension.d.ts +10 -0
  16. package/dist/elements/widgets/designerView/extensions/MarginExtension.js +32 -0
  17. package/dist/elements/widgets/designerView/extensions/MarginExtensionProvider.d.ts +10 -0
  18. package/dist/elements/widgets/designerView/extensions/MarginExtensionProvider.js +16 -0
  19. package/dist/elements/widgets/designerView/extensions/PaddingExtension.d.ts +10 -0
  20. package/dist/elements/widgets/designerView/extensions/PaddingExtension.js +36 -0
  21. package/dist/elements/widgets/designerView/extensions/PaddingExtensionProvider.d.ts +10 -0
  22. package/dist/elements/widgets/designerView/extensions/PaddingExtensionProvider.js +16 -0
  23. package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +37 -31
  24. package/dist/elements/widgets/designerView/extensions/block/BlockToolbarExtensionProvider.js +1 -1
  25. package/dist/elements/widgets/designerView/overlayLayerView.d.ts +0 -1
  26. package/dist/elements/widgets/designerView/overlayLayerView.js +0 -4
  27. package/dist/index.d.ts +10 -2
  28. package/dist/index.js +10 -2
  29. package/package.json +1 -1
@@ -4,6 +4,13 @@ import { DesignerView } from './widgets/designerView/designerView.js';
4
4
  import { SimpleSplitView } from './controls/SimpleSplitView.js';
5
5
  import { sleep } from "./helper/Helper.js";
6
6
  import { ExtensionType } from "./widgets/designerView/extensions/ExtensionType.js";
7
+ var tabIndex;
8
+ (function (tabIndex) {
9
+ tabIndex[tabIndex["designer"] = 0] = "designer";
10
+ tabIndex[tabIndex["code"] = 1] = "code";
11
+ tabIndex[tabIndex["split"] = 2] = "split";
12
+ tabIndex[tabIndex["preview"] = 3] = "preview";
13
+ })(tabIndex || (tabIndex = {}));
7
14
  export class DocumentContainer extends BaseCustomWebComponentLazyAppend {
8
15
  designerView;
9
16
  codeView;
@@ -90,8 +97,8 @@ export class DocumentContainer extends BaseCustomWebComponentLazyAppend {
90
97
  this._codeDiv.appendChild(this.codeView);
91
98
  this.codeView.onTextChanged.on(text => {
92
99
  if (!this._disableChangeNotificationDesigner) {
93
- this._disableChangeNotificationEditor = true;
94
- if (this._tabControl.selectedIndex === 2) {
100
+ if (this._tabControl.selectedIndex === tabIndex.code || this._tabControl.selectedIndex === tabIndex.split) {
101
+ this._disableChangeNotificationEditor = true;
95
102
  this._content = text;
96
103
  this.refreshInSplitViewDebounced();
97
104
  }
@@ -106,18 +113,22 @@ export class DocumentContainer extends BaseCustomWebComponentLazyAppend {
106
113
  this._tabControl.appendChild(this.demoView);
107
114
  queueMicrotask(() => {
108
115
  this.shadowRoot.appendChild(div);
109
- this._tabControl.selectedIndex = 0;
116
+ this._tabControl.selectedIndex = tabIndex.designer;
110
117
  });
111
118
  }
112
119
  async refreshInSplitView() {
113
- await this.updateDesignerHtml();
120
+ try {
121
+ await this.updateDesignerHtml();
122
+ }
123
+ catch (err) {
124
+ console.error(err);
125
+ }
114
126
  this._disableChangeNotificationEditor = false;
115
127
  }
116
128
  designerSelectionChanged(e) {
117
- if (this._tabControl.selectedIndex === 2) {
129
+ if (this._tabControl.selectedIndex === tabIndex.split) {
118
130
  let primarySelection = this.instanceServiceContainer.selectionService.primarySelection;
119
131
  if (primarySelection) {
120
- //this._content = this.designerView.getHTML();
121
132
  if (this.designerView.instanceServiceContainer.designItemDocumentPositionService) {
122
133
  this._selectionPosition = this.designerView.instanceServiceContainer.designItemDocumentPositionService.getPosition(primarySelection);
123
134
  if (this._selectionPosition)
@@ -131,7 +142,7 @@ export class DocumentContainer extends BaseCustomWebComponentLazyAppend {
131
142
  this.onContentChanged.emit();
132
143
  if (!this._disableChangeNotificationEditor) {
133
144
  this._disableChangeNotificationDesigner = true;
134
- if (this._tabControl.selectedIndex === 2) {
145
+ if (this._tabControl.selectedIndex === tabIndex.code || this._tabControl.selectedIndex === tabIndex.split) {
135
146
  let primarySelection = this.instanceServiceContainer.selectionService.primarySelection;
136
147
  this._content = this.designerView.getHTML();
137
148
  this.codeView.update(this._content, this.designerView.instanceServiceContainer);
@@ -152,23 +163,23 @@ export class DocumentContainer extends BaseCustomWebComponentLazyAppend {
152
163
  this.demoView.dispose();
153
164
  }
154
165
  executeCommand(command) {
155
- if (this._tabControl.selectedIndex === 0 || this._tabControl.selectedIndex === 2)
166
+ if (this._tabControl.selectedIndex === tabIndex.designer || this._tabControl.selectedIndex === tabIndex.split)
156
167
  this.designerView.executeCommand(command);
157
- else if (this._tabControl.selectedIndex === 1)
168
+ else if (this._tabControl.selectedIndex === tabIndex.code)
158
169
  this.codeView.executeCommand(command);
159
- else if (this._tabControl.selectedIndex === 3)
170
+ else if (this._tabControl.selectedIndex === tabIndex.preview)
160
171
  this.demoView.executeCommand(command);
161
172
  }
162
173
  canExecuteCommand(command) {
163
- if (this._tabControl.selectedIndex === 0 || this._tabControl.selectedIndex === 2) {
174
+ if (this._tabControl.selectedIndex === tabIndex.designer || this._tabControl.selectedIndex === tabIndex.split) {
164
175
  if (this.designerView?.canExecuteCommand)
165
176
  return this.designerView.canExecuteCommand(command);
166
177
  }
167
- else if (this._tabControl.selectedIndex === 1) {
178
+ else if (this._tabControl.selectedIndex === tabIndex.code) {
168
179
  if (this.codeView?.canExecuteCommand)
169
180
  return this.codeView.canExecuteCommand(command);
170
181
  }
171
- else if (this._tabControl.selectedIndex === 3) {
182
+ else if (this._tabControl.selectedIndex === tabIndex.preview) {
172
183
  if (this.demoView?.canExecuteCommand)
173
184
  return this.demoView.canExecuteCommand(command);
174
185
  }
@@ -177,21 +188,21 @@ export class DocumentContainer extends BaseCustomWebComponentLazyAppend {
177
188
  set content(value) {
178
189
  this._content = value;
179
190
  if (this._tabControl) {
180
- if (this._tabControl.selectedIndex === 0)
191
+ if (this._tabControl.selectedIndex === tabIndex.designer)
181
192
  this.updateDesignerHtml();
182
- else if (this._tabControl.selectedIndex === 1)
193
+ else if (this._tabControl.selectedIndex === tabIndex.code)
183
194
  this.codeView.update(this._content, this.designerView.instanceServiceContainer);
184
- else if (this._tabControl.selectedIndex === 2) {
195
+ else if (this._tabControl.selectedIndex === tabIndex.split) {
185
196
  }
186
- else if (this._tabControl.selectedIndex === 3)
197
+ else if (this._tabControl.selectedIndex === tabIndex.preview)
187
198
  this.demoView.display(this._serviceContainer, this.designerView.instanceServiceContainer, this._content, this.additionalStyleString);
188
199
  }
189
200
  }
190
201
  get content() {
191
202
  if (this._tabControl) {
192
- if (this._tabControl.selectedIndex === 0)
203
+ if (this._tabControl.selectedIndex === tabIndex.designer)
193
204
  this._content = this.designerView.getHTML();
194
- else if (this._tabControl.selectedIndex === 1)
205
+ else if (this._tabControl.selectedIndex === tabIndex.code)
195
206
  this._content = this.codeView.getText();
196
207
  return this._content;
197
208
  }
@@ -213,9 +224,9 @@ export class DocumentContainer extends BaseCustomWebComponentLazyAppend {
213
224
  this._designerDiv.appendChild(this.designerView);
214
225
  this._codeDiv.appendChild(this.codeView);
215
226
  }
216
- if (i.newIndex === 0 || i.newIndex === 2)
227
+ if (i.newIndex === tabIndex.designer || i.newIndex === tabIndex.split)
217
228
  this.updateDesignerHtml();
218
- if (i.newIndex === 1 || i.newIndex === 2) {
229
+ if (i.newIndex === tabIndex.code || i.newIndex === tabIndex.split) {
219
230
  this.codeView.update(this._content, this.designerView.instanceServiceContainer);
220
231
  if (this._selectionPosition) {
221
232
  this.codeView.setSelection(this._selectionPosition);
@@ -229,11 +240,11 @@ export class DocumentContainer extends BaseCustomWebComponentLazyAppend {
229
240
  this.codeView.focusEditor();
230
241
  }
231
242
  }
232
- if (i.newIndex === 2) {
243
+ if (i.newIndex === tabIndex.split) {
233
244
  this._splitDiv.appendChild(this.designerView);
234
245
  this._splitDiv.appendChild(this.codeView);
235
246
  }
236
- if (i.newIndex === 3) {
247
+ if (i.newIndex === tabIndex.preview) {
237
248
  this.demoView.display(this._serviceContainer, this.designerView.instanceServiceContainer, this._content, this.additionalStyleString);
238
249
  }
239
250
  if (this._content) {
@@ -263,5 +274,4 @@ export class DocumentContainer extends BaseCustomWebComponentLazyAppend {
263
274
  return this.designerView.instanceServiceContainer;
264
275
  }
265
276
  }
266
- //@ts-ignore
267
277
  customElements.define("node-projects-document-container", DocumentContainer);
@@ -12,7 +12,7 @@ import { Lit2PropertiesService } from './propertiesService/services/Lit2Properti
12
12
  import { ExtensionType } from '../widgets/designerView/extensions/ExtensionType.js';
13
13
  import { ElementDragTitleExtensionProvider } from '../widgets/designerView/extensions/ElementDragTitleExtensionProvider.js';
14
14
  import { TransformOriginExtensionProvider } from '../widgets/designerView/extensions/TransformOriginExtensionProvider.js';
15
- import { CanvasExtensionProvider } from '../widgets/designerView/extensions/CanvasExtensionProvider.js';
15
+ import { MarginExtensionProvider } from '../widgets/designerView/extensions/MarginExtensionProvider.js';
16
16
  import { PositionExtensionProvider } from '../widgets/designerView/extensions/PositionExtensionProvider.js';
17
17
  import { HighlightElementExtensionProvider } from '../widgets/designerView/extensions/HighlightElementExtensionProvider.js';
18
18
  import { NamedTools } from '../widgets/designerView/tools/NamedTools.js';
@@ -91,6 +91,7 @@ import { BlockToolbarExtensionProvider } from '../widgets/designerView/extension
91
91
  import { ChildContextMenu } from '../widgets/designerView/extensions/contextMenu/ChildContextMenu.js';
92
92
  import { GridChildToolbarExtensionProvider } from '../widgets/designerView/extensions/grid/GridChildToolbarExtensionProvider.js';
93
93
  import { ToolbarExtensionsDesignViewConfigButtons } from '../widgets/designerView/extensions/buttons/ToolbarExtensionsDesignViewConfigButtons.js';
94
+ import { PaddingExtensionProvider } from '../widgets/designerView/extensions/PaddingExtensionProvider.js';
94
95
  export function createDefaultServiceContainer() {
95
96
  let serviceContainer = new ServiceContainer();
96
97
  let defaultPlacementService = new DefaultPlacementService();
@@ -127,7 +128,8 @@ export function createDefaultServiceContainer() {
127
128
  serviceContainer.designerExtensions.set(ExtensionType.PrimarySelection, [
128
129
  new ConditionExtensionProvider(new ElementDragTitleExtensionProvider(), item => !(item.node instanceof SVGElement) || item.node instanceof SVGSVGElement),
129
130
  new TransformOriginExtensionProvider(true),
130
- new CanvasExtensionProvider(),
131
+ new MarginExtensionProvider(),
132
+ new PaddingExtensionProvider(),
131
133
  new PositionExtensionProvider(),
132
134
  new SvgElementExtensionProvider(),
133
135
  new ResizeExtensionProvider(true),
@@ -1,19 +1,19 @@
1
1
  import type { IPoint } from '../../../interfaces/IPoint.js';
2
2
  import type { IPlacementService } from './IPlacementService.js';
3
3
  import type { IDesignItem } from '../../item/IDesignItem.js';
4
- import { IPlacementView } from '../../widgets/designerView/IPlacementView.js';
4
+ import { IDesignerCanvas } from '../../widgets/designerView/IDesignerCanvas.js';
5
5
  export declare class AbsolutePlacementService implements IPlacementService {
6
- serviceForContainer(container: IDesignItem, containerStyle: CSSStyleDeclaration): boolean;
6
+ serviceForContainer(container: IDesignItem, containerStyle: CSSStyleDeclaration, item?: IDesignItem): boolean;
7
7
  isEnterableContainer(container: IDesignItem): boolean;
8
8
  canEnter(container: IDesignItem, items: IDesignItem[]): boolean;
9
9
  canLeave(container: IDesignItem, items: IDesignItem[]): boolean;
10
10
  getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
11
11
  private calculateTrack;
12
- placePoint(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
13
- startPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
14
- place(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
12
+ placePoint(event: MouseEvent, designerCanvas: IDesignerCanvas, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
13
+ startPlace(event: MouseEvent, designerCanvas: IDesignerCanvas, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
14
+ place(event: MouseEvent, designerCanvas: IDesignerCanvas, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
15
15
  moveElements(designItems: IDesignItem[], position: IPoint, absolute: boolean): void;
16
16
  enterContainer(container: IDesignItem, items: IDesignItem[], mode: 'normal' | 'drop'): void;
17
17
  leaveContainer(container: IDesignItem, items: IDesignItem[]): void;
18
- finishPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
18
+ finishPlace(event: MouseEvent, designerCanvas: IDesignerCanvas, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
19
19
  }
@@ -4,7 +4,9 @@ import { filterChildPlaceItems, getDesignItemCurrentPos, placeDesignItem } from
4
4
  import { ExtensionType } from '../../widgets/designerView/extensions/ExtensionType.js';
5
5
  import { straightenLine } from '../../helper/PathDataPolyfill.js';
6
6
  export class AbsolutePlacementService {
7
- serviceForContainer(container, containerStyle) {
7
+ serviceForContainer(container, containerStyle, item) {
8
+ if (item != null && item.getComputedStyle()?.position == 'absolute')
9
+ return true;
8
10
  if (containerStyle.display === 'grid' || containerStyle.display === 'inline-grid' ||
9
11
  containerStyle.display === 'flex' || containerStyle.display === 'inline-flex')
10
12
  return false;
@@ -30,20 +32,20 @@ export class AbsolutePlacementService {
30
32
  getElementOffset(container, designItem) {
31
33
  return container.instanceServiceContainer.designerCanvas.getNormalizedElementCoordinates(container.element);
32
34
  }
33
- calculateTrack(event, placementView, startPoint, offsetInControl, newPoint, item) {
35
+ calculateTrack(event, designerCanvas, startPoint, offsetInControl, newPoint, item) {
34
36
  let trackX = newPoint.x - startPoint.x;
35
37
  let trackY = newPoint.y - startPoint.y;
36
38
  if (!event.ctrlKey) {
37
- if (placementView.alignOnGrid) {
39
+ if (designerCanvas.alignOnGrid) {
38
40
  let p = getDesignItemCurrentPos(item, 'position');
39
- p.x = p.x % placementView.gridSize;
40
- p.y = p.y % placementView.gridSize;
41
- trackX = Math.round(trackX / placementView.gridSize) * placementView.gridSize - p.x;
42
- trackY = Math.round(trackY / placementView.gridSize) * placementView.gridSize - p.y;
41
+ p.x = p.x % designerCanvas.gridSize;
42
+ p.y = p.y % designerCanvas.gridSize;
43
+ trackX = Math.round(trackX / designerCanvas.gridSize) * designerCanvas.gridSize - p.x;
44
+ trackY = Math.round(trackY / designerCanvas.gridSize) * designerCanvas.gridSize - p.y;
43
45
  }
44
- else if (placementView.alignOnSnap) {
46
+ else if (designerCanvas.alignOnSnap) {
45
47
  let rect = item.element.getBoundingClientRect();
46
- let newPos = placementView.snapLines.snapToPosition({ x: (newPoint.x - offsetInControl.x), y: (newPoint.y - offsetInControl.y) }, { width: rect.width / placementView.scaleFactor, height: rect.height / placementView.scaleFactor }, { x: trackX > 0 ? 1 : -1, y: trackY > 0 ? 1 : -1 });
48
+ let newPos = designerCanvas.snapLines.snapToPosition({ x: (newPoint.x - offsetInControl.x), y: (newPoint.y - offsetInControl.y) }, { width: rect.width / designerCanvas.scaleFactor, height: rect.height / designerCanvas.scaleFactor }, { x: trackX > 0 ? 1 : -1, y: trackY > 0 ? 1 : -1 });
47
49
  if (newPos.x !== null) {
48
50
  trackX = newPos.x - Math.round(startPoint.x) + Math.round(offsetInControl.x);
49
51
  }
@@ -60,16 +62,16 @@ export class AbsolutePlacementService {
60
62
  }
61
63
  return { x: trackX, y: trackY };
62
64
  }
63
- placePoint(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
65
+ placePoint(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items) {
64
66
  let trackX = newPoint.x;
65
67
  let trackY = newPoint.y;
66
68
  if (!event.ctrlKey) {
67
- if (placementView.alignOnGrid) {
68
- trackX = Math.round(trackX / placementView.gridSize) * placementView.gridSize;
69
- trackY = Math.round(trackY / placementView.gridSize) * placementView.gridSize;
69
+ if (designerCanvas.alignOnGrid) {
70
+ trackX = Math.round(trackX / designerCanvas.gridSize) * designerCanvas.gridSize;
71
+ trackY = Math.round(trackY / designerCanvas.gridSize) * designerCanvas.gridSize;
70
72
  }
71
- else if (placementView.alignOnSnap) {
72
- let newPos = placementView.snapLines.snapToPosition({ x: newPoint.x - offsetInControl.x, y: newPoint.y - offsetInControl.y }, null, { x: trackX > 0 ? 1 : -1, y: trackY > 0 ? 1 : -1 });
73
+ else if (designerCanvas.alignOnSnap) {
74
+ let newPos = designerCanvas.snapLines.snapToPosition({ x: newPoint.x - offsetInControl.x, y: newPoint.y - offsetInControl.y }, null, { x: trackX > 0 ? 1 : -1, y: trackY > 0 ? 1 : -1 });
73
75
  if (newPos.x !== null) {
74
76
  trackX = newPos.x;
75
77
  }
@@ -86,12 +88,12 @@ export class AbsolutePlacementService {
86
88
  }
87
89
  return { x: trackX, y: trackY };
88
90
  }
89
- startPlace(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
91
+ startPlace(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items) {
90
92
  }
91
- place(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
93
+ place(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items) {
92
94
  //TODO: this should revert all undo actions while active
93
95
  //maybe a undo actions returns itself or an id so it could be changed?
94
- let track = this.calculateTrack(event, placementView, startPoint, offsetInControl, newPoint, items[0]);
96
+ let track = this.calculateTrack(event, designerCanvas, startPoint, offsetInControl, newPoint, items[0]);
95
97
  if (event.shiftKey) {
96
98
  track = straightenLine({ x: 0, y: 0 }, track, true);
97
99
  }
@@ -137,7 +139,7 @@ export class AbsolutePlacementService {
137
139
  }
138
140
  leaveContainer(container, items) {
139
141
  }
140
- finishPlace(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
142
+ finishPlace(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items) {
141
143
  let filterdItems = filterChildPlaceItems(items);
142
144
  for (const designItem of filterdItems) {
143
145
  let translation = extractTranslationFromDOMMatrix(new DOMMatrix(designItem.element.style.transform));
@@ -147,7 +149,7 @@ export class AbsolutePlacementService {
147
149
  placeDesignItem(container, designItem, { x: track.x - stylesMapOffset.x, y: track.y - stylesMapOffset.y }, 'position');
148
150
  }
149
151
  for (const item of items) {
150
- placementView.extensionManager.removeExtension(item, ExtensionType.Placement);
152
+ designerCanvas.extensionManager.removeExtension(item, ExtensionType.Placement);
151
153
  }
152
154
  }
153
155
  }
@@ -2,6 +2,7 @@ import type { IPoint } from '../../../interfaces/IPoint.js';
2
2
  import type { IPlacementService } from './IPlacementService.js';
3
3
  import type { IDesignItem } from '../../item/IDesignItem.js';
4
4
  import { IPlacementView } from '../../widgets/designerView/IPlacementView.js';
5
+ import { IDesignerCanvas } from '../../widgets/designerView/IDesignerCanvas.js';
5
6
  export declare class DefaultPlacementService implements IPlacementService {
6
7
  serviceForContainer(container: IDesignItem, containerStyle: CSSStyleDeclaration, item?: IDesignItem): boolean;
7
8
  isEnterableContainer(container: IDesignItem): boolean;
@@ -10,8 +11,8 @@ export declare class DefaultPlacementService implements IPlacementService {
10
11
  getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
11
12
  private calculateTrack;
12
13
  placePoint(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
13
- startPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
14
- place(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
14
+ startPlace(event: MouseEvent, designerCanvas: IDesignerCanvas, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
15
+ place(event: MouseEvent, designerCanvas: IDesignerCanvas, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
15
16
  moveElements(designItems: IDesignItem[], position: IPoint, absolute: boolean): void;
16
17
  enterContainer(container: IDesignItem, items: IDesignItem[], mode: 'normal' | 'drop'): void;
17
18
  leaveContainer(container: IDesignItem, items: IDesignItem[]): void;
@@ -1,6 +1,6 @@
1
1
  import { IPoint } from '../../../interfaces/IPoint.js';
2
2
  import { IDesignItem } from '../../item/IDesignItem.js';
3
- import { IPlacementView } from '../../widgets/designerView/IPlacementView.js';
3
+ import { IDesignerCanvas } from '../../widgets/designerView/IDesignerCanvas.js';
4
4
  import { IPlacementService } from './IPlacementService.js';
5
5
  export declare class FlexBoxPlacementService implements IPlacementService {
6
6
  private _basePlacementService;
@@ -12,9 +12,9 @@ export declare class FlexBoxPlacementService implements IPlacementService {
12
12
  canEnter(container: IDesignItem, items: IDesignItem[]): any;
13
13
  canLeave(container: IDesignItem, items: IDesignItem[]): boolean;
14
14
  getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
15
- placePoint(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
16
- startPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
17
- place(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
18
- finishPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
15
+ placePoint(event: MouseEvent, designerCanvas: IDesignerCanvas, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
16
+ startPlace(event: MouseEvent, designerCanvas: IDesignerCanvas, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
17
+ place(event: MouseEvent, designerCanvas: IDesignerCanvas, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
18
+ finishPlace(event: MouseEvent, designerCanvas: IDesignerCanvas, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
19
19
  moveElements(designItems: IDesignItem[], position: IPoint, absolute: boolean): void;
20
20
  }
@@ -42,16 +42,16 @@ export class FlexBoxPlacementService {
42
42
  getElementOffset(container, designItem) {
43
43
  return container.element.getBoundingClientRect();
44
44
  }
45
- placePoint(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
45
+ placePoint(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items) {
46
46
  const defaultPlacementService = container.serviceContainer.getLastServiceWhere('containerService', x => x instanceof DefaultPlacementService);
47
- return defaultPlacementService.placePoint(event, placementView, container, startPoint, offsetInControl, newPoint, items);
47
+ return defaultPlacementService.placePoint(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items);
48
48
  }
49
- startPlace(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
49
+ startPlace(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items) {
50
50
  }
51
- place(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
52
- const pos = placementView.getNormalizedEventCoordinates(event);
51
+ place(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items) {
52
+ const pos = designerCanvas.getNormalizedEventCoordinates(event);
53
53
  const style = getComputedStyle(container.element);
54
- const childrenWithPos = Array.from(container.children()).filter(x => !x.isEmptyTextNode).map(x => [x, placementView.getNormalizedElementCoordinates(x.element)]);
54
+ const childrenWithPos = Array.from(container.children()).filter(x => !x.isEmptyTextNode).map(x => [x, designerCanvas.getNormalizedElementCoordinates(x.element)]);
55
55
  if (style.flexDirection == 'row' || style.flexDirection == 'row-reverse') {
56
56
  childrenWithPos.sort(x => x[1].x);
57
57
  let elBefore = null;
@@ -138,9 +138,9 @@ export class FlexBoxPlacementService {
138
138
  container.instanceServiceContainer.selectionService.setSelectedElements(sel);
139
139
  }
140
140
  }
141
- placementView.extensionManager.refreshAllExtensions([container]);
141
+ designerCanvas.extensionManager.refreshAllExtensions([container]);
142
142
  }
143
- finishPlace(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
143
+ finishPlace(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items) {
144
144
  }
145
145
  moveElements(designItems, position, absolute) {
146
146
  }
@@ -1,7 +1,7 @@
1
1
  import type { IPoint } from '../../../interfaces/IPoint.js';
2
2
  import type { IPlacementService } from './IPlacementService.js';
3
3
  import type { IDesignItem } from '../../item/IDesignItem.js';
4
- import { IPlacementView } from '../../widgets/designerView/IPlacementView.js';
4
+ import { IDesignerCanvas } from '../../widgets/designerView/IDesignerCanvas.js';
5
5
  export declare class GridPlacementService implements IPlacementService {
6
6
  private _basePlacementService;
7
7
  constructor(basePlacementService: IPlacementService);
@@ -12,9 +12,9 @@ export declare class GridPlacementService implements IPlacementService {
12
12
  canEnter(container: IDesignItem, items: IDesignItem[]): any;
13
13
  canLeave(container: IDesignItem, items: IDesignItem[]): boolean;
14
14
  getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
15
- placePoint(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
16
- startPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
17
- place(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
18
- finishPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
15
+ placePoint(event: MouseEvent, designerCanvas: IDesignerCanvas, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
16
+ startPlace(event: MouseEvent, designerCanvas: IDesignerCanvas, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
17
+ place(event: MouseEvent, designerCanvas: IDesignerCanvas, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
18
+ finishPlace(event: MouseEvent, designerCanvas: IDesignerCanvas, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): void;
19
19
  moveElements(designItems: IDesignItem[], position: IPoint, absolute: boolean): void;
20
20
  }
@@ -46,15 +46,15 @@ export class GridPlacementService {
46
46
  getElementOffset(container, designItem) {
47
47
  return container.element.getBoundingClientRect();
48
48
  }
49
- placePoint(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
49
+ placePoint(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items) {
50
50
  const defaultPlacementService = container.serviceContainer.getLastServiceWhere('containerService', x => x instanceof DefaultPlacementService);
51
- return defaultPlacementService.placePoint(event, placementView, container, startPoint, offsetInControl, newPoint, items);
51
+ return defaultPlacementService.placePoint(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items);
52
52
  }
53
- startPlace(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
53
+ startPlace(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items) {
54
54
  }
55
- place(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
55
+ place(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items) {
56
56
  const gridInformation = calculateGridInformation(container);
57
- const pos = placementView.getNormalizedEventCoordinates(event);
57
+ const pos = designerCanvas.getNormalizedEventCoordinates(event);
58
58
  //pos.x -= offsetInControl.x;
59
59
  //pos.y -= offsetInControl.y;
60
60
  let row = 0;
@@ -79,11 +79,11 @@ export class GridPlacementService {
79
79
  }
80
80
  row++;
81
81
  }
82
- placementView.extensionManager.refreshAllExtensions([container]);
82
+ designerCanvas.extensionManager.refreshAllExtensions([container]);
83
83
  }
84
- finishPlace(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
84
+ finishPlace(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items) {
85
85
  const gridInformation = calculateGridInformation(container);
86
- const pos = placementView.getNormalizedEventCoordinates(event);
86
+ const pos = designerCanvas.getNormalizedEventCoordinates(event);
87
87
  //pos.x -= offsetInControl.x;
88
88
  //pos.y -= offsetInControl.y;
89
89
  let row = 0;
@@ -113,7 +113,7 @@ export class GridPlacementService {
113
113
  }
114
114
  row++;
115
115
  }
116
- placementView.extensionManager.refreshAllExtensions([container]);
116
+ designerCanvas.extensionManager.refreshAllExtensions([container]);
117
117
  }
118
118
  moveElements(designItems, position, absolute) {
119
119
  }
@@ -1,7 +1,7 @@
1
1
  import { IService } from '../IService.js';
2
2
  import { IDesignItem } from '../../item/IDesignItem.js';
3
- import { IPlacementView } from '../../widgets/designerView/IPlacementView.js';
4
3
  import { IPoint } from '../../../interfaces/IPoint.js';
4
+ import { IDesignerCanvas } from '../../widgets/designerView/IDesignerCanvas.js';
5
5
  export interface IPlacementService extends IService {
6
6
  serviceForContainer(container: IDesignItem, containerStyle: CSSStyleDeclaration, item?: IDesignItem): boolean;
7
7
  isEnterableContainer(container: IDesignItem): boolean;
@@ -10,9 +10,9 @@ export interface IPlacementService extends IService {
10
10
  enterContainer(container: IDesignItem, items: IDesignItem[], mode: 'normal' | 'drop'): any;
11
11
  leaveContainer(container: IDesignItem, items: IDesignItem[]): any;
12
12
  getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
13
- placePoint(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
14
- startPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): any;
15
- place(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): any;
16
- finishPlace(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): any;
13
+ placePoint(event: MouseEvent, designerCanvas: IDesignerCanvas, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
14
+ startPlace(event: MouseEvent, designerCanvas: IDesignerCanvas, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): any;
15
+ place(event: MouseEvent, designerCanvas: IDesignerCanvas, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): any;
16
+ finishPlace(event: MouseEvent, designerCanvas: IDesignerCanvas, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): any;
17
17
  moveElements(designItems: IDesignItem[], position: IPoint, absolute: boolean): any;
18
18
  }
@@ -164,10 +164,12 @@ export class AbstractPropertiesService {
164
164
  if (!bindings) {
165
165
  const services = designItem.serviceContainer.getServices('bindingService');
166
166
  bindings = [];
167
- for (const s of services) {
168
- const bs = s.getBindings(designItem);
169
- if (bs && bs.length > 0) {
170
- bindings.push(...bs);
167
+ if (services) {
168
+ for (const s of services) {
169
+ const bs = s.getBindings(designItem);
170
+ if (bs && bs.length > 0) {
171
+ bindings.push(...bs);
172
+ }
171
173
  }
172
174
  }
173
175
  AbstractPropertiesService._bindingsCache.set(designItem, bindings);
@@ -47,7 +47,6 @@ export interface IDesignerCanvas extends IPlacementView, IUiCommandHandler {
47
47
  getDesignSurfaceDimensions(): ISize;
48
48
  getNormalizedOffsetInElement(event: MouseEvent, element: Element): IPoint;
49
49
  getElementAtPoint(point: IPoint, ignoreElementCallback?: (element: HTMLElement) => boolean): any;
50
- elementFromPoint(x: number, y: number): Element;
51
50
  elementsFromPoint(x: number, y: number): Element[];
52
51
  showHoverExtension(element: Element, event: Event): any;
53
52
  setDesignItems(designItems: IDesignItem[]): any;
@@ -124,7 +124,6 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
124
124
  realHeight: number;
125
125
  };
126
126
  getNormalizedOffsetInElement(event: MouseEvent, element: Element): IPoint;
127
- elementFromPoint(x: number, y: number): Element;
128
127
  elementsFromPoint(x: number, y: number): Element[];
129
128
  getElementAtPoint(point: IPoint, ignoreElementCallback?: (element: HTMLElement) => boolean): HTMLElement;
130
129
  showHoverExtension(element: Element, event: Event): void;
@@ -854,6 +854,8 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
854
854
  event.preventDefault();
855
855
  if (event.target === this.overlayLayer)
856
856
  return;
857
+ if (event.altKey)
858
+ return;
857
859
  if (this.serviceContainer.globalContext.tool == null || this.serviceContainer.globalContext.tool === this.serviceContainer.designerTools.get(NamedTools.Pointer)) {
858
860
  this.extensionManager.removeExtension(this.instanceServiceContainer.selectionService.primarySelection, ExtensionType.PrimarySelectionRefreshed);
859
861
  this.extensionManager.applyExtension(this.instanceServiceContainer.selectionService.primarySelection, ExtensionType.Doubleclick, event);
@@ -1003,12 +1005,6 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
1003
1005
  const normEl = this.getNormalizedElementCoordinates(element);
1004
1006
  return { x: normEvt.x - normEl.x, y: normEvt.y - normEl.y };
1005
1007
  }
1006
- //TODO: remove
1007
- elementFromPoint(x, y) {
1008
- let elements = this._canvasShadowRoot.elementsFromPoint(x, y);
1009
- let element = elements[0];
1010
- return element;
1011
- }
1012
1008
  elementsFromPoint(x, y) {
1013
1009
  let retVal = [];
1014
1010
  let elements = this._canvasShadowRoot.elementsFromPoint(x, y);
@@ -0,0 +1,10 @@
1
+ import { IDesignItem } from '../../../item/IDesignItem.js';
2
+ import { IDesignerCanvas } from '../IDesignerCanvas.js';
3
+ import { AbstractExtension } from './AbstractExtension.js';
4
+ import { IExtensionManager } from './IExtensionManger.js';
5
+ export declare class MarginExtension extends AbstractExtension {
6
+ constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
7
+ extend(): void;
8
+ refresh(): void;
9
+ dispose(): void;
10
+ }
@@ -0,0 +1,32 @@
1
+ import { AbstractExtension } from './AbstractExtension.js';
2
+ import { OverlayLayer } from './OverlayLayer.js';
3
+ export class MarginExtension extends AbstractExtension {
4
+ constructor(extensionManager, designerView, extendedItem) {
5
+ super(extensionManager, designerView, extendedItem);
6
+ }
7
+ extend() {
8
+ this.refresh();
9
+ }
10
+ refresh() {
11
+ const itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
12
+ const computedStyle = getComputedStyle(this.extendedItem.element);
13
+ if (computedStyle.margin !== '0px') {
14
+ const left = Number.parseFloat(computedStyle.marginLeft.replace('px', ''));
15
+ const top = Number.parseFloat(computedStyle.marginTop.replace('px', ''));
16
+ const right = Number.parseFloat(computedStyle.marginRight.replace('px', ''));
17
+ const bottom = Number.parseFloat(computedStyle.marginBottom.replace('px', ''));
18
+ if (!isNaN(left) && !isNaN(top) && !isNaN(right) && !isNaN(bottom)) {
19
+ if (this._valuesHaveChanges(left, top, right, bottom, itemRect.x, itemRect.y, itemRect.width, itemRect.height)) {
20
+ this._removeAllOverlays();
21
+ this._drawRect(itemRect.x - left, itemRect.y - top, left + itemRect.width + right, top, 'svg-margin', null, OverlayLayer.Background);
22
+ this._drawRect(itemRect.x - left, itemRect.y, left, itemRect.height, 'svg-margin', null, OverlayLayer.Background);
23
+ this._drawRect(itemRect.x + itemRect.width, itemRect.y, right, itemRect.height, 'svg-margin', null, OverlayLayer.Background);
24
+ this._drawRect(itemRect.x - left, itemRect.y + itemRect.height, left + itemRect.width + right, bottom, 'svg-margin', null, OverlayLayer.Background);
25
+ }
26
+ }
27
+ }
28
+ }
29
+ dispose() {
30
+ this._removeAllOverlays();
31
+ }
32
+ }
@@ -0,0 +1,10 @@
1
+ import { IDesignerExtensionProvider } from './IDesignerExtensionProvider.js';
2
+ import { IDesignItem } from '../../../item/IDesignItem.js';
3
+ import { IDesignerCanvas } from '../IDesignerCanvas.js';
4
+ import { IDesignerExtension } from './IDesignerExtension.js';
5
+ import { IExtensionManager } from './IExtensionManger.js';
6
+ export declare class MarginExtensionProvider 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,16 @@
1
+ import { MarginExtension } from './MarginExtension.js';
2
+ import { css } from "@node-projects/base-custom-webcomponent";
3
+ import { NodeType } from '../../../item/NodeType.js';
4
+ export class MarginExtensionProvider {
5
+ shouldExtend(extensionManager, designerView, designItem) {
6
+ if (designItem.nodeType == NodeType.Element)
7
+ return true;
8
+ return false;
9
+ }
10
+ getExtension(extensionManager, designerView, designItem) {
11
+ return new MarginExtension(extensionManager, designerView, designItem);
12
+ }
13
+ style = css `
14
+ .svg-margin { fill: #ff944766; }
15
+ `;
16
+ }
@@ -0,0 +1,10 @@
1
+ import { IDesignItem } from '../../../item/IDesignItem.js';
2
+ import { IDesignerCanvas } from '../IDesignerCanvas.js';
3
+ import { AbstractExtension } from './AbstractExtension.js';
4
+ import { IExtensionManager } from './IExtensionManger.js';
5
+ export declare class PaddingExtension extends AbstractExtension {
6
+ constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
7
+ extend(): void;
8
+ refresh(): void;
9
+ dispose(): void;
10
+ }
@@ -0,0 +1,36 @@
1
+ import { AbstractExtension } from './AbstractExtension.js';
2
+ import { OverlayLayer } from './OverlayLayer.js';
3
+ export class PaddingExtension extends AbstractExtension {
4
+ constructor(extensionManager, designerView, extendedItem) {
5
+ super(extensionManager, designerView, extendedItem);
6
+ }
7
+ extend() {
8
+ this.refresh();
9
+ }
10
+ refresh() {
11
+ const itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
12
+ const computedStyle = getComputedStyle(this.extendedItem.element);
13
+ if (computedStyle.margin !== '0px') {
14
+ const left = Number.parseFloat(computedStyle.paddingLeft.replace('px', ''));
15
+ const top = Number.parseFloat(computedStyle.paddingTop.replace('px', ''));
16
+ const right = Number.parseFloat(computedStyle.paddingRight.replace('px', ''));
17
+ const bottom = Number.parseFloat(computedStyle.paddingBottom.replace('px', ''));
18
+ const bleft = Number.parseFloat(computedStyle.borderLeftWidth.replace('px', ''));
19
+ const btop = Number.parseFloat(computedStyle.borderTopWidth.replace('px', ''));
20
+ const bright = Number.parseFloat(computedStyle.borderRightWidth.replace('px', ''));
21
+ const bbottom = Number.parseFloat(computedStyle.borderBottomWidth.replace('px', ''));
22
+ if (!isNaN(left) && !isNaN(top) && !isNaN(right) && !isNaN(bottom)) {
23
+ if (this._valuesHaveChanges(left, top, right, bottom, bleft, btop, bright, bbottom, itemRect.x, itemRect.y, itemRect.width, itemRect.height)) {
24
+ this._removeAllOverlays();
25
+ this._drawRect(itemRect.x + bleft + left, itemRect.y + btop, itemRect.width - left - right - bleft - bright, top, 'svg-padding', null, OverlayLayer.Background);
26
+ this._drawRect(itemRect.x + bleft, itemRect.y + btop, left, itemRect.height - btop - bbottom, 'svg-padding', null, OverlayLayer.Background);
27
+ this._drawRect(itemRect.x + bleft + left, itemRect.y + itemRect.height - bottom - bbottom, itemRect.width - left - right - bleft - bright, bottom, 'svg-padding', null, OverlayLayer.Background);
28
+ this._drawRect(itemRect.x + itemRect.width - right - bright, itemRect.y + btop, right, itemRect.height - btop - bbottom, 'svg-padding', null, OverlayLayer.Background);
29
+ }
30
+ }
31
+ }
32
+ }
33
+ dispose() {
34
+ this._removeAllOverlays();
35
+ }
36
+ }
@@ -0,0 +1,10 @@
1
+ import { IDesignerExtensionProvider } from './IDesignerExtensionProvider.js';
2
+ import { IDesignItem } from '../../../item/IDesignItem.js';
3
+ import { IDesignerCanvas } from '../IDesignerCanvas.js';
4
+ import { IDesignerExtension } from './IDesignerExtension.js';
5
+ import { IExtensionManager } from './IExtensionManger.js';
6
+ export declare class PaddingExtensionProvider 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,16 @@
1
+ import { css } from "@node-projects/base-custom-webcomponent";
2
+ import { NodeType } from '../../../item/NodeType.js';
3
+ import { PaddingExtension } from './PaddingExtension.js';
4
+ export class PaddingExtensionProvider {
5
+ shouldExtend(extensionManager, designerView, designItem) {
6
+ if (designItem.nodeType == NodeType.Element)
7
+ return true;
8
+ return false;
9
+ }
10
+ getExtension(extensionManager, designerView, designItem) {
11
+ return new PaddingExtension(extensionManager, designerView, designItem);
12
+ }
13
+ style = css `
14
+ .svg-padding { fill: #32cd3266; }
15
+ `;
16
+ }
@@ -241,40 +241,46 @@ export class ResizeExtension extends AbstractExtension {
241
241
  case EventNames.PointerUp:
242
242
  event.target.releasePointerCapture(event.pointerId);
243
243
  let cg = this.extendedItem.openGroup((this.resizeAllSelected && this.designerCanvas.instanceServiceContainer.selectionService.selectedElements.length > 1) ? "Resize Elements" : "Resize <" + this.extendedItem.name + ">");
244
- this.extendedItem.setStyle('width', this.extendedItem.element.style.width);
245
- this.extendedItem.setStyle('height', this.extendedItem.element.style.height);
246
- this.extendedItem.setStyle('left', roundValue(this.extendedItem, parseFloat(normalizeToAbsolutePosition(this.extendedItem.element, 'left'))) + 'px');
247
- this.extendedItem.setStyle('top', roundValue(this.extendedItem, parseFloat(normalizeToAbsolutePosition(this.extendedItem.element, 'top'))) + 'px');
248
- let p3Abs = new DOMPoint(this.extendedItem.element.offsetLeft + parseFloat(getComputedStyle(this.extendedItem.element).transformOrigin.split(' ')[0].replace('px', '')), this.extendedItem.element.offsetTop + parseFloat(getComputedStyle(this.extendedItem.element).transformOrigin.split(' ')[1].replace('px', '')));
249
- this.extendedItem.element.style.transformOrigin = this._initialTransformOrigins[0];
250
- let p1Abs = new DOMPoint(this.extendedItem.element.offsetLeft + parseFloat(getComputedStyle(this.extendedItem.element).transformOrigin.split(' ')[0].replace('px', '')), this.extendedItem.element.offsetTop + parseFloat(getComputedStyle(this.extendedItem.element).transformOrigin.split(' ')[1].replace('px', '')));
251
- let p1 = new DOMPoint(p1Abs.x - p3Abs.x, -(p1Abs.y - p3Abs.y));
252
- let matrix = new DOMMatrix(getComputedStyle(this.extendedItem.element).transform);
253
- let deltaX = 0;
254
- let deltaY = 0;
255
- let p1transformed = transformPointByInverseMatrix(p1, matrix);
256
- let p2Abs = new DOMPoint(p3Abs.x + p1transformed.x, p3Abs.y - p1transformed.y);
257
- let p1p2 = new DOMPoint(p2Abs.x - p1Abs.x, -(p2Abs.y - p1Abs.y));
258
- let p1p2transformed = p1p2.matrixTransform(matrix);
259
- let p4Abs = new DOMPoint(p1Abs.x + p1p2transformed.x, p1Abs.y - p1p2transformed.y);
260
- deltaX = p4Abs.x - p1Abs.x;
261
- deltaY = p4Abs.y - p1Abs.y;
262
- this.extendedItem.element.style.transform = matrix.translate(deltaX, deltaY).toString();
263
- if (matrix.isIdentity) {
264
- this.extendedItem.element.style.transform = '';
265
- }
266
- this.extendedItem.setStyle('transform', this.extendedItem.element.style.transform);
267
- if (this.resizeAllSelected) {
268
- for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
269
- if (designItem !== this.extendedItem) {
270
- designItem.setStyle('width', designItem.element.style.width);
271
- designItem.setStyle('height', designItem.element.style.height);
272
- designItem.setStyle('left', roundValue(this.extendedItem, parseFloat(normalizeToAbsolutePosition(designItem.element, 'left'))) + 'px');
273
- designItem.setStyle('top', roundValue(this.extendedItem, parseFloat(normalizeToAbsolutePosition(designItem.element, 'top'))) + 'px');
244
+ try {
245
+ this.extendedItem.setStyle('width', this.extendedItem.element.style.width);
246
+ this.extendedItem.setStyle('height', this.extendedItem.element.style.height);
247
+ this.extendedItem.setStyle('left', roundValue(this.extendedItem, parseFloat(normalizeToAbsolutePosition(this.extendedItem.element, 'left'))) + 'px');
248
+ this.extendedItem.setStyle('top', roundValue(this.extendedItem, parseFloat(normalizeToAbsolutePosition(this.extendedItem.element, 'top'))) + 'px');
249
+ let p3Abs = new DOMPoint(this.extendedItem.element.offsetLeft + parseFloat(getComputedStyle(this.extendedItem.element).transformOrigin.split(' ')[0].replace('px', '')), this.extendedItem.element.offsetTop + parseFloat(getComputedStyle(this.extendedItem.element).transformOrigin.split(' ')[1].replace('px', '')));
250
+ this.extendedItem.element.style.transformOrigin = this._initialTransformOrigins[0];
251
+ let p1Abs = new DOMPoint(this.extendedItem.element.offsetLeft + parseFloat(getComputedStyle(this.extendedItem.element).transformOrigin.split(' ')[0].replace('px', '')), this.extendedItem.element.offsetTop + parseFloat(getComputedStyle(this.extendedItem.element).transformOrigin.split(' ')[1].replace('px', '')));
252
+ let p1 = new DOMPoint(p1Abs.x - p3Abs.x, -(p1Abs.y - p3Abs.y));
253
+ let matrix = new DOMMatrix(getComputedStyle(this.extendedItem.element).transform);
254
+ let deltaX = 0;
255
+ let deltaY = 0;
256
+ let p1transformed = transformPointByInverseMatrix(p1, matrix);
257
+ let p2Abs = new DOMPoint(p3Abs.x + p1transformed.x, p3Abs.y - p1transformed.y);
258
+ let p1p2 = new DOMPoint(p2Abs.x - p1Abs.x, -(p2Abs.y - p1Abs.y));
259
+ let p1p2transformed = p1p2.matrixTransform(matrix);
260
+ let p4Abs = new DOMPoint(p1Abs.x + p1p2transformed.x, p1Abs.y - p1p2transformed.y);
261
+ deltaX = p4Abs.x - p1Abs.x;
262
+ deltaY = p4Abs.y - p1Abs.y;
263
+ this.extendedItem.element.style.transform = matrix.translate(deltaX, deltaY).toString();
264
+ if (matrix.isIdentity) {
265
+ this.extendedItem.element.style.transform = '';
266
+ }
267
+ this.extendedItem.setStyle('transform', this.extendedItem.element.style.transform);
268
+ if (this.resizeAllSelected) {
269
+ for (const designItem of this.designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
270
+ if (designItem !== this.extendedItem) {
271
+ designItem.setStyle('width', designItem.element.style.width);
272
+ designItem.setStyle('height', designItem.element.style.height);
273
+ designItem.setStyle('left', roundValue(this.extendedItem, parseFloat(normalizeToAbsolutePosition(designItem.element, 'left'))) + 'px');
274
+ designItem.setStyle('top', roundValue(this.extendedItem, parseFloat(normalizeToAbsolutePosition(designItem.element, 'top'))) + 'px');
275
+ }
274
276
  }
275
277
  }
278
+ cg.commit();
279
+ }
280
+ catch (err) {
281
+ cg.abort();
282
+ console.error(err);
276
283
  }
277
- cg.commit();
278
284
  this._initialSizes = null;
279
285
  this._initialPoint = null;
280
286
  break;
@@ -5,7 +5,7 @@ export class BlockToolbarExtensionProvider {
5
5
  shouldExtend(extensionManager, designerCanvas, designItem) {
6
6
  if (designItem.nodeType === NodeType.Element) {
7
7
  const d = getComputedStyle(designItem.element).display;
8
- if (d === 'block' || d === 'inline')
8
+ if (d === 'block' || d === 'inline' || d === 'inline-block')
9
9
  return designerCanvas.instanceServiceContainer.designContext.extensionOptions[basicStackedToolbarExtensionOverlayOptionName] !== false;
10
10
  }
11
11
  return false;
@@ -25,7 +25,6 @@ export declare class OverlayLayerView extends BaseCustomWebComponentConstructorA
25
25
  removeAllNodesWithClass(className: string): void;
26
26
  removeAllOverlays(): void;
27
27
  createPoint(): DOMPointInit;
28
- elementFromPoint(x: number, y: number): Element;
29
28
  drawGroup(overlaySource: string, className?: string, group?: SVGGElement, overlayLayer?: OverlayLayer): SVGGElement;
30
29
  drawLine(overlaySource: string, x1: number, y1: number, x2: number, y2: number, className?: string, line?: SVGLineElement, overlayLayer?: OverlayLayer): SVGLineElement;
31
30
  drawCircle(overlaySource: string, x: number, y: number, radius: number, className?: string, circle?: SVGCircleElement, overlayLayer?: OverlayLayer): SVGCircleElement;
@@ -150,10 +150,6 @@ export class OverlayLayerView extends BaseCustomWebComponentConstructorAppend {
150
150
  //@ts-ignore
151
151
  return this._svg.createSVGPoint();
152
152
  }
153
- elementFromPoint(x, y) {
154
- //@ts-ignore
155
- return this.shadowRoot.elementFromPoint(x, y);
156
- }
157
153
  drawGroup(overlaySource, className, group, overlayLayer) {
158
154
  if (!group) {
159
155
  group = document.createElementNS("http://www.w3.org/2000/svg", "g");
package/dist/index.d.ts CHANGED
@@ -116,6 +116,7 @@ export * from "./elements/services/propertiesService/services/CssCurrentProperti
116
116
  export * from "./elements/services/propertiesService/services/CssPropertiesService.js";
117
117
  export * from "./elements/services/propertiesService/services/ListPropertiesService.js";
118
118
  export * from "./elements/services/propertiesService/services/LitElementPropertiesService.js";
119
+ export * from "./elements/services/propertiesService/services/Lit2PropertiesService.js";
119
120
  export * from "./elements/services/propertiesService/services/MathMLElementsPropertiesService.js";
120
121
  export * from "./elements/services/propertiesService/services/NativeElementsPropertiesService.js";
121
122
  export * from "./elements/services/propertiesService/services/SVGElementsPropertiesService.js";
@@ -203,8 +204,10 @@ export * from "./elements/widgets/designerView/extensions/ExtensionType.js";
203
204
  export * from "./elements/widgets/designerView/extensions/AbstractExtension.js";
204
205
  export * from "./elements/widgets/designerView/extensions/AltToEnterContainerExtension.js";
205
206
  export * from "./elements/widgets/designerView/extensions/AltToEnterContainerExtensionProvider.js";
206
- export * from "./elements/widgets/designerView/extensions/CanvasExtension.js";
207
- export * from "./elements/widgets/designerView/extensions/CanvasExtensionProvider.js";
207
+ export * from "./elements/widgets/designerView/extensions/MarginExtension.js";
208
+ export * from "./elements/widgets/designerView/extensions/MarginExtensionProvider.js";
209
+ export * from "./elements/widgets/designerView/extensions/PaddingExtension.js";
210
+ export * from "./elements/widgets/designerView/extensions/PaddingExtensionProvider.js";
208
211
  export * from "./elements/widgets/designerView/extensions/logic/ConditionExtensionProvider.js";
209
212
  export * from "./elements/widgets/designerView/extensions/ExtensionManager.js";
210
213
  export * from "./elements/widgets/designerView/extensions/FlexboxExtension.js";
@@ -217,6 +220,8 @@ export * from "./elements/widgets/designerView/extensions/InvisibleElementExtens
217
220
  export * from "./elements/widgets/designerView/extensions/InvisibleElementExtensionProvider.js";
218
221
  export * from "./elements/widgets/designerView/extensions/HighlightElementExtension.js";
219
222
  export * from "./elements/widgets/designerView/extensions/HighlightElementExtensionProvider.js";
223
+ export * from "./elements/widgets/designerView/extensions/MultipleSelectionRectExtension.js";
224
+ export * from "./elements/widgets/designerView/extensions/MultipleSelectionRectExtensionProvider.js";
220
225
  export * from "./elements/widgets/designerView/extensions/svg/SvgElementExtension.js";
221
226
  export * from "./elements/widgets/designerView/extensions/svg/SvgElementExtensionProvider.js";
222
227
  export * from "./elements/widgets/designerView/extensions/svg/PathExtension.js";
@@ -233,6 +238,8 @@ export * from "./elements/widgets/designerView/extensions/SelectionDefaultExtens
233
238
  export * from "./elements/widgets/designerView/extensions/SelectionDefaultExtensionProvider.js";
234
239
  export * from "./elements/widgets/designerView/extensions/TransformOriginExtension.js";
235
240
  export * from "./elements/widgets/designerView/extensions/TransformOriginExtensionProvider.js";
241
+ export * from "./elements/widgets/designerView/extensions/PlacementExtension.js";
242
+ export * from "./elements/widgets/designerView/extensions/PlacementExtensionProvider.js";
236
243
  export * from "./elements/widgets/designerView/extensions/block/BlockToolbarExtension.js";
237
244
  export * from "./elements/widgets/designerView/extensions/block/BlockToolbarExtensionProvider.js";
238
245
  export * from "./elements/widgets/designerView/extensions/flex/FlexToolbarExtension.js";
@@ -255,6 +262,7 @@ export * from "./elements/widgets/designerView/extensions/buttons/AbstractDesign
255
262
  export * from "./elements/widgets/designerView/extensions/buttons/ButtonSeperatorProvider.js";
256
263
  export * from "./elements/widgets/designerView/extensions/buttons/StylesheetServiceDesignViewConfigButtons.js";
257
264
  export * from "./elements/widgets/designerView/extensions/buttons/ToolbarExtensionsDesignViewConfigButtons.js";
265
+ export * from "./elements/widgets/designerView/extensions/buttons/RoundPixelsDesignViewConfigButton.js";
258
266
  export type { IDesignViewConfigButtonsProvider } from './elements/widgets/designerView/extensions/buttons/IDesignViewConfigButtonsProvider.js';
259
267
  export * from "./elements/widgets/designerView/extensions/EditText/EditTextExtension.js";
260
268
  export * from "./elements/widgets/designerView/extensions/EditText/EditTextExtensionProvider.js";
package/dist/index.js CHANGED
@@ -75,6 +75,7 @@ export * from "./elements/services/propertiesService/services/CssCurrentProperti
75
75
  export * from "./elements/services/propertiesService/services/CssPropertiesService.js";
76
76
  export * from "./elements/services/propertiesService/services/ListPropertiesService.js";
77
77
  export * from "./elements/services/propertiesService/services/LitElementPropertiesService.js";
78
+ export * from "./elements/services/propertiesService/services/Lit2PropertiesService.js";
78
79
  export * from "./elements/services/propertiesService/services/MathMLElementsPropertiesService.js";
79
80
  export * from "./elements/services/propertiesService/services/NativeElementsPropertiesService.js";
80
81
  export * from "./elements/services/propertiesService/services/SVGElementsPropertiesService.js";
@@ -144,8 +145,10 @@ export * from "./elements/widgets/designerView/extensions/ExtensionType.js";
144
145
  export * from "./elements/widgets/designerView/extensions/AbstractExtension.js";
145
146
  export * from "./elements/widgets/designerView/extensions/AltToEnterContainerExtension.js";
146
147
  export * from "./elements/widgets/designerView/extensions/AltToEnterContainerExtensionProvider.js";
147
- export * from "./elements/widgets/designerView/extensions/CanvasExtension.js";
148
- export * from "./elements/widgets/designerView/extensions/CanvasExtensionProvider.js";
148
+ export * from "./elements/widgets/designerView/extensions/MarginExtension.js";
149
+ export * from "./elements/widgets/designerView/extensions/MarginExtensionProvider.js";
150
+ export * from "./elements/widgets/designerView/extensions/PaddingExtension.js";
151
+ export * from "./elements/widgets/designerView/extensions/PaddingExtensionProvider.js";
149
152
  export * from "./elements/widgets/designerView/extensions/logic/ConditionExtensionProvider.js";
150
153
  export * from "./elements/widgets/designerView/extensions/ExtensionManager.js";
151
154
  export * from "./elements/widgets/designerView/extensions/FlexboxExtension.js";
@@ -158,6 +161,8 @@ export * from "./elements/widgets/designerView/extensions/InvisibleElementExtens
158
161
  export * from "./elements/widgets/designerView/extensions/InvisibleElementExtensionProvider.js";
159
162
  export * from "./elements/widgets/designerView/extensions/HighlightElementExtension.js";
160
163
  export * from "./elements/widgets/designerView/extensions/HighlightElementExtensionProvider.js";
164
+ export * from "./elements/widgets/designerView/extensions/MultipleSelectionRectExtension.js";
165
+ export * from "./elements/widgets/designerView/extensions/MultipleSelectionRectExtensionProvider.js";
161
166
  export * from "./elements/widgets/designerView/extensions/svg/SvgElementExtension.js";
162
167
  export * from "./elements/widgets/designerView/extensions/svg/SvgElementExtensionProvider.js";
163
168
  export * from "./elements/widgets/designerView/extensions/svg/PathExtension.js";
@@ -174,6 +179,8 @@ export * from "./elements/widgets/designerView/extensions/SelectionDefaultExtens
174
179
  export * from "./elements/widgets/designerView/extensions/SelectionDefaultExtensionProvider.js";
175
180
  export * from "./elements/widgets/designerView/extensions/TransformOriginExtension.js";
176
181
  export * from "./elements/widgets/designerView/extensions/TransformOriginExtensionProvider.js";
182
+ export * from "./elements/widgets/designerView/extensions/PlacementExtension.js";
183
+ export * from "./elements/widgets/designerView/extensions/PlacementExtensionProvider.js";
177
184
  export * from "./elements/widgets/designerView/extensions/block/BlockToolbarExtension.js";
178
185
  export * from "./elements/widgets/designerView/extensions/block/BlockToolbarExtensionProvider.js";
179
186
  export * from "./elements/widgets/designerView/extensions/flex/FlexToolbarExtension.js";
@@ -196,6 +203,7 @@ export * from "./elements/widgets/designerView/extensions/buttons/AbstractDesign
196
203
  export * from "./elements/widgets/designerView/extensions/buttons/ButtonSeperatorProvider.js";
197
204
  export * from "./elements/widgets/designerView/extensions/buttons/StylesheetServiceDesignViewConfigButtons.js";
198
205
  export * from "./elements/widgets/designerView/extensions/buttons/ToolbarExtensionsDesignViewConfigButtons.js";
206
+ export * from "./elements/widgets/designerView/extensions/buttons/RoundPixelsDesignViewConfigButton.js";
199
207
  export * from "./elements/widgets/designerView/extensions/EditText/EditTextExtension.js";
200
208
  export * from "./elements/widgets/designerView/extensions/EditText/EditTextExtensionProvider.js";
201
209
  export * from "./elements/widgets/designerView/extensions/contextMenu/ChildContextMenu.js";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "description": "A WYSIWYG designer webcomponent for html components",
3
3
  "name": "@node-projects/web-component-designer",
4
- "version": "0.1.127",
4
+ "version": "0.1.129",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "jochen.kuehner@gmx.de",