@node-projects/web-component-designer 0.0.238 → 0.0.239
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/assets/images/layout/TransformTool.svg +21 -0
- package/dist/elements/helper/ElementHelper.d.ts +4 -0
- package/dist/elements/helper/ElementHelper.js +29 -0
- package/dist/elements/services/DefaultServiceBootstrap.js +7 -2
- package/dist/elements/services/ServiceContainer.d.ts +6 -3
- package/dist/elements/services/ServiceContainer.js +5 -2
- package/dist/elements/services/dragDropService/DragDropService.d.ts +8 -2
- package/dist/elements/services/dragDropService/DragDropService.js +79 -21
- package/dist/elements/services/dragDropService/ExternalDragDropService copy.d.ts +6 -0
- package/dist/elements/services/dragDropService/ExternalDragDropService copy.js +28 -0
- package/dist/elements/services/dragDropService/ExternalDragDropService.d.ts +6 -0
- package/dist/elements/services/dragDropService/ExternalDragDropService.js +28 -0
- package/dist/elements/services/dragDropService/IDragDropService.d.ts +6 -1
- package/dist/elements/services/dragDropService/IExternalDragDropService copy.d.ts +5 -0
- package/dist/elements/services/dragDropService/IExternalDragDropService copy.js +1 -0
- package/dist/elements/services/dragDropService/IExternalDragDropService.d.ts +5 -0
- package/dist/elements/services/dragDropService/IExternalDragDropService.js +1 -0
- package/dist/elements/services/placementService/DefaultPlacementService.d.ts +1 -0
- package/dist/elements/services/placementService/DefaultPlacementService.js +11 -0
- package/dist/elements/services/placementService/FlexBoxPlacementService.d.ts +1 -0
- package/dist/elements/services/placementService/FlexBoxPlacementService.js +2 -0
- package/dist/elements/services/placementService/GridPlacementService.d.ts +1 -0
- package/dist/elements/services/placementService/GridPlacementService.js +2 -0
- package/dist/elements/services/placementService/IPlacementService.d.ts +5 -4
- package/dist/elements/widgets/designerView/designerCanvas.d.ts +0 -2
- package/dist/elements/widgets/designerView/designerCanvas.js +36 -95
- package/dist/elements/widgets/designerView/extensions/MultipleSelectionRectExtension.d.ts +15 -0
- package/dist/elements/widgets/designerView/extensions/MultipleSelectionRectExtension.js +34 -0
- package/dist/elements/widgets/designerView/extensions/MultipleSelectionRectExtensionProvider.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/MultipleSelectionRectExtensionProvider.js +13 -0
- package/dist/elements/widgets/designerView/extensions/svg/EllipsisExtension.js +2 -2
- package/dist/elements/widgets/designerView/extensions/svg/LineExtension.js +2 -2
- package/dist/elements/widgets/designerView/extensions/svg/PathExtension.js +2 -2
- package/dist/elements/widgets/designerView/extensions/svg/RectExtension.js +2 -2
- package/dist/elements/widgets/designerView/tools/DrawEllipsisTool.js +2 -2
- package/dist/elements/widgets/designerView/tools/DrawLineTool.js +2 -2
- package/dist/elements/widgets/designerView/tools/DrawPathTool.js +2 -2
- package/dist/elements/widgets/designerView/tools/DrawRectTool.js +2 -2
- package/dist/elements/widgets/designerView/tools/toolBar/DesignerToolbar.d.ts +1 -1
- package/dist/elements/widgets/designerView/tools/toolBar/DesignerToolbar.js +6 -6
- package/dist/elements/widgets/designerView/tools/toolBar/buttons/TransformToolButtonProvider.d.ts +5 -0
- package/dist/elements/widgets/designerView/tools/toolBar/buttons/TransformToolButtonProvider.js +10 -0
- package/dist/elements/widgets/designerView/tools/toolBar/popups/TransformToolPopup.d.ts +31 -0
- package/dist/elements/widgets/designerView/tools/toolBar/popups/TransformToolPopup.js +293 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- 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 {
|
|
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
|
-
|
|
708
|
-
|
|
709
|
-
this
|
|
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.
|
|
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
|
|
736
|
-
if (
|
|
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
|
-
|
|
740
|
-
|
|
742
|
+
bindableDdService.dragLeave(this, event, this._lastDdElement);
|
|
743
|
+
bindableDdService.dragEnter(this, event, el);
|
|
741
744
|
this._lastDdElement = el;
|
|
742
745
|
}
|
|
743
|
-
const effect =
|
|
746
|
+
const effect = bindableDdService.dragOver(this, event, el);
|
|
744
747
|
event.dataTransfer.dropEffect = effect;
|
|
745
748
|
}
|
|
746
749
|
}
|
|
747
750
|
else {
|
|
748
|
-
|
|
749
|
-
if (
|
|
750
|
-
|
|
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.
|
|
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
|
-
|
|
817
|
-
|
|
818
|
-
this.
|
|
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
|
-
|
|
944
|
-
|
|
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
|
+
}
|
package/dist/elements/widgets/designerView/extensions/MultipleSelectionRectExtensionProvider.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IDesignerExtensionProvider } from './IDesignerExtensionProvider.js';
|
|
2
|
+
import { IDesignItem } from '../../../item/IDesignItem.js';
|
|
3
|
+
import { IDesignerCanvas } from '../IDesignerCanvas.js';
|
|
4
|
+
import { IDesignerExtension } from './IDesignerExtension.js';
|
|
5
|
+
import { IExtensionManager } from './IExtensionManger.js';
|
|
6
|
+
export declare class 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
|
+
}
|
package/dist/elements/widgets/designerView/extensions/MultipleSelectionRectExtensionProvider.js
ADDED
|
@@ -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
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
83
|
+
this.designerView.designerCanvas.executeCommand({ type: CommandType.setStrokeThickness, parameter: input });
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
customElements.define('node-projects-designer-toolbar', DesignerToolbar);
|
package/dist/elements/widgets/designerView/tools/toolBar/buttons/TransformToolButtonProvider.d.ts
ADDED
|
@@ -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
|
+
}
|
package/dist/elements/widgets/designerView/tools/toolBar/buttons/TransformToolButtonProvider.js
ADDED
|
@@ -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
|
+
}
|