@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.
Files changed (49) hide show
  1. package/.github/FUNDING.yml +1 -0
  2. package/dist/elements/documentContainer.d.ts +3 -0
  3. package/dist/elements/documentContainer.js +13 -3
  4. package/dist/elements/helper/ElementHelper.d.ts +7 -0
  5. package/dist/elements/helper/ElementHelper.js +13 -0
  6. package/dist/elements/helper/IndentedTextWriter.d.ts +1 -0
  7. package/dist/elements/helper/IndentedTextWriter.js +3 -0
  8. package/dist/elements/helper/PathDataPolyfill.js +1 -1
  9. package/dist/elements/services/DefaultServiceBootstrap.js +1 -1
  10. package/dist/elements/services/ServiceContainer.d.ts +1 -1
  11. package/dist/elements/services/ServiceContainer.js +2 -2
  12. package/dist/elements/services/demoProviderService/DemoProviderService.d.ts +1 -1
  13. package/dist/elements/services/demoProviderService/DemoProviderService.js +2 -1
  14. package/dist/elements/services/demoProviderService/IDemoProviderService.d.ts +1 -1
  15. package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService.d.ts +22 -0
  16. package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService.js +133 -0
  17. package/dist/elements/services/htmlWriterService/HtmlWriterService.d.ts +2 -2
  18. package/dist/elements/services/htmlWriterService/HtmlWriterService.js +34 -19
  19. package/dist/elements/services/htmlWriterService/IHtmlWriterService.d.ts +5 -6
  20. package/dist/elements/services/htmlWriterService/LitTsElementWriterService.d.ts +9 -0
  21. package/dist/elements/services/htmlWriterService/LitTsElementWriterService.js +43 -0
  22. package/dist/elements/services/htmlWriterService/SimpleHtmlWriterService.d.ts +27 -0
  23. package/dist/elements/services/htmlWriterService/SimpleHtmlWriterService.js +93 -0
  24. package/dist/elements/services/initializationService/DefaultIntializationService.d.ts +6 -0
  25. package/dist/elements/services/initializationService/DefaultIntializationService.js +22 -0
  26. package/dist/elements/services/manifestParsers/WebcomponentManifestParserService.d.ts +3 -1
  27. package/dist/elements/services/manifestParsers/WebcomponentManifestParserService.js +39 -27
  28. package/dist/elements/widgets/codeView/code-view-ace.js +1 -1
  29. package/dist/elements/widgets/demoView/IDemoView.d.ts +1 -1
  30. package/dist/elements/widgets/demoView/demoView.d.ts +1 -1
  31. package/dist/elements/widgets/demoView/demoView.js +2 -2
  32. package/dist/elements/widgets/designerView/DomConverter.js +1 -7
  33. package/dist/elements/widgets/designerView/extensions/PathExtension.d.ts +3 -1
  34. package/dist/elements/widgets/designerView/extensions/PathExtension.js +59 -5
  35. package/dist/elements/widgets/designerView/overlayLayerView.js +1 -2
  36. package/dist/elements/widgets/designerView/tools/DrawEllipsisTool.js +1 -0
  37. package/dist/elements/widgets/designerView/tools/DrawLineTool.js +1 -0
  38. package/dist/elements/widgets/designerView/tools/DrawPathTool.d.ts +0 -1
  39. package/dist/elements/widgets/designerView/tools/DrawPathTool.js +12 -8
  40. package/dist/elements/widgets/designerView/tools/DrawRectTool.js +1 -0
  41. package/dist/index.d.ts +3 -0
  42. package/dist/index.js +3 -0
  43. package/package.json +4 -4
  44. package/dist/elements/services/manifestLoaders/WebcomponentManifestParserService.d.ts +0 -26
  45. package/dist/elements/services/manifestLoaders/WebcomponentManifestParserService.js +0 -69
  46. package/dist/elements/services/webcomponentManifestParserService/WebcomponentManifestParserService.1.d.ts +0 -0
  47. package/dist/elements/services/webcomponentManifestParserService/WebcomponentManifestParserService.1.js +0 -1
  48. package/dist/elements/services/webcomponentManifestParserService/webcomponentManifestParserService.d.ts +0 -26
  49. package/dist/elements/services/webcomponentManifestParserService/webcomponentManifestParserService.js +0 -69
@@ -1,3 +1,4 @@
1
1
  # These are supported funding model platforms
2
2
 
3
3
  github: jogibear9988
4
+ patreon: jogibear9988
@@ -13,6 +13,9 @@ export declare class DocumentContainer extends BaseCustomWebComponentLazyAppend
13
13
  codeView: ICodeView & HTMLElement;
14
14
  demoView: IDemoView & HTMLElement;
15
15
  additionalData: any;
16
+ private _additionalStyle;
17
+ set additionalStyleString(style: string);
18
+ get additionalStyleString(): string;
16
19
  private _serviceContainer;
17
20
  private _content;
18
21
  private _tabControl;
@@ -1,4 +1,4 @@
1
- import { BaseCustomWebComponentLazyAppend, css, debounce } from "@node-projects/base-custom-webcomponent";
1
+ import { BaseCustomWebComponentLazyAppend, css, cssFromString, debounce } from "@node-projects/base-custom-webcomponent";
2
2
  import { DesignerTabControl } from "./controls/DesignerTabControl";
3
3
  import { DesignerView } from "./widgets/designerView/designerView";
4
4
  import { SimpleSplitView } from './controls/SimpleSplitView';
@@ -7,6 +7,16 @@ export class DocumentContainer extends BaseCustomWebComponentLazyAppend {
7
7
  codeView;
8
8
  demoView;
9
9
  additionalData;
10
+ _additionalStyle;
11
+ set additionalStyleString(style) {
12
+ this._additionalStyle = style;
13
+ this.designerView.additionalStyle = cssFromString(style);
14
+ }
15
+ ;
16
+ get additionalStyleString() {
17
+ return this._additionalStyle;
18
+ }
19
+ ;
10
20
  _serviceContainer;
11
21
  _content = '';
12
22
  _tabControl;
@@ -136,7 +146,7 @@ export class DocumentContainer extends BaseCustomWebComponentLazyAppend {
136
146
  else if (this._tabControl.selectedIndex === 2) {
137
147
  }
138
148
  else if (this._tabControl.selectedIndex === 3)
139
- this.demoView.display(this._serviceContainer, this.designerView.instanceServiceContainer, this._content);
149
+ this.demoView.display(this._serviceContainer, this.designerView.instanceServiceContainer, this._content, this.additionalStyleString);
140
150
  }
141
151
  }
142
152
  get content() {
@@ -181,7 +191,7 @@ export class DocumentContainer extends BaseCustomWebComponentLazyAppend {
181
191
  this._splitDiv.appendChild(this.codeView);
182
192
  }
183
193
  if (i.newIndex === 3) {
184
- this.demoView.display(this._serviceContainer, this.designerView.instanceServiceContainer, this._content);
194
+ this.demoView.display(this._serviceContainer, this.designerView.instanceServiceContainer, this._content, this.additionalStyleString);
185
195
  }
186
196
  });
187
197
  if (this._content)
@@ -1,2 +1,9 @@
1
1
  export declare function newElementFromString(text: any): Element;
2
+ export declare enum ElementDisplayType {
3
+ none = 0,
4
+ inline = 1,
5
+ block = 2
6
+ }
2
7
  export declare function isInline(element: HTMLElement): boolean;
8
+ export declare function getElementDisplaytype(element: HTMLElement): ElementDisplayType;
9
+ export declare function isEmptyTextNode(node: Node): boolean;
@@ -4,6 +4,19 @@ export function newElementFromString(text) {
4
4
  const fragment = range.createContextualFragment(text);
5
5
  return fragment.firstChild;
6
6
  }
7
+ export var ElementDisplayType;
8
+ (function (ElementDisplayType) {
9
+ ElementDisplayType[ElementDisplayType["none"] = 0] = "none";
10
+ ElementDisplayType[ElementDisplayType["inline"] = 1] = "inline";
11
+ ElementDisplayType[ElementDisplayType["block"] = 2] = "block";
12
+ })(ElementDisplayType || (ElementDisplayType = {}));
7
13
  export function isInline(element) {
8
14
  return element != null && window.getComputedStyle(element).display.startsWith('inline');
9
15
  }
16
+ export function getElementDisplaytype(element) {
17
+ const display = window.getComputedStyle(element).display;
18
+ return display == 'none' ? ElementDisplayType.none : display.startsWith('inline') ? ElementDisplayType.inline : ElementDisplayType.block;
19
+ }
20
+ export function isEmptyTextNode(node) {
21
+ return node.textContent.trim() == '' && node.textContent.indexOf('\xa0' /* &nbsp; */) < 0;
22
+ }
@@ -3,6 +3,7 @@ export declare class IndentedTextWriter {
3
3
  readonly indent: number;
4
4
  level: number;
5
5
  get position(): number;
6
+ isLastCharNewline(): boolean;
6
7
  levelRaise(): void;
7
8
  levelShrink(): void;
8
9
  write(text: string): void;
@@ -5,6 +5,9 @@ export class IndentedTextWriter {
5
5
  get position() {
6
6
  return this._textHolder.length;
7
7
  }
8
+ isLastCharNewline() {
9
+ return this._textHolder[this._textHolder.length - 1] === '\n';
10
+ }
8
11
  levelRaise() {
9
12
  this.level++;
10
13
  }
@@ -857,7 +857,7 @@ if (!SVGPathElement.prototype.getPathData || !SVGPathElement.prototype.setPathDa
857
857
  })();
858
858
  }
859
859
  export function straightenLine(p1, p2) {
860
- let newP = p2;
860
+ let newP;
861
861
  let alpha = calculateAlpha(p1, p2);
862
862
  let normLength;
863
863
  if ((alpha >= 337.5 && alpha < 360 || alpha >= 0 && alpha < 22.5)) { // 0
@@ -4,7 +4,6 @@ import { LitElementPropertiesService } from './propertiesService/services/LitEle
4
4
  import { NativeElementsPropertiesService } from './propertiesService/services/NativeElementsPropertiesService.js';
5
5
  import { DefaultInstanceService } from './instanceService/DefaultInstanceService.js';
6
6
  import { DefaultEditorTypesService } from './propertiesService/DefaultEditorTypesService.js';
7
- import { HtmlWriterService } from './htmlWriterService/HtmlWriterService.js';
8
7
  import { BaseCustomWebComponentPropertiesService } from './propertiesService/services/BaseCustomWebComponentPropertiesService.js';
9
8
  import { DefaultPlacementService } from './placementService/DefaultPlacementService.js';
10
9
  import { DefaultHtmlParserService } from './htmlParserService/DefaultHtmlParserService.js';
@@ -52,6 +51,7 @@ import { DemoProviderService } from './demoProviderService/DemoProviderService';
52
51
  import { DrawRectTool } from '../widgets/designerView/tools/DrawRectTool.js';
53
52
  import { DrawEllipsisTool } from '../widgets/designerView/tools/DrawEllipsisTool.js';
54
53
  import { DrawLineTool } from '../widgets/designerView/tools/DrawLineTool.js';
54
+ import { HtmlWriterService } from './htmlWriterService/HtmlWriterService.js';
55
55
  export function createDefaultServiceContainer() {
56
56
  let serviceContainer = new ServiceContainer();
57
57
  serviceContainer.register("propertyService", new PolymerPropertiesService());
@@ -67,7 +67,7 @@ export declare class ServiceContainer extends BaseServiceContainer<ServiceNameMa
67
67
  get elementsServices(): IElementsService[];
68
68
  get instanceServices(): IInstanceService[];
69
69
  get editorTypesServices(): IEditorTypesService[];
70
- get htmlWriterServices(): IHtmlWriterService[];
70
+ get htmlWriterService(): IHtmlWriterService;
71
71
  get htmlParserService(): IHtmlParserService;
72
72
  get intializationService(): IIntializationService;
73
73
  get elementAtPointService(): IElementAtPointService;
@@ -40,8 +40,8 @@ export class ServiceContainer extends BaseServiceContainer {
40
40
  get editorTypesServices() {
41
41
  return this.getServices('editorTypesService');
42
42
  }
43
- get htmlWriterServices() {
44
- return this.getServices('htmlWriterService');
43
+ get htmlWriterService() {
44
+ return this.getLastService('htmlWriterService');
45
45
  }
46
46
  get htmlParserService() {
47
47
  return this.getLastService('htmlParserService');
@@ -2,5 +2,5 @@ import { InstanceServiceContainer } from "../InstanceServiceContainer.js";
2
2
  import { ServiceContainer } from "../ServiceContainer.js";
3
3
  import { IDemoProviderService } from "./IDemoProviderService.js";
4
4
  export declare class DemoProviderService implements IDemoProviderService {
5
- provideDemo(container: HTMLElement, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, code: string): Promise<void>;
5
+ provideDemo(container: HTMLElement, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, code: string, style: string): Promise<void>;
6
6
  }
@@ -1,6 +1,6 @@
1
1
  import { DomHelper } from '@node-projects/base-custom-webcomponent/dist/DomHelper';
2
2
  export class DemoProviderService {
3
- provideDemo(container, serviceContainer, instanceServiceContainer, code) {
3
+ provideDemo(container, serviceContainer, instanceServiceContainer, code, style) {
4
4
  return new Promise(resolve => {
5
5
  const iframe = document.createElement('iframe');
6
6
  iframe.style.width = '100%';
@@ -21,6 +21,7 @@ export class DemoProviderService {
21
21
  }
22
22
  doc.write("document.body.style.display='';");
23
23
  doc.write('</script>');
24
+ doc.write('<style>' + (style ?? '') + '</style>');
24
25
  doc.write('<body style="display:none; width: 100%; height: 100%; margin: 0; padding: 0; position: absolute;">' + code + '</body>');
25
26
  doc.close();
26
27
  });
@@ -1,5 +1,5 @@
1
1
  import { InstanceServiceContainer } from "../InstanceServiceContainer.js";
2
2
  import { ServiceContainer } from "../ServiceContainer.js";
3
3
  export interface IDemoProviderService {
4
- provideDemo(container: HTMLElement, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, code: string): any;
4
+ provideDemo(container: HTMLElement, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer, code: string, style: string): any;
5
5
  }
@@ -0,0 +1,22 @@
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
+ declare enum ElementContainerType {
7
+ block = 0,
8
+ complex = 1
9
+ }
10
+ export declare class FormatingHtmlWriterService implements IHtmlWriterService {
11
+ private writeAttributes;
12
+ private writeStyles;
13
+ private _writeTextNode;
14
+ private _writeCommentNode;
15
+ private _writeElementNode;
16
+ private _writeDesignItemList;
17
+ private _writeNewlineAndIntend;
18
+ private _writeInternal;
19
+ getContainerType(element: HTMLElement): ElementContainerType;
20
+ write(indentedTextWriter: IndentedTextWriter, designItems: IDesignItem[], rootContainerKeepInline: boolean, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): void;
21
+ }
22
+ export {};
@@ -0,0 +1,133 @@
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
+ var ElementContainerType;
7
+ (function (ElementContainerType) {
8
+ ElementContainerType[ElementContainerType["block"] = 0] = "block";
9
+ ElementContainerType[ElementContainerType["complex"] = 1] = "complex";
10
+ })(ElementContainerType || (ElementContainerType = {}));
11
+ // const defaultDisplayNoneContainerDisplayType: ElementContainerType = ElementContainerType.complex;
12
+ export class FormatingHtmlWriterService {
13
+ writeAttributes(writeContext, designItem) {
14
+ if (designItem.hasAttributes) {
15
+ for (const a of designItem.attributes) {
16
+ writeContext.indentedTextWriter.write(' ');
17
+ if (typeof a[1] === 'string') {
18
+ if (a[1] === "")
19
+ writeContext.indentedTextWriter.write(a[0]);
20
+ else
21
+ writeContext.indentedTextWriter.write(a[0] + '="' + DomConverter.normalizeAttributeValue(a[1]) + '"');
22
+ }
23
+ else if (!a[1])
24
+ writeContext.indentedTextWriter.write(a[0]);
25
+ else {
26
+ }
27
+ }
28
+ }
29
+ }
30
+ writeStyles(writeContext, designItem) {
31
+ if (designItem.hasStyles) {
32
+ writeContext.indentedTextWriter.write(' style="');
33
+ let styles = designItem.styles;
34
+ if (writeContext.options.compressCssToShorthandProperties)
35
+ styles = CssCombiner.combine(styles);
36
+ for (const s of styles) {
37
+ if (s[0]) {
38
+ writeContext.indentedTextWriter.write(PropertiesHelper.camelToDashCase(s[0]) + ':' + DomConverter.normalizeAttributeValue(s[1]) + ';');
39
+ }
40
+ }
41
+ writeContext.indentedTextWriter.write('"');
42
+ }
43
+ }
44
+ _writeTextNode(writeContext, designItem) {
45
+ writeContext.lastElementDisplayType = ElementDisplayType.inline;
46
+ let content = DomConverter.normalizeContentValue(designItem.content).trim();
47
+ if (content) {
48
+ writeContext.indentedTextWriter.write(content);
49
+ }
50
+ }
51
+ _writeCommentNode(writeContext, designItem) {
52
+ writeContext.indentedTextWriter.write('<!--' + designItem.content + '-->');
53
+ }
54
+ _writeElementNode(writeContext, designItem) {
55
+ // const cs = getComputedStyle(designItem.element);
56
+ //cs.whiteSpace === 'pre'
57
+ //isInPre
58
+ //is in inline?
59
+ const currentElementDisplayType = getElementDisplaytype(designItem.element);
60
+ writeContext.lastElementDisplayType = currentElementDisplayType;
61
+ writeContext.indentedTextWriter.write('<' + designItem.name);
62
+ this.writeAttributes(writeContext, designItem);
63
+ this.writeStyles(writeContext, designItem);
64
+ writeContext.indentedTextWriter.write('>');
65
+ let contentSingleTextNode = false;
66
+ if (designItem.hasChildren) {
67
+ const children = designItem.children();
68
+ contentSingleTextNode = designItem.childCount === 1 && designItem.firstChild.nodeType === NodeType.TextNode;
69
+ if (contentSingleTextNode) {
70
+ this._writeInternal(writeContext, designItem.firstChild);
71
+ }
72
+ else {
73
+ let previousContainerDisplayType = writeContext.containerDisplayType;
74
+ writeContext.containerDisplayType = this.getContainerType(designItem.element);
75
+ writeContext.indentedTextWriter.levelRaise();
76
+ this._writeDesignItemList(currentElementDisplayType, writeContext, children);
77
+ writeContext.indentedTextWriter.levelShrink();
78
+ writeContext.containerDisplayType = previousContainerDisplayType;
79
+ }
80
+ }
81
+ else if (designItem.hasContent) {
82
+ writeContext.indentedTextWriter.write(DomConverter.normalizeContentValue(designItem.content));
83
+ }
84
+ if (!DomConverter.IsSelfClosingElement(designItem.name)) {
85
+ if (currentElementDisplayType === ElementDisplayType.block && designItem.hasChildren && !contentSingleTextNode) {
86
+ this._writeNewlineAndIntend(writeContext);
87
+ }
88
+ //write newline & intend ???
89
+ writeContext.indentedTextWriter.write('</' + designItem.name + '>');
90
+ if (currentElementDisplayType !== ElementDisplayType.none) {
91
+ writeContext.lastElementDisplayType = currentElementDisplayType;
92
+ }
93
+ }
94
+ }
95
+ _writeDesignItemList(currentElementDisplayType, writeContext, children) {
96
+ for (const c of children) {
97
+ if (writeContext.lastElementDisplayType == null) {
98
+ //first entry, do nothing
99
+ }
100
+ else if (writeContext.containerDisplayType === ElementContainerType.complex)
101
+ this._writeNewlineAndIntend(writeContext);
102
+ else if (writeContext.lastElementDisplayType !== ElementDisplayType.inline /*|| currentElementDisplayType !== ElementDisplayType.inline*/)
103
+ this._writeNewlineAndIntend(writeContext);
104
+ this._writeInternal(writeContext, c);
105
+ }
106
+ }
107
+ _writeNewlineAndIntend(writeContext) {
108
+ writeContext.indentedTextWriter.writeNewline();
109
+ writeContext.indentedTextWriter.writeIndent();
110
+ }
111
+ _writeInternal(writeContext, designItem) {
112
+ const start = writeContext.indentedTextWriter.position;
113
+ if (designItem.nodeType === NodeType.TextNode)
114
+ this._writeTextNode(writeContext, designItem);
115
+ else if (designItem.nodeType === NodeType.Comment)
116
+ this._writeCommentNode(writeContext, designItem);
117
+ else if (designItem.nodeType === NodeType.Element)
118
+ this._writeElementNode(writeContext, designItem);
119
+ if (writeContext.designItemsAssignmentList) {
120
+ writeContext.designItemsAssignmentList.set(designItem, { start: start, length: writeContext.indentedTextWriter.position - start - 1 });
121
+ }
122
+ }
123
+ getContainerType(element) {
124
+ const display = window.getComputedStyle(element).display;
125
+ if (display === 'block' || display === "inline-block" || display == '')
126
+ return ElementContainerType.block;
127
+ return ElementContainerType.complex;
128
+ }
129
+ write(indentedTextWriter, designItems, rootContainerKeepInline, options, designItemsAssignmentList) {
130
+ const context = { indentedTextWriter, options, lastElementDisplayType: null, containerDisplayType: ElementContainerType.block, designItemsAssignmentList };
131
+ this._writeDesignItemList(ElementDisplayType.inline, context, designItems);
132
+ }
133
+ }
@@ -4,9 +4,9 @@ import { IHtmlWriterOptions } from './IHtmlWriterOptions';
4
4
  import { IndentedTextWriter } from '../../helper/IndentedTextWriter';
5
5
  import { IStringPosition } from './IStringPosition';
6
6
  export declare class HtmlWriterService implements IHtmlWriterService {
7
- canWrite(designItem: IDesignItem): boolean;
8
7
  private _conditionalyWriteIndent;
9
8
  private _conditionalyWriteNewline;
10
- write(indentedTextWriter: IndentedTextWriter, designItem: IDesignItem, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): void;
9
+ write(indentedTextWriter: IndentedTextWriter, designItems: IDesignItem[], rootContainerKeepInline: boolean, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): void;
10
+ private internalWrite;
11
11
  private writeTextNode;
12
12
  }
@@ -2,14 +2,12 @@ import { DomConverter } from '../../widgets/designerView/DomConverter';
2
2
  import { CssCombiner } from '../../helper/CssCombiner';
3
3
  import { NodeType } from '../../item/NodeType';
4
4
  import { PropertiesHelper } from '../propertiesService/services/PropertiesHelper';
5
- import { isInline } from '../../helper/ElementHelper.js';
5
+ import { isEmptyTextNode, isInline } from '../../helper/ElementHelper.js';
6
6
  export class HtmlWriterService {
7
- canWrite(designItem) {
8
- return true;
9
- }
10
7
  _conditionalyWriteIndent(indentedTextWriter, designItem) {
11
8
  if ((designItem.element instanceof HTMLElement && !isInline(designItem.element)) ||
12
- (designItem.element.previousElementSibling instanceof HTMLElement && !isInline(designItem.element.previousElementSibling)))
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))))
13
11
  indentedTextWriter.writeIndent();
14
12
  }
15
13
  _conditionalyWriteNewline(indentedTextWriter, designItem) {
@@ -17,10 +15,20 @@ export class HtmlWriterService {
17
15
  (designItem.element.nextElementSibling instanceof HTMLElement && !isInline(designItem.element.nextElementSibling)))
18
16
  indentedTextWriter.writeNewline();
19
17
  }
20
- write(indentedTextWriter, designItem, options, designItemsAssignmentList) {
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) {
21
24
  let start = indentedTextWriter.position;
22
25
  if (designItem.nodeType == NodeType.TextNode) {
23
- this.writeTextNode(indentedTextWriter, designItem, true);
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);
24
32
  }
25
33
  else if (designItem.nodeType == NodeType.Comment) {
26
34
  this._conditionalyWriteIndent(indentedTextWriter, designItem);
@@ -59,24 +67,30 @@ export class HtmlWriterService {
59
67
  indentedTextWriter.write('"');
60
68
  }
61
69
  indentedTextWriter.write('>');
70
+ let contentSingleTextNode = false;
62
71
  if (designItem.hasChildren) {
63
72
  const children = designItem.children();
64
- const singleTextNode = designItem.childCount === 1 && designItem.firstChild.nodeType === NodeType.TextNode;
65
- if (singleTextNode) {
73
+ contentSingleTextNode = designItem.childCount === 1 && designItem.firstChild.nodeType === NodeType.TextNode;
74
+ if (contentSingleTextNode) {
66
75
  this.writeTextNode(indentedTextWriter, designItem, false);
67
76
  }
68
77
  else {
69
- indentedTextWriter.writeNewline();
70
- indentedTextWriter.levelRaise();
78
+ if (designItem.element instanceof HTMLElement && !isInline(designItem.element)) {
79
+ indentedTextWriter.writeNewline();
80
+ indentedTextWriter.levelRaise();
81
+ }
71
82
  for (const c of children) {
72
- c.serviceContainer.forSomeServicesTillResult('htmlWriterService', (s) => {
73
- if (s.canWrite(c)) {
74
- s.write(indentedTextWriter, c, options, designItemsAssignmentList);
75
- }
76
- });
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();
77
93
  }
78
- indentedTextWriter.levelShrink();
79
- indentedTextWriter.writeIndent();
80
94
  }
81
95
  }
82
96
  else if (designItem.hasContent) {
@@ -84,7 +98,8 @@ export class HtmlWriterService {
84
98
  }
85
99
  if (!DomConverter.IsSelfClosingElement(designItem.name))
86
100
  indentedTextWriter.write('</' + designItem.name + '>');
87
- this._conditionalyWriteNewline(indentedTextWriter, designItem);
101
+ if (!contentSingleTextNode)
102
+ this._conditionalyWriteNewline(indentedTextWriter, designItem);
88
103
  }
89
104
  if (designItemsAssignmentList) {
90
105
  designItemsAssignmentList.set(designItem, { start: start, length: indentedTextWriter.position - start - 1 });
@@ -1,8 +1,7 @@
1
- import { IDesignItem } from '../../item/IDesignItem';
2
- import { IHtmlWriterOptions } from './IHtmlWriterOptions';
3
- import { IndentedTextWriter } from '../../helper/IndentedTextWriter';
4
- import { IStringPosition } from './IStringPosition';
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
5
  export interface IHtmlWriterService {
6
- canWrite(designItem: IDesignItem): boolean;
7
- write(indentedTextWriter: IndentedTextWriter, designItem: IDesignItem, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): any;
6
+ write(indentedTextWriter: IndentedTextWriter, designItems: IDesignItem[], rootContainerKeepInline: boolean, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): any;
8
7
  }
@@ -0,0 +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 LitTsElementWriterService implements IHtmlWriterService {
7
+ write(indentedTextWriter: IndentedTextWriter, designItems: IDesignItem[], rootContainerKeepInline: boolean, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): void;
8
+ static head: string;
9
+ }
@@ -0,0 +1,43 @@
1
+ //needs InternalBindinsgStorrageService -> keeps bindings
2
+ export class LitTsElementWriterService {
3
+ write(indentedTextWriter, designItems, rootContainerKeepInline, options, designItemsAssignmentList) {
4
+ throw new Error('Method not implemented.');
5
+ }
6
+ static head = `import { html, css, LitElement, CSSResultArray } from 'lit';
7
+ import { property, customElement } from 'lit/decorators.js';
8
+
9
+ @customElement('$$elementName')
10
+ class $$className extends LitElement {
11
+ static get styles(): CSSResultArray {
12
+ return [
13
+ css\`
14
+ $$css
15
+ \`,
16
+ ];
17
+ }
18
+
19
+ //@property({ type: String }) btnStyle: QingButtonStyle = '';
20
+ //@property({ type: Boolean, reflect: true }) selected = false;
21
+
22
+ //private buttonElement: HTMLButtonElement | null = null;
23
+
24
+ /*firstUpdated() {
25
+ if (!this.shadowRoot) {
26
+ throw new Error('Unexpected undefined shadowRoot');
27
+ }
28
+ this.buttonElement = this.shadowRoot.querySelector('button');
29
+ }*/
30
+
31
+ render() {
32
+ return html\`$$html\`;
33
+ }
34
+ }
35
+
36
+ export default $$className;
37
+
38
+ declare global {
39
+ interface HTMLElementTagNameMap {
40
+ '$$elementName': $$className;
41
+ }
42
+ }`;
43
+ }
@@ -0,0 +1,27 @@
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
+ import { ElementDisplayType } from '../../helper/ElementHelper.js';
7
+ export declare enum ElementContainerType {
8
+ block = 0,
9
+ complex = 1
10
+ }
11
+ export interface IWriteContext {
12
+ options: IHtmlWriterOptions;
13
+ indentedTextWriter: IndentedTextWriter;
14
+ lastElementDisplayType: ElementDisplayType | null;
15
+ containerDisplayType: ElementContainerType;
16
+ designItemsAssignmentList?: Map<IDesignItem, IStringPosition>;
17
+ }
18
+ export declare class SimpleHtmlWriterService implements IHtmlWriterService {
19
+ protected writeAttributes(writeContext: IWriteContext, designItem: IDesignItem): void;
20
+ protected writeStyles(writeContext: IWriteContext, designItem: IDesignItem): void;
21
+ private _writeTextNode;
22
+ private _writeCommentNode;
23
+ private _writeElementNode;
24
+ private _writeDesignItemList;
25
+ private _writeInternal;
26
+ write(indentedTextWriter: IndentedTextWriter, designItems: IDesignItem[], rootContainerKeepInline: boolean, options: IHtmlWriterOptions, designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): void;
27
+ }