@node-projects/web-component-designer 0.0.48 → 0.0.52

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 (125) 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/helper/LayoutHelper.d.ts +3 -0
  6. package/dist/elements/helper/LayoutHelper.js +47 -1
  7. package/dist/elements/helper/TransformHelper.d.ts +1 -0
  8. package/dist/elements/helper/TransformHelper.js +12 -0
  9. package/dist/elements/item/DesignItem.d.ts +4 -2
  10. package/dist/elements/item/DesignItem.js +6 -3
  11. package/dist/elements/item/IDesignItem.d.ts +4 -2
  12. package/dist/elements/services/htmlWriterService/HtmlWriterService.js +1 -6
  13. package/dist/elements/services/placementService/DefaultPlacementService.js +20 -8
  14. package/dist/elements/services/placementService/FlexBoxPlacementService.js +15 -1
  15. package/dist/elements/services/placementService/GridPlacementService.js +52 -1
  16. package/dist/elements/services/undoService/transactionItems/CssStyleChangeAction.d.ts +2 -2
  17. package/dist/elements/widgets/designerView/DomConverter.d.ts +1 -1
  18. package/dist/elements/widgets/designerView/DomConverter.js +2 -0
  19. package/dist/elements/widgets/designerView/IDesignerCanvas.d.ts +2 -0
  20. package/dist/elements/widgets/designerView/designerCanvas.d.ts +2 -1
  21. package/dist/elements/widgets/designerView/designerCanvas.js +2 -2
  22. package/dist/elements/widgets/designerView/extensions/GridExtension.js +11 -97
  23. package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.js +2 -2
  24. package/dist/elements/widgets/designerView/extensions/contextMenu/CopyPasteContextMenu.d.ts +2 -2
  25. package/dist/elements/widgets/designerView/extensions/contextMenu/CopyPasteContextMenu.js +1 -1
  26. package/dist/elements/widgets/designerView/extensions/contextMenu/IContextMenuExtension.d.ts +2 -1
  27. package/dist/elements/widgets/designerView/extensions/contextMenu/ItemsBelowContextMenu.d.ts +2 -2
  28. package/dist/elements/widgets/designerView/extensions/contextMenu/ItemsBelowContextMenu.js +4 -3
  29. package/dist/elements/widgets/designerView/extensions/contextMenu/MultipleItemsSelectedContextMenu.d.ts +2 -2
  30. package/dist/elements/widgets/designerView/extensions/contextMenu/MultipleItemsSelectedContextMenu.js +1 -1
  31. package/dist/elements/widgets/designerView/extensions/contextMenu/ZMoveContextMenu.d.ts +2 -2
  32. package/dist/elements/widgets/designerView/extensions/contextMenu/ZMoveContextMenu.js +1 -1
  33. package/dist/elements/widgets/propertyGrid/PropertyGridWithHeader.js +1 -1
  34. package/dist/elements/widgets/treeView/treeViewExtended.d.ts +2 -0
  35. package/dist/elements/widgets/treeView/treeViewExtended.js +13 -0
  36. package/dist/index.d.ts +1 -1
  37. package/package.json +1 -1
  38. package/dist/elements/controls/ImageButtonListSelector copy.d.ts +0 -17
  39. package/dist/elements/controls/ImageButtonListSelector copy.js +0 -82
  40. package/dist/elements/controls/NumericInput.d.ts +0 -0
  41. package/dist/elements/controls/NumericInput.js +0 -1
  42. package/dist/elements/controls/ThicknessEditor copy.d.ts +0 -33
  43. package/dist/elements/controls/ThicknessEditor copy.js +0 -145
  44. package/dist/elements/helper/CssPropertiesList.d.ts +0 -0
  45. package/dist/elements/helper/CssPropertiesList.js +0 -1
  46. package/dist/elements/item/Binding.d.ts +0 -14
  47. package/dist/elements/item/Binding.js +0 -4
  48. package/dist/elements/item/IBinding copy.d.ts +0 -14
  49. package/dist/elements/item/IBinding copy.js +0 -1
  50. package/dist/elements/services/bindingsService/BaseCustomeWebcomponentBindingsService copy.d.ts +0 -9
  51. package/dist/elements/services/bindingsService/BaseCustomeWebcomponentBindingsService copy.js +0 -31
  52. package/dist/elements/services/bindingsService/BaseCustomeWebcomponentBindingsService.d.ts +0 -11
  53. package/dist/elements/services/bindingsService/BaseCustomeWebcomponentBindingsService.js +0 -34
  54. package/dist/elements/services/bindingsService/BindingMode.d.ts +0 -4
  55. package/dist/elements/services/bindingsService/BindingMode.js +0 -5
  56. package/dist/elements/services/bindingsService/BindingTarget.d.ts +0 -6
  57. package/dist/elements/services/bindingsService/BindingTarget.js +0 -7
  58. package/dist/elements/services/bindingsService/IBinding.d.ts +0 -14
  59. package/dist/elements/services/bindingsService/IBinding.js +0 -1
  60. package/dist/elements/services/bindingsService/PolymerBindingsService copy.d.ts +0 -9
  61. package/dist/elements/services/bindingsService/PolymerBindingsService copy.js +0 -31
  62. package/dist/elements/services/bindingsService/PolymerBindingsService.d.ts +0 -0
  63. package/dist/elements/services/bindingsService/PolymerBindingsService.js +0 -38
  64. package/dist/elements/services/copyPasteService/ICopyPasteService copy.d.ts +0 -0
  65. package/dist/elements/services/copyPasteService/ICopyPasteService copy.js +0 -1
  66. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.BASE.d.ts +0 -9
  67. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.BASE.js +0 -100
  68. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.LOCAL.d.ts +0 -11
  69. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.LOCAL.js +0 -84
  70. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.REMOTE.d.ts +0 -9
  71. package/dist/elements/services/htmlParserService/NodeHtmlParserService.ts.REMOTE.js +0 -83
  72. package/dist/elements/services/modelCommandService/DefaultInstanceService.d.ts +0 -8
  73. package/dist/elements/services/modelCommandService/DefaultInstanceService.js +0 -14
  74. package/dist/elements/services/modelCommandService/IInstanceService.d.ts +0 -8
  75. package/dist/elements/services/modelCommandService/IInstanceService.js +0 -1
  76. package/dist/elements/services/propertiesService/propertyEditors/ImageButtonListPropertyEditor copy.d.ts +0 -8
  77. package/dist/elements/services/propertiesService/propertyEditors/ImageButtonListPropertyEditor copy.js +0 -40
  78. package/dist/elements/services/propertiesService/services/CommonPropertiesService copy.d.ts +0 -16
  79. package/dist/elements/services/propertiesService/services/CommonPropertiesService copy.js +0 -94
  80. package/dist/elements/widgets/designerView/IDesignerView.d.ts +0 -30
  81. package/dist/elements/widgets/designerView/IDesignerView.js +0 -1
  82. package/dist/elements/widgets/designerView/designerView copy.d.ts +0 -82
  83. package/dist/elements/widgets/designerView/designerView copy.js +0 -671
  84. package/dist/elements/widgets/designerView/extensions/AbstractExtension copy.d.ts +0 -22
  85. package/dist/elements/widgets/designerView/extensions/AbstractExtension copy.js +0 -52
  86. package/dist/elements/widgets/designerView/extensions/CanvasExtension copy.d.ts +0 -10
  87. package/dist/elements/widgets/designerView/extensions/CanvasExtension copy.js +0 -29
  88. package/dist/elements/widgets/designerView/extensions/CanvasExtensionProvider copy.d.ts +0 -10
  89. package/dist/elements/widgets/designerView/extensions/CanvasExtensionProvider copy.js +0 -15
  90. package/dist/elements/widgets/designerView/extensions/EditText/EditTextCkEditorExtension.d.ts +0 -14
  91. package/dist/elements/widgets/designerView/extensions/EditText/EditTextCkEditorExtension.js +0 -42
  92. package/dist/elements/widgets/designerView/extensions/EditText/EditTextCkEditorExtensionProvider.d.ts +0 -9
  93. package/dist/elements/widgets/designerView/extensions/EditText/EditTextCkEditorExtensionProvider.js +0 -9
  94. package/dist/elements/widgets/designerView/extensions/EditText/EditTextTinyMceExtension.d.ts +0 -27
  95. package/dist/elements/widgets/designerView/extensions/EditText/EditTextTinyMceExtension.js +0 -61
  96. package/dist/elements/widgets/designerView/extensions/EditText/EditTextTinyMceExtensionProvider.d.ts +0 -9
  97. package/dist/elements/widgets/designerView/extensions/EditText/EditTextTinyMceExtensionProvider.js +0 -9
  98. package/dist/elements/widgets/designerView/extensions/PermamentCursorExtension.d.ts +0 -10
  99. package/dist/elements/widgets/designerView/extensions/PermamentCursorExtension.js +0 -29
  100. package/dist/elements/widgets/designerView/extensions/PermamentCursorExtensionProvider copy.d.ts +0 -10
  101. package/dist/elements/widgets/designerView/extensions/PermamentCursorExtensionProvider copy.js +0 -15
  102. package/dist/elements/widgets/designerView/extensions/PermamentCursorExtensionProvider.d.ts +0 -10
  103. package/dist/elements/widgets/designerView/extensions/PermamentCursorExtensionProvider.js +0 -15
  104. package/dist/elements/widgets/designerView/extensions/pointerExtensions/AbstractExtension.d.ts +0 -22
  105. package/dist/elements/widgets/designerView/extensions/pointerExtensions/AbstractExtension.js +0 -78
  106. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorLinePointerExtension copy.d.ts +0 -13
  107. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorLinePointerExtension copy.js +0 -27
  108. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectangleExtension.d.ts +0 -7
  109. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectangleExtension.js +0 -20
  110. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectanglePointerExtension copy.d.ts +0 -13
  111. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectanglePointerExtension copy.js +0 -27
  112. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectanglePointerExtension.d.ts +0 -7
  113. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectanglePointerExtension.js +0 -20
  114. package/dist/elements/widgets/designerView/extensions/pointerExtensions/IDesignerExtension.d.ts +0 -5
  115. package/dist/elements/widgets/designerView/extensions/pointerExtensions/IDesignerExtension.js +0 -1
  116. package/dist/elements/widgets/designerView/extensions/pointerExtensions/IDesignerExtensionProvider.d.ts +0 -9
  117. package/dist/elements/widgets/designerView/extensions/pointerExtensions/IDesignerExtensionProvider.js +0 -1
  118. package/dist/elements/widgets/designerView/extensions/pointerExtensions/RulerExtension.d.ts +0 -7
  119. package/dist/elements/widgets/designerView/extensions/pointerExtensions/RulerExtension.js +0 -20
  120. package/dist/elements/widgets/designerView/extensions/pointerExtensions/RulerPointerExtension.d.ts +0 -7
  121. package/dist/elements/widgets/designerView/extensions/pointerExtensions/RulerPointerExtension.js +0 -20
  122. package/dist/elements/widgets/propertyGrid/PropertyGrid copy.d.ts +0 -17
  123. package/dist/elements/widgets/propertyGrid/PropertyGrid copy.js +0 -143
  124. package/dist/interfaces/IDesignerMousePoint.d.ts +0 -11
  125. 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
+ }
@@ -0,0 +1,3 @@
1
+ import { IPoint } from "../../interfaces/IPoint.js";
2
+ import { IDesignItem } from "../item/IDesignItem.js";
3
+ export declare function placeDesignItem(container: IDesignItem, designItem: IDesignItem, offset: IPoint, mode: 'position' | 'transform' | 'margin' | 'padding'): void;
@@ -1,4 +1,50 @@
1
- "use strict";
2
1
  //todo
3
2
  //this function should return the correct property to change a layout, for example left/right when left or right is used,
4
3
  //maybe margin on grid? or transform??
4
+ export function placeDesignItem(container, designItem, offset, mode) {
5
+ const movedElement = designItem.element;
6
+ const computedStyleMovedElement = getComputedStyle(movedElement);
7
+ if (mode === 'position') {
8
+ let positionedContainerElement = container.element;
9
+ let computedStylePositionedContainer = getComputedStyle(container.element);
10
+ while (computedStylePositionedContainer.position !== 'relative' && computedStylePositionedContainer.position !== 'absolute') {
11
+ positionedContainerElement = positionedContainerElement.parentElement;
12
+ computedStylePositionedContainer = getComputedStyle(positionedContainerElement);
13
+ }
14
+ let oldLeft = null;
15
+ let oldRight = null;
16
+ let oldTop = null;
17
+ let oldBottom = null;
18
+ let containerLeft = 0;
19
+ let containerRight = 0;
20
+ let containerTop = 0;
21
+ let containerBottom = 0;
22
+ if (computedStyleMovedElement.position === 'relative' || computedStyleMovedElement.position === 'absolute') {
23
+ oldLeft = parseFloat(movedElement.style.left);
24
+ oldLeft = Number.isNaN(oldLeft) ? null : oldLeft;
25
+ oldTop = parseFloat(movedElement.style.top);
26
+ oldTop = Number.isNaN(oldTop) ? null : oldTop;
27
+ oldRight = parseFloat(movedElement.style.right);
28
+ oldRight = Number.isNaN(oldRight) ? null : oldRight;
29
+ oldBottom = parseFloat(movedElement.style.bottom);
30
+ oldBottom = Number.isNaN(oldBottom) ? null : oldBottom;
31
+ }
32
+ else {
33
+ if (positionedContainerElement !== container.element) {
34
+ let posContainerRect = positionedContainerElement.getBoundingClientRect();
35
+ let elementRect = designItem.element.getBoundingClientRect();
36
+ containerLeft = elementRect.left - posContainerRect.left;
37
+ containerRight = elementRect.right - posContainerRect.right;
38
+ containerTop = elementRect.top - posContainerRect.top;
39
+ containerBottom = elementRect.bottom - posContainerRect.bottom;
40
+ }
41
+ }
42
+ designItem.element.style.transform = designItem.styles.get('transform') ?? '';
43
+ designItem.setStyle('position', 'absolute');
44
+ designItem.setStyle('left', (offset.x + oldLeft + containerLeft) + "px");
45
+ designItem.setStyle('top', (offset.y + oldTop + containerTop) + "px");
46
+ }
47
+ }
48
+ /*function placeViaPosition(container: IDesignItem, designItem: IDesignItem, offset: IPoint, mode: 'position' | 'transform' | 'margin' | 'padding') {
49
+
50
+ }*/
@@ -0,0 +1 @@
1
+ export declare function combineTransforms(element: HTMLElement, transform1: string, transform2: string): void;
@@ -0,0 +1,12 @@
1
+ export function combineTransforms(element, transform1, transform2) {
2
+ if (transform1 == null || transform1 == '') {
3
+ element.style.transform = transform2;
4
+ return;
5
+ }
6
+ element.style.transform = transform1;
7
+ const matrix1 = new DOMMatrix(window.getComputedStyle(element).transform);
8
+ element.style.transform = transform2;
9
+ const matrix2 = new DOMMatrix(window.getComputedStyle(element).transform);
10
+ const result = matrix2.multiply(matrix1);
11
+ element.style.transform = result.toString();
12
+ }
@@ -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('"');
@@ -1,4 +1,6 @@
1
1
  import { DomConverter } from '../../widgets/designerView/DomConverter.js';
2
+ import { combineTransforms } from '../../helper/TransformHelper.js';
3
+ import { placeDesignItem } from '../../helper/LayoutHelper.js';
2
4
  export class DefaultPlacementService {
3
5
  serviceForContainer(container) {
4
6
  if (container.element.style.display === 'grid' || container.element.style.display === 'inline-grid' ||
@@ -78,26 +80,36 @@ export class DefaultPlacementService {
78
80
  let track = this.calculateTrack(event, placementView, startPoint, offsetInControl, newPoint, items[0]);
79
81
  //TODO: -> what is if a transform already exists -> backup existing style.?
80
82
  for (const designItem of items) {
81
- designItem.element.style.transform = 'translate(' + track.x + 'px, ' + track.y + 'px)';
83
+ const newTransform = 'translate(' + track.x + 'px, ' + track.y + 'px)';
84
+ combineTransforms(designItem.element, designItem.styles.get('transform'), newTransform);
82
85
  }
83
86
  }
84
87
  enterContainer(container, items) {
88
+ for (let i of items) {
89
+ if (i.lastContainerSize) {
90
+ if (!i.styles.has('width'))
91
+ i.setStyle('width', i.lastContainerSize.width + 'px');
92
+ if (!i.styles.has('height'))
93
+ i.setStyle('height', i.lastContainerSize.height + 'px');
94
+ }
95
+ }
85
96
  }
86
97
  leaveContainer(container, items) {
87
98
  }
88
99
  finishPlace(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
89
100
  let track = this.calculateTrack(event, placementView, startPoint, offsetInControl, newPoint, items[0]);
90
101
  for (const designItem of items) {
91
- let movedElement = designItem.element;
92
- let oldLeft = parseFloat(movedElement.style.left);
102
+ /*let movedElement = designItem.element;
103
+ let oldLeft = parseFloat((<HTMLElement>movedElement).style.left);
93
104
  oldLeft = Number.isNaN(oldLeft) ? 0 : oldLeft;
94
- let oldTop = parseFloat(movedElement.style.top);
95
- oldTop = Number.isNaN(oldTop) ? 0 : oldTop;
105
+ let oldTop = parseFloat((<HTMLElement>movedElement).style.top);
106
+ oldTop = Number.isNaN(oldTop) ? 0 : oldTop;*/
96
107
  //let oldPosition = movedElement.style.position;
97
- designItem.element.style.transform = null;
98
- designItem.setStyle('position', 'absolute');
108
+ designItem.element.style.transform = designItem.styles.get('transform') ?? '';
109
+ placeDesignItem(container, designItem, track, 'position');
110
+ /*designItem.setStyle('position', 'absolute');
99
111
  designItem.setStyle('left', (track.x + oldLeft) + "px");
100
- designItem.setStyle('top', (track.y + oldTop) + "px");
112
+ designItem.setStyle('top', (track.y + oldTop) + "px");*/
101
113
  }
102
114
  }
103
115
  }
@@ -1,5 +1,12 @@
1
1
  export class FlexBoxPlacementService {
2
2
  enterContainer(container, items) {
3
+ for (let i of items) {
4
+ i.removeStyle("position");
5
+ i.removeStyle("left");
6
+ i.removeStyle("top");
7
+ i.removeStyle("right");
8
+ i.removeStyle("transform");
9
+ }
3
10
  }
4
11
  leaveContainer(container, items) {
5
12
  }
@@ -15,13 +22,20 @@ export class FlexBoxPlacementService {
15
22
  return true;
16
23
  }
17
24
  getElementOffset(container, designItem) {
18
- //TODO: offset could be bigger, when it was in a other cell???
19
25
  return container.element.getBoundingClientRect();
20
26
  }
21
27
  placePoint(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
22
28
  return null;
23
29
  }
24
30
  place(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
31
+ /*let direction = getComputedStyle(container.element).flexDirection;
32
+
33
+ const pos = (<IDesignerCanvas><unknown>placementView).getNormalizedEventCoordinates(event);
34
+ const posElement = (<IDesignerCanvas><unknown>placementView).getNormalizedElementCoordinates(items[0].element)
35
+
36
+ for (let e of container.element.children) {
37
+
38
+ }*/
25
39
  }
26
40
  finishPlace(event, placementView, container, startPoint, offsetInControl, newPoint, items) {
27
41
  }
@@ -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);