@node-projects/web-component-designer 0.1.169 → 0.1.171
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/ElementHelper.js +1 -1
- package/dist/elements/helper/TransformHelper.d.ts +1 -1
- package/dist/elements/helper/TransformHelper.js +25 -11
- package/dist/elements/item/DesignItem.d.ts +1 -1
- package/dist/elements/services/DefaultServiceBootstrap.js +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 -2
- package/dist/elements/widgets/designerView/designerCanvas.js +4 -11
- 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/HighlightElementExtension.js +2 -1
- package/dist/elements/widgets/designerView/extensions/HighlightElementExtensionProvider.js +1 -1
- 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/extensions/PlacementExtension.js +1 -1
- package/dist/elements/widgets/designerView/extensions/PlacementExtensionProvider.js +1 -1
- package/dist/elements/widgets/designerView/extensions/svg/SvgElementExtension.js +1 -1
- package/package.json +3 -1
|
@@ -107,7 +107,7 @@ export function getElementsWindowOffsetWithoutSelfAndParentTransformations(eleme
|
|
|
107
107
|
let currLeft = 0;
|
|
108
108
|
let currTop = 0;
|
|
109
109
|
if (element instanceof (element.ownerDocument.defaultView ?? window).SVGSVGElement || element instanceof (element.ownerDocument.defaultView ?? window).MathMLElement) {
|
|
110
|
-
//TODO: !huge Perf impact! - fix without transformation
|
|
110
|
+
//TODO: !maybe huge Perf impact! - fix without transformation
|
|
111
111
|
let t = element.style.transform;
|
|
112
112
|
element.style.transform = '';
|
|
113
113
|
const bcEl = element.getBoundingClientRect();
|
|
@@ -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;
|
|
@@ -157,8 +157,7 @@ export function getByParentsTransformedPointRelatedToCanvas(element, point, desi
|
|
|
157
157
|
const tfX = parseFloat(toSplit[0]);
|
|
158
158
|
const tfY = parseFloat(toSplit[1]);
|
|
159
159
|
const parentElementTransformOrigin = new DOMPoint(elementWindowOffset.offsetLeft - designerCanvas.outerRect.x + tfX, elementWindowOffset.offsetTop - designerCanvas.outerRect.y + tfY);
|
|
160
|
-
|
|
161
|
-
{
|
|
160
|
+
if (actualElement == element) {
|
|
162
161
|
const transf = (element.ownerDocument.defaultView ?? window).getComputedStyle(element).transform;
|
|
163
162
|
const mtx = extractTranslationFromDOMMatrix(new DOMMatrix(transf));
|
|
164
163
|
parentElementTransformOrigin.x -= mtx.x;
|
|
@@ -193,12 +192,27 @@ export function getElementSize(element) {
|
|
|
193
192
|
}
|
|
194
193
|
return { width, height };
|
|
195
194
|
}
|
|
195
|
+
const nullOffsetArray = [{ x: 0, y: 0 }, { x: 0, y: 0 }, { x: 0, y: 0 }, { x: 0, y: 0 }];
|
|
196
196
|
export function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, untransformedCornerPointsOffset, designerCanvas, cache) {
|
|
197
197
|
const topleft = 0;
|
|
198
198
|
const topright = 1;
|
|
199
199
|
const bottomleft = 2;
|
|
200
200
|
const bottomright = 3;
|
|
201
|
-
|
|
201
|
+
//offset points for calculation
|
|
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]);
|
|
@@ -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():
|
|
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;
|
|
@@ -135,7 +135,7 @@ export function createDefaultServiceContainer() {
|
|
|
135
135
|
]);
|
|
136
136
|
serviceContainer.designerExtensions.set(ExtensionType.PrimarySelection, [
|
|
137
137
|
new ConditionExtensionProvider(new ElementDragTitleExtensionProvider(), item => !(item.node instanceof item.window.SVGElement) || item.node instanceof item.window.SVGSVGElement),
|
|
138
|
-
new PreviousElementSelectExtensionProvider(),
|
|
138
|
+
new ConditionExtensionProvider(new PreviousElementSelectExtensionProvider(), item => !(item.node instanceof item.window.SVGElement) || item.node instanceof item.window.SVGSVGElement),
|
|
139
139
|
new TransformOriginExtensionProvider(true),
|
|
140
140
|
new MarginExtensionProvider(),
|
|
141
141
|
new PaddingExtensionProvider(),
|
|
@@ -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;
|
|
@@ -58,7 +58,6 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
|
|
|
58
58
|
private _outercanvas2;
|
|
59
59
|
private _lastHoverDesignItem;
|
|
60
60
|
private _firstConnect;
|
|
61
|
-
static cssprefixConstant: string;
|
|
62
61
|
static readonly style: CSSStyleSheet;
|
|
63
62
|
static readonly template: HTMLTemplateElement;
|
|
64
63
|
extensionManager: IExtensionManager;
|
|
@@ -131,7 +130,6 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
|
|
|
131
130
|
private transformPoint;
|
|
132
131
|
elementsFromPoint(x: number, y: number): Element[];
|
|
133
132
|
getElementAtPoint(point: IPoint, ignoreElementCallback?: (element: HTMLElement) => boolean): HTMLElement;
|
|
134
|
-
_patchStylesheetForDesigner(text: string): string;
|
|
135
133
|
private _hoverElement;
|
|
136
134
|
showHoverExtension(element: Element, event: Event): void;
|
|
137
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;
|
|
@@ -111,7 +112,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
111
112
|
_outercanvas2;
|
|
112
113
|
_lastHoverDesignItem;
|
|
113
114
|
_firstConnect;
|
|
114
|
-
static cssprefixConstant = '#node-projects-designer-canvas-canvas ';
|
|
115
|
+
//public static cssprefixConstant = '#node-projects-designer-canvas-canvas ';
|
|
115
116
|
static style = css `
|
|
116
117
|
:host {
|
|
117
118
|
display: block;
|
|
@@ -375,7 +376,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
375
376
|
if (this.instanceServiceContainer.stylesheetService) {
|
|
376
377
|
styles.push(...this.instanceServiceContainer.stylesheetService
|
|
377
378
|
.getStylesheets()
|
|
378
|
-
.map(x => stylesheetFromString(this._window,
|
|
379
|
+
.map(x => stylesheetFromString(this._window, AbstractStylesheetService.patchStylesheetSelectorForDesigner(x.content))));
|
|
379
380
|
}
|
|
380
381
|
if (this._useIframe) {
|
|
381
382
|
this._iframe.contentWindow.document.adoptedStyleSheets = styles;
|
|
@@ -1116,14 +1117,6 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
1116
1117
|
}
|
|
1117
1118
|
return currentElement;
|
|
1118
1119
|
}
|
|
1119
|
-
_patchStylesheetForDesigner(text) {
|
|
1120
|
-
return text.replaceAll(':hover', '[' + forceHoverAttributeName + ']')
|
|
1121
|
-
.replaceAll(':active', '[' + forceActiveAttributeName + ']')
|
|
1122
|
-
.replaceAll(':visited', '[' + forceVisitedAttributeName + ']')
|
|
1123
|
-
.replaceAll(':focus', '[' + forceFocusAttributeName + ']')
|
|
1124
|
-
.replaceAll(':focus-within', '[' + forceFocusWithinAttributeName + ']')
|
|
1125
|
-
.replaceAll(':focus-visible', '[' + forceFocusVisibleAttributeName + ']');
|
|
1126
|
-
}
|
|
1127
1120
|
_hoverElement;
|
|
1128
1121
|
showHoverExtension(element, event) {
|
|
1129
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) {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { getDesignerCanvasNormalizedTransformedCornerDOMPoints } from '../../../helper/TransformHelper.js';
|
|
2
2
|
import { AbstractExtension } from './AbstractExtension.js';
|
|
3
|
+
import { OverlayLayer } from './OverlayLayer.js';
|
|
3
4
|
const offset = 3;
|
|
4
5
|
export class HighlightElementExtension extends AbstractExtension {
|
|
5
6
|
_rect;
|
|
@@ -12,7 +13,7 @@ export class HighlightElementExtension extends AbstractExtension {
|
|
|
12
13
|
refresh() {
|
|
13
14
|
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, { x: offset, y: offset }, this.designerCanvas);
|
|
14
15
|
if (!isNaN(transformedCornerPoints[0].x)) {
|
|
15
|
-
this._rect = this._drawTransformedRect(transformedCornerPoints, 'svg-hover', this._rect);
|
|
16
|
+
this._rect = this._drawTransformedRect(transformedCornerPoints, 'svg-hover', this._rect, OverlayLayer.Background);
|
|
16
17
|
this._rect.style.strokeWidth = (2 / this.designerCanvas.zoomFactor).toString();
|
|
17
18
|
}
|
|
18
19
|
}
|
|
@@ -8,6 +8,6 @@ export class HighlightElementExtensionProvider {
|
|
|
8
8
|
return new HighlightElementExtension(extensionManager, designerView, designItem);
|
|
9
9
|
}
|
|
10
10
|
static style = css `
|
|
11
|
-
.svg-hover { stroke: #
|
|
11
|
+
.svg-hover { stroke: #90caf966; fill: none; }
|
|
12
12
|
`;
|
|
13
13
|
}
|
|
@@ -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
|
}
|
|
@@ -14,7 +14,7 @@ export class PlacementExtension extends AbstractExtension {
|
|
|
14
14
|
const top = Number.parseFloat(computedStyle.marginTop.replace('px', ''));
|
|
15
15
|
const right = Number.parseFloat(computedStyle.marginRight.replace('px', ''));
|
|
16
16
|
const bottom = Number.parseFloat(computedStyle.marginBottom.replace('px', ''));
|
|
17
|
-
this._rect = this._drawRect(itemRect.x - left, itemRect.y - top, left + itemRect.width + right, top + itemRect.height + bottom, 'svg-
|
|
17
|
+
this._rect = this._drawRect(itemRect.x - left, itemRect.y - top, left + itemRect.width + right, top + itemRect.height + bottom, 'svg-placement', this._rect);
|
|
18
18
|
}
|
|
19
19
|
dispose() {
|
|
20
20
|
this._removeAllOverlays();
|
|
@@ -37,7 +37,7 @@ export class SvgElementExtension extends AbstractExtension {
|
|
|
37
37
|
}
|
|
38
38
|
refresh() {
|
|
39
39
|
let points = getSvgElementPoints(this._svgElement);
|
|
40
|
-
if (this._valuesHaveChanges(this.designerCanvas.scaleFactor, ...points.map(x => x.x), ...points.map(x => x.y))) {
|
|
40
|
+
if (points && this._valuesHaveChanges(this.designerCanvas.scaleFactor, ...points.map(x => x.x), ...points.map(x => x.y))) {
|
|
41
41
|
this._points = points;
|
|
42
42
|
for (let i = 0; i < this._points.length; i++) {
|
|
43
43
|
this._circles[i] = this._drawPathCircle(i, this._circles[i]);
|
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.171",
|
|
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": {
|