@node-projects/web-component-designer 0.1.347 → 0.1.350

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 (61) hide show
  1. package/dist/elements/helper/CssCombiner.d.ts +9 -0
  2. package/dist/elements/helper/CssCombiner.js +147 -7
  3. package/dist/elements/helper/CssCombiner.js.map +1 -1
  4. package/dist/elements/helper/Helper.js +3 -1
  5. package/dist/elements/helper/Helper.js.map +1 -1
  6. package/dist/elements/helper/LayoutHelper.js +44 -4
  7. package/dist/elements/helper/LayoutHelper.js.map +1 -1
  8. package/dist/elements/helper/PopupHelper.d.ts +1 -0
  9. package/dist/elements/helper/PopupHelper.js +51 -0
  10. package/dist/elements/helper/PopupHelper.js.map +1 -0
  11. package/dist/elements/helper/SelectionHelper.d.ts +2 -2
  12. package/dist/elements/helper/SelectionHelper.js +22 -9
  13. package/dist/elements/helper/SelectionHelper.js.map +1 -1
  14. package/dist/elements/helper/contextMenu/ContextMenu.js +11 -1
  15. package/dist/elements/helper/contextMenu/ContextMenu.js.map +1 -1
  16. package/dist/elements/helper/contextMenu/IContextMenuItem.d.ts +2 -1
  17. package/dist/elements/helper/contextMenu/IContextMenuItem.js.map +1 -1
  18. package/dist/elements/services/DefaultServiceBootstrap.js +4 -3
  19. package/dist/elements/services/DefaultServiceBootstrap.js.map +1 -1
  20. package/dist/elements/services/copyPasteService/CopyPasteAsJsonService.d.ts +3 -0
  21. package/dist/elements/services/copyPasteService/CopyPasteAsJsonService.js +41 -27
  22. package/dist/elements/services/copyPasteService/CopyPasteAsJsonService.js.map +1 -1
  23. package/dist/elements/services/copyPasteService/CopyPasteService.js +1 -1
  24. package/dist/elements/services/copyPasteService/CopyPasteService.js.map +1 -1
  25. package/dist/elements/services/copyPasteService/PasteFormatSnapshot.d.ts +18 -0
  26. package/dist/elements/services/copyPasteService/PasteFormatSnapshot.js +87 -0
  27. package/dist/elements/services/copyPasteService/PasteFormatSnapshot.js.map +1 -0
  28. package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService.d.ts +4 -2
  29. package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService.js +29 -9
  30. package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService.js.map +1 -1
  31. package/dist/elements/services/htmlWriterService/HtmlWriterService.d.ts +6 -2
  32. package/dist/elements/services/htmlWriterService/HtmlWriterService.js +48 -22
  33. package/dist/elements/services/htmlWriterService/HtmlWriterService.js.map +1 -1
  34. package/dist/elements/services/propertiesService/IEditorTypesService.d.ts +1 -1
  35. package/dist/elements/widgets/designerView/DomConverter.d.ts +1 -1
  36. package/dist/elements/widgets/designerView/designerCanvas.js +2 -2
  37. package/dist/elements/widgets/designerView/designerCanvas.js.map +1 -1
  38. package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.d.ts +30 -2
  39. package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.js +390 -9
  40. package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.js.map +1 -1
  41. package/dist/elements/widgets/designerView/extensions/contextMenu/PasteFormatContextMenu.d.ts +11 -0
  42. package/dist/elements/widgets/designerView/extensions/contextMenu/PasteFormatContextMenu.js +62 -0
  43. package/dist/elements/widgets/designerView/extensions/contextMenu/PasteFormatContextMenu.js.map +1 -0
  44. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtension.d.ts +20 -0
  45. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtension.js +412 -19
  46. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtension.js.map +1 -1
  47. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtensionProvider.d.ts +1 -0
  48. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtensionProvider.js +16 -0
  49. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtensionProvider.js.map +1 -1
  50. package/dist/elements/widgets/designerView/tools/DrawPathTool.d.ts +8 -5
  51. package/dist/elements/widgets/designerView/tools/DrawPathTool.js +50 -36
  52. package/dist/elements/widgets/designerView/tools/DrawPathTool.js.map +1 -1
  53. package/dist/elements/widgets/designerView/tools/ITool.d.ts +1 -1
  54. package/dist/index-min.js +13 -6
  55. package/dist/index-min.js.map +4 -4
  56. package/dist/index.d.ts +17 -2
  57. package/dist/index.js +17 -2
  58. package/dist/index.js.map +1 -1
  59. package/package.json +1 -1
  60. package/tests/CssCombiner.test.ts +340 -0
  61. package/tests/PasteFormatSnapshot.test.ts +92 -0
package/dist/index.d.ts CHANGED
@@ -8,6 +8,7 @@ export * from "./elements/helper/ObservedCustomElementsRegistry.js";
8
8
  export * from "./elements/helper/ElementHelper.js";
9
9
  export * from "./elements/helper/IndentedTextWriter.js";
10
10
  export * from "./elements/helper/PathDataPolyfill.js";
11
+ export * from "./elements/helper/PopupHelper.js";
11
12
  export * from "./elements/helper/Screenshot.js";
12
13
  export * from "./elements/helper/ClipboardHelper.js";
13
14
  export * from "./elements/helper/TouchGestureHelper.js";
@@ -53,6 +54,7 @@ export type { IContentService } from "./elements/services/contentService/IConten
53
54
  export * from "./elements/services/copyPasteService/CopyPasteService.js";
54
55
  export * from "./elements/services/copyPasteService/CopyPasteAsJsonService.js";
55
56
  export type { ICopyPasteService } from "./elements/services/copyPasteService/ICopyPasteService.js";
57
+ export * from "./elements/services/copyPasteService/PasteFormatSnapshot.js";
56
58
  export * from "./elements/services/deletionService/DeletionService.js";
57
59
  export type { IDeletionService } from "./elements/services/deletionService/IDeletionService.js";
58
60
  export * from "./elements/services/demoProviderService/IframeDemoProviderService.js";
@@ -250,8 +252,20 @@ export * from "./elements/widgets/designerView/extensions/MultipleSelectionRectE
250
252
  export * from "./elements/widgets/designerView/extensions/MultipleSelectionRectExtensionProvider.js";
251
253
  export * from "./elements/widgets/designerView/extensions/svg/SvgElementExtension.js";
252
254
  export * from "./elements/widgets/designerView/extensions/svg/SvgElementExtensionProvider.js";
253
- export * from "./elements/widgets/designerView/extensions/svg/PathExtension.js";
254
- export * from "./elements/widgets/designerView/extensions/svg/PathExtensionProvider.js";
255
+ export * from "./elements/widgets/designerView/extensions/svg/UnifiedGeometryExtension.js";
256
+ export * from "./elements/widgets/designerView/extensions/svg/UnifiedGeometryExtensionProvider.js";
257
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/IGeometry.js";
258
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/GeometryReaderFactory.js";
259
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/SvgPathGeometryReader.js";
260
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/SvgRectGeometryReader.js";
261
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/SvgLineGeometryReader.js";
262
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/SvgEllipseGeometryReader.js";
263
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/SvgCircleGeometryReader.js";
264
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/SvgPolygonGeometryReader.js";
265
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/SvgPolylineGeometryReader.js";
266
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/CssClipPathGeometryReader.js";
267
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/CssShapeOutsideGeometryReader.js";
268
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/CssOffsetPathGeometryReader.js";
255
269
  export * from "./elements/widgets/designerView/extensions/PositionExtension.js";
256
270
  export * from "./elements/widgets/designerView/extensions/PositionExtensionProvider.js";
257
271
  export * from "./elements/widgets/designerView/extensions/ElementDragTitleExtension.js";
@@ -313,6 +327,7 @@ export * from "./elements/widgets/designerView/extensions/contextMenu/ZoomToElem
313
327
  export * from "./elements/widgets/designerView/extensions/contextMenu/JumpToElementContextMenu.js";
314
328
  export * from "./elements/widgets/designerView/extensions/contextMenu/AlignItemsContextMenu.js";
315
329
  export * from "./elements/widgets/designerView/extensions/contextMenu/ForceCssContextMenu.js";
330
+ export * from "./elements/widgets/designerView/extensions/contextMenu/PasteFormatContextMenu.js";
316
331
  export type { IDesignerPointerExtension } from "./elements/widgets/designerView/extensions/pointerExtensions/IDesignerPointerExtension.js";
317
332
  export type { IDesignerPointerExtensionProvider } from "./elements/widgets/designerView/extensions/pointerExtensions/IDesignerPointerExtensionProvider.js";
318
333
  export * from "./elements/widgets/designerView/extensions/pointerExtensions/AbstractDesignerPointerExtension.js";
package/dist/index.js CHANGED
@@ -8,6 +8,7 @@ export * from "./elements/helper/ObservedCustomElementsRegistry.js";
8
8
  export * from "./elements/helper/ElementHelper.js";
9
9
  export * from "./elements/helper/IndentedTextWriter.js";
10
10
  export * from "./elements/helper/PathDataPolyfill.js";
11
+ export * from "./elements/helper/PopupHelper.js";
11
12
  export * from "./elements/helper/Screenshot.js";
12
13
  export * from "./elements/helper/ClipboardHelper.js";
13
14
  export * from "./elements/helper/TouchGestureHelper.js";
@@ -38,6 +39,7 @@ export * from "./elements/services/elementAtPointService/ElementAtPointService.j
38
39
  export * from "./elements/services/contentService/ContentService.js";
39
40
  export * from "./elements/services/copyPasteService/CopyPasteService.js";
40
41
  export * from "./elements/services/copyPasteService/CopyPasteAsJsonService.js";
42
+ export * from "./elements/services/copyPasteService/PasteFormatSnapshot.js";
41
43
  export * from "./elements/services/deletionService/DeletionService.js";
42
44
  export * from "./elements/services/demoProviderService/IframeDemoProviderService.js";
43
45
  export * from "./elements/services/demoProviderService/SimpleDemoProviderService.js";
@@ -186,8 +188,20 @@ export * from "./elements/widgets/designerView/extensions/MultipleSelectionRectE
186
188
  export * from "./elements/widgets/designerView/extensions/MultipleSelectionRectExtensionProvider.js";
187
189
  export * from "./elements/widgets/designerView/extensions/svg/SvgElementExtension.js";
188
190
  export * from "./elements/widgets/designerView/extensions/svg/SvgElementExtensionProvider.js";
189
- export * from "./elements/widgets/designerView/extensions/svg/PathExtension.js";
190
- export * from "./elements/widgets/designerView/extensions/svg/PathExtensionProvider.js";
191
+ export * from "./elements/widgets/designerView/extensions/svg/UnifiedGeometryExtension.js";
192
+ export * from "./elements/widgets/designerView/extensions/svg/UnifiedGeometryExtensionProvider.js";
193
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/IGeometry.js";
194
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/GeometryReaderFactory.js";
195
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/SvgPathGeometryReader.js";
196
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/SvgRectGeometryReader.js";
197
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/SvgLineGeometryReader.js";
198
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/SvgEllipseGeometryReader.js";
199
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/SvgCircleGeometryReader.js";
200
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/SvgPolygonGeometryReader.js";
201
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/SvgPolylineGeometryReader.js";
202
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/CssClipPathGeometryReader.js";
203
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/CssShapeOutsideGeometryReader.js";
204
+ export * from "./elements/widgets/designerView/extensions/svg/geometry/CssOffsetPathGeometryReader.js";
191
205
  export * from "./elements/widgets/designerView/extensions/PositionExtension.js";
192
206
  export * from "./elements/widgets/designerView/extensions/PositionExtensionProvider.js";
193
207
  export * from "./elements/widgets/designerView/extensions/ElementDragTitleExtension.js";
@@ -247,6 +261,7 @@ export * from "./elements/widgets/designerView/extensions/contextMenu/ZoomToElem
247
261
  export * from "./elements/widgets/designerView/extensions/contextMenu/JumpToElementContextMenu.js";
248
262
  export * from "./elements/widgets/designerView/extensions/contextMenu/AlignItemsContextMenu.js";
249
263
  export * from "./elements/widgets/designerView/extensions/contextMenu/ForceCssContextMenu.js";
264
+ export * from "./elements/widgets/designerView/extensions/contextMenu/PasteFormatContextMenu.js";
250
265
  export * from "./elements/widgets/designerView/extensions/pointerExtensions/AbstractDesignerPointerExtension.js";
251
266
  export * from "./elements/widgets/designerView/extensions/pointerExtensions/CursorLinePointerExtension.js";
252
267
  export * from "./elements/widgets/designerView/extensions/pointerExtensions/CursorLinePointerExtensionProvider.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "description": "A WYSIWYG designer webcomponent for html components",
3
3
  "name": "@node-projects/web-component-designer",
4
- "version": "0.1.347",
4
+ "version": "0.1.350",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "jochen.kuehner@gmx.de",
@@ -0,0 +1,340 @@
1
+ import { afterAll, afterEach, beforeAll, beforeEach, expect, test } from '@jest/globals';
2
+
3
+ const camelToDashCase = (text: string) => text.replace(/([A-Z])/g, (g) => `-${g[0].toLowerCase()}`);
4
+
5
+ const compressBoxValues = (top: string, right: string, bottom: string, left: string) => {
6
+ if (top === right && top === bottom && top === left)
7
+ return top;
8
+ if (top === bottom && right === left)
9
+ return `${top} ${right}`;
10
+ if (right === left)
11
+ return `${top} ${right} ${bottom}`;
12
+ return `${top} ${right} ${bottom} ${left}`;
13
+ };
14
+
15
+ const expandBoxValues = (value: string) => {
16
+ const values = value.trim().split(/\s+/);
17
+ if (values.length === 1)
18
+ return [values[0], values[0], values[0], values[0]];
19
+ if (values.length === 2)
20
+ return [values[0], values[1], values[0], values[1]];
21
+ if (values.length === 3)
22
+ return [values[0], values[1], values[2], values[1]];
23
+ return [values[0], values[1], values[2], values[3]];
24
+ };
25
+
26
+ class FakeStyleStore {
27
+ private declarations = new Map<string, string>();
28
+
29
+ reset() {
30
+ this.declarations.clear();
31
+ }
32
+
33
+ setProperty(name: string, value: string) {
34
+ this.declarations.set(name, value);
35
+ }
36
+
37
+ getPropertyValue(name: string) {
38
+ const directValue = this.declarations.get(name);
39
+ if (directValue != null)
40
+ return directValue;
41
+
42
+ const boxSideMap: Record<string, [string, number]> = {
43
+ 'margin-top': ['margin', 0],
44
+ 'margin-right': ['margin', 1],
45
+ 'margin-bottom': ['margin', 2],
46
+ 'margin-left': ['margin', 3],
47
+ 'padding-top': ['padding', 0],
48
+ 'padding-right': ['padding', 1],
49
+ 'padding-bottom': ['padding', 2],
50
+ 'padding-left': ['padding', 3],
51
+ 'top': ['inset', 0],
52
+ 'right': ['inset', 1],
53
+ 'bottom': ['inset', 2],
54
+ 'left': ['inset', 3],
55
+ 'border-top-width': ['border-width', 0],
56
+ 'border-right-width': ['border-width', 1],
57
+ 'border-bottom-width': ['border-width', 2],
58
+ 'border-left-width': ['border-width', 3],
59
+ 'border-top-style': ['border-style', 0],
60
+ 'border-right-style': ['border-style', 1],
61
+ 'border-bottom-style': ['border-style', 2],
62
+ 'border-left-style': ['border-style', 3],
63
+ 'border-top-color': ['border-color', 0],
64
+ 'border-right-color': ['border-color', 1],
65
+ 'border-bottom-color': ['border-color', 2],
66
+ 'border-left-color': ['border-color', 3]
67
+ };
68
+
69
+ const boxSide = boxSideMap[name];
70
+ if (boxSide) {
71
+ const boxValue = this.declarations.get(boxSide[0]);
72
+ if (boxValue != null)
73
+ return expandBoxValues(boxValue)[boxSide[1]];
74
+ }
75
+
76
+ const gap = this.declarations.get('gap');
77
+ if (gap && (name === 'row-gap' || name === 'column-gap')) {
78
+ const [rowGap, columnGap = rowGap] = gap.trim().split(/\s+/, 2);
79
+ return name === 'row-gap' ? rowGap : columnGap;
80
+ }
81
+
82
+ const flexFlow = this.declarations.get('flex-flow');
83
+ if (flexFlow && (name === 'flex-direction' || name === 'flex-wrap')) {
84
+ const [flexDirection = '', flexWrap = ''] = flexFlow.trim().split(/\s+/, 2);
85
+ return name === 'flex-direction' ? flexDirection : flexWrap;
86
+ }
87
+
88
+ const placeContent = this.declarations.get('place-content');
89
+ if (placeContent && (name === 'align-content' || name === 'justify-content')) {
90
+ const [alignContent = '', justifyContent = alignContent] = placeContent.trim().split(/\s+/, 2);
91
+ return name === 'align-content' ? alignContent : justifyContent;
92
+ }
93
+
94
+ return '';
95
+ }
96
+
97
+ get cssText() {
98
+ const serialized: [string, string][] = [];
99
+ const consumed = new Set<string>();
100
+ const get = (name: string) => this.declarations.get(name);
101
+
102
+ const append = (name: string, value: string, consumedNames: string[] = [name]) => {
103
+ serialized.push([name, value]);
104
+ for (const consumedName of consumedNames)
105
+ consumed.add(consumedName);
106
+ };
107
+
108
+ const appendDirect = (name: string) => {
109
+ const value = get(name);
110
+ if (value)
111
+ append(name, value);
112
+ };
113
+
114
+ appendDirect('border');
115
+ appendDirect('border-width');
116
+ appendDirect('border-style');
117
+ appendDirect('border-color');
118
+ appendDirect('background');
119
+ appendDirect('font');
120
+
121
+ const marginTop = get('margin-top');
122
+ const marginRight = get('margin-right');
123
+ const marginBottom = get('margin-bottom');
124
+ const marginLeft = get('margin-left');
125
+ if (!consumed.has('margin') && marginTop && marginRight && marginBottom && marginLeft)
126
+ append('margin', compressBoxValues(marginTop, marginRight, marginBottom, marginLeft), ['margin-top', 'margin-right', 'margin-bottom', 'margin-left']);
127
+
128
+ const paddingTop = get('padding-top');
129
+ const paddingRight = get('padding-right');
130
+ const paddingBottom = get('padding-bottom');
131
+ const paddingLeft = get('padding-left');
132
+ if (!consumed.has('padding') && paddingTop && paddingRight && paddingBottom && paddingLeft)
133
+ append('padding', compressBoxValues(paddingTop, paddingRight, paddingBottom, paddingLeft), ['padding-top', 'padding-right', 'padding-bottom', 'padding-left']);
134
+
135
+ const top = get('top');
136
+ const right = get('right');
137
+ const bottom = get('bottom');
138
+ const left = get('left');
139
+ if (!consumed.has('inset') && top && right && bottom && left)
140
+ append('inset', compressBoxValues(top, right, bottom, left), ['top', 'right', 'bottom', 'left']);
141
+
142
+ const rowGap = get('row-gap');
143
+ const columnGap = get('column-gap');
144
+ if (rowGap && columnGap)
145
+ append('gap', `${rowGap} ${columnGap}`, ['row-gap', 'column-gap']);
146
+
147
+ const flexDirection = get('flex-direction');
148
+ const flexWrap = get('flex-wrap');
149
+ if (flexDirection && flexWrap)
150
+ append('flex-flow', `${flexDirection} ${flexWrap}`, ['flex-direction', 'flex-wrap']);
151
+
152
+ const alignContent = get('align-content');
153
+ const justifyContent = get('justify-content');
154
+ if (alignContent && justifyContent)
155
+ append('place-content', `${alignContent} ${justifyContent}`, ['align-content', 'justify-content']);
156
+
157
+ const borderTop = get('border-top');
158
+ const borderLeft = get('border-left');
159
+ const borderStyle = get('border-style');
160
+ if (borderStyle && (borderTop || borderLeft)) {
161
+ const [topStyle, rightStyle, bottomStyle, leftStyle] = expandBoxValues(borderStyle);
162
+ if (borderTop && topStyle)
163
+ append('border-top', `${borderTop} ${topStyle}`.trim(), ['border-top']);
164
+ if (borderLeft && leftStyle)
165
+ append('border-left', `${borderLeft} ${leftStyle}`.trim(), ['border-left']);
166
+ if (rightStyle)
167
+ append('border-right-style', rightStyle, ['border-style']);
168
+ if (bottomStyle)
169
+ append('border-bottom-style', bottomStyle, ['border-style']);
170
+ }
171
+
172
+ for (const [name, value] of this.declarations) {
173
+ if (!consumed.has(name) && !serialized.some(x => x[0] === name))
174
+ append(name, value);
175
+ }
176
+
177
+ return serialized.map(([name, value]) => `${name}: ${value};`).join(' ');
178
+ }
179
+ }
180
+
181
+ const createFakeStyle = () => {
182
+ const store = new FakeStyleStore();
183
+ return new Proxy(store as any, {
184
+ get(target, prop) {
185
+ if (typeof prop === 'string' && !(prop in target))
186
+ return target.getPropertyValue(camelToDashCase(prop));
187
+
188
+ const value = target[prop];
189
+ return typeof value === 'function' ? value.bind(target) : value;
190
+ },
191
+ set(target, prop, value) {
192
+ if (typeof prop === 'string' && !(prop in target)) {
193
+ target.setProperty(camelToDashCase(prop), String(value));
194
+ return true;
195
+ }
196
+
197
+ target[prop] = value;
198
+ return true;
199
+ }
200
+ });
201
+ };
202
+
203
+ class FakeHelperElement {
204
+ style = createFakeStyle();
205
+
206
+ setAttribute(name: string, value: string) {
207
+ if (name === 'style' && value === '')
208
+ this.style.reset();
209
+ }
210
+ }
211
+
212
+ let CssCombiner: typeof import('../src/elements/helper/CssCombiner').CssCombiner;
213
+ let originalDocument: unknown;
214
+ let originalHelperElement: unknown;
215
+
216
+ beforeAll(async () => {
217
+ originalDocument = (<any>globalThis).document;
218
+ (<any>globalThis).document = {
219
+ createElement: () => new FakeHelperElement()
220
+ };
221
+
222
+ ({ CssCombiner } = await import('../src/elements/helper/CssCombiner'));
223
+ });
224
+
225
+ afterAll(() => {
226
+ (<any>globalThis).document = originalDocument;
227
+ });
228
+
229
+ beforeEach(() => {
230
+ originalHelperElement = (<any>CssCombiner)._helperElement;
231
+ (<any>CssCombiner)._helperElement = new FakeHelperElement();
232
+ });
233
+
234
+ afterEach(() => {
235
+ (<any>CssCombiner)._helperElement = originalHelperElement;
236
+ });
237
+
238
+ const combine = (styles: Record<string, string>, globalStyles?: Record<string, string>) =>
239
+ CssCombiner.combine(
240
+ new Map(Object.entries(styles)),
241
+ globalStyles ? new Map(Object.entries(globalStyles)) : undefined
242
+ );
243
+
244
+ test('combines border and font longhands into shorthand declarations', () => {
245
+ const result = combine({
246
+ 'border-top-style': 'solid',
247
+ 'border-right-style': 'solid',
248
+ 'border-bottom-style': 'solid',
249
+ 'border-left-style': 'solid',
250
+ 'border-top-color': 'red',
251
+ 'border-right-color': 'red',
252
+ 'border-bottom-color': 'red',
253
+ 'border-left-color': 'red',
254
+ 'border-top-width': '1px',
255
+ 'border-right-width': '1px',
256
+ 'border-bottom-width': '1px',
257
+ 'border-left-width': '1px',
258
+ 'font-style': 'italic',
259
+ 'font-weight': '700',
260
+ 'font-size': '16px',
261
+ 'line-height': '24px',
262
+ 'font-family': '"Fira Code", monospace'
263
+ });
264
+
265
+ expect(result.get('border')).toBe('1px solid red');
266
+ expect(result.has('border-top-width')).toBe(false);
267
+ expect(result.has('border-right-width')).toBe(false);
268
+ expect(result.has('border-bottom-width')).toBe(false);
269
+ expect(result.has('border-left-width')).toBe(false);
270
+
271
+ const font = result.get('font');
272
+ expect(font).toContain('italic');
273
+ expect(font).toContain('700');
274
+ expect(font).toContain('16px');
275
+ expect(font).toContain('24px');
276
+ expect(font).toContain('Fira Code');
277
+ expect(result.has('font-style')).toBe(false);
278
+ expect(result.has('font-weight')).toBe(false);
279
+ expect(result.has('font-size')).toBe(false);
280
+ expect(result.has('line-height')).toBe(false);
281
+ expect(result.has('font-family')).toBe(false);
282
+ });
283
+
284
+ test('combines additional browser-supported shorthand groups through CSSOM serialization', () => {
285
+ const result = combine({
286
+ 'row-gap': '4px',
287
+ 'column-gap': '8px',
288
+ 'flex-direction': 'column',
289
+ 'flex-wrap': 'wrap',
290
+ 'align-content': 'center',
291
+ 'justify-content': 'space-between'
292
+ });
293
+
294
+ expect(result.get('gap')).toBe('4px 8px');
295
+ expect(result.get('flex-flow')).toBe('column wrap');
296
+ expect(result.get('place-content')).toBe('center space-between');
297
+
298
+ expect(result.has('row-gap')).toBe(false);
299
+ expect(result.has('column-gap')).toBe(false);
300
+ expect(result.has('flex-direction')).toBe(false);
301
+ expect(result.has('flex-wrap')).toBe(false);
302
+ expect(result.has('align-content')).toBe(false);
303
+ expect(result.has('justify-content')).toBe(false);
304
+ });
305
+
306
+ test('keeps custom properties and removes shorthand declarations that match global styles', () => {
307
+ const result = combine({
308
+ '--brand-color': '#c00',
309
+ 'row-gap': '4px',
310
+ 'column-gap': '8px'
311
+ }, {
312
+ 'gap': '4px 8px'
313
+ });
314
+
315
+ expect(result.get('--brand-color')).toBe('#c00');
316
+ expect(result.has('gap')).toBe(false);
317
+ });
318
+
319
+ test('parses cssText declarations with semicolons inside urls', () => {
320
+ const result = (<any>CssCombiner).parseStyleDeclarationList(
321
+ 'background: url("data:image/svg+xml;utf8,<svg viewBox=\\"0 0 1 1\\"></svg>") no-repeat center / cover; color: red;'
322
+ );
323
+
324
+ expect(result.get('background')).toBe('url("data:image/svg+xml;utf8,<svg viewBox=\\"0 0 1 1\\"></svg>") no-repeat center / cover');
325
+ expect(result.get('color')).toBe('red');
326
+ });
327
+
328
+ test('does not replace declarations with longer browser cssText expansions', () => {
329
+ const result = combine({
330
+ 'border-top': '4px',
331
+ 'border-left': '2px',
332
+ 'border-style': 'solid'
333
+ });
334
+
335
+ expect(result.get('border-top')).toBe('4px');
336
+ expect(result.get('border-left')).toBe('2px');
337
+ expect(result.get('border-style')).toBe('solid');
338
+ expect(result.has('border-right-style')).toBe(false);
339
+ expect(result.has('border-bottom-style')).toBe(false);
340
+ });
@@ -0,0 +1,92 @@
1
+ import { expect, test } from '@jest/globals';
2
+ import { createPasteFormatSnapshot, createPasteFormatSnapshotFromEntries, getPasteFormatEntries } from '../src/elements/services/copyPasteService/PasteFormatSnapshot';
3
+
4
+ test('collects border, background, and text properties and skips unrelated styles', () => {
5
+ const values: Record<string, string> = {
6
+ 'background-color': ' rgb(1, 2, 3) ',
7
+ 'border-top-color': ' red ',
8
+ 'border-top-style': ' solid ',
9
+ 'font-family': ' Fira Code ',
10
+ 'line-height': ' 24px ',
11
+ 'color': ' white ',
12
+ 'display': ' grid '
13
+ };
14
+
15
+ const fakeStyle = {
16
+ length: 7,
17
+ 0: 'background-color',
18
+ 1: 'border-top-color',
19
+ 2: 'border-top-style',
20
+ 3: 'font-family',
21
+ 4: 'line-height',
22
+ 5: 'color',
23
+ 6: 'display',
24
+ getPropertyValue(name: string) {
25
+ return values[name] ?? '';
26
+ }
27
+ } as Pick<CSSStyleDeclaration, 'getPropertyValue' | 'length'> & ArrayLike<string>;
28
+
29
+ const snapshot = createPasteFormatSnapshot(fakeStyle);
30
+
31
+ expect(snapshot.background).toEqual([{ name: 'background-color', value: 'rgb(1, 2, 3)' }]);
32
+ expect(snapshot.border).toEqual([
33
+ { name: 'border-top-color', value: 'red' },
34
+ { name: 'border-top-style', value: 'solid' }
35
+ ]);
36
+ expect(snapshot.text).toEqual([
37
+ { name: 'font-family', value: 'Fira Code' },
38
+ { name: 'line-height', value: '24px' },
39
+ { name: 'color', value: 'white' }
40
+ ]);
41
+ expect(getPasteFormatEntries(snapshot, 'all')).toEqual([
42
+ { name: 'border-top-color', value: 'red' },
43
+ { name: 'border-top-style', value: 'solid' },
44
+ { name: 'background-color', value: 'rgb(1, 2, 3)' },
45
+ { name: 'font-family', value: 'Fira Code' },
46
+ { name: 'line-height', value: '24px' },
47
+ { name: 'color', value: 'white' }
48
+ ]);
49
+ });
50
+
51
+ test('keeps duplicate properties out of the all group', () => {
52
+ const values: Record<string, string> = {
53
+ 'background-image': 'none',
54
+ 'background-color': 'transparent',
55
+ 'background-color-duplicate': ''
56
+ };
57
+
58
+ const fakeStyle = {
59
+ length: 4,
60
+ 0: 'background-image',
61
+ 1: 'background-color',
62
+ 2: 'background-image',
63
+ 3: 'background-color-duplicate',
64
+ getPropertyValue(name: string) {
65
+ return values[name] ?? '';
66
+ }
67
+ } as Pick<CSSStyleDeclaration, 'getPropertyValue' | 'length'> & ArrayLike<string>;
68
+
69
+ const snapshot = createPasteFormatSnapshot(fakeStyle);
70
+
71
+ expect(snapshot.background).toEqual([
72
+ { name: 'background-image', value: 'none' },
73
+ { name: 'background-color', value: 'transparent' }
74
+ ]);
75
+ expect(snapshot.all).toEqual(snapshot.background);
76
+ });
77
+
78
+ test('creates a snapshot from design item style entries', () => {
79
+ const snapshot = createPasteFormatSnapshotFromEntries([
80
+ ['border-top-color', ' red '],
81
+ ['background-color', ' rgb(1, 2, 3) '],
82
+ ['font-family', ' Fira Code '],
83
+ ['color', ' white ']
84
+ ]);
85
+
86
+ expect(snapshot?.border).toEqual([{ name: 'border-top-color', value: 'red' }]);
87
+ expect(snapshot?.background).toEqual([{ name: 'background-color', value: 'rgb(1, 2, 3)' }]);
88
+ expect(snapshot?.text).toEqual([
89
+ { name: 'font-family', value: 'Fira Code' },
90
+ { name: 'color', value: 'white' }
91
+ ]);
92
+ });