@node-projects/web-component-designer 0.0.29 → 0.0.33

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 (138) hide show
  1. package/assets/images/chromeDevtools/accelerometer-back.svg +69 -0
  2. package/assets/images/chromeDevtools/accelerometer-front.svg +28 -0
  3. package/assets/images/chromeDevtools/accessibility-icon.svg +3 -0
  4. package/assets/images/chromeDevtools/add-icon.svg +3 -0
  5. package/assets/images/chromeDevtools/align-content-center-icon.svg +70 -0
  6. package/assets/images/chromeDevtools/align-content-flex-end-icon.svg +1 -0
  7. package/assets/images/chromeDevtools/align-content-flex-start-icon.svg +66 -0
  8. package/assets/images/chromeDevtools/align-content-space-around-icon.svg +1 -0
  9. package/assets/images/chromeDevtools/align-content-space-between-icon.svg +1 -0
  10. package/assets/images/chromeDevtools/align-content-space-evenly-icon.svg +1 -0
  11. package/assets/images/chromeDevtools/align-content-stretch-icon.svg +53 -0
  12. package/assets/images/chromeDevtools/align-items-baseline-icon.svg +1 -0
  13. package/assets/images/chromeDevtools/align-items-center-icon.svg +1 -0
  14. package/assets/images/chromeDevtools/align-items-end-icon.svg +1 -0
  15. package/assets/images/chromeDevtools/align-items-flex-end-icon.svg +1 -0
  16. package/assets/images/chromeDevtools/align-items-flex-start-icon.svg +57 -0
  17. package/assets/images/chromeDevtools/align-items-start-icon.svg +57 -0
  18. package/assets/images/chromeDevtools/align-items-stretch-icon.svg +1 -0
  19. package/assets/images/chromeDevtools/align-self-center-icon.svg +1 -0
  20. package/assets/images/chromeDevtools/align-self-flex-end-icon.svg +1 -0
  21. package/assets/images/chromeDevtools/align-self-flex-start-icon.svg +57 -0
  22. package/assets/images/chromeDevtools/align-self-stretch-icon.svg +1 -0
  23. package/assets/images/chromeDevtools/baseline-icon.svg +1 -0
  24. package/assets/images/chromeDevtools/checkboxCheckmark.svg +60 -0
  25. package/assets/images/chromeDevtools/chevrons.svg +62 -0
  26. package/assets/images/chromeDevtools/chromeSelect.svg +1 -0
  27. package/assets/images/chromeDevtools/chromeSelectDark.svg +1 -0
  28. package/assets/images/chromeDevtools/close-icon.svg +5 -0
  29. package/assets/images/chromeDevtools/copy_icon.svg +79 -0
  30. package/assets/images/chromeDevtools/dropdown_7x6_icon.svg +1 -0
  31. package/assets/images/chromeDevtools/elements_panel_icon.svg +1 -0
  32. package/assets/images/chromeDevtools/errorWave.svg +74 -0
  33. package/assets/images/chromeDevtools/error_icon.svg +125 -0
  34. package/assets/images/chromeDevtools/feedback_button_icon.svg +3 -0
  35. package/assets/images/chromeDevtools/flex-direction-icon.svg +1 -0
  36. package/assets/images/chromeDevtools/flex-nowrap-icon.svg +5 -0
  37. package/assets/images/chromeDevtools/flex-wrap-icon.svg +8 -0
  38. package/assets/images/chromeDevtools/help_outline.svg +1 -0
  39. package/assets/images/chromeDevtools/ic_checkmark_16x16.svg +3 -0
  40. package/assets/images/chromeDevtools/ic_command_go_to_line.svg +4 -0
  41. package/assets/images/chromeDevtools/ic_command_go_to_symbol.svg +3 -0
  42. package/assets/images/chromeDevtools/ic_command_help.svg +3 -0
  43. package/assets/images/chromeDevtools/ic_command_open_file.svg +3 -0
  44. package/assets/images/chromeDevtools/ic_command_run_command.svg +3 -0
  45. package/assets/images/chromeDevtools/ic_command_run_snippet.svg +3 -0
  46. package/assets/images/chromeDevtools/ic_delete_filter.svg +1 -0
  47. package/assets/images/chromeDevtools/ic_delete_list.svg +1 -0
  48. package/assets/images/chromeDevtools/ic_dimension_single.svg +4 -0
  49. package/assets/images/chromeDevtools/ic_file_default.svg +3 -0
  50. package/assets/images/chromeDevtools/ic_file_document.svg +3 -0
  51. package/assets/images/chromeDevtools/ic_file_font.svg +3 -0
  52. package/assets/images/chromeDevtools/ic_file_image.svg +3 -0
  53. package/assets/images/chromeDevtools/ic_file_script.svg +3 -0
  54. package/assets/images/chromeDevtools/ic_file_snippet.svg +3 -0
  55. package/assets/images/chromeDevtools/ic_file_stylesheet.svg +3 -0
  56. package/assets/images/chromeDevtools/ic_file_webbundle.svg +5 -0
  57. package/assets/images/chromeDevtools/ic_file_webbundle_inner_request.svg +9 -0
  58. package/assets/images/chromeDevtools/ic_folder_default.svg +3 -0
  59. package/assets/images/chromeDevtools/ic_folder_local.svg +3 -0
  60. package/assets/images/chromeDevtools/ic_folder_network.svg +3 -0
  61. package/assets/images/chromeDevtools/ic_info_black_18dp.svg +1 -0
  62. package/assets/images/chromeDevtools/ic_memory_16x16.svg +6 -0
  63. package/assets/images/chromeDevtools/ic_page_next_16x16_icon.svg +1 -0
  64. package/assets/images/chromeDevtools/ic_page_prev_16x16_icon.svg +1 -0
  65. package/assets/images/chromeDevtools/ic_preview_feature.svg +3 -0
  66. package/assets/images/chromeDevtools/ic_redo_16x16_icon.svg +1 -0
  67. package/assets/images/chromeDevtools/ic_request_response.svg +5 -0
  68. package/assets/images/chromeDevtools/ic_response.svg +4 -0
  69. package/assets/images/chromeDevtools/ic_show_node_16x16.svg +4 -0
  70. package/assets/images/chromeDevtools/ic_suggest_color.svg +6 -0
  71. package/assets/images/chromeDevtools/ic_undo_16x16_icon.svg +1 -0
  72. package/assets/images/chromeDevtools/ic_warning_black_18dp.svg +1 -0
  73. package/assets/images/chromeDevtools/issue-cross-icon.svg +70 -0
  74. package/assets/images/chromeDevtools/issue-exclamation-icon.svg +64 -0
  75. package/assets/images/chromeDevtools/issue-questionmark-icon.svg +82 -0
  76. package/assets/images/chromeDevtools/issue-text-icon.svg +56 -0
  77. package/assets/images/chromeDevtools/justify-content-center-icon.svg +1 -0
  78. package/assets/images/chromeDevtools/justify-content-end-icon.svg +71 -0
  79. package/assets/images/chromeDevtools/justify-content-flex-end-icon.svg +71 -0
  80. package/assets/images/chromeDevtools/justify-content-flex-start-icon.svg +1 -0
  81. package/assets/images/chromeDevtools/justify-content-space-around-icon.svg +1 -0
  82. package/assets/images/chromeDevtools/justify-content-space-between-icon.svg +1 -0
  83. package/assets/images/chromeDevtools/justify-content-space-evenly-icon.svg +1 -0
  84. package/assets/images/chromeDevtools/justify-content-start-icon.svg +1 -0
  85. package/assets/images/chromeDevtools/justify-items-center-icon.svg +1 -0
  86. package/assets/images/chromeDevtools/justify-items-end-icon.svg +57 -0
  87. package/assets/images/chromeDevtools/justify-items-start-icon.svg +1 -0
  88. package/assets/images/chromeDevtools/justify-items-stretch-icon.svg +1 -0
  89. package/assets/images/chromeDevtools/largeIcons.svg +1629 -0
  90. package/assets/images/chromeDevtools/lighthouse_logo.svg +158 -0
  91. package/assets/images/chromeDevtools/link_icon.svg +1 -0
  92. package/assets/images/chromeDevtools/mediumIcons.svg +1101 -0
  93. package/assets/images/chromeDevtools/network_conditions_icon.svg +6 -0
  94. package/assets/images/chromeDevtools/network_panel_icon.svg +1 -0
  95. package/assets/images/chromeDevtools/node_search_icon.svg +1 -0
  96. package/assets/images/chromeDevtools/preview_feature_video_thumbnail.svg +92 -0
  97. package/assets/images/chromeDevtools/refresh_12x12_icon.svg +1 -0
  98. package/assets/images/chromeDevtools/resizeDiagonal.svg +1 -0
  99. package/assets/images/chromeDevtools/resizeHorizontal.svg +1 -0
  100. package/assets/images/chromeDevtools/resizeVertical.svg +1 -0
  101. package/assets/images/chromeDevtools/securityIcons.svg +278 -0
  102. package/assets/images/chromeDevtools/settings_14x14_icon.svg +1 -0
  103. package/assets/images/chromeDevtools/smallIcons.svg +1277 -0
  104. package/assets/images/chromeDevtools/sources_panel_icon.svg +1 -0
  105. package/assets/images/chromeDevtools/survey_feedback_icon.svg +1 -0
  106. package/assets/images/chromeDevtools/switcherIcon.svg +57 -0
  107. package/assets/images/chromeDevtools/three_dots_menu_icon.svg +1 -0
  108. package/assets/images/chromeDevtools/trash_bin_icon.svg +1 -0
  109. package/assets/images/chromeDevtools/treeoutlineTriangles.svg +70 -0
  110. package/assets/images/chromeDevtools/warning_icon.svg +83 -0
  111. package/dist/commandHandling/CommandType.d.ts +1 -0
  112. package/dist/commandHandling/CommandType.js +1 -0
  113. package/dist/elements/controls/DesignerTabControl.js +4 -0
  114. package/dist/elements/controls/ImageButtonListSelector copy.d.ts +17 -0
  115. package/dist/elements/controls/ImageButtonListSelector copy.js +82 -0
  116. package/dist/elements/controls/ImageButtonListSelector.d.ts +17 -0
  117. package/dist/elements/controls/ImageButtonListSelector.js +82 -0
  118. package/dist/elements/controls/ThicknessEditor.d.ts +17 -0
  119. package/dist/elements/controls/ThicknessEditor.js +80 -0
  120. package/dist/elements/services/propertiesService/DefaultEditorTypesService.js +10 -0
  121. package/dist/elements/services/propertiesService/propertyEditors/ImageButtonListPropertyEditor copy.d.ts +8 -0
  122. package/dist/elements/services/propertiesService/propertyEditors/ImageButtonListPropertyEditor copy.js +40 -0
  123. package/dist/elements/services/propertiesService/propertyEditors/ImageButtonListPropertyEditor.d.ts +8 -0
  124. package/dist/elements/services/propertiesService/propertyEditors/ImageButtonListPropertyEditor.js +40 -0
  125. package/dist/elements/services/propertiesService/propertyEditors/ThicknessPropertyEditor.d.ts +8 -0
  126. package/dist/elements/services/propertiesService/propertyEditors/ThicknessPropertyEditor.js +14 -0
  127. package/dist/elements/services/propertiesService/services/CssPropertiesService.d.ts +3 -2
  128. package/dist/elements/services/propertiesService/services/CssPropertiesService.js +58 -49
  129. package/dist/elements/widgets/designerView/IDesignerCanvas.d.ts +1 -0
  130. package/dist/elements/widgets/designerView/designerCanvas.d.ts +1 -1
  131. package/dist/elements/widgets/designerView/designerCanvas.js +24 -15
  132. package/dist/elements/widgets/designerView/designerView.d.ts +1 -0
  133. package/dist/elements/widgets/designerView/designerView.js +40 -5
  134. package/dist/elements/widgets/designerView/tools/RectangleSelectorTool.js +6 -6
  135. package/dist/elements/widgets/propertyGrid/PropertyGrid.js +14 -0
  136. package/dist/elements/widgets/propertyGrid/PropertyGridPropertyList.js +2 -2
  137. package/dist/interfaces/IDesignerMousePoint.d.ts +2 -0
  138. package/package.json +1 -1
@@ -0,0 +1,40 @@
1
+ import { BasePropertyEditor } from './BasePropertyEditor';
2
+ import { ImageButtonListSelector } from "../../../controls/ImageButtonListSelector.js";
3
+ import { PropertiesHelper } from "../services/PropertiesHelper.js";
4
+ import { assetsPath } from "../../../../Constants.js";
5
+ export class ImageButtonListPropertyEditor extends BasePropertyEditor {
6
+ constructor(property) {
7
+ super(property);
8
+ const selector = new ImageButtonListSelector();
9
+ selector.property = property.name;
10
+ selector.unsetValue = property.defaultValue;
11
+ const propName = PropertiesHelper.camelToDashCase(property.name);
12
+ if (property.type == 'enum') {
13
+ for (let v of property.enumValues) {
14
+ let button = document.createElement("button");
15
+ button.dataset.value = v[1];
16
+ let img = document.createElement("img");
17
+ img.title = v[1];
18
+ img.src = assetsPath + 'images/chromeDevtools/' + propName + '-' + v[1] + '-icon.svg';
19
+ button.appendChild(img);
20
+ selector.appendChild(button);
21
+ }
22
+ }
23
+ else {
24
+ for (let v of property.values) {
25
+ let button = document.createElement("button");
26
+ button.dataset.value = v;
27
+ let img = document.createElement("img");
28
+ img.title = v;
29
+ img.src = assetsPath + 'images/chromeDevtools/' + propName + '-' + v + '-icon.svg';
30
+ button.appendChild(img);
31
+ selector.appendChild(button);
32
+ }
33
+ }
34
+ selector.valueChanged.on((e) => this._valueChanged(e.newValue));
35
+ this.element = selector;
36
+ }
37
+ refreshValue(valueType, value) {
38
+ this.element.value = value;
39
+ }
40
+ }
@@ -0,0 +1,8 @@
1
+ import { IProperty } from "../IProperty";
2
+ import { BasePropertyEditor } from './BasePropertyEditor';
3
+ import { ValueType } from "../ValueType";
4
+ import { ThicknessEditor } from '../../../controls/ThicknessEditor';
5
+ export declare class ThicknessPropertyEditor extends BasePropertyEditor<ThicknessEditor> {
6
+ constructor(property: IProperty);
7
+ refreshValue(valueType: ValueType, value: any): void;
8
+ }
@@ -0,0 +1,14 @@
1
+ import { BasePropertyEditor } from './BasePropertyEditor';
2
+ import { ThicknessEditor } from '../../../controls/ThicknessEditor';
3
+ export class ThicknessPropertyEditor extends BasePropertyEditor {
4
+ constructor(property) {
5
+ super(property);
6
+ const selector = new ThicknessEditor();
7
+ selector.property = property.name;
8
+ selector.valueChanged.on((e) => this._valueChanged(e.newValue));
9
+ this.element = selector;
10
+ }
11
+ refreshValue(valueType, value) {
12
+ this.element.value = value;
13
+ }
14
+ }
@@ -6,8 +6,9 @@ export declare class CssPropertiesService implements IPropertiesService {
6
6
  private styles;
7
7
  private alignment;
8
8
  private grid;
9
- name: 'alignment' | 'styles' | 'grid';
10
- constructor(name: 'alignment' | 'styles' | 'grid');
9
+ private flex;
10
+ name: 'set-styles' | 'alignment' | 'styles' | 'grid' | 'flex';
11
+ constructor(name: 'set-styles' | 'alignment' | 'styles' | 'grid' | 'flex');
11
12
  isHandledElement(designItem: IDesignItem): boolean;
12
13
  getProperty(designItem: IDesignItem, name: string): IProperty;
13
14
  getProperties(designItem: IDesignItem): IProperty[];
@@ -86,59 +86,26 @@ export class CssPropertiesService {
86
86
  //@ts-ignore
87
87
  this.alignment = [
88
88
  {
89
- name: "position",
90
- type: "list",
91
- values: ["static", "relative", "absolute"],
92
- service: this
93
- }, {
94
89
  name: "display",
95
90
  type: "list",
96
91
  values: ["block", "inline-block", "flex", "contents", "grid", "inherit", "initial", "none"],
97
92
  service: this
98
93
  }, {
99
- name: "flex-direction",
100
- type: "list",
101
- values: ["row", "row-reverse", "column", "column-reverse"],
102
- service: this
103
- }, {
104
- name: "flex-wrap",
105
- type: "list",
106
- values: ["nowrap", "wrap", "warp-reverse"],
107
- service: this
108
- }, {
109
- name: "justify-self",
110
- type: "list",
111
- values: ["flex-start", "center", "flex-end", "space-between", "space-around"],
112
- service: this
113
- }, {
114
- name: "justify-items",
115
- type: "list",
116
- values: ["flex-start", "center", "flex-end", "space-between", "space-around"],
117
- service: this
118
- }, {
119
- name: "justify-content",
120
- type: "list",
121
- values: ["flex-start", "center", "flex-end", "space-between", "space-around"],
122
- service: this
123
- }, {
124
- name: "align-self",
94
+ name: "position",
125
95
  type: "list",
126
- values: ["flex-start", "center", "flex-end", "space-between", "space-around"],
96
+ values: ["static", "relative", "absolute"],
127
97
  service: this
128
98
  }, {
129
- name: "align-items",
130
- type: "list",
131
- values: ["flex-start", "center", "flex-end", "space-between", "space-around"],
99
+ name: "inset",
100
+ type: "thickness",
132
101
  service: this
133
102
  }, {
134
- name: "align-content",
135
- type: "list",
136
- values: ["flex-start", "center", "flex-end", "space-between", "space-around"],
103
+ name: "margin",
104
+ type: "thickness",
137
105
  service: this
138
106
  }, {
139
- name: "flex",
140
- type: "string",
141
- default: "0 1 auto",
107
+ name: "padding",
108
+ type: "thickness",
142
109
  service: this
143
110
  }
144
111
  ];
@@ -165,25 +132,59 @@ export class CssPropertiesService {
165
132
  name: "row-gap",
166
133
  type: "css-length",
167
134
  service: this
135
+ }, {
136
+ name: "align-content",
137
+ type: "img-list",
138
+ values: ["center", "space-between", "space-around", "space-evenly", "stretch"],
139
+ service: this
168
140
  }, {
169
141
  name: "justify-content",
170
- type: "list",
171
- values: ["space-evenly", "space-around", "space-between", "center", "start", "end"],
142
+ type: "img-list",
143
+ values: ["center", "start", "end", "space-between", "space-around", "space-evenly"],
172
144
  service: this
173
145
  }, {
174
- name: "align-content",
175
- type: "list",
176
- values: ["space-evenly", "space-around", "space-between", "center", "start", "end"],
146
+ name: "align-items",
147
+ type: "img-list",
148
+ values: ["center", "start", "end", "stretch", "baseline"],
177
149
  service: this
178
150
  }, {
179
151
  name: "justify-items",
152
+ type: "img-list",
153
+ values: ["center", "start", "end", "stretch"],
154
+ service: this
155
+ }
156
+ ];
157
+ //@ts-ignore
158
+ this.flex = [
159
+ {
160
+ name: "display",
180
161
  type: "list",
181
- values: ["flex-start", "center", "flex-end", "space-between", "space-around"],
162
+ values: ["block", "inline-block", "flex", "contents", "grid", "inherit", "initial", "none"],
163
+ service: this
164
+ }, {
165
+ name: "flex-direction",
166
+ type: "img-list",
167
+ values: ["row", "column"],
168
+ service: this
169
+ }, {
170
+ name: "flex-wrap",
171
+ type: "img-list",
172
+ values: ["nowrap", "wrap"],
173
+ service: this
174
+ }, {
175
+ name: "align-content",
176
+ type: "img-list",
177
+ values: ["center", "flex-start", "flex-end", "space-between", "space-around", "stretch"],
178
+ service: this
179
+ }, {
180
+ name: "justify-content",
181
+ type: "img-list",
182
+ values: ["center", "flex-start", "flex-end", "space-between", "space-around", "space-evenly"],
182
183
  service: this
183
184
  }, {
184
185
  name: "align-items",
185
- type: "list",
186
- values: ["flex-start", "center", "flex-end", "space-between", "space-around"],
186
+ type: "img-list",
187
+ values: ["center", "flex-start", "flex-end", "stretch", "baseline"],
187
188
  service: this
188
189
  }
189
190
  ];
@@ -193,9 +194,17 @@ export class CssPropertiesService {
193
194
  return true;
194
195
  }
195
196
  getProperty(designItem, name) {
197
+ if (this.name == 'set-styles') {
198
+ return { name: name, type: 'string', service: this };
199
+ }
196
200
  return this[this.name][name];
197
201
  }
198
202
  getProperties(designItem) {
203
+ if (this.name == 'set-styles') {
204
+ if (!designItem)
205
+ return [];
206
+ return Array.from(designItem.styles.keys(), x => ({ name: x, type: 'string', service: this }));
207
+ }
199
208
  return this[this.name];
200
209
  }
201
210
  setValue(designItems, property, value) {
@@ -19,6 +19,7 @@ export interface IDesignerCanvas extends IPlacementView, IUiCommandHandler {
19
19
  readonly shadowRoot: ShadowRoot;
20
20
  readonly alignOnGrid: boolean;
21
21
  readonly alignOnSnap: boolean;
22
+ zoomFactor: number;
22
23
  eatEvents: Element;
23
24
  initialize(serviceContainer: ServiceContainer): any;
24
25
  getDesignerMousepoint(event: MouseEvent, target: Element, startPoint?: IDesignerMousePoint): IDesignerMousePoint;
@@ -49,6 +49,7 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
49
49
  set additionalStyle(value: CSSStyleSheet);
50
50
  executeCommand(command: IUiCommand): Promise<void>;
51
51
  canExecuteCommand(command: IUiCommand): boolean;
52
+ handleSelectAll(): void;
52
53
  handleCopyCommand(): void;
53
54
  handlePasteCommand(): Promise<void>;
54
55
  handleDeleteCommand(): void;
@@ -63,7 +64,6 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
63
64
  private _onDragLeave;
64
65
  private _onDragOver;
65
66
  private _onDrop;
66
- private _onWheel;
67
67
  private _onContextMenu;
68
68
  showDesignItemContextMenu(designItem: IDesignItem, event: MouseEvent): ContextMenuHelper;
69
69
  private _onDblClick;
@@ -134,6 +134,9 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
134
134
  case CommandType.paste:
135
135
  this.handlePasteCommand();
136
136
  break;
137
+ case CommandType.selectAll:
138
+ this.handleSelectAll();
139
+ break;
137
140
  }
138
141
  }
139
142
  canExecuteCommand(command) {
@@ -149,6 +152,9 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
149
152
  return true;
150
153
  }
151
154
  /* --- end IUiCommandHandler --- */
155
+ handleSelectAll() {
156
+ this.instanceServiceContainer.selectionService.setSelectedElements(Array.from(this.rootDesignItem.children()));
157
+ }
152
158
  handleCopyCommand() {
153
159
  const copyText = DomConverter.ConvertToString(this.instanceServiceContainer.selectionService.selectedElements, null);
154
160
  navigator.clipboard.writeText(copyText);
@@ -199,8 +205,12 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
199
205
  this.snapLines = new Snaplines(this.overlayLayer);
200
206
  this.snapLines.initialize(this.rootDesignItem);
201
207
  if (this.children) {
208
+ let children = this.children;
209
+ if (this.children.length == 1 && this.children[0] instanceof HTMLSlotElement) {
210
+ children = this.children[0].assignedElements();
211
+ }
202
212
  const parser = this.serviceContainer.getLastServiceWhere('htmlParserService', x => x.constructor == DefaultHtmlParserService);
203
- this.addDesignItems(parser.createDesignItems(this.children, this.serviceContainer, this.instanceServiceContainer));
213
+ this.addDesignItems(parser.createDesignItems(children, this.serviceContainer, this.instanceServiceContainer));
204
214
  }
205
215
  }
206
216
  elementFromPoint(x, y) {
@@ -220,7 +230,6 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
220
230
  this._canvas.addEventListener(EventNames.KeyDown, this._onKeyDownBound, true);
221
231
  this._canvas.addEventListener(EventNames.KeyUp, this._onKeyUpBound, true);
222
232
  this._canvas.addEventListener(EventNames.DblClick, this._onDblClickBound, true);
223
- this.addEventListener(EventNames.Wheel, event => this._onWheel(event));
224
233
  }
225
234
  }
226
235
  zoomFactorChanged() {
@@ -296,23 +305,13 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
296
305
  let grp = di.openGroup("Insert");
297
306
  di.setStyle('position', 'absolute');
298
307
  const targetRect = event.target.getBoundingClientRect();
299
- di.setStyle('top', event.offsetY + targetRect.top - this.containerBoundingRect.y + 'px');
300
- di.setStyle('left', event.offsetX + targetRect.left - this.containerBoundingRect.x + 'px');
308
+ di.setStyle('top', ((event.offsetY - (this.containerBoundingRect.y * this._zoomFactor)) / this._zoomFactor + targetRect.top) + 'px');
309
+ di.setStyle('left', ((event.offsetX - (this.containerBoundingRect.x * this._zoomFactor)) / this._zoomFactor + targetRect.left) + 'px');
301
310
  this.instanceServiceContainer.undoService.execute(new InsertAction(this.rootDesignItem, this.rootDesignItem.childCount, di));
302
311
  grp.commit();
303
312
  requestAnimationFrame(() => this.instanceServiceContainer.selectionService.setSelectedElements([di]));
304
313
  }
305
314
  }
306
- _onWheel(event) {
307
- if (event.ctrlKey) {
308
- event.preventDefault();
309
- this._zoomFactor += event.deltaY * -0.001; //deltamode = 0
310
- if (this._zoomFactor < 0.1)
311
- this._zoomFactor = 0.1;
312
- this.zoomFactorChanged();
313
- //TODO: we should zoom on the current cursor position, so it stays the center
314
- }
315
- }
316
315
  _onContextMenu(event) {
317
316
  event.preventDefault();
318
317
  const designItem = DesignItem.GetOrCreateDesignItem(event.target, this.serviceContainer, this.instanceServiceContainer);
@@ -355,6 +354,14 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
355
354
  this.executeCommand({ type: CommandType.redo });
356
355
  else if ((event.ctrlKey || event.metaKey) && event.key === 'y')
357
356
  this.executeCommand({ type: CommandType.redo });
357
+ else if ((event.ctrlKey || event.metaKey) && event.key === 'a')
358
+ this.executeCommand({ type: CommandType.selectAll });
359
+ else if ((event.ctrlKey || event.metaKey) && event.key === 'c')
360
+ this.executeCommand({ type: CommandType.copy });
361
+ else if ((event.ctrlKey || event.metaKey) && event.key === 'v')
362
+ this.executeCommand({ type: CommandType.paste });
363
+ else if ((event.ctrlKey || event.metaKey) && event.key === 'x')
364
+ this.executeCommand({ type: CommandType.cut });
358
365
  else {
359
366
  let primarySelection = this.instanceServiceContainer.selectionService.primarySelection;
360
367
  if (!primarySelection) {
@@ -407,7 +414,9 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
407
414
  y: (event.y - this.containerBoundingRect.y) / this._zoomFactor,
408
415
  offsetInControlX: (startPoint ? startPoint.offsetInControlX : event.x - targetRect.x),
409
416
  offsetInControlY: (startPoint ? startPoint.offsetInControlY : event.y - targetRect.y),
410
- zoom: this._zoomFactor
417
+ zoom: this._zoomFactor,
418
+ normalizedX: ((event.offsetX - (this.containerBoundingRect.x * this._zoomFactor)) / this._zoomFactor + targetRect.left),
419
+ normalizedY: ((event.offsetY - (this.containerBoundingRect.y * this._zoomFactor)) / this._zoomFactor + targetRect.top)
411
420
  };
412
421
  }
413
422
  //todo remove, is in base custom webcomp domhelper
@@ -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,24 +2,47 @@ 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
7
  constructor() {
7
8
  super();
8
9
  const outer = this._getDomElement('outer');
9
10
  this._designerCanvas = new DesignerCanvas();
10
11
  this._designerCanvas.id = "canvas";
12
+ this._designerCanvas.appendChild(document.createElement("slot"));
11
13
  outer.insertAdjacentElement('afterbegin', this._designerCanvas);
12
14
  this._zoomInput = this._getDomElement('zoomInput');
13
- this._zoomInput.onchange = () => { this._designerCanvas.zoomFactor = parseFloat(this._zoomInput.value) / 100; };
15
+ this._zoomInput.onkeydown = (e) => {
16
+ if (e.key == 'Enter')
17
+ this._designerCanvas.zoomFactor = parseFloat(this._zoomInput.value) / 100;
18
+ this._zoomInput.value = Math.round(this._designerCanvas.zoomFactor * 100) + '%';
19
+ };
20
+ this._zoomInput.onblur = () => {
21
+ this._designerCanvas.zoomFactor = parseFloat(this._zoomInput.value) / 100;
22
+ this._zoomInput.value = Math.round(this._designerCanvas.zoomFactor * 100) + '%';
23
+ };
14
24
  this._zoomInput.onclick = this._zoomInput.select;
15
25
  let zoomIncrease = this._getDomElement('zoomIncrease');
16
- zoomIncrease.onclick = () => { this._designerCanvas.zoomFactor += 0.1; };
26
+ zoomIncrease.onclick = () => {
27
+ this._designerCanvas.zoomFactor += 0.1;
28
+ this._zoomInput.value = Math.round(this._designerCanvas.zoomFactor * 100) + '%';
29
+ };
17
30
  let zoomDecrease = this._getDomElement('zoomDecrease');
18
- zoomDecrease.onclick = () => { this._designerCanvas.zoomFactor -= 0.1; };
31
+ zoomDecrease.onclick = () => {
32
+ this._designerCanvas.zoomFactor -= 0.1;
33
+ this._zoomInput.value = Math.round(this._designerCanvas.zoomFactor * 100) + '%';
34
+ };
19
35
  let zoomReset = this._getDomElement('zoomReset');
20
- zoomReset.onclick = () => { this._designerCanvas.zoomFactor = 1; };
36
+ zoomReset.onclick = () => {
37
+ this._designerCanvas.zoomFactor = 1;
38
+ this._zoomInput.value = Math.round(this._designerCanvas.zoomFactor * 100) + '%';
39
+ };
21
40
  let zoomFit = this._getDomElement('zoomFit');
22
- zoomFit.onclick = () => { this._designerCanvas.zoomFactor = 7.7; };
41
+ zoomFit.onclick = () => {
42
+ this._designerCanvas.zoomFactor = 7.7;
43
+ this._zoomInput.value = Math.round(this._designerCanvas.zoomFactor * 100) + '%';
44
+ };
45
+ this.addEventListener(EventNames.Wheel, event => this._onWheel(event));
23
46
  let alignSnap = this._getDomElement('alignSnap');
24
47
  alignSnap.onclick = () => { this._designerCanvas.alignOnSnap = !this._designerCanvas.alignOnSnap; alignSnap.style.backgroundColor = this._designerCanvas.alignOnSnap ? 'deepskyblue' : ''; };
25
48
  alignSnap.style.backgroundColor = this._designerCanvas.alignOnSnap ? 'deepskyblue' : '';
@@ -39,6 +62,18 @@ export class DesignerView extends BaseCustomWebComponentConstructorAppend {
39
62
  set instanceServiceContainer(value) {
40
63
  this._designerCanvas.instanceServiceContainer = value;
41
64
  }
65
+ _onWheel(event) {
66
+ if (event.ctrlKey) {
67
+ event.preventDefault();
68
+ let zf = this._designerCanvas.zoomFactor;
69
+ zf += event.deltaY * -0.001; //deltamode = 0
70
+ if (zf < 0.02)
71
+ zf = 0.02;
72
+ this._designerCanvas.zoomFactor = zf;
73
+ this._zoomInput.value = Math.round(zf * 100) + '%';
74
+ //TODO: we should zoom on the current cursor position, so it stays the center
75
+ }
76
+ }
42
77
  get designerWidth() {
43
78
  return this._designerCanvas.designerWidth;
44
79
  }
@@ -16,8 +16,8 @@ export class RectangleSelectorTool {
16
16
  if (!this._rect)
17
17
  this._rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
18
18
  this._rect.setAttribute('class', 'svg-selector');
19
- this._rect.setAttribute('x', this._initialPoint.x);
20
- this._rect.setAttribute('y', this._initialPoint.y);
19
+ this._rect.setAttribute('x', this._initialPoint.normalizedX);
20
+ this._rect.setAttribute('y', this._initialPoint.normalizedY);
21
21
  this._rect.setAttribute('width', 0);
22
22
  this._rect.setAttribute('height', 0);
23
23
  designerCanvas.overlayLayer.addOverlay(this._rect, OverlayLayer.Foregorund);
@@ -27,19 +27,19 @@ export class RectangleSelectorTool {
27
27
  let w = currentPoint.x - this._initialPoint.x;
28
28
  let h = currentPoint.y - this._initialPoint.y;
29
29
  if (w >= 0) {
30
- this._rect.setAttribute('x', this._initialPoint.x);
30
+ this._rect.setAttribute('x', this._initialPoint.normalizedX);
31
31
  this._rect.setAttribute('width', w);
32
32
  }
33
33
  else {
34
- this._rect.setAttribute('x', currentPoint.x);
34
+ this._rect.setAttribute('x', currentPoint.normalizedX);
35
35
  this._rect.setAttribute('width', (-1 * w));
36
36
  }
37
37
  if (h >= 0) {
38
- this._rect.setAttribute('y', this._initialPoint.y);
38
+ this._rect.setAttribute('y', this._initialPoint.normalizedY);
39
39
  this._rect.setAttribute('height', h);
40
40
  }
41
41
  else {
42
- this._rect.setAttribute('y', currentPoint.y);
42
+ this._rect.setAttribute('y', currentPoint.normalizedY);
43
43
  this._rect.setAttribute('height', (-1 * h));
44
44
  }
45
45
  }
@@ -40,6 +40,12 @@ export class PropertyGrid extends BaseCustomWebComponentLazyAppend {
40
40
  this._designerTabControl.appendChild(attributeEditorAttributeList);
41
41
  this._propertyGridPropertyLists.push(attributeEditorAttributeList);
42
42
  attributeEditorAttributeList = new PropertyGridPropertyList(value);
43
+ attributeEditorAttributeList.setPropertiesService(new CssPropertiesService("set-styles"));
44
+ attributeEditorAttributeList.createElements(null);
45
+ attributeEditorAttributeList.title = "set-styles";
46
+ this._designerTabControl.appendChild(attributeEditorAttributeList);
47
+ this._propertyGridPropertyLists.push(attributeEditorAttributeList);
48
+ attributeEditorAttributeList = new PropertyGridPropertyList(value);
43
49
  attributeEditorAttributeList.setPropertiesService(new CssPropertiesService("styles"));
44
50
  attributeEditorAttributeList.createElements(null);
45
51
  attributeEditorAttributeList.title = "styles";
@@ -57,6 +63,12 @@ export class PropertyGrid extends BaseCustomWebComponentLazyAppend {
57
63
  attributeEditorAttributeList.title = "grid";
58
64
  this._designerTabControl.appendChild(attributeEditorAttributeList);
59
65
  this._propertyGridPropertyLists.push(attributeEditorAttributeList);
66
+ attributeEditorAttributeList = new PropertyGridPropertyList(value);
67
+ attributeEditorAttributeList.setPropertiesService(new CssPropertiesService("flex"));
68
+ attributeEditorAttributeList.createElements(null);
69
+ attributeEditorAttributeList.title = "flex";
70
+ this._designerTabControl.appendChild(attributeEditorAttributeList);
71
+ this._propertyGridPropertyLists.push(attributeEditorAttributeList);
60
72
  this._designerTabControl.selectedIndex = 0;
61
73
  }
62
74
  get serviceContainer() {
@@ -72,6 +84,7 @@ export class PropertyGrid extends BaseCustomWebComponentLazyAppend {
72
84
  this._propertyGridPropertyLists[0].setPropertiesService(propService);
73
85
  this._propertyGridPropertyLists[0].createElements(this.selectedItems[0]);
74
86
  this._propertyGridPropertyLists[1].createElements(this.selectedItems[0]);
87
+ this._propertyGridPropertyLists[3].createElements(this.selectedItems[0]);
75
88
  }
76
89
  for (const a of this._propertyGridPropertyLists) {
77
90
  a.designItemsChanged(items);
@@ -107,6 +120,7 @@ PropertyGrid.style = css `
107
120
  :host {
108
121
  display: block;
109
122
  height: 100%;
123
+ user-select: none;
110
124
  }
111
125
  iron-pages {
112
126
  overflow: hidden;
@@ -21,9 +21,9 @@ export class PropertyGridPropertyList extends BaseCustomWebComponentLazyAppend {
21
21
  .content-wrapper {
22
22
  padding: .5em;
23
23
  display: grid;
24
- grid-template-columns: 11px auto 1fr;
24
+ grid-template-columns: 11px auto minmax(80px, 1fr);
25
25
  align-items: center;
26
- grid-auto-rows: 24px;
26
+ grid-auto-rows: minmax(24px, auto);
27
27
  align-items: center;
28
28
  }
29
29
  label, input, select {
@@ -6,4 +6,6 @@ export interface IDesignerMousePoint {
6
6
  offsetInControlX: number;
7
7
  offsetInControlY: number;
8
8
  zoom?: number;
9
+ normalizedX?: number;
10
+ normalizedY?: number;
9
11
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "description": "A UI designer for Polymer apps",
3
3
  "name": "@node-projects/web-component-designer",
4
- "version": "0.0.29",
4
+ "version": "0.0.33",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "",