@node-projects/web-component-designer 0.0.56 → 0.0.60
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/.github/FUNDING.yml +3 -0
- package/dist/commandHandling/CommandType.d.ts +3 -0
- package/dist/commandHandling/CommandType.js +3 -0
- package/dist/elements/helper/CssAttributeParser.d.ts +1 -1
- package/dist/elements/helper/CssAttributeParser.js +6 -3
- package/dist/elements/helper/CssCombiner.js +1 -1
- package/dist/elements/helper/GridHelper.js +7 -3
- package/dist/elements/services/DefaultServiceBootstrap.js +5 -0
- package/dist/elements/services/GlobalContext.d.ts +4 -0
- package/dist/elements/services/GlobalContext.js +12 -0
- package/dist/elements/services/ServiceContainer.d.ts +5 -0
- package/dist/elements/services/ServiceContainer.js +4 -0
- package/dist/elements/services/demoProviderService/DemoProviderService.d.ts +6 -0
- package/dist/elements/services/demoProviderService/DemoProviderService.js +28 -0
- package/dist/elements/services/demoProviderService/IDemoProviderService.d.ts +5 -0
- package/dist/elements/services/demoProviderService/IDemoProviderService.js +1 -0
- package/dist/elements/services/placementService/DefaultPlacementService.d.ts +1 -1
- package/dist/elements/services/placementService/DefaultPlacementService.js +3 -3
- package/dist/elements/services/placementService/FlexBoxPlacementService.d.ts +1 -1
- package/dist/elements/services/placementService/FlexBoxPlacementService.js +2 -2
- package/dist/elements/services/placementService/GridPlacementService.d.ts +1 -1
- package/dist/elements/services/placementService/GridPlacementService.js +27 -7
- package/dist/elements/services/placementService/IPlacementService.d.ts +1 -1
- package/dist/elements/widgets/demoView/demoView.d.ts +1 -1
- package/dist/elements/widgets/demoView/demoView.js +3 -22
- package/dist/elements/widgets/designerView/ButtonSeperatorProvider copy.d.ts +7 -0
- package/dist/elements/widgets/designerView/ButtonSeperatorProvider copy.js +11 -0
- package/dist/elements/widgets/designerView/ButtonSeperatorProvider.d.ts +8 -0
- package/dist/elements/widgets/designerView/ButtonSeperatorProvider.js +11 -0
- package/dist/elements/widgets/designerView/DesignContext.d.ts +3 -0
- package/dist/elements/widgets/designerView/DesignContext.js +1 -0
- package/dist/elements/widgets/designerView/DesignerViewUseOverlayScollbars.d.ts +7 -0
- package/dist/elements/widgets/designerView/DesignerViewUseOverlayScollbars.js +13 -0
- package/dist/elements/widgets/designerView/IDesignContext.d.ts +3 -0
- package/dist/elements/widgets/designerView/IDesignViewConfigButtonsProvider.d.ts +5 -0
- package/dist/elements/widgets/designerView/IDesignViewConfigButtonsProvider.js +1 -0
- package/dist/elements/widgets/designerView/designerCanvas.d.ts +0 -1
- package/dist/elements/widgets/designerView/designerCanvas.js +25 -12
- package/dist/elements/widgets/designerView/designerView.d.ts +1 -0
- package/dist/elements/widgets/designerView/designerView.js +14 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionConfigButtons.d.ts +5 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionConfigButtons.js +12 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionDesignViewConfigButtons.d.ts +6 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionDesignViewConfigButtons.js +21 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionProvider copy.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionProvider copy.js +18 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionProvider.d.ts +1 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionProvider.js +2 -1
- package/dist/elements/widgets/designerView/extensions/GridExtensionProviderConfigButtons.d.ts +5 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionProviderConfigButtons.js +12 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionProviderOptions.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionProviderOptions.js +18 -0
- package/dist/elements/widgets/designerView/extensions/IDesignViewConfigButtonsProvider.d.ts +0 -0
- package/dist/elements/widgets/designerView/extensions/IDesignViewConfigButtonsProvider.js +1 -0
- package/dist/elements/widgets/designerView/extensions/IExtensionConfiguration.d.ts +3 -0
- package/dist/elements/widgets/designerView/extensions/IExtensionConfiguration.js +1 -0
- package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +6 -2
- package/dist/elements/widgets/designerView/tools/DrawPathTool.d.ts +9 -0
- package/dist/elements/widgets/designerView/tools/DrawPathTool.js +95 -29
- package/dist/elements/widgets/designerView/tools/PointerTool.js +10 -6
- package/dist/elements/widgets/propertyGrid/PropertyGridWithHeader.js +3 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/package.json +39 -39
|
@@ -190,6 +190,21 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
190
190
|
this.serviceContainer.globalContext.tool = this.serviceContainer.designerTools.get(command.parameter);
|
|
191
191
|
}
|
|
192
192
|
break;
|
|
193
|
+
case CommandType.setStrokeColor:
|
|
194
|
+
{
|
|
195
|
+
this.serviceContainer.globalContext.strokeColor = command.parameter;
|
|
196
|
+
}
|
|
197
|
+
break;
|
|
198
|
+
case CommandType.setFillBrush:
|
|
199
|
+
{
|
|
200
|
+
this.serviceContainer.globalContext.fillBrush = command.parameter;
|
|
201
|
+
}
|
|
202
|
+
break;
|
|
203
|
+
case CommandType.setStrokeThickness:
|
|
204
|
+
{
|
|
205
|
+
this.serviceContainer.globalContext.strokeThickness = command.parameter;
|
|
206
|
+
}
|
|
207
|
+
break;
|
|
193
208
|
case CommandType.delete:
|
|
194
209
|
this.handleDeleteCommand();
|
|
195
210
|
break;
|
|
@@ -496,14 +511,6 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
496
511
|
const normEl = this.getNormalizedElementCoordinates(element);
|
|
497
512
|
return { x: normEvt.x - normEl.x, y: normEvt.y - normEl.y };
|
|
498
513
|
}
|
|
499
|
-
//todo remove, is in base custom webcomp domhelper
|
|
500
|
-
static getHost(node) {
|
|
501
|
-
while (node.parentElement)
|
|
502
|
-
node = node.parentElement;
|
|
503
|
-
if (node.host)
|
|
504
|
-
return node.host;
|
|
505
|
-
return node.parentNode.host;
|
|
506
|
-
}
|
|
507
514
|
getElementAtPoint(point, ignoreElementCallback) {
|
|
508
515
|
let backupPEventsMap = new Map();
|
|
509
516
|
let currentElement = this.elementFromPoint(point.x, point.y);
|
|
@@ -549,6 +556,9 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
549
556
|
_rect;
|
|
550
557
|
_pointerEventHandler(event) {
|
|
551
558
|
this._fillCalculationrects();
|
|
559
|
+
/*let clickOnScrollbar = event.clientX - this.containerBoundingRect.x > this.containerBoundingRect.width || event.clientY - this.containerBoundingRect.y > this.containerBoundingRect.height
|
|
560
|
+
if (clickOnScrollbar) https://kingsora.github.io/OverlayScrollbars/
|
|
561
|
+
return;*/
|
|
552
562
|
if (this._pointerextensions) {
|
|
553
563
|
for (let pe of this._pointerextensions)
|
|
554
564
|
pe.refresh(event);
|
|
@@ -560,18 +570,21 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
560
570
|
let currentElement = this.serviceContainer.elementAtPointService.getElementAtPoint(this, { x: event.x, y: event.y });
|
|
561
571
|
if (currentElement === this._outercanvas2 || currentElement === this.overlayLayer || !currentElement) {
|
|
562
572
|
currentElement = this._canvas;
|
|
563
|
-
}
|
|
573
|
+
} /* else {
|
|
574
|
+
if (!DesignerCanvas.hasOrIsParent(currentElement, this._canvas))
|
|
575
|
+
return;
|
|
576
|
+
}*/
|
|
564
577
|
//TODO: remove duplication when tool refactoring starts
|
|
565
|
-
this._fillCalculationrects();
|
|
578
|
+
//this._fillCalculationrects();
|
|
566
579
|
const currentDesignItem = DesignItem.GetOrCreateDesignItem(currentElement, this.serviceContainer, this.instanceServiceContainer);
|
|
567
580
|
if (this._lastHoverDesignItem != currentDesignItem) {
|
|
568
581
|
if (this._lastHoverDesignItem)
|
|
569
582
|
this.extensionManager.removeExtension(this._lastHoverDesignItem, ExtensionType.MouseOver);
|
|
570
|
-
if (currentDesignItem && currentDesignItem != this.rootDesignItem &&
|
|
583
|
+
if (currentDesignItem && currentDesignItem != this.rootDesignItem && DomHelper.getHost(currentElement.parentNode) !== this.overlayLayer)
|
|
571
584
|
this.extensionManager.applyExtension(currentDesignItem, ExtensionType.MouseOver);
|
|
572
585
|
this._lastHoverDesignItem = currentDesignItem;
|
|
573
586
|
}
|
|
574
|
-
if (currentElement &&
|
|
587
|
+
if (currentElement && DomHelper.getHost(currentElement.parentNode) === this.overlayLayer) {
|
|
575
588
|
if (this.eatEvents)
|
|
576
589
|
return;
|
|
577
590
|
currentElement = this.instanceServiceContainer.selectionService.primarySelection?.element ?? this._canvas;
|
|
@@ -12,6 +12,7 @@ export declare class DesignerView extends BaseCustomWebComponentConstructorAppen
|
|
|
12
12
|
get instanceServiceContainer(): InstanceServiceContainer;
|
|
13
13
|
set instanceServiceContainer(value: InstanceServiceContainer);
|
|
14
14
|
private _zoomInput;
|
|
15
|
+
private _lowertoolbar;
|
|
15
16
|
static readonly style: CSSStyleSheet;
|
|
16
17
|
static readonly template: HTMLTemplateElement;
|
|
17
18
|
private _designerCanvas;
|
|
@@ -17,6 +17,7 @@ export class DesignerView extends BaseCustomWebComponentConstructorAppend {
|
|
|
17
17
|
this._designerCanvas.instanceServiceContainer = value;
|
|
18
18
|
}
|
|
19
19
|
_zoomInput;
|
|
20
|
+
_lowertoolbar;
|
|
20
21
|
static style = css `
|
|
21
22
|
:host {
|
|
22
23
|
display: block;
|
|
@@ -49,6 +50,12 @@ export class DesignerView extends BaseCustomWebComponentConstructorAppend {
|
|
|
49
50
|
display: block;
|
|
50
51
|
margin-right: 1px;
|
|
51
52
|
cursor: default;
|
|
53
|
+
display: flex;
|
|
54
|
+
justify-content: center;
|
|
55
|
+
align-items: center;
|
|
56
|
+
}
|
|
57
|
+
.selected {
|
|
58
|
+
background-color: deepskyblue;
|
|
52
59
|
}
|
|
53
60
|
.toolbar-control:hover {
|
|
54
61
|
background-color:rgba(164,206,249,.6);
|
|
@@ -138,6 +145,7 @@ export class DesignerView extends BaseCustomWebComponentConstructorAppend {
|
|
|
138
145
|
let alignGrid = this._getDomElement('alignGrid');
|
|
139
146
|
alignGrid.onclick = () => { this._designerCanvas.alignOnGrid = !this._designerCanvas.alignOnGrid; alignGrid.style.backgroundColor = this._designerCanvas.alignOnGrid ? 'deepskyblue' : ''; };
|
|
140
147
|
alignGrid.style.backgroundColor = this._designerCanvas.alignOnGrid ? 'deepskyblue' : '';
|
|
148
|
+
this._lowertoolbar = this._getDomElement('lowertoolbar');
|
|
141
149
|
}
|
|
142
150
|
_onWheel(event) {
|
|
143
151
|
if (event.ctrlKey) {
|
|
@@ -180,6 +188,12 @@ export class DesignerView extends BaseCustomWebComponentConstructorAppend {
|
|
|
180
188
|
initialize(serviceContainer) {
|
|
181
189
|
this.serviceContainer = serviceContainer;
|
|
182
190
|
this._designerCanvas.initialize(serviceContainer);
|
|
191
|
+
if (serviceContainer.designViewConfigButtons) {
|
|
192
|
+
for (let provider of serviceContainer.designViewConfigButtons) {
|
|
193
|
+
for (let btn of provider.provideButtons(this, this._designerCanvas))
|
|
194
|
+
this._lowertoolbar.appendChild(btn);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
183
197
|
}
|
|
184
198
|
getHTML(designItemsAssignmentList) {
|
|
185
199
|
this.instanceServiceContainer.selectionService.setSelectedElements(null);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { gridExtensionShowOverlayOptionName } from "./GridExtensionProvider.js";
|
|
2
|
+
export class GridExtensionProviderConfigButtons {
|
|
3
|
+
aaa(extensionManager, designerView) {
|
|
4
|
+
const extensionOptions = designerView.instanceServiceContainer.designContext.extensionOptions;
|
|
5
|
+
const btn = document.createElement('div');
|
|
6
|
+
btn.onclick = () => {
|
|
7
|
+
const val = extensionOptions[gridExtensionShowOverlayOptionName];
|
|
8
|
+
extensionOptions[gridExtensionShowOverlayOptionName] = val == true ? false : true;
|
|
9
|
+
};
|
|
10
|
+
return [btn];
|
|
11
|
+
}
|
|
12
|
+
}
|
package/dist/elements/widgets/designerView/extensions/GridExtensionDesignViewConfigButtons.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DesignerView } from "../designerView.js";
|
|
2
|
+
import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
3
|
+
import { IDesignViewConfigButtonsProvider } from "../IDesignViewConfigButtonsProvider.js";
|
|
4
|
+
export declare class GridExtensionDesignViewConfigButtons implements IDesignViewConfigButtonsProvider {
|
|
5
|
+
provideButtons(designerView: DesignerView, designerCanvas: IDesignerCanvas): HTMLElement[];
|
|
6
|
+
}
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IDesignerExtensionProvider } from "./IDesignerExtensionProvider";
|
|
2
|
+
import { IDesignItem } from "../../../item/IDesignItem";
|
|
3
|
+
import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
4
|
+
import { IDesignerExtension } from "./IDesignerExtension";
|
|
5
|
+
import { IExtensionManager } from "./IExtensionManger";
|
|
6
|
+
export declare class GridExtensionProvider 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,18 @@
|
|
|
1
|
+
import { GridExtension } from './GridExtension';
|
|
2
|
+
import { css } from "@node-projects/base-custom-webcomponent";
|
|
3
|
+
const gridExtensionShowOverlayOptionName = 'gridExtensionShowOverlay';
|
|
4
|
+
export class GridExtensionProvider {
|
|
5
|
+
shouldExtend(extensionManager, designerView, designItem) {
|
|
6
|
+
if (getComputedStyle(designItem.element).display == 'grid')
|
|
7
|
+
return designerView.instanceServiceContainer.designContext.extensionOptions[gridExtensionShowOverlayOptionName] !== false;
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
getExtension(extensionManager, designerView, designItem) {
|
|
11
|
+
return new GridExtension(extensionManager, designerView, designItem);
|
|
12
|
+
}
|
|
13
|
+
style = css `
|
|
14
|
+
.svg-grid { stroke: orange; stroke-dasharray: 5; fill: #ff944722; }
|
|
15
|
+
.svg-grid-area { font-size: 8px; }
|
|
16
|
+
.svg-grid-gap { stroke: orange; stroke-dasharray: 5; fill: #0000ff22; }
|
|
17
|
+
`;
|
|
18
|
+
}
|
|
@@ -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 gridExtensionShowOverlayOptionName = "gridExtensionShowOverlay";
|
|
6
7
|
export declare class GridExtensionProvider implements IDesignerExtensionProvider {
|
|
7
8
|
shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
|
|
8
9
|
getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { GridExtension } from './GridExtension';
|
|
2
2
|
import { css } from "@node-projects/base-custom-webcomponent";
|
|
3
|
+
export const gridExtensionShowOverlayOptionName = 'gridExtensionShowOverlay';
|
|
3
4
|
export class GridExtensionProvider {
|
|
4
5
|
shouldExtend(extensionManager, designerView, designItem) {
|
|
5
6
|
if (getComputedStyle(designItem.element).display == 'grid')
|
|
6
|
-
return
|
|
7
|
+
return designerView.instanceServiceContainer.designContext.extensionOptions[gridExtensionShowOverlayOptionName] !== false;
|
|
7
8
|
return false;
|
|
8
9
|
}
|
|
9
10
|
getExtension(extensionManager, designerView, designItem) {
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { gridExtensionShowOverlayOptionName } from "./GridExtensionProvider.js";
|
|
2
|
+
export class GridExtensionProviderConfigButtons {
|
|
3
|
+
aaa(extensionManager, designerView) {
|
|
4
|
+
const extensionOptions = designerView.instanceServiceContainer.designContext.extensionOptions;
|
|
5
|
+
const btn = document.createElement('div');
|
|
6
|
+
btn.onclick = () => {
|
|
7
|
+
const val = extensionOptions[gridExtensionShowOverlayOptionName];
|
|
8
|
+
extensionOptions[gridExtensionShowOverlayOptionName] = val == true ? false : true;
|
|
9
|
+
};
|
|
10
|
+
return [btn];
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IDesignerExtensionProvider } from "./IDesignerExtensionProvider";
|
|
2
|
+
import { IDesignItem } from "../../../item/IDesignItem";
|
|
3
|
+
import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
4
|
+
import { IDesignerExtension } from "./IDesignerExtension";
|
|
5
|
+
import { IExtensionManager } from "./IExtensionManger";
|
|
6
|
+
export declare class GridExtensionProvider 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,18 @@
|
|
|
1
|
+
import { GridExtension } from './GridExtension';
|
|
2
|
+
import { css } from "@node-projects/base-custom-webcomponent";
|
|
3
|
+
const gridExtensionShowOverlayOptionName = 'gridExtensionShowOverlay';
|
|
4
|
+
export class GridExtensionProvider {
|
|
5
|
+
shouldExtend(extensionManager, designerView, designItem) {
|
|
6
|
+
if (getComputedStyle(designItem.element).display == 'grid')
|
|
7
|
+
return designerView.instanceServiceContainer.designContext.extensionOptions[gridExtensionShowOverlayOptionName] !== false;
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
getExtension(extensionManager, designerView, designItem) {
|
|
11
|
+
return new GridExtension(extensionManager, designerView, designItem);
|
|
12
|
+
}
|
|
13
|
+
style = css `
|
|
14
|
+
.svg-grid { stroke: orange; stroke-dasharray: 5; fill: #ff944722; }
|
|
15
|
+
.svg-grid-area { font-size: 8px; }
|
|
16
|
+
.svg-grid-gap { stroke: orange; stroke-dasharray: 5; fill: #0000ff22; }
|
|
17
|
+
`;
|
|
18
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -74,7 +74,8 @@ export class ResizeExtension extends AbstractExtension {
|
|
|
74
74
|
break;
|
|
75
75
|
case EventNames.PointerMove:
|
|
76
76
|
if (this._initialPoint) {
|
|
77
|
-
const
|
|
77
|
+
const containerStyle = getComputedStyle(this.extendedItem.parent.element);
|
|
78
|
+
const containerService = this.designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(this.extendedItem.parent, containerStyle));
|
|
78
79
|
const diff = containerService.placePoint(event, this.designerCanvas, this.extendedItem.parent, this._initialPoint, { x: 0, y: 0 }, currentPoint, this.designerCanvas.instanceServiceContainer.selectionService.selectedElements);
|
|
79
80
|
let trackX = diff.x - this._initialPoint.x;
|
|
80
81
|
let trackY = diff.y - this._initialPoint.y;
|
|
@@ -114,7 +115,10 @@ export class ResizeExtension extends AbstractExtension {
|
|
|
114
115
|
break;
|
|
115
116
|
//for other resize modes we need a replacement
|
|
116
117
|
}
|
|
117
|
-
this.
|
|
118
|
+
const resizedElements = [this.extendedItem, this.extendedItem.parent];
|
|
119
|
+
if (this.resizeAllSelected)
|
|
120
|
+
resizedElements.push(...this.designerCanvas.instanceServiceContainer.selectionService.selectedElements);
|
|
121
|
+
this.extensionManager.refreshExtensions(resizedElements);
|
|
118
122
|
}
|
|
119
123
|
break;
|
|
120
124
|
case EventNames.PointerUp:
|
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
import { IDesignerCanvas } from '../IDesignerCanvas';
|
|
2
2
|
import { ITool } from './ITool';
|
|
3
3
|
import { ServiceContainer } from '../../../services/ServiceContainer.js';
|
|
4
|
+
import { IPoint } from '../../../..';
|
|
4
5
|
export declare class DrawPathTool implements ITool {
|
|
5
6
|
readonly cursor = "crosshair";
|
|
6
7
|
private _pathD;
|
|
7
8
|
private _path;
|
|
9
|
+
private _samePoint;
|
|
10
|
+
private _p2pMode;
|
|
11
|
+
private _dragMode;
|
|
12
|
+
private _pointerMoved;
|
|
13
|
+
private _eventStarted;
|
|
14
|
+
private _lastPoint;
|
|
15
|
+
private _savedPoint;
|
|
8
16
|
constructor();
|
|
9
17
|
activated(serviceContainer: ServiceContainer): void;
|
|
10
18
|
dispose(): void;
|
|
11
19
|
pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): void;
|
|
20
|
+
straightenLine(p1: IPoint, p2: IPoint): IPoint;
|
|
12
21
|
}
|
|
@@ -7,6 +7,13 @@ export class DrawPathTool {
|
|
|
7
7
|
cursor = 'crosshair';
|
|
8
8
|
_pathD;
|
|
9
9
|
_path;
|
|
10
|
+
_samePoint = false;
|
|
11
|
+
_p2pMode = false;
|
|
12
|
+
_dragMode = false;
|
|
13
|
+
_pointerMoved = false;
|
|
14
|
+
_eventStarted = false;
|
|
15
|
+
_lastPoint = { x: 0, y: 0 };
|
|
16
|
+
_savedPoint = { x: 0, y: 0 };
|
|
10
17
|
constructor() {
|
|
11
18
|
}
|
|
12
19
|
activated(serviceContainer) {
|
|
@@ -18,43 +25,102 @@ export class DrawPathTool {
|
|
|
18
25
|
const offset = 50;
|
|
19
26
|
switch (event.type) {
|
|
20
27
|
case EventNames.PointerDown:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
this._eventStarted = true;
|
|
29
|
+
if (!this._p2pMode) {
|
|
30
|
+
event.target.setPointerCapture(event.pointerId);
|
|
31
|
+
this._path = document.createElementNS("http://www.w3.org/2000/svg", "path");
|
|
32
|
+
this._pathD = "M" + currentPoint.x + " " + currentPoint.y;
|
|
33
|
+
this._path.setAttribute("D", this._pathD);
|
|
34
|
+
this._path.setAttribute("stroke", designerCanvas.serviceContainer.globalContext.strokeColor);
|
|
35
|
+
this._path.setAttribute("fill", designerCanvas.serviceContainer.globalContext.fillBrush);
|
|
36
|
+
this._path.setAttribute("stroke-width", designerCanvas.serviceContainer.globalContext.strokeThickness);
|
|
37
|
+
designerCanvas.overlayLayer.addOverlay(this._path, OverlayLayer.Foregorund);
|
|
38
|
+
}
|
|
39
|
+
if (this._lastPoint.x === currentPoint.x && this._lastPoint.y === currentPoint.y && !this._samePoint) {
|
|
40
|
+
this._samePoint = true;
|
|
41
|
+
}
|
|
42
|
+
this._lastPoint = currentPoint;
|
|
28
43
|
break;
|
|
29
44
|
case EventNames.PointerMove:
|
|
30
|
-
if (this.
|
|
31
|
-
this.
|
|
32
|
-
|
|
45
|
+
if (this._eventStarted) {
|
|
46
|
+
this._pointerMoved = true;
|
|
47
|
+
}
|
|
48
|
+
if (!this._p2pMode) {
|
|
49
|
+
this._dragMode = true;
|
|
50
|
+
if (this._path) {
|
|
51
|
+
this._pathD += "L" + currentPoint.x + " " + currentPoint.y;
|
|
52
|
+
this._path.setAttribute("d", this._pathD);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else { // shows line preview
|
|
56
|
+
if (this._path) {
|
|
57
|
+
let straightLine = currentPoint;
|
|
58
|
+
if (event.shiftKey)
|
|
59
|
+
straightLine = this.straightenLine(this._savedPoint, currentPoint);
|
|
60
|
+
this._path.setAttribute("d", this._pathD + "L" + straightLine.x + " " + straightLine.y);
|
|
61
|
+
}
|
|
33
62
|
}
|
|
34
63
|
break;
|
|
35
64
|
case EventNames.PointerUp:
|
|
36
65
|
event.target.releasePointerCapture(event.pointerId);
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
66
|
+
if (this._eventStarted && !this._pointerMoved) {
|
|
67
|
+
this._p2pMode = true;
|
|
68
|
+
}
|
|
69
|
+
if (this._p2pMode && !this._samePoint) {
|
|
70
|
+
if (this._path) {
|
|
71
|
+
if (event.shiftKey) {
|
|
72
|
+
let straightLine = this.straightenLine(this._savedPoint, currentPoint);
|
|
73
|
+
this._pathD += "L" + straightLine.x + " " + straightLine.y;
|
|
74
|
+
this._path.setAttribute("d", this._pathD);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
this._pathD += "L" + currentPoint.x + " " + currentPoint.y;
|
|
78
|
+
this._path.setAttribute("d", this._pathD);
|
|
79
|
+
}
|
|
80
|
+
this._savedPoint = currentPoint;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (this._samePoint && this._p2pMode || this._dragMode && !this._p2pMode) {
|
|
84
|
+
this._eventStarted = false;
|
|
85
|
+
this._p2pMode = false;
|
|
86
|
+
this._pointerMoved = false;
|
|
87
|
+
this._samePoint = false;
|
|
88
|
+
this._dragMode = false;
|
|
89
|
+
const rect = this._path.getBoundingClientRect();
|
|
90
|
+
designerCanvas.overlayLayer.removeOverlay(this._path);
|
|
91
|
+
const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
|
|
92
|
+
const mvX = rect.x - designerCanvas.containerBoundingRect.x - offset;
|
|
93
|
+
const mvY = rect.y - designerCanvas.containerBoundingRect.y - offset;
|
|
94
|
+
const d = movePathData(this._path, mvX, mvY);
|
|
95
|
+
this._path.setAttribute("d", d);
|
|
96
|
+
svg.appendChild(this._path);
|
|
97
|
+
svg.style.left = (mvX) + 'px';
|
|
98
|
+
svg.style.top = (mvY) + 'px';
|
|
99
|
+
svg.style.position = 'absolute';
|
|
100
|
+
svg.style.width = (rect.width + 2 * offset) + 'px';
|
|
101
|
+
svg.style.height = (rect.height + 2 * offset) + 'px';
|
|
102
|
+
//designerView.rootDesignItem.element.appendChild(svg);
|
|
103
|
+
this._path = null;
|
|
104
|
+
this._pathD = null;
|
|
105
|
+
const di = DesignItem.createDesignItemFromInstance(svg, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
|
|
106
|
+
designerCanvas.instanceServiceContainer.undoService.execute(new InsertAction(designerCanvas.rootDesignItem, designerCanvas.rootDesignItem.childCount, di));
|
|
107
|
+
designerCanvas.serviceContainer.globalContext.finishedWithTool(this);
|
|
108
|
+
}
|
|
56
109
|
//TODO: Better Path drawing (like in SVGEDIT & Adding via Undo Framework. And adding to correct container)
|
|
57
110
|
break;
|
|
58
111
|
}
|
|
59
112
|
}
|
|
113
|
+
straightenLine(p1, p2) {
|
|
114
|
+
let newP = { x: 0, y: 0 };
|
|
115
|
+
let alpha = -1 * Math.atan2(p2.y - p1.y, p2.x - p1.x) * 180 / Math.PI;
|
|
116
|
+
if (alpha < 0)
|
|
117
|
+
alpha += 360;
|
|
118
|
+
if (alpha > 0 && alpha < 45 || alpha > 315 && alpha < 360 || alpha > 135 && alpha < 225) // right or left
|
|
119
|
+
newP = { x: p2.x, y: p1.y };
|
|
120
|
+
else if (alpha > 45 && alpha < 135 || alpha > 225 && alpha < 315) // up or down
|
|
121
|
+
newP = { x: p1.x, y: p2.y };
|
|
122
|
+
else // something else
|
|
123
|
+
newP = { x: p2.x, y: p2.y };
|
|
124
|
+
return newP;
|
|
125
|
+
}
|
|
60
126
|
}
|
|
@@ -3,7 +3,7 @@ import { PointerActionType } from "../../../../enums/PointerActionType";
|
|
|
3
3
|
import { DesignItem } from "../../../item/DesignItem";
|
|
4
4
|
import { ExtensionType } from "../extensions/ExtensionType";
|
|
5
5
|
import { NamedTools } from './NamedTools';
|
|
6
|
-
import {
|
|
6
|
+
import { DomHelper } from '@node-projects/base-custom-webcomponent/dist/DomHelper';
|
|
7
7
|
export class PointerTool {
|
|
8
8
|
cursor = 'default';
|
|
9
9
|
_movedSinceStartedAction = false;
|
|
@@ -101,7 +101,7 @@ export class PointerTool {
|
|
|
101
101
|
currentDesignItem.element.style.pointerEvents = 'none';
|
|
102
102
|
}
|
|
103
103
|
let currentElement = designerCanvas.elementFromPoint(event.x, event.y);
|
|
104
|
-
if (
|
|
104
|
+
if (DomHelper.getHost(currentElement) !== designerCanvas.overlayLayer)
|
|
105
105
|
currentDesignItem = DesignItem.GetOrCreateDesignItem(currentElement, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
|
|
106
106
|
}
|
|
107
107
|
else {
|
|
@@ -140,7 +140,8 @@ export class PointerTool {
|
|
|
140
140
|
this._actionType = PointerActionType.Drag;
|
|
141
141
|
}
|
|
142
142
|
if (this._movedSinceStartedAction) {
|
|
143
|
-
const
|
|
143
|
+
const containerStyle = getComputedStyle(this._actionStartedDesignItem.parent.element);
|
|
144
|
+
const currentContainerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(this._actionStartedDesignItem.parent, containerStyle));
|
|
144
145
|
if (currentContainerService) {
|
|
145
146
|
const dragItem = this._actionStartedDesignItem.parent;
|
|
146
147
|
if (this._dragExtensionItem != dragItem) {
|
|
@@ -166,7 +167,8 @@ export class PointerTool {
|
|
|
166
167
|
}
|
|
167
168
|
else if (newContainerElement == designerCanvas.rootDesignItem.element) {
|
|
168
169
|
newContainerElementDesignItem = designerCanvas.rootDesignItem;
|
|
169
|
-
|
|
170
|
+
const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
|
|
171
|
+
newContainerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
|
|
170
172
|
break;
|
|
171
173
|
}
|
|
172
174
|
else if (newContainerElement.getRootNode() !== designerCanvas.shadowRoot || newContainerElement === designerCanvas.overlayLayer || newContainerElement.parentElement === designerCanvas.overlayLayer) {
|
|
@@ -208,7 +210,8 @@ export class PointerTool {
|
|
|
208
210
|
}
|
|
209
211
|
//end check
|
|
210
212
|
newContainerElementDesignItem = DesignItem.GetOrCreateDesignItem(newContainerElement, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
|
|
211
|
-
|
|
213
|
+
const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
|
|
214
|
+
newContainerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
|
|
212
215
|
if (newContainerService) {
|
|
213
216
|
if (newContainerService.canEnter(newContainerElementDesignItem, [this._actionStartedDesignItem])) {
|
|
214
217
|
break;
|
|
@@ -293,7 +296,8 @@ export class PointerTool {
|
|
|
293
296
|
return;
|
|
294
297
|
}
|
|
295
298
|
if (this._movedSinceStartedAction) {
|
|
296
|
-
|
|
299
|
+
const containerStyle = getComputedStyle(this._actionStartedDesignItem.parent.element);
|
|
300
|
+
let containerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(this._actionStartedDesignItem.parent, containerStyle));
|
|
297
301
|
const cp = { x: currentPoint.x - this._moveItemsOffset.x, y: currentPoint.y - this._moveItemsOffset.y };
|
|
298
302
|
if (containerService) {
|
|
299
303
|
let cg = designerCanvas.rootDesignItem.openGroup("Move Elements", designerCanvas.instanceServiceContainer.selectionService.selectedElements);
|
package/dist/index.d.ts
CHANGED
|
@@ -32,6 +32,8 @@ export type { IContentChanged } from "./elements/services/contentService/IConten
|
|
|
32
32
|
export type { IContentService } from "./elements/services/contentService/IContentService.js";
|
|
33
33
|
export * from "./elements/services/copyPasteService/CopyPasteService.js";
|
|
34
34
|
export type { ICopyPasteService } from "./elements/services/copyPasteService/ICopyPasteService.js";
|
|
35
|
+
export * from "./elements/services/demoProviderService/DemoProviderService.js";
|
|
36
|
+
export type { IDemoProviderService } from "./elements/services/demoProviderService/IDemoProviderService.js";
|
|
35
37
|
export * from "./elements/services/dragDropService/DragDropService.js";
|
|
36
38
|
export type { IDragDropService } from "./elements/services/dragDropService/IDragDropService.js";
|
|
37
39
|
export type { IElementDefinition } from "./elements/services/elementsService/IElementDefinition.js";
|
package/dist/index.js
CHANGED
|
@@ -21,6 +21,7 @@ export * from "./elements/services/placementService/SnaplinesProviderService.js"
|
|
|
21
21
|
export * from "./elements/services/elementAtPointService/ElementAtPointService.js";
|
|
22
22
|
export * from "./elements/services/contentService/ContentService.js";
|
|
23
23
|
export * from "./elements/services/copyPasteService/CopyPasteService.js";
|
|
24
|
+
export * from "./elements/services/demoProviderService/DemoProviderService.js";
|
|
24
25
|
export * from "./elements/services/dragDropService/DragDropService.js";
|
|
25
26
|
export * from "./elements/services/elementsService/JsonFileElementsService.js";
|
|
26
27
|
export * from "./elements/services/htmlWriterService/HtmlWriterService.js";
|