@node-projects/web-component-designer 0.0.103 → 0.0.106

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.
@@ -0,0 +1,13 @@
1
+ import { IElementDefinition } from "./IElementDefinition.js";
2
+ import { IElementsService } from "./IElementsService.js";
3
+ export declare class WebcomponentManifestElementsService implements IElementsService {
4
+ private _name;
5
+ get name(): string;
6
+ private _importPrefix;
7
+ private _elementList;
8
+ private _resolveStored;
9
+ private _rejectStored;
10
+ constructor(name: string, importPrefix: string, manifest: any);
11
+ private _parseManifest;
12
+ getElements(): Promise<IElementDefinition[]>;
13
+ }
@@ -0,0 +1,37 @@
1
+ export class WebcomponentManifestElementsService {
2
+ _name;
3
+ get name() { return this._name; }
4
+ _importPrefix;
5
+ _elementList;
6
+ _resolveStored;
7
+ _rejectStored;
8
+ constructor(name, importPrefix, manifest) {
9
+ this._name = name;
10
+ this._importPrefix = importPrefix;
11
+ this._parseManifest(manifest);
12
+ }
13
+ _parseManifest(manifest) {
14
+ this._elementList = [];
15
+ for (let m of manifest.modules) {
16
+ for (let e of m.exports) {
17
+ if (e.kind == 'custom-element-definition') {
18
+ this._elementList.push({ tag: e.name, import: this._importPrefix + '/' + e.declaration.module, defaultWidth: "200px", defaultHeight: "200px" });
19
+ }
20
+ }
21
+ if (this._resolveStored) {
22
+ this._resolveStored.forEach(x => x(this._elementList));
23
+ this._resolveStored = null;
24
+ this._rejectStored = null;
25
+ }
26
+ }
27
+ }
28
+ async getElements() {
29
+ if (this._elementList)
30
+ return Promise.resolve(this._elementList);
31
+ if (!this._resolveStored) {
32
+ this._resolveStored = [];
33
+ this._rejectStored = [];
34
+ }
35
+ return new Promise((resolve, reject) => { this._resolveStored.push(resolve); this._rejectStored.push(reject); });
36
+ }
37
+ }
@@ -0,0 +1,25 @@
1
+ import { BindingTarget } from "../../item/BindingTarget";
2
+ import { IElementDefinition } from "../elementsService/IElementDefinition";
3
+ import { IElementsService } from "../elementsService/IElementsService";
4
+ import { IPropertiesService } from "../propertiesService/IPropertiesService";
5
+ import { IProperty } from "../propertiesService/IProperty";
6
+ import { IDesignItem } from "../../item/IDesignItem";
7
+ import { UnkownElementPropertiesService } from "../propertiesService/services/UnkownElementPropertiesService";
8
+ export declare class WebcomponentManifestParserService extends UnkownElementPropertiesService implements IElementsService, IPropertiesService {
9
+ private _name;
10
+ get name(): string;
11
+ private _packageData;
12
+ private _elementList;
13
+ private _propertiesList;
14
+ private _resolveStored;
15
+ private _rejectStored;
16
+ private _importPrefix;
17
+ constructor(name: string, fileOrObject: string | object, importPrefix?: string);
18
+ private _parseManifest;
19
+ private manifestClassPropertyTypeToEditorPropertyType;
20
+ getElements(): Promise<IElementDefinition[]>;
21
+ isHandledElement(designItem: IDesignItem): boolean;
22
+ getProperties(designItem: IDesignItem): IProperty[];
23
+ getProperty(designItem: IDesignItem, name: string): IProperty;
24
+ getPropertyTarget(designItem: IDesignItem, property: IProperty): BindingTarget;
25
+ }
@@ -0,0 +1,94 @@
1
+ import { BindingTarget } from "../../item/BindingTarget";
2
+ import { PropertyType } from "../propertiesService/PropertyType";
3
+ import { UnkownElementPropertiesService } from "../propertiesService/services/UnkownElementPropertiesService";
4
+ export class WebcomponentManifestParserService extends UnkownElementPropertiesService {
5
+ _name;
6
+ get name() { return this._name; }
7
+ _packageData;
8
+ _elementList;
9
+ _propertiesList;
10
+ _resolveStored;
11
+ _rejectStored;
12
+ _importPrefix = '';
13
+ constructor(name, fileOrObject, importPrefix = '') {
14
+ super();
15
+ this._name = name;
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)
48
+ pType = declaration.attributes.find(x => x.fieldName == d.name) != null ? PropertyType.propertyAndAttribute : PropertyType.property;
49
+ properties.push({ name: d.name, service: this, propertyType: pType, type: this.manifestClassPropertyTypeToEditorPropertyType(d.type?.text) });
50
+ }
51
+ }
52
+ this._propertiesList[e.name] = properties;
53
+ }
54
+ }
55
+ if (this._resolveStored) {
56
+ this._resolveStored.forEach(x => x(this._elementList));
57
+ this._resolveStored = null;
58
+ this._rejectStored = null;
59
+ }
60
+ }
61
+ }
62
+ manifestClassPropertyTypeToEditorPropertyType(type) {
63
+ if (type) {
64
+ if (type.toLowerCase() === 'boolean')
65
+ return 'boolean';
66
+ if (type.toLowerCase() === 'number')
67
+ return 'number';
68
+ }
69
+ return type;
70
+ }
71
+ async getElements() {
72
+ if (this._packageData)
73
+ return Promise.resolve(this._elementList);
74
+ if (!this._resolveStored) {
75
+ this._resolveStored = [];
76
+ this._rejectStored = [];
77
+ }
78
+ return new Promise((resolve, reject) => { this._resolveStored.push(resolve); this._rejectStored.push(reject); });
79
+ }
80
+ isHandledElement(designItem) {
81
+ if (this._elementList)
82
+ return this._elementList.find(x => x.tag == designItem.name) != null;
83
+ return false;
84
+ }
85
+ getProperties(designItem) {
86
+ return this._propertiesList[designItem.name];
87
+ }
88
+ getProperty(designItem, name) {
89
+ return this._propertiesList[designItem.name].find(x => x.name == name);
90
+ }
91
+ getPropertyTarget(designItem, property) {
92
+ return this._propertiesList[designItem.name].find(x => x.name == property.name).propertyType == PropertyType.attribute ? BindingTarget.attribute : BindingTarget.property;
93
+ }
94
+ }
@@ -7,9 +7,19 @@ export class DefaultInstanceService {
7
7
  let importUri = definition.import;
8
8
  if (importUri[0] === '.')
9
9
  importUri = (window.location.origin + window.location.pathname).split('/').slice(0, -1).join('/') + '/' + importUri;
10
- import(importUri).then(() => {
11
- //TODO: refresh all extensions
12
- }); //removed await here, feels better to not wait for the elemnt is loaded, maybe this needs to be configurable
10
+ //@ts-ignore
11
+ if (importShim) {
12
+ //@ts-ignore
13
+ importShim(importUri).then(() => {
14
+ //TODO: refresh all extensions
15
+ });
16
+ }
17
+ else {
18
+ import(importUri).then(() => {
19
+ //TODO: refresh all extensions
20
+ });
21
+ }
22
+ //removed await here, feels better to not wait for the elemnt is loaded, maybe this needs to be configurable
13
23
  if (instanceServiceContainer.designContext.imports.indexOf(importUri) <= 0)
14
24
  instanceServiceContainer.designContext.imports.push(importUri);
15
25
  }
@@ -0,0 +1,25 @@
1
+ import { BindingTarget } from "../../item/BindingTarget";
2
+ import { IElementDefinition } from "../elementsService/IElementDefinition";
3
+ import { IElementsService } from "../elementsService/IElementsService";
4
+ import { IPropertiesService } from "../propertiesService/IPropertiesService";
5
+ import { IProperty } from "../propertiesService/IProperty";
6
+ import { IDesignItem } from "../../item/IDesignItem";
7
+ import { UnkownElementPropertiesService } from "../propertiesService/services/UnkownElementPropertiesService";
8
+ export declare class WebcomponentManifestParserService extends UnkownElementPropertiesService implements IElementsService, IPropertiesService {
9
+ private _name;
10
+ get name(): string;
11
+ private _packageData;
12
+ private _elementList;
13
+ private _propertiesList;
14
+ private _resolveStored;
15
+ private _rejectStored;
16
+ private _importPrefix;
17
+ constructor(name: string, fileOrObject: string | object, importPrefix?: string);
18
+ private _parseManifest;
19
+ private manifestClassPropertyTypeToEditorPropertyType;
20
+ getElements(): Promise<IElementDefinition[]>;
21
+ isHandledElement(designItem: IDesignItem): boolean;
22
+ getProperties(designItem: IDesignItem): IProperty[];
23
+ getProperty(designItem: IDesignItem, name: string): IProperty;
24
+ getPropertyTarget(designItem: IDesignItem, property: IProperty): BindingTarget;
25
+ }
@@ -0,0 +1,94 @@
1
+ import { BindingTarget } from "../../item/BindingTarget";
2
+ import { PropertyType } from "../propertiesService/PropertyType";
3
+ import { UnkownElementPropertiesService } from "../propertiesService/services/UnkownElementPropertiesService";
4
+ export class WebcomponentManifestParserService extends UnkownElementPropertiesService {
5
+ _name;
6
+ get name() { return this._name; }
7
+ _packageData;
8
+ _elementList;
9
+ _propertiesList;
10
+ _resolveStored;
11
+ _rejectStored;
12
+ _importPrefix = '';
13
+ constructor(name, fileOrObject, importPrefix = '') {
14
+ super();
15
+ this._name = name;
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)
48
+ pType = declaration.attributes.find(x => x.fieldName == d.name) != null ? PropertyType.propertyAndAttribute : PropertyType.property;
49
+ properties.push({ name: d.name, service: this, propertyType: pType, type: this.manifestClassPropertyTypeToEditorPropertyType(d.type?.text) });
50
+ }
51
+ }
52
+ this._propertiesList[e.name] = properties;
53
+ }
54
+ }
55
+ if (this._resolveStored) {
56
+ this._resolveStored.forEach(x => x(this._elementList));
57
+ this._resolveStored = null;
58
+ this._rejectStored = null;
59
+ }
60
+ }
61
+ }
62
+ manifestClassPropertyTypeToEditorPropertyType(type) {
63
+ if (type) {
64
+ if (type.toLowerCase() === 'boolean')
65
+ return 'boolean';
66
+ if (type.toLowerCase() === 'number')
67
+ return 'number';
68
+ }
69
+ return type;
70
+ }
71
+ async getElements() {
72
+ if (this._packageData)
73
+ return Promise.resolve(this._elementList);
74
+ if (!this._resolveStored) {
75
+ this._resolveStored = [];
76
+ this._rejectStored = [];
77
+ }
78
+ return new Promise((resolve, reject) => { this._resolveStored.push(resolve); this._rejectStored.push(reject); });
79
+ }
80
+ isHandledElement(designItem) {
81
+ if (this._elementList)
82
+ return this._elementList.find(x => x.tag == designItem.name) != null;
83
+ return false;
84
+ }
85
+ getProperties(designItem) {
86
+ return this._propertiesList[designItem.name];
87
+ }
88
+ getProperty(designItem, name) {
89
+ return this._propertiesList[designItem.name].find(x => x.name == name);
90
+ }
91
+ getPropertyTarget(designItem, property) {
92
+ return this._propertiesList[designItem.name].find(x => x.name == property.name).propertyType == PropertyType.attribute ? BindingTarget.attribute : BindingTarget.property;
93
+ }
94
+ }
@@ -0,0 +1,17 @@
1
+ import { BindingTarget } from "../../../item/BindingTarget.js";
2
+ import { IDesignItem } from "../../../item/IDesignItem.js";
3
+ import { IPropertiesService } from "../IPropertiesService.js";
4
+ import { IProperty } from "../IProperty.js";
5
+ import { UnkownElementPropertiesService } from "./UnkownElementPropertiesService.js";
6
+ export declare class WebcomponentManifestPropertiesService extends UnkownElementPropertiesService implements IPropertiesService {
7
+ private _name;
8
+ get name(): string;
9
+ private _propertiesList;
10
+ constructor(name: string, manifest: any);
11
+ private _parseManifest;
12
+ private manifestClassPropertyTypeToEditorPropertyType;
13
+ isHandledElement(designItem: IDesignItem): boolean;
14
+ getProperties(designItem: IDesignItem): IProperty[];
15
+ getProperty(designItem: IDesignItem, name: string): IProperty;
16
+ getPropertyTarget(designItem: IDesignItem, property: IProperty): BindingTarget;
17
+ }
@@ -0,0 +1,61 @@
1
+ import { BindingTarget } from "../../../item/BindingTarget.js";
2
+ import { PropertyType } from "../PropertyType.js";
3
+ import { UnkownElementPropertiesService } from "./UnkownElementPropertiesService.js";
4
+ export class WebcomponentManifestPropertiesService extends UnkownElementPropertiesService {
5
+ _name;
6
+ get name() { return this._name; }
7
+ _propertiesList;
8
+ constructor(name, manifest) {
9
+ super();
10
+ this._name = name;
11
+ this._parseManifest(manifest);
12
+ }
13
+ _parseManifest(manifest) {
14
+ this._propertiesList = {};
15
+ for (let m of manifest.modules) {
16
+ for (let e of m.exports) {
17
+ if (e.kind == 'custom-element-definition') {
18
+ let properties = [];
19
+ let declaration = m.declarations.find(x => x.name == e.declaration.name);
20
+ if (declaration) {
21
+ if (declaration.members) {
22
+ for (let d of declaration.members) {
23
+ if (d.kind == 'field') {
24
+ let pType = PropertyType.property;
25
+ if (declaration.attributes)
26
+ pType = declaration.attributes.find(x => x.fieldName == d.name) != null ? PropertyType.propertyAndAttribute : PropertyType.property;
27
+ properties.push({ name: d.name, service: this, propertyType: pType, type: this.manifestClassPropertyTypeToEditorPropertyType(d.type?.text) });
28
+ }
29
+ }
30
+ this._propertiesList[e.name] = properties;
31
+ }
32
+ }
33
+ else {
34
+ console.warn('declaration for ' + e.declaration.name + ' not found', manifest);
35
+ }
36
+ }
37
+ }
38
+ }
39
+ }
40
+ manifestClassPropertyTypeToEditorPropertyType(type) {
41
+ if (type) {
42
+ if (type.toLowerCase() === 'boolean')
43
+ return 'boolean';
44
+ if (type.toLowerCase() === 'number')
45
+ return 'number';
46
+ }
47
+ return type;
48
+ }
49
+ isHandledElement(designItem) {
50
+ return this._propertiesList[designItem.name] != null;
51
+ }
52
+ getProperties(designItem) {
53
+ return this._propertiesList[designItem.name];
54
+ }
55
+ getProperty(designItem, name) {
56
+ return this._propertiesList[designItem.name].find(x => x.name == name);
57
+ }
58
+ getPropertyTarget(designItem, property) {
59
+ return this._propertiesList[designItem.name].find(x => x.name == property.name).propertyType == PropertyType.attribute ? BindingTarget.attribute : BindingTarget.property;
60
+ }
61
+ }
@@ -1,3 +1,4 @@
1
+ import { NodeType } from "../../../../item/NodeType.js";
1
2
  export class SelectAllChildrenContextMenu {
2
3
  shouldProvideContextmenu(event, designerView, designItem, initiator) {
3
4
  return designItem.hasChildren;
@@ -5,7 +6,7 @@ export class SelectAllChildrenContextMenu {
5
6
  provideContextMenuItems(event, designerCanvas, designItem) {
6
7
  return [{
7
8
  title: 'Select all Children', action: () => {
8
- designerCanvas.instanceServiceContainer.selectionService.setSelectedElements(Array.from(designItem.children()));
9
+ designerCanvas.instanceServiceContainer.selectionService.setSelectedElements(Array.from(designItem.children()).filter(x => x.nodeType == NodeType.Element));
9
10
  }
10
11
  }];
11
12
  }
@@ -49,7 +49,7 @@ export class PaletteTreeView extends BaseCustomWebComponentConstructorAppend {
49
49
  static template = html `
50
50
  <div style="height: 100%;">
51
51
  <input id="input" style="width: 100%; height:21px;" placeholder="Filter..." autocomplete="off">
52
- <div style="height: calc(100% - 23px); overflow: auto;">
52
+ <div style="height: calc(100% - 26px); overflow: auto;">
53
53
  <div id="treetable" style="min-width: 100%;"></div>
54
54
  </div>
55
55
  </div>`;
package/dist/index.d.ts CHANGED
@@ -43,6 +43,7 @@ export type { IElementsJson } from "./elements/services/elementsService/IElement
43
43
  export type { IElementsService } from "./elements/services/elementsService/IElementsService.js";
44
44
  export * from "./elements/services/elementsService/JsonFileElementsService.js";
45
45
  export * from "./elements/services/elementsService/PreDefinedElementsService.js";
46
+ export * from "./elements/services/elementsService/WebcomponentManifestElementsService.js";
46
47
  export type { IHtmlWriterService } from "./elements/services/htmlWriterService/IHtmlWriterService.js";
47
48
  export type { IHtmlWriterOptions } from "./elements/services/htmlWriterService/IHtmlWriterOptions.js";
48
49
  export * from "./elements/services/htmlWriterService/AbstractHtmlWriterService.js";
@@ -71,6 +72,7 @@ export * from "./elements/services/propertiesService/services/LitElementProperti
71
72
  export * from "./elements/services/propertiesService/services/NativeElementsPropertiesService.js";
72
73
  export * from "./elements/services/propertiesService/services/PolymerPropertiesService.js";
73
74
  export * from "./elements/services/propertiesService/services/UnkownElementPropertiesService.js";
75
+ export * from "./elements/services/propertiesService/services/WebcomponentManifestPropertiesService.js";
74
76
  export * from "./elements/services/propertiesService/PropertyType.js";
75
77
  export * from "./elements/services/propertiesService/ValueType.js";
76
78
  export type { ISelectionChangedEvent } from "./elements/services/selectionService/ISelectionChangedEvent.js";
package/dist/index.js CHANGED
@@ -26,6 +26,7 @@ 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/elementsService/WebcomponentManifestElementsService.js";
29
30
  export * from "./elements/services/htmlWriterService/AbstractHtmlWriterService.js";
30
31
  export * from "./elements/services/htmlWriterService/FormatingHtmlWriterService.js";
31
32
  export * from "./elements/services/htmlWriterService/HtmlWriterService.js";
@@ -45,6 +46,7 @@ export * from "./elements/services/propertiesService/services/LitElementProperti
45
46
  export * from "./elements/services/propertiesService/services/NativeElementsPropertiesService.js";
46
47
  export * from "./elements/services/propertiesService/services/PolymerPropertiesService.js";
47
48
  export * from "./elements/services/propertiesService/services/UnkownElementPropertiesService.js";
49
+ export * from "./elements/services/propertiesService/services/WebcomponentManifestPropertiesService.js";
48
50
  export * from "./elements/services/propertiesService/PropertyType.js";
49
51
  export * from "./elements/services/propertiesService/ValueType.js";
50
52
  export * from "./elements/services/selectionService/SelectionService.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.103",
4
+ "version": "0.0.106",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "",