@node-projects/web-component-designer 0.0.95 → 0.0.98

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 (105) hide show
  1. package/dist/Constants.js +0 -1
  2. package/dist/elements/services/DefaultServiceBootstrap.js +10 -0
  3. package/dist/elements/services/GlobalContext.d.ts +4 -1
  4. package/dist/elements/services/GlobalContext.js +8 -3
  5. package/dist/elements/services/ServiceContainer.d.ts +2 -0
  6. package/dist/elements/services/ServiceContainer.js +1 -0
  7. package/dist/elements/widgets/designerView/Snaplines.js +1 -1
  8. package/dist/elements/widgets/designerView/designerView.d.ts +1 -2
  9. package/dist/elements/widgets/designerView/designerView.js +15 -12
  10. package/dist/elements/widgets/designerView/extensions/contextMenu/SelectAllChildrenContextMenu.d.ts +8 -0
  11. package/dist/elements/widgets/designerView/extensions/contextMenu/SelectAllChildrenContextMenu.js +12 -0
  12. package/dist/elements/widgets/designerView/toolBar/DrawElementTool.d.ts +19 -0
  13. package/dist/elements/widgets/designerView/toolBar/DrawElementTool.js +79 -0
  14. package/dist/elements/widgets/designerView/toolBar/DrawEllipsisTool.d.ts +16 -0
  15. package/dist/elements/widgets/designerView/toolBar/DrawEllipsisTool.js +94 -0
  16. package/dist/elements/widgets/designerView/toolBar/DrawLineTool.d.ts +14 -0
  17. package/dist/elements/widgets/designerView/toolBar/DrawLineTool.js +79 -0
  18. package/dist/elements/widgets/designerView/toolBar/DrawPathTool.d.ts +20 -0
  19. package/dist/elements/widgets/designerView/toolBar/DrawPathTool.js +128 -0
  20. package/dist/elements/widgets/designerView/toolBar/DrawRectTool.d.ts +19 -0
  21. package/dist/elements/widgets/designerView/toolBar/DrawRectTool.js +109 -0
  22. package/dist/elements/widgets/designerView/toolBar/ITool.d.ts +9 -0
  23. package/dist/elements/widgets/designerView/toolBar/ITool.js +1 -0
  24. package/dist/elements/widgets/designerView/toolBar/MagicWandSelectorTool.d.ts +12 -0
  25. package/dist/elements/widgets/designerView/toolBar/MagicWandSelectorTool.js +64 -0
  26. package/dist/elements/widgets/designerView/toolBar/NamedTools.d.ts +15 -0
  27. package/dist/elements/widgets/designerView/toolBar/NamedTools.js +16 -0
  28. package/dist/elements/widgets/designerView/toolBar/PanTool.d.ts +10 -0
  29. package/dist/elements/widgets/designerView/toolBar/PanTool.js +26 -0
  30. package/dist/elements/widgets/designerView/toolBar/PickColorTool.d.ts +10 -0
  31. package/dist/elements/widgets/designerView/toolBar/PickColorTool.js +20 -0
  32. package/dist/elements/widgets/designerView/toolBar/PointerTool.d.ts +24 -0
  33. package/dist/elements/widgets/designerView/toolBar/PointerTool.js +283 -0
  34. package/dist/elements/widgets/designerView/toolBar/RectangleSelectorTool.d.ts +12 -0
  35. package/dist/elements/widgets/designerView/toolBar/RectangleSelectorTool.js +84 -0
  36. package/dist/elements/widgets/designerView/toolBar/TextTool.d.ts +11 -0
  37. package/dist/elements/widgets/designerView/toolBar/TextTool.js +33 -0
  38. package/dist/elements/widgets/designerView/toolBar/ZoomTool.d.ts +17 -0
  39. package/dist/elements/widgets/designerView/toolBar/ZoomTool.js +79 -0
  40. package/dist/elements/widgets/designerView/toolBar/designerToolbarGenerics/designerToolRenderer.d.ts +5 -0
  41. package/dist/elements/widgets/designerView/toolBar/designerToolbarGenerics/designerToolRenderer.js +19 -0
  42. package/dist/elements/widgets/designerView/toolBar/designerToolbarGenerics/designerToolbarPopup.d.ts +8 -0
  43. package/dist/elements/widgets/designerView/toolBar/designerToolbarGenerics/designerToolbarPopup.js +41 -0
  44. package/dist/elements/widgets/designerView/toolBar/designerToolbarGenerics/designerToolbarPopupToolSelect.d.ts +9 -0
  45. package/dist/elements/widgets/designerView/toolBar/designerToolbarGenerics/designerToolbarPopupToolSelect.js +42 -0
  46. package/dist/elements/widgets/designerView/toolBar/designerToolbarGenerics/designerToolsButtons.d.ts +36 -0
  47. package/dist/elements/widgets/designerView/toolBar/designerToolbarGenerics/designerToolsButtons.js +96 -0
  48. package/dist/elements/widgets/designerView/toolBar/designerToolbarPopups/DrawToolPopup.d.ts +5 -0
  49. package/dist/elements/widgets/designerView/toolBar/designerToolbarPopups/DrawToolPopup.js +21 -0
  50. package/dist/elements/widgets/designerView/toolBar/designerToolbarPopups/SelectorToolsPopup.d.ts +8 -0
  51. package/dist/elements/widgets/designerView/toolBar/designerToolbarPopups/SelectorToolsPopup.js +23 -0
  52. package/dist/elements/widgets/designerView/toolBar/designerToolsDock.d.ts +24 -0
  53. package/dist/elements/widgets/designerView/toolBar/designerToolsDock.js +115 -0
  54. package/dist/elements/widgets/designerView/tools/designerToolbarGenerics/designerToolRenderer.js +1 -1
  55. package/dist/elements/widgets/designerView/tools/designerToolbarGenerics/designerToolbarPopup.js +4 -0
  56. package/dist/elements/widgets/designerView/tools/designerToolbarGenerics/designerToolbarPopupToolSelect.d.ts +1 -4
  57. package/dist/elements/widgets/designerView/tools/designerToolbarGenerics/designerToolbarPopupToolSelect.js +4 -6
  58. package/dist/elements/widgets/designerView/tools/designerToolbarGenerics/designerToolsButtons.d.ts +4 -0
  59. package/dist/elements/widgets/designerView/tools/designerToolbarGenerics/designerToolsButtons.js +31 -40
  60. package/dist/elements/widgets/designerView/tools/designerToolbarPopups/DrawToolPopup copy.d.ts +8 -0
  61. package/dist/elements/widgets/designerView/tools/designerToolbarPopups/DrawToolPopup copy.js +25 -0
  62. package/dist/elements/widgets/designerView/tools/designerToolbarPopups/DrawToolPopup.d.ts +0 -3
  63. package/dist/elements/widgets/designerView/tools/designerToolbarPopups/DrawToolPopup.js +6 -10
  64. package/dist/elements/widgets/designerView/tools/designerToolbarPopups/SelectorToolsPopup.d.ts +8 -0
  65. package/dist/elements/widgets/designerView/tools/designerToolbarPopups/SelectorToolsPopup.js +23 -0
  66. package/dist/elements/widgets/designerView/tools/designerToolsDock.d.ts +1 -0
  67. package/dist/elements/widgets/designerView/tools/designerToolsDock.js +7 -7
  68. package/dist/elements/widgets/designerView/tools/toolBar/AbstractDesignerToolbarButton.d.ts +5 -0
  69. package/dist/elements/widgets/designerView/tools/toolBar/AbstractDesignerToolbarButton.js +5 -0
  70. package/dist/elements/widgets/designerView/tools/toolBar/DesignerToolbar.d.ts +16 -0
  71. package/dist/elements/widgets/designerView/tools/toolBar/DesignerToolbar.js +68 -0
  72. package/dist/elements/widgets/designerView/tools/toolBar/DesignerToolbarButton.d.ts +19 -0
  73. package/dist/elements/widgets/designerView/tools/toolBar/DesignerToolbarButton.js +62 -0
  74. package/dist/elements/widgets/designerView/tools/toolBar/IDesignViewConfigButtonsProvider.d.ts +5 -0
  75. package/dist/elements/widgets/designerView/tools/toolBar/IDesignViewConfigButtonsProvider.js +1 -0
  76. package/dist/elements/widgets/designerView/tools/toolBar/IDesignViewToolbarButtonProvider.d.ts +4 -0
  77. package/dist/elements/widgets/designerView/tools/toolBar/IDesignViewToolbarButtonProvider.js +1 -0
  78. package/dist/elements/widgets/designerView/tools/toolBar/buttons/DrawToolButtonProvider.d.ts +5 -0
  79. package/dist/elements/widgets/designerView/tools/toolBar/buttons/DrawToolButtonProvider.js +16 -0
  80. package/dist/elements/widgets/designerView/tools/toolBar/buttons/PointerToolButtonProvider copy.d.ts +5 -0
  81. package/dist/elements/widgets/designerView/tools/toolBar/buttons/PointerToolButtonProvider copy.js +7 -0
  82. package/dist/elements/widgets/designerView/tools/toolBar/buttons/PointerToolButtonProvider.d.ts +5 -0
  83. package/dist/elements/widgets/designerView/tools/toolBar/buttons/PointerToolButtonProvider.js +7 -0
  84. package/dist/elements/widgets/designerView/tools/toolBar/buttons/SelectorToolButtonProvider copy.d.ts +5 -0
  85. package/dist/elements/widgets/designerView/tools/toolBar/buttons/SelectorToolButtonProvider copy.js +10 -0
  86. package/dist/elements/widgets/designerView/tools/toolBar/buttons/SelectorToolButtonProvider.d.ts +5 -0
  87. package/dist/elements/widgets/designerView/tools/toolBar/buttons/SelectorToolButtonProvider.js +10 -0
  88. package/dist/elements/widgets/designerView/tools/toolBar/buttons/SeperatorToolProvider.d.ts +7 -0
  89. package/dist/elements/widgets/designerView/tools/toolBar/buttons/SeperatorToolProvider.js +11 -0
  90. package/dist/elements/widgets/designerView/tools/toolBar/buttons/TextToolButtonProvider.d.ts +5 -0
  91. package/dist/elements/widgets/designerView/tools/toolBar/buttons/TextToolButtonProvider.js +7 -0
  92. package/dist/elements/widgets/designerView/tools/toolBar/buttons/ZoomToolButtonProvider.d.ts +5 -0
  93. package/dist/elements/widgets/designerView/tools/toolBar/buttons/ZoomToolButtonProvider.js +7 -0
  94. package/dist/elements/widgets/designerView/tools/toolBar/designerToolsDock.d.ts +24 -0
  95. package/dist/elements/widgets/designerView/tools/toolBar/designerToolsDock.js +115 -0
  96. package/dist/elements/widgets/designerView/tools/toolBar/popups/DrawToolPopup.d.ts +6 -0
  97. package/dist/elements/widgets/designerView/tools/toolBar/popups/DrawToolPopup.js +50 -0
  98. package/dist/elements/widgets/designerView/tools/toolBar/popups/SelectorToolsPopup.d.ts +7 -0
  99. package/dist/elements/widgets/designerView/tools/toolBar/popups/SelectorToolsPopup.js +23 -0
  100. package/dist/elements/widgets/designerView/tools/toolBar/popups/designerToolbarPopup.d.ts +8 -0
  101. package/dist/elements/widgets/designerView/tools/toolBar/popups/designerToolbarPopup.js +41 -0
  102. package/dist/elements/widgets/treeView/treeViewExtended.js +6 -4
  103. package/dist/index.d.ts +12 -1
  104. package/dist/index.js +11 -1
  105. package/package.json +42 -42
@@ -0,0 +1,283 @@
1
+ import { EventNames } from "../../../../enums/EventNames";
2
+ import { PointerActionType } from "../../../../enums/PointerActionType";
3
+ import { DesignItem } from "../../../item/DesignItem";
4
+ import { ExtensionType } from "../extensions/ExtensionType";
5
+ import { NamedTools } from './NamedTools';
6
+ export class PointerTool {
7
+ cursor = 'default';
8
+ _movedSinceStartedAction = false;
9
+ _initialPoint;
10
+ _actionType;
11
+ _actionStartedDesignItem;
12
+ _previousEventName;
13
+ _dragOverExtensionItem;
14
+ _dragExtensionItem;
15
+ _moveItemsOffset = { x: 0, y: 0 };
16
+ _initialOffset;
17
+ constructor() {
18
+ }
19
+ activated(serviceContainer) {
20
+ }
21
+ dispose() {
22
+ }
23
+ _showContextMenu(event, designerCanvas) {
24
+ event.preventDefault();
25
+ if (!event.shiftKey) {
26
+ let items = designerCanvas.elementsFromPoint(event.x, event.y);
27
+ for (let e of designerCanvas.instanceServiceContainer.selectionService.selectedElements) {
28
+ if (items.indexOf(e.element) >= 0) {
29
+ designerCanvas.showDesignItemContextMenu(designerCanvas.instanceServiceContainer.selectionService.primarySelection, event);
30
+ return;
31
+ }
32
+ }
33
+ const designItem = DesignItem.GetOrCreateDesignItem(event.target, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
34
+ if (!designerCanvas.instanceServiceContainer.selectionService.isSelected(designItem)) {
35
+ designerCanvas.instanceServiceContainer.selectionService.setSelectedElements([designItem]);
36
+ }
37
+ designerCanvas.showDesignItemContextMenu(designItem, event);
38
+ }
39
+ }
40
+ pointerEventHandler(designerCanvas, event, currentElement) {
41
+ if (event.button == 2) {
42
+ this._showContextMenu(event, designerCanvas);
43
+ return;
44
+ }
45
+ if (((event.ctrlKey || event.metaKey) && event.shiftKey) || event.buttons == 4) {
46
+ const panTool = designerCanvas.serviceContainer.designerTools.get(NamedTools.Pan);
47
+ if (panTool) {
48
+ panTool.pointerEventHandler(designerCanvas, event, currentElement);
49
+ return;
50
+ }
51
+ }
52
+ switch (event.type) {
53
+ case EventNames.PointerDown:
54
+ event.target.setPointerCapture(event.pointerId);
55
+ designerCanvas.captureActiveTool(this);
56
+ this._movedSinceStartedAction = false;
57
+ break;
58
+ case EventNames.PointerUp:
59
+ event.target.releasePointerCapture(event.pointerId);
60
+ designerCanvas.releaseActiveTool();
61
+ break;
62
+ }
63
+ if (!currentElement)
64
+ return;
65
+ const currentPoint = designerCanvas.getNormalizedEventCoordinates(event);
66
+ const currentDesignItem = DesignItem.GetOrCreateDesignItem(currentElement, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
67
+ if (this._actionType == null) {
68
+ this._initialPoint = currentPoint;
69
+ this._initialOffset = designerCanvas.getNormalizedOffsetInElement(event, currentElement);
70
+ if (event.type == EventNames.PointerDown) {
71
+ this._actionStartedDesignItem = currentDesignItem;
72
+ designerCanvas.snapLines.clearSnaplines();
73
+ if (currentDesignItem !== designerCanvas.rootDesignItem) {
74
+ this._actionType = PointerActionType.Drag;
75
+ }
76
+ else if (currentElement === designerCanvas || currentElement === designerCanvas.rootDesignItem.element || currentElement == null) {
77
+ designerCanvas.instanceServiceContainer.selectionService.setSelectedElements(null);
78
+ this._actionType = PointerActionType.DrawSelection;
79
+ }
80
+ else {
81
+ this._actionType = PointerActionType.DragOrSelect;
82
+ }
83
+ }
84
+ }
85
+ if (event.type === EventNames.PointerMove) {
86
+ this._movedSinceStartedAction = this._movedSinceStartedAction || currentPoint.x != this._initialPoint.x || currentPoint.y != this._initialPoint.y;
87
+ if (this._actionType == PointerActionType.DrawSelection)
88
+ this._actionType = PointerActionType.DrawingSelection;
89
+ }
90
+ if (this._actionType == PointerActionType.DrawSelection || this._actionType == PointerActionType.DrawingSelection) {
91
+ this._pointerActionTypeDrawSelection(designerCanvas, event, currentElement);
92
+ }
93
+ else if (this._actionType == PointerActionType.DragOrSelect || this._actionType == PointerActionType.Drag) {
94
+ this._pointerActionTypeDragOrSelect(designerCanvas, event, currentDesignItem, currentPoint);
95
+ }
96
+ if (event.type == EventNames.PointerUp) {
97
+ designerCanvas.snapLines.clearSnaplines();
98
+ if (this._actionType == PointerActionType.DrawSelection) {
99
+ if (currentDesignItem !== designerCanvas.rootDesignItem)
100
+ designerCanvas.instanceServiceContainer.selectionService.setSelectedElements([currentDesignItem]);
101
+ }
102
+ this._resetTool();
103
+ }
104
+ this._previousEventName = event.type;
105
+ }
106
+ _resetTool() {
107
+ this._actionType = null;
108
+ this._actionStartedDesignItem = null;
109
+ this._movedSinceStartedAction = false;
110
+ this._initialPoint = null;
111
+ }
112
+ _pointerActionTypeDrawSelection(designerView, event, currentElement) {
113
+ const drawSelectionTool = designerView.serviceContainer.designerTools.get(NamedTools.DrawSelection);
114
+ if (drawSelectionTool) {
115
+ this._resetTool();
116
+ drawSelectionTool.pointerEventHandler(designerView, event, currentElement);
117
+ }
118
+ }
119
+ _pointerActionTypeDragOrSelect(designerCanvas, event, currentDesignItem, currentPoint) {
120
+ if (event.altKey) {
121
+ if (event.type == EventNames.PointerDown) {
122
+ const currentSelection = designerCanvas.instanceServiceContainer.selectionService.primarySelection;
123
+ if (currentSelection) {
124
+ const elements = designerCanvas.elementsFromPoint(event.x, event.y);
125
+ let idx = elements.indexOf(currentSelection.element);
126
+ if (idx >= 0) {
127
+ idx++;
128
+ }
129
+ let currentElement = elements[idx];
130
+ if (currentElement)
131
+ currentDesignItem = DesignItem.GetOrCreateDesignItem(currentElement, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
132
+ }
133
+ }
134
+ }
135
+ switch (event.type) {
136
+ case EventNames.PointerDown:
137
+ {
138
+ this._actionStartedDesignItem = currentDesignItem;
139
+ this._moveItemsOffset = { x: 0, y: 0 };
140
+ if (event.shiftKey || event.ctrlKey) {
141
+ const index = designerCanvas.instanceServiceContainer.selectionService.selectedElements.indexOf(currentDesignItem);
142
+ if (index >= 0) {
143
+ let newSelectedList = designerCanvas.instanceServiceContainer.selectionService.selectedElements.slice(0);
144
+ newSelectedList.splice(index, 1);
145
+ designerCanvas.instanceServiceContainer.selectionService.setSelectedElements(newSelectedList);
146
+ }
147
+ else {
148
+ let newSelectedList = designerCanvas.instanceServiceContainer.selectionService.selectedElements.slice(0);
149
+ newSelectedList.push(currentDesignItem);
150
+ designerCanvas.instanceServiceContainer.selectionService.setSelectedElements(newSelectedList);
151
+ }
152
+ }
153
+ else {
154
+ if (designerCanvas.instanceServiceContainer.selectionService.selectedElements.indexOf(currentDesignItem) < 0)
155
+ designerCanvas.instanceServiceContainer.selectionService.setSelectedElements([currentDesignItem]);
156
+ }
157
+ if (designerCanvas.alignOnSnap)
158
+ designerCanvas.snapLines.calculateSnaplines(designerCanvas.instanceServiceContainer.selectionService.selectedElements);
159
+ break;
160
+ }
161
+ case EventNames.PointerMove:
162
+ {
163
+ const elementMoved = currentPoint.x != this._initialPoint.x || currentPoint.y != this._initialPoint.y;
164
+ if (this._actionType != PointerActionType.Drag && elementMoved) {
165
+ this._actionType = PointerActionType.Drag;
166
+ }
167
+ if (this._movedSinceStartedAction) {
168
+ const containerStyle = getComputedStyle(this._actionStartedDesignItem.parent.element);
169
+ const currentContainerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(this._actionStartedDesignItem.parent, containerStyle));
170
+ if (currentContainerService) {
171
+ const dragItem = this._actionStartedDesignItem.parent;
172
+ if (this._dragExtensionItem != dragItem) {
173
+ designerCanvas.extensionManager.removeExtension(this._dragExtensionItem, ExtensionType.ContainerDrag);
174
+ designerCanvas.extensionManager.applyExtension(dragItem, ExtensionType.ContainerDrag);
175
+ this._dragExtensionItem = dragItem;
176
+ }
177
+ else {
178
+ designerCanvas.extensionManager.refreshExtension(dragItem, ExtensionType.ContainerDrag);
179
+ }
180
+ const canLeave = currentContainerService.canLeave(this._actionStartedDesignItem.parent, [this._actionStartedDesignItem]);
181
+ let newContainerElementDesignItem = null;
182
+ let newContainerService = null;
183
+ if (canLeave) {
184
+ const elementsFromPoint = designerCanvas.elementsFromPoint(event.x, event.y);
185
+ for (let e of elementsFromPoint) {
186
+ if (e == this._actionStartedDesignItem.element) {
187
+ continue;
188
+ }
189
+ else if (e == this._actionStartedDesignItem.parent.element) {
190
+ break;
191
+ }
192
+ else if (e == designerCanvas.rootDesignItem.element) {
193
+ newContainerElementDesignItem = designerCanvas.rootDesignItem;
194
+ const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
195
+ newContainerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
196
+ break;
197
+ }
198
+ else if (false) {
199
+ //check we don't try to move a item over one of its children..
200
+ }
201
+ else {
202
+ newContainerElementDesignItem = DesignItem.GetOrCreateDesignItem(e, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
203
+ const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
204
+ newContainerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
205
+ if (newContainerService) {
206
+ if (newContainerService.canEnter(newContainerElementDesignItem, [this._actionStartedDesignItem])) {
207
+ break;
208
+ }
209
+ else {
210
+ newContainerElementDesignItem = null;
211
+ newContainerService = null;
212
+ continue;
213
+ }
214
+ }
215
+ }
216
+ }
217
+ //if we found a new enterable container create extensions
218
+ if (newContainerElementDesignItem != null) {
219
+ if (this._dragOverExtensionItem != newContainerElementDesignItem) {
220
+ designerCanvas.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.ContainerDragOver);
221
+ designerCanvas.extensionManager.applyExtension(newContainerElementDesignItem, ExtensionType.ContainerDragOver);
222
+ this._dragOverExtensionItem = newContainerElementDesignItem;
223
+ }
224
+ else {
225
+ designerCanvas.extensionManager.refreshExtension(newContainerElementDesignItem, ExtensionType.ContainerDragOver);
226
+ }
227
+ }
228
+ else {
229
+ if (this._dragOverExtensionItem) {
230
+ designerCanvas.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.ContainerDragOver);
231
+ this._dragOverExtensionItem = null;
232
+ }
233
+ }
234
+ }
235
+ if (newContainerService && event.altKey) {
236
+ //TODO: all items, fix position
237
+ const oldOffset = currentContainerService.getElementOffset(this._actionStartedDesignItem.parent, this._actionStartedDesignItem);
238
+ const newOffset = newContainerService.getElementOffset(newContainerElementDesignItem, this._actionStartedDesignItem);
239
+ this._moveItemsOffset = { x: newOffset.x - oldOffset.x + this._moveItemsOffset.x, y: newOffset.y - oldOffset.y + this._moveItemsOffset.y };
240
+ currentContainerService.leaveContainer(this._actionStartedDesignItem.parent, [this._actionStartedDesignItem]);
241
+ newContainerElementDesignItem._insertChildInternal(this._actionStartedDesignItem);
242
+ const cp = { x: currentPoint.x - this._moveItemsOffset.x, y: currentPoint.y - this._moveItemsOffset.y };
243
+ newContainerService.enterContainer(newContainerElementDesignItem, [this._actionStartedDesignItem]);
244
+ newContainerService.place(event, designerCanvas, this._actionStartedDesignItem.parent, this._initialPoint, this._initialOffset, cp, designerCanvas.instanceServiceContainer.selectionService.selectedElements);
245
+ }
246
+ else {
247
+ const cp = { x: currentPoint.x - this._moveItemsOffset.x, y: currentPoint.y - this._moveItemsOffset.y };
248
+ currentContainerService.place(event, designerCanvas, this._actionStartedDesignItem.parent, this._initialPoint, this._initialOffset, cp, designerCanvas.instanceServiceContainer.selectionService.selectedElements);
249
+ }
250
+ designerCanvas.extensionManager.refreshExtensions(designerCanvas.instanceServiceContainer.selectionService.selectedElements);
251
+ }
252
+ }
253
+ break;
254
+ }
255
+ case EventNames.PointerUp:
256
+ {
257
+ if (!this._movedSinceStartedAction || this._actionType == PointerActionType.DragOrSelect) {
258
+ if (this._previousEventName == EventNames.PointerDown && !event.shiftKey && !event.ctrlKey)
259
+ designerCanvas.instanceServiceContainer.selectionService.setSelectedElements([this._actionStartedDesignItem]);
260
+ return;
261
+ }
262
+ if (this._movedSinceStartedAction) {
263
+ const containerStyle = getComputedStyle(this._actionStartedDesignItem.parent.element);
264
+ let containerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(this._actionStartedDesignItem.parent, containerStyle));
265
+ const cp = { x: currentPoint.x - this._moveItemsOffset.x, y: currentPoint.y - this._moveItemsOffset.y };
266
+ if (containerService) {
267
+ let cg = designerCanvas.rootDesignItem.openGroup("Move Elements", designerCanvas.instanceServiceContainer.selectionService.selectedElements);
268
+ containerService.finishPlace(event, designerCanvas, this._actionStartedDesignItem.parent, this._initialPoint, this._initialOffset, cp, designerCanvas.instanceServiceContainer.selectionService.selectedElements);
269
+ cg.commit();
270
+ }
271
+ designerCanvas.extensionManager.removeExtension(this._dragExtensionItem, ExtensionType.ContainerDrag);
272
+ this._dragExtensionItem = null;
273
+ designerCanvas.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.ContainerDragOver);
274
+ this._dragOverExtensionItem = null;
275
+ this._moveItemsOffset = { x: 0, y: 0 };
276
+ }
277
+ designerCanvas.extensionManager.refreshExtensions(designerCanvas.instanceServiceContainer.selectionService.selectedElements);
278
+ break;
279
+ }
280
+ }
281
+ }
282
+ keyboardEventHandler(designerCanvas, event, currentElement) { }
283
+ }
@@ -0,0 +1,12 @@
1
+ import { ServiceContainer } from '../../../services/ServiceContainer.js';
2
+ import { IDesignerCanvas } from '../IDesignerCanvas';
3
+ import { ITool } from './ITool';
4
+ export declare class RectangleSelectorTool implements ITool {
5
+ cursor: string;
6
+ private _rect;
7
+ private _initialPoint;
8
+ activated(serviceContainer: ServiceContainer): void;
9
+ pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): void;
10
+ keyboardEventHandler(designerCanvas: IDesignerCanvas, event: KeyboardEvent, currentElement: Element): void;
11
+ dispose(): void;
12
+ }
@@ -0,0 +1,84 @@
1
+ import { EventNames } from '../../../../enums/EventNames';
2
+ import { DesignItem } from '../../../item/DesignItem';
3
+ import { OverlayLayer } from '../extensions/OverlayLayer.js';
4
+ export class RectangleSelectorTool {
5
+ cursor = 'progress';
6
+ _rect;
7
+ _initialPoint;
8
+ activated(serviceContainer) {
9
+ }
10
+ pointerEventHandler(designerCanvas, event, currentElement) {
11
+ const currentPoint = designerCanvas.getNormalizedEventCoordinates(event);
12
+ switch (event.type) {
13
+ case EventNames.PointerDown:
14
+ event.target.setPointerCapture(event.pointerId);
15
+ designerCanvas.captureActiveTool(this);
16
+ this._initialPoint = currentPoint;
17
+ if (!this._rect)
18
+ this._rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
19
+ this._rect.setAttribute('class', 'svg-selector');
20
+ this._rect.setAttribute('x', (this._initialPoint.x * designerCanvas.scaleFactor));
21
+ this._rect.setAttribute('y', (this._initialPoint.y * designerCanvas.scaleFactor));
22
+ this._rect.setAttribute('width', 0);
23
+ this._rect.setAttribute('height', 0);
24
+ designerCanvas.overlayLayer.addOverlay(this._rect, OverlayLayer.Foregorund);
25
+ break;
26
+ case EventNames.PointerMove:
27
+ if (this._initialPoint) {
28
+ let w = currentPoint.x - this._initialPoint.x;
29
+ let h = currentPoint.y - this._initialPoint.y;
30
+ if (w >= 0) {
31
+ this._rect.setAttribute('x', this._initialPoint.x);
32
+ this._rect.setAttribute('width', w);
33
+ }
34
+ else {
35
+ this._rect.setAttribute('x', currentPoint.x);
36
+ this._rect.setAttribute('width', (-1 * w));
37
+ }
38
+ if (h >= 0) {
39
+ this._rect.setAttribute('y', this._initialPoint.y);
40
+ this._rect.setAttribute('height', h);
41
+ }
42
+ else {
43
+ this._rect.setAttribute('y', currentPoint.y);
44
+ this._rect.setAttribute('height', (-1 * h));
45
+ }
46
+ }
47
+ break;
48
+ case EventNames.PointerUp:
49
+ event.target.releasePointerCapture(event.pointerId);
50
+ designerCanvas.releaseActiveTool();
51
+ const elements = designerCanvas.rootDesignItem.element.querySelectorAll('*');
52
+ const inSelectionElements = [];
53
+ let point = designerCanvas.overlayLayer.createPoint();
54
+ for (let e of elements) {
55
+ let elementRect = designerCanvas.getNormalizedElementCoordinates(e);
56
+ point.x = elementRect.x;
57
+ point.y = elementRect.y;
58
+ const p1 = this._rect.isPointInFill(point);
59
+ point.x = elementRect.x + elementRect.width;
60
+ point.y = elementRect.y;
61
+ const p2 = p1 && this._rect.isPointInFill(point);
62
+ point.x = elementRect.x;
63
+ point.y = elementRect.y + elementRect.height;
64
+ const p3 = p2 && this._rect.isPointInFill(point);
65
+ point.x = elementRect.x + elementRect.width;
66
+ point.y = elementRect.y + elementRect.height;
67
+ const p4 = p3 && this._rect.isPointInFill(point);
68
+ if (p4) {
69
+ const desItem = DesignItem.GetOrCreateDesignItem(e, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
70
+ inSelectionElements.push(desItem);
71
+ }
72
+ }
73
+ designerCanvas.overlayLayer.removeOverlay(this._rect);
74
+ this._rect = null;
75
+ this._initialPoint = null;
76
+ designerCanvas.instanceServiceContainer.selectionService.setSelectedElements(inSelectionElements);
77
+ designerCanvas.serviceContainer.globalContext.finishedWithTool(this);
78
+ break;
79
+ }
80
+ }
81
+ keyboardEventHandler(designerCanvas, event, currentElement) { }
82
+ dispose() {
83
+ }
84
+ }
@@ -0,0 +1,11 @@
1
+ import { ServiceContainer } from '../../../services/ServiceContainer.js';
2
+ import { IDesignerCanvas } from '../IDesignerCanvas';
3
+ import { ITool } from './ITool';
4
+ export declare class TextTool implements ITool {
5
+ constructor();
6
+ activated(serviceContainer: ServiceContainer): void;
7
+ dispose(): void;
8
+ readonly cursor = "text";
9
+ pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): void;
10
+ keyboardEventHandler(designerCanvas: IDesignerCanvas, event: KeyboardEvent, currentElement: Element): void;
11
+ }
@@ -0,0 +1,33 @@
1
+ import { EventNames } from '../../../../enums/EventNames.js';
2
+ import { DesignItem } from '../../../item/DesignItem.js';
3
+ import { InsertAction } from '../../../services/undoService/transactionItems/InsertAction.js';
4
+ import { ExtensionType } from '../extensions/ExtensionType.js';
5
+ export class TextTool {
6
+ constructor() {
7
+ }
8
+ activated(serviceContainer) {
9
+ }
10
+ dispose() {
11
+ }
12
+ cursor = 'text';
13
+ pointerEventHandler(designerCanvas, event, currentElement) {
14
+ const currentPoint = designerCanvas.getNormalizedEventCoordinates(event);
15
+ switch (event.type) {
16
+ case EventNames.PointerDown:
17
+ const span = document.createElement('span');
18
+ const di = DesignItem.createDesignItemFromInstance(span, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
19
+ di.setStyle('position', 'absolute');
20
+ di.setStyle('left', currentPoint.x + 'px');
21
+ di.setStyle('top', currentPoint.y + 'px');
22
+ designerCanvas.instanceServiceContainer.undoService.execute(new InsertAction(designerCanvas.rootDesignItem, designerCanvas.rootDesignItem.childCount, di));
23
+ designerCanvas.serviceContainer.globalContext.finishedWithTool(this);
24
+ //TODO - don't apply doubleclick extension (maybe it is not the doubleclick one) - apply edit text extesion directly
25
+ designerCanvas.extensionManager.applyExtension(di, ExtensionType.Doubleclick);
26
+ setTimeout(() => {
27
+ span.focus();
28
+ }, 50);
29
+ break;
30
+ }
31
+ }
32
+ keyboardEventHandler(designerCanvas, event, currentElement) { }
33
+ }
@@ -0,0 +1,17 @@
1
+ import { ServiceContainer } from '../../../services/ServiceContainer.js';
2
+ import { IDesignerCanvas } from '../IDesignerCanvas';
3
+ import { ITool } from './ITool';
4
+ export declare class ZoomTool implements ITool {
5
+ cursor: string;
6
+ private _rect;
7
+ private _startPoint;
8
+ private _endPoint;
9
+ private _pointerMovementTolerance;
10
+ private _zoomStepSize;
11
+ activated(serviceContainer: ServiceContainer): void;
12
+ pointerEventHandler(designerCanvas: IDesignerCanvas, event: PointerEvent, currentElement: Element): void;
13
+ private _zoomOnto;
14
+ private _isPositionEqual;
15
+ keyboardEventHandler(designerCanvas: IDesignerCanvas, event: KeyboardEvent, currentElement: Element): void;
16
+ dispose(): void;
17
+ }
@@ -0,0 +1,79 @@
1
+ import { EventNames, OverlayLayer } from '../../../../index.js';
2
+ export class ZoomTool {
3
+ cursor = 'zoom-in';
4
+ _rect;
5
+ _startPoint;
6
+ _endPoint;
7
+ _pointerMovementTolerance = 5;
8
+ _zoomStepSize = 0.2; //number x 100 = Scale in percent
9
+ activated(serviceContainer) {
10
+ }
11
+ pointerEventHandler(designerCanvas, event, currentElement) {
12
+ const eventPoint = designerCanvas.getNormalizedEventCoordinates(event);
13
+ switch (event.type) {
14
+ case EventNames.PointerDown:
15
+ this._startPoint = eventPoint;
16
+ if (!this._rect)
17
+ this._rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
18
+ this._rect.setAttribute('class', 'svg-selector');
19
+ this._rect.setAttribute('x', (this._startPoint.x * designerCanvas.zoomFactor));
20
+ this._rect.setAttribute('y', (this._startPoint.y * designerCanvas.zoomFactor));
21
+ this._rect.setAttribute('width', 0);
22
+ this._rect.setAttribute('height', 0);
23
+ designerCanvas.overlayLayer.addOverlay(this._rect, OverlayLayer.Foregorund);
24
+ break;
25
+ case EventNames.PointerMove:
26
+ if (this._startPoint) {
27
+ let width = eventPoint.x - this._startPoint.x;
28
+ let height = eventPoint.y - this._startPoint.y;
29
+ if (width >= 0) {
30
+ this._rect.setAttribute('x', this._startPoint.x);
31
+ this._rect.setAttribute('width', width);
32
+ }
33
+ else {
34
+ this._rect.setAttribute('x', eventPoint.x);
35
+ this._rect.setAttribute('width', (-1 * width));
36
+ }
37
+ if (height >= 0) {
38
+ this._rect.setAttribute('y', this._startPoint.y);
39
+ this._rect.setAttribute('height', height);
40
+ }
41
+ else {
42
+ this._rect.setAttribute('y', eventPoint.y);
43
+ this._rect.setAttribute('height', (-1 * height));
44
+ }
45
+ }
46
+ break;
47
+ case EventNames.PointerUp:
48
+ this._endPoint = eventPoint;
49
+ let isLeftClick = event.button == 0;
50
+ switch (event.button) {
51
+ case 0: //Left-Click
52
+ case 2: //Right-Click
53
+ this._zoomOnto(isLeftClick, this._startPoint, this._endPoint, designerCanvas);
54
+ break;
55
+ }
56
+ designerCanvas.overlayLayer.removeOverlay(this._rect);
57
+ this._rect = null;
58
+ this._startPoint = null;
59
+ break;
60
+ }
61
+ }
62
+ _zoomOnto(isZoomInto, startPoint, endPoint, designerCanvas) {
63
+ if (this._isPositionEqual(startPoint, endPoint)) {
64
+ const oldZoom = designerCanvas.zoomFactor;
65
+ const newZoom = isZoomInto ? oldZoom + this._zoomStepSize : oldZoom - this._zoomStepSize;
66
+ designerCanvas.zoomTowardsPoint(endPoint, newZoom);
67
+ }
68
+ else {
69
+ designerCanvas.zoomOntoRectangle(startPoint, endPoint);
70
+ }
71
+ }
72
+ _isPositionEqual(startPoint, endPoint) {
73
+ let tolerance = this._pointerMovementTolerance;
74
+ return Math.abs(startPoint.x - endPoint.x) <= tolerance && Math.abs(startPoint.y - endPoint.y) <= tolerance;
75
+ }
76
+ keyboardEventHandler(designerCanvas, event, currentElement) { }
77
+ dispose() {
78
+ }
79
+ }
@@ -0,0 +1,5 @@
1
+ import { ToolPopupCategoryCollection } from "./designerToolsButtons";
2
+ export declare abstract class DesignerToolRenderer {
3
+ static createToolFromObject(tool: ToolPopupCategoryCollection): ChildNode;
4
+ static createObjectFromTool(tool: HTMLDivElement): ToolPopupCategoryCollection;
5
+ }
@@ -0,0 +1,19 @@
1
+ //TODO: rename, this is no renderer, it's a static class so more a helper
2
+ export class DesignerToolRenderer {
3
+ static createToolFromObject(tool) {
4
+ let template = document.createElement('template');
5
+ template.innerHTML = "<div class='tool' data-command='setTool' data-command-parameter=" + tool.command_parameter + " popup=" + tool.category + " title=" + tool.title + " style='background-image:" + tool.background_url + ";" + (tool.margin ? "margin: " + tool.margin + ";" : "") + "'></div>";
6
+ return template.content.childNodes[0];
7
+ }
8
+ static createObjectFromTool(tool) {
9
+ let collector = {
10
+ category: tool.getAttribute("popup"),
11
+ command: tool.getAttribute("data-command"),
12
+ command_parameter: tool.getAttribute("data-command-parameter"),
13
+ title: tool.getAttribute("title"),
14
+ tool: tool.getAttribute("data-command-parameter"),
15
+ background_url: tool.style.backgroundImage,
16
+ };
17
+ return collector;
18
+ }
19
+ }
@@ -0,0 +1,8 @@
1
+ import { BaseCustomWebComponentConstructorAppend } from "@node-projects/base-custom-webcomponent";
2
+ export declare abstract class DesignerToolbarPopup extends BaseCustomWebComponentConstructorAppend {
3
+ static readonly style: CSSStyleSheet;
4
+ static readonly template: HTMLTemplateElement;
5
+ ready(): void;
6
+ protected _setTitle(title: string): void;
7
+ protected _setContent(elements: HTMLElement[]): void;
8
+ }
@@ -0,0 +1,41 @@
1
+ import { BaseCustomWebComponentConstructorAppend, css, html } from "@node-projects/base-custom-webcomponent";
2
+ export class DesignerToolbarPopup extends BaseCustomWebComponentConstructorAppend {
3
+ static style = css `
4
+ .container {
5
+ width: 150px;
6
+ min-height: 200px;
7
+ color: white;
8
+ background-color: rgb(64, 64, 64);
9
+ border: 1px solid black;
10
+ }
11
+
12
+ header {
13
+ text-align: center;
14
+ }
15
+
16
+ * {
17
+ pointer-events: auto;
18
+ }
19
+ `;
20
+ static template = html `
21
+ <div class="container">
22
+ <header><h2 id="title" style="margin: 0;"></h2></header>
23
+ <main id="content-area"></main>
24
+ </div>
25
+ `;
26
+ //TODO: remove this class,
27
+ // i think the popups need no base, okay if they need one the should at least be normal elmeents
28
+ // and also the expicit popup should set the size, not the base class. maybe one needs to be bigger, one smaller...
29
+ ready() {
30
+ this._setTitle(this.getAttribute("title"));
31
+ }
32
+ _setTitle(title) {
33
+ this._getDomElement("title").innerHTML = title;
34
+ }
35
+ _setContent(elements) {
36
+ let contentArea = this._getDomElement("content-area");
37
+ for (let elem of elements) {
38
+ contentArea.appendChild(elem);
39
+ }
40
+ }
41
+ }
@@ -0,0 +1,9 @@
1
+ import { BaseCustomWebComponentConstructorAppend } from "@node-projects/base-custom-webcomponent";
2
+ export declare class DesignerToolbarPopupToolSelect extends BaseCustomWebComponentConstructorAppend {
3
+ static readonly style: CSSStyleSheet;
4
+ static readonly template: HTMLTemplateElement;
5
+ private _popupToolSelected;
6
+ constructor();
7
+ insertToolContent(template: HTMLTemplateElement): Promise<void>;
8
+ private _setupEventHandler;
9
+ }