@node-projects/web-component-designer 0.0.238 → 0.0.240

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 (47) hide show
  1. package/assets/images/layout/TransformTool.svg +21 -0
  2. package/dist/elements/helper/ElementHelper.d.ts +4 -0
  3. package/dist/elements/helper/ElementHelper.js +29 -0
  4. package/dist/elements/services/DefaultServiceBootstrap.js +7 -2
  5. package/dist/elements/services/ServiceContainer.d.ts +6 -3
  6. package/dist/elements/services/ServiceContainer.js +5 -2
  7. package/dist/elements/services/dragDropService/DragDropService.d.ts +8 -2
  8. package/dist/elements/services/dragDropService/DragDropService.js +79 -21
  9. package/dist/elements/services/dragDropService/ExternalDragDropService copy.d.ts +6 -0
  10. package/dist/elements/services/dragDropService/ExternalDragDropService copy.js +28 -0
  11. package/dist/elements/services/dragDropService/ExternalDragDropService.d.ts +6 -0
  12. package/dist/elements/services/dragDropService/ExternalDragDropService.js +28 -0
  13. package/dist/elements/services/dragDropService/IDragDropService.d.ts +6 -1
  14. package/dist/elements/services/dragDropService/IExternalDragDropService copy.d.ts +5 -0
  15. package/dist/elements/services/dragDropService/IExternalDragDropService copy.js +1 -0
  16. package/dist/elements/services/dragDropService/IExternalDragDropService.d.ts +5 -0
  17. package/dist/elements/services/dragDropService/IExternalDragDropService.js +1 -0
  18. package/dist/elements/services/placementService/DefaultPlacementService.d.ts +1 -0
  19. package/dist/elements/services/placementService/DefaultPlacementService.js +11 -0
  20. package/dist/elements/services/placementService/FlexBoxPlacementService.d.ts +1 -0
  21. package/dist/elements/services/placementService/FlexBoxPlacementService.js +2 -0
  22. package/dist/elements/services/placementService/GridPlacementService.d.ts +1 -0
  23. package/dist/elements/services/placementService/GridPlacementService.js +2 -0
  24. package/dist/elements/services/placementService/IPlacementService.d.ts +5 -4
  25. package/dist/elements/widgets/designerView/designerCanvas.d.ts +0 -2
  26. package/dist/elements/widgets/designerView/designerCanvas.js +36 -95
  27. package/dist/elements/widgets/designerView/extensions/MultipleSelectionRectExtension.d.ts +15 -0
  28. package/dist/elements/widgets/designerView/extensions/MultipleSelectionRectExtension.js +34 -0
  29. package/dist/elements/widgets/designerView/extensions/MultipleSelectionRectExtensionProvider.d.ts +10 -0
  30. package/dist/elements/widgets/designerView/extensions/MultipleSelectionRectExtensionProvider.js +13 -0
  31. package/dist/elements/widgets/designerView/extensions/svg/EllipsisExtension.js +2 -2
  32. package/dist/elements/widgets/designerView/extensions/svg/LineExtension.js +2 -2
  33. package/dist/elements/widgets/designerView/extensions/svg/PathExtension.js +2 -2
  34. package/dist/elements/widgets/designerView/extensions/svg/RectExtension.js +2 -2
  35. package/dist/elements/widgets/designerView/tools/DrawEllipsisTool.js +2 -2
  36. package/dist/elements/widgets/designerView/tools/DrawLineTool.js +2 -2
  37. package/dist/elements/widgets/designerView/tools/DrawPathTool.js +2 -2
  38. package/dist/elements/widgets/designerView/tools/DrawRectTool.js +2 -2
  39. package/dist/elements/widgets/designerView/tools/toolBar/DesignerToolbar.d.ts +1 -1
  40. package/dist/elements/widgets/designerView/tools/toolBar/DesignerToolbar.js +6 -6
  41. package/dist/elements/widgets/designerView/tools/toolBar/buttons/TransformToolButtonProvider.d.ts +5 -0
  42. package/dist/elements/widgets/designerView/tools/toolBar/buttons/TransformToolButtonProvider.js +10 -0
  43. package/dist/elements/widgets/designerView/tools/toolBar/popups/TransformToolPopup.d.ts +31 -0
  44. package/dist/elements/widgets/designerView/tools/toolBar/popups/TransformToolPopup.js +293 -0
  45. package/dist/index.d.ts +3 -0
  46. package/dist/index.js +2 -0
  47. package/package.json +6 -6
@@ -2,7 +2,7 @@ import { EventNames } from '../../../enums/EventNames.js';
2
2
  import { InstanceServiceContainer } from '../../services/InstanceServiceContainer.js';
3
3
  import { DesignItem } from '../../item/DesignItem.js';
4
4
  import { BaseCustomWebComponentLazyAppend, css, html, TypedEvent, cssFromString } from '@node-projects/base-custom-webcomponent';
5
- import { dragDropFormatNameElementDefinition, dragDropFormatNameBindingObject } from '../../../Constants.js';
5
+ import { dragDropFormatNameBindingObject } from '../../../Constants.js';
6
6
  import { InsertAction } from '../../services/undoService/transactionItems/InsertAction.js';
7
7
  import { Snaplines } from './Snaplines.js';
8
8
  import { DeleteAction } from '../../services/undoService/transactionItems/DeleteAction.js';
@@ -677,7 +677,6 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
677
677
  }
678
678
  this.snapLines.clearSnaplines();
679
679
  }
680
- _dragOverExtensionItem;
681
680
  _onDragEnter(event) {
682
681
  this._fillCalculationrects();
683
682
  event.preventDefault();
@@ -698,15 +697,19 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
698
697
  }
699
698
  else {
700
699
  this._lastDdElement = null;
700
+ const dragDropService = this.serviceContainer.dragDropService;
701
+ if (dragDropService) {
702
+ dragDropService.dragEnter(this, event);
703
+ }
701
704
  }
702
705
  }
703
706
  _onDragLeave(event) {
704
707
  this._fillCalculationrects();
705
708
  event.preventDefault();
706
709
  this._canvas.classList.remove('dragFileActive');
707
- if (this._dragOverExtensionItem) {
708
- this.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.ContainerExternalDragOver);
709
- this._dragOverExtensionItem = null;
710
+ const dragDropService = this.serviceContainer.dragDropService;
711
+ if (dragDropService) {
712
+ dragDropService.dragLeave(this, event);
710
713
  }
711
714
  }
712
715
  _lastDdElement = null;
@@ -721,7 +724,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
721
724
  }*/
722
725
  this._fillCalculationrects();
723
726
  if (event.dataTransfer.types.length > 0 && event.dataTransfer.types[0] == 'Files') {
724
- const ddService = this.serviceContainer.dragDropService;
727
+ const ddService = this.serviceContainer.externalDragDropService;
725
728
  if (ddService) {
726
729
  const effect = ddService.dragOver(event);
727
730
  event.dataTransfer.dropEffect = effect;
@@ -732,63 +735,26 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
732
735
  else {
733
736
  const hasTransferDataBindingObject = event.dataTransfer.types.indexOf(dragDropFormatNameBindingObject) >= 0;
734
737
  if (hasTransferDataBindingObject) {
735
- const ddService = this.serviceContainer.bindableObjectDragDropService;
736
- if (ddService) {
738
+ const bindableDdService = this.serviceContainer.bindableObjectDragDropService;
739
+ if (bindableDdService) {
737
740
  const el = this.getElementAtPoint({ x: event.x, y: event.y });
738
741
  if (this._lastDdElement != el) {
739
- ddService.dragLeave(this, event, this._lastDdElement);
740
- ddService.dragEnter(this, event, el);
742
+ bindableDdService.dragLeave(this, event, this._lastDdElement);
743
+ bindableDdService.dragEnter(this, event, el);
741
744
  this._lastDdElement = el;
742
745
  }
743
- const effect = ddService.dragOver(this, event, el);
746
+ const effect = bindableDdService.dragOver(this, event, el);
744
747
  event.dataTransfer.dropEffect = effect;
745
748
  }
746
749
  }
747
750
  else {
748
- let [newContainer] = this._getPossibleContainerForDrop(event);
749
- if (this._dragOverExtensionItem != newContainer) {
750
- this.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.ContainerExternalDragOver);
751
- this.extensionManager.applyExtension(newContainer, ExtensionType.ContainerExternalDragOver, event);
752
- this._dragOverExtensionItem = newContainer;
753
- }
754
- else {
755
- this.extensionManager.refreshExtension(newContainer, ExtensionType.ContainerExternalDragOver, event);
751
+ const dragDropService = this.serviceContainer.dragDropService;
752
+ if (dragDropService) {
753
+ dragDropService.dragOver(this, event);
756
754
  }
757
755
  }
758
756
  }
759
757
  }
760
- _getPossibleContainerForDrop(event) {
761
- let newContainerElementDesignItem = null;
762
- let newContainerService = null;
763
- const elementsFromPoint = this.elementsFromPoint(event.x, event.y);
764
- for (let e of elementsFromPoint) {
765
- if (e == this.rootDesignItem.element) {
766
- newContainerElementDesignItem = this.rootDesignItem;
767
- const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
768
- newContainerService = this.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
769
- break;
770
- }
771
- else if (false) {
772
- //check we don't try to move a item over one of its children..
773
- }
774
- else {
775
- newContainerElementDesignItem = DesignItem.GetOrCreateDesignItem(e, this.serviceContainer, this.instanceServiceContainer);
776
- const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
777
- newContainerService = this.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
778
- if (newContainerService) {
779
- if (newContainerService.canEnterByDrop(newContainerElementDesignItem)) {
780
- break;
781
- }
782
- else {
783
- newContainerElementDesignItem = null;
784
- newContainerService = null;
785
- continue;
786
- }
787
- }
788
- }
789
- }
790
- return [newContainerElementDesignItem, newContainerService];
791
- }
792
758
  async _onDrop(event) {
793
759
  this.serviceContainer.globalContext.tool = this.serviceContainer.designerTools.get(NamedTools.Pointer);
794
760
  this._lastDdElement = null;
@@ -796,7 +762,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
796
762
  this._canvas.classList.remove('dragFileActive');
797
763
  this._fillCalculationrects();
798
764
  if (event.dataTransfer.files?.length > 0) {
799
- const ddService = this.serviceContainer.dragDropService;
765
+ const ddService = this.serviceContainer.externalDragDropService;
800
766
  if (ddService) {
801
767
  ddService.drop(this, event);
802
768
  }
@@ -813,32 +779,11 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
813
779
  }
814
780
  }
815
781
  else {
816
- if (this._dragOverExtensionItem) {
817
- this.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.ContainerExternalDragOver);
818
- this._dragOverExtensionItem = null;
782
+ const dragDropService = this.serviceContainer.dragDropService;
783
+ if (dragDropService) {
784
+ this._fillCalculationrects();
785
+ dragDropService.drop(this, event);
819
786
  }
820
- let [newContainer] = this._getPossibleContainerForDrop(event);
821
- if (!newContainer)
822
- newContainer = this.rootDesignItem;
823
- this._fillCalculationrects();
824
- //TODO : we need to use container service for adding to element, so also grid and flexbox work correct
825
- const transferData = event.dataTransfer.getData(dragDropFormatNameElementDefinition);
826
- const elementDefinition = JSON.parse(transferData);
827
- const di = await this.serviceContainer.forSomeServicesTillResult("instanceService", (service) => service.getElement(elementDefinition, this.serviceContainer, this.instanceServiceContainer));
828
- const grp = di.openGroup("Insert of <" + di.name + ">");
829
- di.setStyle('position', 'absolute');
830
- const containerService = this.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainer, getComputedStyle(newContainer.element)));
831
- containerService.enterContainer(newContainer, [di]);
832
- const containerPos = this.getNormalizedElementCoordinates(newContainer.element);
833
- const evCoord = this.getNormalizedEventCoordinates(event);
834
- const pos = { x: evCoord.x - containerPos.x, y: evCoord.y - containerPos.y };
835
- containerService.place(event, this, newContainer, { x: 0, y: 0 }, { x: 0, y: 0 }, pos, [di]);
836
- containerService.finishPlace(event, this, newContainer, { x: 0, y: 0 }, { x: 0, y: 0 }, pos, [di]);
837
- this.instanceServiceContainer.undoService.execute(new InsertAction(newContainer, newContainer.childCount, di));
838
- requestAnimationFrame(() => {
839
- this.instanceServiceContainer.selectionService.setSelectedElements([di]);
840
- grp.commit();
841
- });
842
787
  }
843
788
  }
844
789
  }
@@ -920,28 +865,24 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
920
865
  case 'Backspace':
921
866
  this.executeCommand({ type: CommandType.delete, ctrlKey: event.ctrlKey, altKey: event.altKey, shiftKey: event.shiftKey });
922
867
  break;
923
- case 'ArrowUp':
924
- {
925
- this.instanceServiceContainer.selectionService.selectedElements.forEach(x => x.setStyle('top', parseInt(x.element.style.top) - moveOffset + 'px'));
926
- this.extensionManager.refreshExtensions(this.instanceServiceContainer.selectionService.selectedElements);
927
- }
928
- break;
929
868
  case 'ArrowDown':
930
- {
931
- this.instanceServiceContainer.selectionService.selectedElements.forEach(x => x.setStyle('top', parseInt(x.element.style.top) + moveOffset + 'px'));
932
- this.extensionManager.refreshExtensions(this.instanceServiceContainer.selectionService.selectedElements);
933
- }
934
- break;
869
+ case 'ArrowUp':
935
870
  case 'ArrowLeft':
936
- {
937
- this.instanceServiceContainer.selectionService.selectedElements.forEach(x => x.setStyle('left', parseInt(x.element.style.left) - moveOffset + 'px'));
938
- this.extensionManager.refreshExtensions(this.instanceServiceContainer.selectionService.selectedElements);
939
- }
940
- break;
941
871
  case 'ArrowRight':
942
872
  {
943
- this.instanceServiceContainer.selectionService.selectedElements.forEach(x => x.setStyle('left', parseInt(x.element.style.left) + moveOffset + 'px'));
944
- this.extensionManager.refreshExtensions(this.instanceServiceContainer.selectionService.selectedElements);
873
+ let offset = { x: 0, y: 0 };
874
+ if (event.key == 'ArrowDown')
875
+ offset.y = moveOffset;
876
+ if (event.key == 'ArrowUp')
877
+ offset.y = -moveOffset;
878
+ if (event.key == 'ArrowRight')
879
+ offset.x = moveOffset;
880
+ if (event.key == 'ArrowLeft')
881
+ offset.x = -moveOffset;
882
+ this.instanceServiceContainer.selectionService.selectedElements.forEach(x => {
883
+ const containerStyle = getComputedStyle(x.parent.element);
884
+ x.serviceContainer.getLastServiceWhere('containerService', y => y.serviceForContainer(x.parent, containerStyle)).moveElements([x], offset, false);
885
+ });
945
886
  }
946
887
  break;
947
888
  }
@@ -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 MultipleSelectionRectExtension extends AbstractExtension {
6
+ private _line1;
7
+ private _line2;
8
+ private _line3;
9
+ private _line4;
10
+ private _designerView;
11
+ constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
12
+ extend(): void;
13
+ refresh(): void;
14
+ dispose(): void;
15
+ }
@@ -0,0 +1,34 @@
1
+ import { calculateOuterRect } from '../../../helper/ElementHelper.js';
2
+ import { filterChildPlaceItems } from '../../../helper/LayoutHelper.js';
3
+ import { AbstractExtension } from './AbstractExtension.js';
4
+ import { OverlayLayer } from './OverlayLayer.js';
5
+ export class MultipleSelectionRectExtension extends AbstractExtension {
6
+ _line1;
7
+ _line2;
8
+ _line3;
9
+ _line4;
10
+ _designerView;
11
+ constructor(extensionManager, designerView, extendedItem) {
12
+ super(extensionManager, designerView, extendedItem);
13
+ this._designerView = designerView;
14
+ }
15
+ extend() {
16
+ this.refresh();
17
+ }
18
+ refresh() {
19
+ let selection = this._designerView.instanceServiceContainer.selectionService.selectedElements;
20
+ selection = filterChildPlaceItems(selection);
21
+ let rect = calculateOuterRect(selection, this._designerView);
22
+ this._line1 = this._drawLine(rect.x, rect.y, rect.x + rect.width, rect.y, 'svg-multiple-rect-selection', this._line1, OverlayLayer.Background);
23
+ this._line2 = this._drawLine(rect.x + rect.width, rect.y, rect.x + rect.width, rect.y + rect.height, 'svg-multiple-rect-selection', this._line2, OverlayLayer.Background);
24
+ this._line3 = this._drawLine(rect.x + rect.width, rect.y + rect.height, rect.x, rect.y + rect.height, 'svg-multiple-rect-selection', this._line3, OverlayLayer.Background);
25
+ this._line4 = this._drawLine(rect.x, rect.y + rect.height, rect.x, rect.y, 'svg-multiple-rect-selection', this._line4, OverlayLayer.Background);
26
+ this._line1.style.strokeWidth = (2 / this.designerCanvas.zoomFactor).toString();
27
+ this._line2.style.strokeWidth = (2 / this.designerCanvas.zoomFactor).toString();
28
+ this._line3.style.strokeWidth = (2 / this.designerCanvas.zoomFactor).toString();
29
+ this._line4.style.strokeWidth = (2 / this.designerCanvas.zoomFactor).toString();
30
+ }
31
+ dispose() {
32
+ this._removeAllOverlays();
33
+ }
34
+ }
@@ -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 MultipleSelectionRectExtensionProvider implements IDesignerExtensionProvider {
7
+ shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
8
+ getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
9
+ readonly style: CSSStyleSheet;
10
+ }
@@ -0,0 +1,13 @@
1
+ import { css } from "@node-projects/base-custom-webcomponent";
2
+ import { MultipleSelectionRectExtension as MultipleSelectionRectExtension } from './MultipleSelectionRectExtension.js';
3
+ export class MultipleSelectionRectExtensionProvider {
4
+ shouldExtend(extensionManager, designerView, designItem) {
5
+ return true;
6
+ }
7
+ getExtension(extensionManager, designerView, designItem) {
8
+ return new MultipleSelectionRectExtension(extensionManager, designerView, designItem);
9
+ }
10
+ style = css `
11
+ .svg-multiple-rect-selection { stroke: #909090; stroke-dasharray: 3; fill: transparent; stroke-width: 2; /*pointer-events: all;*/ }
12
+ `;
13
+ }
@@ -163,8 +163,8 @@ export class EllipsisExtension extends AbstractExtension {
163
163
  let heightEllipseElement = newEllipseExtrema.yMax - newEllipseExtrema.yMin + (2 * this._offsetSvg);
164
164
  this.extendedItem.parent.setStyle("left", parentLeft.toString() + "px");
165
165
  this.extendedItem.parent.setStyle("top", parentTop.toString() + "px");
166
- this.extendedItem.parent.setStyle("height", heightEllipseElement.toString() + "px");
167
- this.extendedItem.parent.setStyle("width", widthEllipseElement.toString() + "px");
166
+ this.extendedItem.parent.setStyle("height", Math.round(heightEllipseElement).toString() + "px");
167
+ this.extendedItem.parent.setStyle("width", Math.round(widthEllipseElement).toString() + "px");
168
168
  }
169
169
  _rearrangePointsFromElement(oldParentCoords) {
170
170
  let newParentCoords = this.designerCanvas.getNormalizedElementCoordinates(this._ellipseElement.parentElement);
@@ -125,8 +125,8 @@ export class LineExtension extends AbstractExtension {
125
125
  let heightLineElement = newLineExtrema.yMax - newLineExtrema.yMin + (2 * this._offsetSvg);
126
126
  this.extendedItem.parent.setStyle("left", parentLeft.toString() + "px");
127
127
  this.extendedItem.parent.setStyle("top", parentTop.toString() + "px");
128
- this.extendedItem.parent.setStyle("height", heightLineElement.toString() + "px");
129
- this.extendedItem.parent.setStyle("width", widthLineElement.toString() + "px");
128
+ this.extendedItem.parent.setStyle("height", Math.round(heightLineElement).toString() + "px");
129
+ this.extendedItem.parent.setStyle("width", Math.round(widthLineElement).toString() + "px");
130
130
  }
131
131
  _rearrangePointsFromElement(oldParentCoords) {
132
132
  let newParentCoords = this.designerCanvas.getNormalizedElementCoordinates(this._lineElement.parentElement);
@@ -306,8 +306,8 @@ export class PathExtension extends AbstractExtension {
306
306
  let widthSvgElement = newElementCoords.width / this.designerCanvas.scaleFactor + (2 * this._offsetSvg);
307
307
  this.extendedItem.element.parentElement.style.setProperty("left", parentLeft.toString() + "px");
308
308
  this.extendedItem.element.parentElement.style.setProperty("top", parentTop.toString() + "px");
309
- this.extendedItem.element.parentElement.style.setProperty("height", heightSvgElement.toString() + "px");
310
- this.extendedItem.element.parentElement.style.setProperty("width", widthSvgElement.toString() + "px");
309
+ this.extendedItem.element.parentElement.style.setProperty("height", Math.round(heightSvgElement).toString() + "px");
310
+ this.extendedItem.element.parentElement.style.setProperty("width", Math.round(widthSvgElement).toString() + "px");
311
311
  }
312
312
  _rearrangePointsFromElement(oldParentCoords, pathData) {
313
313
  let newParentCoords = this.extendedItem.element.parentElement.getBoundingClientRect();
@@ -191,8 +191,8 @@ export class RectExtension extends AbstractExtension {
191
191
  let heightRectElement = newRectExtrema.yMax - newRectExtrema.yMin + (2 * this._offsetSvg);
192
192
  this.extendedItem.parent.setStyle("left", parentLeft.toString() + "px");
193
193
  this.extendedItem.parent.setStyle("top", parentTop.toString() + "px");
194
- this.extendedItem.parent.setStyle("height", heightRectElement.toString() + "px");
195
- this.extendedItem.parent.setStyle("width", widthRectElement.toString() + "px");
194
+ this.extendedItem.parent.setStyle("height", Math.round(heightRectElement).toString() + "px");
195
+ this.extendedItem.parent.setStyle("width", Math.round(widthRectElement).toString() + "px");
196
196
  }
197
197
  _rearrangePointsFromElement(oldParentCoords) {
198
198
  let newParentCoords = this.designerCanvas.getNormalizedElementCoordinates(this._rectElement.parentElement);
@@ -80,8 +80,8 @@ export class DrawEllipsisTool {
80
80
  svg.style.left = (mvX) + 'px';
81
81
  svg.style.top = (mvY) + 'px';
82
82
  svg.style.position = 'absolute';
83
- svg.style.width = (coords.width + 2 * offset) + 'px';
84
- svg.style.height = (coords.height + 2 * offset) + 'px';
83
+ svg.style.width = Math.round(coords.width + 2 * offset) + 'px';
84
+ svg.style.height = Math.round(coords.height + 2 * offset) + 'px';
85
85
  svg.style.overflow = 'visible';
86
86
  this._path = null;
87
87
  const di = DesignItem.createDesignItemFromInstance(svg, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
@@ -65,8 +65,8 @@ export class DrawLineTool {
65
65
  svg.style.left = (mvX) + 'px';
66
66
  svg.style.top = (mvY) + 'px';
67
67
  svg.style.position = 'absolute';
68
- svg.style.width = (coords.width + 2 * offset) + 'px';
69
- svg.style.height = (coords.height + 2 * offset) + 'px';
68
+ svg.style.width = Math.round(coords.width + 2 * offset) + 'px';
69
+ svg.style.height = Math.round(coords.height + 2 * offset) + 'px';
70
70
  svg.style.overflow = 'visible';
71
71
  this._path = null;
72
72
  const di = DesignItem.createDesignItemFromInstance(svg, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
@@ -107,8 +107,8 @@ export class DrawPathTool {
107
107
  svg.style.left = (mvX) + 'px';
108
108
  svg.style.top = (mvY) + 'px';
109
109
  svg.style.position = 'absolute';
110
- svg.style.width = (coords.width + 2 * offset) + 'px';
111
- svg.style.height = (coords.height + 2 * offset) + 'px';
110
+ svg.style.width = Math.round(coords.width + 2 * offset) + 'px';
111
+ svg.style.height = Math.round(coords.height + 2 * offset) + 'px';
112
112
  svg.style.overflow = 'visible';
113
113
  //designerView.rootDesignItem.element.appendChild(svg);
114
114
  this._path = null;
@@ -95,8 +95,8 @@ export class DrawRectTool {
95
95
  svg.style.left = (mvX) + 'px';
96
96
  svg.style.top = (mvY) + 'px';
97
97
  svg.style.position = 'absolute';
98
- svg.style.width = (coords.width + 2 * offset) + 'px';
99
- svg.style.height = (coords.height + 2 * offset) + 'px';
98
+ svg.style.width = Math.round(coords.width + 2 * offset) + 'px';
99
+ svg.style.height = Math.round(coords.height + 2 * offset) + 'px';
100
100
  svg.style.overflow = 'visible';
101
101
  this._path = null;
102
102
  const di = DesignItem.createDesignItemFromInstance(svg, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
@@ -8,7 +8,7 @@ export declare class DesignerToolbar extends BaseCustomWebComponentConstructorAp
8
8
  private _toolButtonsElem;
9
9
  private _serviceContainer;
10
10
  private _popupContainer;
11
- private _designerView;
11
+ designerView: DesignerView;
12
12
  constructor();
13
13
  initialize(serviceContainer: ServiceContainer, designerView: DesignerView): void;
14
14
  showPopup(designerToolbarButton: DesignerToolbarButton): void;
@@ -25,7 +25,7 @@ export class DesignerToolbar extends BaseCustomWebComponentConstructorAppend {
25
25
  _toolButtonsElem;
26
26
  _serviceContainer;
27
27
  _popupContainer;
28
- _designerView;
28
+ designerView;
29
29
  constructor() {
30
30
  super();
31
31
  this._toolButtonsElem = this._getDomElement("toolButtons");
@@ -33,7 +33,7 @@ export class DesignerToolbar extends BaseCustomWebComponentConstructorAppend {
33
33
  }
34
34
  initialize(serviceContainer, designerView) {
35
35
  this._serviceContainer = serviceContainer;
36
- this._designerView = designerView;
36
+ this.designerView = designerView;
37
37
  for (let tb of this._serviceContainer.designViewToolbarButtons) {
38
38
  this._toolButtonsElem.appendChild(tb.provideButton(designerView.designerCanvas));
39
39
  }
@@ -62,25 +62,25 @@ export class DesignerToolbar extends BaseCustomWebComponentConstructorAppend {
62
62
  if (this._popupContainer.children.length) {
63
63
  this._popupContainer.innerHTML = '';
64
64
  }
65
- this._designerView.designerCanvas.executeCommand({ type: CommandType.setTool, parameter: tool });
65
+ this.designerView.designerCanvas.executeCommand({ type: CommandType.setTool, parameter: tool });
66
66
  }
67
67
  setStrokeColor(color) {
68
68
  if (this._popupContainer.children.length) {
69
69
  this._popupContainer.innerHTML = '';
70
70
  }
71
- this._designerView.designerCanvas.executeCommand({ type: CommandType.setStrokeColor, parameter: color });
71
+ this.designerView.designerCanvas.executeCommand({ type: CommandType.setStrokeColor, parameter: color });
72
72
  }
73
73
  setFillBrush(color) {
74
74
  if (this._popupContainer.children.length) {
75
75
  this._popupContainer.innerHTML = '';
76
76
  }
77
- this._designerView.designerCanvas.executeCommand({ type: CommandType.setFillBrush, parameter: color });
77
+ this.designerView.designerCanvas.executeCommand({ type: CommandType.setFillBrush, parameter: color });
78
78
  }
79
79
  setStrokeThickness(input) {
80
80
  if (this._popupContainer.children.length) {
81
81
  this._popupContainer.innerHTML = '';
82
82
  }
83
- this._designerView.designerCanvas.executeCommand({ type: CommandType.setStrokeThickness, parameter: input });
83
+ this.designerView.designerCanvas.executeCommand({ type: CommandType.setStrokeThickness, parameter: input });
84
84
  }
85
85
  }
86
86
  customElements.define('node-projects-designer-toolbar', DesignerToolbar);
@@ -0,0 +1,5 @@
1
+ import { IDesignerCanvas } from "../../../IDesignerCanvas.js";
2
+ import { IDesignViewToolbarButtonProvider } from "../IDesignViewToolbarButtonProvider.js";
3
+ export declare class TransformToolButtonProvider implements IDesignViewToolbarButtonProvider {
4
+ provideButton(designerCanvas: IDesignerCanvas): HTMLElement;
5
+ }
@@ -0,0 +1,10 @@
1
+ import { DesignerToolbarButton } from '../DesignerToolbarButton.js';
2
+ import { assetsPath } from "../../../../../../Constants.js";
3
+ import { TransformToolPopup } from "../popups/TransformToolPopup.js";
4
+ export class TransformToolButtonProvider {
5
+ provideButton(designerCanvas) {
6
+ const button = new DesignerToolbarButton(designerCanvas, { 'TransformTool': { icon: assetsPath + 'images/layout/TransformTool.svg' } });
7
+ button.popup = TransformToolPopup;
8
+ return button;
9
+ }
10
+ }
@@ -0,0 +1,31 @@
1
+ import { BaseCustomWebComponentConstructorAppend } from '@node-projects/base-custom-webcomponent';
2
+ export declare class TransformToolPopup extends BaseCustomWebComponentConstructorAppend {
3
+ private _designerView;
4
+ private _previousSelectionRect;
5
+ private _selectionChanged;
6
+ private _relativeButton;
7
+ private _absoluteButton;
8
+ private _applyButton;
9
+ private _inputX;
10
+ private _inputY;
11
+ private _inputR;
12
+ private _originTopLeft;
13
+ private _originTopMid;
14
+ private _originTopRight;
15
+ private _originMidLeft;
16
+ private _originMidMid;
17
+ private _originMidRight;
18
+ private _originBotLeft;
19
+ private _originBotMid;
20
+ private _originBotRight;
21
+ private _transformMode;
22
+ private _transformOrigin;
23
+ static style: CSSStyleSheet;
24
+ static template: HTMLTemplateElement;
25
+ constructor();
26
+ private _changePositionMode;
27
+ private _applyTransform;
28
+ private _calculateTransformOriginPosition;
29
+ private _checkOrigin;
30
+ private _calculateTransform;
31
+ }