@node-projects/web-component-designer 0.0.194 → 0.0.197

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 (43) hide show
  1. package/dist/elements/services/DefaultServiceBootstrap.js +7 -5
  2. package/dist/elements/widgets/designerView/IDesignerCanvas.d.ts +1 -1
  3. package/dist/elements/widgets/designerView/designerCanvas.d.ts +1 -1
  4. package/dist/elements/widgets/designerView/designerCanvas.js +10 -9
  5. package/dist/elements/widgets/designerView/extensions/ExtensionManager.d.ts +6 -6
  6. package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +29 -29
  7. package/dist/elements/widgets/designerView/extensions/GrayOutDragOverContainerExtensionProvider.d.ts +1 -1
  8. package/dist/elements/widgets/designerView/extensions/GrayOutDragOverContainerExtensionProvider.js +1 -1
  9. package/dist/elements/widgets/designerView/extensions/IDesignerExtension.d.ts +2 -2
  10. package/dist/elements/widgets/designerView/extensions/IDesignerExtensionProvider.d.ts +1 -1
  11. package/dist/elements/widgets/designerView/extensions/IExtensionManger.d.ts +6 -6
  12. package/dist/elements/widgets/designerView/extensions/buttons/GridExtensionDesignViewConfigButtons.js +1 -1
  13. package/dist/elements/widgets/designerView/extensions/grid/DisplayGridExtension.d.ts +14 -0
  14. package/dist/elements/widgets/designerView/extensions/grid/DisplayGridExtension.js +53 -0
  15. package/dist/elements/widgets/designerView/extensions/grid/DisplayGridExtensionProvider.d.ts +11 -0
  16. package/dist/elements/widgets/designerView/extensions/grid/DisplayGridExtensionProvider.js +23 -0
  17. package/dist/elements/widgets/designerView/extensions/grid/EditGridExtension.d.ts +51 -0
  18. package/dist/elements/widgets/designerView/extensions/grid/EditGridExtension.js +346 -0
  19. package/dist/elements/widgets/designerView/extensions/grid/EditGridExtensionProvider.d.ts +10 -0
  20. package/dist/elements/widgets/designerView/extensions/grid/EditGridExtensionProvider.js +22 -0
  21. package/dist/elements/widgets/designerView/extensions/grid/GridExtension copy.d.ts +51 -0
  22. package/dist/elements/widgets/designerView/extensions/grid/GridExtension copy.js +346 -0
  23. package/dist/elements/widgets/designerView/extensions/grid/GridExtension.d.ts +51 -0
  24. package/dist/elements/widgets/designerView/extensions/grid/GridExtension.js +346 -0
  25. package/dist/elements/widgets/designerView/extensions/grid/GridExtensionProvider copy.d.ts +11 -0
  26. package/dist/elements/widgets/designerView/extensions/grid/GridExtensionProvider copy.js +22 -0
  27. package/dist/elements/widgets/designerView/extensions/grid/GridExtensionProvider.d.ts +11 -0
  28. package/dist/elements/widgets/designerView/extensions/grid/GridExtensionProvider.js +22 -0
  29. package/dist/elements/widgets/designerView/extensions/logic/ApplyFirstExtensionProvider.d.ts +12 -0
  30. package/dist/elements/widgets/designerView/extensions/logic/ApplyFirstExtensionProvider.js +17 -0
  31. package/dist/elements/widgets/designerView/extensions/logic/ApplyFirstMachingExtensionProvider.d.ts +13 -0
  32. package/dist/elements/widgets/designerView/extensions/logic/ApplyFirstMachingExtensionProvider.js +28 -0
  33. package/dist/elements/widgets/designerView/extensions/logic/DisplayGridExtensionProvider.d.ts +11 -0
  34. package/dist/elements/widgets/designerView/extensions/logic/DisplayGridExtensionProvider.js +23 -0
  35. package/dist/elements/widgets/designerView/extensions/logic/OrCombineContainerProvider.d.ts +12 -0
  36. package/dist/elements/widgets/designerView/extensions/logic/OrCombineContainerProvider.js +17 -0
  37. package/dist/elements/widgets/designerView/overlayLayerView.js +4 -1
  38. package/dist/elements/widgets/designerView/tools/PointerTool.js +7 -7
  39. package/dist/elements/widgets/designerView/tools/TextTool.js +1 -1
  40. package/dist/elements/widgets/treeView/treeViewExtended.js +2 -2
  41. package/dist/index.d.ts +5 -2
  42. package/dist/index.js +5 -2
  43. package/package.json +1 -1
@@ -0,0 +1,346 @@
1
+ import { EventNames } from "../../../../../enums/EventNames.js";
2
+ import { convertCssUnit, convertCssUnitToPixel, getCssUnit } from "../../../../helper/CssUnitConverter.js";
3
+ import { CalculateGridInformation } from "../../../../helper/GridHelper.js";
4
+ import { AbstractExtension } from '../AbstractExtension.js';
5
+ import { OverlayLayer } from "../OverlayLayer.js";
6
+ export class GridExtension extends AbstractExtension {
7
+ _initialPoint;
8
+ _initialSizes;
9
+ _cells;
10
+ _gaps;
11
+ _headers;
12
+ _headerTexts;
13
+ _plusCircles;
14
+ _resizeCircles;
15
+ minPixelSize = 10;
16
+ gridInformation;
17
+ defaultHeaderSize = 20;
18
+ defaultPlusSize = this.defaultHeaderSize * 2 / 3;
19
+ defaultDistanceToBox = 5;
20
+ defaultDistanceBetweenHeaders = 10;
21
+ defaultSizeOfNewRowOrColumn = "50px";
22
+ constructor(extensionManager, designerView, extendedItem) {
23
+ super(extensionManager, designerView, extendedItem);
24
+ }
25
+ extend() {
26
+ this._initSVGArrays();
27
+ this.refresh();
28
+ }
29
+ refresh() {
30
+ this.gridInformation = CalculateGridInformation(this.extendedItem);
31
+ let cells = this.gridInformation.cells;
32
+ if (cells[0][0] && !isNaN(cells[0][0].height) && !isNaN(cells[0][0].width)) {
33
+ if (this.gridInformation.cells.length != this._cells.length || this.gridInformation.cells[0].length != this._cells[0].length)
34
+ this._initSVGArrays();
35
+ //draw gaps
36
+ this.gridInformation.gaps.forEach((gap, i) => {
37
+ this._gaps[i] = this._drawRect(gap.x, gap.y, gap.width, gap.height, 'svg-grid-gap', this._gaps[i], OverlayLayer.Foregorund);
38
+ this._resizeCircles[i] = this._drawResizeCircle(gap, this._resizeCircles[i]);
39
+ });
40
+ //draw cells
41
+ cells.forEach((row, i) => {
42
+ row.forEach((cell, j) => {
43
+ this._cells[i][j] = this._drawRect(cell.x, cell.y, cell.width, cell.height, 'svg-grid', this._cells[i][j], OverlayLayer.Background);
44
+ if (cell.name) {
45
+ const text = this._drawText(cell.name, cell.x, cell.y, 'svg-grid-area', null, OverlayLayer.Background);
46
+ text.setAttribute("dominant-baseline", "hanging");
47
+ }
48
+ });
49
+ });
50
+ //draw headers
51
+ cells.forEach((row, i) => {
52
+ this._headers[0][i] = this._drawHeader(row[0], this._headers[0][i], i, "vertical");
53
+ this._headerTexts[0][i] = this._drawHeaderText(row[0], this._headerTexts[0][i], "vertical");
54
+ });
55
+ cells[0].forEach((column, i) => {
56
+ this._headers[1][i] = this._drawHeader(column, this._headers[1][i], i, "horizontal");
57
+ this._headerTexts[1][i] = this._drawHeaderText(column, this._headerTexts[1][i], "horizontal");
58
+ });
59
+ //draw circles for adding rows/columns
60
+ for (let i = 0; i < this._plusCircles[0].length; i++)
61
+ if (i < this._plusCircles[0].length - 1)
62
+ this._plusCircles[0][i] = this._drawPlusCircle(cells[i][0].x, cells[i][0].y, this._plusCircles[0][i], i, "vertical");
63
+ else
64
+ this._plusCircles[0][i] = this._drawPlusCircle(cells[i - 1][0].x, cells[i - 1][0].y + cells[i - 1][0].height, this._plusCircles[0][i], i, "vertical", true);
65
+ for (let i = 0; i < this._plusCircles[1].length; i++)
66
+ if (i < this._plusCircles[1].length - 1)
67
+ this._plusCircles[1][i] = this._drawPlusCircle(cells[0][i].x, cells[0][i].y, this._plusCircles[1][i], i, "horizontal");
68
+ else
69
+ this._plusCircles[1][i] = this._drawPlusCircle(cells[0][i - 1].x + cells[0][i - 1].width, cells[0][i - 1].y, this._plusCircles[1][i], i, "horizontal", true);
70
+ }
71
+ }
72
+ dispose() {
73
+ this._removeAllOverlays();
74
+ }
75
+ _initSVGArrays() {
76
+ this._removeAllOverlays();
77
+ this.gridInformation = CalculateGridInformation(this.extendedItem);
78
+ this._cells = new Array(this.gridInformation.cells.length);
79
+ this.gridInformation.cells.forEach((row, i) => this._cells[i] = new Array(row.length));
80
+ this._gaps = new Array(this.gridInformation.gaps.length);
81
+ this._headers = new Array(2);
82
+ this._headers[0] = new Array(this.gridInformation.cells.length + 1); //array for the headers of columns
83
+ this._headers[1] = new Array(this.gridInformation.cells[0].length + 1); //array for the headers of rows
84
+ this._headerTexts = new Array(2);
85
+ this._headerTexts[0] = new Array(this.gridInformation.cells.length + 1);
86
+ this._headerTexts[1] = new Array(this.gridInformation.cells[0].length + 1);
87
+ this._plusCircles = new Array(2);
88
+ this._plusCircles[0] = new Array(this.gridInformation.cells.length + 1);
89
+ this._plusCircles[1] = new Array(this.gridInformation.cells[0].length + 1);
90
+ this._resizeCircles = new Array(this.gridInformation.gaps.length);
91
+ }
92
+ _drawResizeCircle(gap, oldCircle) {
93
+ let resizeCircle = this._drawCircle((gap.x + (gap.width / 2)), (gap.y + (gap.height / 2)), 1.5, 'svg-grid-resizer', oldCircle, OverlayLayer.Foregorund);
94
+ resizeCircle.style.pointerEvents = "all";
95
+ resizeCircle.style.cursor = gap.width < gap.height ? "ew-resize" : "ns-resize";
96
+ if (!oldCircle) {
97
+ resizeCircle.addEventListener(EventNames.PointerDown, event => this._pointerActionTypeResize(event, resizeCircle, gap.column, gap.row));
98
+ resizeCircle.addEventListener(EventNames.PointerMove, event => this._pointerActionTypeResize(event, resizeCircle, gap.column, gap.row));
99
+ resizeCircle.addEventListener(EventNames.PointerUp, event => this._pointerActionTypeResize(event, resizeCircle, gap.column, gap.row));
100
+ }
101
+ return resizeCircle;
102
+ }
103
+ _drawHeader(cell, oldHeader, index, alignment) {
104
+ let xOffset;
105
+ let yOffset;
106
+ let width;
107
+ let height;
108
+ if (alignment == "vertical") {
109
+ xOffset = -(this.defaultHeaderSize + this.defaultDistanceToBox);
110
+ yOffset = this.defaultDistanceBetweenHeaders / 2;
111
+ width = this.defaultHeaderSize;
112
+ height = cell.height - this.defaultDistanceBetweenHeaders;
113
+ }
114
+ else {
115
+ xOffset = this.defaultDistanceBetweenHeaders / 2;
116
+ yOffset = -(this.defaultHeaderSize + this.defaultDistanceToBox);
117
+ width = cell.width - this.defaultDistanceBetweenHeaders;
118
+ height = this.defaultHeaderSize;
119
+ }
120
+ let tmpHeader = this._drawRect(cell.x + xOffset, cell.y + yOffset, width, height, "svg-grid-header", oldHeader, OverlayLayer.Foregorund);
121
+ tmpHeader.style.pointerEvents = "all";
122
+ if (!oldHeader) {
123
+ tmpHeader.addEventListener(EventNames.PointerMove, event => {
124
+ this._toggleDisplayPlusCircles(index, alignment, true);
125
+ });
126
+ }
127
+ return tmpHeader;
128
+ }
129
+ _drawHeaderText(cell, oldHeaderText, alignment) {
130
+ let text;
131
+ let xOffset;
132
+ let yOffset;
133
+ if (alignment == "vertical") {
134
+ text = this._getHeaderText(cell.height, cell.initHeightUnit, "height");
135
+ xOffset = -12.5;
136
+ yOffset = cell.height / 2;
137
+ }
138
+ else {
139
+ text = this._getHeaderText(cell.width, cell.initWidthUnit, "width");
140
+ xOffset = cell.width / 2;
141
+ yOffset = -12.5;
142
+ }
143
+ let rText = this._drawText(text, cell.x + xOffset, cell.y + yOffset, null, oldHeaderText, OverlayLayer.Background);
144
+ if (alignment == "vertical")
145
+ rText.setAttribute("transform", "rotate(-90, " + (cell.x + xOffset) + ", " + (cell.y + yOffset) + ")");
146
+ return rText;
147
+ }
148
+ _drawPlusCircle(x, y, oldPlusElement, index, alignment, final = false) {
149
+ let plusElement = { circle: null, verticalLine: null, horizontalLine: null };
150
+ let posX;
151
+ let posY;
152
+ let gapOffset = index == 0 || final ? 0 : -(convertCssUnitToPixel(this.extendedItem.getStyle(alignment == "vertical" ? "row-gap" : "column-gap"), this.extendedItem.element, alignment == "vertical" ? "height" : "width") / 2);
153
+ if (alignment == "vertical") {
154
+ posX = x - this.defaultDistanceToBox - this.defaultHeaderSize / 2;
155
+ posY = y + gapOffset;
156
+ }
157
+ else {
158
+ posX = x + gapOffset;
159
+ posY = y - this.defaultDistanceToBox - this.defaultHeaderSize / 2;
160
+ }
161
+ plusElement.circle = this._drawCircle(posX, posY, this.defaultHeaderSize / 2, 'svg-grid-resizer', oldPlusElement ? oldPlusElement.circle : null, OverlayLayer.Foregorund);
162
+ plusElement.circle.style.pointerEvents = "all";
163
+ plusElement.circle.style.cursor = "pointer";
164
+ plusElement.circle.style.display = "none";
165
+ if (!oldPlusElement) {
166
+ plusElement.circle.addEventListener(EventNames.PointerMove, event => this._toggleDisplayPlusCircles(index, alignment));
167
+ plusElement.circle.addEventListener(EventNames.PointerDown, event => {
168
+ this._editGrid(index, alignment, "add");
169
+ event.stopPropagation();
170
+ });
171
+ }
172
+ plusElement.verticalLine = this._drawLine(posX, posY - this.defaultPlusSize / 2, posX, posY + this.defaultPlusSize / 2, "svg-grid-plus-sign", oldPlusElement ? oldPlusElement.verticalLine : null, OverlayLayer.Foregorund);
173
+ plusElement.verticalLine.style.display = "none";
174
+ plusElement.horizontalLine = this._drawLine(posX - this.defaultPlusSize / 2, posY, posX + this.defaultPlusSize / 2, posY, "svg-grid-plus-sign", oldPlusElement ? oldPlusElement.horizontalLine : null, OverlayLayer.Foregorund);
175
+ plusElement.horizontalLine.style.display = "none";
176
+ return plusElement;
177
+ }
178
+ _getHeaderText(size, unit, percentTarget) {
179
+ return Math.round(parseFloat(this._convertCssUnit(size, this.extendedItem.element, percentTarget, unit)) * 10) / 10 + unit;
180
+ }
181
+ _getInitialSizes() {
182
+ let rX = []; //in pixels
183
+ let rXUnit = []; //original unit
184
+ let rY = []; //in pixels
185
+ let rYUnit = []; //original unit
186
+ this.gridInformation.cells[0].forEach(row => {
187
+ rX.push(row.width);
188
+ rXUnit.push(row.initWidthUnit);
189
+ });
190
+ this.gridInformation.cells.forEach(column => {
191
+ rY.push(column[0].height);
192
+ rYUnit.push(column[0].initHeightUnit);
193
+ });
194
+ return { x: rX, xUnit: rXUnit, y: rY, yUnit: rYUnit };
195
+ }
196
+ _pointerActionTypeResize(event, circle, gapColumn, gapRow) {
197
+ event.stopPropagation();
198
+ switch (event.type) {
199
+ case EventNames.PointerDown:
200
+ circle.setPointerCapture(event.pointerId);
201
+ this._initialPoint = { x: event.clientX, y: event.clientY };
202
+ this._initialSizes = this._getInitialSizes();
203
+ break;
204
+ case EventNames.PointerMove:
205
+ if (this._initialPoint) {
206
+ let elementStyle = this.extendedItem.element.style;
207
+ this.extendedItem.element.getBoundingClientRect;
208
+ if (circle.style.cursor == "ew-resize")
209
+ elementStyle.gridTemplateColumns = this._calculateNewSize(this._initialSizes.x, this._initialSizes.xUnit, (event.clientX - this._initialPoint.x) / this.designerCanvas.zoomFactor, gapColumn, "width");
210
+ else if (circle.style.cursor == "ns-resize")
211
+ elementStyle.gridTemplateRows = this._calculateNewSize(this._initialSizes.y, this._initialSizes.yUnit, (event.clientY - this._initialPoint.y) / this.designerCanvas.zoomFactor, gapRow, "height");
212
+ this.refresh();
213
+ }
214
+ break;
215
+ case EventNames.PointerUp:
216
+ circle.releasePointerCapture(event.pointerId);
217
+ if (circle.style.cursor == "ew-resize")
218
+ this.extendedItem.setStyle("grid-template-columns", this._calculateNewSize(this._initialSizes.x, this._initialSizes.xUnit, (event.clientX - this._initialPoint.x) / this.designerCanvas.zoomFactor, gapColumn, "width", true));
219
+ else if (circle.style.cursor == "ns-resize")
220
+ this.extendedItem.setStyle("grid-template-rows", this._calculateNewSize(this._initialSizes.y, this._initialSizes.yUnit, (event.clientY - this._initialPoint.y) / this.designerCanvas.zoomFactor, gapRow, "height", true));
221
+ this._initialPoint = null;
222
+ this._initialSizes = null;
223
+ this.refresh();
224
+ break;
225
+ }
226
+ }
227
+ _calculateNewSize(iSizes, iUnits, diff, gapIndex, percentTarget, pointerUp = false) {
228
+ let newSizes = [];
229
+ let edited = [];
230
+ for (let i = 0; i < iSizes.length; i++) {
231
+ newSizes.push(i + 1 == gapIndex ? iSizes[i] + diff : i == gapIndex ? iSizes[i] - diff : iSizes[i]);
232
+ edited.push(i + 1 == gapIndex || i == gapIndex);
233
+ }
234
+ for (let i = 0; i < newSizes.length; i++) {
235
+ let index = edited[i + 1] ? i + 1 : edited[i - 1] ? i - 1 : null;
236
+ if (newSizes[i] < 0 && pointerUp) {
237
+ if (confirm("Do you want to delete this " + (percentTarget == "width" ? "column" : "row") + "?")) {
238
+ this._editGrid(i, percentTarget == "width" ? "horizontal" : "vertical", "del");
239
+ newSizes[index] = iSizes[i] + iSizes[index];
240
+ newSizes.splice(i, 1);
241
+ break;
242
+ }
243
+ }
244
+ if (newSizes[i] < this.minPixelSize) {
245
+ newSizes[index] = newSizes[i] + newSizes[index] - this.minPixelSize;
246
+ newSizes[i] = this.minPixelSize;
247
+ break;
248
+ }
249
+ }
250
+ let retVal = "";
251
+ newSizes.forEach((newSize, i) => retVal += this._convertCssUnit(newSize + "px", this.extendedItem.element, percentTarget, iUnits[i]) + ' ');
252
+ return retVal;
253
+ }
254
+ _editGrid(pos, alignment, task) {
255
+ let cellTarget;
256
+ let elementTarget;
257
+ if (alignment == "vertical") {
258
+ cellTarget = "grid-template-rows";
259
+ elementTarget = "height";
260
+ }
261
+ else {
262
+ cellTarget = "grid-template-columns";
263
+ elementTarget = "width";
264
+ }
265
+ let sizes = this.extendedItem.getStyle(cellTarget).split(' ');
266
+ if (task == "add")
267
+ sizes.splice(pos, 0, this.defaultSizeOfNewRowOrColumn);
268
+ else
269
+ sizes.splice(pos, 1);
270
+ this.extendedItem.setStyle(cellTarget, sizes.join(' '));
271
+ if (task == "add") {
272
+ this.extendedItem.setStyle(elementTarget, convertCssUnit(this._calculateNewElementSize(elementTarget), this.designerCanvas.canvas, elementTarget, getCssUnit(this.extendedItem.getStyle(elementTarget))));
273
+ }
274
+ else {
275
+ this.extendedItem.setStyle(elementTarget, convertCssUnit(convertCssUnitToPixel(this.extendedItem.getStyle(elementTarget), this.designerCanvas.canvas, elementTarget) - convertCssUnitToPixel(this.extendedItem.getStyle(alignment == "vertical" ? "row-gap" : "column-gap"), this.extendedItem.element, elementTarget), this.designerCanvas.canvas, elementTarget, getCssUnit(this.extendedItem.getStyle(elementTarget))));
276
+ }
277
+ }
278
+ _calculateNewElementSize(elementTarget) {
279
+ let gc = CalculateGridInformation(this.extendedItem);
280
+ let tmpSize = 0;
281
+ if (elementTarget == "width") {
282
+ gc.cells[0].forEach(cell => { tmpSize += cell.width; });
283
+ tmpSize += convertCssUnitToPixel(this.extendedItem.getStyle("column-gap"), this.extendedItem.element, elementTarget) * (gc.cells[0].length - 1);
284
+ }
285
+ else {
286
+ gc.cells.forEach(row => { tmpSize += row[0].height; });
287
+ tmpSize += convertCssUnitToPixel(this.extendedItem.getStyle("row-gap"), this.extendedItem.element, elementTarget) * (gc.cells.length - 1);
288
+ }
289
+ return tmpSize + "px";
290
+ }
291
+ _toggleDisplayPlusCircles(index, alignment, double = false) {
292
+ this._plusCircles.forEach(alignment => {
293
+ alignment.forEach(element => {
294
+ element.circle.style.display = "none";
295
+ element.verticalLine.style.display = "none";
296
+ element.horizontalLine.style.display = "none";
297
+ });
298
+ });
299
+ if (index != -1) {
300
+ this._plusCircles[alignment == "vertical" ? 0 : 1][index].circle.style.display = "inline";
301
+ this._plusCircles[alignment == "vertical" ? 0 : 1][index].verticalLine.style.display = "inline";
302
+ this._plusCircles[alignment == "vertical" ? 0 : 1][index].horizontalLine.style.display = "inline";
303
+ if (double) {
304
+ this._plusCircles[alignment == "vertical" ? 0 : 1][index + 1].circle.style.display = "inline";
305
+ this._plusCircles[alignment == "vertical" ? 0 : 1][index + 1].verticalLine.style.display = "inline";
306
+ this._plusCircles[alignment == "vertical" ? 0 : 1][index + 1].horizontalLine.style.display = "inline";
307
+ }
308
+ }
309
+ }
310
+ _convertCssUnit(cssValue, target, percentTarget, unit) {
311
+ if (unit == "fr") {
312
+ let containerSize = convertCssUnitToPixel(target.style.width, target, percentTarget);
313
+ let amountGaps = percentTarget == "height" ? this.gridInformation.cells.length - 1 : this.gridInformation.cells[0].length - 1;
314
+ let gapSize = convertCssUnitToPixel(percentTarget == "width" ? target.style.columnGap : target.style.rowGap, target, percentTarget);
315
+ let containerSizeWithoutGaps = containerSize - gapSize * amountGaps;
316
+ let amountFrSizes = 0;
317
+ let leftOver = containerSizeWithoutGaps;
318
+ if (percentTarget == "width") {
319
+ this.gridInformation.cells[0].forEach((column, i) => {
320
+ if (column.initWidthUnit == "fr")
321
+ amountFrSizes++;
322
+ else
323
+ leftOver -= column.width;
324
+ });
325
+ }
326
+ else {
327
+ this.gridInformation.cells.forEach((row, i) => {
328
+ if (row[0].initHeightUnit == "fr")
329
+ amountFrSizes++;
330
+ else
331
+ leftOver -= row[0].height;
332
+ });
333
+ }
334
+ let frRatio = leftOver / amountFrSizes;
335
+ if (typeof cssValue == "number") {
336
+ //expected Value in Pixel
337
+ return (cssValue / frRatio) + "fr";
338
+ }
339
+ else {
340
+ return (convertCssUnitToPixel(cssValue, target, percentTarget) / frRatio) + "fr";
341
+ }
342
+ }
343
+ else
344
+ return convertCssUnit(cssValue, target, percentTarget, unit);
345
+ }
346
+ }
@@ -0,0 +1,11 @@
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 const gridExtensionShowOverlayOptionName = "gridExtensionShowOverlay";
7
+ export declare class GridExtensionProvider implements IDesignerExtensionProvider {
8
+ shouldExtend(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): boolean;
9
+ getExtension(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
10
+ readonly style: CSSStyleSheet;
11
+ }
@@ -0,0 +1,22 @@
1
+ import { GridExtension } from './GridExtension.js';
2
+ import { css } from "@node-projects/base-custom-webcomponent";
3
+ export const gridExtensionShowOverlayOptionName = 'gridExtensionShowOverlay';
4
+ export class GridExtensionProvider {
5
+ shouldExtend(extensionManager, designerCanvas, designItem) {
6
+ const display = getComputedStyle(designItem.element).display;
7
+ if (display == 'grid' || display == 'inline-grid')
8
+ return designerCanvas.instanceServiceContainer.designContext.extensionOptions[gridExtensionShowOverlayOptionName] !== false;
9
+ return false;
10
+ }
11
+ getExtension(extensionManager, designerCanvas, designItem) {
12
+ return new GridExtension(extensionManager, designerCanvas, designItem);
13
+ }
14
+ style = css `
15
+ .svg-grid { stroke: orange; stroke-dasharray: 5; fill: #ff944722; }
16
+ .svg-grid-area { font-size: 8px; }
17
+ .svg-grid-gap { stroke: orange; stroke-dasharray: 5; fill: #0000ff22; }
18
+ .svg-grid-resizer { fill: white; stroke: #3899ec; }
19
+ .svg-grid-header { fill: #ff944722; stroke: orange; }
20
+ .svg-grid-plus-sign { stroke: black; }
21
+ `;
22
+ }
@@ -0,0 +1,11 @@
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 const gridExtensionShowOverlayOptionName = "gridExtensionShowOverlay";
7
+ export declare class GridExtensionProvider implements IDesignerExtensionProvider {
8
+ shouldExtend(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): boolean;
9
+ getExtension(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
10
+ readonly style: CSSStyleSheet;
11
+ }
@@ -0,0 +1,22 @@
1
+ import { GridExtension } from './EditGridExtension.js';
2
+ import { css } from "@node-projects/base-custom-webcomponent";
3
+ export const gridExtensionShowOverlayOptionName = 'gridExtensionShowOverlay';
4
+ export class GridExtensionProvider {
5
+ shouldExtend(extensionManager, designerCanvas, designItem) {
6
+ const display = getComputedStyle(designItem.element).display;
7
+ if (display == 'grid' || display == 'inline-grid')
8
+ return designerCanvas.instanceServiceContainer.designContext.extensionOptions[gridExtensionShowOverlayOptionName] !== false;
9
+ return false;
10
+ }
11
+ getExtension(extensionManager, designerCanvas, designItem) {
12
+ return new GridExtension(extensionManager, designerCanvas, designItem);
13
+ }
14
+ style = css `
15
+ .svg-grid { stroke: orange; stroke-dasharray: 5; fill: #ff944722; }
16
+ .svg-grid-area { font-size: 8px; }
17
+ .svg-grid-gap { stroke: orange; stroke-dasharray: 5; fill: #0000ff22; }
18
+ .svg-grid-resizer { fill: white; stroke: #3899ec; }
19
+ .svg-grid-header { fill: #ff944722; stroke: orange; }
20
+ .svg-grid-plus-sign { stroke: black; }
21
+ `;
22
+ }
@@ -0,0 +1,12 @@
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 ApplyFirstMachingExtensionProvider implements IDesignerExtensionProvider {
7
+ private extensions;
8
+ private extIndex;
9
+ constructor(...extensions: IDesignerExtensionProvider[]);
10
+ shouldExtend(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): boolean;
11
+ getExtension(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
12
+ }
@@ -0,0 +1,17 @@
1
+ export class ApplyFirstMachingExtensionProvider {
2
+ extensions;
3
+ extIndex;
4
+ constructor(...extensions) {
5
+ this.extensions = extensions;
6
+ }
7
+ shouldExtend(extensionManager, designerCanvas, designItem) {
8
+ for (this.extIndex = 0; this.extIndex++; this.extIndex < this.extensions.length) {
9
+ if (this.extensions[this.extIndex].shouldExtend(extensionManager, designerCanvas, designItem))
10
+ return true;
11
+ }
12
+ return false;
13
+ }
14
+ getExtension(extensionManager, designerCanvas, designItem) {
15
+ return this.extensions[this.extIndex].getExtension(extensionManager, designerCanvas, designItem);
16
+ }
17
+ }
@@ -0,0 +1,13 @@
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 ApplyFirstMachingExtensionProvider implements IDesignerExtensionProvider {
7
+ private extensions;
8
+ private extIndex;
9
+ style: CSSStyleSheet[];
10
+ constructor(...extensions: IDesignerExtensionProvider[]);
11
+ shouldExtend(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): boolean;
12
+ getExtension(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
13
+ }
@@ -0,0 +1,28 @@
1
+ export class ApplyFirstMachingExtensionProvider {
2
+ extensions;
3
+ extIndex;
4
+ style;
5
+ constructor(...extensions) {
6
+ this.extensions = extensions;
7
+ for (let e of extensions) {
8
+ if (e.style) {
9
+ if (!this.style)
10
+ this.style = [];
11
+ if (Array.isArray(e.style))
12
+ this.style.push(...e.style);
13
+ else
14
+ this.style.push(e.style);
15
+ }
16
+ }
17
+ }
18
+ shouldExtend(extensionManager, designerCanvas, designItem) {
19
+ for (this.extIndex = 0; this.extIndex < this.extensions.length; this.extIndex++) {
20
+ if (this.extensions[this.extIndex].shouldExtend(extensionManager, designerCanvas, designItem))
21
+ return true;
22
+ }
23
+ return false;
24
+ }
25
+ getExtension(extensionManager, designerCanvas, designItem) {
26
+ return this.extensions[this.extIndex].getExtension(extensionManager, designerCanvas, designItem);
27
+ }
28
+ }
@@ -0,0 +1,11 @@
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 const gridExtensionShowOverlayOptionName = "gridExtensionShowOverlay";
7
+ export declare class DisplayGridExtensionProvider implements IDesignerExtensionProvider {
8
+ shouldExtend(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): boolean;
9
+ getExtension(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
10
+ readonly style: CSSStyleSheet;
11
+ }
@@ -0,0 +1,23 @@
1
+ import { css } from "@node-projects/base-custom-webcomponent";
2
+ import { DisplayGridExtension } from './DisplayGridExtension.js';
3
+ export const gridExtensionShowOverlayOptionName = 'gridExtensionShowOverlay';
4
+ export class DisplayGridExtensionProvider {
5
+ shouldExtend(extensionManager, designerCanvas, designItem) {
6
+ const display = getComputedStyle(designItem.element).display;
7
+ if (display == 'grid' || display == 'inline-grid')
8
+ return designerCanvas.instanceServiceContainer.designContext.extensionOptions[gridExtensionShowOverlayOptionName] !== false;
9
+ return false;
10
+ }
11
+ getExtension(extensionManager, designerCanvas, designItem) {
12
+ return new DisplayGridExtension(extensionManager, designerCanvas, designItem);
13
+ }
14
+ style = css `
15
+ .svg-grid { stroke: orange; stroke-dasharray: 5; fill: #ff944722; }
16
+ .svg-grid-current-cell { stroke: orange; stroke-dasharray: 5; fill: #e3ff4722; }
17
+ .svg-grid-area { font-size: 8px; }
18
+ .svg-grid-gap { stroke: orange; stroke-dasharray: 5; fill: #0000ff22; }
19
+ .svg-grid-resizer { fill: white; stroke: #3899ec; }
20
+ .svg-grid-header { fill: #ff944722; stroke: orange; }
21
+ .svg-grid-plus-sign { stroke: black; }
22
+ `;
23
+ }
@@ -0,0 +1,12 @@
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 ApplyFirstExtensionProvider implements IDesignerExtensionProvider {
7
+ private extensions;
8
+ private extIndex;
9
+ constructor(...extensions: IDesignerExtensionProvider[]);
10
+ shouldExtend(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): boolean;
11
+ getExtension(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
12
+ }
@@ -0,0 +1,17 @@
1
+ export class ApplyFirstExtensionProvider {
2
+ extensions;
3
+ extIndex;
4
+ constructor(...extensions) {
5
+ this.extensions = extensions;
6
+ }
7
+ shouldExtend(extensionManager, designerCanvas, designItem) {
8
+ for (this.extIndex = 0; this.extIndex++; this.extIndex < this.extensions.length) {
9
+ if (this.extensions[this.extIndex].shouldExtend(extensionManager, designerCanvas, designItem))
10
+ return true;
11
+ }
12
+ return false;
13
+ }
14
+ getExtension(extensionManager, designerCanvas, designItem) {
15
+ return this.extensions[this.extIndex].getExtension(extensionManager, designerCanvas, designItem);
16
+ }
17
+ }
@@ -45,7 +45,10 @@ export class OverlayLayerView extends BaseCustomWebComponentConstructorAppend {
45
45
  for (const extList of this._serviceContainer.designerExtensions) {
46
46
  for (const ext of extList[1]) {
47
47
  if (ext.style) {
48
- styles.push(ext.style);
48
+ if (Array.isArray(ext.style))
49
+ styles.push(...ext.style);
50
+ else
51
+ styles.push(ext.style);
49
52
  }
50
53
  }
51
54
  }
@@ -234,7 +234,7 @@ export class PointerTool {
234
234
  const dragItem = this._actionStartedDesignItem.parent;
235
235
  if (this._dragExtensionItem != dragItem) {
236
236
  designerCanvas.extensionManager.removeExtension(this._dragExtensionItem, ExtensionType.ContainerDrag);
237
- designerCanvas.extensionManager.applyExtension(dragItem, ExtensionType.ContainerDrag);
237
+ designerCanvas.extensionManager.applyExtension(dragItem, ExtensionType.ContainerDrag, event);
238
238
  this._dragExtensionItem = dragItem;
239
239
  }
240
240
  else {
@@ -249,11 +249,11 @@ export class PointerTool {
249
249
  if (newContainerElementDesignItem != null) {
250
250
  if (this._dragOverExtensionItem != newContainerElementDesignItem) {
251
251
  designerCanvas.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.ContainerDragOver);
252
- designerCanvas.extensionManager.applyExtension(newContainerElementDesignItem, ExtensionType.ContainerDragOver);
252
+ designerCanvas.extensionManager.applyExtension(newContainerElementDesignItem, ExtensionType.ContainerDragOver, event);
253
253
  this._dragOverExtensionItem = newContainerElementDesignItem;
254
254
  }
255
255
  else {
256
- designerCanvas.extensionManager.refreshExtension(newContainerElementDesignItem, ExtensionType.ContainerDragOver);
256
+ designerCanvas.extensionManager.refreshExtension(newContainerElementDesignItem, ExtensionType.ContainerDragOver, event);
257
257
  }
258
258
  }
259
259
  else {
@@ -281,14 +281,14 @@ export class PointerTool {
281
281
  for (const item of this._actionStartedDesignItems) {
282
282
  designerCanvas.extensionManager.removeExtension(item, ExtensionType.Placement);
283
283
  designerCanvas.extensionManager.removeExtension(item, ExtensionType.MouseOver);
284
- designerCanvas.extensionManager.applyExtension(item, ExtensionType.Placement);
284
+ designerCanvas.extensionManager.applyExtension(item, ExtensionType.Placement, event);
285
285
  }
286
286
  currentContainerService.startPlace(event, designerCanvas, this._actionStartedDesignItem.parent, this._initialPoint, this._initialOffset, cp, this._actionStartedDesignItems);
287
287
  this._started = true;
288
288
  }
289
289
  currentContainerService.place(event, designerCanvas, this._actionStartedDesignItem.parent, this._initialPoint, this._initialOffset, cp, this._actionStartedDesignItems);
290
290
  }
291
- designerCanvas.extensionManager.refreshExtensions(this._actionStartedDesignItems);
291
+ designerCanvas.extensionManager.refreshExtensions(this._actionStartedDesignItems, null, event);
292
292
  }
293
293
  }
294
294
  break;
@@ -316,7 +316,7 @@ export class PointerTool {
316
316
  this._changeGroup.commit();
317
317
  this._changeGroup = null;
318
318
  for (const item of this._actionStartedDesignItems) {
319
- designerCanvas.extensionManager.applyExtension(item, ExtensionType.MouseOver);
319
+ designerCanvas.extensionManager.applyExtension(item, ExtensionType.MouseOver, event);
320
320
  designerCanvas.extensionManager.removeExtension(item, ExtensionType.Placement);
321
321
  }
322
322
  }
@@ -326,7 +326,7 @@ export class PointerTool {
326
326
  this._dragOverExtensionItem = null;
327
327
  this._moveItemsOffset = { x: 0, y: 0 };
328
328
  }
329
- designerCanvas.extensionManager.refreshExtensions(designerCanvas.instanceServiceContainer.selectionService.selectedElements);
329
+ designerCanvas.extensionManager.refreshExtensions(designerCanvas.instanceServiceContainer.selectionService.selectedElements, null, event);
330
330
  if (this._changeGroup) {
331
331
  this._changeGroup.abort();
332
332
  this._changeGroup = null;
@@ -31,7 +31,7 @@ export class TextTool {
31
31
  //todo: Maybe we could also remove the eatEvents property
32
32
  //TODO - don't apply doubleclick extension (maybe it is not the doubleclick one) - apply edit text extesion directly
33
33
  //should we configure the editTextExtension anywhere??
34
- this._textEditExtensions = designerCanvas.extensionManager.applyExtension(di, ExtensionType.Doubleclick);
34
+ this._textEditExtensions = designerCanvas.extensionManager.applyExtension(di, ExtensionType.Doubleclick, event);
35
35
  setTimeout(() => { span.focus(); }, 50);
36
36
  }
37
37
  else {