@node-projects/web-component-designer 0.1.246 → 0.1.248

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 (38) hide show
  1. package/dist/elements/item/DesignItem.js +1 -5
  2. package/dist/elements/item/DesignItem.js.map +1 -1
  3. package/dist/elements/services/DefaultServiceBootstrap.ts.BASE.d.ts +3 -0
  4. package/dist/elements/services/DefaultServiceBootstrap.ts.BASE.js +216 -0
  5. package/dist/elements/services/DefaultServiceBootstrap.ts.LOCAL.d.ts +3 -0
  6. package/dist/elements/services/DefaultServiceBootstrap.ts.LOCAL.js +220 -0
  7. package/dist/elements/services/DefaultServiceBootstrap.ts.REMOTE.d.ts +3 -0
  8. package/dist/elements/services/DefaultServiceBootstrap.ts.REMOTE.js +220 -0
  9. package/dist/elements/services/designItemService/DesignItemService copy.d.ts +7 -0
  10. package/dist/elements/services/designItemService/DesignItemService copy.js +6 -0
  11. package/dist/elements/services/designItemService/DesignItemService.js +1 -1
  12. package/dist/elements/services/designItemService/DesignItemService.js.map +1 -1
  13. package/dist/elements/services/placementService/AbsolutePlacementService copy.d.ts +19 -0
  14. package/dist/elements/services/placementService/AbsolutePlacementService copy.js +155 -0
  15. package/dist/elements/services/propertiesService/IProperty.d.ts +1 -0
  16. package/dist/elements/services/propertiesService/services/AbstractPolymerLikePropertiesService.js +13 -8
  17. package/dist/elements/services/propertiesService/services/AbstractPolymerLikePropertiesService.js.map +1 -1
  18. package/dist/elements/widgets/bindings/BindingsEditor.d.ts +17 -0
  19. package/dist/elements/widgets/bindings/BindingsEditor.js +54 -0
  20. package/dist/elements/widgets/bindings/BindingsEditor.js.map +1 -0
  21. package/dist/elements/widgets/designerView/DomConverter.d.ts +1 -1
  22. package/dist/elements/widgets/designerView/extensions/CanvasExtension.d.ts +10 -0
  23. package/dist/elements/widgets/designerView/extensions/CanvasExtension.js +31 -0
  24. package/dist/elements/widgets/designerView/extensions/CanvasExtensionProvider.d.ts +10 -0
  25. package/dist/elements/widgets/designerView/extensions/CanvasExtensionProvider.js +16 -0
  26. package/dist/elements/widgets/designerView/extensions/MarginExtension copy.d.ts +10 -0
  27. package/dist/elements/widgets/designerView/extensions/MarginExtension copy.js +32 -0
  28. package/dist/elements/widgets/designerView/extensions/MarginExtensionProvider copy.d.ts +10 -0
  29. package/dist/elements/widgets/designerView/extensions/MarginExtensionProvider copy.js +16 -0
  30. package/dist/elements/widgets/designerView/extensions/buttons/AbstractDesignViewConfigButton copy.d.ts +12 -0
  31. package/dist/elements/widgets/designerView/extensions/buttons/AbstractDesignViewConfigButton copy.js +46 -0
  32. package/dist/elements/widgets/designerView/extensions/buttons/GridExtensionDesignViewConfigButtons copy.d.ts +4 -0
  33. package/dist/elements/widgets/designerView/extensions/buttons/GridExtensionDesignViewConfigButtons copy.js +7 -0
  34. package/dist/elements/widgets/designerView/extensions/buttons/OptionsConfigButton.d.ts +12 -0
  35. package/dist/elements/widgets/designerView/extensions/buttons/OptionsConfigButton.js +46 -0
  36. package/dist/elements/widgets/propertyGrid/PropertyGridPropertyList.js +1 -1
  37. package/dist/elements/widgets/propertyGrid/PropertyGridPropertyList.js.map +1 -1
  38. package/package.json +1 -1
@@ -0,0 +1,155 @@
1
+ import { DomConverter } from '../../widgets/designerView/DomConverter.js';
2
+ import { combineTransforms, extractTranslationFromDOMMatrix, getResultingTransformationBetweenElementAndAllAncestors } from '../../helper/TransformHelper.js';
3
+ import { filterChildPlaceItems, getDesignItemCurrentPos, placeDesignItem } from '../../helper/LayoutHelper.js';
4
+ import { ExtensionType } from '../../widgets/designerView/extensions/ExtensionType.js';
5
+ import { straightenLine } from '../../helper/PathDataPolyfill.js';
6
+ export class AbsolutePlacementService {
7
+ serviceForContainer(container, containerStyle, mode, item, event) {
8
+ if (item != null && (item.getComputedStyle()?.position == 'absolute' || item.getComputedStyle()?.position == 'relative'))
9
+ return true;
10
+ /*if (containerStyle.display === 'grid' || containerStyle.display === 'inline-grid' ||
11
+ containerStyle.display === 'flex' || containerStyle.display === 'inline-flex')
12
+ return false;*/
13
+ return mode == 'drop' && event.ctrlKey;
14
+ }
15
+ isEnterableContainer(container) {
16
+ if (DomConverter.IsSelfClosingElement(container.element.localName))
17
+ return false;
18
+ if (!container.isRootItem && container.element.shadowRoot && container.element.shadowRoot.querySelector('slot') == null)
19
+ return false;
20
+ return true;
21
+ }
22
+ canEnter(container, items) {
23
+ if (!this.isEnterableContainer(container))
24
+ return false;
25
+ if (!items.every(x => !x.element.contains(container.element) && x !== container))
26
+ return false;
27
+ return true;
28
+ }
29
+ canLeave(container, items) {
30
+ return true;
31
+ }
32
+ getElementOffset(container, designItem) {
33
+ return container.instanceServiceContainer.designerCanvas.getNormalizedElementCoordinates(container.element);
34
+ }
35
+ calculateTrack(event, designerCanvas, startPoint, offsetInControl, newPoint, item) {
36
+ let trackX = newPoint.x - startPoint.x;
37
+ let trackY = newPoint.y - startPoint.y;
38
+ if (!event.ctrlKey) {
39
+ if (designerCanvas.alignOnGrid) {
40
+ let p = getDesignItemCurrentPos(item, 'position');
41
+ p.x = p.x % designerCanvas.gridSize;
42
+ p.y = p.y % designerCanvas.gridSize;
43
+ trackX = Math.round(trackX / designerCanvas.gridSize) * designerCanvas.gridSize - p.x;
44
+ trackY = Math.round(trackY / designerCanvas.gridSize) * designerCanvas.gridSize - p.y;
45
+ }
46
+ else if (designerCanvas.alignOnSnap) {
47
+ let rect = item.element.getBoundingClientRect();
48
+ let newPos = designerCanvas.snapLines.snapToPosition({ x: (newPoint.x - offsetInControl.x), y: (newPoint.y - offsetInControl.y) }, { width: rect.width / designerCanvas.scaleFactor, height: rect.height / designerCanvas.scaleFactor }, { x: trackX > 0 ? 1 : -1, y: trackY > 0 ? 1 : -1 });
49
+ if (newPos.x !== null) {
50
+ trackX = newPos.x - Math.round(startPoint.x) + Math.round(offsetInControl.x);
51
+ }
52
+ else {
53
+ trackX = Math.round(trackX);
54
+ }
55
+ if (newPos.y !== null) {
56
+ trackY = newPos.y - Math.round(startPoint.y) + Math.round(offsetInControl.y);
57
+ }
58
+ else {
59
+ trackY = Math.round(trackY);
60
+ }
61
+ }
62
+ }
63
+ return { x: trackX, y: trackY };
64
+ }
65
+ placePoint(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items) {
66
+ let trackX = newPoint.x;
67
+ let trackY = newPoint.y;
68
+ if (!event.ctrlKey) {
69
+ if (designerCanvas.alignOnGrid) {
70
+ trackX = Math.round(trackX / designerCanvas.gridSize) * designerCanvas.gridSize;
71
+ trackY = Math.round(trackY / designerCanvas.gridSize) * designerCanvas.gridSize;
72
+ }
73
+ else if (designerCanvas.alignOnSnap) {
74
+ let newPos = designerCanvas.snapLines.snapToPosition({ x: newPoint.x - offsetInControl.x, y: newPoint.y - offsetInControl.y }, null, { x: trackX > 0 ? 1 : -1, y: trackY > 0 ? 1 : -1 });
75
+ if (newPos.x !== null) {
76
+ trackX = newPos.x;
77
+ }
78
+ else {
79
+ trackX = Math.round(trackX);
80
+ }
81
+ if (newPos.y !== null) {
82
+ trackY = newPos.y;
83
+ }
84
+ else {
85
+ trackY = Math.round(trackY);
86
+ }
87
+ }
88
+ }
89
+ return { x: trackX, y: trackY };
90
+ }
91
+ startPlace(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items) {
92
+ }
93
+ place(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items) {
94
+ //TODO: this should revert all undo actions while active
95
+ //maybe a undo actions returns itself or an id so it could be changed?
96
+ let track = this.calculateTrack(event, designerCanvas, startPoint, offsetInControl, newPoint, items[0]);
97
+ if (event.shiftKey) {
98
+ track = straightenLine({ x: 0, y: 0 }, track, true);
99
+ }
100
+ let filteredItems = filterChildPlaceItems(items);
101
+ for (const designItem of filteredItems) {
102
+ const canvas = designItem.instanceServiceContainer.designerCanvas.rootDesignItem.element;
103
+ let originalElementAndAllAncestorsMultipliedMatrix = getResultingTransformationBetweenElementAndAllAncestors(designItem.parent.element, canvas, true);
104
+ let transformMatrixParentTransformsCompensated = null;
105
+ if (originalElementAndAllAncestorsMultipliedMatrix) {
106
+ transformMatrixParentTransformsCompensated = new DOMPoint(track.x, track.y, 0, 0).matrixTransform(originalElementAndAllAncestorsMultipliedMatrix.inverse());
107
+ }
108
+ else {
109
+ transformMatrixParentTransformsCompensated = new DOMPoint(track.x, track.y, 0, 0);
110
+ }
111
+ const translationMatrix = new DOMMatrix().translate(transformMatrixParentTransformsCompensated.x, transformMatrixParentTransformsCompensated.y);
112
+ combineTransforms(designItem.element, designItem.getStyle('transform'), translationMatrix.toString());
113
+ }
114
+ }
115
+ moveElements(designItems, position, absolute) {
116
+ //TODO: Check if we set left or right
117
+ //TODO: Use CSS units
118
+ for (let d of designItems) {
119
+ if (position.x)
120
+ d.setStyle('left', parseInt(d.element.style.left) - position.x + 'px');
121
+ if (position.y)
122
+ d.setStyle('top', parseInt(d.element.style.top) - position.y + 'px');
123
+ }
124
+ designItems[0].instanceServiceContainer.designerCanvas.extensionManager.refreshExtensions(designItems);
125
+ }
126
+ enterContainer(container, items, mode) {
127
+ let filterdItems = filterChildPlaceItems(items);
128
+ for (let i of filterdItems) {
129
+ if (mode == 'drop')
130
+ i.setStyle('position', 'absolute');
131
+ container.insertChild(i);
132
+ if (i.lastContainerSize) {
133
+ if (!i.hasStyle('width'))
134
+ i.setStyle('width', i.lastContainerSize.width + 'px');
135
+ if (!i.hasStyle('height'))
136
+ i.setStyle('height', i.lastContainerSize.height + 'px');
137
+ }
138
+ }
139
+ }
140
+ leaveContainer(container, items) {
141
+ }
142
+ finishPlace(event, designerCanvas, container, startPoint, offsetInControl, newPoint, items) {
143
+ let filterdItems = filterChildPlaceItems(items);
144
+ for (const designItem of filterdItems) {
145
+ let translation = extractTranslationFromDOMMatrix(new DOMMatrix(designItem.element.style.transform));
146
+ const stylesMapOffset = extractTranslationFromDOMMatrix(new DOMMatrix(designItem.getStyle('transform') ?? ''));
147
+ designItem.element.style.transform = designItem.getStyle('transform') ?? '';
148
+ let track = { x: translation.x, y: translation.y };
149
+ placeDesignItem(container, designItem, { x: track.x - stylesMapOffset.x, y: track.y - stylesMapOffset.y }, 'position');
150
+ }
151
+ for (const item of items) {
152
+ designerCanvas.extensionManager.removeExtension(item, ExtensionType.Placement);
153
+ }
154
+ }
155
+ }
@@ -18,5 +18,6 @@ export interface IProperty {
18
18
  value?: any;
19
19
  service: IPropertiesService;
20
20
  defaultValue?: any;
21
+ example?: string;
21
22
  propertyType: PropertyType;
22
23
  }
@@ -16,34 +16,39 @@ export class AbstractPolymerLikePropertiesService extends AbstractPropertiesServ
16
16
  for (const name in list) {
17
17
  const polymerProperty = list[name];
18
18
  let type = polymerProperty;
19
- if (polymerProperty.type)
19
+ let description = null;
20
+ let example = null;
21
+ if (polymerProperty.type) {
20
22
  type = polymerProperty.type;
23
+ description = polymerProperty.description;
24
+ example = polymerProperty.example;
25
+ }
21
26
  if (type === String) {
22
- let property = { name: name, type: "string", service: this, propertyType: PropertyType.propertyAndAttribute };
27
+ let property = { name: name, type: "string", service: this, propertyType: PropertyType.propertyAndAttribute, description: description, example: example };
23
28
  properties.push(property);
24
29
  }
25
30
  else if (type === Object) {
26
- let property = { name: name, type: "object", service: this, propertyType: PropertyType.propertyAndAttribute };
31
+ let property = { name: name, type: "object", service: this, propertyType: PropertyType.propertyAndAttribute, description: description, example: example };
27
32
  properties.push(property);
28
33
  }
29
34
  else if (type === Number) {
30
- let property = { name: name, type: "number", service: this, propertyType: PropertyType.propertyAndAttribute };
35
+ let property = { name: name, type: "number", service: this, propertyType: PropertyType.propertyAndAttribute, description: description, example: example };
31
36
  properties.push(property);
32
37
  }
33
38
  else if (type === Date) {
34
- let property = { name: name, type: "date", service: this, propertyType: PropertyType.propertyAndAttribute };
39
+ let property = { name: name, type: "date", service: this, propertyType: PropertyType.propertyAndAttribute, description: description, example: example };
35
40
  properties.push(property);
36
41
  }
37
42
  else if (type === Boolean) {
38
- let property = { name: name, type: "boolean", service: this, propertyType: PropertyType.propertyAndAttribute };
43
+ let property = { name: name, type: "boolean", service: this, propertyType: PropertyType.propertyAndAttribute, description: description, example: example };
39
44
  properties.push(property);
40
45
  }
41
46
  else if (PropertiesHelper.isTypescriptEnum(type)) {
42
- let property = { name: name, type: "enum", enumValues: PropertiesHelper.getTypescriptEnumEntries(type), service: this, propertyType: PropertyType.propertyAndAttribute };
47
+ let property = { name: name, type: "enum", enumValues: PropertiesHelper.getTypescriptEnumEntries(type), service: this, propertyType: PropertyType.propertyAndAttribute, description: description, example: example };
43
48
  properties.push(property);
44
49
  }
45
50
  else {
46
- let property = { name: name, type: "string", service: this, propertyType: PropertyType.propertyAndAttribute };
51
+ let property = { name: name, type: "string", service: this, propertyType: PropertyType.propertyAndAttribute, description: description, example: example };
47
52
  properties.push(property);
48
53
  }
49
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractPolymerLikePropertiesService.js","sourceRoot":"","sources":["../../../../../src/elements/services/propertiesService/services/AbstractPolymerLikePropertiesService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AbstractPolymerLikePropertiesService.js","sourceRoot":"","sources":["../../../../../src/elements/services/propertiesService/services/AbstractPolymerLikePropertiesService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { BaseCustomWebComponentConstructorAppend } from '@node-projects/base-custom-webcomponent';
2
+ export declare enum targetType {
3
+ 'property' = "property",
4
+ 'style' = "style",
5
+ 'attribute' = "attribute",
6
+ 'event' = "event"
7
+ }
8
+ export declare enum valueType {
9
+ 'string' = "string",
10
+ 'number' = "number",
11
+ 'boolean' = "boolean"
12
+ }
13
+ export declare class BindingsEditor extends BaseCustomWebComponentConstructorAppend {
14
+ static readonly style: CSSStyleSheet;
15
+ static readonly template: HTMLTemplateElement;
16
+ constructor(targetType: targetType);
17
+ }
@@ -0,0 +1,54 @@
1
+ import { css, BaseCustomWebComponentConstructorAppend, html } from '@node-projects/base-custom-webcomponent';
2
+ export var targetType;
3
+ (function (targetType) {
4
+ targetType["property"] = "property";
5
+ targetType["style"] = "style";
6
+ targetType["attribute"] = "attribute";
7
+ targetType["event"] = "event";
8
+ })(targetType || (targetType = {}));
9
+ export var valueType;
10
+ (function (valueType) {
11
+ valueType["string"] = "string";
12
+ valueType["number"] = "number";
13
+ valueType["boolean"] = "boolean";
14
+ })(valueType || (valueType = {}));
15
+ export class BindingsEditor extends BaseCustomWebComponentConstructorAppend {
16
+ static style = css `
17
+ * { font-size: 16px; }
18
+ .list {
19
+ display: flex;
20
+ flex-direction: column;
21
+ gap: 5px;
22
+ }
23
+ `;
24
+ static template = html `
25
+ <div class="list" style="">
26
+ <span>Expression</span>
27
+ <div>
28
+ <input style="width:100%;">
29
+ <button>...</button>
30
+ </div>
31
+ <!--<span>Target</span>
32
+ <select id="target">
33
+ <option>Property</option>
34
+ <option>Attribute</option>
35
+ <option>Style</option>
36
+ <option>Event</option>
37
+ </select>-->
38
+ <div>
39
+ <input id="mode" type="checkbox"><label for="mode">Two Way</label>
40
+ </div>
41
+ <div>
42
+ <input id="inverted" type="checkbox"><label for="inverted">Inverted</label>
43
+ </div>
44
+ <div>
45
+ <input id="nullSafe" type="checkbox"><label for="nullSafe">Null Safe</label>
46
+ </div>
47
+ </div>
48
+ `;
49
+ constructor(targetType) {
50
+ super();
51
+ }
52
+ }
53
+ customElements.define('node-projects-bindings-editor', BindingsEditor);
54
+ //# sourceMappingURL=BindingsEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BindingsEditor.js","sourceRoot":"","sources":["../../../../src/elements/widgets/bindings/BindingsEditor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,uCAAuC,EAAE,IAAI,EAAE,MAAM,yCAAyC,CAAC;AAE7G,MAAM,CAAN,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,mCAAuB,CAAA;IACvB,6BAAiB,CAAA;IACjB,qCAAyB,CAAA;IACzB,6BAAiB,CAAA;AACnB,CAAC,EALW,UAAU,KAAV,UAAU,QAKrB;AAED,MAAM,CAAN,IAAY,SAIX;AAJD,WAAY,SAAS;IACnB,8BAAmB,CAAA;IACnB,8BAAmB,CAAA;IACnB,gCAAqB,CAAA;AACvB,CAAC,EAJW,SAAS,KAAT,SAAS,QAIpB;AAED,MAAM,OAAO,cAAe,SAAQ,uCAAuC;IAEzE,MAAM,CAAmB,KAAK,GAAG,GAAG,CAAA;;;;;;;KAOjC,CAAC;IAEJ,MAAM,CAAmB,QAAQ,GAAG,IAAI,CAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBvC,CAAC;IAEF,YAAY,UAAsB;QAChC,KAAK,EAAE,CAAC;IACV,CAAC;;AAMH,cAAc,CAAC,MAAM,CAAC,+BAA+B,EAAE,cAAc,CAAC,CAAC"}
@@ -2,6 +2,6 @@ import { IDesignItem } from "../../item/IDesignItem.js";
2
2
  export declare class DomConverter {
3
3
  static normalizeAttributeValue(value: string | number, useSingleQuotes?: boolean): string;
4
4
  static normalizeContentValue(value: string): string;
5
- static IsSelfClosingElement(tag: string): tag is "link" | "img" | "area" | "base" | "br" | "col" | "embed" | "hr" | "input" | "keygen" | "meta" | "param" | "source" | "track" | "wbr";
5
+ static IsSelfClosingElement(tag: string): tag is "link" | "img" | "input" | "br" | "area" | "base" | "col" | "embed" | "hr" | "keygen" | "meta" | "param" | "source" | "track" | "wbr";
6
6
  static ConvertToString(designItems: IDesignItem[], beautifyOutput?: boolean, updatePositions?: boolean): string;
7
7
  }
@@ -0,0 +1,10 @@
1
+ import { IDesignItem } from '../../../item/IDesignItem.js';
2
+ import { IDesignerCanvas } from '../IDesignerCanvas.js';
3
+ import { AbstractExtension } from './AbstractExtension.js';
4
+ import { IExtensionManager } from './IExtensionManger.js';
5
+ export declare class CanvasExtension extends AbstractExtension {
6
+ constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
7
+ extend(): void;
8
+ refresh(): void;
9
+ dispose(): void;
10
+ }
@@ -0,0 +1,31 @@
1
+ import { AbstractExtension } from './AbstractExtension.js';
2
+ export class CanvasExtension extends AbstractExtension {
3
+ constructor(extensionManager, designerView, extendedItem) {
4
+ super(extensionManager, designerView, extendedItem);
5
+ }
6
+ extend() {
7
+ this.refresh();
8
+ }
9
+ refresh() {
10
+ const itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
11
+ const computedStyle = getComputedStyle(this.extendedItem.element);
12
+ if (computedStyle.margin !== '0px') {
13
+ const left = Number.parseFloat(computedStyle.marginLeft.replace('px', ''));
14
+ const top = Number.parseFloat(computedStyle.marginTop.replace('px', ''));
15
+ const right = Number.parseFloat(computedStyle.marginRight.replace('px', ''));
16
+ const bottom = Number.parseFloat(computedStyle.marginBottom.replace('px', ''));
17
+ if (!isNaN(left) && !isNaN(top) && !isNaN(right) && !isNaN(bottom)) {
18
+ if (this._valuesHaveChanges(left, top, right, bottom, itemRect.x, itemRect.y, itemRect.width, itemRect.height)) {
19
+ this._removeAllOverlays();
20
+ this._drawRect(itemRect.x - left, itemRect.y - top, left + itemRect.width + right, top, 'svg-margin');
21
+ this._drawRect(itemRect.x - left, itemRect.y, left, itemRect.height, 'svg-margin');
22
+ this._drawRect(itemRect.x + itemRect.width, itemRect.y, right, itemRect.height, 'svg-margin');
23
+ this._drawRect(itemRect.x - left, itemRect.y + itemRect.height, left + itemRect.width + right, bottom, 'svg-margin');
24
+ }
25
+ }
26
+ }
27
+ }
28
+ dispose() {
29
+ this._removeAllOverlays();
30
+ }
31
+ }
@@ -0,0 +1,10 @@
1
+ import { IDesignerExtensionProvider } from './IDesignerExtensionProvider.js';
2
+ import { IDesignItem } from '../../../item/IDesignItem.js';
3
+ import { IDesignerCanvas } from '../IDesignerCanvas.js';
4
+ import { IDesignerExtension } from './IDesignerExtension.js';
5
+ import { IExtensionManager } from './IExtensionManger.js';
6
+ export declare class CanvasExtensionProvider implements IDesignerExtensionProvider {
7
+ shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
8
+ getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
9
+ readonly style: CSSStyleSheet;
10
+ }
@@ -0,0 +1,16 @@
1
+ import { CanvasExtension } from './CanvasExtension.js';
2
+ import { css } from "@node-projects/base-custom-webcomponent";
3
+ import { NodeType } from '../../../item/NodeType.js';
4
+ export class CanvasExtensionProvider {
5
+ shouldExtend(extensionManager, designerView, designItem) {
6
+ if (designItem.nodeType == NodeType.Element)
7
+ return true;
8
+ return false;
9
+ }
10
+ getExtension(extensionManager, designerView, designItem) {
11
+ return new CanvasExtension(extensionManager, designerView, designItem);
12
+ }
13
+ style = css `
14
+ .svg-margin { fill: #ff944766; }
15
+ `;
16
+ }
@@ -0,0 +1,10 @@
1
+ import { IDesignItem } from '../../../item/IDesignItem.js';
2
+ import { IDesignerCanvas } from '../IDesignerCanvas.js';
3
+ import { AbstractExtension } from './AbstractExtension.js';
4
+ import { IExtensionManager } from './IExtensionManger.js';
5
+ export declare class MarginExtension extends AbstractExtension {
6
+ constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
7
+ extend(): void;
8
+ refresh(): void;
9
+ dispose(): void;
10
+ }
@@ -0,0 +1,32 @@
1
+ import { AbstractExtension } from './AbstractExtension.js';
2
+ import { OverlayLayer } from './OverlayLayer.js';
3
+ export class MarginExtension extends AbstractExtension {
4
+ constructor(extensionManager, designerView, extendedItem) {
5
+ super(extensionManager, designerView, extendedItem);
6
+ }
7
+ extend() {
8
+ this.refresh();
9
+ }
10
+ refresh() {
11
+ const itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
12
+ const computedStyle = getComputedStyle(this.extendedItem.element);
13
+ if (computedStyle.margin !== '0px') {
14
+ const left = Number.parseFloat(computedStyle.marginLeft.replace('px', ''));
15
+ const top = Number.parseFloat(computedStyle.marginTop.replace('px', ''));
16
+ const right = Number.parseFloat(computedStyle.marginRight.replace('px', ''));
17
+ const bottom = Number.parseFloat(computedStyle.marginBottom.replace('px', ''));
18
+ if (!isNaN(left) && !isNaN(top) && !isNaN(right) && !isNaN(bottom)) {
19
+ if (this._valuesHaveChanges(left, top, right, bottom, itemRect.x, itemRect.y, itemRect.width, itemRect.height)) {
20
+ this._removeAllOverlays();
21
+ this._drawRect(itemRect.x - left, itemRect.y - top, left + itemRect.width + right, top, 'svg-margin', null, OverlayLayer.Background);
22
+ this._drawRect(itemRect.x - left, itemRect.y, left, itemRect.height, 'svg-margin', null, OverlayLayer.Background);
23
+ this._drawRect(itemRect.x + itemRect.width, itemRect.y, right, itemRect.height, 'svg-margin', null, OverlayLayer.Background);
24
+ this._drawRect(itemRect.x - left, itemRect.y + itemRect.height, left + itemRect.width + right, bottom, 'svg-margin', null, OverlayLayer.Background);
25
+ }
26
+ }
27
+ }
28
+ }
29
+ dispose() {
30
+ this._removeAllOverlays();
31
+ }
32
+ }
@@ -0,0 +1,10 @@
1
+ import { IDesignerExtensionProvider } from './IDesignerExtensionProvider.js';
2
+ import { IDesignItem } from '../../../item/IDesignItem.js';
3
+ import { IDesignerCanvas } from '../IDesignerCanvas.js';
4
+ import { IDesignerExtension } from './IDesignerExtension.js';
5
+ import { IExtensionManager } from './IExtensionManger.js';
6
+ export declare class MarginExtensionProvider implements IDesignerExtensionProvider {
7
+ shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
8
+ getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
9
+ readonly style: CSSStyleSheet;
10
+ }
@@ -0,0 +1,16 @@
1
+ import { MarginExtension } from './MarginExtension.js';
2
+ import { css } from "@node-projects/base-custom-webcomponent";
3
+ import { NodeType } from '../../../item/NodeType.js';
4
+ export class MarginExtensionProvider {
5
+ shouldExtend(extensionManager, designerView, designItem) {
6
+ if (designItem.nodeType == NodeType.Element)
7
+ return true;
8
+ return false;
9
+ }
10
+ getExtension(extensionManager, designerView, designItem) {
11
+ return new MarginExtension(extensionManager, designerView, designItem);
12
+ }
13
+ style = css `
14
+ .svg-margin { fill: #ff944766; }
15
+ `;
16
+ }
@@ -0,0 +1,12 @@
1
+ import { IContextMenuItem } from "../../../../helper/contextMenu/IContextMenuItem.js";
2
+ import { DesignerView } from "../../designerView.js";
3
+ import { IDesignerCanvas } from '../../IDesignerCanvas.js';
4
+ import { IDesignViewConfigButtonsProvider } from "./IDesignViewConfigButtonsProvider.js";
5
+ export declare class AbstractDesignViewConfigButton implements IDesignViewConfigButtonsProvider {
6
+ protected settingName: any;
7
+ private content;
8
+ private tooltp;
9
+ private contextmenu;
10
+ constructor(settingName: string, content: string | HTMLElement, tooltip: string, contextmenu?: IContextMenuItem[]);
11
+ provideButtons(designerView: DesignerView, designerCanvas: IDesignerCanvas): HTMLElement[];
12
+ }
@@ -0,0 +1,46 @@
1
+ import { ContextMenu } from "../../../../helper/contextMenu/ContextMenu.js";
2
+ export class AbstractDesignViewConfigButton {
3
+ settingName;
4
+ content;
5
+ tooltp;
6
+ contextmenu;
7
+ constructor(settingName, content, tooltip, contextmenu) {
8
+ this.settingName = settingName;
9
+ this.content = content;
10
+ this.tooltp = tooltip;
11
+ this.contextmenu = contextmenu;
12
+ }
13
+ provideButtons(designerView, designerCanvas) {
14
+ const btn = document.createElement('div');
15
+ if (typeof this.content == 'string')
16
+ btn.innerHTML = this.content;
17
+ else
18
+ btn.appendChild(this.content);
19
+ btn.title = this.tooltp;
20
+ btn.className = 'toolbar-control';
21
+ designerCanvas.instanceServiceContainer.designContext.extensionOptionsChanged.on(() => {
22
+ if (extensionOptions[this.settingName] !== false)
23
+ btn.classList.add('selected');
24
+ else
25
+ btn.classList.remove('selected');
26
+ });
27
+ const extensionOptions = designerCanvas.instanceServiceContainer.designContext.extensionOptions;
28
+ if (extensionOptions[this.settingName] !== false)
29
+ btn.classList.add('selected');
30
+ btn.onclick = () => {
31
+ const val = extensionOptions[this.settingName];
32
+ extensionOptions[this.settingName] = val === false ? true : false;
33
+ if (extensionOptions[this.settingName] !== false)
34
+ btn.classList.add('selected');
35
+ else
36
+ btn.classList.remove('selected');
37
+ };
38
+ btn.oncontextmenu = (e) => {
39
+ e.preventDefault();
40
+ if (this.contextmenu) {
41
+ ContextMenu.show(this.contextmenu, e);
42
+ }
43
+ };
44
+ return [btn];
45
+ }
46
+ }
@@ -0,0 +1,4 @@
1
+ import { AbstractDesignViewConfigButton } from "./AbstractDesignViewConfigButton.js";
2
+ export declare class GridExtensionDesignViewConfigButtons extends AbstractDesignViewConfigButton {
3
+ constructor();
4
+ }
@@ -0,0 +1,7 @@
1
+ import { gridExtensionShowOverlayOptionName } from "../grid/DisplayGridExtensionProvider.js";
2
+ import { AbstractDesignViewConfigButton } from "./AbstractDesignViewConfigButton.js";
3
+ export class GridExtensionDesignViewConfigButtons extends AbstractDesignViewConfigButton {
4
+ constructor() {
5
+ super(gridExtensionShowOverlayOptionName, "G", "show grid overlay");
6
+ }
7
+ }
@@ -0,0 +1,12 @@
1
+ import { IContextMenuItem } from "../../../../helper/contextMenu/IContextMenuItem.js";
2
+ import { DesignerView } from "../../designerView.js";
3
+ import { IDesignerCanvas } from '../../IDesignerCanvas.js';
4
+ import { IDesignViewConfigButtonsProvider } from "./IDesignViewConfigButtonsProvider.js";
5
+ export declare class AbstractDesignViewConfigButton implements IDesignViewConfigButtonsProvider {
6
+ protected settingName: any;
7
+ private content;
8
+ private tooltp;
9
+ private contextmenu;
10
+ constructor(settingName: string, content: string | HTMLElement, tooltip: string, contextmenu?: IContextMenuItem[]);
11
+ provideButtons(designerView: DesignerView, designerCanvas: IDesignerCanvas): HTMLElement[];
12
+ }
@@ -0,0 +1,46 @@
1
+ import { ContextMenu } from "../../../../helper/contextMenu/ContextMenu.js";
2
+ export class AbstractDesignViewConfigButton {
3
+ settingName;
4
+ content;
5
+ tooltp;
6
+ contextmenu;
7
+ constructor(settingName, content, tooltip, contextmenu) {
8
+ this.settingName = settingName;
9
+ this.content = content;
10
+ this.tooltp = tooltip;
11
+ this.contextmenu = contextmenu;
12
+ }
13
+ provideButtons(designerView, designerCanvas) {
14
+ const btn = document.createElement('div');
15
+ if (typeof this.content == 'string')
16
+ btn.innerHTML = this.content;
17
+ else
18
+ btn.appendChild(this.content);
19
+ btn.title = this.tooltp;
20
+ btn.className = 'toolbar-control';
21
+ designerCanvas.instanceServiceContainer.designContext.extensionOptionsChanged.on(() => {
22
+ if (extensionOptions[this.settingName] !== false)
23
+ btn.classList.add('selected');
24
+ else
25
+ btn.classList.remove('selected');
26
+ });
27
+ const extensionOptions = designerCanvas.instanceServiceContainer.designContext.extensionOptions;
28
+ if (extensionOptions[this.settingName] !== false)
29
+ btn.classList.add('selected');
30
+ btn.onclick = () => {
31
+ const val = extensionOptions[this.settingName];
32
+ extensionOptions[this.settingName] = val === false ? true : false;
33
+ if (extensionOptions[this.settingName] !== false)
34
+ btn.classList.add('selected');
35
+ else
36
+ btn.classList.remove('selected');
37
+ };
38
+ btn.oncontextmenu = (e) => {
39
+ e.preventDefault();
40
+ if (this.contextmenu) {
41
+ ContextMenu.show(this.contextmenu, e);
42
+ }
43
+ };
44
+ return [btn];
45
+ }
46
+ }
@@ -230,7 +230,7 @@ export class PropertyGridPropertyList extends BaseCustomWebComponentLazyAppend {
230
230
  let label = document.createElement("label");
231
231
  label.htmlFor = p.name;
232
232
  label.textContent = p.name;
233
- label.title = p.name + ' (type: ' + p.type + (p.defaultValue ? ', default: ' + p.defaultValue : '') + ', propertytype: ' + p.propertyType + ')';
233
+ label.title = p.description ?? (p.name + ' (type: ' + p.type + (p.defaultValue ? ', default: ' + p.defaultValue : '') + ', propertytype: ' + p.propertyType + ')');
234
234
  label.ondragleave = (e) => this._onDragLeave(e, p, label);
235
235
  label.ondragover = (e) => this._onDragOver(e, p, label);
236
236
  label.ondrop = (e) => this._onDrop(e, p, label);