@node-projects/web-component-designer 0.0.59 → 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/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/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/tools/DrawPathTool.d.ts +9 -0
- package/dist/elements/widgets/designerView/tools/DrawPathTool.js +95 -29
- package/dist/elements/widgets/designerView/tools/PointerTool.js +2 -2
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/package.json +39 -39
|
@@ -21,5 +21,8 @@ export declare enum CommandType {
|
|
|
21
21
|
'distributeHorizontal' = "distributeHorizontaly",
|
|
22
22
|
'distributeVertical' = "distributeVertical",
|
|
23
23
|
'setTool' = "setTool",
|
|
24
|
+
'setStrokeColor' = "setStrokeColor",
|
|
25
|
+
'setFillBrush' = "setFillBrush",
|
|
26
|
+
'setStrokeThickness' = "setStrokeThickness",
|
|
24
27
|
'screenshot' = "screenshot"
|
|
25
28
|
}
|
|
@@ -22,5 +22,8 @@ export var CommandType;
|
|
|
22
22
|
CommandType["distributeHorizontal"] = "distributeHorizontaly";
|
|
23
23
|
CommandType["distributeVertical"] = "distributeVertical";
|
|
24
24
|
CommandType["setTool"] = "setTool";
|
|
25
|
+
CommandType["setStrokeColor"] = "setStrokeColor";
|
|
26
|
+
CommandType["setFillBrush"] = "setFillBrush";
|
|
27
|
+
CommandType["setStrokeThickness"] = "setStrokeThickness";
|
|
25
28
|
CommandType["screenshot"] = "screenshot";
|
|
26
29
|
})(CommandType || (CommandType = {}));
|
|
@@ -45,6 +45,9 @@ import { DragDropService } from './dragDropService/DragDropService';
|
|
|
45
45
|
import { EditTextExtensionProvider } from '../widgets/designerView/extensions/EditText/EditTextExtensionProvider.js';
|
|
46
46
|
import { CopyPasteService } from './copyPasteService/CopyPasteService';
|
|
47
47
|
import { DefaultModelCommandService } from './modelCommandService/DefaultModelCommandService';
|
|
48
|
+
import { ButtonSeperatorProvider } from '../widgets/designerView/ButtonSeperatorProvider';
|
|
49
|
+
import { GridExtensionDesignViewConfigButtons } from '../widgets/designerView/extensions/GridExtensionDesignViewConfigButtons';
|
|
50
|
+
import { DemoProviderService } from './demoProviderService/DemoProviderService';
|
|
48
51
|
export function createDefaultServiceContainer() {
|
|
49
52
|
let serviceContainer = new ServiceContainer();
|
|
50
53
|
serviceContainer.register("propertyService", new PolymerPropertiesService());
|
|
@@ -65,6 +68,7 @@ export function createDefaultServiceContainer() {
|
|
|
65
68
|
serviceContainer.register("dragDropService", new DragDropService());
|
|
66
69
|
serviceContainer.register("copyPasteService", new CopyPasteService());
|
|
67
70
|
serviceContainer.register("modelCommandService", new DefaultModelCommandService());
|
|
71
|
+
serviceContainer.register("demoProviderService", new DemoProviderService());
|
|
68
72
|
serviceContainer.designerExtensions.set(ExtensionType.Permanent, [
|
|
69
73
|
new ResizeExtensionProvider(false),
|
|
70
74
|
new InvisibleDivExtensionProvider()
|
|
@@ -106,6 +110,7 @@ export function createDefaultServiceContainer() {
|
|
|
106
110
|
serviceContainer.designerTools.set(NamedTools.MagicWandSelector, new MagicWandSelectorTool());
|
|
107
111
|
serviceContainer.designerTools.set(NamedTools.PickColor, new PickColorTool());
|
|
108
112
|
serviceContainer.designerTools.set(NamedTools.Text, new TextTool());
|
|
113
|
+
serviceContainer.designViewConfigButtons.push(new ButtonSeperatorProvider(20), new GridExtensionDesignViewConfigButtons());
|
|
109
114
|
serviceContainer.designerContextMenuExtensions = [
|
|
110
115
|
new CopyPasteContextMenu(),
|
|
111
116
|
new ZMoveContextMenu(),
|
|
@@ -5,6 +5,7 @@ export declare class GlobalContext {
|
|
|
5
5
|
private _serviceContainer;
|
|
6
6
|
private _tool;
|
|
7
7
|
private _strokeColor;
|
|
8
|
+
private _strokeThickness;
|
|
8
9
|
private _fillBrush;
|
|
9
10
|
constructor(serviceContainer: ServiceContainer);
|
|
10
11
|
set tool(tool: ITool);
|
|
@@ -14,6 +15,9 @@ export declare class GlobalContext {
|
|
|
14
15
|
set strokeColor(strokeColor: string);
|
|
15
16
|
get strokeColor(): string;
|
|
16
17
|
readonly onStrokeColorChanged: TypedEvent<PropertyChangedArgs<string>>;
|
|
18
|
+
set strokeThickness(strokeThickness: string);
|
|
19
|
+
get strokeThickness(): string;
|
|
20
|
+
readonly onStrokeThicknessChanged: TypedEvent<PropertyChangedArgs<string>>;
|
|
17
21
|
set fillBrush(fillBrush: string);
|
|
18
22
|
get fillBrush(): string;
|
|
19
23
|
readonly onFillBrushChanged: TypedEvent<PropertyChangedArgs<string>>;
|
|
@@ -5,6 +5,7 @@ export class GlobalContext {
|
|
|
5
5
|
_serviceContainer;
|
|
6
6
|
_tool;
|
|
7
7
|
_strokeColor = 'black';
|
|
8
|
+
_strokeThickness = '3';
|
|
8
9
|
_fillBrush = 'transparent';
|
|
9
10
|
constructor(serviceContainer) {
|
|
10
11
|
this._serviceContainer = serviceContainer;
|
|
@@ -36,6 +37,17 @@ export class GlobalContext {
|
|
|
36
37
|
return this._strokeColor;
|
|
37
38
|
}
|
|
38
39
|
onStrokeColorChanged = new TypedEvent();
|
|
40
|
+
set strokeThickness(strokeThickness) {
|
|
41
|
+
if (this._strokeThickness !== strokeThickness) {
|
|
42
|
+
const oldStrokeThickness = this._strokeThickness;
|
|
43
|
+
this._strokeThickness = strokeThickness;
|
|
44
|
+
this.onStrokeThicknessChanged.emit(new PropertyChangedArgs(strokeThickness, oldStrokeThickness));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
get strokeThickness() {
|
|
48
|
+
return this._strokeThickness;
|
|
49
|
+
}
|
|
50
|
+
onStrokeThicknessChanged = new TypedEvent();
|
|
39
51
|
set fillBrush(fillBrush) {
|
|
40
52
|
this._fillBrush = fillBrush;
|
|
41
53
|
if (this._fillBrush !== fillBrush) {
|
|
@@ -23,6 +23,8 @@ import { IDragDropService } from './dragDropService/IDragDropService';
|
|
|
23
23
|
import { ICopyPasteService } from "./copyPasteService/ICopyPasteService.js";
|
|
24
24
|
import { IDesignerPointerExtensionProvider } from "../widgets/designerView/extensions/pointerExtensions/IDesignerPointerExtensionProvider.js";
|
|
25
25
|
import { IModelCommandService } from "./modelCommandService/IModelCommandService.js";
|
|
26
|
+
import { IDesignViewConfigButtonsProvider } from "../widgets/designerView/IDesignViewConfigButtonsProvider.js";
|
|
27
|
+
import { IDemoProviderService } from "./demoProviderService/IDemoProviderService.js";
|
|
26
28
|
interface ServiceNameMap {
|
|
27
29
|
"propertyService": IPropertiesService;
|
|
28
30
|
"containerService": IPlacementService;
|
|
@@ -39,6 +41,7 @@ interface ServiceNameMap {
|
|
|
39
41
|
"dragDropService": IDragDropService;
|
|
40
42
|
"copyPasteService": ICopyPasteService;
|
|
41
43
|
"modelCommandService": IModelCommandService;
|
|
44
|
+
"demoProviderService": IDemoProviderService;
|
|
42
45
|
}
|
|
43
46
|
export declare class ServiceContainer extends BaseServiceContainer<ServiceNameMap> {
|
|
44
47
|
readonly config: {
|
|
@@ -46,6 +49,7 @@ export declare class ServiceContainer extends BaseServiceContainer<ServiceNameMa
|
|
|
46
49
|
demoViewWidget: new (...args: any[]) => IDemoView & HTMLElement;
|
|
47
50
|
};
|
|
48
51
|
readonly designerExtensions: Map<(ExtensionType | string), IDesignerExtensionProvider[]>;
|
|
52
|
+
readonly designViewConfigButtons: IDesignViewConfigButtonsProvider[];
|
|
49
53
|
readonly designerPointerExtensions: IDesignerPointerExtensionProvider[];
|
|
50
54
|
designerContextMenuExtensions: IContextMenuExtension[];
|
|
51
55
|
readonly globalContext: GlobalContext;
|
|
@@ -65,5 +69,6 @@ export declare class ServiceContainer extends BaseServiceContainer<ServiceNameMa
|
|
|
65
69
|
get dragDropService(): IDragDropService;
|
|
66
70
|
get copyPasteService(): ICopyPasteService;
|
|
67
71
|
get modelCommandService(): IModelCommandService;
|
|
72
|
+
get demoProviderService(): IDemoProviderService;
|
|
68
73
|
}
|
|
69
74
|
export {};
|
|
@@ -8,6 +8,7 @@ export class ServiceContainer extends BaseServiceContainer {
|
|
|
8
8
|
demoViewWidget: DemoView
|
|
9
9
|
};
|
|
10
10
|
designerExtensions = new Map();
|
|
11
|
+
designViewConfigButtons = [];
|
|
11
12
|
designerPointerExtensions = [];
|
|
12
13
|
designerContextMenuExtensions;
|
|
13
14
|
globalContext = new GlobalContext(this);
|
|
@@ -57,4 +58,7 @@ export class ServiceContainer extends BaseServiceContainer {
|
|
|
57
58
|
get modelCommandService() {
|
|
58
59
|
return this.getLastService('modelCommandService');
|
|
59
60
|
}
|
|
61
|
+
get demoProviderService() {
|
|
62
|
+
return this.getLastService('demoProviderService');
|
|
63
|
+
}
|
|
60
64
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { InstanceServiceContainer } from "../InstanceServiceContainer.js";
|
|
2
|
+
import { ServiceContainer } from "../ServiceContainer.js";
|
|
3
|
+
import { IDemoProviderService } from "./IDemoProviderService.js";
|
|
4
|
+
export declare class DemoProviderService implements IDemoProviderService {
|
|
5
|
+
provideDemo(container: HTMLElement, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, code: string): Promise<void>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { DomHelper } from '@node-projects/base-custom-webcomponent/dist/DomHelper';
|
|
2
|
+
export class DemoProviderService {
|
|
3
|
+
provideDemo(container, serviceContainer, instanceServiceContainer, code) {
|
|
4
|
+
return new Promise(resolve => {
|
|
5
|
+
const iframe = document.createElement('iframe');
|
|
6
|
+
iframe.style.width = '100%';
|
|
7
|
+
iframe.style.height = '100%';
|
|
8
|
+
iframe.style.border = 'none';
|
|
9
|
+
iframe.style.display = 'none';
|
|
10
|
+
DomHelper.removeAllChildnodes(container);
|
|
11
|
+
container.appendChild(iframe);
|
|
12
|
+
iframe.onload = () => {
|
|
13
|
+
iframe.style.display = 'block';
|
|
14
|
+
resolve();
|
|
15
|
+
};
|
|
16
|
+
const doc = iframe.contentWindow.document;
|
|
17
|
+
doc.open();
|
|
18
|
+
doc.write('<script type="module">');
|
|
19
|
+
for (let i of instanceServiceContainer.designContext.imports) {
|
|
20
|
+
doc.write("import '" + i + "';");
|
|
21
|
+
}
|
|
22
|
+
doc.write("document.body.style.display='';");
|
|
23
|
+
doc.write('</script>');
|
|
24
|
+
doc.write('<body style="display:none">' + code + '</body>');
|
|
25
|
+
doc.close();
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { InstanceServiceContainer } from "../InstanceServiceContainer.js";
|
|
2
|
+
import { ServiceContainer } from "../ServiceContainer.js";
|
|
3
|
+
export interface IDemoProviderService {
|
|
4
|
+
provideDemo(container: HTMLElement, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, code: string): any;
|
|
5
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -7,5 +7,5 @@ export declare class DemoView extends BaseCustomWebComponentLazyAppend implement
|
|
|
7
7
|
private _loading;
|
|
8
8
|
static readonly style: CSSStyleSheet;
|
|
9
9
|
constructor();
|
|
10
|
-
display(serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, code: string): void
|
|
10
|
+
display(serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, code: string): Promise<void>;
|
|
11
11
|
}
|
|
@@ -18,11 +18,6 @@ export class DemoView extends BaseCustomWebComponentLazyAppend {
|
|
|
18
18
|
position: absolute;
|
|
19
19
|
top: 60px;
|
|
20
20
|
left: 20px;
|
|
21
|
-
}
|
|
22
|
-
iframe {
|
|
23
|
-
width: 100%;
|
|
24
|
-
height: 100%;
|
|
25
|
-
border: none;
|
|
26
21
|
}`;
|
|
27
22
|
constructor() {
|
|
28
23
|
super();
|
|
@@ -34,24 +29,10 @@ export class DemoView extends BaseCustomWebComponentLazyAppend {
|
|
|
34
29
|
this._loading.textContent = '🛀 Hold on, loading...';
|
|
35
30
|
this.shadowRoot.appendChild(this._loading);
|
|
36
31
|
}
|
|
37
|
-
display(serviceContainer, instanceServiceContainer, code) {
|
|
38
|
-
let iframe = document.createElement('iframe');
|
|
39
|
-
this._placeholder.innerHTML = '';
|
|
40
|
-
this._placeholder.appendChild(iframe);
|
|
32
|
+
async display(serviceContainer, instanceServiceContainer, code) {
|
|
41
33
|
this._loading.hidden = false;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
};
|
|
45
|
-
let doc = iframe.contentWindow.document;
|
|
46
|
-
doc.open();
|
|
47
|
-
doc.write('<script type="module">');
|
|
48
|
-
for (let i of instanceServiceContainer.designContext.imports) {
|
|
49
|
-
doc.write("import '" + i + "';");
|
|
50
|
-
}
|
|
51
|
-
doc.write("document.body.style.display='';");
|
|
52
|
-
doc.write('</script>');
|
|
53
|
-
doc.write('<body style="display:none">' + code + '</body>');
|
|
54
|
-
doc.close();
|
|
34
|
+
await serviceContainer.demoProviderService.provideDemo(this._placeholder, serviceContainer, instanceServiceContainer, code);
|
|
35
|
+
this._loading.hidden = true;
|
|
55
36
|
}
|
|
56
37
|
}
|
|
57
38
|
customElements.define('node-projects-demo-view', DemoView);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { IDesignerCanvas } from "./IDesignerCanvas.js";
|
|
2
|
+
import { IDesignViewConfigButtonsProvider } from "./IDesignViewConfigButtonsProvider.js";
|
|
3
|
+
export declare class ButtonSeperatorProvider implements IDesignViewConfigButtonsProvider {
|
|
4
|
+
_space: number;
|
|
5
|
+
constructor(space: number);
|
|
6
|
+
provideButtons(designerCanvas: IDesignerCanvas): HTMLElement[];
|
|
7
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { DesignerView } from "./designerView.js";
|
|
2
|
+
import { IDesignerCanvas } from "./IDesignerCanvas.js";
|
|
3
|
+
import { IDesignViewConfigButtonsProvider } from "./IDesignViewConfigButtonsProvider.js";
|
|
4
|
+
export declare class ButtonSeperatorProvider implements IDesignViewConfigButtonsProvider {
|
|
5
|
+
_space: number;
|
|
6
|
+
constructor(space: number);
|
|
7
|
+
provideButtons(designerView: DesignerView, designerCanvas: IDesignerCanvas): HTMLElement[];
|
|
8
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export class ButtonSeperatorProvider {
|
|
2
|
+
_space;
|
|
3
|
+
constructor(space) {
|
|
4
|
+
this._space = space;
|
|
5
|
+
}
|
|
6
|
+
provideButtons(designerView, designerCanvas) {
|
|
7
|
+
const div = document.createElement('div');
|
|
8
|
+
div.style.marginLeft = this._space + 'px';
|
|
9
|
+
return [div];
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { IDesignerCanvas } from "./IDesignerCanvas.js";
|
|
2
|
+
import { IDesignViewConfigButtonsProvider } from "./IDesignViewConfigButtonsProvider.js";
|
|
3
|
+
import { DesignerView } from './designerView';
|
|
4
|
+
export declare class DesignerViewUseOverlayScollbars implements IDesignViewConfigButtonsProvider {
|
|
5
|
+
constructor();
|
|
6
|
+
provideButtons(designerView: DesignerView, designerCanvas: IDesignerCanvas): HTMLElement[];
|
|
7
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//todo, element moving does not work atm, needs to be fixed
|
|
2
|
+
export class DesignerViewUseOverlayScollbars {
|
|
3
|
+
constructor() {
|
|
4
|
+
}
|
|
5
|
+
provideButtons(designerView, designerCanvas) {
|
|
6
|
+
let externalCss = document.createElement('style');
|
|
7
|
+
externalCss.innerHTML = '@import url("./node_modules/overlayscrollbars/css/OverlayScrollbars.min.css");';
|
|
8
|
+
designerCanvas.shadowRoot.appendChild(externalCss);
|
|
9
|
+
//@ts-ignore
|
|
10
|
+
setTimeout(() => OverlayScrollbars([designerCanvas._outercanvas2], {}), 5000);
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -72,7 +72,6 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
|
|
|
72
72
|
getNormalizedEventCoordinates(event: MouseEvent): IPoint;
|
|
73
73
|
getNormalizedElementCoordinates(element: Element): IRect;
|
|
74
74
|
getNormalizedOffsetInElement(event: MouseEvent, element: Element): IPoint;
|
|
75
|
-
static getHost(node: Node): Element;
|
|
76
75
|
getElementAtPoint(point: IPoint, ignoreElementCallback?: (element: HTMLElement) => boolean): HTMLElement;
|
|
77
76
|
_rect: SVGRectElement;
|
|
78
77
|
private _pointerEventHandler;
|
|
@@ -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 {};
|
|
@@ -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 {
|
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";
|
package/package.json
CHANGED
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
{
|
|
2
|
-
"description": "A UI designer for Polymer apps",
|
|
3
|
-
"name": "@node-projects/web-component-designer",
|
|
4
|
-
"version": "0.0.
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "./dist/index.js",
|
|
7
|
-
"author": "",
|
|
8
|
-
"license": "MIT",
|
|
9
|
-
"scripts": {
|
|
10
|
-
"tsc": "tsc",
|
|
11
|
-
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js"
|
|
12
|
-
},
|
|
13
|
-
"dependencies": {
|
|
14
|
-
"@node-projects/base-custom-webcomponent": "^0.3.
|
|
15
|
-
"construct-style-sheets-polyfill": "^3.0.4"
|
|
16
|
-
},
|
|
17
|
-
"devDependencies": {
|
|
18
|
-
"@node-projects/lean-he-esm": "^3.3.0",
|
|
19
|
-
"@node-projects/node-html-parser-esm": "^2.4.1",
|
|
20
|
-
"@types/codemirror": "^5.60.5",
|
|
21
|
-
"@types/jquery": "^3.5.9",
|
|
22
|
-
"@types/jquery.fancytree": "0.0.7",
|
|
23
|
-
"ace-builds": "^1.4.13",
|
|
24
|
-
"codemirror": "^5.64.0",
|
|
25
|
-
"esprima-next": "^5.7.0",
|
|
26
|
-
"html2canvas": "*",
|
|
27
|
-
"jest": "^27.3
|
|
28
|
-
"jquery": "^3.6.0",
|
|
29
|
-
"jquery.fancytree": "^2.38.0",
|
|
30
|
-
"monaco-editor": "^0.30.1",
|
|
31
|
-
"ts-jest": "^27.0
|
|
32
|
-
"typescript": "^4.5.2",
|
|
33
|
-
"typescript-lit-html-plugin": "^0.9.0"
|
|
34
|
-
},
|
|
35
|
-
"repository": {
|
|
36
|
-
"type": "git",
|
|
37
|
-
"url": "git+https://github.com/node-projects/web-component-designer.git"
|
|
38
|
-
}
|
|
39
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"description": "A UI designer for Polymer apps",
|
|
3
|
+
"name": "@node-projects/web-component-designer",
|
|
4
|
+
"version": "0.0.60",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"author": "",
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"scripts": {
|
|
10
|
+
"tsc": "tsc",
|
|
11
|
+
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js"
|
|
12
|
+
},
|
|
13
|
+
"dependencies": {
|
|
14
|
+
"@node-projects/base-custom-webcomponent": "^0.3.5",
|
|
15
|
+
"construct-style-sheets-polyfill": "^3.0.4"
|
|
16
|
+
},
|
|
17
|
+
"devDependencies": {
|
|
18
|
+
"@node-projects/lean-he-esm": "^3.3.0",
|
|
19
|
+
"@node-projects/node-html-parser-esm": "^2.4.1",
|
|
20
|
+
"@types/codemirror": "^5.60.5",
|
|
21
|
+
"@types/jquery": "^3.5.9",
|
|
22
|
+
"@types/jquery.fancytree": "0.0.7",
|
|
23
|
+
"ace-builds": "^1.4.13",
|
|
24
|
+
"codemirror": "^5.64.0",
|
|
25
|
+
"esprima-next": "^5.7.0",
|
|
26
|
+
"html2canvas": "*",
|
|
27
|
+
"jest": "^27.4.3",
|
|
28
|
+
"jquery": "^3.6.0",
|
|
29
|
+
"jquery.fancytree": "^2.38.0",
|
|
30
|
+
"monaco-editor": "^0.30.1",
|
|
31
|
+
"ts-jest": "^27.1.0",
|
|
32
|
+
"typescript": "^4.5.2",
|
|
33
|
+
"typescript-lit-html-plugin": "^0.9.0"
|
|
34
|
+
},
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "git+https://github.com/node-projects/web-component-designer.git"
|
|
38
|
+
}
|
|
39
|
+
}
|