@node-projects/web-component-designer 0.0.259 → 0.0.261

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 { IProperty } from '../IProperty.js';
2
+ import { IDesignItem } from '../../../item/IDesignItem.js';
3
+ import { AbstractPropertiesService } from './AbstractPropertiesService.js';
4
+ import { RefreshMode } from '../IPropertiesService.js';
5
+ import { IPropertyGroup } from '../IPropertyGroup.js';
6
+ export declare class CommonPropertiesService extends AbstractPropertiesService {
7
+ getRefreshMode(designItem: IDesignItem): RefreshMode;
8
+ private commonProperties;
9
+ name: string;
10
+ isHandledElement(designItem: IDesignItem): boolean;
11
+ getProperty(designItem: IDesignItem, name: string): IProperty;
12
+ getProperties(designItem: IDesignItem): IProperty[] | IPropertyGroup[];
13
+ }
@@ -0,0 +1,44 @@
1
+ import { PropertyType } from '../PropertyType.js';
2
+ import { AbstractPropertiesService } from './AbstractPropertiesService.js';
3
+ import { RefreshMode } from '../IPropertiesService.js';
4
+ export class CommonPropertiesService extends AbstractPropertiesService {
5
+ getRefreshMode(designItem) {
6
+ return RefreshMode.none;
7
+ }
8
+ //@ts-ignore
9
+ commonProperties = [
10
+ {
11
+ name: "id",
12
+ type: "string",
13
+ service: this,
14
+ propertyType: PropertyType.propertyAndAttribute
15
+ }, {
16
+ name: "class",
17
+ type: "string",
18
+ service: this,
19
+ attributeName: "class",
20
+ propertyName: "className",
21
+ propertyType: PropertyType.propertyAndAttribute
22
+ }, {
23
+ name: "title",
24
+ type: "string",
25
+ service: this,
26
+ propertyType: PropertyType.propertyAndAttribute
27
+ }, {
28
+ name: "tabindex",
29
+ type: "number",
30
+ service: this,
31
+ propertyType: PropertyType.propertyAndAttribute
32
+ }
33
+ ];
34
+ name = "common";
35
+ isHandledElement(designItem) {
36
+ return true;
37
+ }
38
+ getProperty(designItem, name) {
39
+ return this.commonProperties[name];
40
+ }
41
+ getProperties(designItem) {
42
+ return this.commonProperties;
43
+ }
44
+ }
@@ -36,7 +36,7 @@ export class CommonPropertiesService extends AbstractPropertiesService {
36
36
  return true;
37
37
  }
38
38
  getProperty(designItem, name) {
39
- return this.commonProperties[name];
39
+ return this.commonProperties.find(x => x.name == name);
40
40
  }
41
41
  getProperties(designItem) {
42
42
  return this.commonProperties;
@@ -0,0 +1,18 @@
1
+ import { IProperty } from '../IProperty.js';
2
+ import { IDesignItem } from '../../../item/IDesignItem.js';
3
+ import { AbstractPropertiesService } from './AbstractPropertiesService.js';
4
+ import { RefreshMode } from '../IPropertiesService.js';
5
+ import { IPropertyGroup } from '../IPropertyGroup.js';
6
+ import { ValueType } from '../ValueType.js';
7
+ export declare class ContentAndIdPropertiesService extends AbstractPropertiesService {
8
+ getRefreshMode(designItem: IDesignItem): RefreshMode;
9
+ contentProperty: IProperty;
10
+ idProperty: IProperty;
11
+ name: string;
12
+ isHandledElement(designItem: IDesignItem): boolean;
13
+ getProperty(designItem: IDesignItem, name: string): IProperty;
14
+ getProperties(designItem: IDesignItem): IProperty[] | IPropertyGroup[];
15
+ clearValue(designItems: IDesignItem[], property: IProperty): void;
16
+ isSet(designItems: IDesignItem[], property: IProperty): ValueType;
17
+ getValue(designItems: IDesignItem[], property: IProperty): string | boolean;
18
+ }
@@ -0,0 +1,68 @@
1
+ import { PropertyType } from '../PropertyType.js';
2
+ import { AbstractPropertiesService } from './AbstractPropertiesService.js';
3
+ import { RefreshMode } from '../IPropertiesService.js';
4
+ import { ValueType } from '../ValueType.js';
5
+ import { BindingTarget } from '../../../item/BindingTarget.js';
6
+ export class ContentAndIdPropertiesService extends AbstractPropertiesService {
7
+ getRefreshMode(designItem) {
8
+ return RefreshMode.none;
9
+ }
10
+ contentProperty = {
11
+ name: "textContent",
12
+ type: "string",
13
+ service: this,
14
+ propertyType: PropertyType.property
15
+ };
16
+ idProperty = {
17
+ name: "id",
18
+ type: "string",
19
+ service: this,
20
+ propertyType: PropertyType.propertyAndAttribute
21
+ };
22
+ name = "content";
23
+ isHandledElement(designItem) {
24
+ return true;
25
+ }
26
+ getProperty(designItem, name) {
27
+ return name == 'id' ? this.idProperty : this.contentProperty;
28
+ }
29
+ getProperties(designItem) {
30
+ return [this.idProperty, this.contentProperty];
31
+ }
32
+ clearValue(designItems, property) {
33
+ if (property.name == this.contentProperty.name) {
34
+ designItems[0].clearChildren();
35
+ }
36
+ else {
37
+ super.clearValue(designItems, property);
38
+ }
39
+ }
40
+ isSet(designItems, property) {
41
+ if (property.name == this.contentProperty.name) {
42
+ let all = true;
43
+ let some = false;
44
+ if (designItems != null && designItems.length !== 0) {
45
+ designItems.forEach((x) => {
46
+ let has = false;
47
+ has = x.element.childNodes.length > 0;
48
+ all = all && has;
49
+ some = some || has;
50
+ });
51
+ //todo: optimize perf, do not call bindings service for each property.
52
+ const bindings = designItems[0].serviceContainer.forSomeServicesTillResult('bindingService', (s) => {
53
+ return s.getBindings(designItems[0]);
54
+ });
55
+ if (bindings && bindings.find(x => x.target == BindingTarget.property && x.targetName == property.name))
56
+ return ValueType.bound;
57
+ }
58
+ return all ? ValueType.all : some ? ValueType.some : ValueType.none;
59
+ }
60
+ return super.isSet(designItems, property);
61
+ }
62
+ getValue(designItems, property) {
63
+ if (property.name == this.contentProperty.name) {
64
+ return designItems[0].element.textContent;
65
+ }
66
+ return super.getValue(designItems, property);
67
+ }
68
+ }
@@ -0,0 +1,14 @@
1
+ import { IProperty } from '../IProperty.js';
2
+ import { IDesignItem } from '../../../item/IDesignItem.js';
3
+ import { AbstractPropertiesService } from './AbstractPropertiesService.js';
4
+ import { RefreshMode } from '../IPropertiesService.js';
5
+ import { IPropertyGroup } from '../IPropertyGroup.js';
6
+ export declare class ContentAndIdPropertiesService extends AbstractPropertiesService {
7
+ getRefreshMode(designItem: IDesignItem): RefreshMode;
8
+ contentProperty: IProperty;
9
+ private idProperty;
10
+ name: string;
11
+ isHandledElement(designItem: IDesignItem): boolean;
12
+ getProperty(designItem: IDesignItem, name: string): IProperty;
13
+ getProperties(designItem: IDesignItem): IProperty[] | IPropertyGroup[];
14
+ }
@@ -0,0 +1,30 @@
1
+ import { PropertyType } from '../PropertyType.js';
2
+ import { AbstractPropertiesService } from './AbstractPropertiesService.js';
3
+ import { RefreshMode } from '../IPropertiesService.js';
4
+ export class ContentAndIdPropertiesService extends AbstractPropertiesService {
5
+ getRefreshMode(designItem) {
6
+ return RefreshMode.none;
7
+ }
8
+ contentProperty = {
9
+ name: "content",
10
+ type: "string",
11
+ service: this,
12
+ propertyType: PropertyType.complex
13
+ };
14
+ idProperty = {
15
+ name: "content",
16
+ type: "string",
17
+ service: this,
18
+ propertyType: PropertyType.complex
19
+ };
20
+ name = "content";
21
+ isHandledElement(designItem) {
22
+ return true;
23
+ }
24
+ getProperty(designItem, name) {
25
+ return name == 'id' ? this.idProperty : this.contentProperty;
26
+ }
27
+ getProperties(designItem) {
28
+ return [this.idProperty, this.contentProperty];
29
+ }
30
+ }
@@ -90,7 +90,7 @@ export class CssPropertiesService extends CommonPropertiesService {
90
90
  return true;
91
91
  }
92
92
  getProperty(designItem, name) {
93
- return this[this.name][name];
93
+ return this._getPropertyDef(name);
94
94
  }
95
95
  getProperties(designItem) {
96
96
  const propNames = this[this.name];
@@ -183,7 +183,7 @@ export class NativeElementsPropertiesService extends CommonPropertiesService {
183
183
  return false;
184
184
  }
185
185
  getProperty(designItem, name) {
186
- return this.getProperties(designItem)[name];
186
+ return this.getProperties(designItem).find(x => x.name == name);
187
187
  }
188
188
  getProperties(designItem) {
189
189
  if (!this.isHandledElement(designItem))
@@ -237,7 +237,7 @@ export class SVGElementsPropertiesService extends CommonPropertiesService {
237
237
  return false;
238
238
  }
239
239
  getProperty(designItem, name) {
240
- return this.getProperties(designItem)[name];
240
+ return this.getProperties(designItem).find(x => x.name == name);
241
241
  }
242
242
  getProperties(designItem) {
243
243
  if (!this.isHandledElement(designItem))
@@ -1,6 +1,7 @@
1
1
  import { IProperty } from '../../services/propertiesService/IProperty.js';
2
2
  import { ServiceContainer } from '../../services/ServiceContainer.js';
3
3
  import { BaseCustomWebComponentLazyAppend } from '@node-projects/base-custom-webcomponent';
4
+ import { IPropertyEditor } from '../../services/propertiesService/IPropertyEditor.js';
4
5
  import { IDesignItem } from '../../item/IDesignItem.js';
5
6
  import { IPropertiesService } from '../../services/propertiesService/IPropertiesService.js';
6
7
  export declare class PropertyGridPropertyList extends BaseCustomWebComponentLazyAppend {
@@ -17,6 +18,8 @@ export declare class PropertyGridPropertyList extends BaseCustomWebComponentLazy
17
18
  private createPropertyGroups;
18
19
  private createPropertyEditors;
19
20
  openContextMenu(event: MouseEvent, property: IProperty): void;
21
+ static openContextMenu(event: MouseEvent, designItems: IDesignItem[], property: IProperty): void;
20
22
  designItemsChanged(designItems: IDesignItem[]): void;
21
23
  refreshForDesignItems(items: IDesignItem[]): void;
24
+ static refreshIsSetElementAndEditorForDesignItems(isSetElement: HTMLElement, property: IProperty, items: IDesignItem[], propertiesService: IPropertiesService, editor?: IPropertyEditor): void;
22
25
  }
@@ -207,22 +207,25 @@ export class PropertyGridPropertyList extends BaseCustomWebComponentLazyAppend {
207
207
  }
208
208
  }
209
209
  openContextMenu(event, property) {
210
+ PropertyGridPropertyList.openContextMenu(event, this._designItems, property);
211
+ }
212
+ static openContextMenu(event, designItems, property) {
210
213
  const ctxMenu = [
211
214
  {
212
215
  title: 'clear', action: (e) => {
213
- property.service.clearValue(this._designItems, property);
214
- this._designItems[0].instanceServiceContainer.designerCanvas.extensionManager.refreshAllExtensions(this._designItems);
216
+ property.service.clearValue(designItems, property);
217
+ designItems[0].instanceServiceContainer.designerCanvas.extensionManager.refreshAllExtensions(designItems);
215
218
  }
216
219
  },
217
220
  ];
218
- if (this._serviceContainer.config.openBindingsEditor) {
221
+ if (designItems[0].serviceContainer.config.openBindingsEditor) {
219
222
  ctxMenu.push(...[
220
223
  { title: '-' },
221
224
  {
222
225
  title: 'edit binding', action: () => {
223
- let target = this._propertiesService.getPropertyTarget(this._designItems[0], property);
224
- let binding = this._propertiesService.getBinding(this._designItems, property);
225
- this._serviceContainer.config.openBindingsEditor(property, this._designItems, binding, target);
226
+ let target = property.service.getPropertyTarget(designItems[0], property);
227
+ let binding = property.service.getBinding(designItems, property);
228
+ designItems[0].serviceContainer.config.openBindingsEditor(property, designItems, binding, target);
226
229
  }
227
230
  }
228
231
  ]);
@@ -238,21 +241,24 @@ export class PropertyGridPropertyList extends BaseCustomWebComponentLazyAppend {
238
241
  }
239
242
  refreshForDesignItems(items) {
240
243
  for (let m of this._propertyMap) {
241
- let s = this._propertiesService.isSet(items, m[0]);
242
- let v = this._propertiesService.getValue(items, m[0]);
243
- m[1].isSetElement.title = s;
244
- if (s == ValueType.none) {
245
- m[1].isSetElement.style.background = '';
246
- v = this._propertiesService.getUnsetValue(items, m[0]);
247
- }
248
- else if (s == ValueType.all)
249
- m[1].isSetElement.style.background = 'white';
250
- else if (s == ValueType.some)
251
- m[1].isSetElement.style.background = 'gray';
252
- else if (s == ValueType.bound)
253
- m[1].isSetElement.style.background = 'orange';
254
- m[1].editor.refreshValueWithoutNotification(s, v);
244
+ PropertyGridPropertyList.refreshIsSetElementAndEditorForDesignItems(m[1].isSetElement, m[0], items, this._propertiesService, m[1].editor);
245
+ }
246
+ }
247
+ static refreshIsSetElementAndEditorForDesignItems(isSetElement, property, items, propertiesService, editor) {
248
+ let s = propertiesService.isSet(items, property);
249
+ let v = propertiesService.getValue(items, property);
250
+ isSetElement.title = s;
251
+ if (s == ValueType.none) {
252
+ isSetElement.style.background = '';
253
+ v = propertiesService.getUnsetValue(items, property);
255
254
  }
255
+ else if (s == ValueType.all)
256
+ isSetElement.style.background = 'white';
257
+ else if (s == ValueType.some)
258
+ isSetElement.style.background = 'gray';
259
+ else if (s == ValueType.bound)
260
+ isSetElement.style.background = 'orange';
261
+ editor?.refreshValueWithoutNotification(s, v);
256
262
  }
257
263
  }
258
264
  customElements.define('node-projects-property-grid-property-list', PropertyGridPropertyList);
@@ -10,6 +10,9 @@ export declare class PropertyGridWithHeader extends BaseCustomWebComponentLazyAp
10
10
  private _pg;
11
11
  private _selectionChangedHandler;
12
12
  private _instanceServiceContainer;
13
+ private _idRect;
14
+ private _contentRect;
15
+ private _propertiesService;
13
16
  constructor();
14
17
  set serviceContainer(value: ServiceContainer);
15
18
  set instanceServiceContainer(value: InstanceServiceContainer);
@@ -1,6 +1,8 @@
1
1
  import { BaseCustomWebComponentLazyAppend, css, html } from '@node-projects/base-custom-webcomponent';
2
2
  import { sleep } from '../../helper/Helper.js';
3
3
  import { NodeType } from '../../item/NodeType.js';
4
+ import { PropertyGridPropertyList } from './PropertyGridPropertyList.js';
5
+ import { ContentAndIdPropertiesService } from '../../services/propertiesService/services/ContentAndIdPropertiesService.js';
4
6
  export class PropertyGridWithHeader extends BaseCustomWebComponentLazyAppend {
5
7
  static style = css `
6
8
  :host {
@@ -11,9 +13,9 @@ export class PropertyGridWithHeader extends BaseCustomWebComponentLazyAppend {
11
13
  background: var(--medium-grey, #2f3545);
12
14
  color: white;
13
15
  }
14
- div {
16
+ div.root {
15
17
  display: grid;
16
- grid-template-columns: auto 1fr;
18
+ grid-template-columns: 15px auto 1fr;
17
19
  padding: 3px 6px;
18
20
  font-family: monospace;
19
21
  align-items: center;
@@ -41,9 +43,11 @@ export class PropertyGridWithHeader extends BaseCustomWebComponentLazyAppend {
41
43
  }
42
44
  `;
43
45
  static template = html `
44
- <div>
45
- <span class="desc">Type:</span><span id="type"></span>
46
+ <div class="root">
47
+ <span style="grid-column: span 2;" class="desc">Type:</span><span id="type"></span>
48
+ <div id="idRect" style="width: 7px; height: 7px; border: 1px solid white;"></div>
46
49
  <span class="desc">Id:</span><input type="text" id="id">
50
+ <div id="contentRect" style="width: 7px; height: 7px; border: 1px solid white;"></div>
47
51
  <span class="desc">Content:</span><input type="text" id="content">
48
52
  </div>
49
53
  <node-projects-property-grid id="pg"></node-projects-property-grid>
@@ -54,6 +58,9 @@ export class PropertyGridWithHeader extends BaseCustomWebComponentLazyAppend {
54
58
  _pg;
55
59
  _selectionChangedHandler;
56
60
  _instanceServiceContainer;
61
+ _idRect;
62
+ _contentRect;
63
+ _propertiesService;
57
64
  constructor() {
58
65
  super();
59
66
  this._restoreCachedInititalValues();
@@ -61,6 +68,17 @@ export class PropertyGridWithHeader extends BaseCustomWebComponentLazyAppend {
61
68
  this._id = this._getDomElement('id');
62
69
  this._content = this._getDomElement('content');
63
70
  this._pg = this._getDomElement('pg');
71
+ this._idRect = this._getDomElement('idRect');
72
+ this._contentRect = this._getDomElement('contentRect');
73
+ this._propertiesService = new ContentAndIdPropertiesService();
74
+ this._idRect.oncontextmenu = (event) => {
75
+ event.preventDefault();
76
+ PropertyGridPropertyList.openContextMenu(event, this._instanceServiceContainer.selectionService.selectedElements, this._propertiesService.idProperty);
77
+ };
78
+ this._contentRect.oncontextmenu = (event) => {
79
+ event.preventDefault();
80
+ PropertyGridPropertyList.openContextMenu(event, this._instanceServiceContainer.selectionService.selectedElements, this._propertiesService.contentProperty);
81
+ };
64
82
  this._id.onkeydown = e => {
65
83
  if (e.key == 'Enter')
66
84
  this._instanceServiceContainer.selectionService.primarySelection.id = this._id.value;
@@ -111,6 +129,8 @@ export class PropertyGridWithHeader extends BaseCustomWebComponentLazyAppend {
111
129
  else
112
130
  this._content.value = '';
113
131
  this._content.title = this._content.value;
132
+ PropertyGridPropertyList.refreshIsSetElementAndEditorForDesignItems(this._idRect, this._propertiesService.idProperty, this._instanceServiceContainer.selectionService.selectedElements, this._propertiesService);
133
+ PropertyGridPropertyList.refreshIsSetElementAndEditorForDesignItems(this._contentRect, this._propertiesService.contentProperty, this._instanceServiceContainer.selectionService.selectedElements, this._propertiesService);
114
134
  });
115
135
  }
116
136
  }
package/dist/index.d.ts CHANGED
@@ -102,6 +102,7 @@ export * from "./elements/services/propertiesService/propertyEditors/special/Gri
102
102
  export * from "./elements/services/propertiesService/services/PropertiesHelper.js";
103
103
  export * from "./elements/services/propertiesService/services/BaseCustomWebComponentPropertiesService.js";
104
104
  export * from "./elements/services/propertiesService/services/CommonPropertiesService.js";
105
+ export * from "./elements/services/propertiesService/services/ContentAndIdPropertiesService.js";
105
106
  export * from "./elements/services/propertiesService/services/CssCurrentPropertiesService.js";
106
107
  export * from "./elements/services/propertiesService/services/CssPropertiesService.js";
107
108
  export * from "./elements/services/propertiesService/services/ListPropertiesService.js";
package/dist/index.js CHANGED
@@ -65,6 +65,7 @@ export * from "./elements/services/propertiesService/propertyEditors/special/Gri
65
65
  export * from "./elements/services/propertiesService/services/PropertiesHelper.js";
66
66
  export * from "./elements/services/propertiesService/services/BaseCustomWebComponentPropertiesService.js";
67
67
  export * from "./elements/services/propertiesService/services/CommonPropertiesService.js";
68
+ export * from "./elements/services/propertiesService/services/ContentAndIdPropertiesService.js";
68
69
  export * from "./elements/services/propertiesService/services/CssCurrentPropertiesService.js";
69
70
  export * from "./elements/services/propertiesService/services/CssPropertiesService.js";
70
71
  export * from "./elements/services/propertiesService/services/ListPropertiesService.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.259",
4
+ "version": "0.0.261",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "",