@node-projects/web-component-designer 0.1.71 → 0.1.73
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/helper/TransformHelper.d.ts +1 -1
- package/dist/elements/helper/TransformHelper.js +2 -2
- package/dist/elements/services/placementService/SnaplinesProviderService.js +1 -3
- package/dist/elements/widgets/designerView/designerCanvas.js +1 -1
- package/dist/elements/widgets/designerView/designerView.js +0 -1
- package/dist/elements/widgets/designerView/extensions/AbstractExtension.d.ts +1 -0
- package/dist/elements/widgets/designerView/extensions/AbstractExtension.js +3 -0
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.d.ts +1 -0
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +51 -23
- package/dist/elements/widgets/designerView/extensions/IExtensionManger.d.ts +1 -0
- package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +4 -0
- package/dist/elements/widgets/designerView/extensions/RotateExtension.d.ts +3 -3
- package/dist/elements/widgets/designerView/extensions/RotateExtension.js +10 -6
- package/dist/elements/widgets/designerView/extensions/SelectionDefaultExtension.js +4 -0
- package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.d.ts +2 -2
- package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.js +12 -6
- package/package.json +1 -1
|
@@ -12,7 +12,7 @@ export declare function addVectors(vectorA: [number, number], vectorB: [number,
|
|
|
12
12
|
export declare function getDesignerCanvasNormalizedTransformedOriginWithoutParentTransformation(element: HTMLElement, designerCanvas: IDesignerCanvas): DOMPoint;
|
|
13
13
|
export declare function getResultingTransformationBetweenElementAndAllAncestors(element: HTMLElement, ancestor: HTMLElement, excludeAncestor?: boolean, cache?: Record<string | symbol, any>): DOMMatrix;
|
|
14
14
|
export declare function getByParentsTransformedPointRelatedToCanvas(element: HTMLElement, point: DOMPoint, designerCanvas: IDesignerCanvas, cache?: Record<string | symbol, any>): IPoint;
|
|
15
|
-
export declare function getDesignerCanvasNormalizedTransformedPoint(element: HTMLElement, point: IPoint, designerCanvas: IDesignerCanvas): IPoint;
|
|
15
|
+
export declare function getDesignerCanvasNormalizedTransformedPoint(element: HTMLElement, point: IPoint, designerCanvas: IDesignerCanvas, cache: Record<string | symbol, any>): IPoint;
|
|
16
16
|
export declare function getElementSize(element: HTMLElement): {
|
|
17
17
|
width: number;
|
|
18
18
|
height: number;
|
|
@@ -177,8 +177,8 @@ export function getByParentsTransformedPointRelatedToCanvas(element, point, desi
|
|
|
177
177
|
}
|
|
178
178
|
return byParentTransformedPointRelatedToCanvas;
|
|
179
179
|
}
|
|
180
|
-
export function getDesignerCanvasNormalizedTransformedPoint(element, point, designerCanvas) {
|
|
181
|
-
return getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, { x: -point.x, y: -point.y }, designerCanvas)[0];
|
|
180
|
+
export function getDesignerCanvasNormalizedTransformedPoint(element, point, designerCanvas, cache) {
|
|
181
|
+
return getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, { x: -point.x, y: -point.y }, designerCanvas, cache)[0];
|
|
182
182
|
}
|
|
183
183
|
export function getElementSize(element) {
|
|
184
184
|
let width = element.offsetWidth;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { DomHelper } from '@node-projects/base-custom-webcomponent';
|
|
2
1
|
export const provideSnaplinesWithDistance = 'provideSnaplinesWithDistance';
|
|
3
2
|
export const provideSnaplinesWithDistanceDistance = 'provideSnaplinesWithDistanceDistance';
|
|
4
3
|
export class SnaplinesProviderService {
|
|
@@ -13,8 +12,7 @@ export class SnaplinesProviderService {
|
|
|
13
12
|
const positionsMiddleH = [];
|
|
14
13
|
const positionsV = [];
|
|
15
14
|
const positionsMiddleV = [];
|
|
16
|
-
let
|
|
17
|
-
for (let n of DomHelper.getAllChildNodes(containerItem.element, false, ignoreElements)) {
|
|
15
|
+
for (let n of containerItem.querySelectorAll('*')) {
|
|
18
16
|
if (!ignMap.has(n)) {
|
|
19
17
|
const p = n.getBoundingClientRect();
|
|
20
18
|
const pLeft = (p.x - outerRect.x) / canvas.scaleFactor;
|
|
@@ -439,7 +439,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
439
439
|
let maxX = 0, maxY = 0, minX = 0, minY = 0;
|
|
440
440
|
this.canvasOffset = { x: 0, y: 0 };
|
|
441
441
|
this.zoomFactor = 1;
|
|
442
|
-
for (let n of
|
|
442
|
+
for (let n of this.rootDesignItem.querySelectorAll('*')) {
|
|
443
443
|
if (n instanceof Element) {
|
|
444
444
|
const rect = n.getBoundingClientRect();
|
|
445
445
|
minX = minX < rect.x ? minX : rect.x;
|
|
@@ -314,7 +314,6 @@ export class DesignerView extends BaseCustomWebComponentConstructorAppend {
|
|
|
314
314
|
this._toolbar.initialize(this.serviceContainer, this);
|
|
315
315
|
}
|
|
316
316
|
getHTML() {
|
|
317
|
-
//this.instanceServiceContainer.selectionService.setSelectedElements(null);
|
|
318
317
|
if (this._designerCanvas.rootDesignItem.childCount > 0) {
|
|
319
318
|
return DomConverter.ConvertToString(Array.from(this._designerCanvas.rootDesignItem.children()), true, true);
|
|
320
319
|
}
|
|
@@ -9,4 +9,5 @@ export declare abstract class AbstractExtension extends AbstractExtensionBase im
|
|
|
9
9
|
abstract extend(cache: Record<string | symbol, any>, event?: Event): any;
|
|
10
10
|
abstract refresh(cache: Record<string | symbol, any>, event?: Event): any;
|
|
11
11
|
abstract dispose(): any;
|
|
12
|
+
remove(): void;
|
|
12
13
|
}
|
|
@@ -12,6 +12,7 @@ export declare class ExtensionManager implements IExtensionManager {
|
|
|
12
12
|
private _selectedElementsChanged;
|
|
13
13
|
applyExtension(designItem: IDesignItem, extensionType: ExtensionType, event?: Event, recursive?: boolean): IDesignerExtension[];
|
|
14
14
|
applyExtensions(designItems: IDesignItem[], extensionType: ExtensionType, event?: Event, recursive?: boolean): void;
|
|
15
|
+
removeExtensionInstance(designItem: IDesignItem, extension: IDesignerExtension): void;
|
|
15
16
|
removeExtension(designItem: IDesignItem, extensionType?: ExtensionType): void;
|
|
16
17
|
removeExtensions(designItems: IDesignItem[], recursive: boolean, extensionType?: ExtensionType): void;
|
|
17
18
|
refreshExtension(designItem: IDesignItem, extensionType?: ExtensionType, event?: Event): void;
|
|
@@ -133,6 +133,24 @@ export class ExtensionManager {
|
|
|
133
133
|
}
|
|
134
134
|
this.designerCanvas.overlayLayer.endBatch();
|
|
135
135
|
}
|
|
136
|
+
removeExtensionInstance(designItem, extension) {
|
|
137
|
+
for (let e of designItem.appliedDesignerExtensions) {
|
|
138
|
+
const idx = e[1].indexOf(extension);
|
|
139
|
+
if (idx >= 0) {
|
|
140
|
+
try {
|
|
141
|
+
extension.dispose();
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
console.error(err);
|
|
145
|
+
}
|
|
146
|
+
e[1].splice(idx, 1);
|
|
147
|
+
if (e[1].length == 0)
|
|
148
|
+
designItem.appliedDesignerExtensions.delete(e[0]);
|
|
149
|
+
if (!designItem.appliedDesignerExtensions.size)
|
|
150
|
+
this.designItemsWithExtentions.delete(designItem);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
136
154
|
removeExtension(designItem, extensionType) {
|
|
137
155
|
if (designItem) {
|
|
138
156
|
if (extensionType) {
|
|
@@ -218,15 +236,20 @@ export class ExtensionManager {
|
|
|
218
236
|
refreshExtension(designItem, extensionType, event) {
|
|
219
237
|
if (designItem) {
|
|
220
238
|
if (extensionType) {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
|
|
239
|
+
if (!designItem.element.isConnected) {
|
|
240
|
+
this.removeExtension(designItem, extensionType);
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
let exts = designItem.appliedDesignerExtensions.get(extensionType);
|
|
244
|
+
if (exts) {
|
|
245
|
+
const cache = {};
|
|
246
|
+
for (let e of exts) {
|
|
247
|
+
try {
|
|
248
|
+
e.refresh(cache, event);
|
|
249
|
+
}
|
|
250
|
+
catch (err) {
|
|
251
|
+
console.error(err);
|
|
252
|
+
}
|
|
230
253
|
}
|
|
231
254
|
}
|
|
232
255
|
}
|
|
@@ -253,22 +276,27 @@ export class ExtensionManager {
|
|
|
253
276
|
if (extensionType) {
|
|
254
277
|
const cache = {};
|
|
255
278
|
outer1: for (let i of designItems) {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
if (
|
|
265
|
-
|
|
266
|
-
|
|
279
|
+
if (!i.element.isConnected) {
|
|
280
|
+
this.removeExtension(i, extensionType);
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
let exts = i.appliedDesignerExtensions.get(extensionType);
|
|
284
|
+
if (exts) {
|
|
285
|
+
for (let e of exts) {
|
|
286
|
+
try {
|
|
287
|
+
if (e != ignoredExtension)
|
|
288
|
+
e.refresh(cache, event);
|
|
289
|
+
if (timeout) {
|
|
290
|
+
const end = performance.now();
|
|
291
|
+
if (end - start > timeout) {
|
|
292
|
+
console.warn("refreshExtensions() took too long, stopped refreshing");
|
|
293
|
+
break outer1;
|
|
294
|
+
}
|
|
267
295
|
}
|
|
268
296
|
}
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
297
|
+
catch (err) {
|
|
298
|
+
console.error(err);
|
|
299
|
+
}
|
|
272
300
|
}
|
|
273
301
|
}
|
|
274
302
|
}
|
|
@@ -6,6 +6,7 @@ export interface IExtensionManager {
|
|
|
6
6
|
applyExtensions(designItems: IDesignItem[], extensionType: ExtensionType, event?: Event, recursive?: boolean): any;
|
|
7
7
|
removeExtension(designItem: IDesignItem, extensionType?: ExtensionType): any;
|
|
8
8
|
removeExtensions(designItems: IDesignItem[], recursive: boolean, extensionType?: ExtensionType): any;
|
|
9
|
+
removeExtensionInstance(designItem: IDesignItem, extension: IDesignerExtension): any;
|
|
9
10
|
refreshExtension(designItem: IDesignItem, extensionType?: ExtensionType, event?: Event): any;
|
|
10
11
|
refreshExtensions(designItems: IDesignItem[], extensionType?: ExtensionType, event?: Event, ignoredExtension?: IDesignerExtension, timeout?: number): any;
|
|
11
12
|
refreshAllExtensions(designItems: IDesignItem[], ignoredExtension?: IDesignerExtension): any;
|
|
@@ -28,6 +28,10 @@ export class ResizeExtension extends AbstractExtension {
|
|
|
28
28
|
refresh(cache, event) {
|
|
29
29
|
//#region Resizer circles
|
|
30
30
|
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas, cache);
|
|
31
|
+
if (isNaN(transformedCornerPoints[0].x) || isNaN(transformedCornerPoints[1].x)) {
|
|
32
|
+
this.remove();
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
31
35
|
this._circle1 = this._drawResizerOverlay(transformedCornerPoints[0].x, transformedCornerPoints[0].y, 'nw-resize', this._circle1);
|
|
32
36
|
this._circle2 = this._drawResizerOverlay((transformedCornerPoints[0].x + (transformedCornerPoints[1].x - transformedCornerPoints[0].x) / 2), (transformedCornerPoints[0].y + (transformedCornerPoints[1].y - transformedCornerPoints[0].y) / 2), 'n-resize', this._circle2);
|
|
33
37
|
this._circle3 = this._drawResizerOverlay(transformedCornerPoints[1].x, transformedCornerPoints[1].y, 'ne-resize', this._circle3);
|
|
@@ -10,9 +10,9 @@ export declare class RotateExtension extends AbstractExtension {
|
|
|
10
10
|
private _textAngle;
|
|
11
11
|
private _actualRotationAngle;
|
|
12
12
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
13
|
-
extend(): void;
|
|
14
|
-
refresh(): void;
|
|
15
|
-
_drawRotateOverlay(itemRect: DOMRect, oldRotateIcon: any): any;
|
|
13
|
+
extend(cache: Record<string | symbol, any>, event?: Event): void;
|
|
14
|
+
refresh(cache: Record<string | symbol, any>, event?: Event): void;
|
|
15
|
+
_drawRotateOverlay(itemRect: DOMRect, oldRotateIcon: any, cache: Record<string | symbol, any>): any;
|
|
16
16
|
_pointerActionTypeRotate(event: PointerEvent): void;
|
|
17
17
|
dispose(): void;
|
|
18
18
|
}
|
|
@@ -11,17 +11,21 @@ export class RotateExtension extends AbstractExtension {
|
|
|
11
11
|
constructor(extensionManager, designerView, extendedItem) {
|
|
12
12
|
super(extensionManager, designerView, extendedItem);
|
|
13
13
|
}
|
|
14
|
-
extend() {
|
|
15
|
-
this.refresh();
|
|
14
|
+
extend(cache, event) {
|
|
15
|
+
this.refresh(cache, event);
|
|
16
16
|
}
|
|
17
|
-
refresh() {
|
|
17
|
+
refresh(cache, event) {
|
|
18
18
|
const rect = this.extendedItem.element.getBoundingClientRect();
|
|
19
19
|
this._actualRotationAngle = getRotationAngleFromMatrix(null, new DOMMatrix(this.extendedItem.element.style.transform));
|
|
20
|
-
this._rotateIcon = this._drawRotateOverlay(rect, this._rotateIcon);
|
|
20
|
+
this._rotateIcon = this._drawRotateOverlay(rect, this._rotateIcon, cache);
|
|
21
21
|
}
|
|
22
|
-
_drawRotateOverlay(itemRect, oldRotateIcon) {
|
|
23
|
-
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, { x: 10, y: 10 }, this.designerCanvas);
|
|
22
|
+
_drawRotateOverlay(itemRect, oldRotateIcon, cache) {
|
|
23
|
+
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, { x: 10, y: 10 }, this.designerCanvas, cache);
|
|
24
24
|
let rotateIconPosition = transformedCornerPoints[0];
|
|
25
|
+
if (isNaN(transformedCornerPoints[0].x) || isNaN(transformedCornerPoints[1].x)) {
|
|
26
|
+
this.remove();
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
25
29
|
if (!oldRotateIcon) {
|
|
26
30
|
const g = document.createElementNS("http://www.w3.org/2000/svg", "g");
|
|
27
31
|
const line = document.createElementNS("http://www.w3.org/2000/svg", "circle");
|
|
@@ -20,6 +20,10 @@ export class SelectionDefaultExtension extends AbstractExtension {
|
|
|
20
20
|
}
|
|
21
21
|
else
|
|
22
22
|
transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas, cache);
|
|
23
|
+
if (isNaN(transformedCornerPoints[0].x) || isNaN(transformedCornerPoints[1].x)) {
|
|
24
|
+
this.remove();
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
23
27
|
this._line1 = this._drawLine(transformedCornerPoints[0].x, transformedCornerPoints[0].y, transformedCornerPoints[1].x, transformedCornerPoints[1].y, 'svg-selection', this._line1);
|
|
24
28
|
this._line2 = this._drawLine(transformedCornerPoints[0].x, transformedCornerPoints[0].y, transformedCornerPoints[2].x, transformedCornerPoints[2].y, 'svg-selection', this._line2);
|
|
25
29
|
this._line3 = this._drawLine(transformedCornerPoints[1].x, transformedCornerPoints[1].y, transformedCornerPoints[3].x, transformedCornerPoints[3].y, 'svg-selection', this._line3);
|
|
@@ -8,8 +8,8 @@ export declare class TransformOriginExtension extends AbstractExtension {
|
|
|
8
8
|
private _circle2;
|
|
9
9
|
private _oldValue;
|
|
10
10
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
11
|
-
extend(): void;
|
|
11
|
+
extend(cache: Record<string | symbol, any>, event?: Event): void;
|
|
12
12
|
pointerEvent(event: PointerEvent): void;
|
|
13
|
-
refresh(): void;
|
|
13
|
+
refresh(cache: Record<string | symbol, any>, event?: Event): void;
|
|
14
14
|
dispose(): void;
|
|
15
15
|
}
|
|
@@ -10,10 +10,14 @@ export class TransformOriginExtension extends AbstractExtension {
|
|
|
10
10
|
constructor(extensionManager, designerView, extendedItem) {
|
|
11
11
|
super(extensionManager, designerView, extendedItem);
|
|
12
12
|
}
|
|
13
|
-
extend() {
|
|
13
|
+
extend(cache, event) {
|
|
14
14
|
const computed = getComputedStyle(this.extendedItem.element);
|
|
15
15
|
const to = computed.transformOrigin.split(' '); // This value remains the same regardless of scalefactor
|
|
16
|
-
const toDOMPoint = getDesignerCanvasNormalizedTransformedPoint(this.extendedItem.element, { x: parseFloat(to[0]) * this.designerCanvas.zoomFactor, y: parseFloat(to[1]) * this.designerCanvas.zoomFactor }, this.designerCanvas);
|
|
16
|
+
const toDOMPoint = getDesignerCanvasNormalizedTransformedPoint(this.extendedItem.element, { x: parseFloat(to[0]) * this.designerCanvas.zoomFactor, y: parseFloat(to[1]) * this.designerCanvas.zoomFactor }, this.designerCanvas, cache);
|
|
17
|
+
if (isNaN(toDOMPoint.x) || isNaN(toDOMPoint.y)) {
|
|
18
|
+
this.remove();
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
17
21
|
this._circle = this._drawCircle(toDOMPoint.x, toDOMPoint.y, 5 / this.designerCanvas.zoomFactor, 'svg-transform-origin');
|
|
18
22
|
this._circle.style.strokeWidth = (1 / this.designerCanvas.zoomFactor).toString();
|
|
19
23
|
this._circle.style.cursor = 'pointer';
|
|
@@ -78,15 +82,17 @@ export class TransformOriginExtension extends AbstractExtension {
|
|
|
78
82
|
}
|
|
79
83
|
else
|
|
80
84
|
this.extendedItem.updateStyleInSheetOrLocal('transform-origin', newX + 'px' + ' ' + newY + 'px');
|
|
81
|
-
this.refresh();
|
|
85
|
+
this.refresh(null, null);
|
|
82
86
|
this._startPos = null;
|
|
83
87
|
}
|
|
84
88
|
break;
|
|
85
89
|
}
|
|
86
90
|
}
|
|
87
|
-
refresh() {
|
|
88
|
-
this.
|
|
89
|
-
|
|
91
|
+
refresh(cache, event) {
|
|
92
|
+
if (this._circle) {
|
|
93
|
+
this._removeAllOverlays();
|
|
94
|
+
this.extend(cache, event);
|
|
95
|
+
}
|
|
90
96
|
}
|
|
91
97
|
dispose() {
|
|
92
98
|
this._removeAllOverlays();
|