@node-projects/web-component-designer 0.0.76 → 0.0.80
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 +1 -0
- package/dist/elements/documentContainer.d.ts +3 -0
- package/dist/elements/documentContainer.js +13 -3
- package/dist/elements/helper/ElementHelper.d.ts +7 -0
- package/dist/elements/helper/ElementHelper.js +13 -0
- package/dist/elements/helper/IndentedTextWriter.d.ts +1 -0
- package/dist/elements/helper/IndentedTextWriter.js +3 -0
- package/dist/elements/helper/PathDataPolyfill.js +1 -1
- package/dist/elements/services/DefaultServiceBootstrap.js +1 -1
- package/dist/elements/services/ServiceContainer.d.ts +1 -1
- package/dist/elements/services/ServiceContainer.js +2 -2
- package/dist/elements/services/demoProviderService/DemoProviderService.d.ts +1 -1
- package/dist/elements/services/demoProviderService/DemoProviderService.js +2 -1
- package/dist/elements/services/demoProviderService/IDemoProviderService.d.ts +1 -1
- package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService.d.ts +22 -0
- package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService.js +133 -0
- package/dist/elements/services/htmlWriterService/HtmlWriterService.d.ts +2 -2
- package/dist/elements/services/htmlWriterService/HtmlWriterService.js +34 -19
- package/dist/elements/services/htmlWriterService/IHtmlWriterService.d.ts +5 -6
- package/dist/elements/services/htmlWriterService/LitTsElementWriterService.d.ts +9 -0
- package/dist/elements/services/htmlWriterService/LitTsElementWriterService.js +43 -0
- package/dist/elements/services/htmlWriterService/SimpleHtmlWriterService.d.ts +27 -0
- package/dist/elements/services/htmlWriterService/SimpleHtmlWriterService.js +93 -0
- package/dist/elements/services/initializationService/DefaultIntializationService.d.ts +6 -0
- package/dist/elements/services/initializationService/DefaultIntializationService.js +22 -0
- package/dist/elements/services/manifestParsers/WebcomponentManifestParserService.d.ts +3 -1
- package/dist/elements/services/manifestParsers/WebcomponentManifestParserService.js +39 -27
- package/dist/elements/widgets/codeView/code-view-ace.js +1 -1
- package/dist/elements/widgets/demoView/IDemoView.d.ts +1 -1
- package/dist/elements/widgets/demoView/demoView.d.ts +1 -1
- package/dist/elements/widgets/demoView/demoView.js +2 -2
- package/dist/elements/widgets/designerView/DomConverter.js +1 -7
- package/dist/elements/widgets/designerView/extensions/PathExtension.d.ts +3 -1
- package/dist/elements/widgets/designerView/extensions/PathExtension.js +59 -5
- package/dist/elements/widgets/designerView/overlayLayerView.js +1 -2
- package/dist/elements/widgets/designerView/tools/DrawEllipsisTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/DrawLineTool.js +1 -0
- package/dist/elements/widgets/designerView/tools/DrawPathTool.d.ts +0 -1
- package/dist/elements/widgets/designerView/tools/DrawPathTool.js +12 -8
- package/dist/elements/widgets/designerView/tools/DrawRectTool.js +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/package.json +4 -4
- package/dist/elements/services/manifestLoaders/WebcomponentManifestParserService.d.ts +0 -26
- package/dist/elements/services/manifestLoaders/WebcomponentManifestParserService.js +0 -69
- package/dist/elements/services/webcomponentManifestParserService/WebcomponentManifestParserService.1.d.ts +0 -0
- package/dist/elements/services/webcomponentManifestParserService/WebcomponentManifestParserService.1.js +0 -1
- package/dist/elements/services/webcomponentManifestParserService/webcomponentManifestParserService.d.ts +0 -26
- package/dist/elements/services/webcomponentManifestParserService/webcomponentManifestParserService.js +0 -69
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { DomConverter } from '../../widgets/designerView/DomConverter';
|
|
2
|
+
import { CssCombiner } from '../../helper/CssCombiner';
|
|
3
|
+
import { NodeType } from '../../item/NodeType';
|
|
4
|
+
import { PropertiesHelper } from '../propertiesService/services/PropertiesHelper';
|
|
5
|
+
import { ElementDisplayType, getElementDisplaytype } from '../../helper/ElementHelper.js';
|
|
6
|
+
export var ElementContainerType;
|
|
7
|
+
(function (ElementContainerType) {
|
|
8
|
+
ElementContainerType[ElementContainerType["block"] = 0] = "block";
|
|
9
|
+
ElementContainerType[ElementContainerType["complex"] = 1] = "complex";
|
|
10
|
+
})(ElementContainerType || (ElementContainerType = {}));
|
|
11
|
+
export class SimpleHtmlWriterService {
|
|
12
|
+
writeAttributes(writeContext, designItem) {
|
|
13
|
+
if (designItem.hasAttributes) {
|
|
14
|
+
for (const a of designItem.attributes) {
|
|
15
|
+
writeContext.indentedTextWriter.write(' ');
|
|
16
|
+
if (typeof a[1] === 'string') {
|
|
17
|
+
if (a[1] === "")
|
|
18
|
+
writeContext.indentedTextWriter.write(a[0]);
|
|
19
|
+
else
|
|
20
|
+
writeContext.indentedTextWriter.write(a[0] + '="' + DomConverter.normalizeAttributeValue(a[1]) + '"');
|
|
21
|
+
}
|
|
22
|
+
else if (!a[1])
|
|
23
|
+
writeContext.indentedTextWriter.write(a[0]);
|
|
24
|
+
else {
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
writeStyles(writeContext, designItem) {
|
|
30
|
+
if (designItem.hasStyles) {
|
|
31
|
+
writeContext.indentedTextWriter.write(' style="');
|
|
32
|
+
let styles = designItem.styles;
|
|
33
|
+
if (writeContext.options.compressCssToShorthandProperties)
|
|
34
|
+
styles = CssCombiner.combine(styles);
|
|
35
|
+
for (const s of styles) {
|
|
36
|
+
if (s[0]) {
|
|
37
|
+
writeContext.indentedTextWriter.write(PropertiesHelper.camelToDashCase(s[0]) + ':' + DomConverter.normalizeAttributeValue(s[1]) + ';');
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
writeContext.indentedTextWriter.write('"');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
_writeTextNode(writeContext, designItem) {
|
|
44
|
+
writeContext.lastElementDisplayType = ElementDisplayType.inline;
|
|
45
|
+
let content = DomConverter.normalizeContentValue(designItem.content);
|
|
46
|
+
writeContext.indentedTextWriter.write(content);
|
|
47
|
+
}
|
|
48
|
+
_writeCommentNode(writeContext, designItem) {
|
|
49
|
+
writeContext.indentedTextWriter.write('<!--' + designItem.content + '-->');
|
|
50
|
+
}
|
|
51
|
+
_writeElementNode(writeContext, designItem) {
|
|
52
|
+
const currentElementDisplayType = getElementDisplaytype(designItem.element);
|
|
53
|
+
writeContext.lastElementDisplayType = currentElementDisplayType;
|
|
54
|
+
writeContext.indentedTextWriter.write('<' + designItem.name);
|
|
55
|
+
this.writeAttributes(writeContext, designItem);
|
|
56
|
+
this.writeStyles(writeContext, designItem);
|
|
57
|
+
writeContext.indentedTextWriter.write('>');
|
|
58
|
+
if (designItem.hasChildren) {
|
|
59
|
+
const children = designItem.children();
|
|
60
|
+
this._writeDesignItemList(currentElementDisplayType, writeContext, children);
|
|
61
|
+
}
|
|
62
|
+
else if (designItem.hasContent) {
|
|
63
|
+
writeContext.indentedTextWriter.write(DomConverter.normalizeContentValue(designItem.content));
|
|
64
|
+
}
|
|
65
|
+
if (!DomConverter.IsSelfClosingElement(designItem.name)) {
|
|
66
|
+
writeContext.indentedTextWriter.write('</' + designItem.name + '>');
|
|
67
|
+
if (currentElementDisplayType !== ElementDisplayType.none) {
|
|
68
|
+
writeContext.lastElementDisplayType = currentElementDisplayType;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
_writeDesignItemList(currentElementDisplayType, writeContext, children) {
|
|
73
|
+
for (const c of children) {
|
|
74
|
+
this._writeInternal(writeContext, c);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
_writeInternal(writeContext, designItem) {
|
|
78
|
+
const start = writeContext.indentedTextWriter.position;
|
|
79
|
+
if (designItem.nodeType === NodeType.TextNode)
|
|
80
|
+
this._writeTextNode(writeContext, designItem);
|
|
81
|
+
else if (designItem.nodeType === NodeType.Comment)
|
|
82
|
+
this._writeCommentNode(writeContext, designItem);
|
|
83
|
+
else if (designItem.nodeType === NodeType.Element)
|
|
84
|
+
this._writeElementNode(writeContext, designItem);
|
|
85
|
+
if (writeContext.designItemsAssignmentList) {
|
|
86
|
+
writeContext.designItemsAssignmentList.set(designItem, { start: start, length: writeContext.indentedTextWriter.position - start - 1 });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
write(indentedTextWriter, designItems, rootContainerKeepInline, options, designItemsAssignmentList) {
|
|
90
|
+
const context = { indentedTextWriter, options, lastElementDisplayType: null, containerDisplayType: ElementContainerType.block, designItemsAssignmentList };
|
|
91
|
+
this._writeDesignItemList(ElementDisplayType.inline, context, designItems);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { IDesignItem } from '../../item/IDesignItem';
|
|
2
|
+
import { IIntializationService } from './IIntializationService';
|
|
3
|
+
export declare class DefaultIntializationService implements IIntializationService {
|
|
4
|
+
init(designItem: IDesignItem): void;
|
|
5
|
+
initializeIframe(iframe: HTMLIFrameElement): void;
|
|
6
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export class DefaultIntializationService {
|
|
2
|
+
init(designItem) {
|
|
3
|
+
if (designItem.name == 'iframe') {
|
|
4
|
+
this.initializeIframe(designItem.element);
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
initializeIframe(iframe) {
|
|
8
|
+
iframe.contentDocument.body.style.pointerEvents = 'none';
|
|
9
|
+
function cloneIframeEvent(event) {
|
|
10
|
+
var clRect = iframe.getBoundingClientRect();
|
|
11
|
+
let data = { ...event };
|
|
12
|
+
data.clientX = event.clientX + clRect.left;
|
|
13
|
+
data.clientY = event.clientY + clRect.top;
|
|
14
|
+
var evt = new PointerEvent(event.type, data); //new CustomEvent('pointerdown', {bubbles: true, cancelable: false});
|
|
15
|
+
iframe.dispatchEvent(evt);
|
|
16
|
+
}
|
|
17
|
+
iframe.contentWindow.addEventListener('pointerdown', cloneIframeEvent);
|
|
18
|
+
iframe.contentWindow.addEventListener('pointermove', cloneIframeEvent);
|
|
19
|
+
iframe.contentWindow.addEventListener('pointerup', cloneIframeEvent);
|
|
20
|
+
}
|
|
21
|
+
;
|
|
22
|
+
}
|
|
@@ -13,7 +13,9 @@ export declare class WebcomponentManifestParserService extends UnkownElementProp
|
|
|
13
13
|
private _propertiesList;
|
|
14
14
|
private _resolveStored;
|
|
15
15
|
private _rejectStored;
|
|
16
|
-
|
|
16
|
+
private _importPrefix;
|
|
17
|
+
constructor(name: string, fileOrObject: string | object, importPrefix?: string);
|
|
18
|
+
private _parseManifest;
|
|
17
19
|
private manifestClassPropertyTypeToEditorPropertyType;
|
|
18
20
|
getElements(): Promise<IElementDefinition[]>;
|
|
19
21
|
isHandledElement(designItem: IDesignItem): boolean;
|
|
@@ -9,43 +9,55 @@ export class WebcomponentManifestParserService extends UnkownElementPropertiesSe
|
|
|
9
9
|
_propertiesList;
|
|
10
10
|
_resolveStored;
|
|
11
11
|
_rejectStored;
|
|
12
|
-
|
|
12
|
+
_importPrefix = '';
|
|
13
|
+
constructor(name, fileOrObject, importPrefix = '') {
|
|
13
14
|
super();
|
|
14
15
|
this._name = name;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
this.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
16
|
+
this._importPrefix = importPrefix;
|
|
17
|
+
if (typeof fileOrObject === 'string') {
|
|
18
|
+
this._importPrefix = this._importPrefix ?? fileOrObject.split('/').slice(0, -1).join('/');
|
|
19
|
+
import(fileOrObject, { assert: { type: 'json' } }).then(module => {
|
|
20
|
+
this._packageData = module.default;
|
|
21
|
+
this._parseManifest();
|
|
22
|
+
}).catch(err => {
|
|
23
|
+
if (this._rejectStored) {
|
|
24
|
+
this._rejectStored.forEach(x => x(err));
|
|
25
|
+
this._resolveStored = null;
|
|
26
|
+
this._rejectStored = null;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
this._packageData = fileOrObject;
|
|
32
|
+
this._parseManifest();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
_parseManifest() {
|
|
36
|
+
this._elementList = [];
|
|
37
|
+
this._propertiesList = {};
|
|
38
|
+
for (let m of this._packageData.modules) {
|
|
39
|
+
for (let e of m.exports) {
|
|
40
|
+
if (e.kind == 'custom-element-definition') {
|
|
41
|
+
this._elementList.push({ tag: e.name, import: this._importPrefix + '/' + e.declaration.module });
|
|
42
|
+
let properties = [];
|
|
43
|
+
let declaration = m.declarations.find(x => x.name == e.declaration.name);
|
|
44
|
+
for (let d of declaration.members) {
|
|
45
|
+
if (d.kind == 'field') {
|
|
46
|
+
let pType = PropertyType.property;
|
|
47
|
+
if (declaration.attributes)
|
|
29
48
|
pType = declaration.attributes.find(x => x.fieldName == d.name) != null ? PropertyType.propertyAndAttribute : PropertyType.property;
|
|
30
|
-
|
|
31
|
-
}
|
|
49
|
+
properties.push({ name: d.name, service: this, propertyType: pType, type: this.manifestClassPropertyTypeToEditorPropertyType(d.type?.text) });
|
|
32
50
|
}
|
|
33
|
-
this._propertiesList[e.name] = properties;
|
|
34
51
|
}
|
|
35
|
-
|
|
36
|
-
if (this._resolveStored) {
|
|
37
|
-
this._resolveStored.forEach(x => x(this._elementList));
|
|
38
|
-
this._resolveStored = null;
|
|
39
|
-
this._rejectStored = null;
|
|
52
|
+
this._propertiesList[e.name] = properties;
|
|
40
53
|
}
|
|
41
54
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
this._rejectStored.forEach(x => x(err));
|
|
55
|
+
if (this._resolveStored) {
|
|
56
|
+
this._resolveStored.forEach(x => x(this._elementList));
|
|
45
57
|
this._resolveStored = null;
|
|
46
58
|
this._rejectStored = null;
|
|
47
59
|
}
|
|
48
|
-
}
|
|
60
|
+
}
|
|
49
61
|
}
|
|
50
62
|
manifestClassPropertyTypeToEditorPropertyType(type) {
|
|
51
63
|
if (type) {
|
|
@@ -95,7 +95,7 @@ export class CodeViewAce extends BaseCustomWebComponentLazyAppend {
|
|
|
95
95
|
this._aceEditor = ace.edit(this._editor, {
|
|
96
96
|
theme: "ace/theme/chrome",
|
|
97
97
|
mode: "ace/mode/html",
|
|
98
|
-
value: "
|
|
98
|
+
value: "",
|
|
99
99
|
autoScrollEditorIntoView: true,
|
|
100
100
|
fontSize: "14px",
|
|
101
101
|
showPrintMargin: false,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { InstanceServiceContainer } from '../../services/InstanceServiceContainer';
|
|
2
2
|
import { ServiceContainer } from '../../services/ServiceContainer';
|
|
3
3
|
export interface IDemoView {
|
|
4
|
-
display(serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, code: string): any;
|
|
4
|
+
display(serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, code: string, style: string): any;
|
|
5
5
|
}
|
|
@@ -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): Promise<void>;
|
|
10
|
+
display(serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, code: string, style: string): Promise<void>;
|
|
11
11
|
}
|
|
@@ -29,9 +29,9 @@ export class DemoView extends BaseCustomWebComponentLazyAppend {
|
|
|
29
29
|
this._loading.textContent = '🛀 Hold on, loading...';
|
|
30
30
|
this.shadowRoot.appendChild(this._loading);
|
|
31
31
|
}
|
|
32
|
-
async display(serviceContainer, instanceServiceContainer, code) {
|
|
32
|
+
async display(serviceContainer, instanceServiceContainer, code, style) {
|
|
33
33
|
this._loading.hidden = false;
|
|
34
|
-
await serviceContainer.demoProviderService.provideDemo(this._placeholder, serviceContainer, instanceServiceContainer, code);
|
|
34
|
+
await serviceContainer.demoProviderService.provideDemo(this._placeholder, serviceContainer, instanceServiceContainer, code, style);
|
|
35
35
|
this._loading.hidden = true;
|
|
36
36
|
}
|
|
37
37
|
}
|
|
@@ -19,7 +19,6 @@ export class DomConverter {
|
|
|
19
19
|
tag === 'col' ||
|
|
20
20
|
tag === 'embed' ||
|
|
21
21
|
tag === 'hr' ||
|
|
22
|
-
tag === 'iframe' ||
|
|
23
22
|
tag === 'img' ||
|
|
24
23
|
tag === 'input' ||
|
|
25
24
|
tag === 'keygen' ||
|
|
@@ -33,12 +32,7 @@ export class DomConverter {
|
|
|
33
32
|
static ConvertToString(designItems, designItemsAssignmentList) {
|
|
34
33
|
let itw = new IndentedTextWriter();
|
|
35
34
|
let options = { beautifyOutput: true, writeDesignerProperties: true, compressCssToShorthandProperties: true };
|
|
36
|
-
|
|
37
|
-
d.serviceContainer.forSomeServicesTillResult('htmlWriterService', (s) => {
|
|
38
|
-
if (s.canWrite(d))
|
|
39
|
-
s.write(itw, d, options, designItemsAssignmentList);
|
|
40
|
-
});
|
|
41
|
-
}
|
|
35
|
+
designItems[0].serviceContainer.htmlWriterService.write(itw, designItems, true, options, designItemsAssignmentList);
|
|
42
36
|
return itw.getString();
|
|
43
37
|
}
|
|
44
38
|
}
|
|
@@ -2,6 +2,7 @@ import { IDesignItem } from "../../../item/IDesignItem";
|
|
|
2
2
|
import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
3
3
|
import { AbstractExtension } from "./AbstractExtension";
|
|
4
4
|
import "../../../helper/PathDataPolyfill";
|
|
5
|
+
import { IPoint } from "../../../../interfaces/IPoint";
|
|
5
6
|
import { IExtensionManager } from "./IExtensionManger";
|
|
6
7
|
import { PathData } from "../../../helper/PathDataPolyfill";
|
|
7
8
|
export declare class PathExtension extends AbstractExtension {
|
|
@@ -14,9 +15,10 @@ export declare class PathExtension extends AbstractExtension {
|
|
|
14
15
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
15
16
|
extend(): void;
|
|
16
17
|
pointerEvent(event: PointerEvent, circle: SVGCircleElement, p: PathData, index: number): void;
|
|
17
|
-
_drawPath(path: PathData[], index: number):
|
|
18
|
+
_drawPath(path: PathData[], index: number): string;
|
|
18
19
|
_drawPathCircle(x: number, y: number, p: PathData, index: number): void;
|
|
19
20
|
_drawPathLine(x1: number, y1: number, x2: number, y2: number): void;
|
|
21
|
+
_drawHelpLine(pStart: IPoint, pEnd: IPoint): void;
|
|
20
22
|
refresh(): void;
|
|
21
23
|
dispose(): void;
|
|
22
24
|
}
|
|
@@ -83,9 +83,27 @@ export class PathExtension extends AbstractExtension {
|
|
|
83
83
|
const cy = event.y - this._lastPos.y + this._circlePos.y;
|
|
84
84
|
const dx = cx - this._circlePos.x;
|
|
85
85
|
const dy = cy - this._circlePos.y;
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
if (event.shiftKey) {
|
|
87
|
+
if (Math.abs(dx) >= Math.abs(dy)) {
|
|
88
|
+
p.values[index] = this._originalPathPoint.x + dx;
|
|
89
|
+
circle.setAttribute("cx", (this._circlePos.x + dx).toString());
|
|
90
|
+
p.values[index + 1] = this._originalPathPoint.y;
|
|
91
|
+
circle.setAttribute("cy", (this._circlePos.y).toString());
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
p.values[index] = this._originalPathPoint.x;
|
|
95
|
+
circle.setAttribute("cx", (this._circlePos.x).toString());
|
|
96
|
+
p.values[index + 1] = this._originalPathPoint.y + dy;
|
|
97
|
+
circle.setAttribute("cy", (this._circlePos.y + dy).toString());
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
p.values[index] = this._originalPathPoint.x + dx;
|
|
102
|
+
p.values[index + 1] = this._originalPathPoint.y + dy;
|
|
103
|
+
circle.setAttribute("cx", (this._circlePos.x + dx).toString());
|
|
104
|
+
circle.setAttribute("cy", (this._circlePos.y + dy).toString());
|
|
105
|
+
}
|
|
106
|
+
this.extendedItem.element.setAttribute("d", this._drawPath(this._pathdata, index));
|
|
89
107
|
}
|
|
90
108
|
break;
|
|
91
109
|
case EventNames.PointerUp:
|
|
@@ -93,15 +111,42 @@ export class PathExtension extends AbstractExtension {
|
|
|
93
111
|
this._startPos = null;
|
|
94
112
|
this._circlePos = null;
|
|
95
113
|
this._lastPos = null;
|
|
114
|
+
this.extendedItem.setAttribute('d', this._drawPath(this._pathdata, index));
|
|
96
115
|
break;
|
|
97
116
|
}
|
|
98
117
|
}
|
|
99
118
|
_drawPath(path, index) {
|
|
100
119
|
let pathD = "";
|
|
101
120
|
for (let p of path) {
|
|
102
|
-
|
|
121
|
+
switch (p.type) {
|
|
122
|
+
case 'M':
|
|
123
|
+
pathD += p.type + p.values[0] + " " + p.values[1];
|
|
124
|
+
break;
|
|
125
|
+
case 'L':
|
|
126
|
+
pathD += p.type + p.values[0] + " " + p.values[1];
|
|
127
|
+
break;
|
|
128
|
+
case 'H':
|
|
129
|
+
break;
|
|
130
|
+
case 'V':
|
|
131
|
+
break;
|
|
132
|
+
case 'Z':
|
|
133
|
+
break;
|
|
134
|
+
case 'C':
|
|
135
|
+
case 'c':
|
|
136
|
+
pathD += p.type + p.values[0] + " " + p.values[1] + " " + p.values[2] + " " + p.values[3] + " " + p.values[4] + " " + p.values[5];
|
|
137
|
+
break;
|
|
138
|
+
case 'S':
|
|
139
|
+
break;
|
|
140
|
+
case 'Q':
|
|
141
|
+
break;
|
|
142
|
+
case 'T':
|
|
143
|
+
break;
|
|
144
|
+
case 'A':
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
103
147
|
}
|
|
104
|
-
|
|
148
|
+
return pathD;
|
|
149
|
+
console.log(pathD);
|
|
105
150
|
}
|
|
106
151
|
_drawPathCircle(x, y, p, index) {
|
|
107
152
|
let circle = this._drawCircle(this._parentRect.x - this.designerCanvas.containerBoundingRect.x + x, this._parentRect.y - this.designerCanvas.containerBoundingRect.y + y, 3, 'svg-path');
|
|
@@ -112,6 +157,15 @@ export class PathExtension extends AbstractExtension {
|
|
|
112
157
|
_drawPathLine(x1, y1, x2, y2) {
|
|
113
158
|
this._drawLine(this._parentRect.x - this.designerCanvas.containerBoundingRect.x + x1, this._parentRect.y - this.designerCanvas.containerBoundingRect.y + y1, this._parentRect.x - this.designerCanvas.containerBoundingRect.x + x2, this._parentRect.y - this.designerCanvas.containerBoundingRect.y + y2, 'svg-path-line');
|
|
114
159
|
}
|
|
160
|
+
_drawHelpLine(pStart, pEnd) {
|
|
161
|
+
let line;
|
|
162
|
+
line.setAttribute("stroke", "yellow");
|
|
163
|
+
line.setAttribute("stroke-width", "2");
|
|
164
|
+
line.setAttribute("x1", pStart.x.toString());
|
|
165
|
+
line.setAttribute("y1", pStart.y.toString());
|
|
166
|
+
line.setAttribute("x2", pEnd.x.toString());
|
|
167
|
+
line.setAttribute("y2", pEnd.y.toString());
|
|
168
|
+
}
|
|
115
169
|
refresh() {
|
|
116
170
|
this._removeAllOverlays();
|
|
117
171
|
this.extend();
|
|
@@ -67,8 +67,7 @@ export class OverlayLayerView extends BaseCustomWebComponentConstructorAppend {
|
|
|
67
67
|
}
|
|
68
68
|
removeOverlay(element) {
|
|
69
69
|
try {
|
|
70
|
-
|
|
71
|
-
element.parentElement.removeChild(element);
|
|
70
|
+
element?.parentElement?.removeChild(element);
|
|
72
71
|
}
|
|
73
72
|
catch (err) {
|
|
74
73
|
console.error(err);
|
|
@@ -80,6 +80,7 @@ export class DrawEllipsisTool {
|
|
|
80
80
|
svg.style.position = 'absolute';
|
|
81
81
|
svg.style.width = (rect.width + 2 * offset) + 'px';
|
|
82
82
|
svg.style.height = (rect.height + 2 * offset) + 'px';
|
|
83
|
+
svg.style.overflow = 'visible';
|
|
83
84
|
this._path = null;
|
|
84
85
|
const di = DesignItem.createDesignItemFromInstance(svg, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
|
|
85
86
|
designerCanvas.instanceServiceContainer.undoService.execute(new InsertAction(designerCanvas.rootDesignItem, designerCanvas.rootDesignItem.childCount, di));
|
|
@@ -65,6 +65,7 @@ export class DrawLineTool {
|
|
|
65
65
|
svg.style.position = 'absolute';
|
|
66
66
|
svg.style.width = (rect.width + 2 * offset) + 'px';
|
|
67
67
|
svg.style.height = (rect.height + 2 * offset) + 'px';
|
|
68
|
+
svg.style.overflow = 'visible';
|
|
68
69
|
this._path = null;
|
|
69
70
|
const di = DesignItem.createDesignItemFromInstance(svg, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
|
|
70
71
|
designerCanvas.instanceServiceContainer.undoService.execute(new InsertAction(designerCanvas.rootDesignItem, designerCanvas.rootDesignItem.childCount, di));
|
|
@@ -12,8 +12,7 @@ export class DrawPathTool {
|
|
|
12
12
|
_dragMode = false;
|
|
13
13
|
_pointerMoved = false;
|
|
14
14
|
_eventStarted = false;
|
|
15
|
-
_lastPoint
|
|
16
|
-
_savedPoint = { x: 0, y: 0 };
|
|
15
|
+
_lastPoint;
|
|
17
16
|
_startPoint = { x: 0, y: 0 };
|
|
18
17
|
constructor() {
|
|
19
18
|
}
|
|
@@ -38,10 +37,12 @@ export class DrawPathTool {
|
|
|
38
37
|
designerCanvas.overlayLayer.addOverlay(this._path, OverlayLayer.Foregorund);
|
|
39
38
|
this._startPoint = currentPoint;
|
|
40
39
|
}
|
|
41
|
-
if (this._lastPoint.x === currentPoint.x && this._lastPoint.y === currentPoint.y && !this._samePoint) {
|
|
40
|
+
if (this._lastPoint != null && this._lastPoint.x === currentPoint.x && this._lastPoint.y === currentPoint.y && !this._samePoint) {
|
|
42
41
|
this._samePoint = true;
|
|
43
42
|
}
|
|
44
|
-
this._lastPoint
|
|
43
|
+
if (this._lastPoint == null) {
|
|
44
|
+
this._lastPoint = currentPoint;
|
|
45
|
+
}
|
|
45
46
|
break;
|
|
46
47
|
case EventNames.PointerMove:
|
|
47
48
|
if (this._eventStarted) {
|
|
@@ -57,8 +58,9 @@ export class DrawPathTool {
|
|
|
57
58
|
else { // shows line preview
|
|
58
59
|
if (this._path) {
|
|
59
60
|
let straightLine = currentPoint;
|
|
60
|
-
if (event.shiftKey)
|
|
61
|
-
straightLine = straightenLine(this.
|
|
61
|
+
if (event.shiftKey) {
|
|
62
|
+
straightLine = straightenLine(this._lastPoint, currentPoint);
|
|
63
|
+
}
|
|
62
64
|
this._path.setAttribute("d", this._pathD + "L" + straightLine.x + " " + straightLine.y);
|
|
63
65
|
}
|
|
64
66
|
}
|
|
@@ -71,15 +73,16 @@ export class DrawPathTool {
|
|
|
71
73
|
if (this._p2pMode && !this._samePoint && this._startPoint.x != currentPoint.x && this._startPoint.y != currentPoint.y) {
|
|
72
74
|
if (this._path) {
|
|
73
75
|
if (event.shiftKey) {
|
|
74
|
-
let straightLine = straightenLine(this.
|
|
76
|
+
let straightLine = straightenLine(this._lastPoint, currentPoint);
|
|
75
77
|
this._pathD += "L" + straightLine.x + " " + straightLine.y;
|
|
76
78
|
this._path.setAttribute("d", this._pathD);
|
|
79
|
+
this._lastPoint = straightLine;
|
|
77
80
|
}
|
|
78
81
|
else {
|
|
79
82
|
this._pathD += "L" + currentPoint.x + " " + currentPoint.y;
|
|
80
83
|
this._path.setAttribute("d", this._pathD);
|
|
84
|
+
this._lastPoint = currentPoint;
|
|
81
85
|
}
|
|
82
|
-
this._savedPoint = currentPoint;
|
|
83
86
|
}
|
|
84
87
|
}
|
|
85
88
|
if (this._samePoint && this._p2pMode || this._dragMode && !this._p2pMode) {
|
|
@@ -101,6 +104,7 @@ export class DrawPathTool {
|
|
|
101
104
|
svg.style.position = 'absolute';
|
|
102
105
|
svg.style.width = (rect.width + 2 * offset) + 'px';
|
|
103
106
|
svg.style.height = (rect.height + 2 * offset) + 'px';
|
|
107
|
+
svg.style.overflow = 'visible';
|
|
104
108
|
//designerView.rootDesignItem.element.appendChild(svg);
|
|
105
109
|
this._path = null;
|
|
106
110
|
this._pathD = null;
|
|
@@ -95,6 +95,7 @@ export class DrawRectTool {
|
|
|
95
95
|
svg.style.position = 'absolute';
|
|
96
96
|
svg.style.width = (rect.width + 2 * offset) + 'px';
|
|
97
97
|
svg.style.height = (rect.height + 2 * offset) + 'px';
|
|
98
|
+
svg.style.overflow = 'visible';
|
|
98
99
|
this._path = null;
|
|
99
100
|
const di = DesignItem.createDesignItemFromInstance(svg, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
|
|
100
101
|
designerCanvas.instanceServiceContainer.undoService.execute(new InsertAction(designerCanvas.rootDesignItem, designerCanvas.rootDesignItem.childCount, di));
|
package/dist/index.d.ts
CHANGED
|
@@ -45,7 +45,9 @@ export * from "./elements/services/elementsService/JsonFileElementsService.js";
|
|
|
45
45
|
export * from "./elements/services/elementsService/PreDefinedElementsService.js";
|
|
46
46
|
export type { IHtmlWriterService } from "./elements/services/htmlWriterService/IHtmlWriterService.js";
|
|
47
47
|
export type { IHtmlWriterOptions } from "./elements/services/htmlWriterService/IHtmlWriterOptions.js";
|
|
48
|
+
export * from "./elements/services/htmlWriterService/FormatingHtmlWriterService.js";
|
|
48
49
|
export * from "./elements/services/htmlWriterService/HtmlWriterService.js";
|
|
50
|
+
export * from "./elements/services/htmlWriterService/LitTsElementWriterService.js";
|
|
49
51
|
export * from "./elements/services/htmlParserService/DefaultHtmlParserService.js";
|
|
50
52
|
export * from "./elements/services/htmlParserService/NodeHtmlParserService.js";
|
|
51
53
|
export type { IHtmlParserService } from "./elements/services/htmlParserService/IHtmlParserService.js";
|
|
@@ -177,3 +179,4 @@ export type { IPoint } from "./interfaces/IPoint.js";
|
|
|
177
179
|
export type { IRect } from "./interfaces/IRect.js";
|
|
178
180
|
export type { ISize } from "./interfaces/ISize.js";
|
|
179
181
|
export type { ICommandHandler } from "./interfaces/ICommandHandler.js";
|
|
182
|
+
export * from './Constants.js';
|
package/dist/index.js
CHANGED
|
@@ -26,7 +26,9 @@ export * from "./elements/services/demoProviderService/DemoProviderService.js";
|
|
|
26
26
|
export * from "./elements/services/dragDropService/DragDropService.js";
|
|
27
27
|
export * from "./elements/services/elementsService/JsonFileElementsService.js";
|
|
28
28
|
export * from "./elements/services/elementsService/PreDefinedElementsService.js";
|
|
29
|
+
export * from "./elements/services/htmlWriterService/FormatingHtmlWriterService.js";
|
|
29
30
|
export * from "./elements/services/htmlWriterService/HtmlWriterService.js";
|
|
31
|
+
export * from "./elements/services/htmlWriterService/LitTsElementWriterService.js";
|
|
30
32
|
export * from "./elements/services/htmlParserService/DefaultHtmlParserService.js";
|
|
31
33
|
export * from "./elements/services/htmlParserService/NodeHtmlParserService.js";
|
|
32
34
|
export * from "./elements/services/instanceService/DefaultInstanceService.js";
|
|
@@ -126,3 +128,4 @@ export * from "./elements/widgets/codeView/code-view-code-mirror.js";
|
|
|
126
128
|
export * from "./elements/documentContainer.js";
|
|
127
129
|
export * from "./enums/EventNames.js";
|
|
128
130
|
export * from "./enums/PointerActionType.js";
|
|
131
|
+
export * from './Constants.js';
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"description": "A UI designer for Polymer apps",
|
|
3
3
|
"name": "@node-projects/web-component-designer",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.80",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"author": "",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"prepublishOnly": "npm run build"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@node-projects/base-custom-webcomponent": "^0.4.
|
|
16
|
+
"@node-projects/base-custom-webcomponent": "^0.4.1",
|
|
17
17
|
"construct-style-sheets-polyfill": "^3.0.5"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
"ace-builds": "^1.4.13",
|
|
26
26
|
"codemirror": "^5.65.0",
|
|
27
27
|
"custom-elements-manifest": "^1.0.0",
|
|
28
|
-
"esprima-next": "^5.
|
|
28
|
+
"esprima-next": "^5.8.1",
|
|
29
29
|
"html2canvas": "*",
|
|
30
|
-
"jest": "^27.4.
|
|
30
|
+
"jest": "^27.4.7",
|
|
31
31
|
"jquery": "^3.6.0",
|
|
32
32
|
"jquery.fancytree": "^2.38.0",
|
|
33
33
|
"monaco-editor": "^0.31.1",
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { IDesignItem } from "../../..";
|
|
2
|
-
import { BindingTarget } from "../../item/BindingTarget";
|
|
3
|
-
import { IElementDefinition } from "../elementsService/IElementDefinition";
|
|
4
|
-
import { IElementsService } from "../elementsService/IElementsService";
|
|
5
|
-
import { IPropertiesService } from "../propertiesService/IPropertiesService";
|
|
6
|
-
import { IProperty } from "../propertiesService/IProperty";
|
|
7
|
-
import { ValueType } from "../propertiesService/ValueType";
|
|
8
|
-
export declare class WebcomponentManifestParserService implements IElementsService, IPropertiesService {
|
|
9
|
-
private _name;
|
|
10
|
-
get name(): string;
|
|
11
|
-
private _packageData;
|
|
12
|
-
private _elementList;
|
|
13
|
-
private _resolveStored;
|
|
14
|
-
private _rejectStored;
|
|
15
|
-
constructor(name: string, file: string);
|
|
16
|
-
getElements(): Promise<IElementDefinition[]>;
|
|
17
|
-
isHandledElement(designItem: IDesignItem): boolean;
|
|
18
|
-
getProperties(designItem: IDesignItem): IProperty[];
|
|
19
|
-
getProperty(designItem: IDesignItem, name: string): IProperty;
|
|
20
|
-
getPropertyTarget(designItem: IDesignItem, property: IProperty): BindingTarget;
|
|
21
|
-
setValue(designItems: IDesignItem[], property: IProperty, value: any): void;
|
|
22
|
-
clearValue(designItems: IDesignItem[], property: IProperty): void;
|
|
23
|
-
isSet(designItems: IDesignItem[], property: IProperty): ValueType;
|
|
24
|
-
getValue(designItems: IDesignItem[], property: IProperty): void;
|
|
25
|
-
getUnsetValue(designItems: IDesignItem[], property: IProperty): void;
|
|
26
|
-
}
|