@node-projects/web-component-designer 0.0.32 → 0.0.36

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 (210) hide show
  1. package/README.md +7 -0
  2. package/assets/images/chromeDevtools/LICENSE +27 -0
  3. package/assets/images/chromeDevtools/align-content-center-icon.svg +70 -0
  4. package/assets/images/chromeDevtools/align-content-flex-end-icon.svg +1 -0
  5. package/assets/images/chromeDevtools/align-content-flex-start-icon.svg +66 -0
  6. package/assets/images/chromeDevtools/align-content-space-around-icon.svg +1 -0
  7. package/assets/images/chromeDevtools/align-content-space-between-icon.svg +1 -0
  8. package/assets/images/chromeDevtools/align-content-space-evenly-icon.svg +1 -0
  9. package/assets/images/chromeDevtools/align-content-stretch-icon.svg +53 -0
  10. package/assets/images/chromeDevtools/align-items-baseline-icon.svg +1 -0
  11. package/assets/images/chromeDevtools/align-items-center-icon.svg +1 -0
  12. package/assets/images/chromeDevtools/align-items-end-icon.svg +1 -0
  13. package/assets/images/chromeDevtools/align-items-flex-end-icon.svg +1 -0
  14. package/assets/images/chromeDevtools/align-items-flex-start-icon.svg +57 -0
  15. package/assets/images/chromeDevtools/align-items-start-icon.svg +57 -0
  16. package/assets/images/chromeDevtools/align-items-stretch-icon.svg +1 -0
  17. package/assets/images/chromeDevtools/align-self-center-icon.svg +1 -0
  18. package/assets/images/chromeDevtools/align-self-flex-end-icon.svg +1 -0
  19. package/assets/images/chromeDevtools/align-self-flex-start-icon.svg +57 -0
  20. package/assets/images/chromeDevtools/align-self-stretch-icon.svg +1 -0
  21. package/assets/images/chromeDevtools/baseline-icon.svg +1 -0
  22. package/assets/images/chromeDevtools/flex-direction-column-icon.svg +1 -0
  23. package/assets/images/chromeDevtools/flex-direction-icon.svg +1 -0
  24. package/assets/images/chromeDevtools/flex-direction-row-icon.svg +1 -0
  25. package/assets/images/chromeDevtools/flex-nowrap-icon.svg +5 -0
  26. package/assets/images/chromeDevtools/flex-wrap-icon.svg +8 -0
  27. package/assets/images/chromeDevtools/info.txt +2 -0
  28. package/assets/images/chromeDevtools/justify-content-center-icon.svg +1 -0
  29. package/assets/images/chromeDevtools/justify-content-end-icon.svg +71 -0
  30. package/assets/images/chromeDevtools/justify-content-flex-end-icon.svg +71 -0
  31. package/assets/images/chromeDevtools/justify-content-flex-start-icon.svg +1 -0
  32. package/assets/images/chromeDevtools/justify-content-space-around-icon.svg +1 -0
  33. package/assets/images/chromeDevtools/justify-content-space-between-icon.svg +1 -0
  34. package/assets/images/chromeDevtools/justify-content-space-evenly-icon.svg +1 -0
  35. package/assets/images/chromeDevtools/justify-content-start-icon.svg +1 -0
  36. package/assets/images/chromeDevtools/justify-items-center-icon.svg +1 -0
  37. package/assets/images/chromeDevtools/justify-items-end-icon.svg +57 -0
  38. package/assets/images/chromeDevtools/justify-items-start-icon.svg +1 -0
  39. package/assets/images/chromeDevtools/justify-items-stretch-icon.svg +1 -0
  40. package/dist/commandHandling/CommandType.d.ts +1 -0
  41. package/dist/commandHandling/CommandType.js +1 -0
  42. package/dist/elements/controls/DesignerTabControl.js +94 -86
  43. package/dist/elements/controls/ImageButtonListSelector copy.d.ts +17 -0
  44. package/dist/elements/controls/ImageButtonListSelector copy.js +82 -0
  45. package/dist/elements/controls/ImageButtonListSelector.d.ts +17 -0
  46. package/dist/elements/controls/ImageButtonListSelector.js +81 -0
  47. package/dist/elements/controls/ThicknessEditor.d.ts +17 -0
  48. package/dist/elements/controls/ThicknessEditor.js +80 -0
  49. package/dist/elements/documentContainer.js +20 -13
  50. package/dist/elements/helper/CssAttributeParser.js +3 -3
  51. package/dist/elements/helper/CssCombiner.js +1 -1
  52. package/dist/elements/helper/IndentedTextWriter.js +3 -5
  53. package/dist/elements/helper/Screenshot.js +4 -0
  54. package/dist/elements/helper/contextMenu/ContextMenuHelper.js +59 -53
  55. package/dist/elements/helper/w3color.js +15 -17
  56. package/dist/elements/item/DesignItem.js +21 -15
  57. package/dist/elements/services/BaseServiceContainer.js +1 -3
  58. package/dist/elements/services/DefaultServiceBootstrap.js +2 -0
  59. package/dist/elements/services/GlobalContext.js +8 -6
  60. package/dist/elements/services/InstanceServiceContainer.js +1 -4
  61. package/dist/elements/services/ServiceContainer.d.ts +3 -0
  62. package/dist/elements/services/ServiceContainer.js +11 -10
  63. package/dist/elements/services/bindingsService/BaseCustomWebcomponentBindingsService.js +1 -1
  64. package/dist/elements/services/bindingsService/SpecialTagsBindingService.js +5 -5
  65. package/dist/elements/services/contentService/ContentService.js +2 -1
  66. package/dist/elements/services/copyPasteService/CopyPasteService.d.ts +8 -0
  67. package/dist/elements/services/copyPasteService/CopyPasteService.js +12 -0
  68. package/dist/elements/services/copyPasteService/ICopyPasteService copy.d.ts +0 -0
  69. package/dist/elements/services/copyPasteService/ICopyPasteService copy.js +1 -0
  70. package/dist/elements/services/copyPasteService/ICopyPasteService.d.ts +7 -0
  71. package/dist/elements/services/copyPasteService/ICopyPasteService.js +1 -0
  72. package/dist/elements/services/elementsService/JsonFileElementsService.js +14 -10
  73. package/dist/elements/services/elementsService/PreDefinedElementsService.js +6 -4
  74. package/dist/elements/services/htmlParserService/NodeHtmlParserService.js +2 -1
  75. package/dist/elements/services/htmlWriterService/IHtmlWriterOptions.js +3 -0
  76. package/dist/elements/services/placementService/DefaultPlacementService.d.ts +3 -4
  77. package/dist/elements/services/placementService/DefaultPlacementService.js +10 -10
  78. package/dist/elements/services/placementService/FlexBoxPlacementService.d.ts +3 -4
  79. package/dist/elements/services/placementService/FlexBoxPlacementService.js +3 -3
  80. package/dist/elements/services/placementService/GridPlacementService.d.ts +3 -4
  81. package/dist/elements/services/placementService/GridPlacementService.js +3 -3
  82. package/dist/elements/services/placementService/IPlacementService.d.ts +3 -4
  83. package/dist/elements/services/popupService/PopupService.js +3 -1
  84. package/dist/elements/services/propertiesService/DefaultEditorTypesService.js +10 -0
  85. package/dist/elements/services/propertiesService/propertyEditors/BasePropertyEditor.js +4 -1
  86. package/dist/elements/services/propertiesService/propertyEditors/ImageButtonListPropertyEditor copy.d.ts +8 -0
  87. package/dist/elements/services/propertiesService/propertyEditors/ImageButtonListPropertyEditor copy.js +40 -0
  88. package/dist/elements/services/propertiesService/propertyEditors/ImageButtonListPropertyEditor.d.ts +8 -0
  89. package/dist/elements/services/propertiesService/propertyEditors/ImageButtonListPropertyEditor.js +40 -0
  90. package/dist/elements/services/propertiesService/propertyEditors/JsonPropertyEditor.js +7 -6
  91. package/dist/elements/services/propertiesService/propertyEditors/JsonPropertyPopupEditor.js +6 -6
  92. package/dist/elements/services/propertiesService/propertyEditors/TextPropertyEditor.js +1 -2
  93. package/dist/elements/services/propertiesService/propertyEditors/ThicknessPropertyEditor.d.ts +8 -0
  94. package/dist/elements/services/propertiesService/propertyEditors/ThicknessPropertyEditor.js +14 -0
  95. package/dist/elements/services/propertiesService/services/AttributesPropertiesService.js +1 -3
  96. package/dist/elements/services/propertiesService/services/BaseCustomWebComponentPropertiesService.js +1 -4
  97. package/dist/elements/services/propertiesService/services/CommonPropertiesService.js +21 -23
  98. package/dist/elements/services/propertiesService/services/CssPropertiesService.d.ts +3 -2
  99. package/dist/elements/services/propertiesService/services/CssPropertiesService.js +194 -184
  100. package/dist/elements/services/propertiesService/services/ListPropertiesService.js +2 -2
  101. package/dist/elements/services/propertiesService/services/Lit2PropertiesService.js +1 -4
  102. package/dist/elements/services/propertiesService/services/LitElementPropertiesService.js +1 -4
  103. package/dist/elements/services/propertiesService/services/NativeElementsPropertiesService.js +72 -75
  104. package/dist/elements/services/propertiesService/services/PolymerPropertiesService.js +1 -4
  105. package/dist/elements/services/propertiesService/services/UnkownElementPropertiesService.js +1 -3
  106. package/dist/elements/services/selectionService/SelectionService.js +3 -4
  107. package/dist/elements/services/undoService/ChangeGroup.js +6 -2
  108. package/dist/elements/services/undoService/UndoService.js +3 -5
  109. package/dist/elements/services/undoService/transactionItems/AttributeChangeAction.js +5 -0
  110. package/dist/elements/services/undoService/transactionItems/CssStyleChangeAction.js +5 -0
  111. package/dist/elements/services/undoService/transactionItems/DeleteAction.js +5 -0
  112. package/dist/elements/services/undoService/transactionItems/InsertAction.js +4 -0
  113. package/dist/elements/services/undoService/transactionItems/MoveElementInDomAction.js +7 -0
  114. package/dist/elements/services/undoService/transactionItems/PropertyChangeAction.js +5 -0
  115. package/dist/elements/widgets/bindableObjectsBrowser/bindable-objects-browser.js +27 -24
  116. package/dist/elements/widgets/bindings/BindingsEditor.js +6 -6
  117. package/dist/elements/widgets/codeView/code-view-ace.js +12 -7
  118. package/dist/elements/widgets/codeView/code-view-code-mirror.js +18 -13
  119. package/dist/elements/widgets/codeView/code-view-monaco.js +16 -11
  120. package/dist/elements/widgets/demoView/demoView.js +24 -22
  121. package/dist/elements/widgets/designerView/DesignContext.js +1 -3
  122. package/dist/elements/widgets/designerView/IDesignerCanvas.d.ts +2 -2
  123. package/dist/elements/widgets/designerView/Snaplines.js +8 -5
  124. package/dist/elements/widgets/designerView/designerCanvas.d.ts +5 -4
  125. package/dist/elements/widgets/designerView/designerCanvas.js +131 -113
  126. package/dist/elements/widgets/designerView/designerView.d.ts +1 -0
  127. package/dist/elements/widgets/designerView/designerView.js +117 -81
  128. package/dist/elements/widgets/designerView/extensions/AbstractExtension.js +5 -1
  129. package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtension.js +2 -0
  130. package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtensionProvider.js +4 -6
  131. package/dist/elements/widgets/designerView/extensions/CanvasExtension copy.d.ts +10 -0
  132. package/dist/elements/widgets/designerView/extensions/CanvasExtension copy.js +29 -0
  133. package/dist/elements/widgets/designerView/extensions/CanvasExtensionProvider copy.d.ts +10 -0
  134. package/dist/elements/widgets/designerView/extensions/CanvasExtensionProvider copy.js +15 -0
  135. package/dist/elements/widgets/designerView/extensions/CanvasExtensionProvider.js +3 -5
  136. package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.js +11 -8
  137. package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +1 -0
  138. package/dist/elements/widgets/designerView/extensions/GrayOutExtension.js +1 -0
  139. package/dist/elements/widgets/designerView/extensions/GrayOutExtensionProvider.js +3 -5
  140. package/dist/elements/widgets/designerView/extensions/GridExtensionProvider.js +5 -7
  141. package/dist/elements/widgets/designerView/extensions/InvisibleDivExtension.js +1 -0
  142. package/dist/elements/widgets/designerView/extensions/InvisibleDivExtensionProvider.js +3 -5
  143. package/dist/elements/widgets/designerView/extensions/MouseOverExtension.js +1 -0
  144. package/dist/elements/widgets/designerView/extensions/MouseOverExtensionProvider.js +3 -5
  145. package/dist/elements/widgets/designerView/extensions/PathExtension.js +4 -0
  146. package/dist/elements/widgets/designerView/extensions/PermamentCursorExtension.d.ts +10 -0
  147. package/dist/elements/widgets/designerView/extensions/PermamentCursorExtension.js +29 -0
  148. package/dist/elements/widgets/designerView/extensions/PermamentCursorExtensionProvider copy.d.ts +10 -0
  149. package/dist/elements/widgets/designerView/extensions/PermamentCursorExtensionProvider copy.js +15 -0
  150. package/dist/elements/widgets/designerView/extensions/PermamentCursorExtensionProvider.d.ts +10 -0
  151. package/dist/elements/widgets/designerView/extensions/PermamentCursorExtensionProvider.js +15 -0
  152. package/dist/elements/widgets/designerView/extensions/PositionExtension.js +4 -0
  153. package/dist/elements/widgets/designerView/extensions/PrimarySelectionDefaultExtension.js +2 -0
  154. package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +14 -4
  155. package/dist/elements/widgets/designerView/extensions/ResizeExtensionProvider.js +1 -0
  156. package/dist/elements/widgets/designerView/extensions/RotateExtensionProvider.js +3 -5
  157. package/dist/elements/widgets/designerView/extensions/SelectionDefaultExtension.js +1 -0
  158. package/dist/elements/widgets/designerView/extensions/SelectionDefaultExtensionProvider.js +3 -5
  159. package/dist/elements/widgets/designerView/extensions/TransformOriginExtension.js +3 -0
  160. package/dist/elements/widgets/designerView/extensions/TransformOriginExtensionProvider.js +3 -5
  161. package/dist/elements/widgets/designerView/extensions/contextMenu/MultipleItemsSelectedContextMenu.js +1 -3
  162. package/dist/elements/widgets/designerView/extensions/pointerExtensions/AbstractDesignerPointerExtension.d.ts +22 -0
  163. package/dist/elements/widgets/designerView/extensions/pointerExtensions/AbstractDesignerPointerExtension.js +82 -0
  164. package/dist/elements/widgets/designerView/extensions/pointerExtensions/AbstractExtension.d.ts +22 -0
  165. package/dist/elements/widgets/designerView/extensions/pointerExtensions/AbstractExtension.js +78 -0
  166. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectangleExtension.d.ts +7 -0
  167. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectangleExtension.js +20 -0
  168. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectanglePointerExtension copy.d.ts +7 -0
  169. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectanglePointerExtension copy.js +20 -0
  170. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectanglePointerExtension.d.ts +7 -0
  171. package/dist/elements/widgets/designerView/extensions/pointerExtensions/CursorRectanglePointerExtension.js +20 -0
  172. package/dist/elements/widgets/designerView/extensions/pointerExtensions/IDesignerExtension.d.ts +5 -0
  173. package/dist/elements/widgets/designerView/extensions/pointerExtensions/IDesignerExtension.js +1 -0
  174. package/dist/elements/widgets/designerView/extensions/pointerExtensions/IDesignerExtensionProvider.d.ts +9 -0
  175. package/dist/elements/widgets/designerView/extensions/pointerExtensions/IDesignerExtensionProvider.js +1 -0
  176. package/dist/elements/widgets/designerView/extensions/pointerExtensions/IDesignerPointerExtension.d.ts +5 -0
  177. package/dist/elements/widgets/designerView/extensions/pointerExtensions/IDesignerPointerExtension.js +1 -0
  178. package/dist/elements/widgets/designerView/extensions/pointerExtensions/IDesignerPointerExtensionProvider.d.ts +9 -0
  179. package/dist/elements/widgets/designerView/extensions/pointerExtensions/IDesignerPointerExtensionProvider.js +1 -0
  180. package/dist/elements/widgets/designerView/extensions/pointerExtensions/RulerExtension.d.ts +7 -0
  181. package/dist/elements/widgets/designerView/extensions/pointerExtensions/RulerExtension.js +20 -0
  182. package/dist/elements/widgets/designerView/extensions/pointerExtensions/RulerPointerExtension.d.ts +7 -0
  183. package/dist/elements/widgets/designerView/extensions/pointerExtensions/RulerPointerExtension.js +20 -0
  184. package/dist/elements/widgets/designerView/overlay/EditTextOverlay.js +3 -3
  185. package/dist/elements/widgets/designerView/overlayLayerView.js +28 -24
  186. package/dist/elements/widgets/designerView/tools/DrawElementTool.js +5 -1
  187. package/dist/elements/widgets/designerView/tools/DrawPathTool.d.ts +0 -1
  188. package/dist/elements/widgets/designerView/tools/DrawPathTool.js +4 -3
  189. package/dist/elements/widgets/designerView/tools/MagicWandSelectorTool.d.ts +0 -1
  190. package/dist/elements/widgets/designerView/tools/MagicWandSelectorTool.js +4 -5
  191. package/dist/elements/widgets/designerView/tools/PanTool.js +1 -3
  192. package/dist/elements/widgets/designerView/tools/PickColorTool.js +1 -3
  193. package/dist/elements/widgets/designerView/tools/PointerTool.d.ts +2 -1
  194. package/dist/elements/widgets/designerView/tools/PointerTool.js +75 -63
  195. package/dist/elements/widgets/designerView/tools/RectangleSelectorTool.js +10 -9
  196. package/dist/elements/widgets/designerView/tools/TextTool.js +1 -1
  197. package/dist/elements/widgets/designerView/tools/ZoomTool.js +1 -3
  198. package/dist/elements/widgets/miniatureView/html-2-canvas-miniature-view.js +5 -4
  199. package/dist/elements/widgets/paletteView/paletteElements.js +45 -45
  200. package/dist/elements/widgets/paletteView/paletteTreeView.js +53 -51
  201. package/dist/elements/widgets/paletteView/paletteView.js +9 -8
  202. package/dist/elements/widgets/propertyGrid/PropertyGrid.js +37 -18
  203. package/dist/elements/widgets/propertyGrid/PropertyGridPropertyList.js +14 -10
  204. package/dist/elements/widgets/treeView/treeView.js +102 -96
  205. package/dist/elements/widgets/treeView/treeViewExtended.js +72 -70
  206. package/dist/index.d.ts +2 -1
  207. package/dist/index.js +1 -0
  208. package/dist/interfaces/IDesignerMousePoint.d.ts +2 -0
  209. package/package.json +1 -1
  210. package/tsconfig.json +1 -1
@@ -7,7 +7,6 @@ import { BaseCustomWebComponentLazyAppend, css, html } from '@node-projects/base
7
7
  import { dragDropFormatName } from '../../../Constants';
8
8
  import { ContentService } from '../../services/contentService/ContentService';
9
9
  import { InsertAction } from '../../services/undoService/transactionItems/InsertAction';
10
- import { DomConverter } from './DomConverter';
11
10
  import { Snaplines } from './Snaplines';
12
11
  import { ContextMenuHelper } from '../../helper/contextMenu/ContextMenuHelper';
13
12
  import { DeleteAction } from '../../services/undoService/transactionItems/DeleteAction';
@@ -23,13 +22,97 @@ import { DomHelper } from '@node-projects/base-custom-webcomponent/dist/DomHelpe
23
22
  import { OverlayLayer } from "./extensions/OverlayLayer";
24
23
  import { OverlayLayerView } from './overlayLayerView';
25
24
  export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
25
+ // Public Properties
26
+ serviceContainer;
27
+ instanceServiceContainer;
28
+ containerBoundingRect;
29
+ outerRect;
30
+ // IPlacementView
31
+ gridSize = 10;
32
+ alignOnGrid = false;
33
+ alignOnSnap = true;
34
+ snapLines;
35
+ overlayLayer;
36
+ rootDesignItem;
37
+ eatEvents;
38
+ _zoomFactor = 1;
39
+ get zoomFactor() {
40
+ return this._zoomFactor;
41
+ }
42
+ set zoomFactor(value) {
43
+ this._zoomFactor = value;
44
+ this.zoomFactorChanged();
45
+ }
46
+ // Private Variables
47
+ _canvas;
48
+ _canvasContainer;
49
+ _outercanvas2;
50
+ _lastHoverDesignItem;
51
+ _onContextMenuBound;
52
+ _pointerEventHandlerBound;
53
+ _firstConnect;
54
+ _onKeyDownBound;
55
+ _onKeyUpBound;
56
+ static style = css `
57
+ :host {
58
+ display: block;
59
+ box-sizing: border-box;
60
+ width: 100%;
61
+ position: relative;
62
+ transform: translateZ(0);
63
+ overflow: hidden;
64
+ }
65
+ * {
66
+ touch-action: none;
67
+ }
68
+ #node-projects-designer-canvas-canvas {
69
+ background-color: var(--canvas-background, white);
70
+ /* 10px grid, using http://www.patternify.com/ */
71
+ background-image: url(data:image/png;base64,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);
72
+ background-position: 0px 0px;
73
+ box-sizing: border-box;
74
+ width: 100%;
75
+ height: 100%;
76
+ transform-origin: 0 0;
77
+ }
78
+
79
+ #node-projects-designer-canvas-canvas.dragFileActive {
80
+ outline: blue 4px solid;
81
+ outline-offset: -4px;
82
+ }
83
+
84
+ node-projects-overlay-layer-view {
85
+ box-sizing: border-box;
86
+ width: 100%;
87
+ height: 100%;
88
+ position: absolute;
89
+ top: 0;
90
+ left: 0;
91
+ pointer-events: none;
92
+ overflow: visible;
93
+ user-select: none;
94
+ z-index: 999999999999;
95
+ }
96
+
97
+ #node-projects-designer-canvas-canvas * {
98
+ cursor: pointer;
99
+ user-select: none;
100
+ }`;
101
+ static template = html `
102
+ <div style="display: flex;flex-direction: column;width: 100%;height: 100%;">
103
+ <div style="width: 100%;height: 100%;">
104
+ <div id="node-projects-designer-canvas-outercanvas2" style="width: 100%;height: 100%;position: relative;overflow: auto;">
105
+ <div id="node-projects-designer-canvas-canvasContainer" style="width: 100%;height: 100%;margin: auto;position: absolute;top: 0;/* bottom: 0; does not work with fixed sized when size is bigger then view */left: 0;user-select: none;">
106
+ <!-- <div id="zoomHelper" style="width: 10px; height: 10px; position: absolute; top: 0; left: 0; pointer-events: none;"></div> -->
107
+ <div id="node-projects-designer-canvas-canvas" part="canvas" tabindex="0"></div>
108
+ </div>
109
+ </div>
110
+ </div>
111
+ </div>`;
112
+ extensionManager;
113
+ _onDblClickBound;
26
114
  constructor() {
27
115
  super();
28
- // IPlacementView
29
- this.gridSize = 10;
30
- this.alignOnGrid = false;
31
- this.alignOnSnap = true;
32
- this._zoomFactor = 1;
33
116
  this._canvas = this._getDomElement('node-projects-designer-canvas-canvas');
34
117
  this._canvasContainer = this._getDomElement('node-projects-designer-canvas-canvasContainer');
35
118
  this._outercanvas2 = this._getDomElement('node-projects-designer-canvas-outercanvas2');
@@ -44,13 +127,6 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
44
127
  this._pointerEventHandlerBound = this._pointerEventHandler.bind(this);
45
128
  this._canvas.oncontextmenu = this._onContextMenuBound;
46
129
  }
47
- get zoomFactor() {
48
- return this._zoomFactor;
49
- }
50
- set zoomFactor(value) {
51
- this._zoomFactor = value;
52
- this.zoomFactorChanged();
53
- }
54
130
  get designerWidth() {
55
131
  return this._canvasContainer.style.width;
56
132
  }
@@ -134,6 +210,9 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
134
210
  case CommandType.paste:
135
211
  this.handlePasteCommand();
136
212
  break;
213
+ case CommandType.selectAll:
214
+ this.handleSelectAll();
215
+ break;
137
216
  }
138
217
  }
139
218
  canExecuteCommand(command) {
@@ -149,15 +228,15 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
149
228
  return true;
150
229
  }
151
230
  /* --- end IUiCommandHandler --- */
152
- handleCopyCommand() {
153
- const copyText = DomConverter.ConvertToString(this.instanceServiceContainer.selectionService.selectedElements, null);
154
- navigator.clipboard.writeText(copyText);
231
+ handleSelectAll() {
232
+ this.instanceServiceContainer.selectionService.setSelectedElements(Array.from(this.rootDesignItem.children()));
233
+ }
234
+ async handleCopyCommand() {
235
+ await this.serviceContainer.copyPasteService.copyItems(this.instanceServiceContainer.selectionService.selectedElements);
155
236
  }
156
237
  async handlePasteCommand() {
157
- const text = await navigator.clipboard.readText();
158
- const parserService = this.serviceContainer.htmlParserService;
238
+ const designItems = await this.serviceContainer.copyPasteService.getPasteItems(this.serviceContainer, this.instanceServiceContainer);
159
239
  let grp = this.rootDesignItem.openGroup("Insert");
160
- const designItems = await parserService.parse(text, this.serviceContainer, this.instanceServiceContainer);
161
240
  if (designItems) {
162
241
  for (let di of designItems) {
163
242
  this.instanceServiceContainer.undoService.execute(new InsertAction(this.rootDesignItem, this.rootDesignItem.childCount, di));
@@ -178,7 +257,6 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
178
257
  this.instanceServiceContainer.selectionService.setSelectedElements(null);
179
258
  }
180
259
  handleMoveCommand(command) {
181
- //TODO: -> via undo redo service
182
260
  let sel = this.instanceServiceContainer.selectionService.primarySelection;
183
261
  if (command == CommandType.moveBackward)
184
262
  this.instanceServiceContainer.undoService.execute(new MoveElementInDomAction(sel, DesignItem.GetDesignItem(sel.element.previousElementSibling), 'beforebegin', DesignItem.GetDesignItem(sel.element.previousElementSibling), 'afterend'));
@@ -217,20 +295,20 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
217
295
  this._outercanvas2.addEventListener(EventNames.PointerDown, this._pointerEventHandlerBound);
218
296
  this._outercanvas2.addEventListener(EventNames.PointerMove, this._pointerEventHandlerBound);
219
297
  this._outercanvas2.addEventListener(EventNames.PointerUp, this._pointerEventHandlerBound);
220
- this._canvas.addEventListener(EventNames.DragEnter, event => this._onDragEnter(event));
221
- this._canvas.addEventListener(EventNames.DragLeave, event => this._onDragLeave(event));
222
- this._canvas.addEventListener(EventNames.DragOver, event => this._onDragOver(event));
223
- this._canvas.addEventListener(EventNames.Drop, event => this._onDrop(event));
298
+ this._outercanvas2.addEventListener(EventNames.DragEnter, event => this._onDragEnter(event));
299
+ this._outercanvas2.addEventListener(EventNames.DragLeave, event => this._onDragLeave(event));
300
+ this._outercanvas2.addEventListener(EventNames.DragOver, event => this._onDragOver(event));
301
+ this._outercanvas2.addEventListener(EventNames.Drop, event => this._onDrop(event));
224
302
  this._canvas.addEventListener(EventNames.KeyDown, this._onKeyDownBound, true);
225
303
  this._canvas.addEventListener(EventNames.KeyUp, this._onKeyUpBound, true);
226
304
  this._canvas.addEventListener(EventNames.DblClick, this._onDblClickBound, true);
227
- this.addEventListener(EventNames.Wheel, event => this._onWheel(event));
228
305
  }
229
306
  }
230
307
  zoomFactorChanged() {
231
308
  //@ts-ignore
232
309
  this._canvasContainer.style.zoom = this._zoomFactor;
233
- //this._zoomInput.value = (this._zoomFactor * 100).toFixed(0) + '%';
310
+ //this._canvasContainer.style.transform = 'scale(' + this._zoomFactor+')';
311
+ //this._canvasContainer.style.transformOrigin = '0 0';
234
312
  this._canvasContainer.style.bottom = this._outercanvas2.offsetHeight >= this._canvasContainer.offsetHeight ? '0' : '';
235
313
  this._canvasContainer.style.right = this._outercanvas2.offsetWidth >= this._canvasContainer.offsetWidth ? '0' : '';
236
314
  this.snapLines.clearSnaplines();
@@ -294,29 +372,19 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
294
372
  }
295
373
  else {
296
374
  this._fillCalculationrects();
297
- let transferData = event.dataTransfer.getData(dragDropFormatName);
298
- let elementDefinition = JSON.parse(transferData);
299
- let di = await this.serviceContainer.forSomeServicesTillResult("instanceService", (service) => service.getElement(elementDefinition, this.serviceContainer, this.instanceServiceContainer));
300
- let grp = di.openGroup("Insert");
375
+ const position = this.getNormalizedEventCoordinates(event);
376
+ const transferData = event.dataTransfer.getData(dragDropFormatName);
377
+ const elementDefinition = JSON.parse(transferData);
378
+ const di = await this.serviceContainer.forSomeServicesTillResult("instanceService", (service) => service.getElement(elementDefinition, this.serviceContainer, this.instanceServiceContainer));
379
+ const grp = di.openGroup("Insert");
301
380
  di.setStyle('position', 'absolute');
302
- const targetRect = event.target.getBoundingClientRect();
303
- di.setStyle('top', event.offsetY + targetRect.top - this.containerBoundingRect.y + 'px');
304
- di.setStyle('left', event.offsetX + targetRect.left - this.containerBoundingRect.x + 'px');
381
+ di.setStyle('left', position.x + 'px');
382
+ di.setStyle('top', position.y + 'px');
305
383
  this.instanceServiceContainer.undoService.execute(new InsertAction(this.rootDesignItem, this.rootDesignItem.childCount, di));
306
384
  grp.commit();
307
385
  requestAnimationFrame(() => this.instanceServiceContainer.selectionService.setSelectedElements([di]));
308
386
  }
309
387
  }
310
- _onWheel(event) {
311
- if (event.ctrlKey) {
312
- event.preventDefault();
313
- this._zoomFactor += event.deltaY * -0.001; //deltamode = 0
314
- if (this._zoomFactor < 0.1)
315
- this._zoomFactor = 0.1;
316
- this.zoomFactorChanged();
317
- //TODO: we should zoom on the current cursor position, so it stays the center
318
- }
319
- }
320
388
  _onContextMenu(event) {
321
389
  event.preventDefault();
322
390
  const designItem = DesignItem.GetOrCreateDesignItem(event.target, this.serviceContainer, this.instanceServiceContainer);
@@ -359,6 +427,14 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
359
427
  this.executeCommand({ type: CommandType.redo });
360
428
  else if ((event.ctrlKey || event.metaKey) && event.key === 'y')
361
429
  this.executeCommand({ type: CommandType.redo });
430
+ else if ((event.ctrlKey || event.metaKey) && event.key === 'a')
431
+ this.executeCommand({ type: CommandType.selectAll });
432
+ else if ((event.ctrlKey || event.metaKey) && event.key === 'c')
433
+ this.executeCommand({ type: CommandType.copy });
434
+ else if ((event.ctrlKey || event.metaKey) && event.key === 'v')
435
+ this.executeCommand({ type: CommandType.paste });
436
+ else if ((event.ctrlKey || event.metaKey) && event.key === 'x')
437
+ this.executeCommand({ type: CommandType.cut });
362
438
  else {
363
439
  let primarySelection = this.instanceServiceContainer.selectionService.primarySelection;
364
440
  if (!primarySelection) {
@@ -400,18 +476,14 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
400
476
  }
401
477
  event.preventDefault();
402
478
  }
403
- getDesignerMousepoint(event, target, startPoint) {
404
- let targetRect = target.getBoundingClientRect();
479
+ getNormalizedEventCoordinates(event) {
480
+ const offsetOfOuterX = (event.clientX - this.outerRect.x) / this.zoomFactor;
481
+ const offsetOfCanvasX = this.containerBoundingRect.x - this.outerRect.x / this.zoomFactor;
482
+ const offsetOfOuterY = (event.clientY - this.outerRect.y) / this.zoomFactor;
483
+ const offsetOfCanvasY = this.containerBoundingRect.y - this.outerRect.y / this.zoomFactor;
405
484
  return {
406
- originalX: event.x - this.containerBoundingRect.x,
407
- //containerOriginalX: event.x - this._ownBoundingRect.x,
408
- x: (event.x - this.containerBoundingRect.x) / this._zoomFactor,
409
- originalY: event.y - this.containerBoundingRect.y,
410
- //containerOriginalY: event.y - this._ownBoundingRect.y,
411
- y: (event.y - this.containerBoundingRect.y) / this._zoomFactor,
412
- offsetInControlX: (startPoint ? startPoint.offsetInControlX : event.x - targetRect.x),
413
- offsetInControlY: (startPoint ? startPoint.offsetInControlY : event.y - targetRect.y),
414
- zoom: this._zoomFactor
485
+ x: offsetOfOuterX - offsetOfCanvasX,
486
+ y: offsetOfOuterY - offsetOfCanvasY
415
487
  };
416
488
  }
417
489
  //todo remove, is in base custom webcomp domhelper
@@ -464,8 +536,9 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
464
536
  }
465
537
  return currentElement;
466
538
  }
539
+ _rect;
467
540
  _pointerEventHandler(event) {
468
- var _a, _b, _c;
541
+ this._fillCalculationrects();
469
542
  if (event.composedPath().indexOf(this.eatEvents) >= 0)
470
543
  return;
471
544
  if (event.button == 2)
@@ -487,15 +560,16 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
487
560
  if (currentElement && DesignerCanvas.getHost(currentElement.parentNode) === this.overlayLayer) {
488
561
  if (this.eatEvents)
489
562
  return;
490
- currentElement = (_b = (_a = this.instanceServiceContainer.selectionService.primarySelection) === null || _a === void 0 ? void 0 : _a.element) !== null && _b !== void 0 ? _b : this._canvas;
563
+ currentElement = this.instanceServiceContainer.selectionService.primarySelection?.element ?? this._canvas;
491
564
  }
492
565
  this._fillCalculationrects();
493
- let tool = (_c = this.serviceContainer.globalContext.tool) !== null && _c !== void 0 ? _c : this.serviceContainer.designerTools.get(NamedTools.Pointer);
566
+ let tool = this.serviceContainer.globalContext.tool ?? this.serviceContainer.designerTools.get(NamedTools.Pointer);
494
567
  this._canvas.style.cursor = tool.cursor;
495
568
  tool.pointerEventHandler(this, event, currentElement);
496
569
  }
497
570
  _fillCalculationrects() {
498
571
  this.containerBoundingRect = this._canvasContainer.getBoundingClientRect();
572
+ this.outerRect = this._outercanvas2.getBoundingClientRect();
499
573
  }
500
574
  addOverlay(element, overlayLayer = OverlayLayer.Normal) {
501
575
  this.overlayLayer.addOverlay(element, overlayLayer);
@@ -504,60 +578,4 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
504
578
  this.overlayLayer.removeOverlay(element);
505
579
  }
506
580
  }
507
- DesignerCanvas.style = css `
508
- :host {
509
- display: block;
510
- box-sizing: border-box;
511
- width: 100%;
512
- position: relative;
513
- transform: translateZ(0);
514
- overflow: hidden;
515
- }
516
- * {
517
- touch-action: none;
518
- }
519
- #node-projects-designer-canvas-canvas {
520
- background-color: var(--canvas-background, white);
521
- /* 10px grid, using http://www.patternify.com/ */
522
- background-image: url(data:image/png;base64,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);
523
- background-position: 0px 0px;
524
- box-sizing: border-box;
525
- width: 100%;
526
- height: 100%;
527
- transform-origin: 0 0;
528
- }
529
-
530
- #node-projects-designer-canvas-canvas.dragFileActive {
531
- outline: blue 4px solid;
532
- outline-offset: -4px;
533
- }
534
-
535
- node-projects-overlay-layer-view {
536
- box-sizing: border-box;
537
- width: 100%;
538
- height: 100%;
539
- position: absolute;
540
- top: 0;
541
- left: 0;
542
- pointer-events: none;
543
- overflow: visible;
544
- user-select: none;
545
- z-index: 999999999999;
546
- }
547
-
548
- #node-projects-designer-canvas-canvas * {
549
- cursor: pointer;
550
- user-select: none;
551
- }`;
552
- DesignerCanvas.template = html `
553
- <div style="display: flex;flex-direction: column;width: 100%;height: 100%;">
554
- <div style="width: 100%;height: 100%;">
555
- <div id="node-projects-designer-canvas-outercanvas2" style="width: 100%;height: 100%;position: relative;overflow: auto;">
556
- <div id="node-projects-designer-canvas-canvasContainer" style="width: 100%;height: 100%;margin: auto;position: absolute;top: 0;/* bottom: 0; does not work with fixed sized when size is bigger then view */left: 0;user-select: none;">
557
- <!-- <div id="zoomHelper" style="width: 10px; height: 10px; position: absolute; top: 0; left: 0; pointer-events: none;"></div> -->
558
- <div id="node-projects-designer-canvas-canvas" part="canvas" tabindex="0"></div>
559
- </div>
560
- </div>
561
- </div>
562
- </div>`;
563
581
  customElements.define('node-projects-designer-canvas', DesignerCanvas);
@@ -16,6 +16,7 @@ export declare class DesignerView extends BaseCustomWebComponentConstructorAppen
16
16
  static readonly template: HTMLTemplateElement;
17
17
  private _designerCanvas;
18
18
  constructor();
19
+ private _onWheel;
19
20
  get designerWidth(): string;
20
21
  set designerWidth(value: string);
21
22
  get designerHeight(): string;
@@ -2,32 +2,8 @@ import { css, DomHelper, html, BaseCustomWebComponentConstructorAppend } from '@
2
2
  import { DesignerCanvas } from "./designerCanvas.js";
3
3
  import { DomConverter } from './DomConverter.js';
4
4
  import { DefaultHtmlParserService } from '../../services/htmlParserService/DefaultHtmlParserService.js';
5
+ import { EventNames } from '../../../enums/EventNames.js';
5
6
  export class DesignerView extends BaseCustomWebComponentConstructorAppend {
6
- constructor() {
7
- super();
8
- const outer = this._getDomElement('outer');
9
- this._designerCanvas = new DesignerCanvas();
10
- this._designerCanvas.id = "canvas";
11
- this._designerCanvas.appendChild(document.createElement("slot"));
12
- outer.insertAdjacentElement('afterbegin', this._designerCanvas);
13
- this._zoomInput = this._getDomElement('zoomInput');
14
- this._zoomInput.onchange = () => { this._designerCanvas.zoomFactor = parseFloat(this._zoomInput.value) / 100; };
15
- this._zoomInput.onclick = this._zoomInput.select;
16
- let zoomIncrease = this._getDomElement('zoomIncrease');
17
- zoomIncrease.onclick = () => { this._designerCanvas.zoomFactor += 0.1; };
18
- let zoomDecrease = this._getDomElement('zoomDecrease');
19
- zoomDecrease.onclick = () => { this._designerCanvas.zoomFactor -= 0.1; };
20
- let zoomReset = this._getDomElement('zoomReset');
21
- zoomReset.onclick = () => { this._designerCanvas.zoomFactor = 1; };
22
- let zoomFit = this._getDomElement('zoomFit');
23
- zoomFit.onclick = () => { this._designerCanvas.zoomFactor = 7.7; };
24
- let alignSnap = this._getDomElement('alignSnap');
25
- alignSnap.onclick = () => { this._designerCanvas.alignOnSnap = !this._designerCanvas.alignOnSnap; alignSnap.style.backgroundColor = this._designerCanvas.alignOnSnap ? 'deepskyblue' : ''; };
26
- alignSnap.style.backgroundColor = this._designerCanvas.alignOnSnap ? 'deepskyblue' : '';
27
- let alignGrid = this._getDomElement('alignGrid');
28
- alignGrid.onclick = () => { this._designerCanvas.alignOnGrid = !this._designerCanvas.alignOnGrid; alignGrid.style.backgroundColor = this._designerCanvas.alignOnGrid ? 'deepskyblue' : ''; };
29
- alignGrid.style.backgroundColor = this._designerCanvas.alignOnGrid ? 'deepskyblue' : '';
30
- }
31
7
  get serviceContainer() {
32
8
  return this._designerCanvas.serviceContainer;
33
9
  }
@@ -40,61 +16,8 @@ export class DesignerView extends BaseCustomWebComponentConstructorAppend {
40
16
  set instanceServiceContainer(value) {
41
17
  this._designerCanvas.instanceServiceContainer = value;
42
18
  }
43
- get designerWidth() {
44
- return this._designerCanvas.designerWidth;
45
- }
46
- set designerWidth(value) {
47
- this._designerCanvas.designerWidth = value;
48
- }
49
- get designerHeight() {
50
- return this._designerCanvas.designerHeight;
51
- }
52
- set designerHeight(value) {
53
- this._designerCanvas.designerHeight = value;
54
- }
55
- set additionalStyle(value) {
56
- this._designerCanvas.additionalStyle = value;
57
- }
58
- setDesignItems(designItems) {
59
- this._designerCanvas.setDesignItems(designItems);
60
- }
61
- /* --- start IUiCommandHandler --- */
62
- async executeCommand(command) {
63
- this._designerCanvas.executeCommand(command);
64
- }
65
- canExecuteCommand(command) {
66
- return this._designerCanvas.canExecuteCommand(command);
67
- }
68
- /* --- end IUiCommandHandler --- */
69
- initialize(serviceContainer) {
70
- this.serviceContainer = serviceContainer;
71
- this._designerCanvas.initialize(serviceContainer);
72
- }
73
- getHTML(designItemsAssignmentList) {
74
- this.instanceServiceContainer.selectionService.setSelectedElements(null);
75
- return DomConverter.ConvertToString([...this._designerCanvas.rootDesignItem.children()], designItemsAssignmentList);
76
- }
77
- async parseHTML(html) {
78
- const parserService = this.serviceContainer.htmlParserService;
79
- if (!html) {
80
- this.instanceServiceContainer.undoService.clear();
81
- DomHelper.removeAllChildnodes(this._designerCanvas.overlayLayer);
82
- this._designerCanvas.rootDesignItem.clearChildren();
83
- }
84
- else {
85
- const designItems = await parserService.parse(html, this.serviceContainer, this.instanceServiceContainer);
86
- this._designerCanvas.setDesignItems(designItems);
87
- }
88
- }
89
- static wrapInDesigner(elements, serviceContainer) {
90
- const designerCanvas = new DesignerCanvas();
91
- designerCanvas.initialize(serviceContainer);
92
- const parser = designerCanvas.serviceContainer.getLastServiceWhere('htmlParserService', x => x.constructor == DefaultHtmlParserService);
93
- designerCanvas.addDesignItems(parser.createDesignItems(elements, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer));
94
- return designerCanvas;
95
- }
96
- }
97
- DesignerView.style = css `
19
+ _zoomInput;
20
+ static style = css `
98
21
  :host {
99
22
  display: block;
100
23
  box-sizing: border-box;
@@ -153,7 +76,7 @@ DesignerView.style = css `
153
76
  .snap-guide {
154
77
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYVJREFUeNqkU7tKA1EQnbs3CnlVqbQNARMjFilS+AnZQhIbW0ER/AA/wlYbhXR2wUKx0iKNYGMKDViEdEIgieBujGvCPpyz7sK6iWLIwJk798zsuXsfIxzHoXksAqcoij+vMbYq7MoszGxaEB3wtODlH3i5E5uojck210RCgq7SJie4MC0TsdO1cim/lMmkwHdarZWni+t16/1jz/FElJBAGc5imLzyakXNG0IuVo+OnwHE4JCzgisG7BJu/I3CQjyRuq1dvWi6vg8gBofcOHgGAZO+AFv88/VNDofDEcd3IBCD43ycfhEowY28Sazfnzh1cKMggWsUQvi4waiqKuVyud16/d7JZrOHxWJxKudMuQV3C81mk3RdX0wmk9Tr9UxN06jb7dJgMPjBwQRUAu/AtWg0SpZl7TDSUso2/1UVNWHOMIwJARzWBhcQwMXu1oJb9Ufbtsk0zYktPLrvgD8E/mWeYoNxxlj2xoZ3qI2/YrePQs10PksjTRPozCog5m3nLwEGABrLzseuHT6IAAAAAElFTkSuQmCC);
155
78
  }`;
156
- DesignerView.template = html `
79
+ static template = html `
157
80
  <div id="outer">
158
81
  <div id="lowertoolbar">
159
82
  <input id="zoomInput" type="text" value="100%">
@@ -169,4 +92,117 @@ DesignerView.template = html `
169
92
  <div title="snap to elements" id="alignSnap" class="toolbar-control snap-guide"></div>
170
93
  </div>
171
94
  </div>`;
95
+ _designerCanvas;
96
+ constructor() {
97
+ super();
98
+ const outer = this._getDomElement('outer');
99
+ this._designerCanvas = new DesignerCanvas();
100
+ this._designerCanvas.id = "canvas";
101
+ this._designerCanvas.appendChild(document.createElement("slot"));
102
+ outer.insertAdjacentElement('afterbegin', this._designerCanvas);
103
+ this._zoomInput = this._getDomElement('zoomInput');
104
+ this._zoomInput.onkeydown = (e) => {
105
+ if (e.key == 'Enter')
106
+ this._designerCanvas.zoomFactor = parseFloat(this._zoomInput.value) / 100;
107
+ this._zoomInput.value = Math.round(this._designerCanvas.zoomFactor * 100) + '%';
108
+ };
109
+ this._zoomInput.onblur = () => {
110
+ this._designerCanvas.zoomFactor = parseFloat(this._zoomInput.value) / 100;
111
+ this._zoomInput.value = Math.round(this._designerCanvas.zoomFactor * 100) + '%';
112
+ };
113
+ this._zoomInput.onclick = this._zoomInput.select;
114
+ let zoomIncrease = this._getDomElement('zoomIncrease');
115
+ zoomIncrease.onclick = () => {
116
+ this._designerCanvas.zoomFactor += 0.1;
117
+ this._zoomInput.value = Math.round(this._designerCanvas.zoomFactor * 100) + '%';
118
+ };
119
+ let zoomDecrease = this._getDomElement('zoomDecrease');
120
+ zoomDecrease.onclick = () => {
121
+ this._designerCanvas.zoomFactor -= 0.1;
122
+ this._zoomInput.value = Math.round(this._designerCanvas.zoomFactor * 100) + '%';
123
+ };
124
+ let zoomReset = this._getDomElement('zoomReset');
125
+ zoomReset.onclick = () => {
126
+ this._designerCanvas.zoomFactor = 1;
127
+ this._zoomInput.value = Math.round(this._designerCanvas.zoomFactor * 100) + '%';
128
+ };
129
+ let zoomFit = this._getDomElement('zoomFit');
130
+ zoomFit.onclick = () => {
131
+ this._designerCanvas.zoomFactor = 7.7;
132
+ this._zoomInput.value = Math.round(this._designerCanvas.zoomFactor * 100) + '%';
133
+ };
134
+ this.addEventListener(EventNames.Wheel, event => this._onWheel(event));
135
+ let alignSnap = this._getDomElement('alignSnap');
136
+ alignSnap.onclick = () => { this._designerCanvas.alignOnSnap = !this._designerCanvas.alignOnSnap; alignSnap.style.backgroundColor = this._designerCanvas.alignOnSnap ? 'deepskyblue' : ''; };
137
+ alignSnap.style.backgroundColor = this._designerCanvas.alignOnSnap ? 'deepskyblue' : '';
138
+ let alignGrid = this._getDomElement('alignGrid');
139
+ alignGrid.onclick = () => { this._designerCanvas.alignOnGrid = !this._designerCanvas.alignOnGrid; alignGrid.style.backgroundColor = this._designerCanvas.alignOnGrid ? 'deepskyblue' : ''; };
140
+ alignGrid.style.backgroundColor = this._designerCanvas.alignOnGrid ? 'deepskyblue' : '';
141
+ }
142
+ _onWheel(event) {
143
+ if (event.ctrlKey) {
144
+ event.preventDefault();
145
+ let zf = this._designerCanvas.zoomFactor;
146
+ zf += event.deltaY * -0.001; //deltamode = 0
147
+ if (zf < 0.02)
148
+ zf = 0.02;
149
+ this._designerCanvas.zoomFactor = zf;
150
+ this._zoomInput.value = Math.round(zf * 100) + '%';
151
+ //TODO: we should zoom on the current cursor position, so it stays the center
152
+ }
153
+ }
154
+ get designerWidth() {
155
+ return this._designerCanvas.designerWidth;
156
+ }
157
+ set designerWidth(value) {
158
+ this._designerCanvas.designerWidth = value;
159
+ }
160
+ get designerHeight() {
161
+ return this._designerCanvas.designerHeight;
162
+ }
163
+ set designerHeight(value) {
164
+ this._designerCanvas.designerHeight = value;
165
+ }
166
+ set additionalStyle(value) {
167
+ this._designerCanvas.additionalStyle = value;
168
+ }
169
+ setDesignItems(designItems) {
170
+ this._designerCanvas.setDesignItems(designItems);
171
+ }
172
+ /* --- start IUiCommandHandler --- */
173
+ async executeCommand(command) {
174
+ this._designerCanvas.executeCommand(command);
175
+ }
176
+ canExecuteCommand(command) {
177
+ return this._designerCanvas.canExecuteCommand(command);
178
+ }
179
+ /* --- end IUiCommandHandler --- */
180
+ initialize(serviceContainer) {
181
+ this.serviceContainer = serviceContainer;
182
+ this._designerCanvas.initialize(serviceContainer);
183
+ }
184
+ getHTML(designItemsAssignmentList) {
185
+ this.instanceServiceContainer.selectionService.setSelectedElements(null);
186
+ return DomConverter.ConvertToString([...this._designerCanvas.rootDesignItem.children()], designItemsAssignmentList);
187
+ }
188
+ async parseHTML(html) {
189
+ const parserService = this.serviceContainer.htmlParserService;
190
+ if (!html) {
191
+ this.instanceServiceContainer.undoService.clear();
192
+ DomHelper.removeAllChildnodes(this._designerCanvas.overlayLayer);
193
+ this._designerCanvas.rootDesignItem.clearChildren();
194
+ }
195
+ else {
196
+ const designItems = await parserService.parse(html, this.serviceContainer, this.instanceServiceContainer);
197
+ this._designerCanvas.setDesignItems(designItems);
198
+ }
199
+ }
200
+ static wrapInDesigner(elements, serviceContainer) {
201
+ const designerCanvas = new DesignerCanvas();
202
+ designerCanvas.initialize(serviceContainer);
203
+ const parser = designerCanvas.serviceContainer.getLastServiceWhere('htmlParserService', x => x.constructor == DefaultHtmlParserService);
204
+ designerCanvas.addDesignItems(parser.createDesignItems(elements, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer));
205
+ return designerCanvas;
206
+ }
207
+ }
172
208
  customElements.define('node-projects-designer-view', DesignerView);
@@ -1,6 +1,10 @@
1
1
  export class AbstractExtension {
2
+ overlays = [];
3
+ overlayLayerView;
4
+ extensionManager;
5
+ designerView;
6
+ extendedItem;
2
7
  constructor(extensionManager, designerView, extendedItem) {
3
- this.overlays = [];
4
8
  this.extensionManager = extensionManager;
5
9
  this.designerView = designerView;
6
10
  this.extendedItem = extendedItem;
@@ -1,6 +1,8 @@
1
1
  import { AbstractExtension } from "./AbstractExtension";
2
2
  import { OverlayLayer } from "./OverlayLayer.js";
3
3
  export class AltToEnterContainerExtension extends AbstractExtension {
4
+ _text;
5
+ _rect;
4
6
  constructor(extensionManager, designerView, extendedItem) {
5
7
  super(extensionManager, designerView, extendedItem);
6
8
  }
@@ -1,16 +1,14 @@
1
1
  import { AltToEnterContainerExtension } from './AltToEnterContainerExtension';
2
2
  import { css } from "@node-projects/base-custom-webcomponent";
3
3
  export class AltToEnterContainerExtensionProvider {
4
- constructor() {
5
- this.style = css `
6
- .svg-text-enter-container { stroke: none; fill: black; stroke-width: 1; font-size: 14px; font-weight:800; font-family: monospace; }
7
- .svg-rect-enter-container { stroke: none; fill: #aa00ff2e; }
8
- `;
9
- }
10
4
  shouldExtend(extensionManager, designerView, designItem) {
11
5
  return true;
12
6
  }
13
7
  getExtension(extensionManager, designerView, designItem) {
14
8
  return new AltToEnterContainerExtension(extensionManager, designerView, designItem);
15
9
  }
10
+ style = css `
11
+ .svg-text-enter-container { stroke: none; fill: black; stroke-width: 1; font-size: 14px; font-weight:800; font-family: monospace; }
12
+ .svg-rect-enter-container { stroke: none; fill: #aa00ff2e; }
13
+ `;
16
14
  }
@@ -0,0 +1,10 @@
1
+ import { IDesignItem } from "../../../item/IDesignItem";
2
+ import { IDesignerCanvas } from "../IDesignerCanvas";
3
+ import { AbstractExtension } from "./AbstractExtension";
4
+ import { IExtensionManager } from "./IExtensionManger";
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
+ }