@node-projects/web-component-designer 0.1.153 → 0.1.155
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/LayoutHelper.js +2 -2
- package/dist/elements/item/DesignItem.js +1 -1
- package/dist/elements/services/DefaultServiceBootstrap.js +5 -1
- package/dist/elements/widgets/debugView/debug-view.js +24 -5
- package/dist/elements/widgets/designerView/designerCanvas.js +2 -2
- package/dist/elements/widgets/designerView/extensions/AbstractExtensionBase.d.ts +1 -0
- package/dist/elements/widgets/designerView/extensions/AbstractExtensionBase.js +7 -0
- package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.js +11 -0
- package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtension copy.d.ts +15 -0
- package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtension copy.js +68 -0
- package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtension.js +4 -2
- package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtensionProvider copy.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtensionProvider copy.js +13 -0
- package/dist/elements/widgets/designerView/extensions/PreviousElementSelectExtension.d.ts +12 -0
- package/dist/elements/widgets/designerView/extensions/PreviousElementSelectExtension.js +38 -0
- package/dist/elements/widgets/designerView/extensions/PreviousElementSelectExtensionProvider.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/PreviousElementSelectExtensionProvider.js +14 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/package.json +1 -1
|
@@ -34,8 +34,8 @@ export function placeDesignItem(container, designItem, offset, mode) {
|
|
|
34
34
|
if (mode === 'position') {
|
|
35
35
|
let positionedContainerElement = container.element;
|
|
36
36
|
let computedStylePositionedContainer = getComputedStyle(container.element);
|
|
37
|
-
|
|
38
|
-
positionedContainerElement = positionedContainerElement.
|
|
37
|
+
if (computedStylePositionedContainer.position !== 'relative' && computedStylePositionedContainer.position !== 'absolute') {
|
|
38
|
+
positionedContainerElement = positionedContainerElement.offsetParent;
|
|
39
39
|
computedStylePositionedContainer = getComputedStyle(positionedContainerElement);
|
|
40
40
|
}
|
|
41
41
|
let oldLeft = null;
|
|
@@ -268,7 +268,7 @@ export class DesignItem {
|
|
|
268
268
|
const range = document.createRange();
|
|
269
269
|
range.selectNode(document.body);
|
|
270
270
|
const fragment = range.createContextualFragment(value);
|
|
271
|
-
for (const n of fragment.childNodes) {
|
|
271
|
+
for (const n of [...fragment.childNodes]) {
|
|
272
272
|
let di = DesignItem.createDesignItemFromInstance(n, this.serviceContainer, this.instanceServiceContainer);
|
|
273
273
|
this.insertChild(di);
|
|
274
274
|
}
|
|
@@ -95,6 +95,7 @@ import { PaddingExtensionProvider } from '../widgets/designerView/extensions/Pad
|
|
|
95
95
|
import { GridChildResizeExtensionProvider } from '../widgets/designerView/extensions/grid/GridChildResizeExtensionProvider.js';
|
|
96
96
|
import { AlignItemsContextMenu } from '../widgets/designerView/extensions/contextMenu/AlignItemsContextMenu.js';
|
|
97
97
|
import { BasicWebcomponentPropertiesService } from './propertiesService/services/BasicWebcomponentPropertiesService.js';
|
|
98
|
+
import { PreviousElementSelectExtensionProvider } from '../widgets/designerView/extensions/PreviousElementSelectExtensionProvider.js';
|
|
98
99
|
export function createDefaultServiceContainer() {
|
|
99
100
|
let serviceContainer = new ServiceContainer();
|
|
100
101
|
let defaultPlacementService = new DefaultPlacementService();
|
|
@@ -131,6 +132,7 @@ export function createDefaultServiceContainer() {
|
|
|
131
132
|
]);
|
|
132
133
|
serviceContainer.designerExtensions.set(ExtensionType.PrimarySelection, [
|
|
133
134
|
new ConditionExtensionProvider(new ElementDragTitleExtensionProvider(), item => !(item.node instanceof SVGElement) || item.node instanceof SVGSVGElement),
|
|
135
|
+
new PreviousElementSelectExtensionProvider(),
|
|
134
136
|
new TransformOriginExtensionProvider(true),
|
|
135
137
|
new MarginExtensionProvider(),
|
|
136
138
|
new PaddingExtensionProvider(),
|
|
@@ -160,7 +162,9 @@ export function createDefaultServiceContainer() {
|
|
|
160
162
|
new FlexboxExtensionProvider()
|
|
161
163
|
]);
|
|
162
164
|
serviceContainer.designerExtensions.set(ExtensionType.MouseOver, [
|
|
163
|
-
new HighlightElementExtensionProvider()
|
|
165
|
+
new HighlightElementExtensionProvider(),
|
|
166
|
+
new ElementDragTitleExtensionProvider(),
|
|
167
|
+
new PreviousElementSelectExtensionProvider()
|
|
164
168
|
]);
|
|
165
169
|
serviceContainer.designerExtensions.set(ExtensionType.Placement, [
|
|
166
170
|
new PlacementExtensionProvider()
|
|
@@ -38,6 +38,18 @@ const getClosestStackingContext = function (node) {
|
|
|
38
38
|
if (computedStyle.transform !== 'none') {
|
|
39
39
|
return { node: node, reason: `transform: ${computedStyle.transform}` };
|
|
40
40
|
}
|
|
41
|
+
// elements with a scale value other than "none".
|
|
42
|
+
if (computedStyle.scale !== 'none') {
|
|
43
|
+
return { node: node, reason: `scale: ${computedStyle.scale}` };
|
|
44
|
+
}
|
|
45
|
+
// elements with a transform value other than "none".
|
|
46
|
+
if (computedStyle.translate !== 'none') {
|
|
47
|
+
return { node: node, reason: `translate: ${computedStyle.translate}` };
|
|
48
|
+
}
|
|
49
|
+
// elements with a transform value other than "none".
|
|
50
|
+
if (computedStyle.rotate !== 'none') {
|
|
51
|
+
return { node: node, reason: `rotate: ${computedStyle.rotate}` };
|
|
52
|
+
}
|
|
41
53
|
// elements with a mix-blend-mode value other than "normal".
|
|
42
54
|
if (computedStyle.mixBlendMode !== 'normal') {
|
|
43
55
|
return { node: node, reason: `mixBlendMode: ${computedStyle.mixBlendMode}` };
|
|
@@ -46,6 +58,10 @@ const getClosestStackingContext = function (node) {
|
|
|
46
58
|
if (computedStyle.filter !== 'none') {
|
|
47
59
|
return { node: node, reason: `filter: ${computedStyle.filter}` };
|
|
48
60
|
}
|
|
61
|
+
// elements with a filter value other than "none".
|
|
62
|
+
if (computedStyle.backdropFilter !== 'none') {
|
|
63
|
+
return { node: node, reason: `backdropFilter: ${computedStyle.backdropFilter}` };
|
|
64
|
+
}
|
|
49
65
|
// elements with a perspective value other than "none".
|
|
50
66
|
if (computedStyle.perspective !== 'none') {
|
|
51
67
|
return { node: node, reason: `perspective: ${computedStyle.perspective}` };
|
|
@@ -75,7 +91,7 @@ const getClosestStackingContext = function (node) {
|
|
|
75
91
|
return { node: node, reason: `isolation: ${computedStyle.isolation}` };
|
|
76
92
|
}
|
|
77
93
|
// transform or opacity in will-change even if you don't specify values for these attributes directly.
|
|
78
|
-
if (computedStyle.willChange === 'transform' || computedStyle.willChange === 'opacity') {
|
|
94
|
+
if (computedStyle.willChange === 'transform' || computedStyle.willChange === 'opacity' || computedStyle.willChange === 'scale' || computedStyle.willChange === 'translate' || computedStyle.willChange === 'rotate') {
|
|
79
95
|
return { node: node, reason: `willChange: ${computedStyle.willChange}` };
|
|
80
96
|
}
|
|
81
97
|
// an item with a z-index value other than "auto".
|
|
@@ -131,6 +147,7 @@ export class DebugView extends BaseCustomWebComponentConstructorAppend {
|
|
|
131
147
|
overflow: auto;
|
|
132
148
|
height: 100%;
|
|
133
149
|
display: block;
|
|
150
|
+
font-size: 12px;
|
|
134
151
|
}
|
|
135
152
|
table {
|
|
136
153
|
font-family: Arial, Helvetica, sans-serif;
|
|
@@ -162,8 +179,8 @@ export class DebugView extends BaseCustomWebComponentConstructorAppend {
|
|
|
162
179
|
}`;
|
|
163
180
|
_ready;
|
|
164
181
|
computedStyle;
|
|
165
|
-
createsStackingContext;
|
|
166
|
-
createsStackingContextReason;
|
|
182
|
+
createsStackingContext = '';
|
|
183
|
+
createsStackingContextReason = '';
|
|
167
184
|
parentStackingContext;
|
|
168
185
|
parentStackingContextText;
|
|
169
186
|
selectedElementOffsetParent;
|
|
@@ -200,7 +217,8 @@ export class DebugView extends BaseCustomWebComponentConstructorAppend {
|
|
|
200
217
|
if (element && element.nodeType != 8 && element.nodeType != 11) {
|
|
201
218
|
this.computedStyle = getComputedStyle(element);
|
|
202
219
|
this.selectedElementOffsetParent = element.offsetParent;
|
|
203
|
-
if (this.selectedElementOffsetParent == designItem.instanceServiceContainer.designerCanvas.rootDesignItem.element
|
|
220
|
+
if (this.selectedElementOffsetParent == designItem.instanceServiceContainer.designerCanvas.rootDesignItem.element ||
|
|
221
|
+
this.selectedElementOffsetParent == designItem.instanceServiceContainer.designerCanvas.rootDesignItem.element.parentElement) {
|
|
204
222
|
this.selectedElementOffsetParentText = null;
|
|
205
223
|
this.selectedElementOffsetParent = null;
|
|
206
224
|
}
|
|
@@ -214,7 +232,8 @@ export class DebugView extends BaseCustomWebComponentConstructorAppend {
|
|
|
214
232
|
if (this.createsStackingContext && element.nodeName !== 'HTML') {
|
|
215
233
|
this.parentStackingContext = getClosestStackingContext(element.parentNode).node;
|
|
216
234
|
}
|
|
217
|
-
if (this.parentStackingContext == designItem.instanceServiceContainer.designerCanvas.rootDesignItem.element.parentElement
|
|
235
|
+
if (this.parentStackingContext == designItem.instanceServiceContainer.designerCanvas.rootDesignItem.element.parentElement ||
|
|
236
|
+
this.parentStackingContext == designItem.instanceServiceContainer.designerCanvas.rootDesignItem.element.parentElement.parentElement) {
|
|
218
237
|
this.parentStackingContextText = null;
|
|
219
238
|
this.parentStackingContext = null;
|
|
220
239
|
}
|
|
@@ -256,10 +256,10 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
256
256
|
<div id="node-projects-designer-canvas-outercanvas2" style="width:100%;height:100%;position:relative; margin: 0 !important; padding: 0 !important; border: none !important; isolation: isolate !important;">
|
|
257
257
|
<div id="node-projects-designer-canvas-canvasContainer"
|
|
258
258
|
style="width: 100%;height: 100%;position: absolute;top: 0;left: 0;user-select: none; margin: 0 !important; padding: 0 !important; border: none !important;">
|
|
259
|
-
<div id="node-projects-designer-canvas-canvas" part="canvas"></div>
|
|
259
|
+
<div title="" id="node-projects-designer-canvas-canvas" part="canvas"></div>
|
|
260
260
|
</div>
|
|
261
261
|
</div>
|
|
262
|
-
<div id="node-projects-designer-canvas-clickOverlay" tabindex="0" style="pointer-events: auto; margin: 0 !important; padding: 0 !important; border: none !important;"></div>
|
|
262
|
+
<div id="node-projects-designer-canvas-clickOverlay" title="" tabindex="0" style="pointer-events: auto; margin: 0 !important; padding: 0 !important; border: none !important;"></div>
|
|
263
263
|
</div>
|
|
264
264
|
|
|
265
265
|
<div id="node-projects-designer-search-container" style="display: none;">
|
|
@@ -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 _drawPath(data: string, className?: string, path?: SVGPathElement, overlayLayer?: OverlayLayer): SVGPathElement;
|
|
20
21
|
protected _drawText(text: string, x: number, y: number, className?: string, textEl?: SVGTextElement, overlayLayer?: OverlayLayer): SVGTextElement;
|
|
21
22
|
protected _drawHTML(html: string | HTMLElement, x: number, y: number, w: number, h: number, className?: string, htmlObj?: SVGForeignObjectElement, overlayLayer?: OverlayLayer): SVGForeignObjectElement;
|
|
22
23
|
protected _drawTextWithBackground(text: string, x: number, y: number, backgroundColor: string, className?: string, existingEls?: [SVGFilterElement, SVGFEFloodElement, SVGTextElement, SVGTextElement], overlayLayer?: OverlayLayer): [SVGFilterElement, SVGFEFloodElement, SVGTextElement, SVGTextElement];
|
|
@@ -66,6 +66,13 @@ export class AbstractExtensionBase {
|
|
|
66
66
|
}
|
|
67
67
|
return newRect;
|
|
68
68
|
}
|
|
69
|
+
_drawPath(data, className, path, overlayLayer) {
|
|
70
|
+
const newPath = this.overlayLayerView.drawPath(this.constructor.name, data, className, path, overlayLayer);
|
|
71
|
+
if (!path) {
|
|
72
|
+
this.overlays.push(newPath);
|
|
73
|
+
}
|
|
74
|
+
return newPath;
|
|
75
|
+
}
|
|
69
76
|
_drawText(text, x, y, className, textEl, overlayLayer) {
|
|
70
77
|
const newText = this.overlayLayerView.drawText(this.constructor.name, text, x, y, className, textEl, overlayLayer);
|
|
71
78
|
if (!textEl) {
|
|
@@ -94,6 +94,17 @@ export class EditTextExtension extends AbstractExtension {
|
|
|
94
94
|
}
|
|
95
95
|
commitchanges() {
|
|
96
96
|
this._removeAllOverlays();
|
|
97
|
+
this.extendedItem.element.normalize();
|
|
98
|
+
let stop = false;
|
|
99
|
+
outer: while (!stop) {
|
|
100
|
+
for (let e of this.extendedItem.element.querySelectorAll('*')) {
|
|
101
|
+
if (e.childNodes.length == 0) {
|
|
102
|
+
e.remove();
|
|
103
|
+
continue outer;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
stop = true;
|
|
107
|
+
}
|
|
97
108
|
const newHTML = this.extendedItem.element.innerHTML;
|
|
98
109
|
this.extendedItem.editContentFinish();
|
|
99
110
|
this.extendedItem.innerHTML = newHTML;
|
|
@@ -0,0 +1,15 @@
|
|
|
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 ElementDragTitleExtension extends AbstractExtension {
|
|
6
|
+
private _rect;
|
|
7
|
+
private _text;
|
|
8
|
+
private _width;
|
|
9
|
+
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
10
|
+
extend(cache: Record<string | symbol, any>, event?: Event): void;
|
|
11
|
+
_drawMoveOverlay(itemRect: DOMRect): void;
|
|
12
|
+
refresh(cache: Record<string | symbol, any>, event?: Event): void;
|
|
13
|
+
_pointerEvent(event: PointerEvent): void;
|
|
14
|
+
dispose(): void;
|
|
15
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { getTextWidth } from '../../../helper/TextHelper.js';
|
|
2
|
+
import { getDesignerCanvasNormalizedTransformedCornerDOMPoints } from '../../../helper/TransformHelper.js';
|
|
3
|
+
import { NamedTools } from "../tools/NamedTools.js";
|
|
4
|
+
import { AbstractExtension } from './AbstractExtension.js';
|
|
5
|
+
const extensionWidth = 60;
|
|
6
|
+
export class ElementDragTitleExtension extends AbstractExtension {
|
|
7
|
+
_rect;
|
|
8
|
+
_text;
|
|
9
|
+
_width;
|
|
10
|
+
constructor(extensionManager, designerView, extendedItem) {
|
|
11
|
+
super(extensionManager, designerView, extendedItem);
|
|
12
|
+
}
|
|
13
|
+
extend(cache, event) {
|
|
14
|
+
const transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas, cache);
|
|
15
|
+
if (!isNaN(transformedCornerPoints[0].x)) {
|
|
16
|
+
const boundRect = this.extendedItem.element.getBoundingClientRect();
|
|
17
|
+
let w = getTextWidth(this.extendedItem.name, '10px monospace');
|
|
18
|
+
let elementWidth = Math.sqrt(Math.pow(transformedCornerPoints[1].x - transformedCornerPoints[0].x, 2) + Math.pow(transformedCornerPoints[1].y - transformedCornerPoints[0].y, 2));
|
|
19
|
+
let text = this.extendedItem.name;
|
|
20
|
+
if (this.extendedItem.id)
|
|
21
|
+
text = '#' + this.extendedItem.id;
|
|
22
|
+
this._width = Math.max(Math.min(elementWidth, w), extensionWidth);
|
|
23
|
+
this._rect = this._drawRect(transformedCornerPoints[0].x, transformedCornerPoints[0].y - 16, this._width, 15, 'svg-primary-selection-move', this._rect);
|
|
24
|
+
this._text = this._drawHTML('<div style="position:relative"><span style="width: 100%; position: absolute; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; transform-origin: 0 0;">' + text + '</span></div>', (boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, transformedCornerPoints[0].y - 16, this._width, 15, 'svg-text-primary', this._text);
|
|
25
|
+
this._text.style.overflow = 'visible';
|
|
26
|
+
this._rect2 = this._drawRect(transformedCornerPoints[0].x + 60, transformedCornerPoints[0].y - 16, 15, 15, 'svg-primary-selection-move', this._rect2);
|
|
27
|
+
this._path = this._drawPath('m4 12 1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z', 'svg-primary-selection-move', this._path);
|
|
28
|
+
//<svg viewBox="0 0 24 24"><path d=""></path></svg>
|
|
29
|
+
this._rect.addEventListener('pointerdown', (e) => this._pointerEvent(e));
|
|
30
|
+
this._rect.addEventListener('pointermove', (e) => this._pointerEvent(e));
|
|
31
|
+
this._rect.addEventListener('pointerup', (e) => this._pointerEvent(e));
|
|
32
|
+
this.refresh(cache, event);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
_drawMoveOverlay(itemRect) {
|
|
36
|
+
}
|
|
37
|
+
refresh(cache, event) {
|
|
38
|
+
const transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, { x: 0, y: 16 }, this.designerCanvas, cache);
|
|
39
|
+
const angle = Math.atan2((transformedCornerPoints[1].y - transformedCornerPoints[0].y), (transformedCornerPoints[1].x - transformedCornerPoints[0].x)) * 180 / Math.PI;
|
|
40
|
+
if (!isNaN(transformedCornerPoints[0].x)) {
|
|
41
|
+
if (this._valuesHaveChanges(transformedCornerPoints[0].x, transformedCornerPoints[0].y, angle)) {
|
|
42
|
+
const h = (15 / this.designerCanvas.scaleFactor);
|
|
43
|
+
const w = (this._width / this.designerCanvas.scaleFactor);
|
|
44
|
+
this._rect.setAttribute('x', '' + transformedCornerPoints[0].x);
|
|
45
|
+
this._rect.setAttribute('y', '' + transformedCornerPoints[0].y);
|
|
46
|
+
this._rect.style.rotate = angle + 'deg';
|
|
47
|
+
this._rect.style.transformBox = 'fill-box';
|
|
48
|
+
this._rect.setAttribute('height', '' + h);
|
|
49
|
+
this._rect.setAttribute('width', '' + w);
|
|
50
|
+
this._rect.style.strokeWidth = (1 / this.designerCanvas.scaleFactor).toString();
|
|
51
|
+
this._text.setAttribute('x', '' + transformedCornerPoints[0].x);
|
|
52
|
+
this._text.setAttribute('y', '' + transformedCornerPoints[0].y);
|
|
53
|
+
this._text.style.fontSize = (10 / this.designerCanvas.scaleFactor) + 'px';
|
|
54
|
+
this._text.setAttribute('height', '' + h);
|
|
55
|
+
this._text.setAttribute('width', '' + w);
|
|
56
|
+
this._text.children[0].children[0].style.rotate = angle + 'deg';
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
_pointerEvent(event) {
|
|
61
|
+
event.preventDefault();
|
|
62
|
+
event.stopPropagation();
|
|
63
|
+
this.designerCanvas.serviceContainer.designerTools.get(NamedTools.Pointer).pointerEventHandler(this.designerCanvas, event, this.extendedItem.element);
|
|
64
|
+
}
|
|
65
|
+
dispose() {
|
|
66
|
+
this._removeAllOverlays();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -17,9 +17,11 @@ export class ElementDragTitleExtension extends AbstractExtension {
|
|
|
17
17
|
let w = getTextWidth(this.extendedItem.name, '10px monospace');
|
|
18
18
|
let elementWidth = Math.sqrt(Math.pow(transformedCornerPoints[1].x - transformedCornerPoints[0].x, 2) + Math.pow(transformedCornerPoints[1].y - transformedCornerPoints[0].y, 2));
|
|
19
19
|
let text = this.extendedItem.name;
|
|
20
|
+
if (this.extendedItem.id)
|
|
21
|
+
text = '#' + this.extendedItem.id;
|
|
20
22
|
this._width = Math.max(Math.min(elementWidth, w), extensionWidth);
|
|
21
23
|
this._rect = this._drawRect(transformedCornerPoints[0].x, transformedCornerPoints[0].y - 16, this._width, 15, 'svg-primary-selection-move', this._rect);
|
|
22
|
-
this._text = this._drawHTML('<div style="position:relative"><span style="width: 100%; position: absolute; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; transform-origin: 0 0;">' + text + '</span></div>', (boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, transformedCornerPoints[0].y - 16, this._width, 15, 'svg-text-primary', this._text);
|
|
24
|
+
this._text = this._drawHTML('<div style="position:relative"><span style="width: 100%; position: absolute; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; transform-origin: 0 0; padding-left: 2px;">' + text + '</span></div>', (boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, transformedCornerPoints[0].y - 16, this._width, 15, 'svg-text-primary', this._text);
|
|
23
25
|
this._text.style.overflow = 'visible';
|
|
24
26
|
this._rect.addEventListener('pointerdown', (e) => this._pointerEvent(e));
|
|
25
27
|
this._rect.addEventListener('pointermove', (e) => this._pointerEvent(e));
|
|
@@ -33,7 +35,7 @@ export class ElementDragTitleExtension extends AbstractExtension {
|
|
|
33
35
|
const transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, { x: 0, y: 16 }, this.designerCanvas, cache);
|
|
34
36
|
const angle = Math.atan2((transformedCornerPoints[1].y - transformedCornerPoints[0].y), (transformedCornerPoints[1].x - transformedCornerPoints[0].x)) * 180 / Math.PI;
|
|
35
37
|
if (!isNaN(transformedCornerPoints[0].x)) {
|
|
36
|
-
if (this._valuesHaveChanges(transformedCornerPoints[0].x, transformedCornerPoints[0].y, angle)) {
|
|
38
|
+
if (this._valuesHaveChanges(transformedCornerPoints[0].x, transformedCornerPoints[0].y, angle, this.designerCanvas.scaleFactor)) {
|
|
37
39
|
const h = (15 / this.designerCanvas.scaleFactor);
|
|
38
40
|
const w = (this._width / this.designerCanvas.scaleFactor);
|
|
39
41
|
this._rect.setAttribute('x', '' + transformedCornerPoints[0].x);
|
package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtensionProvider copy.d.ts
ADDED
|
@@ -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 ElementDragTitleExtensionProvider implements IDesignerExtensionProvider {
|
|
7
|
+
shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
|
|
8
|
+
getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
|
|
9
|
+
static readonly style: CSSStyleSheet;
|
|
10
|
+
}
|
package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtensionProvider copy.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ElementDragTitleExtension } from './ElementDragTitleExtension.js';
|
|
2
|
+
import { css } from "@node-projects/base-custom-webcomponent";
|
|
3
|
+
export class ElementDragTitleExtensionProvider {
|
|
4
|
+
shouldExtend(extensionManager, designerView, designItem) {
|
|
5
|
+
return !designItem.isRootItem && !(designItem.element instanceof HTMLTemplateElement);
|
|
6
|
+
}
|
|
7
|
+
getExtension(extensionManager, designerView, designItem) {
|
|
8
|
+
return new ElementDragTitleExtension(extensionManager, designerView, designItem);
|
|
9
|
+
}
|
|
10
|
+
static style = css `
|
|
11
|
+
.svg-text-primary { stroke: none; color: white; font-family: monospace; }
|
|
12
|
+
`;
|
|
13
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
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 PreviousElementSelectExtension extends AbstractExtension {
|
|
6
|
+
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
7
|
+
private _rect;
|
|
8
|
+
private _g;
|
|
9
|
+
extend(cache: Record<string | symbol, any>, event?: Event): void;
|
|
10
|
+
refresh(cache: Record<string | symbol, any>, event?: Event): void;
|
|
11
|
+
dispose(): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { getDesignerCanvasNormalizedTransformedCornerDOMPoints } from '../../../helper/TransformHelper.js';
|
|
2
|
+
import { AbstractExtension } from './AbstractExtension.js';
|
|
3
|
+
export class PreviousElementSelectExtension extends AbstractExtension {
|
|
4
|
+
constructor(extensionManager, designerView, extendedItem) {
|
|
5
|
+
super(extensionManager, designerView, extendedItem);
|
|
6
|
+
}
|
|
7
|
+
_rect;
|
|
8
|
+
_g;
|
|
9
|
+
extend(cache, event) {
|
|
10
|
+
this.refresh(cache, event);
|
|
11
|
+
}
|
|
12
|
+
refresh(cache, event) {
|
|
13
|
+
const transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas, cache);
|
|
14
|
+
if (!isNaN(transformedCornerPoints[1].x)) {
|
|
15
|
+
if (this._valuesHaveChanges(transformedCornerPoints[0].x, transformedCornerPoints[0].y, this.designerCanvas.scaleFactor)) {
|
|
16
|
+
const h = (16 / this.designerCanvas.scaleFactor);
|
|
17
|
+
this._rect = this._drawRect(transformedCornerPoints[1].x - (15 / this.designerCanvas.scaleFactor), transformedCornerPoints[1].y - (16.5 / this.designerCanvas.scaleFactor), h, h, 'svg-previous-select', this._rect);
|
|
18
|
+
if (!this._g) {
|
|
19
|
+
this._g = document.createElementNS("http://www.w3.org/2000/svg", "g");
|
|
20
|
+
this._g.setAttribute('class', 'svg-previous-select');
|
|
21
|
+
const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
|
|
22
|
+
path.setAttribute('d', 'm4 12 1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z');
|
|
23
|
+
this._g.appendChild(path);
|
|
24
|
+
this._addOverlay(this._g);
|
|
25
|
+
this._rect.onpointerdown = (e) => {
|
|
26
|
+
e.preventDefault();
|
|
27
|
+
e.stopPropagation();
|
|
28
|
+
this.extendedItem.instanceServiceContainer.selectionService.setSelectedElements([this.extendedItem.parent]);
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
this._g.setAttribute('transform', 'translate(' + (transformedCornerPoints[1].x - (14.5 / this.designerCanvas.scaleFactor)) + ',' + (transformedCornerPoints[1].y - (15.5 / this.designerCanvas.scaleFactor)) + ') scale(' + 0.6 / this.designerCanvas.scaleFactor + ')');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
dispose() {
|
|
36
|
+
this._removeAllOverlays();
|
|
37
|
+
}
|
|
38
|
+
}
|
package/dist/elements/widgets/designerView/extensions/PreviousElementSelectExtensionProvider.d.ts
ADDED
|
@@ -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 PreviousElementSelectExtensionProvider implements IDesignerExtensionProvider {
|
|
7
|
+
shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
|
|
8
|
+
getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
|
|
9
|
+
static readonly style: CSSStyleSheet;
|
|
10
|
+
}
|
package/dist/elements/widgets/designerView/extensions/PreviousElementSelectExtensionProvider.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { PreviousElementSelectExtension } from './PreviousElementSelectExtension.js';
|
|
2
|
+
import { css } from "@node-projects/base-custom-webcomponent";
|
|
3
|
+
export class PreviousElementSelectExtensionProvider {
|
|
4
|
+
shouldExtend(extensionManager, designerView, designItem) {
|
|
5
|
+
return !designItem.isRootItem && !(designItem.element instanceof HTMLTemplateElement);
|
|
6
|
+
}
|
|
7
|
+
getExtension(extensionManager, designerView, designItem) {
|
|
8
|
+
return new PreviousElementSelectExtension(extensionManager, designerView, designItem);
|
|
9
|
+
}
|
|
10
|
+
static style = css `
|
|
11
|
+
rect.svg-previous-select { stroke: none; fill: #3899ec; pointer-events: auto; }
|
|
12
|
+
g.svg-previous-select { stroke: none; fill: white; }
|
|
13
|
+
`;
|
|
14
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -242,6 +242,8 @@ export * from "./elements/widgets/designerView/extensions/TransformOriginExtensi
|
|
|
242
242
|
export * from "./elements/widgets/designerView/extensions/TransformOriginExtensionProvider.js";
|
|
243
243
|
export * from "./elements/widgets/designerView/extensions/PlacementExtension.js";
|
|
244
244
|
export * from "./elements/widgets/designerView/extensions/PlacementExtensionProvider.js";
|
|
245
|
+
export * from "./elements/widgets/designerView/extensions/PreviousElementSelectExtension.js";
|
|
246
|
+
export * from "./elements/widgets/designerView/extensions/PreviousElementSelectExtensionProvider.js";
|
|
245
247
|
export * from "./elements/widgets/designerView/extensions/block/BlockToolbarExtension.js";
|
|
246
248
|
export * from "./elements/widgets/designerView/extensions/block/BlockToolbarExtensionProvider.js";
|
|
247
249
|
export * from "./elements/widgets/designerView/extensions/flex/FlexToolbarExtension.js";
|
package/dist/index.js
CHANGED
|
@@ -183,6 +183,8 @@ export * from "./elements/widgets/designerView/extensions/TransformOriginExtensi
|
|
|
183
183
|
export * from "./elements/widgets/designerView/extensions/TransformOriginExtensionProvider.js";
|
|
184
184
|
export * from "./elements/widgets/designerView/extensions/PlacementExtension.js";
|
|
185
185
|
export * from "./elements/widgets/designerView/extensions/PlacementExtensionProvider.js";
|
|
186
|
+
export * from "./elements/widgets/designerView/extensions/PreviousElementSelectExtension.js";
|
|
187
|
+
export * from "./elements/widgets/designerView/extensions/PreviousElementSelectExtensionProvider.js";
|
|
186
188
|
export * from "./elements/widgets/designerView/extensions/block/BlockToolbarExtension.js";
|
|
187
189
|
export * from "./elements/widgets/designerView/extensions/block/BlockToolbarExtensionProvider.js";
|
|
188
190
|
export * from "./elements/widgets/designerView/extensions/flex/FlexToolbarExtension.js";
|
package/package.json
CHANGED