@node-projects/web-component-designer 0.0.80 → 0.0.84

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/elements/helper/PathDataPolyfill.d.ts +11 -10
  2. package/dist/elements/helper/PathDataPolyfill.js +35 -0
  3. package/dist/elements/services/DefaultServiceBootstrap.js +12 -5
  4. package/dist/elements/services/htmlWriterService/AbstractHtmlWriterService.d.ts +10 -0
  5. package/dist/elements/services/htmlWriterService/AbstractHtmlWriterService.js +62 -0
  6. package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService.d.ts +5 -5
  7. package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService.js +4 -4
  8. package/dist/elements/services/htmlWriterService/HtmlWriterService copy.d.ts +12 -0
  9. package/dist/elements/services/htmlWriterService/HtmlWriterService copy.js +118 -0
  10. package/dist/elements/services/htmlWriterService/HtmlWriterService.d.ts +6 -6
  11. package/dist/elements/services/htmlWriterService/HtmlWriterService.js +6 -33
  12. package/dist/elements/services/htmlWriterService/IHtmlWriterOptions.d.ts +2 -0
  13. package/dist/elements/services/htmlWriterService/IHtmlWriterOptions.js +5 -3
  14. package/dist/elements/services/manifestParsers/WebcomponentManifestParserService.js +3 -1
  15. package/dist/elements/widgets/codeView/code-view-code-mirror.js +1 -1
  16. package/dist/elements/widgets/designerView/DomConverter.d.ts +3 -3
  17. package/dist/elements/widgets/designerView/DomConverter.js +7 -4
  18. package/dist/elements/widgets/designerView/designerCanvas.d.ts +2 -0
  19. package/dist/elements/widgets/designerView/designerCanvas.js +20 -8
  20. package/dist/elements/widgets/designerView/designerView.js +25 -7
  21. package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtension.d.ts +14 -0
  22. package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtension.js +38 -0
  23. package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtensionProvider.d.ts +10 -0
  24. package/dist/elements/widgets/designerView/extensions/ElementDragTitleExtensionProvider.js +13 -0
  25. package/dist/elements/widgets/designerView/extensions/ExtensionManager.d.ts +5 -4
  26. package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +41 -15
  27. package/dist/elements/widgets/designerView/extensions/IExtensionManger.d.ts +2 -2
  28. package/dist/elements/widgets/designerView/extensions/IframeExtension.d.ts +11 -0
  29. package/dist/elements/widgets/designerView/extensions/IframeExtension.js +46 -0
  30. package/dist/elements/widgets/designerView/extensions/IframeExtensionProvider.d.ts +9 -0
  31. package/dist/elements/widgets/designerView/extensions/IframeExtensionProvider.js +9 -0
  32. package/dist/elements/widgets/designerView/extensions/InvisibleDivExtension.d.ts +1 -1
  33. package/dist/elements/widgets/designerView/extensions/InvisibleDivExtension.js +2 -2
  34. package/dist/elements/widgets/designerView/extensions/InvisibleDivExtensionProvider.d.ts +2 -2
  35. package/dist/elements/widgets/designerView/extensions/InvisibleDivExtensionProvider.js +3 -3
  36. package/dist/elements/widgets/designerView/extensions/PathExtension.d.ts +1 -2
  37. package/dist/elements/widgets/designerView/extensions/PathExtension.js +117 -44
  38. package/dist/elements/widgets/designerView/extensions/PrimarySelectionDefaultExtension copy.d.ts +13 -0
  39. package/dist/elements/widgets/designerView/extensions/PrimarySelectionDefaultExtension copy.js +21 -0
  40. package/dist/elements/widgets/designerView/extensions/PrimarySelectionDefaultExtensionProvider copy.d.ts +10 -0
  41. package/dist/elements/widgets/designerView/extensions/PrimarySelectionDefaultExtensionProvider copy.js +13 -0
  42. package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +11 -3
  43. package/dist/elements/widgets/designerView/extensions/ResizeExtensionProvider.js +2 -1
  44. package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.js +13 -12
  45. package/dist/elements/widgets/designerView/extensions/contextMenu/CopyPasteContextMenu.js +0 -1
  46. package/dist/elements/widgets/designerView/extensions/contextMenu/PathContextMenu.d.ts +8 -0
  47. package/dist/elements/widgets/designerView/extensions/contextMenu/PathContextMenu.js +31 -0
  48. package/dist/elements/widgets/designerView/extensions/contextMenu/RectContextMenu.d.ts +8 -0
  49. package/dist/elements/widgets/designerView/extensions/contextMenu/RectContextMenu.js +34 -0
  50. package/dist/elements/widgets/designerView/tools/DrawElementTool.d.ts +1 -0
  51. package/dist/elements/widgets/designerView/tools/DrawElementTool.js +1 -0
  52. package/dist/elements/widgets/designerView/tools/DrawEllipsisTool.d.ts +1 -0
  53. package/dist/elements/widgets/designerView/tools/DrawEllipsisTool.js +1 -0
  54. package/dist/elements/widgets/designerView/tools/DrawLineTool.d.ts +1 -0
  55. package/dist/elements/widgets/designerView/tools/DrawLineTool.js +1 -0
  56. package/dist/elements/widgets/designerView/tools/DrawPathTool.d.ts +1 -0
  57. package/dist/elements/widgets/designerView/tools/DrawPathTool.js +6 -1
  58. package/dist/elements/widgets/designerView/tools/DrawRectTool.d.ts +1 -0
  59. package/dist/elements/widgets/designerView/tools/DrawRectTool.js +1 -0
  60. package/dist/elements/widgets/designerView/tools/ITool.d.ts +1 -0
  61. package/dist/elements/widgets/designerView/tools/MagicWandSelectorTool.d.ts +1 -0
  62. package/dist/elements/widgets/designerView/tools/MagicWandSelectorTool.js +1 -0
  63. package/dist/elements/widgets/designerView/tools/PanTool.d.ts +1 -0
  64. package/dist/elements/widgets/designerView/tools/PanTool.js +1 -0
  65. package/dist/elements/widgets/designerView/tools/PickColorTool.d.ts +1 -0
  66. package/dist/elements/widgets/designerView/tools/PickColorTool.js +1 -0
  67. package/dist/elements/widgets/designerView/tools/PointerTool.d.ts +1 -0
  68. package/dist/elements/widgets/designerView/tools/PointerTool.js +1 -0
  69. package/dist/elements/widgets/designerView/tools/RectangleSelectorTool.d.ts +1 -0
  70. package/dist/elements/widgets/designerView/tools/RectangleSelectorTool.js +1 -0
  71. package/dist/elements/widgets/designerView/tools/TextTool.d.ts +1 -0
  72. package/dist/elements/widgets/designerView/tools/TextTool.js +1 -0
  73. package/dist/elements/widgets/designerView/tools/ZoomTool.d.ts +1 -0
  74. package/dist/elements/widgets/designerView/tools/ZoomTool.js +1 -0
  75. package/dist/elements/widgets/treeView/treeViewExtended.js +1 -0
  76. package/dist/index.d.ts +5 -2
  77. package/dist/index.js +5 -2
  78. package/package.json +9 -9
@@ -1,42 +1,42 @@
1
1
  import { IPoint } from "../../interfaces/IPoint.js";
2
2
  export {};
3
- declare type PathDataM = {
3
+ export declare type PathDataM = {
4
4
  type: 'M' | 'm';
5
5
  values: [x: number, y: number];
6
6
  };
7
- declare type PathDataL = {
7
+ export declare type PathDataL = {
8
8
  type: 'L' | 'l';
9
9
  values: [x: number, y: number];
10
10
  };
11
- declare type PathDataT = {
11
+ export declare type PathDataT = {
12
12
  type: 'T' | 't';
13
13
  values: [x: number, y: number];
14
14
  };
15
- declare type PathDataH = {
15
+ export declare type PathDataH = {
16
16
  type: 'H' | 'h';
17
17
  values: [x: number];
18
18
  };
19
- declare type PathDataV = {
19
+ export declare type PathDataV = {
20
20
  type: 'V' | 'v';
21
21
  values: [y: number];
22
22
  };
23
- declare type PathDataZ = {
23
+ export declare type PathDataZ = {
24
24
  type: 'Z' | 'z';
25
25
  values?: [];
26
26
  };
27
- declare type PathDataC = {
27
+ export declare type PathDataC = {
28
28
  type: 'C' | 'c';
29
29
  values: [x1: number, y1: number, x2: number, y2: number, x: number, y: number];
30
30
  };
31
- declare type PathDataS = {
31
+ export declare type PathDataS = {
32
32
  type: 'S' | 's';
33
33
  values: [x2: number, y2: number, x: number, y: number];
34
34
  };
35
- declare type PathDataQ = {
35
+ export declare type PathDataQ = {
36
36
  type: 'Q' | 'q';
37
37
  values: [x1: number, y1: number, x: number, y: number];
38
38
  };
39
- declare type PathDataA = {
39
+ export declare type PathDataA = {
40
40
  type: 'A' | 'a';
41
41
  values: [rx: number, ry: number, ang: number, flag1: 0 | 1, flag2: 0 | 1, x: number, y: number];
42
42
  };
@@ -47,6 +47,7 @@ export declare function straightenLine(p1: IPoint, p2: IPoint): IPoint;
47
47
  export declare function calculateNormLegth(p1: IPoint, p2: IPoint): number;
48
48
  export declare function calculateAlpha(p1: IPoint, p2: IPoint): number;
49
49
  export declare function moveSVGPath(path: SVGPathElement, xFactor: number, yFactor: number): string;
50
+ export declare function createPathD(path: PathData[]): string;
50
51
  declare global {
51
52
  interface SVGGraphicsElement {
52
53
  getPathData(options?: {
@@ -941,3 +941,38 @@ export function moveSVGPath(path, xFactor, yFactor) {
941
941
  }
942
942
  return newPathData;
943
943
  }
944
+ export function createPathD(path) {
945
+ let pathD = "";
946
+ for (let p of path) {
947
+ switch (p.type) {
948
+ case 'M':
949
+ pathD += p.type + p.values[0] + " " + p.values[1];
950
+ break;
951
+ case 'L':
952
+ pathD += p.type + p.values[0] + " " + p.values[1];
953
+ break;
954
+ case 'H':
955
+ break;
956
+ case 'V':
957
+ break;
958
+ case 'Z':
959
+ pathD += p.type;
960
+ break;
961
+ case 'C':
962
+ case 'c':
963
+ pathD += p.type + p.values[0] + " " + p.values[1] + " " + p.values[2] + " " + p.values[3] + " " + p.values[4] + " " + p.values[5];
964
+ break;
965
+ case 'S':
966
+ break;
967
+ case 'Q':
968
+ case 'q':
969
+ pathD += p.type + p.values[0] + " " + p.values[1] + " " + p.values[2] + " " + p.values[3];
970
+ break;
971
+ case 'T':
972
+ break;
973
+ case 'A':
974
+ break;
975
+ }
976
+ }
977
+ return pathD;
978
+ }
@@ -9,7 +9,7 @@ import { DefaultPlacementService } from './placementService/DefaultPlacementServ
9
9
  import { DefaultHtmlParserService } from './htmlParserService/DefaultHtmlParserService.js';
10
10
  import { Lit2PropertiesService } from './propertiesService/services/Lit2PropertiesService.js';
11
11
  import { ExtensionType } from '../widgets/designerView/extensions/ExtensionType.js';
12
- import { PrimarySelectionDefaultExtensionProvider } from '../widgets/designerView/extensions/PrimarySelectionDefaultExtensionProvider.js';
12
+ import { ElementDragTitleExtensionProvider } from '../widgets/designerView/extensions/ElementDragTitleExtensionProvider.js';
13
13
  import { GridExtensionProvider } from '../widgets/designerView/extensions/GridExtensionProvider.js';
14
14
  import { TransformOriginExtensionProvider } from '../widgets/designerView/extensions/TransformOriginExtensionProvider.js';
15
15
  import { CanvasExtensionProvider } from '../widgets/designerView/extensions/CanvasExtensionProvider.js';
@@ -52,6 +52,9 @@ import { DrawRectTool } from '../widgets/designerView/tools/DrawRectTool.js';
52
52
  import { DrawEllipsisTool } from '../widgets/designerView/tools/DrawEllipsisTool.js';
53
53
  import { DrawLineTool } from '../widgets/designerView/tools/DrawLineTool.js';
54
54
  import { HtmlWriterService } from './htmlWriterService/HtmlWriterService.js';
55
+ import { RectContextMenu } from '../widgets/designerView/extensions/contextMenu/RectContextMenu.js';
56
+ import { PathContextMenu } from '../widgets/designerView/extensions/contextMenu/PathContextMenu.js';
57
+ import { IframeExtensionProvider } from '../widgets/designerView/extensions/IframeExtensionProvider.js';
55
58
  export function createDefaultServiceContainer() {
56
59
  let serviceContainer = new ServiceContainer();
57
60
  serviceContainer.register("propertyService", new PolymerPropertiesService());
@@ -74,11 +77,13 @@ export function createDefaultServiceContainer() {
74
77
  serviceContainer.register("modelCommandService", new DefaultModelCommandService());
75
78
  serviceContainer.register("demoProviderService", new DemoProviderService());
76
79
  serviceContainer.designerExtensions.set(ExtensionType.Permanent, [
77
- new ResizeExtensionProvider(false),
78
- new InvisibleDivExtensionProvider()
80
+ // new ResizeExtensionProvider(false),
81
+ new InvisibleDivExtensionProvider(),
82
+ new IframeExtensionProvider(),
83
+ // new ElementDragTitleExtensionProvider(),
79
84
  ]);
80
85
  serviceContainer.designerExtensions.set(ExtensionType.PrimarySelection, [
81
- new PrimarySelectionDefaultExtensionProvider(),
86
+ new ElementDragTitleExtensionProvider(),
82
87
  new GridExtensionProvider(),
83
88
  new TransformOriginExtensionProvider(),
84
89
  new CanvasExtensionProvider(),
@@ -125,7 +130,9 @@ export function createDefaultServiceContainer() {
125
130
  new CopyPasteContextMenu(),
126
131
  new ZMoveContextMenu(),
127
132
  new MultipleItemsSelectedContextMenu(),
128
- new ItemsBelowContextMenu()
133
+ new PathContextMenu(),
134
+ new RectContextMenu(),
135
+ new ItemsBelowContextMenu(),
129
136
  ];
130
137
  return serviceContainer;
131
138
  }
@@ -0,0 +1,10 @@
1
+ import { IDesignItem } from '../../item/IDesignItem.js';
2
+ import { IHtmlWriterService } from './IHtmlWriterService.js';
3
+ import { IHtmlWriterOptions } from './IHtmlWriterOptions.js';
4
+ import { IndentedTextWriter } from '../../helper/IndentedTextWriter.js';
5
+ import { IStringPosition } from './IStringPosition.js';
6
+ export declare abstract class AbstractHtmlWriterService implements IHtmlWriterService {
7
+ abstract write(indentedTextWriter: IndentedTextWriter, designItems: IDesignItem[], rootContainerKeepInline: boolean, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): any;
8
+ writeAttributes(indentedTextWriter: IndentedTextWriter, designItem: IDesignItem, options: IHtmlWriterOptions): void;
9
+ writeStyles(indentedTextWriter: IndentedTextWriter, designItem: IDesignItem, options: IHtmlWriterOptions): void;
10
+ }
@@ -0,0 +1,62 @@
1
+ import { DomConverter } from '../../widgets/designerView/DomConverter.js';
2
+ import { CssCombiner } from '../../helper/CssCombiner.js';
3
+ import { PropertiesHelper } from '../propertiesService/services/PropertiesHelper.js';
4
+ export class AbstractHtmlWriterService {
5
+ writeAttributes(indentedTextWriter, designItem, options) {
6
+ if (designItem.hasAttributes) {
7
+ for (const a of designItem.attributes) {
8
+ indentedTextWriter.write(' ');
9
+ if (typeof a[1] === 'string') {
10
+ if (a[1] === "")
11
+ indentedTextWriter.write(a[0]);
12
+ else {
13
+ if (options.parseJsonInAttributes &&
14
+ ((a[1].startsWith('{') && !a[1].startsWith('{{') && a[1].endsWith('}')) ||
15
+ (a[1].startsWith('[') && !a[1].startsWith('[[') && a[1].endsWith(']')))) {
16
+ try {
17
+ let j = JSON.parse(a[1]);
18
+ let txt;
19
+ if (options.jsonWriteMode == 'beauty')
20
+ txt = JSON.stringify(j, null, 2);
21
+ else
22
+ txt = JSON.stringify(j);
23
+ indentedTextWriter.write(a[0] + '=\'' + DomConverter.normalizeAttributeValue(txt, true) + '\'');
24
+ continue;
25
+ }
26
+ catch { }
27
+ }
28
+ const content = DomConverter.normalizeAttributeValue(a[1]);
29
+ if (content.indexOf('&quot;')) {
30
+ const contentSingle = DomConverter.normalizeAttributeValue(a[1], true);
31
+ if (contentSingle.length < content.length)
32
+ indentedTextWriter.write(a[0] + '=\'' + contentSingle + '\'');
33
+ else
34
+ indentedTextWriter.write(a[0] + '="' + content + '"');
35
+ }
36
+ else
37
+ indentedTextWriter.write(a[0] + '="' + content + '"');
38
+ }
39
+ }
40
+ else if (!a[1])
41
+ indentedTextWriter.write(a[0]);
42
+ else {
43
+ //TODO: writing of bindings, really ???
44
+ }
45
+ }
46
+ }
47
+ }
48
+ writeStyles(indentedTextWriter, designItem, options) {
49
+ if (designItem.hasStyles) {
50
+ indentedTextWriter.write(' style="');
51
+ let styles = designItem.styles;
52
+ if (options.compressCssToShorthandProperties)
53
+ styles = CssCombiner.combine(styles);
54
+ for (const s of styles) {
55
+ if (s[0]) {
56
+ indentedTextWriter.write(PropertiesHelper.camelToDashCase(s[0]) + ':' + DomConverter.normalizeAttributeValue(s[1]) + ';');
57
+ }
58
+ }
59
+ indentedTextWriter.write('"');
60
+ }
61
+ }
62
+ }
@@ -1,8 +1,8 @@
1
- import { IDesignItem } from '../../item/IDesignItem';
2
- import { IHtmlWriterService } from './IHtmlWriterService';
3
- import { IHtmlWriterOptions } from './IHtmlWriterOptions';
4
- import { IndentedTextWriter } from '../../helper/IndentedTextWriter';
5
- import { IStringPosition } from './IStringPosition';
1
+ import { IDesignItem } from '../../item/IDesignItem.js';
2
+ import { IHtmlWriterService } from './IHtmlWriterService.js';
3
+ import { IHtmlWriterOptions } from './IHtmlWriterOptions.js';
4
+ import { IndentedTextWriter } from '../../helper/IndentedTextWriter.js';
5
+ import { IStringPosition } from './IStringPosition.js';
6
6
  declare enum ElementContainerType {
7
7
  block = 0,
8
8
  complex = 1
@@ -1,7 +1,7 @@
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';
1
+ import { DomConverter } from '../../widgets/designerView/DomConverter.js';
2
+ import { CssCombiner } from '../../helper/CssCombiner.js';
3
+ import { NodeType } from '../../item/NodeType.js';
4
+ import { PropertiesHelper } from '../propertiesService/services/PropertiesHelper.js';
5
5
  import { ElementDisplayType, getElementDisplaytype } from '../../helper/ElementHelper.js';
6
6
  var ElementContainerType;
7
7
  (function (ElementContainerType) {
@@ -0,0 +1,12 @@
1
+ import { IDesignItem } from '../../item/IDesignItem';
2
+ import { IHtmlWriterService } from './IHtmlWriterService';
3
+ import { IHtmlWriterOptions } from './IHtmlWriterOptions';
4
+ import { IndentedTextWriter } from '../../helper/IndentedTextWriter';
5
+ import { IStringPosition } from './IStringPosition';
6
+ export declare class HtmlWriterService implements IHtmlWriterService {
7
+ private _conditionalyWriteIndent;
8
+ private _conditionalyWriteNewline;
9
+ write(indentedTextWriter: IndentedTextWriter, designItems: IDesignItem[], rootContainerKeepInline: boolean, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): void;
10
+ private internalWrite;
11
+ private writeTextNode;
12
+ }
@@ -0,0 +1,118 @@
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 { isEmptyTextNode, isInline } from '../../helper/ElementHelper.js';
6
+ export class HtmlWriterService {
7
+ _conditionalyWriteIndent(indentedTextWriter, designItem) {
8
+ if ((designItem.element instanceof HTMLElement && !isInline(designItem.element)) ||
9
+ (designItem.element.previousElementSibling instanceof HTMLElement && !isInline(designItem.element.previousElementSibling)) ||
10
+ (designItem.element.previousElementSibling == null && !isInline(designItem.element.parentElement) && (designItem.element.previousSibling == null || isEmptyTextNode(designItem.element.previousSibling))))
11
+ indentedTextWriter.writeIndent();
12
+ }
13
+ _conditionalyWriteNewline(indentedTextWriter, designItem) {
14
+ if ((designItem.element instanceof HTMLElement && !isInline(designItem.element)) ||
15
+ (designItem.element.nextElementSibling instanceof HTMLElement && !isInline(designItem.element.nextElementSibling)))
16
+ indentedTextWriter.writeNewline();
17
+ }
18
+ write(indentedTextWriter, designItems, rootContainerKeepInline, options, designItemsAssignmentList) {
19
+ for (const d of designItems) {
20
+ this.internalWrite(indentedTextWriter, d, options, designItemsAssignmentList);
21
+ }
22
+ }
23
+ internalWrite(indentedTextWriter, designItem, options, designItemsAssignmentList) {
24
+ let start = indentedTextWriter.position;
25
+ if (designItem.nodeType == NodeType.TextNode) {
26
+ if (isEmptyTextNode(designItem.element) &&
27
+ ((designItem.element.previousSibling instanceof HTMLElement && !isInline(designItem.element.previousSibling)) ||
28
+ (designItem.element.nextSibling instanceof HTMLElement && !isInline(designItem.element.nextSibling)))) {
29
+ }
30
+ else
31
+ this.writeTextNode(indentedTextWriter, designItem, true);
32
+ }
33
+ else if (designItem.nodeType == NodeType.Comment) {
34
+ this._conditionalyWriteIndent(indentedTextWriter, designItem);
35
+ indentedTextWriter.write('<!--' + designItem.content + '-->');
36
+ this._conditionalyWriteNewline(indentedTextWriter, designItem);
37
+ }
38
+ else {
39
+ this._conditionalyWriteIndent(indentedTextWriter, designItem);
40
+ indentedTextWriter.write('<' + designItem.name);
41
+ if (designItem.hasAttributes) {
42
+ for (const a of designItem.attributes) {
43
+ indentedTextWriter.write(' ');
44
+ if (typeof a[1] === 'string') {
45
+ if (a[1] === "")
46
+ indentedTextWriter.write(a[0]);
47
+ else
48
+ indentedTextWriter.write(a[0] + '="' + DomConverter.normalizeAttributeValue(a[1]) + '"');
49
+ }
50
+ else if (!a[1])
51
+ indentedTextWriter.write(a[0]);
52
+ else {
53
+ //TODO: writing of bindings
54
+ }
55
+ }
56
+ }
57
+ if (designItem.hasStyles) {
58
+ indentedTextWriter.write(' style="');
59
+ let styles = designItem.styles;
60
+ if (options.compressCssToShorthandProperties)
61
+ styles = CssCombiner.combine(styles);
62
+ for (const s of styles) {
63
+ if (s[0]) {
64
+ indentedTextWriter.write(PropertiesHelper.camelToDashCase(s[0]) + ':' + DomConverter.normalizeAttributeValue(s[1]) + ';');
65
+ }
66
+ }
67
+ indentedTextWriter.write('"');
68
+ }
69
+ indentedTextWriter.write('>');
70
+ let contentSingleTextNode = false;
71
+ if (designItem.hasChildren) {
72
+ const children = designItem.children();
73
+ contentSingleTextNode = designItem.childCount === 1 && designItem.firstChild.nodeType === NodeType.TextNode;
74
+ if (contentSingleTextNode) {
75
+ this.writeTextNode(indentedTextWriter, designItem, false);
76
+ }
77
+ else {
78
+ if (designItem.element instanceof HTMLElement && !isInline(designItem.element)) {
79
+ indentedTextWriter.writeNewline();
80
+ indentedTextWriter.levelRaise();
81
+ }
82
+ for (const c of children) {
83
+ this.internalWrite(indentedTextWriter, c, options, designItemsAssignmentList);
84
+ let childSingleTextNode = c.childCount === 1 && c.firstChild.nodeType === NodeType.TextNode;
85
+ if (childSingleTextNode)
86
+ indentedTextWriter.writeNewline();
87
+ }
88
+ if (designItem.element instanceof HTMLElement && !isInline(designItem.element)) {
89
+ indentedTextWriter.levelShrink();
90
+ if (!indentedTextWriter.isLastCharNewline())
91
+ indentedTextWriter.writeNewline();
92
+ indentedTextWriter.writeIndent();
93
+ }
94
+ }
95
+ }
96
+ else if (designItem.hasContent) {
97
+ indentedTextWriter.write(DomConverter.normalizeContentValue(designItem.content));
98
+ }
99
+ if (!DomConverter.IsSelfClosingElement(designItem.name))
100
+ indentedTextWriter.write('</' + designItem.name + '>');
101
+ if (!contentSingleTextNode)
102
+ this._conditionalyWriteNewline(indentedTextWriter, designItem);
103
+ }
104
+ if (designItemsAssignmentList) {
105
+ designItemsAssignmentList.set(designItem, { start: start, length: indentedTextWriter.position - start - 1 });
106
+ }
107
+ }
108
+ writeTextNode(indentedTextWriter, designItem, indentAndNewline) {
109
+ let content = DomConverter.normalizeContentValue(designItem.content).trim();
110
+ if (content) {
111
+ if (indentAndNewline)
112
+ this._conditionalyWriteIndent(indentedTextWriter, designItem);
113
+ indentedTextWriter.write(content);
114
+ if (indentAndNewline)
115
+ this._conditionalyWriteNewline(indentedTextWriter, designItem);
116
+ }
117
+ }
118
+ }
@@ -1,9 +1,9 @@
1
- import { IDesignItem } from '../../item/IDesignItem';
2
- import { IHtmlWriterService } from './IHtmlWriterService';
3
- import { IHtmlWriterOptions } from './IHtmlWriterOptions';
4
- import { IndentedTextWriter } from '../../helper/IndentedTextWriter';
5
- import { IStringPosition } from './IStringPosition';
6
- export declare class HtmlWriterService implements IHtmlWriterService {
1
+ import { IDesignItem } from '../../item/IDesignItem.js';
2
+ import { IHtmlWriterOptions } from './IHtmlWriterOptions.js';
3
+ import { IndentedTextWriter } from '../../helper/IndentedTextWriter.js';
4
+ import { IStringPosition } from './IStringPosition.js';
5
+ import { AbstractHtmlWriterService } from './AbstractHtmlWriterService.js';
6
+ export declare class HtmlWriterService extends AbstractHtmlWriterService {
7
7
  private _conditionalyWriteIndent;
8
8
  private _conditionalyWriteNewline;
9
9
  write(indentedTextWriter: IndentedTextWriter, designItems: IDesignItem[], rootContainerKeepInline: boolean, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): void;
@@ -1,9 +1,8 @@
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';
1
+ import { DomConverter } from '../../widgets/designerView/DomConverter.js';
2
+ import { NodeType } from '../../item/NodeType.js';
5
3
  import { isEmptyTextNode, isInline } from '../../helper/ElementHelper.js';
6
- export class HtmlWriterService {
4
+ import { AbstractHtmlWriterService } from './AbstractHtmlWriterService.js';
5
+ export class HtmlWriterService extends AbstractHtmlWriterService {
7
6
  _conditionalyWriteIndent(indentedTextWriter, designItem) {
8
7
  if ((designItem.element instanceof HTMLElement && !isInline(designItem.element)) ||
9
8
  (designItem.element.previousElementSibling instanceof HTMLElement && !isInline(designItem.element.previousElementSibling)) ||
@@ -38,34 +37,8 @@ export class HtmlWriterService {
38
37
  else {
39
38
  this._conditionalyWriteIndent(indentedTextWriter, designItem);
40
39
  indentedTextWriter.write('<' + designItem.name);
41
- if (designItem.hasAttributes) {
42
- for (const a of designItem.attributes) {
43
- indentedTextWriter.write(' ');
44
- if (typeof a[1] === 'string') {
45
- if (a[1] === "")
46
- indentedTextWriter.write(a[0]);
47
- else
48
- indentedTextWriter.write(a[0] + '="' + DomConverter.normalizeAttributeValue(a[1]) + '"');
49
- }
50
- else if (!a[1])
51
- indentedTextWriter.write(a[0]);
52
- else {
53
- //TODO: writing of bindings
54
- }
55
- }
56
- }
57
- if (designItem.hasStyles) {
58
- indentedTextWriter.write(' style="');
59
- let styles = designItem.styles;
60
- if (options.compressCssToShorthandProperties)
61
- styles = CssCombiner.combine(styles);
62
- for (const s of styles) {
63
- if (s[0]) {
64
- indentedTextWriter.write(PropertiesHelper.camelToDashCase(s[0]) + ':' + DomConverter.normalizeAttributeValue(s[1]) + ';');
65
- }
66
- }
67
- indentedTextWriter.write('"');
68
- }
40
+ this.writeAttributes(indentedTextWriter, designItem, options);
41
+ this.writeStyles(indentedTextWriter, designItem, options);
69
42
  indentedTextWriter.write('>');
70
43
  let contentSingleTextNode = false;
71
44
  if (designItem.hasChildren) {
@@ -2,4 +2,6 @@ export declare class IHtmlWriterOptions {
2
2
  beautifyOutput: boolean;
3
3
  compressCssToShorthandProperties: boolean;
4
4
  writeDesignerProperties: boolean;
5
+ parseJsonInAttributes: boolean;
6
+ jsonWriteMode: 'min' | 'beauty';
5
7
  }
@@ -1,5 +1,7 @@
1
1
  export class IHtmlWriterOptions {
2
- beautifyOutput;
3
- compressCssToShorthandProperties;
4
- writeDesignerProperties;
2
+ beautifyOutput = true;
3
+ compressCssToShorthandProperties = true;
4
+ writeDesignerProperties = true;
5
+ parseJsonInAttributes = true;
6
+ jsonWriteMode = 'min';
5
7
  }
@@ -78,7 +78,9 @@ export class WebcomponentManifestParserService extends UnkownElementPropertiesSe
78
78
  return new Promise((resolve, reject) => { this._resolveStored.push(resolve); this._rejectStored.push(reject); });
79
79
  }
80
80
  isHandledElement(designItem) {
81
- return this._elementList.find(x => x.tag == designItem.name) != null;
81
+ if (this._elementList)
82
+ return this._elementList.find(x => x.tag == designItem.name) != null;
83
+ return false;
82
84
  }
83
85
  getProperties(designItem) {
84
86
  return this._propertiesList[designItem.name];
@@ -20,7 +20,7 @@ export class CodeViewCodeMirror extends BaseCustomWebComponentLazyAppend {
20
20
  constructor() {
21
21
  super();
22
22
  //@ts-ignore
23
- import("codemirror/lib/codemirror.css", { assert: { type: 'css' } }).then(x => this.shadowRoot.adoptedStyleSheets = [x.default, this.constructor.style]);
23
+ import("./codemirror/lib/codemirror.css", { assert: { type: 'css' } }).then(x => this.shadowRoot.adoptedStyleSheets = [x.default, this.constructor.style]);
24
24
  this.style.display = 'block';
25
25
  this._editor = this._getDomElement('textarea');
26
26
  }
@@ -1,7 +1,7 @@
1
- import { IDesignItem } from "../../item/IDesignItem";
2
- import { IStringPosition } from "../../services/htmlWriterService/IStringPosition";
1
+ import { IDesignItem } from "../../item/IDesignItem.js";
2
+ import { IStringPosition } from "../../services/htmlWriterService/IStringPosition.js";
3
3
  export declare class DomConverter {
4
- static normalizeAttributeValue(value: string | number): string;
4
+ static normalizeAttributeValue(value: string | number, useSingleQuotes?: boolean): string;
5
5
  static normalizeContentValue(value: string): string;
6
6
  static IsSelfClosingElement(tag: string): boolean;
7
7
  static ConvertToString(designItems: IDesignItem[], designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): string;
@@ -1,10 +1,13 @@
1
- import { IndentedTextWriter } from "../../helper/IndentedTextWriter";
1
+ import { IndentedTextWriter } from "../../helper/IndentedTextWriter.js";
2
2
  export class DomConverter {
3
- static normalizeAttributeValue(value) {
3
+ static normalizeAttributeValue(value, useSingleQuotes = false) {
4
4
  if (typeof value === 'number')
5
5
  value = value.toString();
6
- if (value)
6
+ if (value) {
7
+ if (useSingleQuotes)
8
+ return value.replaceAll('\'', '&#39;');
7
9
  return value.replaceAll('"', '&quot;');
10
+ }
8
11
  return value;
9
12
  }
10
13
  static normalizeContentValue(value) {
@@ -31,7 +34,7 @@ export class DomConverter {
31
34
  }
32
35
  static ConvertToString(designItems, designItemsAssignmentList) {
33
36
  let itw = new IndentedTextWriter();
34
- let options = { beautifyOutput: true, writeDesignerProperties: true, compressCssToShorthandProperties: true };
37
+ let options = { beautifyOutput: true, writeDesignerProperties: true, compressCssToShorthandProperties: true, parseJsonInAttributes: true, jsonWriteMode: 'beauty' };
35
38
  designItems[0].serviceContainer.htmlWriterService.write(itw, designItems, true, options, designItemsAssignmentList);
36
39
  return itw.getString();
37
40
  }
@@ -53,6 +53,8 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
53
53
  set designerWidth(value: string);
54
54
  get designerHeight(): string;
55
55
  set designerHeight(value: string);
56
+ get designerOffsetWidth(): number;
57
+ get designerOffsetHeight(): number;
56
58
  set additionalStyle(value: CSSStyleSheet);
57
59
  executeCommand(command: IUiCommand): Promise<void>;
58
60
  canExecuteCommand(command: IUiCommand): boolean;
@@ -138,10 +138,6 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
138
138
  this._canvas = this._getDomElement('node-projects-designer-canvas-canvas');
139
139
  this._canvasContainer = this._getDomElement('node-projects-designer-canvas-canvasContainer');
140
140
  this._outercanvas2 = this._getDomElement('node-projects-designer-canvas-outercanvas2');
141
- this.instanceServiceContainer = new InstanceServiceContainer(this);
142
- this.instanceServiceContainer.register("undoService", new UndoService(this));
143
- this.instanceServiceContainer.register("selectionService", new SelectionService);
144
- this.extensionManager = new ExtensionManager(this);
145
141
  this._onKeyDownBound = this.onKeyDown.bind(this);
146
142
  this._onKeyUpBound = this.onKeyUp.bind(this);
147
143
  this._onDblClickBound = this._onDblClick.bind(this);
@@ -163,6 +159,12 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
163
159
  this._canvasContainer.style.height = value;
164
160
  this.zoomFactorChanged();
165
161
  }
162
+ get designerOffsetWidth() {
163
+ return this._canvasContainer.offsetWidth;
164
+ }
165
+ get designerOffsetHeight() {
166
+ return this._canvasContainer.offsetHeight;
167
+ }
166
168
  set additionalStyle(value) {
167
169
  if (value) {
168
170
  for (let r of value.rules) {
@@ -301,8 +303,12 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
301
303
  }
302
304
  initialize(serviceContainer) {
303
305
  this.serviceContainer = serviceContainer;
306
+ this.instanceServiceContainer = new InstanceServiceContainer(this);
307
+ this.instanceServiceContainer.register("undoService", new UndoService(this));
308
+ this.instanceServiceContainer.register("selectionService", new SelectionService);
304
309
  this.rootDesignItem = DesignItem.GetOrCreateDesignItem(this._canvas, this.serviceContainer, this.instanceServiceContainer);
305
310
  this.instanceServiceContainer.register("contentService", new ContentService(this.rootDesignItem));
311
+ this.extensionManager = new ExtensionManager(this);
306
312
  this.overlayLayer = new OverlayLayerView(serviceContainer);
307
313
  this.overlayLayer.style.pointerEvents = 'none';
308
314
  this._canvasContainer.appendChild(this.overlayLayer);
@@ -358,6 +364,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
358
364
  this.snapLines.clearSnaplines();
359
365
  }
360
366
  setDesignItems(designItems) {
367
+ this._fillCalculationrects();
361
368
  this.instanceServiceContainer.undoService.clear();
362
369
  this.overlayLayer.removeAllOverlays();
363
370
  DomHelper.removeAllChildnodes(this.overlayLayer);
@@ -625,7 +632,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
625
632
  return currentElement;
626
633
  }
627
634
  _rect;
628
- _pointerEventHandler(event) {
635
+ _pointerEventHandler(event, forceElement = null) {
629
636
  this._fillCalculationrects();
630
637
  if (this._pointerextensions) {
631
638
  for (let pe of this._pointerextensions)
@@ -635,9 +642,14 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
635
642
  return;
636
643
  if (event.buttons == 2)
637
644
  return;
638
- let currentElement = this.serviceContainer.elementAtPointService.getElementAtPoint(this, { x: event.x, y: event.y });
639
- if (currentElement === this._outercanvas2 || currentElement === this.overlayLayer || !currentElement) {
640
- currentElement = this._canvas;
645
+ let currentElement;
646
+ if (forceElement)
647
+ currentElement = forceElement;
648
+ else {
649
+ currentElement = this.serviceContainer.elementAtPointService.getElementAtPoint(this, { x: event.x, y: event.y });
650
+ if (currentElement === this._outercanvas2 || currentElement === this.overlayLayer || !currentElement) {
651
+ currentElement = this._canvas;
652
+ }
641
653
  } /* else {
642
654
  if (!DesignerCanvas.hasOrIsParent(currentElement, this._canvas))
643
655
  return;