@node-projects/web-component-designer 0.1.168 → 0.1.170
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 +23 -9
- package/dist/elements/helper/contextMenu/ContextMenu.js +1 -1
- package/dist/elements/item/DesignItem.d.ts +1 -1
- package/dist/elements/services/stylesheetService/AbstractStylesheetService.d.ts +1 -0
- package/dist/elements/services/stylesheetService/AbstractStylesheetService.js +12 -4
- package/dist/elements/widgets/designerView/designerCanvas.d.ts +0 -3
- package/dist/elements/widgets/designerView/designerCanvas.js +4 -13
- package/dist/elements/widgets/designerView/extensions/AbstractExtensionBase.d.ts +1 -0
- package/dist/elements/widgets/designerView/extensions/AbstractExtensionBase.js +8 -0
- package/dist/elements/widgets/designerView/extensions/MarginExtension.d.ts +3 -2
- package/dist/elements/widgets/designerView/extensions/MarginExtension.js +13 -10
- package/dist/elements/widgets/designerView/extensions/MarginExtensionProvider.js +1 -1
- package/dist/elements/widgets/designerView/extensions/MultipleSelectionRectExtension.js +12 -10
- package/dist/elements/widgets/designerView/extensions/PaddingExtension.d.ts +3 -2
- package/dist/elements/widgets/designerView/extensions/PaddingExtension.js +21 -18
- package/dist/elements/widgets/designerView/extensions/PaddingExtensionProvider.js +1 -1
- package/dist/elements/widgets/designerView/tools/PointerTool.js +1 -1
- package/package.json +3 -1
|
@@ -17,6 +17,6 @@ export declare function getElementSize(element: HTMLElement): {
|
|
|
17
17
|
width: number;
|
|
18
18
|
height: number;
|
|
19
19
|
};
|
|
20
|
-
export declare function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element: HTMLElement, untransformedCornerPointsOffset: IPoint | null, designerCanvas: IDesignerCanvas, cache?: Record<string | symbol, any>): [DOMPoint, DOMPoint, DOMPoint, DOMPoint];
|
|
20
|
+
export declare function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element: HTMLElement, untransformedCornerPointsOffset: IPoint | [IPoint, IPoint, IPoint, IPoint] | null, designerCanvas: IDesignerCanvas, cache?: Record<string | symbol, any>): [DOMPoint, DOMPoint, DOMPoint, DOMPoint];
|
|
21
21
|
export declare function extractTranslationFromDOMMatrix(matrix: DOMMatrix): DOMPoint;
|
|
22
22
|
export declare function extractRotationAngleFromDOMMatrix(matrix: DOMMatrix): number;
|
|
@@ -193,12 +193,26 @@ export function getElementSize(element) {
|
|
|
193
193
|
}
|
|
194
194
|
return { width, height };
|
|
195
195
|
}
|
|
196
|
+
const nullOffsetArray = [{ x: 0, y: 0 }, { x: 0, y: 0 }, { x: 0, y: 0 }, { x: 0, y: 0 }];
|
|
196
197
|
export function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, untransformedCornerPointsOffset, designerCanvas, cache) {
|
|
197
198
|
const topleft = 0;
|
|
198
199
|
const topright = 1;
|
|
199
200
|
const bottomleft = 2;
|
|
200
201
|
const bottomright = 3;
|
|
201
|
-
|
|
202
|
+
let intUntransformedCornerPointsOffset = nullOffsetArray;
|
|
203
|
+
if (untransformedCornerPointsOffset != null) {
|
|
204
|
+
if (Array.isArray(untransformedCornerPointsOffset)) {
|
|
205
|
+
const v0 = { x: untransformedCornerPointsOffset[0].x / designerCanvas.scaleFactor, y: untransformedCornerPointsOffset[0].y / designerCanvas.scaleFactor };
|
|
206
|
+
const v1 = { x: untransformedCornerPointsOffset[1].x / designerCanvas.scaleFactor, y: untransformedCornerPointsOffset[1].y / designerCanvas.scaleFactor };
|
|
207
|
+
const v2 = { x: untransformedCornerPointsOffset[2].x / designerCanvas.scaleFactor, y: untransformedCornerPointsOffset[2].y / designerCanvas.scaleFactor };
|
|
208
|
+
const v3 = { x: untransformedCornerPointsOffset[3].x / designerCanvas.scaleFactor, y: untransformedCornerPointsOffset[3].y / designerCanvas.scaleFactor };
|
|
209
|
+
intUntransformedCornerPointsOffset = [v0, v1, v2, v3];
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
const v = { x: untransformedCornerPointsOffset.x / designerCanvas.scaleFactor, y: untransformedCornerPointsOffset.y / designerCanvas.scaleFactor };
|
|
213
|
+
intUntransformedCornerPointsOffset = [v, v, v, v];
|
|
214
|
+
}
|
|
215
|
+
}
|
|
202
216
|
const p0Offsets = getElementsWindowOffsetWithoutSelfAndParentTransformations(element, designerCanvas.zoomFactor, cache);
|
|
203
217
|
const p0OffsetsRelatedToCanvas = DOMPoint.fromPoint({
|
|
204
218
|
x: p0Offsets.offsetLeft - designerCanvas.containerBoundingRect.left,
|
|
@@ -207,20 +221,20 @@ export function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, u
|
|
|
207
221
|
let { width, height } = getElementSize(element);
|
|
208
222
|
const elementWithoutTransformCornerDOMPoints = [];
|
|
209
223
|
elementWithoutTransformCornerDOMPoints[topleft] = DOMPoint.fromPoint({
|
|
210
|
-
x: p0OffsetsRelatedToCanvas.x - intUntransformedCornerPointsOffset.x,
|
|
211
|
-
y: p0OffsetsRelatedToCanvas.y - intUntransformedCornerPointsOffset.y
|
|
224
|
+
x: p0OffsetsRelatedToCanvas.x - intUntransformedCornerPointsOffset[0].x,
|
|
225
|
+
y: p0OffsetsRelatedToCanvas.y - intUntransformedCornerPointsOffset[0].y
|
|
212
226
|
});
|
|
213
227
|
elementWithoutTransformCornerDOMPoints[topright] = DOMPoint.fromPoint({
|
|
214
|
-
x: p0OffsetsRelatedToCanvas.x + width + intUntransformedCornerPointsOffset.x,
|
|
215
|
-
y: p0OffsetsRelatedToCanvas.y - intUntransformedCornerPointsOffset.y
|
|
228
|
+
x: p0OffsetsRelatedToCanvas.x + width + intUntransformedCornerPointsOffset[1].x,
|
|
229
|
+
y: p0OffsetsRelatedToCanvas.y - intUntransformedCornerPointsOffset[1].y
|
|
216
230
|
});
|
|
217
231
|
elementWithoutTransformCornerDOMPoints[bottomleft] = DOMPoint.fromPoint({
|
|
218
|
-
x: p0OffsetsRelatedToCanvas.x - intUntransformedCornerPointsOffset.x,
|
|
219
|
-
y: p0OffsetsRelatedToCanvas.y + height + intUntransformedCornerPointsOffset.y
|
|
232
|
+
x: p0OffsetsRelatedToCanvas.x - intUntransformedCornerPointsOffset[2].x,
|
|
233
|
+
y: p0OffsetsRelatedToCanvas.y + height + intUntransformedCornerPointsOffset[2].y
|
|
220
234
|
});
|
|
221
235
|
elementWithoutTransformCornerDOMPoints[bottomright] = DOMPoint.fromPoint({
|
|
222
|
-
x: p0OffsetsRelatedToCanvas.x + width + intUntransformedCornerPointsOffset.x,
|
|
223
|
-
y: p0OffsetsRelatedToCanvas.y + height + intUntransformedCornerPointsOffset.y
|
|
236
|
+
x: p0OffsetsRelatedToCanvas.x + width + intUntransformedCornerPointsOffset[3].x,
|
|
237
|
+
y: p0OffsetsRelatedToCanvas.y + height + intUntransformedCornerPointsOffset[3].y
|
|
224
238
|
});
|
|
225
239
|
const toSplit = getComputedStyle(element).transformOrigin.split(' ');
|
|
226
240
|
const tfX = parseFloat(toSplit[0]);
|
|
@@ -316,7 +316,7 @@ export class ContextMenu {
|
|
|
316
316
|
close() {
|
|
317
317
|
this._menuElement.remove();
|
|
318
318
|
window.removeEventListener("keyup", this._windowKeyUp);
|
|
319
|
-
window.removeEventListener("mousedown", this._windowDown);
|
|
319
|
+
window.removeEventListener("mousedown", this._windowDown, true);
|
|
320
320
|
window.removeEventListener("resize", this._windowResize);
|
|
321
321
|
setTimeout(() => window.removeEventListener("contextmenu", this._windowDown), 10);
|
|
322
322
|
}
|
|
@@ -24,7 +24,7 @@ export declare class DesignItem implements IDesignItem {
|
|
|
24
24
|
nodeReplaced: TypedEvent<void>;
|
|
25
25
|
get window(): Window & typeof globalThis;
|
|
26
26
|
get document(): Document;
|
|
27
|
-
get usableContainer(): Element |
|
|
27
|
+
get usableContainer(): Element | ShadowRoot | Document;
|
|
28
28
|
clone(): Promise<IDesignItem>;
|
|
29
29
|
allMatching(selectors: string): Generator<IDesignItem, void, undefined>;
|
|
30
30
|
replaceNode(newNode: Node): void;
|
|
@@ -44,5 +44,6 @@ export declare abstract class AbstractStylesheetService implements IStylesheetSe
|
|
|
44
44
|
changeSource: 'extern' | 'styleupdate' | 'undo';
|
|
45
45
|
}>;
|
|
46
46
|
stylesheetsChanged: TypedEvent<void>;
|
|
47
|
+
static patchStylesheetSelectorForDesigner(text: string): string;
|
|
47
48
|
protected elementMatchesASelector(designItem: IDesignItem, selectors: string[]): boolean;
|
|
48
49
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TypedEvent } from "@node-projects/base-custom-webcomponent";
|
|
2
|
-
import {
|
|
2
|
+
import { forceActiveAttributeName, forceFocusAttributeName, forceFocusVisibleAttributeName, forceFocusWithinAttributeName, forceHoverAttributeName, forceVisitedAttributeName } from "../../item/DesignItem.js";
|
|
3
3
|
export class AbstractStylesheetService {
|
|
4
4
|
_stylesheets = new Map();
|
|
5
5
|
_documentStylesheets = new Map();
|
|
@@ -100,14 +100,22 @@ export class AbstractStylesheetService {
|
|
|
100
100
|
}
|
|
101
101
|
stylesheetChanged = new TypedEvent();
|
|
102
102
|
stylesheetsChanged = new TypedEvent();
|
|
103
|
+
static patchStylesheetSelectorForDesigner(text) {
|
|
104
|
+
return text.replaceAll(':hover', '[' + forceHoverAttributeName + ']')
|
|
105
|
+
.replaceAll(':active', '[' + forceActiveAttributeName + ']')
|
|
106
|
+
.replaceAll(':visited', '[' + forceVisitedAttributeName + ']')
|
|
107
|
+
.replaceAll(':focus', '[' + forceFocusAttributeName + ']')
|
|
108
|
+
.replaceAll(':focus-within', '[' + forceFocusWithinAttributeName + ']')
|
|
109
|
+
.replaceAll(':focus-visible', '[' + forceFocusVisibleAttributeName + ']');
|
|
110
|
+
}
|
|
103
111
|
elementMatchesASelector(designItem, selectors) {
|
|
104
112
|
if (designItem == null)
|
|
105
113
|
return true;
|
|
106
114
|
for (let selector of selectors) {
|
|
107
|
-
if (selector == ':host') {
|
|
115
|
+
/*if (selector == ':host') {
|
|
108
116
|
selector = DesignerCanvas.cssprefixConstant;
|
|
109
|
-
}
|
|
110
|
-
if (designItem.element.matches(selector))
|
|
117
|
+
}*/
|
|
118
|
+
if (designItem.element.matches(AbstractStylesheetService.patchStylesheetSelectorForDesigner(selector)))
|
|
111
119
|
return true;
|
|
112
120
|
}
|
|
113
121
|
return false;
|
|
@@ -36,7 +36,6 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
|
|
|
36
36
|
private _scaleFactor;
|
|
37
37
|
private _canvasOffset;
|
|
38
38
|
private _additionalStyle;
|
|
39
|
-
private _currentContextMenu;
|
|
40
39
|
private _backgroundImage;
|
|
41
40
|
private _enableSelectTextNodesOnClick;
|
|
42
41
|
private _moveGroup;
|
|
@@ -59,7 +58,6 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
|
|
|
59
58
|
private _outercanvas2;
|
|
60
59
|
private _lastHoverDesignItem;
|
|
61
60
|
private _firstConnect;
|
|
62
|
-
static cssprefixConstant: string;
|
|
63
61
|
static readonly style: CSSStyleSheet;
|
|
64
62
|
static readonly template: HTMLTemplateElement;
|
|
65
63
|
extensionManager: IExtensionManager;
|
|
@@ -132,7 +130,6 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
|
|
|
132
130
|
private transformPoint;
|
|
133
131
|
elementsFromPoint(x: number, y: number): Element[];
|
|
134
132
|
getElementAtPoint(point: IPoint, ignoreElementCallback?: (element: HTMLElement) => boolean): HTMLElement;
|
|
135
|
-
_patchStylesheetForDesigner(text: string): string;
|
|
136
133
|
private _hoverElement;
|
|
137
134
|
showHoverExtension(element: Element, event: Event): void;
|
|
138
135
|
private _onWheel;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EventNames } from '../../../enums/EventNames.js';
|
|
2
2
|
import { InstanceServiceContainer } from '../../services/InstanceServiceContainer.js';
|
|
3
|
-
import { DesignItem,
|
|
3
|
+
import { DesignItem, forceHoverAttributeName } from '../../item/DesignItem.js';
|
|
4
4
|
import { BaseCustomWebComponentLazyAppend, css, html, TypedEvent } from '@node-projects/base-custom-webcomponent';
|
|
5
5
|
import { dragDropFormatNameBindingObject } from '../../../Constants.js';
|
|
6
6
|
import { InsertAction } from '../../services/undoService/transactionItems/InsertAction.js';
|
|
@@ -22,6 +22,7 @@ import { SetDesignItemsAction } from '../../services/undoService/transactionItem
|
|
|
22
22
|
import { filterChildPlaceItems } from '../../helper/LayoutHelper.js';
|
|
23
23
|
import { TouchGestureHelper } from '../../helper/TouchGestureHelper.js';
|
|
24
24
|
import { stylesheetFromString } from '../../helper/StylesheetHelper.js';
|
|
25
|
+
import { AbstractStylesheetService } from '../../services/stylesheetService/AbstractStylesheetService.js';
|
|
25
26
|
export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
26
27
|
// Public Properties
|
|
27
28
|
serviceContainer;
|
|
@@ -64,7 +65,6 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
64
65
|
_scaleFactor = 1; //if scale css property is used this need to be the scale value
|
|
65
66
|
_canvasOffset = { x: 0, y: 0 };
|
|
66
67
|
_additionalStyle;
|
|
67
|
-
_currentContextMenu;
|
|
68
68
|
_backgroundImage;
|
|
69
69
|
_enableSelectTextNodesOnClick = false;
|
|
70
70
|
_moveGroup;
|
|
@@ -112,7 +112,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
112
112
|
_outercanvas2;
|
|
113
113
|
_lastHoverDesignItem;
|
|
114
114
|
_firstConnect;
|
|
115
|
-
static cssprefixConstant = '#node-projects-designer-canvas-canvas ';
|
|
115
|
+
//public static cssprefixConstant = '#node-projects-designer-canvas-canvas ';
|
|
116
116
|
static style = css `
|
|
117
117
|
:host {
|
|
118
118
|
display: block;
|
|
@@ -376,7 +376,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
376
376
|
if (this.instanceServiceContainer.stylesheetService) {
|
|
377
377
|
styles.push(...this.instanceServiceContainer.stylesheetService
|
|
378
378
|
.getStylesheets()
|
|
379
|
-
.map(x => stylesheetFromString(this._window,
|
|
379
|
+
.map(x => stylesheetFromString(this._window, AbstractStylesheetService.patchStylesheetSelectorForDesigner(x.content))));
|
|
380
380
|
}
|
|
381
381
|
if (this._useIframe) {
|
|
382
382
|
this._iframe.contentWindow.document.adoptedStyleSheets = styles;
|
|
@@ -910,7 +910,6 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
910
910
|
}
|
|
911
911
|
}
|
|
912
912
|
showDesignItemContextMenu(designItem, event) {
|
|
913
|
-
this._currentContextMenu?.close();
|
|
914
913
|
const mnuItems = [];
|
|
915
914
|
for (let cme of this.serviceContainer.designerContextMenuExtensions) {
|
|
916
915
|
if (cme.shouldProvideContextmenu(event, this, designItem, 'designer')) {
|
|
@@ -1118,14 +1117,6 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
1118
1117
|
}
|
|
1119
1118
|
return currentElement;
|
|
1120
1119
|
}
|
|
1121
|
-
_patchStylesheetForDesigner(text) {
|
|
1122
|
-
return text.replaceAll(':hover', '[' + forceHoverAttributeName + ']')
|
|
1123
|
-
.replaceAll(':active', '[' + forceActiveAttributeName + ']')
|
|
1124
|
-
.replaceAll(':visited', '[' + forceVisitedAttributeName + ']')
|
|
1125
|
-
.replaceAll(':focus', '[' + forceFocusAttributeName + ']')
|
|
1126
|
-
.replaceAll(':focus-within', '[' + forceFocusWithinAttributeName + ']')
|
|
1127
|
-
.replaceAll(':focus-visible', '[' + forceFocusVisibleAttributeName + ']');
|
|
1128
|
-
}
|
|
1129
1120
|
_hoverElement;
|
|
1130
1121
|
showHoverExtension(element, event) {
|
|
1131
1122
|
const currentDesignItem = DesignItem.GetOrCreateDesignItem(element, element, this.serviceContainer, this.instanceServiceContainer);
|
|
@@ -17,6 +17,7 @@ export declare abstract class AbstractExtensionBase {
|
|
|
17
17
|
protected _drawLine(x1: number, y1: number, x2: number, y2: number, className?: string, line?: SVGLineElement, overlayLayer?: OverlayLayer): SVGLineElement;
|
|
18
18
|
protected _drawCircle(x: number, y: number, radius: number, className?: string, circle?: SVGCircleElement, overlayLayer?: OverlayLayer): SVGCircleElement;
|
|
19
19
|
protected _drawRect(x: number, y: number, w: number, h: number, className?: string, rect?: SVGRectElement, overlayLayer?: OverlayLayer): SVGRectElement;
|
|
20
|
+
protected _drawComplexRect(points: [IPoint, IPoint, IPoint, IPoint], className?: string, rect?: SVGPathElement, overlayLayer?: OverlayLayer): SVGPathElement;
|
|
20
21
|
protected _drawPath(data: string, className?: string, path?: SVGPathElement, overlayLayer?: OverlayLayer): SVGPathElement;
|
|
21
22
|
protected _drawText(text: string, x: number, y: number, className?: string, textEl?: SVGTextElement, overlayLayer?: OverlayLayer): SVGTextElement;
|
|
22
23
|
protected _drawHTML(html: string | HTMLElement, x: number, y: number, w: number, h: number, className?: string, htmlObj?: SVGForeignObjectElement, overlayLayer?: OverlayLayer): SVGForeignObjectElement;
|
|
@@ -66,6 +66,14 @@ export class AbstractExtensionBase {
|
|
|
66
66
|
}
|
|
67
67
|
return newRect;
|
|
68
68
|
}
|
|
69
|
+
_drawComplexRect(points, className, rect, overlayLayer) {
|
|
70
|
+
const d = "M" + points.map(x => x.x + ',' + x.y).join(' ') + 'Z';
|
|
71
|
+
const newRect = this.overlayLayerView.drawPath(this.constructor.name, d, className, rect, overlayLayer);
|
|
72
|
+
if (!rect) {
|
|
73
|
+
this.overlays.push(newRect);
|
|
74
|
+
}
|
|
75
|
+
return newRect;
|
|
76
|
+
}
|
|
69
77
|
_drawPath(data, className, path, overlayLayer) {
|
|
70
78
|
const newPath = this.overlayLayerView.drawPath(this.constructor.name, data, className, path, overlayLayer);
|
|
71
79
|
if (!path) {
|
|
@@ -4,7 +4,8 @@ import { AbstractExtension } from './AbstractExtension.js';
|
|
|
4
4
|
import { IExtensionManager } from './IExtensionManger.js';
|
|
5
5
|
export declare class MarginExtension extends AbstractExtension {
|
|
6
6
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
private _path;
|
|
8
|
+
extend(cache: Record<string | symbol, any>, event?: Event): void;
|
|
9
|
+
refresh(cache: Record<string | symbol, any>, event?: Event): void;
|
|
9
10
|
dispose(): void;
|
|
10
11
|
}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
+
import { getDesignerCanvasNormalizedTransformedCornerDOMPoints } from '../../../helper/TransformHelper.js';
|
|
1
2
|
import { AbstractExtension } from './AbstractExtension.js';
|
|
2
3
|
import { OverlayLayer } from './OverlayLayer.js';
|
|
3
4
|
export class MarginExtension extends AbstractExtension {
|
|
4
5
|
constructor(extensionManager, designerView, extendedItem) {
|
|
5
6
|
super(extensionManager, designerView, extendedItem);
|
|
6
7
|
}
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
_path;
|
|
9
|
+
extend(cache, event) {
|
|
10
|
+
this.refresh(cache, event);
|
|
9
11
|
}
|
|
10
|
-
refresh() {
|
|
11
|
-
const itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
|
|
12
|
+
refresh(cache, event) {
|
|
12
13
|
const computedStyle = getComputedStyle(this.extendedItem.element);
|
|
13
14
|
if (computedStyle.margin !== '0px') {
|
|
14
15
|
const left = Number.parseFloat(computedStyle.marginLeft.replace('px', ''));
|
|
@@ -16,12 +17,14 @@ export class MarginExtension extends AbstractExtension {
|
|
|
16
17
|
const right = Number.parseFloat(computedStyle.marginRight.replace('px', ''));
|
|
17
18
|
const bottom = Number.parseFloat(computedStyle.marginBottom.replace('px', ''));
|
|
18
19
|
if (!isNaN(left) && !isNaN(top) && !isNaN(right) && !isNaN(bottom)) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
this.
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
const p = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas, cache);
|
|
21
|
+
if (!isNaN(p[0].x)) {
|
|
22
|
+
if (this._valuesHaveChanges(left, top, right, bottom, p[0].x, p[0].y, p[1].x, p[1].y, p[2].x, p[2].y, p[3].x, p[3].y)) {
|
|
23
|
+
const p2 = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, [{ x: left, y: top }, { x: right, y: top }, { x: left, y: bottom }, { x: right, y: bottom }], this.designerCanvas, cache);
|
|
24
|
+
let d = "M" + [p[0], p[1], p[3], p[2]].map(x => x.x + ',' + x.y).join(' ') + 'Z ';
|
|
25
|
+
d += "M" + [p2[0], p2[1], p2[3], p2[2]].map(x => x.x + ',' + x.y).join(' ') + 'Z ';
|
|
26
|
+
this._path = this._drawPath(d, 'svg-margin', this._path, OverlayLayer.Background);
|
|
27
|
+
}
|
|
25
28
|
}
|
|
26
29
|
}
|
|
27
30
|
}
|
|
@@ -17,16 +17,18 @@ export class MultipleSelectionRectExtension extends AbstractExtension {
|
|
|
17
17
|
}
|
|
18
18
|
refresh() {
|
|
19
19
|
let selection = this._designerView.instanceServiceContainer.selectionService.selectedElements;
|
|
20
|
-
selection
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
20
|
+
if (selection.length > 1) {
|
|
21
|
+
selection = filterChildPlaceItems(selection);
|
|
22
|
+
let rect = calculateOuterRect(selection, this._designerView);
|
|
23
|
+
this._line1 = this._drawLine(rect.x, rect.y, rect.x + rect.width, rect.y, 'svg-multiple-rect-selection', this._line1, OverlayLayer.Background);
|
|
24
|
+
this._line2 = this._drawLine(rect.x + rect.width, rect.y, rect.x + rect.width, rect.y + rect.height, 'svg-multiple-rect-selection', this._line2, OverlayLayer.Background);
|
|
25
|
+
this._line3 = this._drawLine(rect.x + rect.width, rect.y + rect.height, rect.x, rect.y + rect.height, 'svg-multiple-rect-selection', this._line3, OverlayLayer.Background);
|
|
26
|
+
this._line4 = this._drawLine(rect.x, rect.y + rect.height, rect.x, rect.y, 'svg-multiple-rect-selection', this._line4, OverlayLayer.Background);
|
|
27
|
+
this._line1.style.strokeWidth = (2 / this.designerCanvas.zoomFactor).toString();
|
|
28
|
+
this._line2.style.strokeWidth = (2 / this.designerCanvas.zoomFactor).toString();
|
|
29
|
+
this._line3.style.strokeWidth = (2 / this.designerCanvas.zoomFactor).toString();
|
|
30
|
+
this._line4.style.strokeWidth = (2 / this.designerCanvas.zoomFactor).toString();
|
|
31
|
+
}
|
|
30
32
|
}
|
|
31
33
|
dispose() {
|
|
32
34
|
this._removeAllOverlays();
|
|
@@ -4,7 +4,8 @@ import { AbstractExtension } from './AbstractExtension.js';
|
|
|
4
4
|
import { IExtensionManager } from './IExtensionManger.js';
|
|
5
5
|
export declare class PaddingExtension extends AbstractExtension {
|
|
6
6
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
private _path;
|
|
8
|
+
extend(cache: Record<string | symbol, any>, event?: Event): void;
|
|
9
|
+
refresh(cache: Record<string | symbol, any>, event?: Event): void;
|
|
9
10
|
dispose(): void;
|
|
10
11
|
}
|
|
@@ -1,31 +1,34 @@
|
|
|
1
|
+
import { getDesignerCanvasNormalizedTransformedCornerDOMPoints } from '../../../helper/TransformHelper.js';
|
|
1
2
|
import { AbstractExtension } from './AbstractExtension.js';
|
|
2
3
|
import { OverlayLayer } from './OverlayLayer.js';
|
|
3
4
|
export class PaddingExtension extends AbstractExtension {
|
|
4
5
|
constructor(extensionManager, designerView, extendedItem) {
|
|
5
6
|
super(extensionManager, designerView, extendedItem);
|
|
6
7
|
}
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
_path;
|
|
9
|
+
extend(cache, event) {
|
|
10
|
+
this.refresh(cache, event);
|
|
9
11
|
}
|
|
10
|
-
refresh() {
|
|
11
|
-
const itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
|
|
12
|
+
refresh(cache, event) {
|
|
12
13
|
const computedStyle = getComputedStyle(this.extendedItem.element);
|
|
13
14
|
if (computedStyle.padding !== '0px') {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
let left = Number.parseFloat(computedStyle.paddingLeft.replace('px', ''));
|
|
16
|
+
let top = Number.parseFloat(computedStyle.paddingTop.replace('px', ''));
|
|
17
|
+
let right = Number.parseFloat(computedStyle.paddingRight.replace('px', ''));
|
|
18
|
+
let bottom = Number.parseFloat(computedStyle.paddingBottom.replace('px', ''));
|
|
19
|
+
left += Number.parseFloat(computedStyle.borderLeftWidth.replace('px', ''));
|
|
20
|
+
top += Number.parseFloat(computedStyle.borderTopWidth.replace('px', ''));
|
|
21
|
+
right += Number.parseFloat(computedStyle.borderRightWidth.replace('px', ''));
|
|
22
|
+
bottom += Number.parseFloat(computedStyle.borderBottomWidth.replace('px', ''));
|
|
22
23
|
if (!isNaN(left) && !isNaN(top) && !isNaN(right) && !isNaN(bottom)) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
this.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
const p = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas, cache);
|
|
25
|
+
if (!isNaN(p[0].x)) {
|
|
26
|
+
if (this._valuesHaveChanges(left, top, right, bottom, p[0].x, p[0].y, p[1].x, p[1].y, p[2].x, p[2].y, p[3].x, p[3].y)) {
|
|
27
|
+
const p2 = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, [{ x: -left, y: -top }, { x: -right, y: -top }, { x: -left, y: -bottom }, { x: -right, y: -bottom }], this.designerCanvas, cache);
|
|
28
|
+
let d = "M" + [p[0], p[1], p[3], p[2]].map(x => x.x + ',' + x.y).join(' ') + 'Z ';
|
|
29
|
+
d += "M" + [p2[0], p2[1], p2[3], p2[2]].map(x => x.x + ',' + x.y).join(' ') + 'Z ';
|
|
30
|
+
this._path = this._drawPath(d, 'svg-padding', this._path, OverlayLayer.Background);
|
|
31
|
+
}
|
|
29
32
|
}
|
|
30
33
|
}
|
|
31
34
|
}
|
|
@@ -48,7 +48,6 @@ export class PointerTool {
|
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
pointerEventHandler(designerCanvas, event, currentElement) {
|
|
51
|
-
event.preventDefault();
|
|
52
51
|
if (event.ctrlKey)
|
|
53
52
|
this.cursor = 'copy';
|
|
54
53
|
else
|
|
@@ -105,6 +104,7 @@ export class PointerTool {
|
|
|
105
104
|
this._initialPoint = currentPoint;
|
|
106
105
|
this._initialOffset = designerCanvas.getNormalizedOffsetInElement(event, currentElement);
|
|
107
106
|
if (event.shiftKey) {
|
|
107
|
+
event.preventDefault();
|
|
108
108
|
this._actionType = PointerActionType.DrawSelection;
|
|
109
109
|
}
|
|
110
110
|
else if (event.type == EventNames.PointerDown) {
|
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.
|
|
4
|
+
"version": "0.1.170",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"author": "jochen.kuehner@gmx.de",
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
"scripts": {
|
|
10
10
|
"tsc": "tsc",
|
|
11
11
|
"build": "tsc",
|
|
12
|
+
"link": "npm link",
|
|
13
|
+
"watch": "pm2 start tsc --watch",
|
|
12
14
|
"prepublishOnly": "npm run build"
|
|
13
15
|
},
|
|
14
16
|
"dependencies": {
|