@node-projects/web-component-designer 0.0.151 → 0.0.153
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/ACKNOWLEDGMENTS +5 -1
- package/dist/elements/helper/CssUnitConverter.d.ts +3 -0
- package/dist/elements/helper/CssUnitConverter.js +85 -0
- package/dist/elements/helper/LayoutHelper.js +2 -2
- package/dist/elements/helper/TextHelper.d.ts +10 -0
- package/dist/elements/helper/TextHelper.js +23 -0
- package/dist/elements/helper/TransformHelper.d.ts +1 -1
- package/dist/elements/helper/TransformHelper.js +9 -8
- package/dist/elements/services/DefaultServiceBootstrap.js +2 -1
- package/dist/elements/services/propertiesService/services/CssPropertiesService.d.ts +1 -0
- package/dist/elements/services/propertiesService/services/CssPropertiesService.js +8 -0
- package/dist/elements/widgets/designerView/designerCanvas.js +1 -0
- package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtension.d.ts +1 -0
- package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtension.js +24 -12
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +1 -1
- package/dist/elements/widgets/designerView/extensions/FlexboxExtension.js +1 -1
- package/dist/elements/widgets/designerView/extensions/FlexboxExtensionDesignViewConfigButtons.d.ts +6 -0
- package/dist/elements/widgets/designerView/extensions/FlexboxExtensionDesignViewConfigButtons.js +21 -0
- package/dist/elements/widgets/designerView/extensions/FlexboxExtensionProvider.d.ts +1 -0
- package/dist/elements/widgets/designerView/extensions/FlexboxExtensionProvider.js +2 -1
- package/dist/elements/widgets/designerView/extensions/GrayOutDragOverContainerExtension.js +1 -1
- package/dist/elements/widgets/designerView/extensions/GridExtensionDesignViewConfigButtons copy.d.ts +6 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionDesignViewConfigButtons copy.js +21 -0
- package/dist/elements/widgets/designerView/extensions/InvisibleDivExtension.js +3 -2
- package/dist/elements/widgets/designerView/extensions/MouseOverExtension.d.ts +1 -4
- package/dist/elements/widgets/designerView/extensions/MouseOverExtension.js +4 -13
- package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +1 -1
- package/dist/elements/widgets/designerView/extensions/RotateExtension.js +4 -4
- package/dist/elements/widgets/designerView/extensions/SelectionDefaultExtension.js +1 -1
- package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.d.ts +1 -0
- package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.js +26 -9
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/package.json +1 -1
package/ACKNOWLEDGMENTS
CHANGED
|
@@ -6,4 +6,8 @@
|
|
|
6
6
|
- Thanks to @chdh for plain-scrollbar component
|
|
7
7
|
https://github.com/chdh/plain-scrollbar
|
|
8
8
|
- Thanks to @m-thalmann for contextmenujs
|
|
9
|
-
https://github.com/m-thalmann/contextmenujs (also we have heavily modified it)
|
|
9
|
+
https://github.com/m-thalmann/contextmenujs (also we have heavily modified it)
|
|
10
|
+
- Levi Cole for parts of the cssUnits conversion code
|
|
11
|
+
https://stackoverflow.com/a/66569574/579623
|
|
12
|
+
- Domi for text-width code
|
|
13
|
+
https://stackoverflow.com/a/21015393
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare function convertCssUnitToPixel(cssValue: string, target: HTMLElement, percentTarget: 'width' | 'heigth'): number;
|
|
2
|
+
export declare function getCssUnit(cssValue: string): string;
|
|
3
|
+
export declare function convertCssUnit(cssValue: string | number, target: HTMLElement, percentTarget: 'width' | 'heigth', unit: string): string | number;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
//unsupported: ex, ch, svw, svh, vw, lvh, dvw, dvh
|
|
2
|
+
const units = ['px', 'cm', 'mm', 'q', 'in', 'pc', 'pt', 'rem', 'em', 'vw', 'vh', 'vmin', 'vmax', 'lh', 'rlh', '%', 'ms', 's', 'deg', 'rad', 'grad', 'turn'];
|
|
3
|
+
const pattern = new RegExp(`^([\-\+]?(?:\\d+(?:\\.\\d+)?))(${units.join('|')})$`, 'i');
|
|
4
|
+
export function convertCssUnitToPixel(cssValue, target, percentTarget) {
|
|
5
|
+
const supportedUnits = {
|
|
6
|
+
// Absolute sizes
|
|
7
|
+
'px': value => value,
|
|
8
|
+
'cm': value => value * 38,
|
|
9
|
+
'mm': value => value * 3.8,
|
|
10
|
+
'q': value => value * 0.95,
|
|
11
|
+
'in': value => value * 96,
|
|
12
|
+
'pc': value => value * 16,
|
|
13
|
+
'pt': value => value * 1.333333,
|
|
14
|
+
// Relative sizes
|
|
15
|
+
'rem': value => value * parseFloat(getComputedStyle(document.documentElement).fontSize),
|
|
16
|
+
'em': value => value * parseFloat(getComputedStyle(target).fontSize),
|
|
17
|
+
'vw': value => value / 100 * window.innerWidth,
|
|
18
|
+
'vh': value => value / 100 * window.innerHeight,
|
|
19
|
+
'vmin': value => value / 100 * (window.innerHeight < window.innerWidth ? window.innerHeight : window.innerWidth),
|
|
20
|
+
'vmax': value => value / 100 * (window.innerHeight > window.innerWidth ? window.innerHeight : window.innerWidth),
|
|
21
|
+
'lh': value => value * parseFloat(getComputedStyle(target).lineHeight),
|
|
22
|
+
'rlh': value => value * parseFloat(getComputedStyle(document.documentElement).lineHeight),
|
|
23
|
+
'%': value => value / 100 * (percentTarget == 'heigth' ? target.getBoundingClientRect().height : target.getBoundingClientRect().width),
|
|
24
|
+
// Times
|
|
25
|
+
'ms': value => value,
|
|
26
|
+
's': value => value * 1000,
|
|
27
|
+
// Angles
|
|
28
|
+
'deg': value => value,
|
|
29
|
+
'rad': value => value * (180 / Math.PI),
|
|
30
|
+
'grad': value => value * (180 / 200),
|
|
31
|
+
'turn': value => value * 360
|
|
32
|
+
};
|
|
33
|
+
// If is a match, return example: [ "-2.75rem", "-2.75", "rem" ]
|
|
34
|
+
const matches = cssValue.trim().match(pattern);
|
|
35
|
+
if (matches) {
|
|
36
|
+
const value = Number(matches[1]);
|
|
37
|
+
const unit = matches[2].toLowerCase();
|
|
38
|
+
// Sanity check, make sure unit conversion function exists
|
|
39
|
+
if (unit in supportedUnits) {
|
|
40
|
+
return supportedUnits[unit](value);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//@ts-ignore
|
|
44
|
+
return cssValue;
|
|
45
|
+
}
|
|
46
|
+
export function getCssUnit(cssValue) {
|
|
47
|
+
const matches = cssValue.trim().match(pattern);
|
|
48
|
+
return matches[2].toLowerCase();
|
|
49
|
+
}
|
|
50
|
+
export function convertCssUnit(cssValue, target, percentTarget, unit) {
|
|
51
|
+
const supportedUnits = {
|
|
52
|
+
// Absolute sizes
|
|
53
|
+
'px': value => value,
|
|
54
|
+
'cm': value => value / 38,
|
|
55
|
+
'mm': value => value / 3.8,
|
|
56
|
+
'q': value => value / 0.95,
|
|
57
|
+
'in': value => value / 96,
|
|
58
|
+
'pc': value => value / 16,
|
|
59
|
+
'pt': value => value / 1.333333,
|
|
60
|
+
// Relative sizes
|
|
61
|
+
'rem': value => value / parseFloat(getComputedStyle(document.documentElement).fontSize),
|
|
62
|
+
'em': value => value / parseFloat(getComputedStyle(target).fontSize),
|
|
63
|
+
'vw': value => value * 100 / window.innerWidth,
|
|
64
|
+
'vh': value => value * 100 / window.innerHeight,
|
|
65
|
+
'vmin': value => value * 100 / (window.innerHeight < window.innerWidth ? window.innerHeight : window.innerWidth),
|
|
66
|
+
'vmax': value => value * 100 / (window.innerHeight > window.innerWidth ? window.innerHeight : window.innerWidth),
|
|
67
|
+
'lh': value => value / parseFloat(getComputedStyle(target).lineHeight),
|
|
68
|
+
'rlh': value => value / parseFloat(getComputedStyle(document.documentElement).lineHeight),
|
|
69
|
+
'%': value => value * 100 / (percentTarget == 'heigth' ? target.getBoundingClientRect().height : target.getBoundingClientRect().width),
|
|
70
|
+
// Times
|
|
71
|
+
'ms': value => value,
|
|
72
|
+
's': value => value / 1000,
|
|
73
|
+
// Angles
|
|
74
|
+
'deg': value => value,
|
|
75
|
+
'rad': value => value / (180 / Math.PI),
|
|
76
|
+
'grad': value => value / (180 / 200),
|
|
77
|
+
'turn': value => value / 360
|
|
78
|
+
};
|
|
79
|
+
if (typeof cssValue == 'string')
|
|
80
|
+
cssValue = convertCssUnitToPixel(cssValue, target, percentTarget);
|
|
81
|
+
if (unit in supportedUnits) {
|
|
82
|
+
return supportedUnits[unit](cssValue) + unit;
|
|
83
|
+
}
|
|
84
|
+
return cssValue;
|
|
85
|
+
}
|
|
@@ -58,9 +58,9 @@ export function placeDesignItem(container, designItem, offset, mode) {
|
|
|
58
58
|
}
|
|
59
59
|
if (!hasPositionedLayout)
|
|
60
60
|
designItem.setStyle('position', 'absolute');
|
|
61
|
-
if (oldLeft)
|
|
61
|
+
if (oldLeft || oldRight == null)
|
|
62
62
|
designItem.setStyle('left', (offset.x + (oldLeft ?? 0) + containerLeft) + "px");
|
|
63
|
-
if (oldTop)
|
|
63
|
+
if (oldTop || oldBottom == null)
|
|
64
64
|
designItem.setStyle('top', (offset.y + (oldTop ?? 0) + containerTop) + "px");
|
|
65
65
|
if (oldRight)
|
|
66
66
|
designItem.setStyle('right', ((oldRight ?? 0) - offset.x + containerRight) + "px");
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Uses canvas.measureText to compute and return the width of the given text of given font in pixels.
|
|
3
|
+
*
|
|
4
|
+
* @param {String} text The text to be rendered.
|
|
5
|
+
* @param {String} font The css font descriptor that text is to be rendered with (e.g. "bold 14px verdana").
|
|
6
|
+
*
|
|
7
|
+
* @see https://stackoverflow.com/questions/118241/calculate-text-width-with-javascript/21015393#21015393
|
|
8
|
+
*/
|
|
9
|
+
export declare function getTextWidth(text: string, font: string): number;
|
|
10
|
+
export declare function getFont(el: Element): string;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
let canvas;
|
|
2
|
+
/**
|
|
3
|
+
* Uses canvas.measureText to compute and return the width of the given text of given font in pixels.
|
|
4
|
+
*
|
|
5
|
+
* @param {String} text The text to be rendered.
|
|
6
|
+
* @param {String} font The css font descriptor that text is to be rendered with (e.g. "bold 14px verdana").
|
|
7
|
+
*
|
|
8
|
+
* @see https://stackoverflow.com/questions/118241/calculate-text-width-with-javascript/21015393#21015393
|
|
9
|
+
*/
|
|
10
|
+
export function getTextWidth(text, font) {
|
|
11
|
+
if (!canvas)
|
|
12
|
+
canvas = document.createElement("canvas");
|
|
13
|
+
const context = canvas.getContext("2d");
|
|
14
|
+
context.font = font;
|
|
15
|
+
const metrics = context.measureText(text);
|
|
16
|
+
return metrics.width;
|
|
17
|
+
}
|
|
18
|
+
export function getFont(el) {
|
|
19
|
+
const fontWeight = getComputedStyle(el).fontWeight || 'normal';
|
|
20
|
+
const fontSize = getComputedStyle(el).fontSize || '16px';
|
|
21
|
+
const fontFamily = getComputedStyle(el).fontFamily || 'Times New Roman';
|
|
22
|
+
return `${fontWeight} ${fontSize} ${fontFamily}`;
|
|
23
|
+
}
|
|
@@ -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): DOMMatrix;
|
|
14
14
|
export declare function getByParentsTransformedPointRelatedToCanvas(element: HTMLElement, point: DOMPoint, designerCanvas: IDesignerCanvas): IPoint;
|
|
15
|
-
export declare function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element: HTMLElement, untransformedCornerPointsOffset:
|
|
15
|
+
export declare function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element: HTMLElement, untransformedCornerPointsOffset: IPoint | null, designerCanvas: IDesignerCanvas): [DOMPoint, DOMPoint, DOMPoint, DOMPoint];
|
|
16
16
|
export declare function extractTranslationFromDOMMatrix(matrix: DOMMatrix): DOMPoint;
|
|
17
17
|
export declare function extractRotationAngleFromDOMMatrix(matrix: DOMMatrix): number;
|
|
18
18
|
export declare function normalizeToAbsolutePosition(element: HTMLElement, normalizeProperty: "left" | "top"): string;
|
|
@@ -128,6 +128,7 @@ export function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, u
|
|
|
128
128
|
const topright = 1;
|
|
129
129
|
const bottomleft = 2;
|
|
130
130
|
const bottomright = 3;
|
|
131
|
+
const intUntransformedCornerPointsOffset = untransformedCornerPointsOffset ? { x: untransformedCornerPointsOffset.x / designerCanvas.scaleFactor, y: untransformedCornerPointsOffset.y / designerCanvas.scaleFactor } : { x: 0, y: 0 };
|
|
131
132
|
const p0Offsets = getElementsWindowOffsetWithoutSelfAndParentTransformations(element);
|
|
132
133
|
const p0OffsetsRelatedToCanvas = DOMPoint.fromPoint({
|
|
133
134
|
x: p0Offsets.offsetLeft - designerCanvas.containerBoundingRect.left,
|
|
@@ -151,20 +152,20 @@ export function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, u
|
|
|
151
152
|
}
|
|
152
153
|
const elementWithoutTransformCornerDOMPoints = [];
|
|
153
154
|
elementWithoutTransformCornerDOMPoints[topleft] = DOMPoint.fromPoint({
|
|
154
|
-
x: p0OffsetsRelatedToCanvas.x -
|
|
155
|
-
y: p0OffsetsRelatedToCanvas.y -
|
|
155
|
+
x: p0OffsetsRelatedToCanvas.x - intUntransformedCornerPointsOffset.x,
|
|
156
|
+
y: p0OffsetsRelatedToCanvas.y - intUntransformedCornerPointsOffset.y
|
|
156
157
|
});
|
|
157
158
|
elementWithoutTransformCornerDOMPoints[topright] = DOMPoint.fromPoint({
|
|
158
|
-
x: p0OffsetsRelatedToCanvas.x + width +
|
|
159
|
-
y: p0OffsetsRelatedToCanvas.y -
|
|
159
|
+
x: p0OffsetsRelatedToCanvas.x + width + intUntransformedCornerPointsOffset.x,
|
|
160
|
+
y: p0OffsetsRelatedToCanvas.y - intUntransformedCornerPointsOffset.y
|
|
160
161
|
});
|
|
161
162
|
elementWithoutTransformCornerDOMPoints[bottomleft] = DOMPoint.fromPoint({
|
|
162
|
-
x: p0OffsetsRelatedToCanvas.x -
|
|
163
|
-
y: p0OffsetsRelatedToCanvas.y + height +
|
|
163
|
+
x: p0OffsetsRelatedToCanvas.x - intUntransformedCornerPointsOffset.x,
|
|
164
|
+
y: p0OffsetsRelatedToCanvas.y + height + intUntransformedCornerPointsOffset.y
|
|
164
165
|
});
|
|
165
166
|
elementWithoutTransformCornerDOMPoints[bottomright] = DOMPoint.fromPoint({
|
|
166
|
-
x: p0OffsetsRelatedToCanvas.x + width +
|
|
167
|
-
y: p0OffsetsRelatedToCanvas.y + height +
|
|
167
|
+
x: p0OffsetsRelatedToCanvas.x + width + intUntransformedCornerPointsOffset.x,
|
|
168
|
+
y: p0OffsetsRelatedToCanvas.y + height + intUntransformedCornerPointsOffset.y
|
|
168
169
|
});
|
|
169
170
|
const transformOriginWithoutTransformRelatedToCanvas = DOMPointReadOnly.fromPoint({
|
|
170
171
|
x: p0OffsetsRelatedToCanvas.x + parseInt(getComputedStyle(element).transformOrigin.split(' ')[0]),
|
|
@@ -71,6 +71,7 @@ import { EllipsisExtensionProvider } from '../widgets/designerView/extensions/sv
|
|
|
71
71
|
import { PropertyGroupsService } from './propertiesService/PropertyGroupsService.js';
|
|
72
72
|
import { PlacementExtensionProvider } from '../widgets/designerView/extensions/PlacementExtensionProvider.js';
|
|
73
73
|
import { FlexboxExtensionProvider } from '../widgets/designerView/extensions/FlexboxExtensionProvider.js';
|
|
74
|
+
import { FlexboxExtensionDesignViewConfigButtons } from '../widgets/designerView/extensions/FlexboxExtensionDesignViewConfigButtons.js';
|
|
74
75
|
export function createDefaultServiceContainer() {
|
|
75
76
|
let serviceContainer = new ServiceContainer();
|
|
76
77
|
serviceContainer.register("propertyService", new PolymerPropertiesService());
|
|
@@ -153,7 +154,7 @@ export function createDefaultServiceContainer() {
|
|
|
153
154
|
serviceContainer.designerPointerExtensions.push(
|
|
154
155
|
//new CursorLinePointerExtensionProvider()
|
|
155
156
|
);
|
|
156
|
-
serviceContainer.designViewConfigButtons.push(new ButtonSeperatorProvider(20), new GridExtensionDesignViewConfigButtons());
|
|
157
|
+
serviceContainer.designViewConfigButtons.push(new ButtonSeperatorProvider(20), new GridExtensionDesignViewConfigButtons(), new FlexboxExtensionDesignViewConfigButtons());
|
|
157
158
|
serviceContainer.designViewToolbarButtons.push(new PointerToolButtonProvider(), new SeperatorToolProvider(22), new SelectorToolButtonProvider(), new SeperatorToolProvider(22), new ZoomToolButtonProvider(), new SeperatorToolProvider(22), new DrawToolButtonProvider(), new SeperatorToolProvider(5), new TextToolButtonProvider());
|
|
158
159
|
serviceContainer.designerContextMenuExtensions = [
|
|
159
160
|
new CopyPasteContextMenu(),
|
|
@@ -12,4 +12,5 @@ export declare class CssPropertiesService extends CommonPropertiesService {
|
|
|
12
12
|
getProperty(designItem: IDesignItem, name: string): IProperty;
|
|
13
13
|
getProperties(designItem: IDesignItem): IProperty[];
|
|
14
14
|
getPropertyTarget(designItem: IDesignItem, property: IProperty): BindingTarget;
|
|
15
|
+
setValue(designItems: IDesignItem[], property: IProperty, value: any): void;
|
|
15
16
|
}
|
|
@@ -203,4 +203,12 @@ export class CssPropertiesService extends CommonPropertiesService {
|
|
|
203
203
|
getPropertyTarget(designItem, property) {
|
|
204
204
|
return BindingTarget.css;
|
|
205
205
|
}
|
|
206
|
+
setValue(designItems, property, value) {
|
|
207
|
+
if (this.name == 'styles') {
|
|
208
|
+
super.setValue(designItems, { ...property, propertyType: PropertyType.cssValue }, value);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
super.setValue(designItems, property, value);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
206
214
|
}
|
|
@@ -5,6 +5,7 @@ import { IExtensionManager } from "./IExtensionManger";
|
|
|
5
5
|
export declare class ElementDragTitleExtension extends AbstractExtension {
|
|
6
6
|
private _rect;
|
|
7
7
|
private _text;
|
|
8
|
+
private _width;
|
|
8
9
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
9
10
|
extend(): void;
|
|
10
11
|
_drawMoveOverlay(itemRect: DOMRect): void;
|
|
@@ -1,15 +1,26 @@
|
|
|
1
|
+
import { getTextWidth } from "../../../helper/TextHelper";
|
|
2
|
+
import { getDesignerCanvasNormalizedTransformedCornerDOMPoints } from "../../../helper/TransformHelper";
|
|
1
3
|
import { NamedTools } from "../tools/NamedTools.js";
|
|
2
4
|
import { AbstractExtension } from './AbstractExtension';
|
|
5
|
+
const extensionWidth = 60;
|
|
3
6
|
export class ElementDragTitleExtension extends AbstractExtension {
|
|
4
7
|
_rect;
|
|
5
8
|
_text;
|
|
9
|
+
_width;
|
|
6
10
|
constructor(extensionManager, designerView, extendedItem) {
|
|
7
11
|
super(extensionManager, designerView, extendedItem);
|
|
8
12
|
}
|
|
9
13
|
extend() {
|
|
14
|
+
const transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas);
|
|
10
15
|
const boundRect = this.extendedItem.element.getBoundingClientRect();
|
|
11
|
-
|
|
12
|
-
|
|
16
|
+
let w = getTextWidth(this.extendedItem.name, '10px monospace');
|
|
17
|
+
let elementWidth = Math.sqrt(Math.pow(transformedCornerPoints[1].x - transformedCornerPoints[0].x, 2) + Math.pow(transformedCornerPoints[1].y - transformedCornerPoints[0].y, 2));
|
|
18
|
+
let text = this.extendedItem.name;
|
|
19
|
+
this._width = Math.max(Math.min(elementWidth, w), extensionWidth);
|
|
20
|
+
if (w > this._width)
|
|
21
|
+
text = this.extendedItem.name.substring(0, 10) + '…';
|
|
22
|
+
this._rect = this._drawRect(transformedCornerPoints[0].x, transformedCornerPoints[0].y - 16, this._width, 15, 'svg-primary-selection-move', this._rect);
|
|
23
|
+
this._text = this._drawText(text, (boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 5, 'svg-text-primary', this._text);
|
|
13
24
|
const title = document.createElementNS("http://www.w3.org/2000/svg", "title");
|
|
14
25
|
title.textContent = this.extendedItem.name;
|
|
15
26
|
this._text.appendChild(title);
|
|
@@ -21,21 +32,22 @@ export class ElementDragTitleExtension extends AbstractExtension {
|
|
|
21
32
|
_drawMoveOverlay(itemRect) {
|
|
22
33
|
}
|
|
23
34
|
refresh() {
|
|
24
|
-
const
|
|
25
|
-
const
|
|
35
|
+
const transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, { x: 0, y: 16 }, this.designerCanvas);
|
|
36
|
+
const angle = Math.atan2((transformedCornerPoints[1].y - transformedCornerPoints[0].y), (transformedCornerPoints[1].x - transformedCornerPoints[0].x)) * 180 / Math.PI;
|
|
37
|
+
const transformedCornerPointsTx = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, { x: 0, y: 5 }, this.designerCanvas);
|
|
26
38
|
const h = (15 / this.designerCanvas.scaleFactor);
|
|
27
|
-
const w = (
|
|
28
|
-
|
|
29
|
-
this._rect.setAttribute('
|
|
30
|
-
this._rect.
|
|
39
|
+
const w = (this._width / this.designerCanvas.scaleFactor);
|
|
40
|
+
this._rect.setAttribute('x', '' + transformedCornerPoints[0].x);
|
|
41
|
+
this._rect.setAttribute('y', '' + transformedCornerPoints[0].y);
|
|
42
|
+
this._rect.style.rotate = angle + 'deg';
|
|
43
|
+
this._rect.style.transformBox = 'fill-box';
|
|
31
44
|
this._rect.setAttribute('height', '' + h);
|
|
32
45
|
this._rect.setAttribute('width', '' + w);
|
|
33
46
|
this._rect.style.strokeWidth = (1 / this.designerCanvas.scaleFactor).toString();
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
this._text.setAttribute('x', x);
|
|
37
|
-
this._text.setAttribute('y', y);
|
|
47
|
+
this._text.setAttribute('x', '' + transformedCornerPointsTx[0].x);
|
|
48
|
+
this._text.setAttribute('y', '' + transformedCornerPointsTx[0].y);
|
|
38
49
|
this._text.style.fontSize = (10 / this.designerCanvas.scaleFactor) + 'px';
|
|
50
|
+
this._text.setAttribute('transform', 'rotate(' + angle + ' ' + transformedCornerPointsTx[0].x + ' ' + transformedCornerPointsTx[0].y + ')');
|
|
39
51
|
}
|
|
40
52
|
_pointerEvent(event) {
|
|
41
53
|
event.preventDefault();
|
|
@@ -42,7 +42,7 @@ export class ExtensionManager {
|
|
|
42
42
|
const primaryContainer = DesignItem.GetOrCreateDesignItem(selectionChangedEvent.selectedElements[0].parent.element, this.designerCanvas.serviceContainer, this.designerCanvas.instanceServiceContainer);
|
|
43
43
|
this.applyExtension(primaryContainer, ExtensionType.PrimarySelectionContainer);
|
|
44
44
|
}
|
|
45
|
-
this.refreshExtensions(selectionChangedEvent.selectedElements);
|
|
45
|
+
//this.refreshExtensions(selectionChangedEvent.selectedElements);
|
|
46
46
|
}
|
|
47
47
|
applyExtension(designItem, extensionType, recursive = false) {
|
|
48
48
|
if (designItem && designItem.nodeType == NodeType.Element) {
|
|
@@ -7,7 +7,7 @@ export class FlexboxExtension extends AbstractExtension {
|
|
|
7
7
|
super(extensionManager, designerView, extendedItem);
|
|
8
8
|
}
|
|
9
9
|
extend() {
|
|
10
|
-
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element,
|
|
10
|
+
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas);
|
|
11
11
|
this._path = this._drawTransformedRect(transformedCornerPoints, 'svg-flexbox', this._path, OverlayLayer.Background);
|
|
12
12
|
}
|
|
13
13
|
refresh() {
|
package/dist/elements/widgets/designerView/extensions/FlexboxExtensionDesignViewConfigButtons.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DesignerView } from "../designerView.js";
|
|
2
|
+
import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
3
|
+
import { IDesignViewConfigButtonsProvider } from "../IDesignViewConfigButtonsProvider.js";
|
|
4
|
+
export declare class FlexboxExtensionDesignViewConfigButtons implements IDesignViewConfigButtonsProvider {
|
|
5
|
+
provideButtons(designerView: DesignerView, designerCanvas: IDesignerCanvas): HTMLElement[];
|
|
6
|
+
}
|
package/dist/elements/widgets/designerView/extensions/FlexboxExtensionDesignViewConfigButtons.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { flexboxExtensionShowOverlayOptionName } from "./FlexboxExtensionProvider.js";
|
|
2
|
+
export class FlexboxExtensionDesignViewConfigButtons {
|
|
3
|
+
provideButtons(designerView, designerCanvas) {
|
|
4
|
+
const extensionOptions = designerCanvas.instanceServiceContainer.designContext.extensionOptions;
|
|
5
|
+
const btn = document.createElement('div');
|
|
6
|
+
btn.innerText = 'F';
|
|
7
|
+
btn.title = 'show flexbox overlay';
|
|
8
|
+
btn.className = 'toolbar-control';
|
|
9
|
+
if (extensionOptions[flexboxExtensionShowOverlayOptionName] !== false)
|
|
10
|
+
btn.classList.add('selected');
|
|
11
|
+
btn.onclick = () => {
|
|
12
|
+
const val = extensionOptions[flexboxExtensionShowOverlayOptionName];
|
|
13
|
+
extensionOptions[flexboxExtensionShowOverlayOptionName] = val === false ? true : false;
|
|
14
|
+
if (extensionOptions[flexboxExtensionShowOverlayOptionName] !== false)
|
|
15
|
+
btn.classList.add('selected');
|
|
16
|
+
else
|
|
17
|
+
btn.classList.remove('selected');
|
|
18
|
+
};
|
|
19
|
+
return [btn];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -3,6 +3,7 @@ import { IDesignItem } from "../../../item/IDesignItem";
|
|
|
3
3
|
import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
4
4
|
import { IDesignerExtension } from "./IDesignerExtension";
|
|
5
5
|
import { IExtensionManager } from "./IExtensionManger";
|
|
6
|
+
export declare const flexboxExtensionShowOverlayOptionName = "flexboxExtensionShowOverlay";
|
|
6
7
|
export declare class FlexboxExtensionProvider implements IDesignerExtensionProvider {
|
|
7
8
|
shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
|
|
8
9
|
getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { css } from "@node-projects/base-custom-webcomponent";
|
|
2
2
|
import { FlexboxExtension } from "./FlexboxExtension";
|
|
3
|
+
export const flexboxExtensionShowOverlayOptionName = 'flexboxExtensionShowOverlay';
|
|
3
4
|
export class FlexboxExtensionProvider {
|
|
4
5
|
shouldExtend(extensionManager, designerView, designItem) {
|
|
5
6
|
const display = getComputedStyle(designItem.element).display;
|
|
6
7
|
if (display == 'flex' || display == 'inline-flex')
|
|
7
|
-
return
|
|
8
|
+
return designerView.instanceServiceContainer.designContext.extensionOptions[flexboxExtensionShowOverlayOptionName] !== false;
|
|
8
9
|
return false;
|
|
9
10
|
}
|
|
10
11
|
getExtension(extensionManager, designerView, designItem) {
|
|
@@ -10,7 +10,7 @@ export class GrayOutDragOverContainerExtension extends AbstractExtension {
|
|
|
10
10
|
this.refresh();
|
|
11
11
|
}
|
|
12
12
|
refresh() {
|
|
13
|
-
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element,
|
|
13
|
+
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas);
|
|
14
14
|
this._rect = this._drawTransformedRect(transformedCornerPoints, 'svg-rect-enter-container', this._rect, OverlayLayer.Background);
|
|
15
15
|
}
|
|
16
16
|
dispose() {
|
package/dist/elements/widgets/designerView/extensions/GridExtensionDesignViewConfigButtons copy.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DesignerView } from "../designerView.js";
|
|
2
|
+
import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
3
|
+
import { IDesignViewConfigButtonsProvider } from "../IDesignViewConfigButtonsProvider.js";
|
|
4
|
+
export declare class GridExtensionDesignViewConfigButtons implements IDesignViewConfigButtonsProvider {
|
|
5
|
+
provideButtons(designerView: DesignerView, designerCanvas: IDesignerCanvas): HTMLElement[];
|
|
6
|
+
}
|
package/dist/elements/widgets/designerView/extensions/GridExtensionDesignViewConfigButtons copy.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { gridExtensionShowOverlayOptionName } from "./GridExtensionProvider.js";
|
|
2
|
+
export class GridExtensionDesignViewConfigButtons {
|
|
3
|
+
provideButtons(designerView, designerCanvas) {
|
|
4
|
+
const extensionOptions = designerCanvas.instanceServiceContainer.designContext.extensionOptions;
|
|
5
|
+
const btn = document.createElement('div');
|
|
6
|
+
btn.innerText = 'G';
|
|
7
|
+
btn.title = 'show grid overlay';
|
|
8
|
+
btn.className = 'toolbar-control';
|
|
9
|
+
if (extensionOptions[gridExtensionShowOverlayOptionName] !== false)
|
|
10
|
+
btn.classList.add('selected');
|
|
11
|
+
btn.onclick = () => {
|
|
12
|
+
const val = extensionOptions[gridExtensionShowOverlayOptionName];
|
|
13
|
+
extensionOptions[gridExtensionShowOverlayOptionName] = val === false ? true : false;
|
|
14
|
+
if (extensionOptions[gridExtensionShowOverlayOptionName] !== false)
|
|
15
|
+
btn.classList.add('selected');
|
|
16
|
+
else
|
|
17
|
+
btn.classList.remove('selected');
|
|
18
|
+
};
|
|
19
|
+
return [btn];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getDesignerCanvasNormalizedTransformedCornerDOMPoints } from "../../../helper/TransformHelper";
|
|
1
2
|
import { AbstractExtension } from './AbstractExtension';
|
|
2
3
|
import { OverlayLayer } from "./OverlayLayer.js";
|
|
3
4
|
export class InvisibleDivExtension extends AbstractExtension {
|
|
@@ -9,8 +10,8 @@ export class InvisibleDivExtension extends AbstractExtension {
|
|
|
9
10
|
this.refresh();
|
|
10
11
|
}
|
|
11
12
|
refresh() {
|
|
12
|
-
|
|
13
|
-
this._rect = this.
|
|
13
|
+
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas);
|
|
14
|
+
this._rect = this._drawTransformedRect(transformedCornerPoints, 'svg-invisible-div', this._rect, OverlayLayer.Background);
|
|
14
15
|
}
|
|
15
16
|
dispose() {
|
|
16
17
|
this._removeAllOverlays();
|
|
@@ -3,10 +3,7 @@ import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
|
3
3
|
import { AbstractExtension } from "./AbstractExtension";
|
|
4
4
|
import { IExtensionManager } from "./IExtensionManger";
|
|
5
5
|
export declare class MouseOverExtension extends AbstractExtension {
|
|
6
|
-
private
|
|
7
|
-
private _line2;
|
|
8
|
-
private _line3;
|
|
9
|
-
private _line4;
|
|
6
|
+
private _rect;
|
|
10
7
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
11
8
|
extend(): void;
|
|
12
9
|
refresh(): void;
|
|
@@ -2,10 +2,7 @@ import { getDesignerCanvasNormalizedTransformedCornerDOMPoints } from "../../../
|
|
|
2
2
|
import { AbstractExtension } from "./AbstractExtension";
|
|
3
3
|
const offset = 3;
|
|
4
4
|
export class MouseOverExtension extends AbstractExtension {
|
|
5
|
-
|
|
6
|
-
_line2;
|
|
7
|
-
_line3;
|
|
8
|
-
_line4;
|
|
5
|
+
_rect;
|
|
9
6
|
constructor(extensionManager, designerView, extendedItem) {
|
|
10
7
|
super(extensionManager, designerView, extendedItem);
|
|
11
8
|
}
|
|
@@ -13,15 +10,9 @@ export class MouseOverExtension extends AbstractExtension {
|
|
|
13
10
|
this.refresh();
|
|
14
11
|
}
|
|
15
12
|
refresh() {
|
|
16
|
-
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, offset, this.designerCanvas);
|
|
17
|
-
this.
|
|
18
|
-
this.
|
|
19
|
-
this._line3 = this._drawLine(transformedCornerPoints[1].x, transformedCornerPoints[1].y, transformedCornerPoints[3].x, transformedCornerPoints[3].y, 'svg-hover', this._line3);
|
|
20
|
-
this._line4 = this._drawLine(transformedCornerPoints[2].x, transformedCornerPoints[2].y, transformedCornerPoints[3].x, transformedCornerPoints[3].y, 'svg-hover', this._line4);
|
|
21
|
-
this._line1.style.strokeWidth = (2 / this.designerCanvas.zoomFactor).toString();
|
|
22
|
-
this._line2.style.strokeWidth = (2 / this.designerCanvas.zoomFactor).toString();
|
|
23
|
-
this._line3.style.strokeWidth = (2 / this.designerCanvas.zoomFactor).toString();
|
|
24
|
-
this._line4.style.strokeWidth = (2 / this.designerCanvas.zoomFactor).toString();
|
|
13
|
+
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, { x: offset, y: offset }, this.designerCanvas);
|
|
14
|
+
this._rect = this._drawTransformedRect(transformedCornerPoints, 'svg-hover', this._rect);
|
|
15
|
+
this._rect.style.strokeWidth = (2 / this.designerCanvas.zoomFactor).toString();
|
|
25
16
|
}
|
|
26
17
|
dispose() {
|
|
27
18
|
this._removeAllOverlays();
|
|
@@ -26,7 +26,7 @@ export class ResizeExtension extends AbstractExtension {
|
|
|
26
26
|
}
|
|
27
27
|
refresh() {
|
|
28
28
|
//#region Resizer circles
|
|
29
|
-
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element,
|
|
29
|
+
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas);
|
|
30
30
|
this._circle1 = this._drawResizerOverlay(transformedCornerPoints[0].x, transformedCornerPoints[0].y, 'nw-resize', this._circle1);
|
|
31
31
|
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);
|
|
32
32
|
this._circle3 = this._drawResizerOverlay(transformedCornerPoints[1].x, transformedCornerPoints[1].y, 'ne-resize', this._circle3);
|
|
@@ -20,7 +20,7 @@ export class RotateExtension extends AbstractExtension {
|
|
|
20
20
|
this._rotateIcon = this._drawRotateOverlay(rect, this._rotateIcon);
|
|
21
21
|
}
|
|
22
22
|
_drawRotateOverlay(itemRect, oldRotateIcon) {
|
|
23
|
-
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, 10, this.designerCanvas);
|
|
23
|
+
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, { x: 10, y: 10 }, this.designerCanvas);
|
|
24
24
|
let rotateIconPosition = transformedCornerPoints[0];
|
|
25
25
|
if (!oldRotateIcon) {
|
|
26
26
|
const g = document.createElementNS("http://www.w3.org/2000/svg", "g");
|
|
@@ -40,13 +40,13 @@ export class RotateExtension extends AbstractExtension {
|
|
|
40
40
|
g.addEventListener(EventNames.PointerMove, event => this._pointerActionTypeRotate(event));
|
|
41
41
|
g.addEventListener(EventNames.PointerUp, event => this._pointerActionTypeRotate(event));
|
|
42
42
|
g.setAttribute('class', 'svg-primary-rotate');
|
|
43
|
-
g.setAttribute('transform', 'translate(' + rotateIconPosition.x + ',' + rotateIconPosition.y + ')');
|
|
43
|
+
g.setAttribute('transform', 'translate(' + rotateIconPosition.x + ',' + rotateIconPosition.y + ') scale(' + 1 / this.designerCanvas.scaleFactor + ')');
|
|
44
44
|
this.overlayLayerView.addOverlay(g);
|
|
45
45
|
this.overlays.push(g);
|
|
46
46
|
return g;
|
|
47
47
|
}
|
|
48
48
|
else {
|
|
49
|
-
oldRotateIcon.setAttribute('transform', 'translate(' + rotateIconPosition.x + ',' + rotateIconPosition.y + ')');
|
|
49
|
+
oldRotateIcon.setAttribute('transform', 'translate(' + rotateIconPosition.x + ',' + rotateIconPosition.y + ') scale(' + 1 / this.designerCanvas.scaleFactor + ')');
|
|
50
50
|
return oldRotateIcon;
|
|
51
51
|
}
|
|
52
52
|
}
|
|
@@ -77,7 +77,7 @@ export class RotateExtension extends AbstractExtension {
|
|
|
77
77
|
angle *= -1;
|
|
78
78
|
const rotationMatrix3d = getRotationMatrix3d('z', angle);
|
|
79
79
|
rotateElementByMatrix3d(this.extendedItem.element, rotationMatrix3d);
|
|
80
|
-
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, 30, this.designerCanvas);
|
|
80
|
+
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, { x: 30, y: 30 }, this.designerCanvas);
|
|
81
81
|
let angleTextPosition = transformedCornerPoints[0];
|
|
82
82
|
this._textAngle = this._drawTextWithBackground(this._actualRotationAngle + '°', angleTextPosition.x, angleTextPosition.y, 'white', 'svg-rotate-text', this._textAngle);
|
|
83
83
|
this._textAngle[2].style.fontSize = (12 / this.designerCanvas.scaleFactor) + 'px';
|
|
@@ -12,7 +12,7 @@ export class SelectionDefaultExtension extends AbstractExtension {
|
|
|
12
12
|
this.refresh();
|
|
13
13
|
}
|
|
14
14
|
refresh() {
|
|
15
|
-
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element,
|
|
15
|
+
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas);
|
|
16
16
|
this._line1 = this._drawLine(transformedCornerPoints[0].x, transformedCornerPoints[0].y, transformedCornerPoints[1].x, transformedCornerPoints[1].y, 'svg-selection', this._line1);
|
|
17
17
|
this._line2 = this._drawLine(transformedCornerPoints[0].x, transformedCornerPoints[0].y, transformedCornerPoints[2].x, transformedCornerPoints[2].y, 'svg-selection', this._line2);
|
|
18
18
|
this._line3 = this._drawLine(transformedCornerPoints[1].x, transformedCornerPoints[1].y, transformedCornerPoints[3].x, transformedCornerPoints[3].y, 'svg-selection', this._line3);
|
|
@@ -6,6 +6,7 @@ export declare class TransformOriginExtension extends AbstractExtension {
|
|
|
6
6
|
private _startPos;
|
|
7
7
|
private _circle;
|
|
8
8
|
private _circle2;
|
|
9
|
+
private _oldValue;
|
|
9
10
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
10
11
|
extend(): void;
|
|
11
12
|
pointerEvent(event: PointerEvent): void;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { EventNames } from "../../../../enums/EventNames";
|
|
2
|
+
import { convertCssUnit, getCssUnit } from "../../../helper/CssUnitConverter";
|
|
2
3
|
import { AbstractExtension } from './AbstractExtension';
|
|
3
4
|
export class TransformOriginExtension extends AbstractExtension {
|
|
4
5
|
_startPos;
|
|
5
6
|
_circle;
|
|
6
7
|
_circle2;
|
|
8
|
+
_oldValue;
|
|
7
9
|
constructor(extensionManager, designerView, extendedItem) {
|
|
8
10
|
super(extensionManager, designerView, extendedItem);
|
|
9
11
|
}
|
|
@@ -14,20 +16,20 @@ export class TransformOriginExtension extends AbstractExtension {
|
|
|
14
16
|
const y = 1;
|
|
15
17
|
const to = computed.transformOrigin.split(' '); // This value remains the same regardless of scalefactor
|
|
16
18
|
const toInPercentage = [];
|
|
17
|
-
toInPercentage[0] = parseInt(to[0]) / parseInt(this.extendedItem.element.
|
|
18
|
-
toInPercentage[1] = parseInt(to[1]) / parseInt(this.extendedItem.element.
|
|
19
|
+
toInPercentage[0] = parseInt(to[0]) / parseInt(getComputedStyle(this.extendedItem.element).width); // This value remains the same regardless of scalefactor
|
|
20
|
+
toInPercentage[1] = parseInt(to[1]) / parseInt(getComputedStyle(this.extendedItem.element).height); // This value remains the same regardless of scalefactor
|
|
19
21
|
const toDOMPoint = new DOMPoint(rect.x + toInPercentage[x] * rect.width, rect.y + toInPercentage[y] * rect.height);
|
|
20
|
-
this._circle = this._drawCircle(toDOMPoint.x, toDOMPoint.y, 5 / this.designerCanvas.
|
|
22
|
+
this._circle = this._drawCircle(toDOMPoint.x, toDOMPoint.y, 5 / this.designerCanvas.zoomFactor, 'svg-transform-origin');
|
|
21
23
|
this._circle.style.strokeWidth = (1 / this.designerCanvas.zoomFactor).toString();
|
|
22
|
-
this._circle.
|
|
23
|
-
this._circle2 = this._drawCircle(toDOMPoint.x, toDOMPoint.y, 1 / this.designerCanvas.
|
|
24
|
+
this._circle.style.cursor = 'pointer';
|
|
25
|
+
this._circle2 = this._drawCircle(toDOMPoint.x, toDOMPoint.y, 1 / this.designerCanvas.zoomFactor, 'svg-transform-origin');
|
|
24
26
|
this._circle2.style.strokeWidth = (1 / this.designerCanvas.zoomFactor).toString();
|
|
25
|
-
this._circle2.
|
|
27
|
+
this._circle2.style.pointerEvents = 'pointer-events: none';
|
|
26
28
|
this._circle.addEventListener(EventNames.PointerDown, event => this.pointerEvent(event));
|
|
27
29
|
this._circle.addEventListener(EventNames.PointerMove, event => this.pointerEvent(event));
|
|
28
30
|
this._circle.addEventListener(EventNames.PointerUp, event => this.pointerEvent(event)); //TODO: -> assign to window
|
|
29
|
-
if (this.extendedItem.styles.get('transform-origin')
|
|
30
|
-
this.extendedItem.
|
|
31
|
+
if (this.extendedItem.styles.get('transform-origin')) {
|
|
32
|
+
this._oldValue = this.extendedItem.styles.get('transform-origin');
|
|
31
33
|
}
|
|
32
34
|
}
|
|
33
35
|
pointerEvent(event) {
|
|
@@ -64,7 +66,22 @@ export class TransformOriginExtension extends AbstractExtension {
|
|
|
64
66
|
const dy = normalized.y - this._startPos.y;
|
|
65
67
|
const newX = (dx + parseFloat(to[x]));
|
|
66
68
|
const newY = (dy + parseFloat(to[y]));
|
|
67
|
-
this.
|
|
69
|
+
if (this._oldValue) { //Restore old units
|
|
70
|
+
try {
|
|
71
|
+
const oldSplit = this._oldValue.split(' ');
|
|
72
|
+
let newXs = convertCssUnit(newX, this.extendedItem.element, 'width', getCssUnit(oldSplit[0]));
|
|
73
|
+
let newYs = convertCssUnit(newX, this.extendedItem.element, 'width', getCssUnit(oldSplit[0]));
|
|
74
|
+
if (oldSplit.length > 1) {
|
|
75
|
+
newYs = convertCssUnit(newY, this.extendedItem.element, 'heigth', getCssUnit(oldSplit[1]));
|
|
76
|
+
}
|
|
77
|
+
this.extendedItem.setStyle('transform-origin', newXs + ' ' + newYs);
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
this.extendedItem.setStyle('transform-origin', newX + 'px' + ' ' + newY + 'px');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else
|
|
84
|
+
this.extendedItem.setStyle('transform-origin', newX + 'px' + ' ' + newY + 'px');
|
|
68
85
|
this.refresh();
|
|
69
86
|
this._startPos = null;
|
|
70
87
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -162,6 +162,7 @@ export * from "./elements/widgets/designerView/extensions/CanvasExtensionProvide
|
|
|
162
162
|
export * from "./elements/widgets/designerView/extensions/ExtensionManager.js";
|
|
163
163
|
export * from "./elements/widgets/designerView/extensions/FlexboxExtension.js";
|
|
164
164
|
export * from "./elements/widgets/designerView/extensions/FlexboxExtensionProvider.js";
|
|
165
|
+
export * from "./elements/widgets/designerView/extensions/FlexboxExtensionDesignViewConfigButtons.js";
|
|
165
166
|
export * from "./elements/widgets/designerView/extensions/GrayOutExtension.js";
|
|
166
167
|
export * from "./elements/widgets/designerView/extensions/GrayOutExtensionProvider.js";
|
|
167
168
|
export * from "./elements/widgets/designerView/extensions/GrayOutDragOverContainerExtension.js";
|
package/dist/index.js
CHANGED
|
@@ -119,6 +119,7 @@ export * from "./elements/widgets/designerView/extensions/CanvasExtensionProvide
|
|
|
119
119
|
export * from "./elements/widgets/designerView/extensions/ExtensionManager.js";
|
|
120
120
|
export * from "./elements/widgets/designerView/extensions/FlexboxExtension.js";
|
|
121
121
|
export * from "./elements/widgets/designerView/extensions/FlexboxExtensionProvider.js";
|
|
122
|
+
export * from "./elements/widgets/designerView/extensions/FlexboxExtensionDesignViewConfigButtons.js";
|
|
122
123
|
export * from "./elements/widgets/designerView/extensions/GrayOutExtension.js";
|
|
123
124
|
export * from "./elements/widgets/designerView/extensions/GrayOutExtensionProvider.js";
|
|
124
125
|
export * from "./elements/widgets/designerView/extensions/GrayOutDragOverContainerExtension.js";
|