@node-projects/web-component-designer 0.0.45 → 0.0.49

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 (33) hide show
  1. package/dist/elements/item/DesignItem.js +11 -0
  2. package/dist/elements/item/IDesignItem.d.ts +1 -1
  3. package/dist/elements/services/InstanceServiceContainer.d.ts +3 -0
  4. package/dist/elements/services/InstanceServiceContainer.js +5 -0
  5. package/dist/elements/services/contentService/IContentChanged.d.ts +3 -3
  6. package/dist/elements/services/undoService/transactionItems/DeleteAction.js +2 -0
  7. package/dist/elements/services/undoService/transactionItems/InsertAction.js +2 -0
  8. package/dist/elements/services/undoService/transactionItems/MoveElementInDomAction.js +2 -0
  9. package/dist/elements/widgets/designerView/designerCanvas.js +4 -3
  10. package/dist/elements/widgets/designerView/extensions/contextMenu/CopyPasteContextMenu.d.ts +2 -2
  11. package/dist/elements/widgets/designerView/extensions/contextMenu/CopyPasteContextMenu.js +1 -1
  12. package/dist/elements/widgets/designerView/extensions/contextMenu/IContextMenuExtension.d.ts +2 -1
  13. package/dist/elements/widgets/designerView/extensions/contextMenu/ItemsBelowContextMenu.d.ts +2 -2
  14. package/dist/elements/widgets/designerView/extensions/contextMenu/ItemsBelowContextMenu.js +4 -3
  15. package/dist/elements/widgets/designerView/extensions/contextMenu/MultipleItemsSelectedContextMenu.d.ts +2 -2
  16. package/dist/elements/widgets/designerView/extensions/contextMenu/MultipleItemsSelectedContextMenu.js +1 -1
  17. package/dist/elements/widgets/designerView/extensions/contextMenu/ZMoveContextMenu.d.ts +2 -2
  18. package/dist/elements/widgets/designerView/extensions/contextMenu/ZMoveContextMenu.js +1 -1
  19. package/dist/elements/widgets/designerView/tools/PointerTool.js +4 -2
  20. package/dist/elements/widgets/designerView/tools/RectangleSelectorTool.js +0 -1
  21. package/dist/elements/widgets/propertyGrid/PropertyGrid copy.d.ts +17 -0
  22. package/dist/elements/widgets/propertyGrid/PropertyGrid copy.js +143 -0
  23. package/dist/elements/widgets/propertyGrid/PropertyGrid.d.ts +4 -0
  24. package/dist/elements/widgets/propertyGrid/PropertyGrid.js +10 -15
  25. package/dist/elements/widgets/propertyGrid/PropertyGridWithHeader.d.ts +15 -0
  26. package/dist/elements/widgets/propertyGrid/PropertyGridWithHeader.js +86 -0
  27. package/dist/elements/widgets/treeView/treeView.d.ts +5 -0
  28. package/dist/elements/widgets/treeView/treeView.js +15 -0
  29. package/dist/elements/widgets/treeView/treeViewExtended.d.ts +7 -0
  30. package/dist/elements/widgets/treeView/treeViewExtended.js +56 -37
  31. package/dist/index.d.ts +2 -1
  32. package/dist/index.js +1 -0
  33. package/package.json +1 -1
@@ -1,6 +1,8 @@
1
1
  import { CssStyleChangeAction } from '../services/undoService/transactionItems/CssStyleChangeAction';
2
2
  import { NodeType } from './NodeType';
3
3
  import { AttributeChangeAction } from '../services/undoService/transactionItems/AttributeChangeAction';
4
+ //import { PropertyChangeAction } from '../services/undoService/transactionItems/PropertyChangeAction';
5
+ import { ExtensionType } from '../widgets/designerView/extensions/ExtensionType';
4
6
  import { DomHelper } from '@node-projects/base-custom-webcomponent/dist/DomHelper';
5
7
  import { CssAttributeParser } from '../helper/CssAttributeParser.js';
6
8
  const hideAtDesignTimeAttributeName = 'node-projects-hide-at-design-time';
@@ -43,6 +45,7 @@ export class DesignItem {
43
45
  }
44
46
  set id(value) {
45
47
  this.element.id = value;
48
+ this.setAttribute("id", value);
46
49
  }
47
50
  get isRootItem() {
48
51
  return this.instanceServiceContainer.contentService.rootDesignItem === this;
@@ -66,6 +69,9 @@ export class DesignItem {
66
69
  return this.getOrCreateDesignItem(this.element.parentNode);
67
70
  }
68
71
  insertChild(designItem, index) {
72
+ //todo... via undoredo system....
73
+ if (designItem.parent && this.instanceServiceContainer.selectionService.primarySelection == designItem)
74
+ designItem.instanceServiceContainer.designerCanvas.extensionManager.removeExtension(designItem.parent, ExtensionType.PrimarySelectionContainer);
69
75
  if (designItem.parent) {
70
76
  designItem.parent.removeChild(designItem);
71
77
  }
@@ -79,8 +85,13 @@ export class DesignItem {
79
85
  this.node.insertBefore(designItem.node, el.element);
80
86
  this._childArray.splice(index, 0, designItem);
81
87
  }
88
+ if (this.instanceServiceContainer.selectionService.primarySelection == designItem)
89
+ designItem.instanceServiceContainer.designerCanvas.extensionManager.applyExtension(designItem.parent, ExtensionType.PrimarySelectionContainer);
82
90
  }
83
91
  removeChild(designItem) {
92
+ //todo... via undoredo system....
93
+ if (designItem.parent && this.instanceServiceContainer.selectionService.primarySelection == designItem)
94
+ designItem.instanceServiceContainer.designerCanvas.extensionManager.removeExtension(designItem.parent, ExtensionType.PrimarySelectionContainer);
84
95
  const index = this._childArray.indexOf(designItem);
85
96
  if (index > -1) {
86
97
  this._childArray.splice(index, 1);
@@ -8,7 +8,7 @@ export interface IDesignItem {
8
8
  replaceNode(newNode: Node): any;
9
9
  readonly nodeType: NodeType;
10
10
  readonly name: string;
11
- readonly id: string;
11
+ id: string;
12
12
  readonly isRootItem: boolean;
13
13
  readonly hasAttributes: boolean;
14
14
  readonly attributes: Map<string, string>;
@@ -3,6 +3,7 @@ import { IUndoService } from './undoService/IUndoService';
3
3
  import { BaseServiceContainer } from './BaseServiceContainer';
4
4
  import { IContentService } from './contentService/IContentService';
5
5
  import { IDesignContext } from '../widgets/designerView/IDesignContext';
6
+ import { IDesignerCanvas } from '../widgets/designerView/IDesignerCanvas.js';
6
7
  interface InstanceServiceNameMap {
7
8
  "undoService": IUndoService;
8
9
  "selectionService": ISelectionService;
@@ -10,6 +11,8 @@ interface InstanceServiceNameMap {
10
11
  }
11
12
  export declare class InstanceServiceContainer extends BaseServiceContainer<InstanceServiceNameMap> {
12
13
  designContext: IDesignContext;
14
+ readonly designerCanvas: IDesignerCanvas;
15
+ constructor(designerCanvas: IDesignerCanvas);
13
16
  get undoService(): IUndoService;
14
17
  get selectionService(): ISelectionService;
15
18
  get contentService(): IContentService;
@@ -2,6 +2,11 @@ import { BaseServiceContainer } from './BaseServiceContainer';
2
2
  import { DesignContext } from '../widgets/designerView/DesignContext';
3
3
  export class InstanceServiceContainer extends BaseServiceContainer {
4
4
  designContext = new DesignContext();
5
+ designerCanvas;
6
+ constructor(designerCanvas) {
7
+ super();
8
+ this.designerCanvas = designerCanvas;
9
+ }
5
10
  get undoService() {
6
11
  return this.getLastService('undoService');
7
12
  }
@@ -1,5 +1,5 @@
1
+ import { IDesignItem } from "../../item/IDesignItem.js";
1
2
  export interface IContentChanged {
2
- changeType: "added" | "removed" | "moved";
3
- element: HTMLElement;
4
- parent: HTMLElement;
3
+ changeType: "added" | "removed" | "moved" | 'parsed';
4
+ designItems?: IDesignItem[];
5
5
  }
@@ -13,6 +13,7 @@ export class DeleteAction {
13
13
  for (let n = 0; n < this.deletedItems.length; n++) {
14
14
  this._parentItems[n].insertChild(this.deletedItems[n], this._parentIndexes[n]);
15
15
  }
16
+ this.affectedItems[0].instanceServiceContainer.contentService.onContentChanged.emit({ changeType: 'added', designItems: this.deletedItems });
16
17
  }
17
18
  do() {
18
19
  this._parentItems = [];
@@ -25,6 +26,7 @@ export class DeleteAction {
25
26
  this.deletedItems[n].remove();
26
27
  }
27
28
  this.extensionManager.removeExtensions(this.deletedItems);
29
+ this.affectedItems[0].instanceServiceContainer.contentService.onContentChanged.emit({ changeType: 'removed', designItems: this.deletedItems });
28
30
  }
29
31
  deletedItems;
30
32
  extensionManager;
@@ -11,12 +11,14 @@ export class InsertAction {
11
11
  }
12
12
  undo() {
13
13
  this.newItem.element.remove();
14
+ this.affectedItems[0].instanceServiceContainer.contentService.onContentChanged.emit({ changeType: 'removed', designItems: [this.newItem] });
14
15
  }
15
16
  do() {
16
17
  this.designItem.insertChild(this.newItem, this.index);
17
18
  const prepService = this.designItem.serviceContainer.prepareElementsForDesignerService;
18
19
  if (prepService)
19
20
  requestAnimationFrame(() => prepService.prepareElementsForDesigner(this.newItem));
21
+ this.affectedItems[0].instanceServiceContainer.contentService.onContentChanged.emit({ changeType: 'added', designItems: [this.newItem] });
20
22
  }
21
23
  designItem;
22
24
  index;
@@ -13,9 +13,11 @@ export class MoveElementInDomAction {
13
13
  }
14
14
  undo() {
15
15
  this.oldTarget.element.insertAdjacentElement(this.oldPosition, this.designItem.element);
16
+ this.affectedItems[0].instanceServiceContainer.contentService.onContentChanged.emit({ changeType: 'moved', designItems: [this.designItem] });
16
17
  }
17
18
  do() {
18
19
  this.newTarget.element.insertAdjacentElement(this.newPosition, this.designItem.element);
20
+ this.affectedItems[0].instanceServiceContainer.contentService.onContentChanged.emit({ changeType: 'moved', designItems: [this.designItem] });
19
21
  }
20
22
  designItem;
21
23
  newTarget;
@@ -115,7 +115,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
115
115
  this._canvas = this._getDomElement('node-projects-designer-canvas-canvas');
116
116
  this._canvasContainer = this._getDomElement('node-projects-designer-canvas-canvasContainer');
117
117
  this._outercanvas2 = this._getDomElement('node-projects-designer-canvas-outercanvas2');
118
- this.instanceServiceContainer = new InstanceServiceContainer();
118
+ this.instanceServiceContainer = new InstanceServiceContainer(this);
119
119
  this.instanceServiceContainer.register("undoService", new UndoService(this));
120
120
  this.instanceServiceContainer.register("selectionService", new SelectionService);
121
121
  this.extensionManager = new ExtensionManager(this);
@@ -163,7 +163,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
163
163
  async executeCommand(command) {
164
164
  const modelCommandService = this.serviceContainer.modelCommandService;
165
165
  if (modelCommandService) {
166
- let handeled = modelCommandService.executeCommand(this, command);
166
+ let handeled = await modelCommandService.executeCommand(this, command);
167
167
  if (handeled != null)
168
168
  return;
169
169
  }
@@ -318,6 +318,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
318
318
  DomHelper.removeAllChildnodes(this.overlayLayer);
319
319
  this.rootDesignItem.clearChildren();
320
320
  this.addDesignItems(designItems);
321
+ this.instanceServiceContainer.contentService.onContentChanged.emit({ changeType: 'parsed' });
321
322
  }
322
323
  addDesignItems(designItems) {
323
324
  if (designItems) {
@@ -396,7 +397,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
396
397
  showDesignItemContextMenu(designItem, event) {
397
398
  const mnuItems = [];
398
399
  for (let cme of this.serviceContainer.designerContextMenuExtensions) {
399
- if (cme.shouldProvideContextmenu(event, this, designItem)) {
400
+ if (cme.shouldProvideContextmenu(event, this, designItem, 'designer')) {
400
401
  mnuItems.push(...cme.provideContextMenuItems(event, this, designItem));
401
402
  }
402
403
  }
@@ -1,8 +1,8 @@
1
1
  import { IContextMenuItem } from "../../../../helper/contextMenu/IContextmenuItem";
2
2
  import { IDesignItem } from "../../../../item/IDesignItem";
3
3
  import { IDesignerCanvas } from "../../IDesignerCanvas";
4
- import { IContextMenuExtension } from "./IContextMenuExtension";
4
+ import { ContextmenuInitiator, IContextMenuExtension } from "./IContextMenuExtension";
5
5
  export declare class CopyPasteContextMenu implements IContextMenuExtension {
6
- shouldProvideContextmenu(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
6
+ shouldProvideContextmenu(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem, initiator: ContextmenuInitiator): boolean;
7
7
  provideContextMenuItems(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem): IContextMenuItem[];
8
8
  }
@@ -1,6 +1,6 @@
1
1
  import { CommandType } from "../../../../../commandHandling/CommandType";
2
2
  export class CopyPasteContextMenu {
3
- shouldProvideContextmenu(event, designerView, designItem) {
3
+ shouldProvideContextmenu(event, designerView, designItem, initiator) {
4
4
  return true;
5
5
  }
6
6
  provideContextMenuItems(event, designerView, designItem) {
@@ -1,7 +1,8 @@
1
1
  import { IContextMenuItem } from "../../../../helper/contextMenu/IContextmenuItem";
2
2
  import { IDesignItem } from "../../../../item/IDesignItem";
3
3
  import { IDesignerCanvas } from "../../IDesignerCanvas";
4
+ export declare type ContextmenuInitiator = 'designer' | 'treeView' | 'other';
4
5
  export interface IContextMenuExtension {
5
- shouldProvideContextmenu(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem): any;
6
+ shouldProvideContextmenu(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem, initiator: ContextmenuInitiator): any;
6
7
  provideContextMenuItems(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem): IContextMenuItem[];
7
8
  }
@@ -1,9 +1,9 @@
1
1
  import { IContextMenuItem } from "../../../../helper/contextMenu/IContextmenuItem";
2
2
  import { IDesignItem } from "../../../../item/IDesignItem";
3
3
  import { IDesignerCanvas } from "../../IDesignerCanvas";
4
- import { IContextMenuExtension } from "./IContextMenuExtension";
4
+ import { ContextmenuInitiator, IContextMenuExtension } from "./IContextMenuExtension";
5
5
  export declare class ItemsBelowContextMenu implements IContextMenuExtension {
6
- shouldProvideContextmenu(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
6
+ shouldProvideContextmenu(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem, initiator: ContextmenuInitiator): boolean;
7
7
  provideContextMenuItems(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem): IContextMenuItem[];
8
8
  private _select;
9
9
  private _searchForItemsBelow;
@@ -1,7 +1,7 @@
1
1
  import { DesignItem } from "../../../../item/DesignItem";
2
2
  export class ItemsBelowContextMenu {
3
- shouldProvideContextmenu(event, designerView, designItem) {
4
- return true;
3
+ shouldProvideContextmenu(event, designerView, designItem, initiator) {
4
+ return initiator == 'designer';
5
5
  }
6
6
  provideContextMenuItems(event, designerView, designItem) {
7
7
  const lstItems = this._searchForItemsBelow(event, designerView);
@@ -31,7 +31,8 @@ export class ItemsBelowContextMenu {
31
31
  break;
32
32
  if (el !== designerView.overlayLayer && el.parentElement !== designerView.overlayLayer && el.getRootNode() === designerView.shadowRoot)
33
33
  lstEl.push(el);
34
- backupPEventsMap.set(el, el.style.pointerEvents);
34
+ if (!backupPEventsMap.has(el))
35
+ backupPEventsMap.set(el, el.style.pointerEvents);
35
36
  el.style.pointerEvents = 'none';
36
37
  const oldEl = el;
37
38
  el = designerView.elementFromPoint(event.x, event.y);
@@ -1,9 +1,9 @@
1
1
  import { IContextMenuItem } from "../../../../helper/contextMenu/IContextmenuItem";
2
2
  import { IDesignItem } from "../../../../item/IDesignItem";
3
3
  import { IDesignerCanvas } from "../../IDesignerCanvas";
4
- import { IContextMenuExtension } from "./IContextMenuExtension";
4
+ import { ContextmenuInitiator, IContextMenuExtension } from "./IContextMenuExtension";
5
5
  export declare class MultipleItemsSelectedContextMenu implements IContextMenuExtension {
6
6
  orderIndex: number;
7
- shouldProvideContextmenu(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
7
+ shouldProvideContextmenu(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem, initiator: ContextmenuInitiator): boolean;
8
8
  provideContextMenuItems(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem): IContextMenuItem[];
9
9
  }
@@ -1,6 +1,6 @@
1
1
  export class MultipleItemsSelectedContextMenu {
2
2
  orderIndex = 60;
3
- shouldProvideContextmenu(event, designerView, designItem) {
3
+ shouldProvideContextmenu(event, designerView, designItem, initiator) {
4
4
  if (designItem.instanceServiceContainer.selectionService.selectedElements.length > 1) {
5
5
  return true;
6
6
  }
@@ -1,8 +1,8 @@
1
1
  import { IContextMenuItem } from "../../../../helper/contextMenu/IContextmenuItem";
2
2
  import { IDesignItem } from "../../../../item/IDesignItem";
3
3
  import { IDesignerCanvas } from "../../IDesignerCanvas";
4
- import { IContextMenuExtension } from "./IContextMenuExtension";
4
+ import { ContextmenuInitiator, IContextMenuExtension } from "./IContextMenuExtension";
5
5
  export declare class ZMoveContextMenu implements IContextMenuExtension {
6
- shouldProvideContextmenu(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
6
+ shouldProvideContextmenu(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem, initiator: ContextmenuInitiator): boolean;
7
7
  provideContextMenuItems(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem): IContextMenuItem[];
8
8
  }
@@ -1,6 +1,6 @@
1
1
  import { CommandType } from "../../../../../commandHandling/CommandType";
2
2
  export class ZMoveContextMenu {
3
- shouldProvideContextmenu(event, designerView, designItem) {
3
+ shouldProvideContextmenu(event, designerView, designItem, initiator) {
4
4
  return true;
5
5
  }
6
6
  provideContextMenuItems(event, designerView, designItem) {
@@ -221,8 +221,10 @@ export class PointerTool {
221
221
  backupPEventsMap.set(newContainerElement, newContainerElement.style.pointerEvents);
222
222
  newContainerElement.style.pointerEvents = 'none';
223
223
  const newC = designerCanvas.elementFromPoint(event.x, event.y);
224
- if (newContainerElement === newC)
224
+ if (newContainerElement === newC) {
225
+ newContainerElement = null;
225
226
  break;
227
+ }
226
228
  newContainerElement = newC;
227
229
  }
228
230
  }
@@ -232,7 +234,7 @@ export class PointerTool {
232
234
  e[0].style.pointerEvents = e[1];
233
235
  }
234
236
  }
235
- if (newContainerElement != null) {
237
+ if (newContainerElement != null) { //Check if container is in designer canvas....
236
238
  let p = newContainerElement;
237
239
  while (p != null) {
238
240
  if (p === designerCanvas.rootDesignItem.element)
@@ -24,7 +24,6 @@ export class RectangleSelectorTool {
24
24
  break;
25
25
  case EventNames.PointerMove:
26
26
  if (this._initialPoint) {
27
- console.warn(currentPoint);
28
27
  let w = currentPoint.x - this._initialPoint.x;
29
28
  let h = currentPoint.y - this._initialPoint.y;
30
29
  if (w >= 0) {
@@ -0,0 +1,17 @@
1
+ import { ServiceContainer } from '../../services/ServiceContainer';
2
+ import { IDesignItem } from '../../item/IDesignItem';
3
+ import { BaseCustomWebComponentLazyAppend } from '@node-projects/base-custom-webcomponent';
4
+ export declare class PropertyGrid extends BaseCustomWebComponentLazyAppend {
5
+ private _serviceContainer;
6
+ private _designerTabControl;
7
+ private _selectedItems;
8
+ private _propertyGridPropertyLists;
9
+ private _itemsObserver;
10
+ static readonly style: CSSStyleSheet;
11
+ constructor();
12
+ set serviceContainer(value: ServiceContainer);
13
+ get serviceContainer(): ServiceContainer;
14
+ get selectedItems(): IDesignItem[];
15
+ set selectedItems(items: IDesignItem[]);
16
+ private _observeItems;
17
+ }
@@ -0,0 +1,143 @@
1
+ import { PropertyGridPropertyList } from './PropertyGridPropertyList';
2
+ import { DesignerTabControl } from '../../controls/DesignerTabControl';
3
+ import { BaseCustomWebComponentLazyAppend, css } from '@node-projects/base-custom-webcomponent';
4
+ import { CssPropertiesService } from '../../services/propertiesService/services/CssPropertiesService';
5
+ import { CommonPropertiesService } from '../../services/propertiesService/services/CommonPropertiesService';
6
+ import { AttributesPropertiesService } from '../../services/propertiesService/services/AttributesPropertiesService';
7
+ export class PropertyGrid extends BaseCustomWebComponentLazyAppend {
8
+ _serviceContainer;
9
+ _designerTabControl;
10
+ _selectedItems;
11
+ _propertyGridPropertyLists;
12
+ _itemsObserver;
13
+ static style = css `
14
+ :host {
15
+ display: block;
16
+ height: 100%;
17
+ user-select: none;
18
+ }
19
+ iron-pages {
20
+ overflow: hidden;
21
+ height: 250px;
22
+ background: var(--medium-grey, #2f3545);
23
+ color: white;
24
+ }
25
+ button:hover {
26
+ box-shadow: inset 0 3px 0 var(--light-grey);
27
+ }
28
+ button:focus {
29
+ box-shadow: inset 0 3px 0 var(--highlight-pink, #e91e63);
30
+ }
31
+ `;
32
+ constructor() {
33
+ super();
34
+ this._designerTabControl = new DesignerTabControl();
35
+ this.shadowRoot.appendChild(this._designerTabControl);
36
+ this.addEventListener('contextmenu', (e) => {
37
+ if (e.composedPath()[0].localName != 'input')
38
+ e.preventDefault();
39
+ });
40
+ this._itemsObserver = new MutationObserver((m) => {
41
+ for (const a of this._propertyGridPropertyLists) {
42
+ a.refreshForDesignItems(this._selectedItems);
43
+ }
44
+ });
45
+ }
46
+ set serviceContainer(value) {
47
+ this._serviceContainer = value;
48
+ this._propertyGridPropertyLists = [];
49
+ let elementPropertyEditorAttributeList = new PropertyGridPropertyList(value);
50
+ elementPropertyEditorAttributeList.setPropertiesService(new CssPropertiesService("styles")); //This is replace in selectedItems
51
+ elementPropertyEditorAttributeList.title = "properties";
52
+ this._designerTabControl.appendChild(elementPropertyEditorAttributeList);
53
+ this._propertyGridPropertyLists.push(elementPropertyEditorAttributeList);
54
+ let attributeEditorAttributeList = new PropertyGridPropertyList(value);
55
+ attributeEditorAttributeList.setPropertiesService(new AttributesPropertiesService());
56
+ attributeEditorAttributeList.createElements(null);
57
+ attributeEditorAttributeList.title = "attributes";
58
+ this._designerTabControl.appendChild(attributeEditorAttributeList);
59
+ this._propertyGridPropertyLists.push(attributeEditorAttributeList);
60
+ attributeEditorAttributeList = new PropertyGridPropertyList(value);
61
+ attributeEditorAttributeList.setPropertiesService(new CommonPropertiesService());
62
+ attributeEditorAttributeList.createElements(null);
63
+ attributeEditorAttributeList.title = "common";
64
+ this._designerTabControl.appendChild(attributeEditorAttributeList);
65
+ this._propertyGridPropertyLists.push(attributeEditorAttributeList);
66
+ attributeEditorAttributeList = new PropertyGridPropertyList(value);
67
+ attributeEditorAttributeList.setPropertiesService(new CssPropertiesService("set-styles"));
68
+ attributeEditorAttributeList.createElements(null);
69
+ attributeEditorAttributeList.title = "set-styles";
70
+ this._designerTabControl.appendChild(attributeEditorAttributeList);
71
+ this._propertyGridPropertyLists.push(attributeEditorAttributeList);
72
+ attributeEditorAttributeList = new PropertyGridPropertyList(value);
73
+ attributeEditorAttributeList.setPropertiesService(new CssPropertiesService("styles"));
74
+ attributeEditorAttributeList.createElements(null);
75
+ attributeEditorAttributeList.title = "styles";
76
+ this._designerTabControl.appendChild(attributeEditorAttributeList);
77
+ this._propertyGridPropertyLists.push(attributeEditorAttributeList);
78
+ attributeEditorAttributeList = new PropertyGridPropertyList(value);
79
+ attributeEditorAttributeList.setPropertiesService(new CssPropertiesService("alignment"));
80
+ attributeEditorAttributeList.createElements(null);
81
+ attributeEditorAttributeList.title = "alignment";
82
+ this._designerTabControl.appendChild(attributeEditorAttributeList);
83
+ this._propertyGridPropertyLists.push(attributeEditorAttributeList);
84
+ attributeEditorAttributeList = new PropertyGridPropertyList(value);
85
+ attributeEditorAttributeList.setPropertiesService(new CssPropertiesService("grid"));
86
+ attributeEditorAttributeList.createElements(null);
87
+ attributeEditorAttributeList.title = "grid";
88
+ this._designerTabControl.appendChild(attributeEditorAttributeList);
89
+ this._propertyGridPropertyLists.push(attributeEditorAttributeList);
90
+ attributeEditorAttributeList = new PropertyGridPropertyList(value);
91
+ attributeEditorAttributeList.setPropertiesService(new CssPropertiesService("flex"));
92
+ attributeEditorAttributeList.createElements(null);
93
+ attributeEditorAttributeList.title = "flex";
94
+ this._designerTabControl.appendChild(attributeEditorAttributeList);
95
+ this._propertyGridPropertyLists.push(attributeEditorAttributeList);
96
+ this._designerTabControl.selectedIndex = 0;
97
+ }
98
+ get serviceContainer() {
99
+ return this._serviceContainer;
100
+ }
101
+ get selectedItems() {
102
+ return this._selectedItems;
103
+ }
104
+ set selectedItems(items) {
105
+ this._selectedItems = items;
106
+ if (this.selectedItems && this.selectedItems.length > 0) {
107
+ const propService = this._serviceContainer.getLastServiceWhere('propertyService', x => x.isHandledElement(this.selectedItems[0]));
108
+ this._propertyGridPropertyLists[0].setPropertiesService(propService);
109
+ this._propertyGridPropertyLists[0].createElements(this.selectedItems[0]);
110
+ this._propertyGridPropertyLists[1].createElements(this.selectedItems[0]);
111
+ this._propertyGridPropertyLists[3].createElements(this.selectedItems[0]);
112
+ }
113
+ for (const a of this._propertyGridPropertyLists) {
114
+ a.designItemsChanged(items);
115
+ }
116
+ if (items) {
117
+ if (items.length == 1) {
118
+ for (const a of this._propertyGridPropertyLists) {
119
+ a.designItemsChanged(items);
120
+ a.refreshForDesignItems(items);
121
+ }
122
+ this._observeItems();
123
+ /*let properties = serviceContainer.forSomeServicesTillResult("propertyService", x => x.getProperties(element));
124
+
125
+ if (properties) {
126
+ let attributeEditorAttributeList = new PropertyGridPropertyList();
127
+ attributeEditorAttributeList.serviceContainer = this.serviceContainer;
128
+ // attributeEditorAttributeList.title =
129
+ attributeEditorAttributeList.createElements(properties);
130
+ this._designerTabControl.appendChild(attributeEditorAttributeList);
131
+ }*/
132
+ }
133
+ }
134
+ else {
135
+ this._itemsObserver.disconnect();
136
+ }
137
+ }
138
+ _observeItems() {
139
+ this._itemsObserver.disconnect();
140
+ this._itemsObserver.observe(this._selectedItems[0].element, { attributes: true, childList: false, characterData: false });
141
+ }
142
+ }
143
+ customElements.define('node-projects-property-grid', PropertyGrid);
@@ -1,16 +1,20 @@
1
1
  import { ServiceContainer } from '../../services/ServiceContainer';
2
2
  import { IDesignItem } from '../../item/IDesignItem';
3
3
  import { BaseCustomWebComponentLazyAppend } from '@node-projects/base-custom-webcomponent';
4
+ import { InstanceServiceContainer } from '../../services/InstanceServiceContainer.js';
4
5
  export declare class PropertyGrid extends BaseCustomWebComponentLazyAppend {
5
6
  private _serviceContainer;
6
7
  private _designerTabControl;
7
8
  private _selectedItems;
8
9
  private _propertyGridPropertyLists;
9
10
  private _itemsObserver;
11
+ private _instanceServiceContainer;
12
+ private _selectionChangedHandler;
10
13
  static readonly style: CSSStyleSheet;
11
14
  constructor();
12
15
  set serviceContainer(value: ServiceContainer);
13
16
  get serviceContainer(): ServiceContainer;
17
+ set instanceServiceContainer(value: InstanceServiceContainer);
14
18
  get selectedItems(): IDesignItem[];
15
19
  set selectedItems(items: IDesignItem[]);
16
20
  private _observeItems;
@@ -10,18 +10,14 @@ export class PropertyGrid extends BaseCustomWebComponentLazyAppend {
10
10
  _selectedItems;
11
11
  _propertyGridPropertyLists;
12
12
  _itemsObserver;
13
+ _instanceServiceContainer;
14
+ _selectionChangedHandler;
13
15
  static style = css `
14
16
  :host {
15
17
  display: block;
16
18
  height: 100%;
17
19
  user-select: none;
18
20
  }
19
- iron-pages {
20
- overflow: hidden;
21
- height: 250px;
22
- background: var(--medium-grey, #2f3545);
23
- color: white;
24
- }
25
21
  button:hover {
26
22
  box-shadow: inset 0 3px 0 var(--light-grey);
27
23
  }
@@ -98,6 +94,14 @@ export class PropertyGrid extends BaseCustomWebComponentLazyAppend {
98
94
  get serviceContainer() {
99
95
  return this._serviceContainer;
100
96
  }
97
+ set instanceServiceContainer(value) {
98
+ this._instanceServiceContainer = value;
99
+ this._selectionChangedHandler?.dispose();
100
+ this._selectionChangedHandler = this._instanceServiceContainer.selectionService.onSelectionChanged.on(e => {
101
+ this.selectedItems = e.selectedElements;
102
+ });
103
+ this.selectedItems = this._instanceServiceContainer.selectionService.selectedElements;
104
+ }
101
105
  get selectedItems() {
102
106
  return this._selectedItems;
103
107
  }
@@ -120,15 +124,6 @@ export class PropertyGrid extends BaseCustomWebComponentLazyAppend {
120
124
  a.refreshForDesignItems(items);
121
125
  }
122
126
  this._observeItems();
123
- /*let properties = serviceContainer.forSomeServicesTillResult("propertyService", x => x.getProperties(element));
124
-
125
- if (properties) {
126
- let attributeEditorAttributeList = new PropertyGridPropertyList();
127
- attributeEditorAttributeList.serviceContainer = this.serviceContainer;
128
- // attributeEditorAttributeList.title =
129
- attributeEditorAttributeList.createElements(properties);
130
- this._designerTabControl.appendChild(attributeEditorAttributeList);
131
- }*/
132
127
  }
133
128
  }
134
129
  else {
@@ -0,0 +1,15 @@
1
+ import { ServiceContainer } from '../../services/ServiceContainer';
2
+ import { BaseCustomWebComponentLazyAppend } from '@node-projects/base-custom-webcomponent';
3
+ import { InstanceServiceContainer } from '../../services/InstanceServiceContainer';
4
+ export declare class PropertyGridWithHeader extends BaseCustomWebComponentLazyAppend {
5
+ static readonly style: CSSStyleSheet;
6
+ static readonly template: HTMLTemplateElement;
7
+ private _type;
8
+ private _id;
9
+ private _pg;
10
+ private _selectionChangedHandler;
11
+ private _instanceServiceContainer;
12
+ constructor();
13
+ set serviceContainer(value: ServiceContainer);
14
+ set instanceServiceContainer(value: InstanceServiceContainer);
15
+ }
@@ -0,0 +1,86 @@
1
+ import { BaseCustomWebComponentLazyAppend, css, html } from '@node-projects/base-custom-webcomponent';
2
+ import { sleep } from '../../helper/Helper.js';
3
+ export class PropertyGridWithHeader extends BaseCustomWebComponentLazyAppend {
4
+ static style = css `
5
+ :host {
6
+ display: block;
7
+ height: 100%;
8
+ user-select: none;
9
+ background: var(--medium-grey, #2f3545);
10
+ color: white;
11
+ }
12
+ div {
13
+ display: grid;
14
+ grid-template-columns: auto 1fr;
15
+ padding: 6px;
16
+ font-family: monospace;
17
+ align-items: center;
18
+ }
19
+ .desc {
20
+ font-weight: 700;
21
+ font-size: 10px;
22
+ margin-right: 5px;
23
+ }
24
+ input {
25
+ background: var(--medium-grey, #2f3545);
26
+ border: solid 1px gray;
27
+ color: white;
28
+ width: calc(100% - 6px);
29
+ }
30
+ #type {
31
+ color: wheat;
32
+ white-space: nowrap;
33
+ overflow: hidden;
34
+ font-size: 12px;
35
+ height: 20px;
36
+ }
37
+ `;
38
+ static template = html `
39
+ <div>
40
+ <span class="desc">Type:</span><span id="type"></span>
41
+ <span class="desc">Id:</span><input type="text" id="id">
42
+ </div>
43
+ <node-projects-property-grid id="pg"></node-projects-property-grid>
44
+ `;
45
+ _type;
46
+ _id;
47
+ _pg;
48
+ _selectionChangedHandler;
49
+ _instanceServiceContainer;
50
+ constructor() {
51
+ super();
52
+ this._type = this._getDomElement('type');
53
+ this._id = this._getDomElement('id');
54
+ this._pg = this._getDomElement('pg');
55
+ this._id.onkeydown = e => {
56
+ if (e.key == 'Enter')
57
+ this._instanceServiceContainer.selectionService.primarySelection.id = this._id.value;
58
+ else if (e.key == 'Escape') {
59
+ this._id.value = this._instanceServiceContainer.selectionService.primarySelection?.id ?? '';
60
+ e.preventDefault();
61
+ e.stopPropagation();
62
+ }
63
+ };
64
+ let pSel;
65
+ this._id.onfocus = e => {
66
+ pSel = this._instanceServiceContainer.selectionService.primarySelection;
67
+ };
68
+ this._id.onblur = e => {
69
+ pSel.id = this._id.value;
70
+ };
71
+ }
72
+ set serviceContainer(value) {
73
+ this._waitForChildrenReady().then(() => this._pg.serviceContainer = value);
74
+ }
75
+ set instanceServiceContainer(value) {
76
+ this._instanceServiceContainer = value;
77
+ this._selectionChangedHandler?.dispose();
78
+ this._selectionChangedHandler = this._instanceServiceContainer.selectionService.onSelectionChanged.on(async (e) => {
79
+ this._pg.instanceServiceContainer = value;
80
+ await sleep(20); // delay assignment a little bit, so onblur above could still set the value.
81
+ this._type.innerText = this._instanceServiceContainer.selectionService.primarySelection?.name ?? '';
82
+ this._id.value = this._instanceServiceContainer.selectionService.primarySelection?.id ?? '';
83
+ });
84
+ }
85
+ }
86
+ customElements.define('node-projects-property-grid-with-header', PropertyGridWithHeader);
@@ -2,16 +2,21 @@ import { BaseCustomWebComponentLazyAppend } from '@node-projects/base-custom-web
2
2
  import { ISelectionChangedEvent } from '../../services/selectionService/ISelectionChangedEvent';
3
3
  import { IDesignItem } from '../../item/IDesignItem';
4
4
  import { ITreeView } from './ITreeView';
5
+ import { InstanceServiceContainer } from '../../services/InstanceServiceContainer.js';
5
6
  export declare class TreeView extends BaseCustomWebComponentLazyAppend implements ITreeView {
6
7
  private _items;
7
8
  private _index;
8
9
  private _previouslySelected;
9
10
  private _treeDiv;
11
+ private _instanceServiceContainer;
12
+ private _selectionChangedHandler;
13
+ private _contentChangedHandler;
10
14
  private _mapElementTreeitem;
11
15
  private _rootItem;
12
16
  static readonly style: CSSStyleSheet;
13
17
  constructor();
14
18
  createTree(rootItem: IDesignItem): void;
19
+ set instanceServiceContainer(value: InstanceServiceContainer);
15
20
  selectionChanged(event: ISelectionChangedEvent): void;
16
21
  private _recomputeTree;
17
22
  private _makeButton;
@@ -5,6 +5,9 @@ export class TreeView extends BaseCustomWebComponentLazyAppend {
5
5
  _index;
6
6
  _previouslySelected;
7
7
  _treeDiv;
8
+ _instanceServiceContainer;
9
+ _selectionChangedHandler;
10
+ _contentChangedHandler;
8
11
  _mapElementTreeitem;
9
12
  _rootItem;
10
13
  //TODO, buuton so key events can be transfered to designer Cnvas (so you can move controls with keys)
@@ -115,6 +118,18 @@ export class TreeView extends BaseCustomWebComponentLazyAppend {
115
118
  this._recomputeTree(rootItem.element, null /*, activeElement */);
116
119
  }
117
120
  // this.instanceServiceContainer.selectionService.setSelectedElements(null);
121
+ set instanceServiceContainer(value) {
122
+ this._instanceServiceContainer = value;
123
+ this._selectionChangedHandler?.dispose();
124
+ this._selectionChangedHandler = this._instanceServiceContainer.selectionService.onSelectionChanged.on(e => {
125
+ this.selectionChanged(e);
126
+ });
127
+ this._contentChangedHandler?.dispose();
128
+ this._contentChangedHandler = this._instanceServiceContainer.contentService.onContentChanged.on(e => {
129
+ this.createTree(value.contentService.rootDesignItem);
130
+ });
131
+ this.createTree(value.contentService.rootDesignItem);
132
+ }
118
133
  selectionChanged(event) {
119
134
  if (event.selectedElements.length > 0) {
120
135
  this._selectTreeElements(event.selectedElements.map(x => this._mapElementTreeitem.get(x.element)));
@@ -2,10 +2,15 @@ import { BaseCustomWebComponentConstructorAppend } from '@node-projects/base-cus
2
2
  import { ITreeView } from './ITreeView';
3
3
  import { IDesignItem } from '../../item/IDesignItem';
4
4
  import { ISelectionChangedEvent } from '../../services/selectionService/ISelectionChangedEvent';
5
+ import { InstanceServiceContainer } from '../../services/InstanceServiceContainer.js';
6
+ import { ContextMenuHelper } from '../../helper/contextMenu/ContextMenuHelper.js';
5
7
  export declare class TreeViewExtended extends BaseCustomWebComponentConstructorAppend implements ITreeView {
6
8
  private _treeDiv;
7
9
  private _tree;
8
10
  private _filter;
11
+ private _instanceServiceContainer;
12
+ private _selectionChangedHandler;
13
+ private _contentChangedHandler;
9
14
  static readonly style: CSSStyleSheet;
10
15
  static readonly template: HTMLTemplateElement;
11
16
  constructor();
@@ -15,8 +20,10 @@ export declare class TreeViewExtended extends BaseCustomWebComponentConstructorA
15
20
  _switchLockAtDesignTimeState(img: HTMLImageElement, designItem: IDesignItem): void;
16
21
  _showHideAtRunTimeState(img: HTMLImageElement, designItem: IDesignItem): void;
17
22
  _switchHideAtRunTimeState(img: HTMLImageElement, designItem: IDesignItem): void;
23
+ showDesignItemContextMenu(designItem: IDesignItem, event: MouseEvent): ContextMenuHelper;
18
24
  ready(): Promise<void>;
19
25
  createTree(rootItem: IDesignItem): void;
26
+ set instanceServiceContainer(value: InstanceServiceContainer);
20
27
  selectionChanged(event: ISelectionChangedEvent): void;
21
28
  private _recomputeTree;
22
29
  private _getChildren;
@@ -1,10 +1,14 @@
1
1
  import { css, html, BaseCustomWebComponentConstructorAppend } from '@node-projects/base-custom-webcomponent';
2
2
  import { NodeType } from '../../item/NodeType';
3
3
  import { assetsPath } from '../../../Constants';
4
+ import { ContextMenuHelper } from '../../helper/contextMenu/ContextMenuHelper.js';
4
5
  export class TreeViewExtended extends BaseCustomWebComponentConstructorAppend {
5
6
  _treeDiv;
6
7
  _tree;
7
8
  _filter;
9
+ _instanceServiceContainer;
10
+ _selectionChangedHandler;
11
+ _contentChangedHandler;
8
12
  static style = css `
9
13
  * {
10
14
  touch-action: none;
@@ -39,14 +43,24 @@ export class TreeViewExtended extends BaseCustomWebComponentConstructorAppend {
39
43
  }
40
44
  td {
41
45
  white-space: nowrap;
42
- }
43
- td:nth-child(n+2) {
44
- text-align: center;
46
+ display: flex;
45
47
  }
46
48
  td > img {
47
49
  vertical-align: middle;
48
50
  }
49
51
 
52
+ .cmd {
53
+ display: flex;
54
+ position: sticky;
55
+ right: 0;
56
+ padding-right: 4px;
57
+ align-items: center;
58
+ gap: 2px;
59
+ background: #ffffffc9;
60
+ width: 70px;
61
+ justify-content: flex-end;
62
+ }
63
+
50
64
  table.fancytree-ext-table tbody tr.fancytree-selected {
51
65
  background-color: #bebebe;
52
66
  }
@@ -58,16 +72,16 @@ export class TreeViewExtended extends BaseCustomWebComponentConstructorAppend {
58
72
  <table id="treetable" style="min-width: 100%;">
59
73
  <colgroup>
60
74
  <col width="*">
75
+ <!--<col width="25px">
61
76
  <col width="25px">
62
- <col width="25px">
63
- <col width="25px">
77
+ <col width="25px">-->
64
78
  </colgroup>
65
79
  <thead style="display: none;">
66
80
  <tr>
67
81
  <th></th>
82
+ <!--<th></th>
68
83
  <th></th>
69
- <th></th>
70
- <th></th>
84
+ <th></th>-->
71
85
  </tr>
72
86
  </thead>
73
87
  </table>
@@ -122,6 +136,17 @@ export class TreeViewExtended extends BaseCustomWebComponentConstructorAppend {
122
136
  designItem.hideAtRunTime = !designItem.hideAtRunTime;
123
137
  this._showHideAtRunTimeState(img, designItem);
124
138
  }
139
+ showDesignItemContextMenu(designItem, event) {
140
+ event.preventDefault();
141
+ const mnuItems = [];
142
+ for (let cme of designItem.serviceContainer.designerContextMenuExtensions) {
143
+ if (cme.shouldProvideContextmenu(event, designItem.instanceServiceContainer.designerCanvas, designItem, 'treeView')) {
144
+ mnuItems.push(...cme.provideContextMenuItems(event, designItem.instanceServiceContainer.designerCanvas, designItem));
145
+ }
146
+ }
147
+ let ctxMnu = ContextMenuHelper.showContextMenu(null, event, null, mnuItems);
148
+ return ctxMnu;
149
+ }
125
150
  async ready() {
126
151
  //this._treeDiv.classList.add('fancytree-connectors');
127
152
  $(this._treeDiv).fancytree({
@@ -142,46 +167,28 @@ export class TreeViewExtended extends BaseCustomWebComponentConstructorAppend {
142
167
  },
143
168
  createNode: (event, data) => {
144
169
  let node = data.node;
145
- if (node.tr.children[1]) {
170
+ if (node.tr.children[0]) {
146
171
  let designItem = node.data.ref;
147
- if (designItem.nodeType === NodeType.Element && designItem !== designItem.instanceServiceContainer.contentService.rootDesignItem) {
148
- /*
149
- let toolTipImg: HTMLImageElement;
150
- (<HTMLElement>node.tr.children[0]).onmouseenter = (e) => {
151
- toolTipImg = document.createElement("img");
152
- Screenshot.takeScreenshot(designItem.element).then(x => { if (toolTipImg) toolTipImg.src = x; });
153
- toolTipImg.style.position = 'absolute';
154
- let r = node.tr.children[0].getBoundingClientRect();
155
- toolTipImg.style.left = (e.x + 5 - r.left) + 'px';
156
- toolTipImg.style.top = (e.y + 5 - r.top) + 'px';
157
- (<HTMLElement>node.tr.children[0]).appendChild(toolTipImg);
158
- }
159
- (<HTMLElement>node.tr.children[0]).onmousemove = (e) => {
160
- if (toolTipImg) {
161
- let r = node.tr.children[0].getBoundingClientRect();
162
- toolTipImg.style.left = (e.x + 5 - r.left) + 'px';
163
- toolTipImg.style.top = (e.y + 5 - r.top) + 'px';
164
- }
165
- }
166
- (<HTMLElement>node.tr.children[0]).onmouseout = (e) => {
167
- if (toolTipImg) {
168
- toolTipImg.parentNode?.removeChild(toolTipImg);
169
- toolTipImg = null;
170
- }
171
- }
172
- */
172
+ if (designItem && designItem.nodeType === NodeType.Element && designItem !== designItem.instanceServiceContainer.contentService.rootDesignItem) {
173
+ node.tr.oncontextmenu = (e) => this.showDesignItemContextMenu(designItem, e);
174
+ let d = document.createElement("div");
175
+ d.className = "cmd";
173
176
  let img = document.createElement('img');
174
177
  this._showHideAtDesignTimeState(img, designItem);
175
178
  img.onclick = () => this._switchHideAtDesignTimeState(img, designItem);
176
- node.tr.children[1].appendChild(img);
179
+ img.title = 'hide in designer';
180
+ d.appendChild(img);
177
181
  let imgL = document.createElement('img');
178
182
  this._showLockAtDesignTimeState(imgL, designItem);
179
183
  imgL.onclick = () => this._switchLockAtDesignTimeState(imgL, designItem);
180
- node.tr.children[2].appendChild(imgL);
184
+ imgL.title = 'lock';
185
+ d.appendChild(imgL);
181
186
  let imgH = document.createElement('img');
182
187
  this._showHideAtRunTimeState(imgH, designItem);
183
188
  imgH.onclick = () => this._switchHideAtRunTimeState(imgH, designItem);
184
- node.tr.children[3].appendChild(imgH);
189
+ imgH.title = 'hide at runtime';
190
+ d.appendChild(imgH);
191
+ node.tr.children[0].appendChild(d);
185
192
  }
186
193
  }
187
194
  },
@@ -318,6 +325,18 @@ export class TreeViewExtended extends BaseCustomWebComponentConstructorAppend {
318
325
  this._recomputeTree(rootItem);
319
326
  }
320
327
  }
328
+ set instanceServiceContainer(value) {
329
+ this._instanceServiceContainer = value;
330
+ this._selectionChangedHandler?.dispose();
331
+ this._selectionChangedHandler = this._instanceServiceContainer.selectionService.onSelectionChanged.on(e => {
332
+ this.selectionChanged(e);
333
+ });
334
+ this._contentChangedHandler?.dispose();
335
+ this._contentChangedHandler = this._instanceServiceContainer.contentService.onContentChanged.on(e => {
336
+ this.createTree(value.contentService.rootDesignItem);
337
+ });
338
+ this.createTree(value.contentService.rootDesignItem);
339
+ }
321
340
  selectionChanged(event) {
322
341
  if (event.selectedElements.length > 0) {
323
342
  this._highlight(event.selectedElements);
package/dist/index.d.ts CHANGED
@@ -84,6 +84,7 @@ export type { IServiceContainer } from "./elements/services/IServiceContainer.js
84
84
  export * from "./elements/services/ServiceContainer.js";
85
85
  export * from "./elements/widgets/propertyGrid/PropertyGrid.js";
86
86
  export * from "./elements/widgets/propertyGrid/PropertyGridPropertyList.js";
87
+ export * from "./elements/widgets/propertyGrid/PropertyGridWithHeader.js";
87
88
  export type { IDesignerCanvas } from "./elements/widgets/designerView/IDesignerCanvas.js";
88
89
  export type { IPlacementView } from "./elements/widgets/designerView/IPlacementView.js";
89
90
  export * from "./elements/widgets/designerView/designerView.js";
@@ -132,7 +133,7 @@ export * from "./elements/widgets/designerView/extensions/SelectionDefaultExtens
132
133
  export * from "./elements/widgets/designerView/extensions/SelectionDefaultExtensionProvider.js";
133
134
  export * from "./elements/widgets/designerView/extensions/TransformOriginExtension.js";
134
135
  export * from "./elements/widgets/designerView/extensions/TransformOriginExtensionProvider.js";
135
- export type { IContextMenuExtension } from "./elements/widgets/designerView/extensions/contextMenu/IContextMenuExtension.js";
136
+ export type { IContextMenuExtension, ContextmenuInitiator } from "./elements/widgets/designerView/extensions/contextMenu/IContextMenuExtension.js";
136
137
  export * from "./elements/widgets/designerView/extensions/contextMenu/CopyPasteContextMenu.js";
137
138
  export * from "./elements/widgets/designerView/extensions/contextMenu/ItemsBelowContextMenu.js";
138
139
  export * from "./elements/widgets/designerView/extensions/contextMenu/MultipleItemsSelectedContextMenu.js";
package/dist/index.js CHANGED
@@ -53,6 +53,7 @@ export * from "./elements/services/InstanceServiceContainer.js";
53
53
  export * from "./elements/services/ServiceContainer.js";
54
54
  export * from "./elements/widgets/propertyGrid/PropertyGrid.js";
55
55
  export * from "./elements/widgets/propertyGrid/PropertyGridPropertyList.js";
56
+ export * from "./elements/widgets/propertyGrid/PropertyGridWithHeader.js";
56
57
  export * from "./elements/widgets/designerView/designerView.js";
57
58
  export * from "./elements/widgets/designerView/overlayLayerView.js";
58
59
  export * from "./elements/widgets/designerView/defaultConfiguredDesignerView.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.45",
4
+ "version": "0.0.49",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "",