@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.
Files changed (34) hide show
  1. package/ACKNOWLEDGMENTS +5 -1
  2. package/dist/elements/helper/CssUnitConverter.d.ts +3 -0
  3. package/dist/elements/helper/CssUnitConverter.js +85 -0
  4. package/dist/elements/helper/LayoutHelper.js +2 -2
  5. package/dist/elements/helper/TextHelper.d.ts +10 -0
  6. package/dist/elements/helper/TextHelper.js +23 -0
  7. package/dist/elements/helper/TransformHelper.d.ts +1 -1
  8. package/dist/elements/helper/TransformHelper.js +9 -8
  9. package/dist/elements/services/DefaultServiceBootstrap.js +2 -1
  10. package/dist/elements/services/propertiesService/services/CssPropertiesService.d.ts +1 -0
  11. package/dist/elements/services/propertiesService/services/CssPropertiesService.js +8 -0
  12. package/dist/elements/widgets/designerView/designerCanvas.js +1 -0
  13. package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtension.d.ts +1 -0
  14. package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtension.js +24 -12
  15. package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +1 -1
  16. package/dist/elements/widgets/designerView/extensions/FlexboxExtension.js +1 -1
  17. package/dist/elements/widgets/designerView/extensions/FlexboxExtensionDesignViewConfigButtons.d.ts +6 -0
  18. package/dist/elements/widgets/designerView/extensions/FlexboxExtensionDesignViewConfigButtons.js +21 -0
  19. package/dist/elements/widgets/designerView/extensions/FlexboxExtensionProvider.d.ts +1 -0
  20. package/dist/elements/widgets/designerView/extensions/FlexboxExtensionProvider.js +2 -1
  21. package/dist/elements/widgets/designerView/extensions/GrayOutDragOverContainerExtension.js +1 -1
  22. package/dist/elements/widgets/designerView/extensions/GridExtensionDesignViewConfigButtons copy.d.ts +6 -0
  23. package/dist/elements/widgets/designerView/extensions/GridExtensionDesignViewConfigButtons copy.js +21 -0
  24. package/dist/elements/widgets/designerView/extensions/InvisibleDivExtension.js +3 -2
  25. package/dist/elements/widgets/designerView/extensions/MouseOverExtension.d.ts +1 -4
  26. package/dist/elements/widgets/designerView/extensions/MouseOverExtension.js +4 -13
  27. package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +1 -1
  28. package/dist/elements/widgets/designerView/extensions/RotateExtension.js +4 -4
  29. package/dist/elements/widgets/designerView/extensions/SelectionDefaultExtension.js +1 -1
  30. package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.d.ts +1 -0
  31. package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.js +26 -9
  32. package/dist/index.d.ts +1 -0
  33. package/dist/index.js +1 -0
  34. 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: number, designerCanvas: IDesignerCanvas): [DOMPoint, DOMPoint, DOMPoint, DOMPoint];
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 - untransformedCornerPointsOffset,
155
- y: p0OffsetsRelatedToCanvas.y - untransformedCornerPointsOffset
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 + untransformedCornerPointsOffset,
159
- y: p0OffsetsRelatedToCanvas.y - untransformedCornerPointsOffset
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 - untransformedCornerPointsOffset,
163
- y: p0OffsetsRelatedToCanvas.y + height + untransformedCornerPointsOffset
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 + untransformedCornerPointsOffset,
167
- y: p0OffsetsRelatedToCanvas.y + height + untransformedCornerPointsOffset
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
  }
@@ -105,6 +105,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
105
105
  width: 100%;
106
106
  height: 100%;
107
107
  transform-origin: 0 0;
108
+ position: relative;
108
109
  }
109
110
 
110
111
  #node-projects-designer-canvas-canvas.dragFileActive {
@@ -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
- this._rect = this._drawRect((boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 16, 60, 15, 'svg-primary-selection-move', this._rect);
12
- this._text = this._drawText(this.extendedItem.name.substring(0, 10) + '…', (boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor, (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 5, 'svg-text-primary', this._text);
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 boundRect = this.extendedItem.element.getBoundingClientRect();
25
- const xr = (boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor;
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 = (60 / this.designerCanvas.scaleFactor);
28
- const yr = (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - h;
29
- this._rect.setAttribute('x', xr);
30
- this._rect.setAttribute('y', yr);
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
- const x = (boundRect.x - this.designerCanvas.containerBoundingRect.x) / this.designerCanvas.scaleFactor;
35
- const y = (boundRect.y - this.designerCanvas.containerBoundingRect.y) / this.designerCanvas.scaleFactor - 5 / this.designerCanvas.scaleFactor;
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, 0, this.designerCanvas);
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() {
@@ -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
+ }
@@ -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 true;
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, 0, this.designerCanvas);
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() {
@@ -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
+ }
@@ -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
- const itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
13
- this._rect = this._drawRect(itemRect.x, itemRect.y, itemRect.width, itemRect.height, 'svg-invisible-div', this._rect, OverlayLayer.Background);
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 _line1;
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
- _line1;
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._line1 = this._drawLine(transformedCornerPoints[0].x, transformedCornerPoints[0].y, transformedCornerPoints[1].x, transformedCornerPoints[1].y, 'svg-hover', this._line1);
18
- this._line2 = this._drawLine(transformedCornerPoints[0].x, transformedCornerPoints[0].y, transformedCornerPoints[2].x, transformedCornerPoints[2].y, 'svg-hover', this._line2);
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, 0, this.designerCanvas);
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, 0, this.designerCanvas);
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.style.width); // This value remains the same regardless of scalefactor
18
- toInPercentage[1] = parseInt(to[1]) / parseInt(this.extendedItem.element.style.height); // This value remains the same regardless of scalefactor
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.scaleFactor, 'svg-transform-origin');
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.setAttribute('style', 'cursor: pointer');
23
- this._circle2 = this._drawCircle(toDOMPoint.x, toDOMPoint.y, 1 / this.designerCanvas.scaleFactor, 'svg-transform-origin');
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.setAttribute('style', 'pointer-events: none');
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') == null || this.extendedItem.styles.get('transform-origin') == '') {
30
- this.extendedItem.setStyle('transform-origin', this._circle.getAttribute('cx') + ' ' + this._circle.getAttribute('cy'));
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.extendedItem.setStyle('transform-origin', newX + 'px' + ' ' + newY + 'px');
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";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "description": "A UI designer for Polymer apps",
3
3
  "name": "@node-projects/web-component-designer",
4
- "version": "0.0.151",
4
+ "version": "0.0.153",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "",