@node-projects/web-component-designer 0.1.104 → 0.1.106

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 (103) hide show
  1. package/dist/elements/helper/Helper.d.ts +1 -0
  2. package/dist/elements/helper/Helper.js +13 -0
  3. package/dist/elements/item/DesignItem.d.ts +0 -5
  4. package/dist/elements/item/DesignItem.js +2 -3
  5. package/dist/elements/item/IDesignItem.d.ts +0 -5
  6. package/dist/elements/services/DefaultServiceBootstrap.js +18 -18
  7. package/dist/elements/services/dragDropService/DragDropService.js +1 -1
  8. package/dist/elements/services/selectionService/ISelectionChangedEvent copy.d.ts +6 -0
  9. package/dist/elements/services/selectionService/ISelectionChangedEvent copy.js +1 -0
  10. package/dist/elements/services/selectionService/ISelectionChangedEvent.d.ts +1 -0
  11. package/dist/elements/services/selectionService/ISelectionRefreshEvent.d.ts +5 -0
  12. package/dist/elements/services/selectionService/ISelectionRefreshEvent.js +1 -0
  13. package/dist/elements/services/selectionService/ISelectionService.d.ts +3 -1
  14. package/dist/elements/services/selectionService/SelectionService.d.ts +4 -2
  15. package/dist/elements/services/selectionService/SelectionService.js +10 -4
  16. package/dist/elements/widgets/designerView/extensions/AbstractExtension.d.ts +7 -0
  17. package/dist/elements/widgets/designerView/extensions/AbstractExtension.js +21 -0
  18. package/dist/elements/widgets/designerView/extensions/AbstractToolbarExtension.d.ts +9 -0
  19. package/dist/elements/widgets/designerView/extensions/AbstractToolbarExtension.js +30 -0
  20. package/dist/elements/widgets/designerView/extensions/ConditionExtensionProvider.d.ts +13 -0
  21. package/dist/elements/widgets/designerView/extensions/ConditionExtensionProvider.js +18 -0
  22. package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.d.ts +1 -0
  23. package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.js +7 -16
  24. package/dist/elements/widgets/designerView/extensions/EditTextExtension.d.ts +18 -0
  25. package/dist/elements/widgets/designerView/extensions/EditTextExtension.js +107 -0
  26. package/dist/elements/widgets/designerView/extensions/ExtensionManager.d.ts +10 -3
  27. package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +100 -60
  28. package/dist/elements/widgets/designerView/extensions/ExtensionType.d.ts +5 -1
  29. package/dist/elements/widgets/designerView/extensions/ExtensionType.js +4 -0
  30. package/dist/elements/widgets/designerView/extensions/GridToolbarExtension.d.ts +12 -0
  31. package/dist/elements/widgets/designerView/extensions/GridToolbarExtension.js +58 -0
  32. package/dist/elements/widgets/designerView/extensions/IExtensionManger.d.ts +3 -3
  33. package/dist/elements/widgets/designerView/extensions/TransformOriginExtensionProvider.js +6 -2
  34. package/dist/elements/widgets/designerView/extensions/block/BlockToolbarExtension.d.ts +12 -0
  35. package/dist/elements/widgets/designerView/extensions/block/BlockToolbarExtension.js +35 -0
  36. package/dist/elements/widgets/designerView/extensions/block/BlockToolbarExtensionProvider.d.ts +9 -0
  37. package/dist/elements/widgets/designerView/extensions/block/BlockToolbarExtensionProvider.js +12 -0
  38. package/dist/elements/widgets/designerView/extensions/block/FlexToolbarExtension.d.ts +12 -0
  39. package/dist/elements/widgets/designerView/extensions/block/FlexToolbarExtension.js +34 -0
  40. package/dist/elements/widgets/designerView/extensions/block/FlexToolbarExtensionProvider.d.ts +9 -0
  41. package/dist/elements/widgets/designerView/extensions/block/FlexToolbarExtensionProvider.js +12 -0
  42. package/dist/elements/widgets/designerView/extensions/contextMenu/ChildContextMenu.d.ts +11 -0
  43. package/dist/elements/widgets/designerView/extensions/contextMenu/ChildContextMenu.js +14 -0
  44. package/dist/elements/widgets/designerView/extensions/contextMenu/CopyPasteContextMenu.js +3 -3
  45. package/dist/elements/widgets/designerView/extensions/contextMenu/JumpToElementContextMenu.js +1 -1
  46. package/dist/elements/widgets/designerView/extensions/contextMenu/MultipleItemsSelectedContextMenu.js +1 -1
  47. package/dist/elements/widgets/designerView/extensions/contextMenu/PathContextMenu.js +1 -1
  48. package/dist/elements/widgets/designerView/extensions/contextMenu/RectContextMenu.js +1 -1
  49. package/dist/elements/widgets/designerView/extensions/contextMenu/RotateLeftAndRightContextMenu.js +1 -1
  50. package/dist/elements/widgets/designerView/extensions/contextMenu/SelectAllChildrenContextMenu.js +1 -1
  51. package/dist/elements/widgets/designerView/extensions/contextMenu/ZMoveContextMenu.js +1 -1
  52. package/dist/elements/widgets/designerView/extensions/contextMenu/ZoomToElementContextMenu.js +1 -1
  53. package/dist/elements/widgets/designerView/extensions/flex/FlexToolbarExtension.d.ts +12 -0
  54. package/dist/elements/widgets/designerView/extensions/flex/FlexToolbarExtension.js +35 -0
  55. package/dist/elements/widgets/designerView/extensions/flex/FlexToolbarExtensionProvider.d.ts +9 -0
  56. package/dist/elements/widgets/designerView/extensions/flex/FlexToolbarExtensionProvider.js +12 -0
  57. package/dist/elements/widgets/designerView/extensions/flex/GridToolbarExtension.d.ts +12 -0
  58. package/dist/elements/widgets/designerView/extensions/flex/GridToolbarExtension.js +66 -0
  59. package/dist/elements/widgets/designerView/extensions/flex/GridToolbarExtensionProvider.d.ts +10 -0
  60. package/dist/elements/widgets/designerView/extensions/flex/GridToolbarExtensionProvider.js +17 -0
  61. package/dist/elements/widgets/designerView/extensions/grid/DisplayGridExtension.d.ts +1 -0
  62. package/dist/elements/widgets/designerView/extensions/grid/DisplayGridExtension.js +12 -8
  63. package/dist/elements/widgets/designerView/extensions/grid/GridChildResizeExtension.d.ts +27 -0
  64. package/dist/elements/widgets/designerView/extensions/grid/GridChildResizeExtension.js +259 -0
  65. package/dist/elements/widgets/designerView/extensions/grid/GridChildResizeExtensionProvider.d.ts +10 -0
  66. package/dist/elements/widgets/designerView/extensions/grid/GridChildResizeExtensionProvider.js +16 -0
  67. package/dist/elements/widgets/designerView/extensions/grid/GridChildToolbarExtension.d.ts +12 -0
  68. package/dist/elements/widgets/designerView/extensions/grid/GridChildToolbarExtension.js +66 -0
  69. package/dist/elements/widgets/designerView/extensions/grid/GridChildToolbarExtensionProvider.d.ts +10 -0
  70. package/dist/elements/widgets/designerView/extensions/grid/GridChildToolbarExtensionProvider.js +17 -0
  71. package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtension copy.d.ts +12 -0
  72. package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtension copy.js +66 -0
  73. package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtension.d.ts +12 -0
  74. package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtension.js +67 -0
  75. package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtensionProvider copy.d.ts +10 -0
  76. package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtensionProvider copy.js +17 -0
  77. package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtensionProvider.d.ts +9 -0
  78. package/dist/elements/widgets/designerView/extensions/grid/GridToolbarExtensionProvider.js +12 -0
  79. package/dist/elements/widgets/designerView/extensions/grid/ResizeExtension.d.ts +28 -0
  80. package/dist/elements/widgets/designerView/extensions/grid/ResizeExtension.js +355 -0
  81. package/dist/elements/widgets/designerView/extensions/grid/ResizeExtensionProvider.d.ts +12 -0
  82. package/dist/elements/widgets/designerView/extensions/grid/ResizeExtensionProvider.js +20 -0
  83. package/dist/elements/widgets/designerView/extensions/logic/ConditionExtensionProvider.d.ts +13 -0
  84. package/dist/elements/widgets/designerView/extensions/logic/ConditionExtensionProvider.js +18 -0
  85. package/dist/elements/widgets/designerView/extensions/svg/EllipsisExtension.js +8 -6
  86. package/dist/elements/widgets/designerView/extensions/svg/RectExtension.d.ts +2 -2
  87. package/dist/elements/widgets/designerView/extensions/svg/RectExtension.js +18 -15
  88. package/dist/elements/widgets/designerView/extensions/svg/RectExtensionProvider copy.d.ts +9 -0
  89. package/dist/elements/widgets/designerView/extensions/svg/RectExtensionProvider copy.js +14 -0
  90. package/dist/elements/widgets/designerView/extensions/svg/SvgBaseExtension.d.ts +30 -0
  91. package/dist/elements/widgets/designerView/extensions/svg/SvgBaseExtension.js +181 -0
  92. package/dist/elements/widgets/designerView/extensions/svg/SvgElementExtension.d.ts +26 -0
  93. package/dist/elements/widgets/designerView/extensions/svg/SvgElementExtension.js +144 -0
  94. package/dist/elements/widgets/designerView/extensions/svg/SvgElementExtensionProvider.d.ts +9 -0
  95. package/dist/elements/widgets/designerView/extensions/svg/SvgElementExtensionProvider.js +16 -0
  96. package/dist/elements/widgets/designerView/overlayLayerView.js +4 -1
  97. package/dist/elements/widgets/designerView/tools/DrawElementTool.js +1 -1
  98. package/dist/elements/widgets/designerView/tools/PointerTool.js +9 -9
  99. package/dist/elements/widgets/designerView/tools/RectangleSelectorTool.js +0 -1
  100. package/dist/elements/widgets/propertyGrid/PropertyGridWithHeader.js +1 -0
  101. package/dist/index.d.ts +15 -0
  102. package/dist/index.js +14 -0
  103. package/package.json +1 -1
@@ -1,18 +1,25 @@
1
+ import { DesignItem } from '../../../item/DesignItem.js';
1
2
  import { IDesignItem } from '../../../item/IDesignItem.js';
2
3
  import { IDesignerCanvas } from '../IDesignerCanvas.js';
3
4
  import { ExtensionType } from './ExtensionType.js';
4
5
  import { IExtensionManager } from './IExtensionManger.js';
5
6
  import { IDesignerExtension } from './IDesignerExtension.js';
7
+ import { IDesignerExtensionProvider } from './IDesignerExtensionProvider.js';
6
8
  export declare class ExtensionManager implements IExtensionManager {
7
9
  designerCanvas: IDesignerCanvas;
8
10
  designItemsWithExtentions: Set<IDesignItem>;
9
11
  _timeout: ReturnType<typeof setTimeout>;
12
+ _appliedDesignerExtensions: WeakMap<DesignItem, Map<ExtensionType, IDesignerExtension[]>>;
13
+ _shouldAppliedDesignerExtensions: WeakMap<DesignItem, Map<ExtensionType, IDesignerExtensionProvider[]>>;
14
+ _lastApplyEventPerType: WeakMap<DesignItem, Map<ExtensionType, Event>>;
15
+ _lastPrimarySelectionRefreshItem: WeakRef<IDesignItem>;
10
16
  constructor(designerCanvas: IDesignerCanvas);
11
17
  connected(): void;
12
18
  disconnected(): void;
13
19
  private refreshAllExtensionsTimeout;
14
20
  private _contentChanged;
15
21
  private _selectedElementsChanged;
22
+ private _selectedElementsRefresh;
16
23
  applyExtension(designItem: IDesignItem, extensionType: ExtensionType, event?: Event, recursive?: boolean): IDesignerExtension[];
17
24
  applyExtensions(designItems: IDesignItem[], extensionType: ExtensionType, event?: Event, recursive?: boolean): void;
18
25
  applyExtensionInstance(designItem: IDesignItem, extension: IDesignerExtension): void;
@@ -21,8 +28,8 @@ export declare class ExtensionManager implements IExtensionManager {
21
28
  removeExtensions(designItems: IDesignItem[], recursive: boolean, extensionType?: ExtensionType): void;
22
29
  refreshExtension(designItem: IDesignItem, extensionType?: ExtensionType, event?: Event): void;
23
30
  refreshExtensions(designItems: IDesignItem[], extensionType?: ExtensionType, event?: Event, ignoredExtension?: IDesignerExtension, timeout?: number): void;
24
- refreshAllExtensions(designItems: IDesignItem[], ignoredExtension?: IDesignerExtension): void;
25
- refreshAllAppliedExtentions(): void;
26
- reapplyAllAppliedExtentions(): void;
31
+ refreshAllExtensions(designItems: IDesignItem[], ignoredExtension?: IDesignerExtension, event?: Event): void;
32
+ refreshAllAppliedExtentions(event?: Event): void;
33
+ reapplyAllAppliedExtentions(filterDesignItems?: IDesignItem[]): void;
27
34
  private static getAllChildElements;
28
35
  }
@@ -1,13 +1,26 @@
1
1
  import { DesignItem } from '../../../item/DesignItem.js';
2
2
  import { NodeType } from "../../../item/NodeType.js";
3
3
  import { ExtensionType } from './ExtensionType.js';
4
+ function wmGet(designItem, weakMap) {
5
+ let val = weakMap.get(designItem);
6
+ if (val)
7
+ return val;
8
+ val = new Map();
9
+ weakMap.set(designItem, val);
10
+ return val;
11
+ }
4
12
  export class ExtensionManager {
5
13
  designerCanvas;
6
14
  designItemsWithExtentions = new Set();
7
15
  _timeout;
16
+ _appliedDesignerExtensions = new WeakMap;
17
+ _shouldAppliedDesignerExtensions = new WeakMap;
18
+ _lastApplyEventPerType = new WeakMap;
19
+ _lastPrimarySelectionRefreshItem;
8
20
  constructor(designerCanvas) {
9
21
  this.designerCanvas = designerCanvas;
10
22
  designerCanvas.instanceServiceContainer.selectionService.onSelectionChanged.on(this._selectedElementsChanged.bind(this));
23
+ designerCanvas.instanceServiceContainer.selectionService.onSelectionRefresh.on(this._selectedElementsRefresh.bind(this));
11
24
  designerCanvas.instanceServiceContainer.contentService.onContentChanged.on(this._contentChanged.bind(this));
12
25
  }
13
26
  connected() {
@@ -42,27 +55,35 @@ export class ExtensionManager {
42
55
  });
43
56
  }
44
57
  _selectedElementsChanged(selectionChangedEvent) {
58
+ this._lastPrimarySelectionRefreshItem = null;
45
59
  if (selectionChangedEvent.oldSelectedElements && selectionChangedEvent.oldSelectedElements.length) {
46
60
  if (selectionChangedEvent.oldSelectedElements[0].parent) {
47
61
  const primaryContainer = DesignItem.GetOrCreateDesignItem(selectionChangedEvent.oldSelectedElements[0].parent.element, selectionChangedEvent.oldSelectedElements[0].parent.element, this.designerCanvas.serviceContainer, this.designerCanvas.instanceServiceContainer);
48
62
  this.removeExtension(primaryContainer, ExtensionType.PrimarySelectionContainer);
49
63
  this.removeExtension(primaryContainer, ExtensionType.PrimarySelectionContainerAndCanBeEntered);
50
64
  this.removeExtension(selectionChangedEvent.oldSelectedElements[0], ExtensionType.PrimarySelection);
65
+ this.removeExtension(selectionChangedEvent.oldSelectedElements[0], ExtensionType.PrimarySelectionRefreshed);
51
66
  this.removeExtension(selectionChangedEvent.oldSelectedElements[0], ExtensionType.PrimarySelectionAndCanBeEntered);
52
67
  this.removeExtensions(selectionChangedEvent.oldSelectedElements, false, ExtensionType.Selection);
53
68
  }
54
69
  }
55
70
  if (selectionChangedEvent.selectedElements && selectionChangedEvent.selectedElements.length) {
56
- this.applyExtensions(selectionChangedEvent.selectedElements, ExtensionType.Selection);
57
- this.applyExtension(selectionChangedEvent.selectedElements[0], ExtensionType.PrimarySelection);
71
+ this.applyExtensions(selectionChangedEvent.selectedElements, ExtensionType.Selection, selectionChangedEvent.event);
72
+ this.applyExtension(selectionChangedEvent.selectedElements[0], ExtensionType.PrimarySelection, selectionChangedEvent.event);
58
73
  if (selectionChangedEvent.selectedElements[0].getPlacementService()?.isEnterableContainer(selectionChangedEvent.selectedElements[0]))
59
- this.applyExtension(selectionChangedEvent.selectedElements[0], ExtensionType.PrimarySelectionAndCanBeEntered);
74
+ this.applyExtension(selectionChangedEvent.selectedElements[0], ExtensionType.PrimarySelectionAndCanBeEntered, selectionChangedEvent.event);
60
75
  const primaryContainer = DesignItem.GetOrCreateDesignItem(selectionChangedEvent.selectedElements[0].parent.element, selectionChangedEvent.selectedElements[0].parent.element, this.designerCanvas.serviceContainer, this.designerCanvas.instanceServiceContainer);
61
- this.applyExtension(primaryContainer, ExtensionType.PrimarySelectionContainer);
76
+ this.applyExtension(primaryContainer, ExtensionType.PrimarySelectionContainer, selectionChangedEvent.event);
62
77
  if (primaryContainer.getPlacementService()?.isEnterableContainer(primaryContainer))
63
- this.applyExtension(primaryContainer, ExtensionType.PrimarySelectionContainerAndCanBeEntered);
78
+ this.applyExtension(primaryContainer, ExtensionType.PrimarySelectionContainerAndCanBeEntered, selectionChangedEvent.event);
79
+ }
80
+ }
81
+ _selectedElementsRefresh(selectionChangedEvent) {
82
+ this.refreshAllAppliedExtentions(selectionChangedEvent.event);
83
+ if (selectionChangedEvent.selectedElements && selectionChangedEvent.selectedElements.length && (!this._lastPrimarySelectionRefreshItem || this._lastPrimarySelectionRefreshItem.deref() !== selectionChangedEvent.selectedElements[0])) {
84
+ this.applyExtension(selectionChangedEvent.selectedElements[0], ExtensionType.PrimarySelectionRefreshed, selectionChangedEvent.event);
85
+ this._lastPrimarySelectionRefreshItem = new WeakRef(selectionChangedEvent.selectedElements[0]);
64
86
  }
65
- //this.refreshExtensions(selectionChangedEvent.selectedElements);
66
87
  }
67
88
  applyExtension(designItem, extensionType, event, recursive = false) {
68
89
  if (designItem && designItem.nodeType == NodeType.Element) {
@@ -71,25 +92,29 @@ export class ExtensionManager {
71
92
  if (extProv) {
72
93
  const cache = {};
73
94
  for (let e of extProv) {
74
- let shouldAppE = designItem.shouldAppliedDesignerExtensions.get(extensionType);
95
+ let shouldAppE = wmGet(designItem, this._shouldAppliedDesignerExtensions).get(extensionType);
75
96
  if (!shouldAppE)
76
97
  shouldAppE = [];
77
98
  shouldAppE.push(e);
78
- designItem.shouldAppliedDesignerExtensions.set(extensionType, shouldAppE);
99
+ wmGet(designItem, this._shouldAppliedDesignerExtensions).set(extensionType, shouldAppE);
79
100
  if (e.shouldExtend(this, this.designerCanvas, designItem)) {
80
- let appE = designItem.appliedDesignerExtensions.get(extensionType);
101
+ let appE = wmGet(designItem, this._appliedDesignerExtensions).get(extensionType);
81
102
  if (!appE)
82
103
  appE = [];
83
104
  const ext = e.getExtension(this, this.designerCanvas, designItem);
84
105
  try {
85
106
  ext.extend(cache, event);
86
107
  extensions.push(ext);
108
+ if (event)
109
+ wmGet(designItem, this._lastApplyEventPerType).set(extensionType, event);
110
+ else
111
+ wmGet(designItem, this._lastApplyEventPerType).delete(extensionType);
87
112
  }
88
113
  catch (err) {
89
114
  console.error(err);
90
115
  }
91
116
  appE.push(ext);
92
- designItem.appliedDesignerExtensions.set(extensionType, appE);
117
+ wmGet(designItem, this._appliedDesignerExtensions).set(extensionType, appE);
93
118
  this.designItemsWithExtentions.add(designItem);
94
119
  }
95
120
  }
@@ -111,24 +136,28 @@ export class ExtensionManager {
111
136
  const cache = {};
112
137
  for (let e of extProv) {
113
138
  for (let i of designItems) {
114
- let shouldAppE = i.shouldAppliedDesignerExtensions.get(extensionType);
139
+ let shouldAppE = wmGet(i, this._shouldAppliedDesignerExtensions).get(extensionType);
115
140
  if (!shouldAppE)
116
141
  shouldAppE = [];
117
142
  shouldAppE.push(e);
118
- i.shouldAppliedDesignerExtensions.set(extensionType, shouldAppE);
143
+ wmGet(i, this._shouldAppliedDesignerExtensions).set(extensionType, shouldAppE);
119
144
  if (e.shouldExtend(this, this.designerCanvas, i)) {
120
- let appE = i.appliedDesignerExtensions.get(extensionType);
145
+ let appE = wmGet(i, this._appliedDesignerExtensions).get(extensionType);
121
146
  if (!appE)
122
147
  appE = [];
123
148
  const ext = e.getExtension(this, this.designerCanvas, i);
124
149
  try {
125
150
  ext.extend(cache, event);
151
+ if (event)
152
+ wmGet(i, this._lastApplyEventPerType).set(extensionType, event);
153
+ else
154
+ wmGet(i, this._lastApplyEventPerType).delete(extensionType);
126
155
  }
127
156
  catch (err) {
128
157
  console.error(err);
129
158
  }
130
159
  appE.push(ext);
131
- i.appliedDesignerExtensions.set(extensionType, appE);
160
+ wmGet(i, this._appliedDesignerExtensions).set(extensionType, appE);
132
161
  this.designItemsWithExtentions.add(i);
133
162
  }
134
163
  }
@@ -143,7 +172,7 @@ export class ExtensionManager {
143
172
  this.designerCanvas.overlayLayer.endBatch();
144
173
  }
145
174
  applyExtensionInstance(designItem, extension) {
146
- let appE = designItem.appliedDesignerExtensions.get(ExtensionType.Directly);
175
+ let appE = wmGet(designItem, this._appliedDesignerExtensions).get(ExtensionType.Directly);
147
176
  if (!appE)
148
177
  appE = [];
149
178
  try {
@@ -153,11 +182,11 @@ export class ExtensionManager {
153
182
  console.error(err);
154
183
  }
155
184
  appE.push(extension);
156
- designItem.appliedDesignerExtensions.set(ExtensionType.Directly, appE);
185
+ wmGet(designItem, this._appliedDesignerExtensions).set(ExtensionType.Directly, appE);
157
186
  this.designItemsWithExtentions.add(designItem);
158
187
  }
159
188
  removeExtensionInstance(designItem, extension) {
160
- for (let e of designItem.appliedDesignerExtensions) {
189
+ for (let e of wmGet(designItem, this._appliedDesignerExtensions)) {
161
190
  const idx = e[1].indexOf(extension);
162
191
  if (idx >= 0) {
163
192
  try {
@@ -167,9 +196,11 @@ export class ExtensionManager {
167
196
  console.error(err);
168
197
  }
169
198
  e[1].splice(idx, 1);
170
- if (e[1].length == 0)
171
- designItem.appliedDesignerExtensions.delete(e[0]);
172
- if (!designItem.appliedDesignerExtensions.size)
199
+ if (e[1].length == 0) {
200
+ wmGet(designItem, this._appliedDesignerExtensions).delete(e[0]);
201
+ wmGet(designItem, this._shouldAppliedDesignerExtensions).delete(e[0]);
202
+ }
203
+ if (!wmGet(designItem, this._appliedDesignerExtensions).size)
173
204
  this.designItemsWithExtentions.delete(designItem);
174
205
  }
175
206
  }
@@ -177,25 +208,26 @@ export class ExtensionManager {
177
208
  removeExtension(designItem, extensionType) {
178
209
  if (designItem) {
179
210
  if (extensionType) {
180
- designItem.shouldAppliedDesignerExtensions.delete(extensionType);
181
- let exts = designItem.appliedDesignerExtensions.get(extensionType);
211
+ wmGet(designItem, this._shouldAppliedDesignerExtensions).delete(extensionType);
212
+ let exts = wmGet(designItem, this._appliedDesignerExtensions).get(extensionType);
182
213
  if (exts) {
183
214
  for (let e of exts) {
184
215
  try {
185
216
  e.dispose();
217
+ wmGet(designItem, this._lastApplyEventPerType).delete(extensionType);
186
218
  }
187
219
  catch (err) {
188
220
  console.error(err);
189
221
  }
190
222
  }
191
- designItem.appliedDesignerExtensions.delete(extensionType);
192
- if (!designItem.appliedDesignerExtensions.size)
223
+ wmGet(designItem, this._appliedDesignerExtensions).delete(extensionType);
224
+ if (!wmGet(designItem, this._appliedDesignerExtensions).size)
193
225
  this.designItemsWithExtentions.delete(designItem);
194
226
  }
195
227
  }
196
228
  else {
197
- designItem.shouldAppliedDesignerExtensions.clear();
198
- for (let appE of designItem.appliedDesignerExtensions) {
229
+ wmGet(designItem, this._shouldAppliedDesignerExtensions).clear();
230
+ for (let appE of wmGet(designItem, this._appliedDesignerExtensions)) {
199
231
  for (let e of appE[1]) {
200
232
  try {
201
233
  e.dispose();
@@ -205,7 +237,7 @@ export class ExtensionManager {
205
237
  }
206
238
  }
207
239
  }
208
- designItem.appliedDesignerExtensions.clear();
240
+ wmGet(designItem, this._appliedDesignerExtensions).clear();
209
241
  this.designItemsWithExtentions.delete(designItem);
210
242
  }
211
243
  }
@@ -217,19 +249,20 @@ export class ExtensionManager {
217
249
  if (recursive && i.hasChildren) {
218
250
  this.removeExtensions([...i.children()], true, extensionType);
219
251
  }
220
- i.shouldAppliedDesignerExtensions.delete(extensionType);
221
- let exts = i.appliedDesignerExtensions.get(extensionType);
252
+ wmGet(i, this._shouldAppliedDesignerExtensions).delete(extensionType);
253
+ let exts = wmGet(i, this._appliedDesignerExtensions).get(extensionType);
222
254
  if (exts) {
223
255
  for (let e of exts) {
224
256
  try {
225
257
  e.dispose();
258
+ wmGet(i, this._lastApplyEventPerType).delete(extensionType);
226
259
  }
227
260
  catch (err) {
228
261
  console.error(err);
229
262
  }
230
263
  }
231
- i.appliedDesignerExtensions.delete(extensionType);
232
- if (!i.appliedDesignerExtensions.size)
264
+ wmGet(i, this._appliedDesignerExtensions).delete(extensionType);
265
+ if (!wmGet(i, this._appliedDesignerExtensions).size)
233
266
  this.designItemsWithExtentions.delete(i);
234
267
  }
235
268
  }
@@ -239,8 +272,8 @@ export class ExtensionManager {
239
272
  if (recursive && i.hasChildren) {
240
273
  this.removeExtensions([...i.children()], true, extensionType);
241
274
  }
242
- i.shouldAppliedDesignerExtensions.clear();
243
- for (let appE of i.appliedDesignerExtensions) {
275
+ wmGet(i, this._shouldAppliedDesignerExtensions).clear();
276
+ for (let appE of wmGet(i, this._appliedDesignerExtensions)) {
244
277
  for (let e of appE[1]) {
245
278
  try {
246
279
  e.dispose();
@@ -250,7 +283,7 @@ export class ExtensionManager {
250
283
  }
251
284
  }
252
285
  }
253
- i.appliedDesignerExtensions.clear();
286
+ wmGet(i, this._appliedDesignerExtensions).clear();
254
287
  this.designItemsWithExtentions.delete(i);
255
288
  }
256
289
  }
@@ -263,12 +296,14 @@ export class ExtensionManager {
263
296
  this.removeExtension(designItem, extensionType);
264
297
  }
265
298
  else {
266
- let exts = designItem.appliedDesignerExtensions.get(extensionType);
299
+ let exts = wmGet(designItem, this._appliedDesignerExtensions).get(extensionType);
267
300
  if (exts) {
268
301
  const cache = {};
269
302
  for (let e of exts) {
270
303
  try {
271
304
  e.refresh(cache, event);
305
+ if (event)
306
+ wmGet(designItem, this._lastApplyEventPerType).set(extensionType, event);
272
307
  }
273
308
  catch (err) {
274
309
  console.error(err);
@@ -279,7 +314,7 @@ export class ExtensionManager {
279
314
  }
280
315
  else {
281
316
  const cache = {};
282
- for (let appE of designItem.appliedDesignerExtensions) {
317
+ for (let appE of wmGet(designItem, this._appliedDesignerExtensions)) {
283
318
  for (let e of appE[1]) {
284
319
  try {
285
320
  e.refresh(cache, event);
@@ -303,7 +338,7 @@ export class ExtensionManager {
303
338
  this.removeExtension(i, extensionType);
304
339
  }
305
340
  else {
306
- let exts = i.appliedDesignerExtensions.get(extensionType);
341
+ let exts = wmGet(i, this._appliedDesignerExtensions).get(extensionType);
307
342
  if (exts) {
308
343
  for (let e of exts) {
309
344
  try {
@@ -328,11 +363,13 @@ export class ExtensionManager {
328
363
  else {
329
364
  const cache = {};
330
365
  outer2: for (let i of designItems) {
331
- for (let appE of i.appliedDesignerExtensions) {
366
+ for (let appE of wmGet(i, this._appliedDesignerExtensions)) {
332
367
  for (let e of appE[1]) {
333
368
  try {
334
369
  if (e != ignoredExtension) {
335
370
  e.refresh(cache, event);
371
+ if (event)
372
+ wmGet(i, this._lastApplyEventPerType).set(extensionType, event);
336
373
  if (timeout) {
337
374
  const end = performance.now();
338
375
  if (end - start > timeout) {
@@ -352,39 +389,42 @@ export class ExtensionManager {
352
389
  }
353
390
  this.designerCanvas.overlayLayer.endBatch();
354
391
  }
355
- refreshAllExtensions(designItems, ignoredExtension) {
392
+ refreshAllExtensions(designItems, ignoredExtension, event) {
356
393
  this.designerCanvas.overlayLayer.startBatch();
357
394
  if (designItems) {
358
- this.refreshExtensions(designItems, ExtensionType.Directly, null, ignoredExtension);
359
- this.refreshExtensions(designItems, ExtensionType.Permanent, null, ignoredExtension);
360
- this.refreshExtensions(designItems, ExtensionType.Selection, null, ignoredExtension);
361
- this.refreshExtensions(designItems, ExtensionType.PrimarySelection, null, ignoredExtension);
362
- this.refreshExtensions(designItems, ExtensionType.PrimarySelectionContainer, null, ignoredExtension);
363
- this.refreshExtensions(designItems, ExtensionType.MouseOver, null, ignoredExtension);
364
- this.refreshExtensions(designItems, ExtensionType.OnlyOneItemSelected, null, ignoredExtension);
365
- this.refreshExtensions(designItems, ExtensionType.MultipleItemsSelected, null, ignoredExtension);
366
- this.refreshExtensions(designItems, ExtensionType.ContainerDragOverAndCanBeEntered, null, ignoredExtension);
367
- this.refreshExtensions(designItems, ExtensionType.ContainerDrag, null, ignoredExtension);
368
- this.refreshExtensions(designItems, ExtensionType.Doubleclick, null, ignoredExtension);
369
- this.refreshExtensions(designItems, ExtensionType.Placement, null, ignoredExtension);
370
- this.refreshExtensions(designItems, ExtensionType.PrimarySelectionAndCanBeEntered, null, ignoredExtension);
371
- this.refreshExtensions(designItems, ExtensionType.PrimarySelectionContainerAndCanBeEntered, null, ignoredExtension);
395
+ this.refreshExtensions(designItems, ExtensionType.Directly, event, ignoredExtension);
396
+ this.refreshExtensions(designItems, ExtensionType.Permanent, event, ignoredExtension);
397
+ this.refreshExtensions(designItems, ExtensionType.Selection, event, ignoredExtension);
398
+ this.refreshExtensions(designItems, ExtensionType.PrimarySelection, event, ignoredExtension);
399
+ this.refreshExtensions(designItems, ExtensionType.PrimarySelectionContainer, event, ignoredExtension);
400
+ this.refreshExtensions(designItems, ExtensionType.MouseOver, event, ignoredExtension);
401
+ this.refreshExtensions(designItems, ExtensionType.OnlyOneItemSelected, event, ignoredExtension);
402
+ this.refreshExtensions(designItems, ExtensionType.MultipleItemsSelected, event, ignoredExtension);
403
+ this.refreshExtensions(designItems, ExtensionType.ContainerDragOverAndCanBeEntered, event, ignoredExtension);
404
+ this.refreshExtensions(designItems, ExtensionType.ContainerDrag, event, ignoredExtension);
405
+ this.refreshExtensions(designItems, ExtensionType.Doubleclick, event, ignoredExtension);
406
+ this.refreshExtensions(designItems, ExtensionType.Placement, event, ignoredExtension);
407
+ this.refreshExtensions(designItems, ExtensionType.PrimarySelectionAndCanBeEntered, event, ignoredExtension);
408
+ this.refreshExtensions(designItems, ExtensionType.PrimarySelectionContainerAndCanBeEntered, event, ignoredExtension);
372
409
  }
373
410
  this.designerCanvas.overlayLayer.endBatch();
374
411
  }
375
- refreshAllAppliedExtentions() {
412
+ refreshAllAppliedExtentions(event) {
376
413
  this.designerCanvas.fillCalculationrects();
377
- this.refreshAllExtensions([...this.designItemsWithExtentions]);
414
+ this.refreshAllExtensions([...this.designItemsWithExtentions], null, event);
378
415
  }
379
416
  //TODO: does not work with permanant, when not applied... maybe we need to do in another way
380
417
  //maybe store the "shouldAppliedExtensions??"
381
- reapplyAllAppliedExtentions() {
418
+ reapplyAllAppliedExtentions(filterDesignItems) {
382
419
  this.designerCanvas.overlayLayer.startBatch();
383
420
  for (let d of ExtensionManager.getAllChildElements(this.designerCanvas.rootDesignItem)) {
384
- const keys = [...d.shouldAppliedDesignerExtensions.keys()];
385
- for (let e of keys) {
386
- this.removeExtension(d, e);
387
- this.applyExtension(d, e);
421
+ if (!filterDesignItems || filterDesignItems.includes(d)) {
422
+ const keys = [...wmGet(d, this._shouldAppliedDesignerExtensions).keys()];
423
+ for (let t of keys) {
424
+ const evt = wmGet(d, this._lastApplyEventPerType).get(t);
425
+ this.removeExtension(d, t);
426
+ this.applyExtension(d, t, evt);
427
+ }
388
428
  }
389
429
  }
390
430
  this.designerCanvas.overlayLayer.endBatch();
@@ -27,5 +27,9 @@ export declare enum ExtensionType {
27
27
  * do not display grid extension.
28
28
  */
29
29
  PrimarySelectionAndCanBeEntered = 13,
30
- PrimarySelectionContainerAndCanBeEntered = 14
30
+ PrimarySelectionContainerAndCanBeEntered = 14,
31
+ /**
32
+ * Extension when the Primary Selection is refreshed, means clicked a second time
33
+ */
34
+ PrimarySelectionRefreshed = 15
31
35
  }
@@ -29,4 +29,8 @@ export var ExtensionType;
29
29
  */
30
30
  ExtensionType[ExtensionType["PrimarySelectionAndCanBeEntered"] = 13] = "PrimarySelectionAndCanBeEntered";
31
31
  ExtensionType[ExtensionType["PrimarySelectionContainerAndCanBeEntered"] = 14] = "PrimarySelectionContainerAndCanBeEntered";
32
+ /**
33
+ * Extension when the Primary Selection is refreshed, means clicked a second time
34
+ */
35
+ ExtensionType[ExtensionType["PrimarySelectionRefreshed"] = 15] = "PrimarySelectionRefreshed";
32
36
  })(ExtensionType || (ExtensionType = {}));
@@ -0,0 +1,12 @@
1
+ import { IDesignItem } from '../../../../item/IDesignItem.js';
2
+ import { IDesignerCanvas } from '../../IDesignerCanvas.js';
3
+ import { AbstractExtension } from "../AbstractExtension.js";
4
+ import { IExtensionManager } from '../IExtensionManger.js';
5
+ export declare class GridToolbarExtension extends AbstractExtension {
6
+ private static template;
7
+ private _foreignObject;
8
+ constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
9
+ extend(cache: Record<string | symbol, any>, event: MouseEvent): void;
10
+ refresh(cache: Record<string | symbol, any>, event?: MouseEvent): void;
11
+ dispose(): void;
12
+ }
@@ -0,0 +1,58 @@
1
+ import { html } from "@node-projects/base-custom-webcomponent";
2
+ import { AbstractExtension } from "../AbstractExtension.js";
3
+ import { OverlayLayer } from "../OverlayLayer.js";
4
+ export class GridToolbarExtension extends AbstractExtension {
5
+ static template = html `
6
+ <div style="height: 30px; width: 200px;">
7
+ <span>GRID</span>
8
+ <select id="gridType" style="pointer-events: all; height: 24px; width: 60px; padding: 0;">
9
+ <option>1x1</option>
10
+ <option>1x16</option>
11
+ <option>2x8</option>
12
+ <option>4x4</option>
13
+ <option>8x2</option>
14
+ <option>16x1</option>
15
+ <option>custom</option>
16
+ </select>
17
+ </div>
18
+ `;
19
+ _foreignObject;
20
+ constructor(extensionManager, designerView, extendedItem) {
21
+ super(extensionManager, designerView, extendedItem);
22
+ }
23
+ extend(cache, event) {
24
+ const element = GridToolbarExtension.template.content.cloneNode(true);
25
+ element.querySelectorAll('*').forEach(x => x.onpointerdown = (e) => {
26
+ this.designerCanvas.ignoreEvent(e);
27
+ //this._formatSelection(x.dataset['command'], x.dataset['commandParameter'])
28
+ });
29
+ //element.querySelectorAll('select').forEach(x => x.onpointerdown = (e) => this.designerCanvas.ignoreEvent(e));
30
+ const gridTypeEl = element.querySelector('#gridType');
31
+ gridTypeEl.onchange = () => {
32
+ const parts = gridTypeEl.value.split('x');
33
+ this.extendedItem.updateStyleInSheetOrLocal('grid-template-columns', '1fr '.repeat(parseInt(parts[0])).trim());
34
+ this.extendedItem.updateStyleInSheetOrLocal('grid-template-rows', '1fr '.repeat(parseInt(parts[1])).trim());
35
+ };
36
+ //elements.querySelectorAll('select').forEach(x => x.onchange = () => this._formatSelection(x.dataset['command'], x.value));
37
+ //overlay
38
+ const foreignObject = document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject');
39
+ this._foreignObject = foreignObject;
40
+ foreignObject.classList.add('svg-toolbar');
41
+ foreignObject.setAttribute('width', '1');
42
+ foreignObject.setAttribute('height', '1');
43
+ foreignObject.appendChild(element);
44
+ this.refresh(cache, event);
45
+ this._addOverlay(foreignObject, OverlayLayer.Foreground);
46
+ }
47
+ refresh(cache, event) {
48
+ if (event) {
49
+ const pos = this.designerCanvas.getNormalizedEventCoordinates(event);
50
+ //debugger;
51
+ this._foreignObject.setAttribute('x', '' + (pos.x - 16));
52
+ this._foreignObject.setAttribute('y', '' + (pos.y - 36));
53
+ }
54
+ }
55
+ dispose() {
56
+ this._removeAllOverlays();
57
+ }
58
+ }
@@ -10,9 +10,9 @@ export interface IExtensionManager {
10
10
  removeExtensionInstance(designItem: IDesignItem, extension: IDesignerExtension): any;
11
11
  refreshExtension(designItem: IDesignItem, extensionType?: ExtensionType, event?: Event): any;
12
12
  refreshExtensions(designItems: IDesignItem[], extensionType?: ExtensionType, event?: Event, ignoredExtension?: IDesignerExtension, timeout?: number): any;
13
- refreshAllExtensions(designItems: IDesignItem[], ignoredExtension?: IDesignerExtension): any;
14
- refreshAllAppliedExtentions(): any;
15
- reapplyAllAppliedExtentions(): any;
13
+ refreshAllExtensions(designItems: IDesignItem[], ignoredExtension?: IDesignerExtension, event?: Event): any;
14
+ refreshAllAppliedExtentions(event?: Event): any;
15
+ reapplyAllAppliedExtentions(filterDesignItems?: IDesignItem[]): any;
16
16
  connected(): any;
17
17
  disconnected(): any;
18
18
  }
@@ -11,9 +11,13 @@ export class TransformOriginExtensionProvider {
11
11
  return true;
12
12
  if (designItem.hasStyle('transformOrigin'))
13
13
  return true;
14
- if (getComputedStyle(designItem.element).display != 'inline' && designItem.element.getBoundingClientRect) {
14
+ const cs = getComputedStyle(designItem.element);
15
+ if (cs.display != 'inline' && designItem.element.getBoundingClientRect) {
15
16
  const r = designItem.element.getBoundingClientRect();
16
- if (getComputedStyle(designItem.element).transformOrigin != r.width / 2 + 'px ' + r.height / 2 + 'px')
17
+ const pr = cs.transformOrigin.split(' ');
18
+ const x = parseFloat(pr[0]) - r.width / 2;
19
+ const y = parseFloat(pr[1]) - r.height / 2;
20
+ if (x > 0.5 || x < -0.5 || y > 0.5 || y < -0.5)
17
21
  return true;
18
22
  }
19
23
  }
@@ -0,0 +1,12 @@
1
+ import { IDesignItem } from '../../../../item/IDesignItem.js';
2
+ import { IDesignerCanvas } from '../../IDesignerCanvas.js';
3
+ import { AbstractExtension } from "../AbstractExtension.js";
4
+ import { IExtensionManager } from '../IExtensionManger.js';
5
+ export declare class BlockToolbarExtension extends AbstractExtension {
6
+ private static template;
7
+ private _toolbar;
8
+ constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
9
+ extend(cache: Record<string | symbol, any>, event: MouseEvent): void;
10
+ refresh(cache: Record<string | symbol, any>, event?: MouseEvent): void;
11
+ dispose(): void;
12
+ }
@@ -0,0 +1,35 @@
1
+ import { html } from "@node-projects/base-custom-webcomponent";
2
+ import { AbstractExtension } from "../AbstractExtension.js";
3
+ export class BlockToolbarExtension extends AbstractExtension {
4
+ static template = html `
5
+ <div style="height: 100%; width: 100%;">
6
+ <select id="displayType" style="pointer-events: all; height: 24px; width: 70px; padding: 0; font-weight: 900; text-transform: uppercase; margin-right: 10px;">
7
+ <option selected>block</option>
8
+ <option>flex</option>
9
+ <option>grid</option>
10
+ </select>
11
+ </div>
12
+ `;
13
+ _toolbar;
14
+ constructor(extensionManager, designerView, extendedItem) {
15
+ super(extensionManager, designerView, extendedItem);
16
+ }
17
+ extend(cache, event) {
18
+ this._toolbar = this.createToolbar(BlockToolbarExtension.template, 200, 30);
19
+ const displayTypeEl = this._toolbar.getById('displayType');
20
+ displayTypeEl.onchange = () => {
21
+ this.extendedItem.updateStyleInSheetOrLocal('display', displayTypeEl.value);
22
+ this.extensionManager.reapplyAllAppliedExtentions([this.extendedItem]);
23
+ };
24
+ this.refresh(cache, event);
25
+ }
26
+ refresh(cache, event) {
27
+ if (event) {
28
+ const pos = this.designerCanvas.getNormalizedEventCoordinates(event);
29
+ this._toolbar.updatePosition({ x: (pos.x - 16), y: (pos.y - 44) });
30
+ }
31
+ }
32
+ dispose() {
33
+ this._removeAllOverlays();
34
+ }
35
+ }
@@ -0,0 +1,9 @@
1
+ import { IDesignerExtensionProvider } from '../IDesignerExtensionProvider.js';
2
+ import { IDesignItem } from '../../../../item/IDesignItem.js';
3
+ import { IDesignerCanvas } from '../../IDesignerCanvas.js';
4
+ import { IDesignerExtension } from '../IDesignerExtension.js';
5
+ import { IExtensionManager } from '../IExtensionManger.js';
6
+ export declare class BlockToolbarExtensionProvider implements IDesignerExtensionProvider {
7
+ shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
8
+ getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
9
+ }
@@ -0,0 +1,12 @@
1
+ import { BlockToolbarExtension } from './BlockToolbarExtension.js';
2
+ import { NodeType } from '../../../../item/NodeType.js';
3
+ export class BlockToolbarExtensionProvider {
4
+ shouldExtend(extensionManager, designerView, designItem) {
5
+ if (designItem.nodeType === NodeType.Element && getComputedStyle(designItem.element).display === 'block')
6
+ return true;
7
+ return false;
8
+ }
9
+ getExtension(extensionManager, designerView, designItem) {
10
+ return new BlockToolbarExtension(extensionManager, designerView, designItem);
11
+ }
12
+ }
@@ -0,0 +1,12 @@
1
+ import { IDesignItem } from '../../../../item/IDesignItem.js';
2
+ import { IDesignerCanvas } from '../../IDesignerCanvas.js';
3
+ import { AbstractExtension } from "../AbstractExtension.js";
4
+ import { IExtensionManager } from '../IExtensionManger.js';
5
+ export declare class FlexToolbarExtension extends AbstractExtension {
6
+ private static template;
7
+ private _toolbar;
8
+ constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
9
+ extend(cache: Record<string | symbol, any>, event: MouseEvent): void;
10
+ refresh(cache: Record<string | symbol, any>, event?: MouseEvent): void;
11
+ dispose(): void;
12
+ }