@node-projects/web-component-designer 0.1.12 → 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 (31) hide show
  1. package/dist/elements/helper/CssUnitConverter.js +1 -1
  2. package/dist/elements/helper/ElementHelper.js +1 -1
  3. package/dist/elements/helper/GridHelper.js +1 -2
  4. package/dist/elements/helper/LayoutHelper.js +2 -2
  5. package/dist/elements/helper/NpmPackageLoader.js +2 -2
  6. package/dist/elements/helper/SwitchContainerHelper.js +2 -3
  7. package/dist/elements/helper/TransformHelper.d.ts +1 -1
  8. package/dist/elements/helper/TransformHelper.js +32 -9
  9. package/dist/elements/item/DesignItem.js +1 -1
  10. package/dist/elements/services/bindingsService/SpecialTagsBindingService.js +1 -1
  11. package/dist/elements/services/dragDropService/DragDropService.js +1 -1
  12. package/dist/elements/services/elementsService/IElementDefinition.d.ts +0 -6
  13. package/dist/elements/services/htmlWriterService/HtmlWriterService.js +1 -1
  14. package/dist/elements/services/instanceService/DefaultInstanceService.js +1 -2
  15. package/dist/elements/services/placementService/DefaultPlacementService.js +1 -1
  16. package/dist/elements/services/propertiesService/propertyEditors/special/GridAssignedRowColumnPropertyEditor.js +1 -1
  17. package/dist/elements/services/propertiesService/propertyEditors/special/MetricsPropertyEditor.js +1 -1
  18. package/dist/elements/services/propertiesService/services/AbstractPropertiesService.d.ts +4 -3
  19. package/dist/elements/services/propertiesService/services/AbstractPropertiesService.js +15 -10
  20. package/dist/elements/services/propertiesService/services/AttributesPropertiesService.js +1 -1
  21. package/dist/elements/services/propertiesService/services/ContentAndIdPropertiesService.js +1 -1
  22. package/dist/elements/services/propertiesService/services/CssCurrentPropertiesService.js +1 -1
  23. package/dist/elements/services/stylesheetService/AbstractStylesheetService.js +1 -1
  24. package/dist/elements/widgets/designerView/DomConverter.js +1 -1
  25. package/dist/elements/widgets/designerView/designerCanvas.js +1 -1
  26. package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.js +3 -3
  27. package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +7 -3
  28. package/dist/elements/widgets/designerView/extensions/pointerExtensions/AbstractDesignerPointerExtension.js +1 -4
  29. package/dist/elements/widgets/designerView/tools/TextTool.js +1 -1
  30. package/dist/elements/widgets/treeView/treeView.js +1 -1
  31. package/package.json +1 -1
@@ -23,7 +23,7 @@ export function convertCssUnitToPixel(cssValue, target, percentTarget) {
23
23
  'lh': value => value * parseFloat(getComputedStyle(target).lineHeight),
24
24
  'rlh': value => value * parseFloat(getComputedStyle(document.documentElement).lineHeight),
25
25
  '%': value => value / 100 * (percentTarget == 'height' ? target.getBoundingClientRect().height : target.getBoundingClientRect().width),
26
- /* todo
26
+ /*TODO: container units
27
27
  //find parent with computed style where container-type is inline-size or size (regarding to query type)
28
28
  //use this size for calculation
29
29
  'cqw':
@@ -59,7 +59,7 @@ const windowOffsetsCacheKey = Symbol('windowOffsetsCacheKey');
59
59
  export function getElementsWindowOffsetWithoutSelfAndParentTransformations(element, zoom, cache = {}) {
60
60
  let offsetLeft = 0;
61
61
  let offsetTop = 0;
62
- let ch = cache[windowOffsetsCacheKey] = cache[windowOffsetsCacheKey] ?? new Map();
62
+ let ch = cache[windowOffsetsCacheKey] ??= new Map();
63
63
  let lst = [];
64
64
  while (element) {
65
65
  let cachedObj = ch.get(element);
@@ -18,8 +18,7 @@ export function getElementGridInformation(element) {
18
18
  return { colSpan, rowSpan };
19
19
  }
20
20
  export function calculateGridInformation(designItem) {
21
- //todo:
22
- //same name should combine columns/rows
21
+ //TODO: same name should combine columns/rows
23
22
  let itemRect = designItem.instanceServiceContainer.designerCanvas.getNormalizedElementCoordinates(designItem.element);
24
23
  let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(designItem.element, null, designItem.instanceServiceContainer.designerCanvas);
25
24
  const computedStyle = getComputedStyle(designItem.element);
@@ -1,5 +1,5 @@
1
- //todo
2
- //this function should return the correct property to change a layout, for example left/right when left or right is used,
1
+ //TODO: this function should return the correct property to change a layout,
2
+ // for example left/right when left or right is used,
3
3
  //maybe margin on grid? or transform??
4
4
  export function filterChildPlaceItems(items) {
5
5
  const filterdPlaceItems = [];
@@ -119,7 +119,7 @@ export class NpmPackageLoader {
119
119
  }
120
120
  }
121
121
  if (serviceContainer && paletteTree) {
122
- //todo: should be retriggered by service container, or changeing list in container
122
+ //TODO: should be retriggered by service container, or changeing list in container
123
123
  paletteTree.loadControls(serviceContainer, serviceContainer.elementsServices);
124
124
  }
125
125
  /* Package Hacks */
@@ -230,7 +230,7 @@ export class NpmPackageLoader {
230
230
  const map = importShim.getImportMap().imports;
231
231
  const importMap = { imports: {}, scopes: {} };
232
232
  if (!map.hasOwnProperty(packageJsonObj.name)) {
233
- //todo - use exports of package.json for importMap
233
+ //TODO: use exports of package.json for importMap
234
234
  if (packageJsonObj.exports) {
235
235
  /* "exports": {
236
236
  ".": {
@@ -1,7 +1,6 @@
1
1
  export function switchContainer(items, newContainer, resizeNewContainer = false, newContainerOffset = 0) {
2
- //todo...
3
- //- switch to other containers? like grid, flexbox, ...
4
- //- position non absolute, or absolute from bottom or right
2
+ //TODO: switch to other containers like grid, flexbox, ...
3
+ //TODO: position non absolute, or absolute from bottom or right
5
4
  for (let i of items) {
6
5
  if (i == newContainer || i.element.contains(newContainer.element)) {
7
6
  console.warn('could not move items into of itself or a child');
@@ -10,7 +10,7 @@ export declare function cssMatrixToMatrixArray(cssMatrix: string): number[];
10
10
  export declare function getRotationAngleFromMatrix(matrixArray: number[], domMatrix: DOMMatrix): any;
11
11
  export declare function addVectors(vectorA: [number, number], vectorB: [number, number]): [number, number];
12
12
  export declare function getDesignerCanvasNormalizedTransformedOriginWithoutParentTransformation(element: HTMLElement, designerCanvas: IDesignerCanvas): DOMPoint;
13
- export declare function getResultingTransformationBetweenElementAndAllAncestors(element: HTMLElement, ancestor: HTMLElement, excludeAncestor?: boolean): DOMMatrix;
13
+ export declare function getResultingTransformationBetweenElementAndAllAncestors(element: HTMLElement, ancestor: HTMLElement, excludeAncestor?: boolean, cache?: Record<string | symbol, any>): DOMMatrix;
14
14
  export declare function getByParentsTransformedPointRelatedToCanvas(element: HTMLElement, point: DOMPoint, designerCanvas: IDesignerCanvas, cache?: Record<string | symbol, any>): IPoint;
15
15
  export declare function getDesignerCanvasNormalizedTransformedPoint(element: HTMLElement, point: IPoint, designerCanvas: IDesignerCanvas): IPoint;
16
16
  export declare function getElementSize(element: HTMLElement): {
@@ -102,19 +102,33 @@ export function addVectors(vectorA, vectorB) {
102
102
  return [vectorA[0] + vectorB[0], vectorA[1] + vectorB[1]];
103
103
  }
104
104
  export function getDesignerCanvasNormalizedTransformedOriginWithoutParentTransformation(element, designerCanvas) {
105
- const top0 = new DOMPointReadOnly(-parseFloat(getComputedStyle(element).transformOrigin.split(' ')[0]), -parseFloat(getComputedStyle(element).transformOrigin.split(' ')[1]), 0, 0);
105
+ const toSplit = getComputedStyle(element).transformOrigin.split(' ');
106
+ const tfX = parseFloat(toSplit[0]);
107
+ const tfY = parseFloat(toSplit[1]);
108
+ const top0 = new DOMPointReadOnly(-tfX, -tfY, 0, 0);
106
109
  const p0Offsets = getElementsWindowOffsetWithoutSelfAndParentTransformations(element, designerCanvas.zoomFactor);
107
110
  const transformOriginAbsolutRelatedToWindowWithoutAnyTransformation = new DOMPoint(p0Offsets.offsetLeft - top0.x, p0Offsets.offsetTop - top0.y);
108
111
  const designerCanvasNormalizedTransformedOrigin = new DOMPoint(transformOriginAbsolutRelatedToWindowWithoutAnyTransformation.x - designerCanvas.containerBoundingRect.x, transformOriginAbsolutRelatedToWindowWithoutAnyTransformation.y - designerCanvas.containerBoundingRect.y);
109
112
  return designerCanvasNormalizedTransformedOrigin;
110
113
  }
111
- export function getResultingTransformationBetweenElementAndAllAncestors(element, ancestor, excludeAncestor) {
112
- //TODO: introduce cache and optimize
114
+ const elemntMatrixCacheKey = Symbol('windowOffsetsCacheKey');
115
+ export function getResultingTransformationBetweenElementAndAllAncestors(element, ancestor, excludeAncestor, cache = {}) {
116
+ let ch = cache[elemntMatrixCacheKey] ??= new Map();
117
+ let lst = [];
113
118
  let actualElement = element;
114
119
  let actualElementMatrix;
115
120
  let newElementMatrix;
116
121
  let originalElementAndAllParentsMultipliedMatrix;
117
122
  while (actualElement != ancestor) {
123
+ let cachedObj = ch.get(actualElement);
124
+ if (cachedObj) {
125
+ if (originalElementAndAllParentsMultipliedMatrix)
126
+ originalElementAndAllParentsMultipliedMatrix = cachedObj[0].multiply(originalElementAndAllParentsMultipliedMatrix);
127
+ else
128
+ originalElementAndAllParentsMultipliedMatrix = cachedObj[0];
129
+ lst.forEach(x => x[0] = x[0].multiply(originalElementAndAllParentsMultipliedMatrix));
130
+ break;
131
+ }
118
132
  const newElement = getParentElementIncludingSlots(actualElement);
119
133
  actualElementMatrix = getElementCombinedTransform(actualElement);
120
134
  newElementMatrix = getElementCombinedTransform(newElement);
@@ -125,6 +139,10 @@ export function getResultingTransformationBetweenElementAndAllAncestors(element,
125
139
  else if (newElement != ancestor || !excludeAncestor) {
126
140
  originalElementAndAllParentsMultipliedMatrix = originalElementAndAllParentsMultipliedMatrix.multiply(newElementMatrix);
127
141
  }
142
+ lst.forEach(x => x[0] = x[0].multiply(originalElementAndAllParentsMultipliedMatrix));
143
+ const cacheEntry = [originalElementAndAllParentsMultipliedMatrix];
144
+ lst.push(cacheEntry);
145
+ ch.set(actualElement, cacheEntry);
128
146
  actualElement = newElement;
129
147
  }
130
148
  return originalElementAndAllParentsMultipliedMatrix;
@@ -137,10 +155,14 @@ export function getByParentsTransformedPointRelatedToCanvas(element, point, desi
137
155
  while (actualElement != canvas) {
138
156
  const parentElement = getParentElementIncludingSlots(actualElement);
139
157
  const elementWindowOffset = getElementsWindowOffsetWithoutSelfAndParentTransformations(parentElement, designerCanvas.zoomFactor, cache);
140
- const parentElementTransformOrigin = new DOMPoint(elementWindowOffset.offsetLeft - designerCanvas.outerRect.x + parseFloat(getComputedStyle(parentElement).transformOrigin.split(' ')[0]), elementWindowOffset.offsetTop - designerCanvas.outerRect.y + parseFloat(getComputedStyle(parentElement).transformOrigin.split(' ')[1]));
158
+ const toSplit = getComputedStyle(parentElement).transformOrigin.split(' ');
159
+ const tfX = parseFloat(toSplit[0]);
160
+ const tfY = parseFloat(toSplit[1]);
161
+ const parentElementTransformOrigin = new DOMPoint(elementWindowOffset.offsetLeft - designerCanvas.outerRect.x + tfX, elementWindowOffset.offsetTop - designerCanvas.outerRect.y + tfY);
141
162
  if (actualElement == element) {
142
- parentElementTransformOrigin.x -= extractTranslationFromDOMMatrix(new DOMMatrix(element.style.transform)).x;
143
- parentElementTransformOrigin.y -= extractTranslationFromDOMMatrix(new DOMMatrix(element.style.transform)).y;
163
+ const mtx = extractTranslationFromDOMMatrix(new DOMMatrix(element.style.transform));
164
+ parentElementTransformOrigin.x -= mtx.x;
165
+ parentElementTransformOrigin.y -= mtx.y;
144
166
  }
145
167
  const parentElementTransformOriginToPointVector = new DOMPointReadOnly(-parentElementTransformOrigin.x + (element == actualElement ? point.x : byParentTransformedPointRelatedToCanvas.x), -parentElementTransformOrigin.y + (element == actualElement ? point.y : byParentTransformedPointRelatedToCanvas.y));
146
168
  parentElementTransformOriginToPointVectorTransformed = parentElementTransformOriginToPointVector.matrixTransform(new DOMMatrix(getComputedStyle(parentElement).transform));
@@ -195,8 +217,9 @@ export function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, u
195
217
  x: p0OffsetsRelatedToCanvas.x + width + intUntransformedCornerPointsOffset.x,
196
218
  y: p0OffsetsRelatedToCanvas.y + height + intUntransformedCornerPointsOffset.y
197
219
  });
198
- const tfX = parseFloat(getComputedStyle(element).transformOrigin.split(' ')[0]);
199
- const tfY = parseFloat(getComputedStyle(element).transformOrigin.split(' ')[1]);
220
+ const toSplit = getComputedStyle(element).transformOrigin.split(' ');
221
+ const tfX = parseFloat(toSplit[0]);
222
+ const tfY = parseFloat(toSplit[1]);
200
223
  const transformOriginWithoutTransformRelatedToCanvas = DOMPointReadOnly.fromPoint({
201
224
  x: p0OffsetsRelatedToCanvas.x + tfX,
202
225
  y: p0OffsetsRelatedToCanvas.y + tfY,
@@ -208,7 +231,7 @@ export function getDesignerCanvasNormalizedTransformedCornerDOMPoints(element, u
208
231
  let top1 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[topright].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[topright].y));
209
232
  let top2 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[bottomleft].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[bottomleft].y));
210
233
  let top3 = new DOMPoint(-(transformOriginWithoutTransformRelatedToCanvas.x - elementWithoutTransformCornerDOMPoints[bottomright].x), -(transformOriginWithoutTransformRelatedToCanvas.y - elementWithoutTransformCornerDOMPoints[bottomright].y));
211
- let originalElementAndAllParentsMultipliedMatrix = getResultingTransformationBetweenElementAndAllAncestors(element, designerCanvas.canvas, true);
234
+ let originalElementAndAllParentsMultipliedMatrix = getResultingTransformationBetweenElementAndAllAncestors(element, designerCanvas.canvas, true, cache);
212
235
  let top0Transformed = top0.matrixTransform(originalElementAndAllParentsMultipliedMatrix);
213
236
  let top1Transformed = top1.matrixTransform(originalElementAndAllParentsMultipliedMatrix);
214
237
  let top2Transformed = top2.matrixTransform(originalElementAndAllParentsMultipliedMatrix);
@@ -465,7 +465,7 @@ export class DesignItem {
465
465
  this._childArray.splice(index, 0, designItem);
466
466
  }
467
467
  designItem._parent = this;
468
- //todo: is this still needed???
468
+ //TODO: is this still needed???
469
469
  if (this.instanceServiceContainer.selectionService.primarySelection == designItem) {
470
470
  designItem.instanceServiceContainer.designerCanvas.extensionManager.applyExtension(designItem.parent, ExtensionType.PrimarySelectionContainer);
471
471
  if (designItem.getPlacementService().isEnterableContainer(this))
@@ -1,6 +1,6 @@
1
1
  import { BindingTarget } from "../../item/BindingTarget.js";
2
2
  import { BindingMode } from "../../item/BindingMode.js";
3
- /* Service wich read binings from special HTMl elements -> like tag-binding */
3
+ /* Service wich read bindings from special HTML elements -> like tag-binding */
4
4
  //TODO: refactor so we could use it
5
5
  export class SpecialTagsBindingService {
6
6
  static type = 'visu-tagbinding-binding';
@@ -72,7 +72,7 @@ export class DragDropService {
72
72
  const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
73
73
  newContainerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
74
74
  if (newContainerService) {
75
- //TODO: Maybe the check for SVG Elemnt should be in "canEnterByDrop"?
75
+ //TODO: Maybe the check for SVG Element should be in "canEnterByDrop"?
76
76
  if (newContainerService.isEnterableContainer(newContainerElementDesignItem) && !(newContainerElementDesignItem.element instanceof SVGElement)) {
77
77
  break;
78
78
  }
@@ -16,12 +16,6 @@ export interface IElementDefinition {
16
16
  defaultWidth?: string;
17
17
  defaultHeight?: string;
18
18
  ghostElement?: Element;
19
- /**
20
- * every component normal get's the property '_inNodeProjectsDesignerView' set. if it should not be the case on this component set this to true
21
- * a component could have special logic when this is true
22
- * TODO: maybe remove this, if someone needs such a function, he could use it's own instance provider...
23
- */
24
- doNotSetInNodeProjectsDesignerViewOnInstance?: boolean;
25
19
  /**
26
20
  * Name of the Tool activated when selecting the element.
27
21
  * If none, the DrawElementTool is used
@@ -30,7 +30,7 @@ export class HtmlWriterService extends AbstractHtmlWriterService {
30
30
  this.internalWrite(indentedTextWriter, d, updatePositions);
31
31
  }
32
32
  }
33
- //todo special case for style/script nodes, keep whitespace
33
+ //TODO: special case for style/script nodes, keep whitespace
34
34
  internalWrite(indentedTextWriter, designItem, updatePositions) {
35
35
  let start = indentedTextWriter.position;
36
36
  let end = indentedTextWriter.position;
@@ -46,8 +46,7 @@ export class DefaultInstanceService {
46
46
  }
47
47
  const elementString = '<' + definition.tag + attr + '></' + definition.tag + '>';
48
48
  const element = newElementFromString(elementString);
49
- if (!definition.doNotSetInNodeProjectsDesignerViewOnInstance)
50
- element._inNodeProjectsDesignerView = true;
49
+ element._inNodeProjectsDesignerView = true;
51
50
  if (definition.defaultWidth)
52
51
  element.style.width = definition.defaultWidth;
53
52
  if (definition.defaultHeight)
@@ -86,7 +86,7 @@ export class DefaultPlacementService {
86
86
  startPlace(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
87
87
  }
88
88
  place(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
89
- //TODO:, this should revert all undo actions while active
89
+ //TODO: this should revert all undo actions while active
90
90
  //maybe a undo actions returns itself or an id so it could be changed?
91
91
  let track = this.calculateTrack(event, placementView, startPoint, offsetInControl, newPoint, items[0]);
92
92
  if (event.shiftKey) {
@@ -1,7 +1,7 @@
1
1
  import { BasePropertyEditor } from '../BasePropertyEditor.js';
2
2
  import { getElementGridInformation } from '../../../../helper/GridHelper.js';
3
3
  export class GridAssignedRowColumnPropertyEditor extends BasePropertyEditor {
4
- //Todo: multiple cell selection, grid area support, span support
4
+ //TODO: multiple cell selection, grid area support, span support
5
5
  _root;
6
6
  constructor(property) {
7
7
  super(property);
@@ -1,7 +1,7 @@
1
1
  import { BasePropertyEditor } from '../BasePropertyEditor.js';
2
2
  import { MetricsEditor } from '../../../../controls/MetricsEditor.js';
3
3
  export class MetricsPropertyEditor extends BasePropertyEditor {
4
- //Todo: metrics editor does not work at all yet
4
+ //TODO: metrics editor does not work at all yet
5
5
  constructor(property) {
6
6
  super(property);
7
7
  const selector = new MetricsEditor();
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { IPropertiesService, RefreshMode } from '../IPropertiesService.js';
3
2
  import { IProperty } from '../IProperty.js';
4
3
  import { IDesignItem } from '../../../item/IDesignItem.js';
@@ -7,8 +6,10 @@ import { BindingTarget } from '../../../item/BindingTarget.js';
7
6
  import { IBinding } from '../../../item/IBinding.js';
8
7
  import { IPropertyGroup } from '../IPropertyGroup.js';
9
8
  export declare abstract class AbstractPropertiesService implements IPropertiesService {
10
- _stylesCache: Map<IDesignItem, Set<string>>;
11
- _cacheClearTimer: NodeJS.Timeout;
9
+ private static _stylesCache;
10
+ private _cssCacheClearTimer;
11
+ private static _bindingsCache;
12
+ private _bindingsCacheClearTimer;
12
13
  abstract getRefreshMode(designItem: IDesignItem): RefreshMode;
13
14
  abstract isHandledElement(designItem: IDesignItem): boolean;
14
15
  protected _notifyChangedProperty(designItem: IDesignItem, property: IProperty, value: any): void;
@@ -4,8 +4,10 @@ import { BindingTarget } from '../../../item/BindingTarget.js';
4
4
  import { PropertyType } from '../PropertyType.js';
5
5
  import { NodeType } from '../../../item/NodeType.js';
6
6
  export class AbstractPropertiesService {
7
- _stylesCache = new Map;
8
- _cacheClearTimer;
7
+ static _stylesCache = new Map;
8
+ _cssCacheClearTimer;
9
+ static _bindingsCache = new Map;
10
+ _bindingsCacheClearTimer;
9
11
  _notifyChangedProperty(designItem, property, value) {
10
12
  }
11
13
  getProperty(designItem, name) {
@@ -104,10 +106,13 @@ export class AbstractPropertiesService {
104
106
  break;
105
107
  }
106
108
  ;
107
- //todo: optimize perf, do not call bindings service for each property.
108
- const bindings = designItems[0].serviceContainer.forSomeServicesTillResult('bindingService', (s) => {
109
- return s.getBindings(designItems[0]);
110
- });
109
+ let bindings = AbstractPropertiesService._bindingsCache.get(designItems[0]);
110
+ if (!bindings) {
111
+ bindings = designItems[0].serviceContainer.forSomeServicesTillResult('bindingService', (s) => s.getBindings(designItems[0]));
112
+ AbstractPropertiesService._bindingsCache.set(designItems[0], bindings);
113
+ clearTimeout(this._bindingsCacheClearTimer);
114
+ this._bindingsCacheClearTimer = setTimeout(() => AbstractPropertiesService._bindingsCache.clear(), 30);
115
+ }
111
116
  if (property.propertyType == PropertyType.cssValue) {
112
117
  if (bindings && bindings.find(x => x.target == BindingTarget.css && x.targetName == property.name))
113
118
  return ValueType.bound;
@@ -117,12 +122,12 @@ export class AbstractPropertiesService {
117
122
  return ValueType.bound;
118
123
  }
119
124
  if (!all && property.propertyType == PropertyType.cssValue) {
120
- let styles = this._stylesCache.get(designItems[0]);
125
+ let styles = AbstractPropertiesService._stylesCache.get(designItems[0]);
121
126
  if (!styles) {
122
127
  styles = new Set(designItems[0].getAllStyles().filter(x => x.selector != null).flatMap(x => x.declarations).map(x => x.name));
123
- this._stylesCache.set(designItems[0], styles);
124
- clearTimeout(this._cacheClearTimer);
125
- this._cacheClearTimer = setTimeout(() => this._stylesCache.clear(), 30);
128
+ AbstractPropertiesService._stylesCache.set(designItems[0], styles);
129
+ clearTimeout(this._cssCacheClearTimer);
130
+ this._cssCacheClearTimer = setTimeout(() => AbstractPropertiesService._stylesCache.clear(), 30);
126
131
  }
127
132
  let cssValue = styles.has(property.name);
128
133
  if (cssValue)
@@ -56,7 +56,7 @@ export class AttributesPropertiesService {
56
56
  all = all && has;
57
57
  some = some || has;
58
58
  });
59
- //todo: optimize perf, do not call bindings service for each property.
59
+ //TODO: optimize perf, do not call bindings service for each property.
60
60
  const bindings = designItems[0].serviceContainer.forSomeServicesTillResult('bindingService', (s) => {
61
61
  return s.getBindings(designItems[0]);
62
62
  });
@@ -64,7 +64,7 @@ export class ContentAndIdPropertiesService extends AbstractPropertiesService {
64
64
  all = all && has;
65
65
  some = some || has;
66
66
  });
67
- //todo: optimize perf, do not call bindings service for each property.
67
+ //TODO: optimize perf, do not call bindings service for each property.
68
68
  const bindings = designItems[0].serviceContainer.forSomeServicesTillResult('bindingService', (s) => {
69
69
  return s.getBindings(designItems[0]);
70
70
  });
@@ -44,7 +44,7 @@ export class CssCurrentPropertiesService extends CommonPropertiesService {
44
44
  // No selector means local style, styleDeclaration is null means new property
45
45
  if (property.styleRule?.selector !== null && property.styleDeclaration) {
46
46
  // styleDeclaration stored Propertygrid is not refreshed after entering a new value, so we need to reload
47
- // TODO: we do not respect if a same style is found in a media query or another @rule, maybe we need a refresh in the stylesheet parser
47
+ //TODO: we do not respect if a same style is found in a media query or another @rule, maybe we need a refresh in the stylesheet parser
48
48
  const decls = designItems[0].instanceServiceContainer.stylesheetService?.getDeclarations(designItems[0], property.styleDeclaration.name);
49
49
  const currentDecl = decls.find(x => x.parent.selector == property.styleDeclaration.parent.selector && x.parent.stylesheetName == property.styleDeclaration.parent.stylesheetName);
50
50
  designItems[0].instanceServiceContainer.stylesheetService.updateDeclarationValue(currentDecl, value, false);
@@ -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];
@@ -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);
@@ -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);
@@ -256,8 +256,10 @@ export class ExtensionManager {
256
256
  e.refresh(cache, event);
257
257
  if (timeout) {
258
258
  const end = performance.now();
259
- if (end - start > timeout)
259
+ if (end - start > timeout) {
260
+ console.warn("refreshExtensions() took too long, stopped refreshing");
260
261
  break outer1;
262
+ }
261
263
  }
262
264
  }
263
265
  catch (err) {
@@ -277,8 +279,10 @@ export class ExtensionManager {
277
279
  e.refresh(cache, event);
278
280
  if (timeout) {
279
281
  const end = performance.now();
280
- if (end - start > timeout)
282
+ if (end - start > timeout) {
283
+ console.warn("refreshExtensions() took too long, stopped refreshing");
281
284
  break outer2;
285
+ }
282
286
  }
283
287
  }
284
288
  }
@@ -314,7 +318,7 @@ export class ExtensionManager {
314
318
  refreshAllAppliedExtentions() {
315
319
  this.refreshAllExtensions([...this.designItemsWithExtentions]);
316
320
  }
317
- //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
318
322
  //maybe store the "shouldAppliedExtensions??"
319
323
  reapplyAllAppliedExtentions() {
320
324
  this.designerCanvas.overlayLayer.startBatch();
@@ -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) {
@@ -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);
@@ -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.12",
4
+ "version": "0.1.13",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "jochen.kuehner@gmx.de",