@node-projects/web-component-designer 0.1.93 → 0.1.95

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.
@@ -6,6 +6,8 @@ import { BindingTarget } from '../../../item/BindingTarget.js';
6
6
  import { IBinding } from '../../../item/IBinding.js';
7
7
  import { IPropertyGroup } from '../IPropertyGroup.js';
8
8
  export declare abstract class AbstractPropertiesService implements IPropertiesService {
9
+ constructor(recreateElementsOnPropertyChange?: boolean);
10
+ protected _recreateElementsOnPropertyChange: boolean;
9
11
  private static _stylesCache;
10
12
  private _cssCacheClearTimer;
11
13
  private static _bindingsCache;
@@ -22,4 +24,5 @@ export declare abstract class AbstractPropertiesService implements IPropertiesSe
22
24
  getValue(designItems: IDesignItem[], property: IProperty): string | boolean;
23
25
  getBinding(designItems: IDesignItem[], property: IProperty): IBinding;
24
26
  getUnsetValue(designItems: IDesignItem[], property: IProperty): any;
27
+ protected static recreateElements(service: IPropertiesService, designItems: IDesignItem[]): void;
25
28
  }
@@ -3,7 +3,12 @@ import { PropertiesHelper } from './PropertiesHelper.js';
3
3
  import { BindingTarget } from '../../../item/BindingTarget.js';
4
4
  import { PropertyType } from '../PropertyType.js';
5
5
  import { NodeType } from '../../../item/NodeType.js';
6
+ import { newElementFromString } from '../../../helper/ElementHelper.js';
6
7
  export class AbstractPropertiesService {
8
+ constructor(recreateElementsOnPropertyChange) {
9
+ this._recreateElementsOnPropertyChange = recreateElementsOnPropertyChange;
10
+ }
11
+ _recreateElementsOnPropertyChange = false;
7
12
  static _stylesCache = new Map;
8
13
  _cssCacheClearTimer;
9
14
  static _bindingsCache = new Map;
@@ -64,6 +69,8 @@ export class AbstractPropertiesService {
64
69
  this._notifyChangedProperty(d, property, value);
65
70
  }
66
71
  cg.commit();
72
+ if (this._recreateElementsOnPropertyChange)
73
+ AbstractPropertiesService.recreateElements(this, designItems);
67
74
  }
68
75
  getPropertyTarget(designItem, property) {
69
76
  if (property.propertyType == PropertyType.attribute)
@@ -94,6 +101,8 @@ export class AbstractPropertiesService {
94
101
  this._notifyChangedProperty(d, property, undefined);
95
102
  }
96
103
  cg.commit();
104
+ if (this._recreateElementsOnPropertyChange)
105
+ AbstractPropertiesService.recreateElements(this, designItems);
97
106
  }
98
107
  isSet(designItems, property) {
99
108
  let all = true;
@@ -233,4 +242,23 @@ export class AbstractPropertiesService {
233
242
  else
234
243
  return property.defaultValue;
235
244
  }
245
+ static recreateElements(service, designItems) {
246
+ for (let d of designItems) {
247
+ if (!service.isHandledElement(d))
248
+ continue;
249
+ let txt = '<' + d.name + ' ';
250
+ for (let a of d.element.attributes) {
251
+ txt += a.name + '="' + a.value.replaceAll('"', '&quot;') + '" ';
252
+ }
253
+ txt += '></' + d.name + '>';
254
+ let element = newElementFromString(txt); // some custom elements only parse attributes during constructor call
255
+ for (let c of [...d.element.childNodes])
256
+ element.appendChild(c);
257
+ element.style.pointerEvents = 'auto';
258
+ d.node.insertAdjacentElement('beforebegin', element);
259
+ if (d.node.parentNode)
260
+ d.node.parentNode.removeChild(d.node);
261
+ d.replaceNode(element);
262
+ }
263
+ }
236
264
  }
@@ -11,7 +11,7 @@ export class CssCurrentPropertiesService extends CommonPropertiesService {
11
11
  return RefreshMode.fullOnValueChange;
12
12
  }
13
13
  constructor() {
14
- super();
14
+ super(false);
15
15
  this.name = 'styles';
16
16
  }
17
17
  isHandledElement(designItem) {
@@ -6,7 +6,7 @@ import { BindingTarget } from '../../../item/BindingTarget.js';
6
6
  export class CssCustomPropertiesService extends CommonPropertiesService {
7
7
  removeInheritedCustomProperties;
8
8
  constructor(removeInheritedCustomProperties = true) {
9
- super();
9
+ super(false);
10
10
  this.name = 'customProperties';
11
11
  this.removeInheritedCustomProperties = removeInheritedCustomProperties;
12
12
  }
@@ -79,7 +79,7 @@ export class CssPropertiesService extends CommonPropertiesService {
79
79
  "stroke-opacity"
80
80
  ];
81
81
  constructor(name) {
82
- super();
82
+ super(false);
83
83
  this.name = name;
84
84
  }
85
85
  isHandledElement(designItem) {
@@ -8,7 +8,7 @@ export declare class ListPropertiesService extends AbstractPropertiesService {
8
8
  getRefreshMode(designItem: IDesignItem): RefreshMode;
9
9
  name: string;
10
10
  private _propertys;
11
- constructor(propertyDefinitions: IJsonPropertyDefinitions);
11
+ constructor(propertyDefinitions: IJsonPropertyDefinitions, recreateElementsOnPropertyChange?: boolean);
12
12
  isHandledElement(designItem: IDesignItem): boolean;
13
13
  protected _notifyChangedProperty(designItem: IDesignItem, property: IProperty, value: any): void;
14
14
  getProperties(designItem: IDesignItem): IProperty[] | IPropertyGroup[];
@@ -7,8 +7,8 @@ export class ListPropertiesService extends AbstractPropertiesService {
7
7
  }
8
8
  name = "list";
9
9
  _propertys = new Map();
10
- constructor(propertyDefinitions) {
11
- super();
10
+ constructor(propertyDefinitions, recreateElementsOnPropertyChange) {
11
+ super(recreateElementsOnPropertyChange);
12
12
  for (let e in propertyDefinitions) {
13
13
  let parr = [];
14
14
  this._propertys.set(e, parr);
@@ -9,7 +9,7 @@ export declare class WebcomponentManifestPropertiesService extends AbstractPrope
9
9
  private _name;
10
10
  get name(): string;
11
11
  private _propertiesList;
12
- constructor(name: string, manifest: any);
12
+ constructor(name: string, manifest: any, recreateElementsOnPropertyChange?: boolean);
13
13
  private _parseManifest;
14
14
  static manifestClassPropertyTypeToEditorPropertyType(type: string, editor: string): [type: string, values?: string[]];
15
15
  isHandledElement(designItem: IDesignItem): boolean;
@@ -9,8 +9,8 @@ export class WebcomponentManifestPropertiesService extends AbstractPropertiesSer
9
9
  _name;
10
10
  get name() { return this._name; }
11
11
  _propertiesList;
12
- constructor(name, manifest) {
13
- super();
12
+ constructor(name, manifest, recreateElementsOnPropertyChange) {
13
+ super(recreateElementsOnPropertyChange);
14
14
  this._name = name;
15
15
  this._parseManifest(manifest);
16
16
  }
@@ -32,6 +32,7 @@ export interface IDesignerCanvas extends IPlacementView, IUiCommandHandler {
32
32
  canvasOffset: IPoint;
33
33
  canvas: HTMLElement;
34
34
  additionalStyles: CSSStyleSheet[];
35
+ ignoreEvent(event: Event): any;
35
36
  initialize(serviceContainer: ServiceContainer): any;
36
37
  getNormalizedEventCoordinates(event: MouseEvent): IPoint;
37
38
  getViewportCoordinates(event: MouseEvent): IPoint;
@@ -63,6 +63,7 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
63
63
  extensionManager: IExtensionManager;
64
64
  private _pointerextensions;
65
65
  private _lastCopiedPrimaryItem;
66
+ private _ignoreEvent;
66
67
  constructor();
67
68
  get designerWidth(): string;
68
69
  set designerWidth(value: string);
@@ -74,6 +75,7 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
74
75
  set additionalStyles(value: CSSStyleSheet[]);
75
76
  get additionalStyles(): CSSStyleSheet[];
76
77
  private applyAllStyles;
78
+ ignoreEvent(event: Event): void;
77
79
  executeCommand(command: IUiCommand): Promise<void>;
78
80
  disableBackgroud(): void;
79
81
  enableBackground(): void;
@@ -275,6 +275,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
275
275
  extensionManager;
276
276
  _pointerextensions;
277
277
  _lastCopiedPrimaryItem;
278
+ _ignoreEvent;
278
279
  constructor() {
279
280
  super();
280
281
  this._restoreCachedInititalValues();
@@ -342,6 +343,9 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
342
343
  }
343
344
  this._canvasShadowRoot.adoptedStyleSheets = styles;
344
345
  }
346
+ ignoreEvent(event) {
347
+ this._ignoreEvent = event;
348
+ }
345
349
  /* --- start IUiCommandHandler --- */
346
350
  async executeCommand(command) {
347
351
  const modelCommandService = this.serviceContainer.modelCommandService;
@@ -1026,6 +1030,8 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
1026
1030
  }
1027
1031
  }
1028
1032
  _pointerEventHandler(event, forceElement = null) {
1033
+ if (this._ignoreEvent === event)
1034
+ return;
1029
1035
  if (!this.serviceContainer)
1030
1036
  return;
1031
1037
  if (this._touchGestureHelper.multitouchEventActive)
@@ -47,7 +47,11 @@ export class EditTextExtension extends AbstractExtension {
47
47
  let itemRect = this.extendedItem.element.getBoundingClientRect();
48
48
  const elements = EditTextExtension.template.content.cloneNode(true);
49
49
  FontPropertyEditor.addFontsToSelect(elements.querySelector('#fontFamily'));
50
- elements.querySelectorAll('button').forEach(x => x.onpointerdown = () => this._formatSelection(x.dataset['command'], x.dataset['commandParameter']));
50
+ elements.querySelectorAll('button').forEach(x => x.onpointerdown = (e) => {
51
+ this.designerCanvas.ignoreEvent(e);
52
+ this._formatSelection(x.dataset['command'], x.dataset['commandParameter']);
53
+ });
54
+ elements.querySelectorAll('select').forEach(x => x.onpointerdown = (e) => this.designerCanvas.ignoreEvent(e));
51
55
  elements.querySelectorAll('select').forEach(x => x.onchange = () => this._formatSelection(x.dataset['command'], x.value));
52
56
  //Button overlay
53
57
  const foreignObject = document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject');
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.1.93",
4
+ "version": "0.1.95",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "jochen.kuehner@gmx.de",