@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.
- package/dist/elements/documentContainer.js +34 -24
- package/dist/elements/services/DefaultServiceBootstrap.js +4 -2
- package/dist/elements/services/placementService/AbsolutePlacementService.d.ts +6 -6
- package/dist/elements/services/placementService/AbsolutePlacementService.js +22 -20
- package/dist/elements/services/placementService/DefaultPlacementService.d.ts +3 -2
- package/dist/elements/services/placementService/FlexBoxPlacementService.d.ts +5 -5
- package/dist/elements/services/placementService/FlexBoxPlacementService.js +8 -8
- package/dist/elements/services/placementService/GridPlacementService.d.ts +5 -5
- package/dist/elements/services/placementService/GridPlacementService.js +9 -9
- package/dist/elements/services/placementService/IPlacementService.d.ts +5 -5
- package/dist/elements/services/propertiesService/services/AbstractPropertiesService.js +6 -4
- package/dist/elements/widgets/designerView/IDesignerCanvas.d.ts +0 -1
- package/dist/elements/widgets/designerView/designerCanvas.d.ts +0 -1
- package/dist/elements/widgets/designerView/designerCanvas.js +2 -6
- package/dist/elements/widgets/designerView/extensions/MarginExtension.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/MarginExtension.js +32 -0
- package/dist/elements/widgets/designerView/extensions/MarginExtensionProvider.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/MarginExtensionProvider.js +16 -0
- package/dist/elements/widgets/designerView/extensions/PaddingExtension.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/PaddingExtension.js +36 -0
- package/dist/elements/widgets/designerView/extensions/PaddingExtensionProvider.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/PaddingExtensionProvider.js +16 -0
- package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +37 -31
- package/dist/elements/widgets/designerView/extensions/block/BlockToolbarExtensionProvider.js +1 -1
- package/dist/elements/widgets/designerView/overlayLayerView.d.ts +0 -1
- package/dist/elements/widgets/designerView/overlayLayerView.js +0 -4
- package/dist/index.d.ts +10 -2
- package/dist/index.js +10 -2
- 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.
|
|
94
|
-
|
|
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 =
|
|
116
|
+
this._tabControl.selectedIndex = tabIndex.designer;
|
|
110
117
|
});
|
|
111
118
|
}
|
|
112
119
|
async refreshInSplitView() {
|
|
113
|
-
|
|
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 ===
|
|
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 ===
|
|
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 ===
|
|
166
|
+
if (this._tabControl.selectedIndex === tabIndex.designer || this._tabControl.selectedIndex === tabIndex.split)
|
|
156
167
|
this.designerView.executeCommand(command);
|
|
157
|
-
else if (this._tabControl.selectedIndex ===
|
|
168
|
+
else if (this._tabControl.selectedIndex === tabIndex.code)
|
|
158
169
|
this.codeView.executeCommand(command);
|
|
159
|
-
else if (this._tabControl.selectedIndex ===
|
|
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 ===
|
|
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 ===
|
|
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 ===
|
|
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 ===
|
|
191
|
+
if (this._tabControl.selectedIndex === tabIndex.designer)
|
|
181
192
|
this.updateDesignerHtml();
|
|
182
|
-
else if (this._tabControl.selectedIndex ===
|
|
193
|
+
else if (this._tabControl.selectedIndex === tabIndex.code)
|
|
183
194
|
this.codeView.update(this._content, this.designerView.instanceServiceContainer);
|
|
184
|
-
else if (this._tabControl.selectedIndex ===
|
|
195
|
+
else if (this._tabControl.selectedIndex === tabIndex.split) {
|
|
185
196
|
}
|
|
186
|
-
else if (this._tabControl.selectedIndex ===
|
|
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 ===
|
|
203
|
+
if (this._tabControl.selectedIndex === tabIndex.designer)
|
|
193
204
|
this._content = this.designerView.getHTML();
|
|
194
|
-
else if (this._tabControl.selectedIndex ===
|
|
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 ===
|
|
227
|
+
if (i.newIndex === tabIndex.designer || i.newIndex === tabIndex.split)
|
|
217
228
|
this.updateDesignerHtml();
|
|
218
|
-
if (i.newIndex ===
|
|
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 ===
|
|
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 ===
|
|
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 {
|
|
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
|
|
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 {
|
|
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,
|
|
13
|
-
startPlace(event: MouseEvent,
|
|
14
|
-
place(event: MouseEvent,
|
|
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,
|
|
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,
|
|
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 (
|
|
39
|
+
if (designerCanvas.alignOnGrid) {
|
|
38
40
|
let p = getDesignItemCurrentPos(item, 'position');
|
|
39
|
-
p.x = p.x %
|
|
40
|
-
p.y = p.y %
|
|
41
|
-
trackX = Math.round(trackX /
|
|
42
|
-
trackY = Math.round(trackY /
|
|
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 (
|
|
46
|
+
else if (designerCanvas.alignOnSnap) {
|
|
45
47
|
let rect = item.element.getBoundingClientRect();
|
|
46
|
-
let newPos =
|
|
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,
|
|
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 (
|
|
68
|
-
trackX = Math.round(trackX /
|
|
69
|
-
trackY = Math.round(trackY /
|
|
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 (
|
|
72
|
-
let newPos =
|
|
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,
|
|
91
|
+
startPlace(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items) {
|
|
90
92
|
}
|
|
91
|
-
place(event,
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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,
|
|
14
|
-
place(event: MouseEvent,
|
|
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 {
|
|
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,
|
|
16
|
-
startPlace(event: MouseEvent,
|
|
17
|
-
place(event: MouseEvent,
|
|
18
|
-
finishPlace(event: MouseEvent,
|
|
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,
|
|
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,
|
|
47
|
+
return defaultPlacementService.placePoint(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items);
|
|
48
48
|
}
|
|
49
|
-
startPlace(event,
|
|
49
|
+
startPlace(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items) {
|
|
50
50
|
}
|
|
51
|
-
place(event,
|
|
52
|
-
const pos =
|
|
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,
|
|
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
|
-
|
|
141
|
+
designerCanvas.extensionManager.refreshAllExtensions([container]);
|
|
142
142
|
}
|
|
143
|
-
finishPlace(event,
|
|
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 {
|
|
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,
|
|
16
|
-
startPlace(event: MouseEvent,
|
|
17
|
-
place(event: MouseEvent,
|
|
18
|
-
finishPlace(event: MouseEvent,
|
|
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,
|
|
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,
|
|
51
|
+
return defaultPlacementService.placePoint(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items);
|
|
52
52
|
}
|
|
53
|
-
startPlace(event,
|
|
53
|
+
startPlace(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items) {
|
|
54
54
|
}
|
|
55
|
-
place(event,
|
|
55
|
+
place(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items) {
|
|
56
56
|
const gridInformation = calculateGridInformation(container);
|
|
57
|
-
const pos =
|
|
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
|
-
|
|
82
|
+
designerCanvas.extensionManager.refreshAllExtensions([container]);
|
|
83
83
|
}
|
|
84
|
-
finishPlace(event,
|
|
84
|
+
finishPlace(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items) {
|
|
85
85
|
const gridInformation = calculateGridInformation(container);
|
|
86
|
-
const pos =
|
|
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
|
-
|
|
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,
|
|
14
|
-
startPlace(event: MouseEvent,
|
|
15
|
-
place(event: MouseEvent,
|
|
16
|
-
finishPlace(event: MouseEvent,
|
|
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
|
-
|
|
168
|
-
const
|
|
169
|
-
|
|
170
|
-
|
|
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
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
designItem
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
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;
|
package/dist/elements/widgets/designerView/extensions/block/BlockToolbarExtensionProvider.js
CHANGED
|
@@ -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/
|
|
207
|
-
export * from "./elements/widgets/designerView/extensions/
|
|
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/
|
|
148
|
-
export * from "./elements/widgets/designerView/extensions/
|
|
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