@node-projects/web-component-designer 0.0.47 → 0.0.51

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 (120) hide show
  1. package/dist/elements/helper/GridHelper.d.ts +16 -0
  2. package/dist/elements/helper/GridHelper.js +107 -0
  3. package/dist/elements/helper/Helper.d.ts +3 -0
  4. package/dist/elements/helper/Helper.js +3 -0
  5. package/dist/elements/item/DesignItem.d.ts +4 -2
  6. package/dist/elements/item/DesignItem.js +6 -3
  7. package/dist/elements/item/IDesignItem.d.ts +4 -2
  8. package/dist/elements/services/htmlWriterService/HtmlWriterService.js +1 -6
  9. package/dist/elements/services/placementService/DefaultPlacementService.js +6 -0
  10. package/dist/elements/services/placementService/GridPlacementService.js +52 -1
  11. package/dist/elements/services/undoService/transactionItems/CssStyleChangeAction.d.ts +2 -2
  12. package/dist/elements/widgets/designerView/DomConverter.d.ts +1 -1
  13. package/dist/elements/widgets/designerView/DomConverter.js +2 -0
  14. package/dist/elements/widgets/designerView/IDesignerCanvas.d.ts +2 -0
  15. package/dist/elements/widgets/designerView/designerCanvas.d.ts +2 -1
  16. package/dist/elements/widgets/designerView/designerCanvas.js +2 -2
  17. package/dist/elements/widgets/designerView/extensions/GridExtension.js +11 -97
  18. package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.js +2 -2
  19. package/dist/elements/widgets/designerView/extensions/contextMenu/CopyPasteContextMenu.d.ts +2 -2
  20. package/dist/elements/widgets/designerView/extensions/contextMenu/CopyPasteContextMenu.js +1 -1
  21. package/dist/elements/widgets/designerView/extensions/contextMenu/IContextMenuExtension.d.ts +2 -1
  22. package/dist/elements/widgets/designerView/extensions/contextMenu/ItemsBelowContextMenu.d.ts +2 -2
  23. package/dist/elements/widgets/designerView/extensions/contextMenu/ItemsBelowContextMenu.js +4 -3
  24. package/dist/elements/widgets/designerView/extensions/contextMenu/MultipleItemsSelectedContextMenu.d.ts +2 -2
  25. package/dist/elements/widgets/designerView/extensions/contextMenu/MultipleItemsSelectedContextMenu.js +1 -1
  26. package/dist/elements/widgets/designerView/extensions/contextMenu/ZMoveContextMenu.d.ts +2 -2
  27. package/dist/elements/widgets/designerView/extensions/contextMenu/ZMoveContextMenu.js +1 -1
  28. package/dist/elements/widgets/propertyGrid/PropertyGridWithHeader.js +2 -2
  29. package/dist/elements/widgets/treeView/treeViewExtended.d.ts +2 -0
  30. package/dist/elements/widgets/treeView/treeViewExtended.js +18 -1
  31. package/dist/index.d.ts +1 -1
  32. package/package.json +1 -1
  33. package/dist/elements/controls/ImageButtonListSelector copy.d.ts +0 -17
  34. package/dist/elements/controls/ImageButtonListSelector copy.js +0 -82
  35. package/dist/elements/controls/NumericInput.d.ts +0 -0
  36. package/dist/elements/controls/NumericInput.js +0 -1
  37. package/dist/elements/controls/ThicknessEditor copy.d.ts +0 -33
  38. package/dist/elements/controls/ThicknessEditor copy.js +0 -145
  39. package/dist/elements/helper/CssPropertiesList.d.ts +0 -0
  40. package/dist/elements/helper/CssPropertiesList.js +0 -1
  41. package/dist/elements/item/Binding.d.ts +0 -14
  42. package/dist/elements/item/Binding.js +0 -4
  43. package/dist/elements/item/IBinding copy.d.ts +0 -14
  44. package/dist/elements/item/IBinding copy.js +0 -1
  45. package/dist/elements/services/bindingsService/BaseCustomeWebcomponentBindingsService copy.d.ts +0 -9
  46. package/dist/elements/services/bindingsService/BaseCustomeWebcomponentBindingsService copy.js +0 -31
  47. package/dist/elements/services/bindingsService/BaseCustomeWebcomponentBindingsService.d.ts +0 -11
  48. package/dist/elements/services/bindingsService/BaseCustomeWebcomponentBindingsService.js +0 -34
  49. package/dist/elements/services/bindingsService/BindingMode.d.ts +0 -4
  50. package/dist/elements/services/bindingsService/BindingMode.js +0 -5
  51. package/dist/elements/services/bindingsService/BindingTarget.d.ts +0 -6
  52. package/dist/elements/services/bindingsService/BindingTarget.js +0 -7
  53. package/dist/elements/services/bindingsService/IBinding.d.ts +0 -14
  54. package/dist/elements/services/bindingsService/IBinding.js +0 -1
  55. package/dist/elements/services/bindingsService/PolymerBindingsService copy.d.ts +0 -9
  56. package/dist/elements/services/bindingsService/PolymerBindingsService copy.js +0 -31
  57. package/dist/elements/services/bindingsService/PolymerBindingsService.d.ts +0 -0
  58. package/dist/elements/services/bindingsService/PolymerBindingsService.js +0 -38
  59. package/dist/elements/services/copyPasteService/ICopyPasteService copy.d.ts +0 -0
  60. package/dist/elements/services/copyPasteService/ICopyPasteService copy.js +0 -1
  61. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.BASE.d.ts +0 -9
  62. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.BASE.js +0 -100
  63. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.LOCAL.d.ts +0 -11
  64. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.LOCAL.js +0 -84
  65. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.REMOTE.d.ts +0 -9
  66. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.REMOTE.js +0 -83
  67. package/dist/elements/services/modelCommandService/DefaultInstanceService.d.ts +0 -8
  68. package/dist/elements/services/modelCommandService/DefaultInstanceService.js +0 -14
  69. package/dist/elements/services/modelCommandService/IInstanceService.d.ts +0 -8
  70. package/dist/elements/services/modelCommandService/IInstanceService.js +0 -1
  71. package/dist/elements/services/propertiesService/propertyEditors/ImageButtonListPropertyEditor copy.d.ts +0 -8
  72. package/dist/elements/services/propertiesService/propertyEditors/ImageButtonListPropertyEditor copy.js +0 -40
  73. package/dist/elements/services/propertiesService/services/CommonPropertiesService copy.d.ts +0 -16
  74. package/dist/elements/services/propertiesService/services/CommonPropertiesService copy.js +0 -94
  75. package/dist/elements/widgets/designerView/IDesignerView.d.ts +0 -30
  76. package/dist/elements/widgets/designerView/IDesignerView.js +0 -1
  77. package/dist/elements/widgets/designerView/designerView copy.d.ts +0 -82
  78. package/dist/elements/widgets/designerView/designerView copy.js +0 -671
  79. package/dist/elements/widgets/designerView/extensions/AbstractExtension copy.d.ts +0 -22
  80. package/dist/elements/widgets/designerView/extensions/AbstractExtension copy.js +0 -52
  81. package/dist/elements/widgets/designerView/extensions/CanvasExtension copy.d.ts +0 -10
  82. package/dist/elements/widgets/designerView/extensions/CanvasExtension copy.js +0 -29
  83. package/dist/elements/widgets/designerView/extensions/CanvasExtensionProvider copy.d.ts +0 -10
  84. package/dist/elements/widgets/designerView/extensions/CanvasExtensionProvider copy.js +0 -15
  85. package/dist/elements/widgets/designerView/extensions/EditText/EditTextCkEditorExtension.d.ts +0 -14
  86. package/dist/elements/widgets/designerView/extensions/EditText/EditTextCkEditorExtension.js +0 -42
  87. package/dist/elements/widgets/designerView/extensions/EditText/EditTextCkEditorExtensionProvider.d.ts +0 -9
  88. package/dist/elements/widgets/designerView/extensions/EditText/EditTextCkEditorExtensionProvider.js +0 -9
  89. package/dist/elements/widgets/designerView/extensions/EditText/EditTextTinyMceExtension.d.ts +0 -27
  90. package/dist/elements/widgets/designerView/extensions/EditText/EditTextTinyMceExtension.js +0 -61
  91. package/dist/elements/widgets/designerView/extensions/EditText/EditTextTinyMceExtensionProvider.d.ts +0 -9
  92. package/dist/elements/widgets/designerView/extensions/EditText/EditTextTinyMceExtensionProvider.js +0 -9
  93. package/dist/elements/widgets/designerView/extensions/PermamentCursorExtension.d.ts +0 -10
  94. package/dist/elements/widgets/designerView/extensions/PermamentCursorExtension.js +0 -29
  95. package/dist/elements/widgets/designerView/extensions/PermamentCursorExtensionProvider copy.d.ts +0 -10
  96. package/dist/elements/widgets/designerView/extensions/PermamentCursorExtensionProvider copy.js +0 -15
  97. package/dist/elements/widgets/designerView/extensions/PermamentCursorExtensionProvider.d.ts +0 -10
  98. package/dist/elements/widgets/designerView/extensions/PermamentCursorExtensionProvider.js +0 -15
  99. package/dist/elements/widgets/designerView/extensions/pointerExtensions/AbstractExtension.d.ts +0 -22
  100. package/dist/elements/widgets/designerView/extensions/pointerExtensions/AbstractExtension.js +0 -78
  101. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorLinePointerExtension copy.d.ts +0 -13
  102. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorLinePointerExtension copy.js +0 -27
  103. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectangleExtension.d.ts +0 -7
  104. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectangleExtension.js +0 -20
  105. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectanglePointerExtension copy.d.ts +0 -13
  106. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectanglePointerExtension copy.js +0 -27
  107. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectanglePointerExtension.d.ts +0 -7
  108. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectanglePointerExtension.js +0 -20
  109. package/dist/elements/widgets/designerView/extensions/pointerExtensions/IDesignerExtension.d.ts +0 -5
  110. package/dist/elements/widgets/designerView/extensions/pointerExtensions/IDesignerExtension.js +0 -1
  111. package/dist/elements/widgets/designerView/extensions/pointerExtensions/IDesignerExtensionProvider.d.ts +0 -9
  112. package/dist/elements/widgets/designerView/extensions/pointerExtensions/IDesignerExtensionProvider.js +0 -1
  113. package/dist/elements/widgets/designerView/extensions/pointerExtensions/RulerExtension.d.ts +0 -7
  114. package/dist/elements/widgets/designerView/extensions/pointerExtensions/RulerExtension.js +0 -20
  115. package/dist/elements/widgets/designerView/extensions/pointerExtensions/RulerPointerExtension.d.ts +0 -7
  116. package/dist/elements/widgets/designerView/extensions/pointerExtensions/RulerPointerExtension.js +0 -20
  117. package/dist/elements/widgets/propertyGrid/PropertyGrid copy.d.ts +0 -17
  118. package/dist/elements/widgets/propertyGrid/PropertyGrid copy.js +0 -143
  119. package/dist/interfaces/IDesignerMousePoint.d.ts +0 -11
  120. package/dist/interfaces/IDesignerMousePoint.js +0 -1
@@ -0,0 +1,16 @@
1
+ import { IDesignItem } from "../item/IDesignItem.js";
2
+ export declare function CalculateGridInformation(designItem: IDesignItem): {
3
+ cells?: {
4
+ x: number;
5
+ y: number;
6
+ width: number;
7
+ height: number;
8
+ name: string;
9
+ }[][];
10
+ gaps?: {
11
+ x: number;
12
+ y: number;
13
+ width: number;
14
+ height: number;
15
+ }[];
16
+ };
@@ -0,0 +1,107 @@
1
+ export function CalculateGridInformation(designItem) {
2
+ let itemRect = designItem.element.getBoundingClientRect();
3
+ const computedStyle = getComputedStyle(designItem.element);
4
+ const rows = computedStyle.gridTemplateRows.split(' ');
5
+ const columns = computedStyle.gridTemplateColumns.split(' ');
6
+ let y = 0;
7
+ let xGap = 0;
8
+ let yGap = 0;
9
+ let rw = 0;
10
+ let xOffset = itemRect.x - designItem.instanceServiceContainer.designerCanvas.containerBoundingRect.x;
11
+ let yOffset = itemRect.y - designItem.instanceServiceContainer.designerCanvas.containerBoundingRect.y;
12
+ let gridA = null;
13
+ if (computedStyle.gridTemplateAreas && computedStyle.gridTemplateAreas !== 'none')
14
+ gridA = computedStyle.gridTemplateAreas.split('\"');
15
+ if (computedStyle.columnGap && computedStyle.columnGap != 'normal')
16
+ xGap = Number.parseFloat(computedStyle.columnGap.replace('px', ''));
17
+ if (computedStyle.rowGap && computedStyle.rowGap != 'normal')
18
+ yGap = Number.parseFloat(computedStyle.rowGap.replace('px', ''));
19
+ let gesX = 0;
20
+ let gesY = 0;
21
+ for (let c of columns) {
22
+ const currX = Number.parseFloat(c.replace('px', ''));
23
+ gesX += currX + xGap;
24
+ }
25
+ gesX -= xGap;
26
+ for (let r of rows) {
27
+ const currY = Number.parseFloat(r.replace('px', ''));
28
+ gesY += currY + yGap;
29
+ }
30
+ gesY -= yGap;
31
+ if (computedStyle.justifyContent == 'center') {
32
+ xOffset += (itemRect.width - gesX) / 2;
33
+ }
34
+ else if (computedStyle.justifyContent == 'end') {
35
+ xOffset += itemRect.width - gesX;
36
+ }
37
+ else if (computedStyle.justifyContent == 'space-between') {
38
+ xGap += (itemRect.width - gesX) / (columns.length - 1);
39
+ }
40
+ else if (computedStyle.justifyContent == 'space-around') {
41
+ let gp = (itemRect.width - gesX) / (columns.length * 2);
42
+ xGap += gp * 2;
43
+ xOffset += gp;
44
+ }
45
+ else if (computedStyle.justifyContent == 'space-evenly') {
46
+ let gp = (itemRect.width - gesX) / (columns.length + 1);
47
+ xGap += gp;
48
+ xOffset += gp;
49
+ }
50
+ if (computedStyle.alignContent == 'center') {
51
+ xOffset += (itemRect.height - gesY) / 2;
52
+ }
53
+ else if (computedStyle.alignContent == 'end') {
54
+ xOffset += itemRect.height - gesY;
55
+ }
56
+ else if (computedStyle.alignContent == 'space-between') {
57
+ yGap += (itemRect.height - gesY) / (rows.length - 1);
58
+ }
59
+ else if (computedStyle.alignContent == 'space-around') {
60
+ let gp = (itemRect.height - gesY) / (rows.length * 2);
61
+ yGap += gp * 2;
62
+ yOffset += gp;
63
+ }
64
+ else if (computedStyle.alignContent == 'space-evenly') {
65
+ let gp = (itemRect.height - gesY) / (rows.length + 1);
66
+ yGap += gp;
67
+ yOffset += gp;
68
+ }
69
+ const retVal = { cells: [], gaps: [] };
70
+ for (let xIdx = 0; xIdx < rows.length; xIdx++) {
71
+ const r = rows[xIdx];
72
+ let areas = null;
73
+ if (gridA) {
74
+ areas = gridA[rw + 1].split(' ');
75
+ }
76
+ let x = 0;
77
+ let cl = 0;
78
+ const currY = Number.parseFloat(r.replace('px', ''));
79
+ let cellList = [];
80
+ retVal.cells.push(cellList);
81
+ for (let yIdx = 0; yIdx < columns.length; yIdx++) {
82
+ const c = columns[yIdx];
83
+ if (x > 0 && xGap) {
84
+ retVal.gaps.push({ x: x + xOffset, y: y + yOffset, width: xGap, height: currY });
85
+ x += xGap;
86
+ }
87
+ const currX = Number.parseFloat(c.replace('px', ''));
88
+ if (y > 0 && yGap) {
89
+ retVal.gaps.push({ x: x + xOffset, y: y + yOffset - yGap, width: currX, height: yGap });
90
+ }
91
+ let name = null;
92
+ if (areas) {
93
+ const nm = areas[cl].trim();
94
+ if (nm != '.') {
95
+ name = nm;
96
+ }
97
+ }
98
+ const cell = { x: x + xOffset, y: y + yOffset, width: currX, height: currY, name: name };
99
+ cellList.push(cell);
100
+ x += currX;
101
+ cl++;
102
+ }
103
+ y += currY + yGap;
104
+ rw += 2;
105
+ }
106
+ return retVal;
107
+ }
@@ -1,3 +1,6 @@
1
+ import { IPoint } from "../../interfaces/IPoint.js";
2
+ import { IRect } from "../../interfaces/IRect.js";
1
3
  export declare function sleep(ms: any): Promise<unknown>;
2
4
  export declare function exportData(blob: Blob, fileName: string): Promise<void>;
3
5
  export declare function dataURItoBlob(dataURI: any): Blob;
6
+ export declare function pointInRect(point: IPoint, rect: IRect): boolean;
@@ -21,3 +21,6 @@ export function dataURItoBlob(dataURI) {
21
21
  }
22
22
  return new Blob([new Uint8Array(array)], { type: mime });
23
23
  }
24
+ export function pointInRect(point, rect) {
25
+ return point.x >= rect.x && point.x <= rect.x + rect.width && point.y >= rect.y && point.y <= rect.y + rect.height;
26
+ }
@@ -5,7 +5,9 @@ import { ChangeGroup } from '../services/undoService/ChangeGroup';
5
5
  import { NodeType } from './NodeType';
6
6
  import { ExtensionType } from '../widgets/designerView/extensions/ExtensionType';
7
7
  import { IDesignerExtension } from '../widgets/designerView/extensions/IDesignerExtension';
8
+ import { ISize } from '../../interfaces/ISize.js';
8
9
  export declare class DesignItem implements IDesignItem {
10
+ lastContainerSize: ISize;
9
11
  node: Node;
10
12
  serviceContainer: ServiceContainer;
11
13
  instanceServiceContainer: InstanceServiceContainer;
@@ -51,8 +53,8 @@ export declare class DesignItem implements IDesignItem {
51
53
  getOrCreateDesignItem(node: Node): IDesignItem;
52
54
  static GetOrCreateDesignItem(node: Node, serviceContainer: ServiceContainer, instanceServiceContainer: InstanceServiceContainer): IDesignItem;
53
55
  static GetDesignItem(node: Node): IDesignItem;
54
- setStyle(name: keyof CSSStyleDeclaration, value?: string | null): void;
55
- removeStyle(name: keyof CSSStyleDeclaration): void;
56
+ setStyle(name: string, value?: string | null): void;
57
+ removeStyle(name: string): void;
56
58
  setAttribute(name: string, value?: string | null): void;
57
59
  removeAttribute(name: string): void;
58
60
  }
@@ -1,14 +1,15 @@
1
1
  import { CssStyleChangeAction } from '../services/undoService/transactionItems/CssStyleChangeAction';
2
2
  import { NodeType } from './NodeType';
3
3
  import { AttributeChangeAction } from '../services/undoService/transactionItems/AttributeChangeAction';
4
- //import { PropertyChangeAction } from '../services/undoService/transactionItems/PropertyChangeAction';
5
4
  import { ExtensionType } from '../widgets/designerView/extensions/ExtensionType';
6
5
  import { DomHelper } from '@node-projects/base-custom-webcomponent/dist/DomHelper';
7
6
  import { CssAttributeParser } from '../helper/CssAttributeParser.js';
7
+ import { PropertiesHelper } from '../services/propertiesService/services/PropertiesHelper.js';
8
8
  const hideAtDesignTimeAttributeName = 'node-projects-hide-at-design-time';
9
9
  const hideAtRunTimeAttributeName = 'node-projects-hide-at-run-time';
10
10
  const lockAtDesignTimeAttributeName = 'node-projects-lock-at-design-time';
11
11
  export class DesignItem {
12
+ lastContainerSize;
12
13
  node;
13
14
  serviceContainer;
14
15
  instanceServiceContainer;
@@ -241,11 +242,13 @@ export class DesignItem {
241
242
  return designItem;
242
243
  }
243
244
  setStyle(name, value) {
244
- const action = new CssStyleChangeAction(this, name, value, this.styles.get(name));
245
+ let nm = PropertiesHelper.camelToDashCase(name);
246
+ const action = new CssStyleChangeAction(this, nm, value, this.styles.get(nm));
245
247
  this.instanceServiceContainer.undoService.execute(action);
246
248
  }
247
249
  removeStyle(name) {
248
- const action = new CssStyleChangeAction(this, name, '', this.styles.get(name));
250
+ let nm = PropertiesHelper.camelToDashCase(name);
251
+ const action = new CssStyleChangeAction(this, nm, '', this.styles.get(nm));
249
252
  this.instanceServiceContainer.undoService.execute(action);
250
253
  }
251
254
  setAttribute(name, value) {
@@ -4,7 +4,9 @@ import { ChangeGroup } from "../services/undoService/ChangeGroup";
4
4
  import { NodeType } from './NodeType';
5
5
  import { ExtensionType } from "../widgets/designerView/extensions/ExtensionType";
6
6
  import { IDesignerExtension } from "../widgets/designerView/extensions/IDesignerExtension";
7
+ import { ISize } from "../../interfaces/ISize.js";
7
8
  export interface IDesignItem {
9
+ lastContainerSize: ISize;
8
10
  replaceNode(newNode: Node): any;
9
11
  readonly nodeType: NodeType;
10
12
  readonly name: string;
@@ -33,8 +35,8 @@ export interface IDesignItem {
33
35
  appliedDesignerExtensions: Map<ExtensionType, IDesignerExtension[]>;
34
36
  getOrCreateDesignItem(node: Node): any;
35
37
  openGroup(title: string, affectedItems?: IDesignItem[]): ChangeGroup;
36
- setStyle(name: keyof CSSStyleDeclaration, value?: string | null): any;
37
- removeStyle(name: keyof CSSStyleDeclaration): any;
38
+ setStyle(name: string, value?: string | null): any;
39
+ removeStyle(name: string): any;
38
40
  setAttribute(name: string, value?: string | null): any;
39
41
  removeAttribute(name: string): any;
40
42
  hideAtDesignTime: boolean;
@@ -53,12 +53,7 @@ export class HtmlWriterService {
53
53
  styles = CssCombiner.combine(styles);
54
54
  for (const s of styles) {
55
55
  if (s[0]) {
56
- if (typeof s[1] === 'string') {
57
- indentedTextWriter.write(PropertiesHelper.camelToDashCase(s[0]) + ':' + DomConverter.normalizeAttributeValue(s[1]) + ';');
58
- }
59
- else {
60
- //TODO: writing of bindings
61
- }
56
+ indentedTextWriter.write(PropertiesHelper.camelToDashCase(s[0]) + ':' + DomConverter.normalizeAttributeValue(s[1]) + ';');
62
57
  }
63
58
  }
64
59
  indentedTextWriter.write('"');
@@ -82,6 +82,12 @@ export class DefaultPlacementService {
82
82
  }
83
83
  }
84
84
  enterContainer(container, items) {
85
+ for (let i of items) {
86
+ if (i.lastContainerSize) {
87
+ i.setStyle('width', i.lastContainerSize.width + 'px');
88
+ i.setStyle('height', i.lastContainerSize.height + 'px');
89
+ }
90
+ }
85
91
  }
86
92
  leaveContainer(container, items) {
87
93
  }
@@ -1,7 +1,24 @@
1
+ import { CalculateGridInformation } from '../../helper/GridHelper.js';
2
+ import { pointInRect } from '../../helper/Helper.js';
1
3
  export class GridPlacementService {
2
4
  enterContainer(container, items) {
5
+ for (let i of items) {
6
+ i.removeStyle("position");
7
+ i.removeStyle("left");
8
+ i.removeStyle("top");
9
+ i.removeStyle("right");
10
+ i.removeStyle("width");
11
+ i.removeStyle("height");
12
+ i.removeStyle("transform");
13
+ }
3
14
  }
4
15
  leaveContainer(container, items) {
16
+ for (let i of items) {
17
+ if (!i.lastContainerSize) {
18
+ const rect = i.element.getBoundingClientRect();
19
+ i.lastContainerSize = { width: rect.width, height: rect.height };
20
+ }
21
+ }
5
22
  }
6
23
  serviceForContainer(container) {
7
24
  if (container.element.style.display == 'grid' || container.element.style.display == 'inline-grid')
@@ -15,14 +32,48 @@ export class GridPlacementService {
15
32
  return true;
16
33
  }
17
34
  getElementOffset(container, designItem) {
18
- //TODO: offset could be bigger, when it was in a other cell???
19
35
  return container.element.getBoundingClientRect();
20
36
  }
21
37
  placePoint(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
22
38
  return null;
23
39
  }
24
40
  place(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
41
+ const gridInformation = CalculateGridInformation(container);
42
+ const pos = placementView.getNormalizedEventCoordinates(event);
43
+ const posElement = placementView.getNormalizedElementCoordinates(items[0].element);
44
+ let row = 0;
45
+ let column = 0;
46
+ if (!pointInRect(pos, posElement)) {
47
+ row = 0;
48
+ for (let cellRow of gridInformation.cells) {
49
+ column = 0;
50
+ for (let cell of cellRow) {
51
+ if (pointInRect(pos, cell)) {
52
+ items[0].element.style.gridColumn = column + 1;
53
+ items[0].element.style.gridRow = row + 1;
54
+ }
55
+ column++;
56
+ }
57
+ row++;
58
+ }
59
+ }
25
60
  }
26
61
  finishPlace(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
62
+ const gridInformation = CalculateGridInformation(container);
63
+ const pos = placementView.getNormalizedEventCoordinates(event);
64
+ let row = 0;
65
+ let column = 0;
66
+ row = 0;
67
+ for (let cellRow of gridInformation.cells) {
68
+ column = 0;
69
+ for (let cell of cellRow) {
70
+ if (pointInRect(pos, cell)) {
71
+ items[0].setStyle('grid-column', column + 1);
72
+ items[0].setStyle('grid-row', row + 1);
73
+ }
74
+ column++;
75
+ }
76
+ row++;
77
+ }
27
78
  }
28
79
  }
@@ -1,13 +1,13 @@
1
1
  import { ITransactionItem } from '../ITransactionItem';
2
2
  import { IDesignItem } from '../../../item/IDesignItem';
3
3
  export declare class CssStyleChangeAction implements ITransactionItem {
4
- constructor(designItem: IDesignItem, name: keyof CSSStyleDeclaration, newValue: any, oldValue: any);
4
+ constructor(designItem: IDesignItem, name: string, newValue: any, oldValue: any);
5
5
  title?: string;
6
6
  get affectedItems(): IDesignItem[];
7
7
  undo(): void;
8
8
  do(): void;
9
9
  designItem: IDesignItem;
10
- name: keyof CSSStyleDeclaration;
10
+ name: string;
11
11
  newValue: any;
12
12
  oldValue: any;
13
13
  mergeWith(other: ITransactionItem): boolean;
@@ -1,7 +1,7 @@
1
1
  import { IDesignItem } from "../../item/IDesignItem";
2
2
  import { IStringPosition } from "../../services/htmlWriterService/IStringPosition";
3
3
  export declare class DomConverter {
4
- static normalizeAttributeValue(value: string): string;
4
+ static normalizeAttributeValue(value: string | number): string;
5
5
  static normalizeContentValue(value: string): string;
6
6
  static IsSelfClosingElement(tag: string): boolean;
7
7
  static ConvertToString(designItems: IDesignItem[], designItemsAssignmentList?: Map<IDesignItem, IStringPosition>): string;
@@ -1,6 +1,8 @@
1
1
  import { IndentedTextWriter } from "../../helper/IndentedTextWriter";
2
2
  export class DomConverter {
3
3
  static normalizeAttributeValue(value) {
4
+ if (typeof value === 'number')
5
+ value = value.toString();
4
6
  if (value)
5
7
  return value.replaceAll('"', '&quot;');
6
8
  return value;
@@ -7,6 +7,7 @@ import { IExtensionManager } from "./extensions/IExtensionManger";
7
7
  import { IUiCommandHandler } from "../../../commandHandling/IUiCommandHandler";
8
8
  import { IPoint } from "../../../interfaces/IPoint";
9
9
  import { OverlayLayerView } from "./overlayLayerView";
10
+ import { IRect } from "../../../interfaces/IRect.js";
10
11
  export interface IDesignerCanvas extends IPlacementView, IUiCommandHandler {
11
12
  readonly serviceContainer: ServiceContainer;
12
13
  readonly instanceServiceContainer: InstanceServiceContainer;
@@ -22,6 +23,7 @@ export interface IDesignerCanvas extends IPlacementView, IUiCommandHandler {
22
23
  eatEvents: Element;
23
24
  initialize(serviceContainer: ServiceContainer): any;
24
25
  getNormalizedEventCoordinates(event: MouseEvent): IPoint;
26
+ getNormalizedElementCoordinates(element: Element): IRect;
25
27
  getNormalizedOffsetInElement(event: MouseEvent, element: Element): IPoint;
26
28
  getElementAtPoint(point: IPoint, ignoreElementCallback?: (element: HTMLElement) => boolean): any;
27
29
  elementFromPoint(x: number, y: number): Element;
@@ -12,6 +12,7 @@ import { IExtensionManager } from "./extensions/IExtensionManger";
12
12
  import { IPoint } from "../../../interfaces/IPoint";
13
13
  import { OverlayLayer } from "./extensions/OverlayLayer";
14
14
  import { OverlayLayerView } from './overlayLayerView';
15
+ import { IRect } from "../../../interfaces/IRect.js";
15
16
  export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend implements IDesignerCanvas, IPlacementView, IUiCommandHandler {
16
17
  serviceContainer: ServiceContainer;
17
18
  instanceServiceContainer: InstanceServiceContainer;
@@ -69,7 +70,7 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
69
70
  private onKeyUp;
70
71
  private onKeyDown;
71
72
  getNormalizedEventCoordinates(event: MouseEvent): IPoint;
72
- getNormalizedElementCoordinates(element: Element): IPoint;
73
+ getNormalizedElementCoordinates(element: Element): IRect;
73
74
  getNormalizedOffsetInElement(event: MouseEvent, element: Element): IPoint;
74
75
  static getHost(node: Node): Element;
75
76
  getElementAtPoint(point: IPoint, ignoreElementCallback?: (element: HTMLElement) => boolean): HTMLElement;
@@ -397,7 +397,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
397
397
  showDesignItemContextMenu(designItem, event) {
398
398
  const mnuItems = [];
399
399
  for (let cme of this.serviceContainer.designerContextMenuExtensions) {
400
- if (cme.shouldProvideContextmenu(event, this, designItem)) {
400
+ if (cme.shouldProvideContextmenu(event, this, designItem, 'designer')) {
401
401
  mnuItems.push(...cme.provideContextMenuItems(event, this, designItem));
402
402
  }
403
403
  }
@@ -489,7 +489,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
489
489
  }
490
490
  getNormalizedElementCoordinates(element) {
491
491
  const targetRect = element.getBoundingClientRect();
492
- return { x: targetRect.x - this.containerBoundingRect.x, y: targetRect.y - this.containerBoundingRect.y };
492
+ return { x: targetRect.x - this.containerBoundingRect.x, y: targetRect.y - this.containerBoundingRect.y, width: targetRect.width, height: targetRect.height };
493
493
  }
494
494
  getNormalizedOffsetInElement(event, element) {
495
495
  const normEvt = this.getNormalizedEventCoordinates(event);
@@ -1,3 +1,4 @@
1
+ import { CalculateGridInformation } from "../../../helper/GridHelper.js";
1
2
  import { AbstractExtension } from "./AbstractExtension";
2
3
  import { OverlayLayer } from "./OverlayLayer.js";
3
4
  export class GridExtension extends AbstractExtension {
@@ -5,105 +6,18 @@ export class GridExtension extends AbstractExtension {
5
6
  super(extensionManager, designerView, extendedItem);
6
7
  }
7
8
  extend() {
8
- let itemRect = this.extendedItem.element.getBoundingClientRect();
9
- const computedStyle = getComputedStyle(this.extendedItem.element);
10
- const rows = computedStyle.gridTemplateRows.split(' ');
11
- const columns = computedStyle.gridTemplateColumns.split(' ');
12
- let y = 0;
13
- let xGap = 0;
14
- let yGap = 0;
15
- let rw = 0;
16
- let xOffset = itemRect.x - this.designerCanvas.containerBoundingRect.x;
17
- let yOffset = itemRect.y - this.designerCanvas.containerBoundingRect.y;
18
- let gridA = null;
19
- if (computedStyle.gridTemplateAreas && computedStyle.gridTemplateAreas !== 'none')
20
- gridA = computedStyle.gridTemplateAreas.split('\"');
21
- if (computedStyle.columnGap && computedStyle.columnGap != 'normal')
22
- xGap = Number.parseFloat(computedStyle.columnGap.replace('px', ''));
23
- if (computedStyle.rowGap && computedStyle.rowGap != 'normal')
24
- yGap = Number.parseFloat(computedStyle.rowGap.replace('px', ''));
25
- let gesX = 0;
26
- let gesY = 0;
27
- for (let c of columns) {
28
- const currX = Number.parseFloat(c.replace('px', ''));
29
- gesX += currX + xGap;
30
- }
31
- gesX -= xGap;
32
- for (let r of rows) {
33
- const currY = Number.parseFloat(r.replace('px', ''));
34
- gesY += currY + yGap;
35
- }
36
- gesY -= yGap;
37
- if (computedStyle.justifyContent == 'center') {
38
- xOffset += (itemRect.width - gesX) / 2;
39
- }
40
- else if (computedStyle.justifyContent == 'end') {
41
- xOffset += itemRect.width - gesX;
42
- }
43
- else if (computedStyle.justifyContent == 'space-between') {
44
- xGap += (itemRect.width - gesX) / (columns.length - 1);
45
- }
46
- else if (computedStyle.justifyContent == 'space-around') {
47
- let gp = (itemRect.width - gesX) / (columns.length * 2);
48
- xGap += gp * 2;
49
- xOffset += gp;
50
- }
51
- else if (computedStyle.justifyContent == 'space-evenly') {
52
- let gp = (itemRect.width - gesX) / (columns.length + 1);
53
- xGap += gp;
54
- xOffset += gp;
55
- }
56
- if (computedStyle.alignContent == 'center') {
57
- xOffset += (itemRect.height - gesY) / 2;
58
- }
59
- else if (computedStyle.alignContent == 'end') {
60
- xOffset += itemRect.height - gesY;
61
- }
62
- else if (computedStyle.alignContent == 'space-between') {
63
- yGap += (itemRect.height - gesY) / (rows.length - 1);
64
- }
65
- else if (computedStyle.alignContent == 'space-around') {
66
- let gp = (itemRect.height - gesY) / (rows.length * 2);
67
- yGap += gp * 2;
68
- yOffset += gp;
69
- }
70
- else if (computedStyle.alignContent == 'space-evenly') {
71
- let gp = (itemRect.height - gesY) / (rows.length + 1);
72
- yGap += gp;
73
- yOffset += gp;
74
- }
75
- for (let xIdx = 0; xIdx < rows.length; xIdx++) {
76
- const r = rows[xIdx];
77
- let areas = null;
78
- if (gridA) {
79
- areas = gridA[rw + 1].split(' ');
80
- }
81
- let x = 0;
82
- let cl = 0;
83
- const currY = Number.parseFloat(r.replace('px', ''));
84
- for (let yIdx = 0; yIdx < columns.length; yIdx++) {
85
- const c = columns[yIdx];
86
- if (x > 0 && xGap) {
87
- this._drawRect(x + xOffset, y + yOffset, xGap, currY, 'svg-grid-gap', null, OverlayLayer.Background);
88
- x += xGap;
89
- }
90
- const currX = Number.parseFloat(c.replace('px', ''));
91
- if (y > 0 && yGap) {
92
- this._drawRect(x + xOffset, y + yOffset - yGap, currX, yGap, 'svg-grid-gap', null, OverlayLayer.Background);
93
- }
94
- if (areas) {
95
- const nm = areas[cl].trim();
96
- if (nm != '.') {
97
- const text = this._drawText(nm, x + xOffset, y + yOffset, 'svg-grid-area', null, OverlayLayer.Background);
98
- text.setAttribute("dominant-baseline", "hanging");
99
- }
9
+ const gridInformation = CalculateGridInformation(this.extendedItem);
10
+ for (let gap of gridInformation.gaps) {
11
+ this._drawRect(gap.x, gap.y, gap.width, gap.height, 'svg-grid-gap', null, OverlayLayer.Background);
12
+ }
13
+ for (let cellRow of gridInformation.cells) {
14
+ for (let cell of cellRow) {
15
+ this._drawRect(cell.x, cell.y, cell.width, cell.height, 'svg-grid', null, OverlayLayer.Background);
16
+ if (cell.name) {
17
+ const text = this._drawText(cell.name, cell.x, cell.y, 'svg-grid-area', null, OverlayLayer.Background);
18
+ text.setAttribute("dominant-baseline", "hanging");
100
19
  }
101
- this._drawRect(x + xOffset, y + yOffset, currX, currY, 'svg-grid', null, OverlayLayer.Background);
102
- x += currX;
103
- cl++;
104
20
  }
105
- y += currY + yGap;
106
- rw += 2;
107
21
  }
108
22
  }
109
23
  refresh() {
@@ -50,8 +50,8 @@ export class TransformOriginExtension extends AbstractExtension {
50
50
  const newY = (dy + y);
51
51
  const przX = Math.round(newX / rect.width * 10000) / 100; //round to 2 decimal places
52
52
  const przY = Math.round(newY / rect.height * 10000) / 100;
53
- //this.extendedItem.setStyle('transformOrigin',newX + 'px ' + newY + 'px');
54
- this.extendedItem.setStyle('transformOrigin', przX + '% ' + przY + '%');
53
+ //this.extendedItem.setStyle('transform-origin',newX + 'px ' + newY + 'px');
54
+ this.extendedItem.setStyle('transform-origin', przX + '% ' + przY + '%');
55
55
  this.refresh();
56
56
  this._startPos = null;
57
57
  }
@@ -1,8 +1,8 @@
1
1
  import { IContextMenuItem } from "../../../../helper/contextMenu/IContextmenuItem";
2
2
  import { IDesignItem } from "../../../../item/IDesignItem";
3
3
  import { IDesignerCanvas } from "../../IDesignerCanvas";
4
- import { IContextMenuExtension } from "./IContextMenuExtension";
4
+ import { ContextmenuInitiator, IContextMenuExtension } from "./IContextMenuExtension";
5
5
  export declare class CopyPasteContextMenu implements IContextMenuExtension {
6
- shouldProvideContextmenu(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
6
+ shouldProvideContextmenu(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem, initiator: ContextmenuInitiator): boolean;
7
7
  provideContextMenuItems(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem): IContextMenuItem[];
8
8
  }
@@ -1,6 +1,6 @@
1
1
  import { CommandType } from "../../../../../commandHandling/CommandType";
2
2
  export class CopyPasteContextMenu {
3
- shouldProvideContextmenu(event, designerView, designItem) {
3
+ shouldProvideContextmenu(event, designerView, designItem, initiator) {
4
4
  return true;
5
5
  }
6
6
  provideContextMenuItems(event, designerView, designItem) {
@@ -1,7 +1,8 @@
1
1
  import { IContextMenuItem } from "../../../../helper/contextMenu/IContextmenuItem";
2
2
  import { IDesignItem } from "../../../../item/IDesignItem";
3
3
  import { IDesignerCanvas } from "../../IDesignerCanvas";
4
+ export declare type ContextmenuInitiator = 'designer' | 'treeView' | 'other';
4
5
  export interface IContextMenuExtension {
5
- shouldProvideContextmenu(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem): any;
6
+ shouldProvideContextmenu(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem, initiator: ContextmenuInitiator): any;
6
7
  provideContextMenuItems(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem): IContextMenuItem[];
7
8
  }
@@ -1,9 +1,9 @@
1
1
  import { IContextMenuItem } from "../../../../helper/contextMenu/IContextmenuItem";
2
2
  import { IDesignItem } from "../../../../item/IDesignItem";
3
3
  import { IDesignerCanvas } from "../../IDesignerCanvas";
4
- import { IContextMenuExtension } from "./IContextMenuExtension";
4
+ import { ContextmenuInitiator, IContextMenuExtension } from "./IContextMenuExtension";
5
5
  export declare class ItemsBelowContextMenu implements IContextMenuExtension {
6
- shouldProvideContextmenu(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
6
+ shouldProvideContextmenu(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem, initiator: ContextmenuInitiator): boolean;
7
7
  provideContextMenuItems(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem): IContextMenuItem[];
8
8
  private _select;
9
9
  private _searchForItemsBelow;
@@ -1,7 +1,7 @@
1
1
  import { DesignItem } from "../../../../item/DesignItem";
2
2
  export class ItemsBelowContextMenu {
3
- shouldProvideContextmenu(event, designerView, designItem) {
4
- return true;
3
+ shouldProvideContextmenu(event, designerView, designItem, initiator) {
4
+ return initiator == 'designer';
5
5
  }
6
6
  provideContextMenuItems(event, designerView, designItem) {
7
7
  const lstItems = this._searchForItemsBelow(event, designerView);
@@ -31,7 +31,8 @@ export class ItemsBelowContextMenu {
31
31
  break;
32
32
  if (el !== designerView.overlayLayer && el.parentElement !== designerView.overlayLayer && el.getRootNode() === designerView.shadowRoot)
33
33
  lstEl.push(el);
34
- backupPEventsMap.set(el, el.style.pointerEvents);
34
+ if (!backupPEventsMap.has(el))
35
+ backupPEventsMap.set(el, el.style.pointerEvents);
35
36
  el.style.pointerEvents = 'none';
36
37
  const oldEl = el;
37
38
  el = designerView.elementFromPoint(event.x, event.y);
@@ -1,9 +1,9 @@
1
1
  import { IContextMenuItem } from "../../../../helper/contextMenu/IContextmenuItem";
2
2
  import { IDesignItem } from "../../../../item/IDesignItem";
3
3
  import { IDesignerCanvas } from "../../IDesignerCanvas";
4
- import { IContextMenuExtension } from "./IContextMenuExtension";
4
+ import { ContextmenuInitiator, IContextMenuExtension } from "./IContextMenuExtension";
5
5
  export declare class MultipleItemsSelectedContextMenu implements IContextMenuExtension {
6
6
  orderIndex: number;
7
- shouldProvideContextmenu(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
7
+ shouldProvideContextmenu(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem, initiator: ContextmenuInitiator): boolean;
8
8
  provideContextMenuItems(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem): IContextMenuItem[];
9
9
  }
@@ -1,6 +1,6 @@
1
1
  export class MultipleItemsSelectedContextMenu {
2
2
  orderIndex = 60;
3
- shouldProvideContextmenu(event, designerView, designItem) {
3
+ shouldProvideContextmenu(event, designerView, designItem, initiator) {
4
4
  if (designItem.instanceServiceContainer.selectionService.selectedElements.length > 1) {
5
5
  return true;
6
6
  }