@node-projects/web-component-designer 0.1.11 → 0.1.13

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 (58) hide show
  1. package/dist/elements/helper/CssUnitConverter.js +1 -1
  2. package/dist/elements/helper/ElementHelper.d.ts +1 -1
  3. package/dist/elements/helper/ElementHelper.js +30 -4
  4. package/dist/elements/helper/GridHelper.js +1 -2
  5. package/dist/elements/helper/LayoutHelper.js +2 -2
  6. package/dist/elements/helper/NpmPackageLoader.js +2 -2
  7. package/dist/elements/helper/SwitchContainerHelper.js +2 -3
  8. package/dist/elements/helper/TransformHelper.d.ts +3 -3
  9. package/dist/elements/helper/TransformHelper.js +39 -12
  10. package/dist/elements/item/DesignItem.d.ts +3 -1
  11. package/dist/elements/item/DesignItem.js +12 -6
  12. package/dist/elements/item/IDesignItem.d.ts +1 -0
  13. package/dist/elements/services/BaseServiceContainer.d.ts +1 -0
  14. package/dist/elements/services/BaseServiceContainer.js +6 -0
  15. package/dist/elements/services/bindingsService/SpecialTagsBindingService.js +1 -1
  16. package/dist/elements/services/dragDropService/DragDropService.js +1 -1
  17. package/dist/elements/services/elementsService/IElementDefinition.d.ts +0 -6
  18. package/dist/elements/services/htmlWriterService/HtmlWriterService.js +1 -1
  19. package/dist/elements/services/instanceService/DefaultInstanceService.js +1 -2
  20. package/dist/elements/services/placementService/DefaultPlacementService.js +2 -2
  21. package/dist/elements/services/propertiesService/propertyEditors/special/GridAssignedRowColumnPropertyEditor.js +1 -1
  22. package/dist/elements/services/propertiesService/propertyEditors/special/MetricsPropertyEditor.js +1 -1
  23. package/dist/elements/services/propertiesService/services/AbstractPropertiesService.d.ts +4 -3
  24. package/dist/elements/services/propertiesService/services/AbstractPropertiesService.js +15 -10
  25. package/dist/elements/services/propertiesService/services/AttributesPropertiesService.js +1 -1
  26. package/dist/elements/services/propertiesService/services/ContentAndIdPropertiesService.js +1 -1
  27. package/dist/elements/services/propertiesService/services/CssCurrentPropertiesService.js +1 -1
  28. package/dist/elements/services/propertiesService/services/NativeElementsPropertiesService.js +15 -0
  29. package/dist/elements/services/stylesheetService/AbstractStylesheetService.js +1 -1
  30. package/dist/elements/widgets/designerView/DomConverter.js +1 -1
  31. package/dist/elements/widgets/designerView/designerCanvas.js +1 -1
  32. package/dist/elements/widgets/designerView/extensions/AbstractExtension.d.ts +2 -2
  33. package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtension.js +1 -1
  34. package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.js +4 -4
  35. package/dist/elements/widgets/designerView/extensions/ExtensionManager.d.ts +1 -1
  36. package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +41 -11
  37. package/dist/elements/widgets/designerView/extensions/IDesignerExtension.d.ts +2 -2
  38. package/dist/elements/widgets/designerView/extensions/IExtensionManger.d.ts +1 -1
  39. package/dist/elements/widgets/designerView/extensions/OverlayLayer.d.ts +1 -1
  40. package/dist/elements/widgets/designerView/extensions/OverlayLayer.js +1 -1
  41. package/dist/elements/widgets/designerView/extensions/SelectionDefaultExtension.d.ts +2 -2
  42. package/dist/elements/widgets/designerView/extensions/SelectionDefaultExtension.js +4 -4
  43. package/dist/elements/widgets/designerView/extensions/pointerExtensions/AbstractDesignerPointerExtension.js +1 -4
  44. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorLinePointerExtension.js +5 -5
  45. package/dist/elements/widgets/designerView/overlayLayerView.d.ts +6 -0
  46. package/dist/elements/widgets/designerView/overlayLayerView.js +39 -4
  47. package/dist/elements/widgets/designerView/tools/DrawElementTool.js +1 -1
  48. package/dist/elements/widgets/designerView/tools/DrawEllipsisTool.js +1 -1
  49. package/dist/elements/widgets/designerView/tools/DrawLineTool.js +1 -1
  50. package/dist/elements/widgets/designerView/tools/DrawPathTool.js +1 -1
  51. package/dist/elements/widgets/designerView/tools/DrawRectTool.js +1 -1
  52. package/dist/elements/widgets/designerView/tools/MagicWandSelectorTool.js +1 -1
  53. package/dist/elements/widgets/designerView/tools/PointerTool.js +2 -2
  54. package/dist/elements/widgets/designerView/tools/RectangleSelectorTool.js +1 -1
  55. package/dist/elements/widgets/designerView/tools/TextTool.js +1 -1
  56. package/dist/elements/widgets/designerView/tools/ZoomTool.js +1 -1
  57. package/dist/elements/widgets/treeView/treeView.js +1 -1
  58. package/package.json +1 -1
@@ -60,7 +60,7 @@ export class AbstractStylesheetService {
60
60
  this._allStylesheets.set(s[0], s[1]);
61
61
  }
62
62
  }
63
- //todo: rename to externalStylesheets
63
+ //TODO: rename to externalStylesheets
64
64
  getStylesheets() {
65
65
  let stylesheets = [];
66
66
  for (let item of this._stylesheets) {
@@ -35,7 +35,7 @@ export class DomConverter {
35
35
  }
36
36
  static ConvertToString(designItems, beautifyOutput, updatePositions = false) {
37
37
  let itw = beautifyOutput !== false ? new IndentedTextWriter() : new SimpleTextWriter();
38
- //todo: check how we could support this beautify here, cause it's now a setting of the writer...
38
+ //TODO: check how we could support this beautify here, cause it's now a setting of the writer...
39
39
  //let options: HtmlWriterOptions = { beautifyOutput: beautifyOutput !== false, writeDesignerProperties: true, compressCssToShorthandProperties: true, parseJsonInAttributes: true, jsonWriteMode: 'beauty' };
40
40
  designItems[0].serviceContainer.htmlWriterService.write(itw, designItems, true, updatePositions);
41
41
  return itw.getString();
@@ -945,7 +945,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
945
945
  const normEl = this.getNormalizedElementCoordinates(element);
946
946
  return { x: normEvt.x - normEl.x, y: normEvt.y - normEl.y };
947
947
  }
948
- //todo: remove
948
+ //TODO: remove
949
949
  elementFromPoint(x, y) {
950
950
  let elements = this.shadowRoot.elementsFromPoint(x, y);
951
951
  let element = elements[0];
@@ -6,7 +6,7 @@ import { AbstractExtensionBase } from "./AbstractExtensionBase.js";
6
6
  export declare abstract class AbstractExtension extends AbstractExtensionBase implements IDesignerExtension {
7
7
  protected extendedItem: IDesignItem;
8
8
  constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
9
- abstract extend(): any;
10
- abstract refresh(): any;
9
+ abstract extend(cache: Record<string | symbol, any>, event?: Event): any;
10
+ abstract refresh(cache: Record<string | symbol, any>, event?: Event): any;
11
11
  abstract dispose(): any;
12
12
  }
@@ -10,7 +10,7 @@ export class AltToEnterContainerExtension extends AbstractExtension {
10
10
  }
11
11
  refresh() {
12
12
  let itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
13
- this._text = this._drawText("Press ALT to enter container", itemRect.x + 5, itemRect.y + 12, 'svg-text-enter-container', this._text, OverlayLayer.Foregorund);
13
+ this._text = this._drawText("Press ALT to enter container", itemRect.x + 5, itemRect.y + 12, 'svg-text-enter-container', this._text, OverlayLayer.Foreground);
14
14
  this._text.style.fontSize = (14 / this.designerCanvas.scaleFactor) + 'px';
15
15
  this._text.setAttribute('x', '' + (itemRect.x + 5 / this.designerCanvas.scaleFactor));
16
16
  this._text.setAttribute('y', '' + (itemRect.y + 12 / this.designerCanvas.scaleFactor));
@@ -23,7 +23,7 @@ export class EditTextExtension extends AbstractExtension {
23
23
  this._focusBound = this._focus.bind(this);
24
24
  }
25
25
  extend() {
26
- //todo -> check what to do with extensions, do not loose edit on mouse click,...
26
+ //TODO: -> check what to do with extensions, do not loose edit on mouse click,...
27
27
  //maybe use a html edit framework
28
28
  this.extendedItem.instanceServiceContainer.selectionService.clearSelectedElements();
29
29
  //this.extensionManager.removeExtension(this.extendedItem, ExtensionType.PrimarySelection);
@@ -43,7 +43,7 @@ export class EditTextExtension extends AbstractExtension {
43
43
  foreignObject.setAttribute('width', '96');
44
44
  foreignObject.setAttribute('height', '24');
45
45
  foreignObject.appendChild(elements);
46
- this._addOverlay(foreignObject, OverlayLayer.Foregorund);
46
+ this._addOverlay(foreignObject, OverlayLayer.Foreground);
47
47
  this.designerCanvas.clickOverlay.style.pointerEvents = 'none';
48
48
  this.extendedItem.element.addEventListener('blur', this._blurBound);
49
49
  this.extendedItem.element.addEventListener('focus', this._focusBound);
@@ -66,14 +66,14 @@ export class EditTextExtension extends AbstractExtension {
66
66
  return p.indexOf(stylo) >= 0;
67
67
  }
68
68
  _contentEdited() {
69
- //todo -> save???
69
+ //TODO: -> save???
70
70
  //this.extendedItem.content = this.extendedItem.element.innerHTML;
71
71
  //console.log(this.extendedItem.element.innerHTML)
72
72
  }
73
73
  _blur() {
74
74
  if (!this._blurTimeout) {
75
75
  this._blurTimeout = setTimeout(() => {
76
- //todo, don't remove doubleclick extension (another type could be used), remove extension itself
76
+ //TODO: don't remove doubleclick extension (another type could be used), remove extension itself
77
77
  //maybe also configureable when when to remove the extension
78
78
  this.extensionManager.removeExtension(this.extendedItem, ExtensionType.Doubleclick);
79
79
  }, 150);
@@ -14,7 +14,7 @@ export declare class ExtensionManager implements IExtensionManager {
14
14
  removeExtension(designItem: IDesignItem, extensionType?: ExtensionType): void;
15
15
  removeExtensions(designItems: IDesignItem[], recursive: boolean, extensionType?: ExtensionType): void;
16
16
  refreshExtension(designItem: IDesignItem, extensionType?: ExtensionType, event?: Event): void;
17
- refreshExtensions(designItems: IDesignItem[], extensionType?: ExtensionType, event?: Event, ignoredExtension?: IDesignerExtension): void;
17
+ refreshExtensions(designItems: IDesignItem[], extensionType?: ExtensionType, event?: Event, ignoredExtension?: IDesignerExtension, timeout?: number): void;
18
18
  refreshAllExtensions(designItems: IDesignItem[], ignoredExtension?: IDesignerExtension): void;
19
19
  refreshAllAppliedExtentions(): void;
20
20
  reapplyAllAppliedExtentions(): void;
@@ -55,6 +55,7 @@ export class ExtensionManager {
55
55
  const extProv = this.designerCanvas.serviceContainer.designerExtensions.get(extensionType);
56
56
  let extensions = [];
57
57
  if (extProv) {
58
+ const cache = {};
58
59
  for (let e of extProv) {
59
60
  let shouldAppE = designItem.shouldAppliedDesignerExtensions.get(extensionType);
60
61
  if (!shouldAppE)
@@ -67,7 +68,7 @@ export class ExtensionManager {
67
68
  appE = [];
68
69
  const ext = e.getExtension(this, this.designerCanvas, designItem);
69
70
  try {
70
- ext.extend(event);
71
+ ext.extend(cache, event);
71
72
  extensions.push(ext);
72
73
  }
73
74
  catch (err) {
@@ -89,9 +90,11 @@ export class ExtensionManager {
89
90
  return null;
90
91
  }
91
92
  applyExtensions(designItems, extensionType, event, recursive = false) {
93
+ this.designerCanvas.overlayLayer.startBatch();
92
94
  if (designItems) {
93
95
  const extProv = this.designerCanvas.serviceContainer.designerExtensions.get(extensionType);
94
96
  if (extProv) {
97
+ const cache = {};
95
98
  for (let e of extProv) {
96
99
  for (let i of designItems) {
97
100
  let shouldAppE = i.shouldAppliedDesignerExtensions.get(extensionType);
@@ -105,7 +108,7 @@ export class ExtensionManager {
105
108
  appE = [];
106
109
  const ext = e.getExtension(this, this.designerCanvas, i);
107
110
  try {
108
- ext.extend(event);
111
+ ext.extend(cache, event);
109
112
  }
110
113
  catch (err) {
111
114
  console.error(err);
@@ -123,6 +126,7 @@ export class ExtensionManager {
123
126
  }
124
127
  }
125
128
  }
129
+ this.designerCanvas.overlayLayer.endBatch();
126
130
  }
127
131
  removeExtension(designItem, extensionType) {
128
132
  if (designItem) {
@@ -211,9 +215,10 @@ export class ExtensionManager {
211
215
  if (extensionType) {
212
216
  let exts = designItem.appliedDesignerExtensions.get(extensionType);
213
217
  if (exts) {
218
+ const cache = {};
214
219
  for (let e of exts) {
215
220
  try {
216
- e.refresh(event);
221
+ e.refresh(cache, event);
217
222
  }
218
223
  catch (err) {
219
224
  console.error(err);
@@ -222,10 +227,11 @@ export class ExtensionManager {
222
227
  }
223
228
  }
224
229
  else {
230
+ const cache = {};
225
231
  for (let appE of designItem.appliedDesignerExtensions) {
226
232
  for (let e of appE[1]) {
227
233
  try {
228
- e.refresh(event);
234
+ e.refresh(cache, event);
229
235
  }
230
236
  catch (err) {
231
237
  console.error(err);
@@ -235,16 +241,26 @@ export class ExtensionManager {
235
241
  }
236
242
  }
237
243
  }
238
- refreshExtensions(designItems, extensionType, event, ignoredExtension) {
244
+ refreshExtensions(designItems, extensionType, event, ignoredExtension, timeout) {
245
+ this.designerCanvas.overlayLayer.startBatch();
246
+ const start = performance.now();
239
247
  if (designItems) {
240
248
  if (extensionType) {
241
- for (let i of designItems) {
249
+ const cache = {};
250
+ outer1: for (let i of designItems) {
242
251
  let exts = i.appliedDesignerExtensions.get(extensionType);
243
252
  if (exts) {
244
253
  for (let e of exts) {
245
254
  try {
246
255
  if (e != ignoredExtension)
247
- e.refresh(event);
256
+ e.refresh(cache, event);
257
+ if (timeout) {
258
+ const end = performance.now();
259
+ if (end - start > timeout) {
260
+ console.warn("refreshExtensions() took too long, stopped refreshing");
261
+ break outer1;
262
+ }
263
+ }
248
264
  }
249
265
  catch (err) {
250
266
  console.error(err);
@@ -254,12 +270,21 @@ export class ExtensionManager {
254
270
  }
255
271
  }
256
272
  else {
257
- for (let i of designItems) {
273
+ const cache = {};
274
+ outer2: for (let i of designItems) {
258
275
  for (let appE of i.appliedDesignerExtensions) {
259
276
  for (let e of appE[1]) {
260
277
  try {
261
- if (e != ignoredExtension)
262
- e.refresh(event);
278
+ if (e != ignoredExtension) {
279
+ e.refresh(cache, event);
280
+ if (timeout) {
281
+ const end = performance.now();
282
+ if (end - start > timeout) {
283
+ console.warn("refreshExtensions() took too long, stopped refreshing");
284
+ break outer2;
285
+ }
286
+ }
287
+ }
263
288
  }
264
289
  catch (err) {
265
290
  console.error(err);
@@ -269,8 +294,10 @@ export class ExtensionManager {
269
294
  }
270
295
  }
271
296
  }
297
+ this.designerCanvas.overlayLayer.endBatch();
272
298
  }
273
299
  refreshAllExtensions(designItems, ignoredExtension) {
300
+ this.designerCanvas.overlayLayer.startBatch();
274
301
  if (designItems) {
275
302
  this.refreshExtensions(designItems, ExtensionType.Permanent, null, ignoredExtension);
276
303
  this.refreshExtensions(designItems, ExtensionType.Selection, null, ignoredExtension);
@@ -286,13 +313,15 @@ export class ExtensionManager {
286
313
  this.refreshExtensions(designItems, ExtensionType.PrimarySelectionAndCanBeEntered, null, ignoredExtension);
287
314
  this.refreshExtensions(designItems, ExtensionType.PrimarySelectionContainerAndCanBeEntered, null, ignoredExtension);
288
315
  }
316
+ this.designerCanvas.overlayLayer.endBatch();
289
317
  }
290
318
  refreshAllAppliedExtentions() {
291
319
  this.refreshAllExtensions([...this.designItemsWithExtentions]);
292
320
  }
293
- //todo does not work with permanant, when not applied... maybe we need to do in another way
321
+ //TODO: does not work with permanant, when not applied... maybe we need to do in another way
294
322
  //maybe store the "shouldAppliedExtensions??"
295
323
  reapplyAllAppliedExtentions() {
324
+ this.designerCanvas.overlayLayer.startBatch();
296
325
  for (let d of ExtensionManager.getAllChildElements(this.designerCanvas.rootDesignItem)) {
297
326
  const keys = [...d.shouldAppliedDesignerExtensions.keys()];
298
327
  for (let e of keys) {
@@ -300,6 +329,7 @@ export class ExtensionManager {
300
329
  this.applyExtension(d, e);
301
330
  }
302
331
  }
332
+ this.designerCanvas.overlayLayer.endBatch();
303
333
  }
304
334
  static *getAllChildElements(designItem) {
305
335
  if (designItem.nodeType == NodeType.Element)
@@ -1,5 +1,5 @@
1
1
  import { IDisposable } from '../../../../interfaces/IDisposable.js';
2
2
  export interface IDesignerExtension extends IDisposable {
3
- extend(event?: Event): any;
4
- refresh(event?: Event): any;
3
+ extend(cache: Record<string | symbol, any>, event?: Event): any;
4
+ refresh(cache: Record<string | symbol, any>, event?: Event): any;
5
5
  }
@@ -7,7 +7,7 @@ export interface IExtensionManager {
7
7
  removeExtension(designItem: IDesignItem, extensionType?: ExtensionType): any;
8
8
  removeExtensions(designItems: IDesignItem[], recursive: boolean, extensionType?: ExtensionType): any;
9
9
  refreshExtension(designItem: IDesignItem, extensionType?: ExtensionType, event?: Event): any;
10
- refreshExtensions(designItems: IDesignItem[], extensionType?: ExtensionType, event?: Event): any;
10
+ refreshExtensions(designItems: IDesignItem[], extensionType?: ExtensionType, event?: Event, ignoredExtension?: IDesignerExtension, timeout?: number): any;
11
11
  refreshAllExtensions(designItems: IDesignItem[], ignoredExtension?: IDesignerExtension): any;
12
12
  refreshAllAppliedExtentions(): any;
13
13
  reapplyAllAppliedExtentions(): any;
@@ -1,5 +1,5 @@
1
1
  export declare enum OverlayLayer {
2
2
  Background = 10,
3
3
  Normal = 20,
4
- Foregorund = 30
4
+ Foreground = 30
5
5
  }
@@ -2,5 +2,5 @@ export var OverlayLayer;
2
2
  (function (OverlayLayer) {
3
3
  OverlayLayer[OverlayLayer["Background"] = 10] = "Background";
4
4
  OverlayLayer[OverlayLayer["Normal"] = 20] = "Normal";
5
- OverlayLayer[OverlayLayer["Foregorund"] = 30] = "Foregorund";
5
+ OverlayLayer[OverlayLayer["Foreground"] = 30] = "Foreground";
6
6
  })(OverlayLayer || (OverlayLayer = {}));
@@ -8,7 +8,7 @@ export declare class SelectionDefaultExtension extends AbstractExtension {
8
8
  private _line3;
9
9
  private _line4;
10
10
  constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
11
- extend(): void;
12
- refresh(): void;
11
+ extend(cache: Record<string | symbol, any>, event?: Event): void;
12
+ refresh(cache: Record<string | symbol, any>, event?: Event): void;
13
13
  dispose(): void;
14
14
  }
@@ -9,17 +9,17 @@ export class SelectionDefaultExtension extends AbstractExtension {
9
9
  constructor(extensionManager, designerView, extendedItem) {
10
10
  super(extensionManager, designerView, extendedItem);
11
11
  }
12
- extend() {
13
- this.refresh();
12
+ extend(cache, event) {
13
+ this.refresh(cache);
14
14
  }
15
- refresh() {
15
+ refresh(cache, event) {
16
16
  let transformedCornerPoints;
17
17
  if (this.extendedItem.nodeType == NodeType.TextNode) {
18
18
  let rect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
19
19
  transformedCornerPoints = [{ x: rect.x, y: rect.y }, { x: rect.x + rect.width, y: rect.y }, { x: rect.x, y: rect.y + rect.height }, { x: rect.x + rect.width, y: rect.y + rect.height }];
20
20
  }
21
21
  else
22
- transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas);
22
+ transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas, cache);
23
23
  this._line1 = this._drawLine(transformedCornerPoints[0].x, transformedCornerPoints[0].y, transformedCornerPoints[1].x, transformedCornerPoints[1].y, 'svg-selection', this._line1);
24
24
  this._line2 = this._drawLine(transformedCornerPoints[0].x, transformedCornerPoints[0].y, transformedCornerPoints[2].x, transformedCornerPoints[2].y, 'svg-selection', this._line2);
25
25
  this._line3 = this._drawLine(transformedCornerPoints[1].x, transformedCornerPoints[1].y, transformedCornerPoints[3].x, transformedCornerPoints[3].y, 'svg-selection', this._line3);
@@ -1,8 +1,5 @@
1
1
  import { AbstractExtensionBase } from '../AbstractExtensionBase.js';
2
- //todo:
3
- //move draw functions to overlay layer
4
- //implement designerpointerextension
5
- //create ruler
2
+ //TODO: move draw functions to overlay layer, implement designerpointerextension, create ruler
6
3
  export class AbstractDesignerPointerExtension extends AbstractExtensionBase {
7
4
  extendedItem;
8
5
  constructor(extensionManager, designerCanvas) {
@@ -11,11 +11,11 @@ export class CursorLinePointerExtension extends AbstractDesignerPointerExtension
11
11
  _line4;
12
12
  refresh(event) {
13
13
  let mp = this.designerCanvas.getNormalizedEventCoordinates(event);
14
- this._circle = this._drawCircle(mp.x, mp.y, 1, 'svg-cursor-line', this._circle, OverlayLayer.Foregorund);
15
- this._line1 = this._drawLine(mp.x, mp.y - this._lineOffset, mp.x, mp.y - this._lineOffset - this._lineLength, 'svg-cursor-line', this._line1, OverlayLayer.Foregorund);
16
- this._line2 = this._drawLine(mp.x, mp.y + this._lineOffset, mp.x, mp.y + this._lineOffset + this._lineLength, 'svg-cursor-line', this._line2, OverlayLayer.Foregorund);
17
- this._line3 = this._drawLine(mp.x - this._lineOffset, mp.y, mp.x - this._lineOffset - this._lineLength, mp.y, 'svg-cursor-line', this._line3, OverlayLayer.Foregorund);
18
- this._line4 = this._drawLine(mp.x + this._lineOffset, mp.y, mp.x + this._lineOffset + this._lineLength, mp.y, 'svg-cursor-line', this._line4, OverlayLayer.Foregorund);
14
+ this._circle = this._drawCircle(mp.x, mp.y, 1, 'svg-cursor-line', this._circle, OverlayLayer.Foreground);
15
+ this._line1 = this._drawLine(mp.x, mp.y - this._lineOffset, mp.x, mp.y - this._lineOffset - this._lineLength, 'svg-cursor-line', this._line1, OverlayLayer.Foreground);
16
+ this._line2 = this._drawLine(mp.x, mp.y + this._lineOffset, mp.x, mp.y + this._lineOffset + this._lineLength, 'svg-cursor-line', this._line2, OverlayLayer.Foreground);
17
+ this._line3 = this._drawLine(mp.x - this._lineOffset, mp.y, mp.x - this._lineOffset - this._lineLength, mp.y, 'svg-cursor-line', this._line3, OverlayLayer.Foreground);
18
+ this._line4 = this._drawLine(mp.x + this._lineOffset, mp.y, mp.x + this._lineOffset + this._lineLength, mp.y, 'svg-cursor-line', this._line4, OverlayLayer.Foreground);
19
19
  }
20
20
  dispose() {
21
21
  super._removeAllOverlays();
@@ -14,6 +14,12 @@ export declare class OverlayLayerView extends BaseCustomWebComponentConstructorA
14
14
  private _id;
15
15
  constructor(serviceContainer: ServiceContainer);
16
16
  private _initialize;
17
+ backgroundFragment: DocumentFragment;
18
+ foregroundFragment: DocumentFragment;
19
+ normalFragment: DocumentFragment;
20
+ batchCount: number;
21
+ startBatch(): void;
22
+ endBatch(): void;
17
23
  addOverlay(overlaySource: string, element: SVGGraphicsElement, overlayLayer?: OverlayLayer): void;
18
24
  removeOverlay(element: SVGElement): void;
19
25
  removeAllNodesWithClass(className: string): void;
@@ -59,17 +59,52 @@ export class OverlayLayerView extends BaseCustomWebComponentConstructorAppend {
59
59
  }
60
60
  this.shadowRoot.adoptedStyleSheets = styles;
61
61
  }
62
+ backgroundFragment;
63
+ foregroundFragment;
64
+ normalFragment;
65
+ batchCount = 0;
66
+ startBatch() {
67
+ if (this.batchCount == 0) {
68
+ this.backgroundFragment = document.createDocumentFragment();
69
+ this.foregroundFragment = document.createDocumentFragment();
70
+ this.normalFragment = document.createDocumentFragment();
71
+ }
72
+ this.batchCount++;
73
+ }
74
+ endBatch() {
75
+ this.batchCount--;
76
+ if (this.batchCount == 0) {
77
+ if (this.backgroundFragment.hasChildNodes)
78
+ this._gBackground.appendChild(this.backgroundFragment);
79
+ if (this.foregroundFragment.hasChildNodes)
80
+ this._gForeground.appendChild(this.foregroundFragment);
81
+ if (this.normalFragment.hasChildNodes)
82
+ this._gNormal.appendChild(this.normalFragment);
83
+ this.backgroundFragment = null;
84
+ this.foregroundFragment = null;
85
+ this.normalFragment = null;
86
+ }
87
+ }
62
88
  addOverlay(overlaySource, element, overlayLayer = OverlayLayer.Normal) {
63
89
  element.setAttribute("overlay-source", overlaySource);
64
90
  switch (overlayLayer) {
65
91
  case OverlayLayer.Background:
66
- this._gBackground.appendChild(element);
92
+ if (this.backgroundFragment)
93
+ this.backgroundFragment.appendChild(element);
94
+ else
95
+ this._gBackground.appendChild(element);
67
96
  break;
68
- case OverlayLayer.Foregorund:
69
- this._gForeground.appendChild(element);
97
+ case OverlayLayer.Foreground:
98
+ if (this.foregroundFragment)
99
+ this.foregroundFragment.appendChild(element);
100
+ else
101
+ this._gForeground.appendChild(element);
70
102
  break;
71
103
  default:
72
- this._gNormal.appendChild(element);
104
+ if (this.normalFragment)
105
+ this.normalFragment.appendChild(element);
106
+ else
107
+ this._gNormal.appendChild(element);
73
108
  break;
74
109
  }
75
110
  }
@@ -51,7 +51,7 @@ export class DrawElementTool {
51
51
  if (!this._rect) {
52
52
  designerCanvas.rootDesignItem.element.appendChild(this._createdItem.element);
53
53
  this._rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
54
- designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._rect, OverlayLayer.Foregorund);
54
+ designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._rect, OverlayLayer.Foreground);
55
55
  this._rect.setAttribute('class', 'svg-draw-new-element');
56
56
  this._rect.setAttribute('x', (this._startPosition.x - designerCanvas.containerBoundingRect.x));
57
57
  this._rect.setAttribute('y', (this._startPosition.y - designerCanvas.containerBoundingRect.y));
@@ -32,7 +32,7 @@ export class DrawEllipsisTool {
32
32
  this._path.setAttribute("cy", currentPoint.y.toString());
33
33
  this._path.setAttribute("rx", "0");
34
34
  this._path.setAttribute("ry", "0");
35
- designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foregorund);
35
+ designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foreground);
36
36
  break;
37
37
  case EventNames.PointerMove:
38
38
  if (this._path) {
@@ -31,7 +31,7 @@ export class DrawLineTool {
31
31
  this._path.setAttribute("y1", currentPoint.y.toString());
32
32
  this._path.setAttribute("x2", currentPoint.x.toString());
33
33
  this._path.setAttribute("y2", currentPoint.y.toString());
34
- designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foregorund);
34
+ designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foreground);
35
35
  break;
36
36
  case EventNames.PointerMove:
37
37
  if (this._path) {
@@ -35,7 +35,7 @@ export class DrawPathTool {
35
35
  this._path.setAttribute("stroke", designerCanvas.serviceContainer.globalContext.strokeColor);
36
36
  this._path.setAttribute("fill", designerCanvas.serviceContainer.globalContext.fillBrush);
37
37
  this._path.setAttribute("stroke-width", designerCanvas.serviceContainer.globalContext.strokeThickness);
38
- designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foregorund);
38
+ designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foreground);
39
39
  this._startPoint = currentPoint;
40
40
  }
41
41
  if (this._lastPoint != null && this._lastPoint.x === currentPoint.x && this._lastPoint.y === currentPoint.y && !this._samePoint) {
@@ -35,7 +35,7 @@ export class DrawRectTool {
35
35
  this._path.setAttribute("y", currentPoint.y.toString());
36
36
  this._path.setAttribute("width", "0");
37
37
  this._path.setAttribute("height", "0");
38
- designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foregorund);
38
+ designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foreground);
39
39
  break;
40
40
  case EventNames.PointerMove:
41
41
  if (this._path) {
@@ -17,7 +17,7 @@ export class MagicWandSelectorTool {
17
17
  this._path.style.strokeDasharray = '' + (2 / designerCanvas.scaleFactor);
18
18
  this._pathD = "M" + currentPoint.x + " " + currentPoint.y;
19
19
  this._path.setAttribute("D", this._pathD);
20
- designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foregorund);
20
+ designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._path, OverlayLayer.Foreground);
21
21
  break;
22
22
  case EventNames.PointerMove:
23
23
  if (this._path) {
@@ -289,7 +289,7 @@ export class PointerTool {
289
289
  }
290
290
  currentContainerService.place(event, designerCanvas, this._actionStartedDesignItem.parent, this._initialPoint, this._initialOffset, cp, this._actionStartedDesignItems);
291
291
  }
292
- designerCanvas.extensionManager.refreshExtensions(this._actionStartedDesignItems, null, event);
292
+ designerCanvas.extensionManager.refreshExtensions(this._actionStartedDesignItems, null, event, null, 20);
293
293
  }
294
294
  }
295
295
  break;
@@ -329,7 +329,7 @@ export class PointerTool {
329
329
  this._dragOverExtensionItem = null;
330
330
  this._moveItemsOffset = { x: 0, y: 0 };
331
331
  }
332
- designerCanvas.extensionManager.refreshExtensions(designerCanvas.instanceServiceContainer.selectionService.selectedElements, null, event);
332
+ designerCanvas.extensionManager.refreshExtensions(designerCanvas.instanceServiceContainer.selectionService.selectedElements, null, event, null, 20);
333
333
  if (this._changeGroup) {
334
334
  this._changeGroup.abort();
335
335
  this._changeGroup = null;
@@ -23,7 +23,7 @@ export class RectangleSelectorTool {
23
23
  this._rect.setAttribute('height', 0);
24
24
  this._rect.style.strokeWidth = '' + (1 / designerCanvas.scaleFactor);
25
25
  this._rect.style.strokeDasharray = '' + (2 / designerCanvas.scaleFactor);
26
- designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._rect, OverlayLayer.Foregorund);
26
+ designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._rect, OverlayLayer.Foreground);
27
27
  break;
28
28
  case EventNames.PointerMove:
29
29
  if (this._initialPoint) {
@@ -28,7 +28,7 @@ export class TextTool {
28
28
  di.setStyle('left', currentPoint.x + 'px');
29
29
  di.setStyle('top', currentPoint.y + 'px');
30
30
  designerCanvas.instanceServiceContainer.undoService.execute(new InsertAction(designerCanvas.rootDesignItem, designerCanvas.rootDesignItem.childCount, di));
31
- //todo: Maybe we could also remove the eatEvents property
31
+ //TODO: Maybe we could also remove the eatEvents property
32
32
  //TODO - don't apply doubleclick extension (maybe it is not the doubleclick one) - apply edit text extesion directly
33
33
  //should we configure the editTextExtension anywhere??
34
34
  this._textEditExtensions = designerCanvas.extensionManager.applyExtension(di, ExtensionType.Doubleclick, event);
@@ -23,7 +23,7 @@ export class ZoomTool {
23
23
  this._rect.setAttribute('height', 0);
24
24
  this._rect.style.strokeWidth = '' + (1 / designerCanvas.scaleFactor);
25
25
  this._rect.style.strokeDasharray = '' + (2 / designerCanvas.scaleFactor);
26
- designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._rect, OverlayLayer.Foregorund);
26
+ designerCanvas.overlayLayer.addOverlay(this.constructor.name, this._rect, OverlayLayer.Foreground);
27
27
  break;
28
28
  case EventNames.PointerMove:
29
29
  if (this._startPoint) {
@@ -10,7 +10,7 @@ export class TreeView extends BaseCustomWebComponentLazyAppend {
10
10
  _contentChangedHandler;
11
11
  _mapElementTreeitem;
12
12
  _rootItem;
13
- //TODO, buuton so key events can be transfered to designer Cnvas (so you can move controls with keys)
13
+ //TODO: buton so key events can be transfered to designerCanvas (so you can move controls with keys)
14
14
  static style = css `
15
15
  :host {
16
16
  --horz-margin: 20px;
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.11",
4
+ "version": "0.1.13",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "jochen.kuehner@gmx.de",