@node-projects/web-component-designer 0.1.353 → 0.2.2
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.
- package/dist/elements/controls/NumericStyleInput.d.ts +114 -2
- package/dist/elements/controls/NumericStyleInput.js +757 -30
- package/dist/elements/controls/NumericStyleInput.js.map +1 -1
- package/dist/elements/controls/NumericStyleInputValueHelpers.d.ts +14 -0
- package/dist/elements/controls/NumericStyleInputValueHelpers.js +31 -0
- package/dist/elements/controls/NumericStyleInputValueHelpers.js.map +1 -0
- package/dist/elements/documentContainer.js +1 -1
- package/dist/elements/documentContainer.js.map +1 -1
- package/dist/elements/helper/GridHelper.d.ts +41 -20
- package/dist/elements/helper/GridHelper.js +118 -19
- package/dist/elements/helper/GridHelper.js.map +1 -1
- package/dist/elements/helper/contextMenu/ContextMenu.js +3 -3
- package/dist/elements/helper/contextMenu/ContextMenu.js.map +1 -1
- package/dist/elements/helper/getBoxQuads.d.ts +2 -1
- package/dist/elements/helper/getBoxQuads.js +419 -154
- package/dist/elements/helper/getBoxQuads.js.map +1 -1
- package/dist/elements/item/DesignItem.js +46 -7
- package/dist/elements/item/DesignItem.js.map +1 -1
- package/dist/elements/services/DefaultServiceBootstrap.js +15 -12
- package/dist/elements/services/DefaultServiceBootstrap.js.map +1 -1
- package/dist/elements/services/InstanceServiceContainer.d.ts +20 -3
- package/dist/elements/services/InstanceServiceContainer.js +5 -3
- package/dist/elements/services/InstanceServiceContainer.js.map +1 -1
- package/dist/elements/services/ServiceContainer.d.ts +0 -2
- package/dist/elements/services/ServiceContainer.js.map +1 -1
- package/dist/elements/services/bindingsService/SpecialTagsBindingService.js +1 -1
- package/dist/elements/services/collaborationService/CollaborationNodeIndex.js +1 -1
- package/dist/elements/services/contentService/IContentChanged.js +10 -0
- package/dist/elements/services/contentService/IContentChanged.js.map +1 -1
- package/dist/elements/services/copyPasteService/PasteFormatSnapshot.d.ts +2 -1
- package/dist/elements/services/copyPasteService/PasteFormatSnapshot.js +14 -3
- package/dist/elements/services/copyPasteService/PasteFormatSnapshot.js.map +1 -1
- package/dist/elements/services/placementService/GridPlacementService.js +54 -70
- package/dist/elements/services/placementService/GridPlacementService.js.map +1 -1
- package/dist/elements/services/propertiesService/DefaultEditorTypesService.js +4 -6
- package/dist/elements/services/propertiesService/DefaultEditorTypesService.js.map +1 -1
- package/dist/elements/services/propertiesService/IProperty.d.ts +6 -1
- package/dist/elements/services/propertiesService/PropertyMutationHandling.d.ts +6 -0
- package/dist/elements/services/propertiesService/PropertyMutationHandling.js +89 -0
- package/dist/elements/services/propertiesService/PropertyMutationHandling.js.map +1 -0
- package/dist/elements/services/propertiesService/propertyEditors/BasePropertyEditor.d.ts +2 -0
- package/dist/elements/services/propertiesService/propertyEditors/BasePropertyEditor.js +12 -0
- package/dist/elements/services/propertiesService/propertyEditors/BasePropertyEditor.js.map +1 -1
- package/dist/elements/services/propertiesService/propertyEditors/CssLengthPropertyEditor.d.ts +1 -0
- package/dist/elements/services/propertiesService/propertyEditors/CssLengthPropertyEditor.js +2 -0
- package/dist/elements/services/propertiesService/propertyEditors/CssLengthPropertyEditor.js.map +1 -0
- package/dist/elements/services/propertiesService/propertyEditors/CssLengthPropertyEditorConfig.d.ts +3 -0
- package/dist/elements/services/propertiesService/propertyEditors/CssLengthPropertyEditorConfig.js +4 -0
- package/dist/elements/services/propertiesService/propertyEditors/CssLengthPropertyEditorConfig.js.map +1 -0
- package/dist/elements/services/propertiesService/propertyEditors/CssNumericPropertyEditor.d.ts +10 -0
- package/dist/elements/services/propertiesService/propertyEditors/CssNumericPropertyEditor.js +34 -0
- package/dist/elements/services/propertiesService/propertyEditors/CssNumericPropertyEditor.js.map +1 -0
- package/dist/elements/services/propertiesService/propertyEditors/CssNumericPropertyEditorConfig.d.ts +30 -0
- package/dist/elements/services/propertiesService/propertyEditors/CssNumericPropertyEditorConfig.js +475 -0
- package/dist/elements/services/propertiesService/propertyEditors/CssNumericPropertyEditorConfig.js.map +1 -0
- package/dist/elements/services/propertiesService/services/AbstractCssPropertiesService.d.ts +1 -0
- package/dist/elements/services/propertiesService/services/AbstractCssPropertiesService.js +4 -0
- package/dist/elements/services/propertiesService/services/AbstractCssPropertiesService.js.map +1 -1
- package/dist/elements/services/propertiesService/services/CssCurrentPropertiesService.js +6 -4
- package/dist/elements/services/propertiesService/services/CssCurrentPropertiesService.js.map +1 -1
- package/dist/elements/services/propertiesService/services/CssCustomPropertiesService.js +3 -3
- package/dist/elements/services/propertiesService/services/CssCustomPropertiesService.js.map +1 -1
- package/dist/elements/services/propertiesService/services/CssPropertiesService.js +3 -3
- package/dist/elements/services/propertiesService/services/CssPropertiesService.js.map +1 -1
- package/dist/elements/services/propertiesService/services/IJsonPropertyDefinition.d.ts +2 -0
- package/dist/elements/services/selectionService/SelectionService.js +1 -1
- package/dist/elements/services/undoService/ChangeGroup.d.ts +8 -4
- package/dist/elements/services/undoService/ChangeGroup.js +25 -4
- package/dist/elements/services/undoService/ChangeGroup.js.map +1 -1
- package/dist/elements/services/undoService/ITransactionItem.d.ts +3 -2
- package/dist/elements/services/undoService/ITransactionItem.js.map +1 -1
- package/dist/elements/services/undoService/UndoService.js +15 -8
- package/dist/elements/services/undoService/UndoService.js.map +1 -1
- package/dist/elements/services/undoService/transactionItems/AttributeAndPropertyChangeAction.d.ts +3 -2
- package/dist/elements/services/undoService/transactionItems/AttributeAndPropertyChangeAction.js +12 -8
- package/dist/elements/services/undoService/transactionItems/AttributeAndPropertyChangeAction.js.map +1 -1
- package/dist/elements/services/undoService/transactionItems/AttributeChangeAction.d.ts +3 -2
- package/dist/elements/services/undoService/transactionItems/AttributeChangeAction.js +12 -8
- package/dist/elements/services/undoService/transactionItems/AttributeChangeAction.js.map +1 -1
- package/dist/elements/services/undoService/transactionItems/CssStyleChangeAction.d.ts +3 -2
- package/dist/elements/services/undoService/transactionItems/CssStyleChangeAction.js +4 -2
- package/dist/elements/services/undoService/transactionItems/CssStyleChangeAction.js.map +1 -1
- package/dist/elements/services/undoService/transactionItems/DeleteAction.d.ts +3 -2
- package/dist/elements/services/undoService/transactionItems/DeleteAction.js +2 -2
- package/dist/elements/services/undoService/transactionItems/DeleteAction.js.map +1 -1
- package/dist/elements/services/undoService/transactionItems/InsertAction.d.ts +3 -2
- package/dist/elements/services/undoService/transactionItems/InsertAction.js +2 -2
- package/dist/elements/services/undoService/transactionItems/InsertAction.js.map +1 -1
- package/dist/elements/services/undoService/transactionItems/InsertChildAction.d.ts +3 -2
- package/dist/elements/services/undoService/transactionItems/InsertChildAction.js +3 -3
- package/dist/elements/services/undoService/transactionItems/InsertChildAction.js.map +1 -1
- package/dist/elements/services/undoService/transactionItems/PropertyChangeAction.d.ts +3 -2
- package/dist/elements/services/undoService/transactionItems/PropertyChangeAction.js +2 -0
- package/dist/elements/services/undoService/transactionItems/PropertyChangeAction.js.map +1 -1
- package/dist/elements/services/undoService/transactionItems/SelectionChangedAction.d.ts +3 -2
- package/dist/elements/services/undoService/transactionItems/SelectionChangedAction.js +2 -0
- package/dist/elements/services/undoService/transactionItems/SelectionChangedAction.js.map +1 -1
- package/dist/elements/services/undoService/transactionItems/SetDesignItemsAction.d.ts +3 -2
- package/dist/elements/services/undoService/transactionItems/SetDesignItemsAction.js +2 -0
- package/dist/elements/services/undoService/transactionItems/SetDesignItemsAction.js.map +1 -1
- package/dist/elements/services/undoService/transactionItems/StylesheetChangedAction.d.ts +3 -2
- package/dist/elements/services/undoService/transactionItems/StylesheetChangedAction.js +2 -0
- package/dist/elements/services/undoService/transactionItems/StylesheetChangedAction.js.map +1 -1
- package/dist/elements/services/undoService/transactionItems/TextContentChangeAction.d.ts +3 -2
- package/dist/elements/services/undoService/transactionItems/TextContentChangeAction.js +2 -0
- package/dist/elements/services/undoService/transactionItems/TextContentChangeAction.js.map +1 -1
- package/dist/elements/widgets/designerView/DomConverter.d.ts +1 -1
- package/dist/elements/widgets/designerView/IDesignerCanvas.d.ts +0 -2
- package/dist/elements/widgets/designerView/designerCanvas.d.ts +0 -1
- package/dist/elements/widgets/designerView/designerCanvas.js +14 -7
- package/dist/elements/widgets/designerView/designerCanvas.js.map +1 -1
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.d.ts +1 -1
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +20 -18
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.js.map +1 -1
- package/dist/elements/widgets/designerView/extensions/ExtensionType.d.ts +5 -1
- package/dist/elements/widgets/designerView/extensions/ExtensionType.js +4 -0
- package/dist/elements/widgets/designerView/extensions/ExtensionType.js.map +1 -1
- package/dist/elements/widgets/designerView/extensions/IExtensionManger.d.ts +1 -1
- package/dist/elements/widgets/designerView/extensions/ResizeExtension.d.ts +19 -10
- package/dist/elements/widgets/designerView/extensions/ResizeExtension.js +179 -52
- package/dist/elements/widgets/designerView/extensions/ResizeExtension.js.map +1 -1
- package/dist/elements/widgets/designerView/extensions/buttons/FlexboxExtensionDesignViewConfigButtons.js +1 -1
- package/dist/elements/widgets/designerView/extensions/buttons/FlexboxExtensionDesignViewConfigButtons.js.map +1 -1
- package/dist/elements/widgets/designerView/extensions/contextMenu/BasicContextMenu.d.ts +15 -0
- package/dist/elements/widgets/designerView/extensions/contextMenu/BasicContextMenu.js +15 -0
- package/dist/elements/widgets/designerView/extensions/contextMenu/BasicContextMenu.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/contextMenu/ChildContextMenu copy.d.ts +11 -0
- package/dist/elements/widgets/designerView/extensions/contextMenu/ChildContextMenu copy.js +16 -0
- package/dist/elements/widgets/designerView/extensions/contextMenu/ChildContextMenu copy.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/contextMenu/PasteFormatContextMenu.js +1 -0
- package/dist/elements/widgets/designerView/extensions/contextMenu/PasteFormatContextMenu.js.map +1 -1
- package/dist/elements/widgets/designerView/extensions/flex/FlexboxExtension.d.ts +11 -0
- package/dist/elements/widgets/designerView/extensions/flex/FlexboxExtension.js +20 -0
- package/dist/elements/widgets/designerView/extensions/flex/FlexboxExtension.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/flex/FlexboxExtensionProvider.d.ts +11 -0
- package/dist/elements/widgets/designerView/extensions/flex/FlexboxExtensionProvider.js +18 -0
- package/dist/elements/widgets/designerView/extensions/flex/FlexboxExtensionProvider.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/grid/DisplayGridExtension.js +10 -12
- package/dist/elements/widgets/designerView/extensions/grid/DisplayGridExtension.js.map +1 -1
- package/dist/elements/widgets/designerView/extensions/grid/EditGridColumnRowSizesExtension.d.ts +1 -0
- package/dist/elements/widgets/designerView/extensions/grid/EditGridColumnRowSizesExtension.js +16 -13
- package/dist/elements/widgets/designerView/extensions/grid/EditGridColumnRowSizesExtension.js.map +1 -1
- package/dist/elements/widgets/designerView/extensions/grid/GridChildResizeExtension.js +6 -39
- package/dist/elements/widgets/designerView/extensions/grid/GridChildResizeExtension.js.map +1 -1
- package/dist/elements/widgets/designerView/extensions/transforms/ProjectiveTransformExtension.d.ts +33 -0
- package/dist/elements/widgets/designerView/extensions/transforms/ProjectiveTransformExtension.js +337 -0
- package/dist/elements/widgets/designerView/extensions/transforms/ProjectiveTransformExtension.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/transforms/ProjectiveTransformExtensionProvider.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/transforms/ProjectiveTransformExtensionProvider.js +22 -0
- package/dist/elements/widgets/designerView/extensions/transforms/ProjectiveTransformExtensionProvider.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/transforms/RotateExtension.d.ts +16 -0
- package/dist/elements/widgets/designerView/extensions/transforms/RotateExtension.js +109 -0
- package/dist/elements/widgets/designerView/extensions/transforms/RotateExtension.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/transforms/RotateExtensionProvider.d.ts +12 -0
- package/dist/elements/widgets/designerView/extensions/transforms/RotateExtensionProvider.js +25 -0
- package/dist/elements/widgets/designerView/extensions/transforms/RotateExtensionProvider.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/transforms/RotateGroupExtension.d.ts +29 -0
- package/dist/elements/widgets/designerView/extensions/transforms/RotateGroupExtension.js +229 -0
- package/dist/elements/widgets/designerView/extensions/transforms/RotateGroupExtension.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/transforms/RotateGroupExtensionProvider.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/transforms/RotateGroupExtensionProvider.js +20 -0
- package/dist/elements/widgets/designerView/extensions/transforms/RotateGroupExtensionProvider.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/transforms/SkewExtension.d.ts +30 -0
- package/dist/elements/widgets/designerView/extensions/transforms/SkewExtension.js +291 -0
- package/dist/elements/widgets/designerView/extensions/transforms/SkewExtension.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/transforms/SkewExtensionProvider.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/transforms/SkewExtensionProvider.js +20 -0
- package/dist/elements/widgets/designerView/extensions/transforms/SkewExtensionProvider.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/transforms/TransformOriginExtension.d.ts +16 -0
- package/dist/elements/widgets/designerView/extensions/transforms/TransformOriginExtension.js +122 -0
- package/dist/elements/widgets/designerView/extensions/transforms/TransformOriginExtension.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/transforms/TransformOriginExtensionProvider.d.ts +12 -0
- package/dist/elements/widgets/designerView/extensions/transforms/TransformOriginExtensionProvider.js +34 -0
- package/dist/elements/widgets/designerView/extensions/transforms/TransformOriginExtensionProvider.js.map +1 -0
- package/dist/elements/widgets/designerView/tools/PointerTool.js +2 -2
- package/dist/elements/widgets/designerView/tools/PointerTool.js.map +1 -1
- package/dist/elements/widgets/miniatureView/miniatureView.js +1 -1
- package/dist/elements/widgets/miniatureView/miniatureView.js.map +1 -1
- package/dist/elements/widgets/propertyGrid/PropertyGrid.d.ts +3 -3
- package/dist/elements/widgets/propertyGrid/PropertyGrid.js +7 -7
- package/dist/elements/widgets/propertyGrid/PropertyGrid.js.map +1 -1
- package/dist/elements/widgets/propertyGrid/PropertyGridMutationHandling.d.ts +5 -0
- package/dist/elements/widgets/propertyGrid/PropertyGridMutationHandling.js +13 -0
- package/dist/elements/widgets/propertyGrid/PropertyGridMutationHandling.js.map +1 -0
- package/dist/elements/widgets/propertyGrid/PropertyGridPropertyList.d.ts +2 -0
- package/dist/elements/widgets/propertyGrid/PropertyGridPropertyList.js +45 -24
- package/dist/elements/widgets/propertyGrid/PropertyGridPropertyList.js.map +1 -1
- package/dist/elements/widgets/propertyGrid/PropertyGridPropertyStructureSignature.d.ts +4 -0
- package/dist/elements/widgets/propertyGrid/PropertyGridPropertyStructureSignature.js +31 -0
- package/dist/elements/widgets/propertyGrid/PropertyGridPropertyStructureSignature.js.map +1 -0
- package/dist/elements/widgets/propertyGrid/PropertyGridWithHeader.d.ts +1 -0
- package/dist/elements/widgets/propertyGrid/PropertyGridWithHeader.js +52 -42
- package/dist/elements/widgets/propertyGrid/PropertyGridWithHeader.js.map +1 -1
- package/dist/elements/widgets/treeView/treeView.js +3 -3
- package/dist/elements/widgets/treeView/treeView.js.map +1 -1
- package/dist/index-min.js +7 -7
- package/dist/index-min.js.map +4 -4
- package/dist/index.d.ts +16 -15
- package/dist/index.js +16 -13
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/tests/ContextMenu.test.ts +0 -133
- package/tests/CssCombiner.test.ts +0 -340
- package/tests/PasteFormatSnapshot.test.ts +0 -92
- package/tests/PathDataPolyfill.test.ts +0 -49
- package/tests/SpecificityCalculator.test.ts +0 -625
|
@@ -1,340 +0,0 @@
|
|
|
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
|
-
});
|
|
@@ -1,92 +0,0 @@
|
|
|
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
|
-
});
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { afterAll, beforeAll, expect, test } from '@jest/globals';
|
|
2
|
-
|
|
3
|
-
const svgElementGlobals = [
|
|
4
|
-
'SVGPathElement',
|
|
5
|
-
'SVGRectElement',
|
|
6
|
-
'SVGCircleElement',
|
|
7
|
-
'SVGEllipseElement',
|
|
8
|
-
'SVGLineElement',
|
|
9
|
-
'SVGPolylineElement',
|
|
10
|
-
'SVGPolygonElement'
|
|
11
|
-
] as const;
|
|
12
|
-
|
|
13
|
-
type SvgElementGlobalName = (typeof svgElementGlobals)[number];
|
|
14
|
-
|
|
15
|
-
let straightenLine: typeof import('../src/elements/helper/PathDataPolyfill').straightenLine;
|
|
16
|
-
const originalGlobals = new Map<SvgElementGlobalName, unknown>();
|
|
17
|
-
|
|
18
|
-
beforeAll(async () => {
|
|
19
|
-
for (const globalName of svgElementGlobals) {
|
|
20
|
-
originalGlobals.set(globalName, (<any>globalThis)[globalName]);
|
|
21
|
-
(<any>globalThis)[globalName] = class { };
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
({ straightenLine } = await import('../src/elements/helper/PathDataPolyfill'));
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
afterAll(() => {
|
|
28
|
-
for (const globalName of svgElementGlobals) {
|
|
29
|
-
const originalGlobal = originalGlobals.get(globalName);
|
|
30
|
-
if (originalGlobal === undefined)
|
|
31
|
-
delete (<any>globalThis)[globalName];
|
|
32
|
-
else
|
|
33
|
-
(<any>globalThis)[globalName] = originalGlobal;
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
test('straightenLine keeps upward vertical snap upward', () => {
|
|
38
|
-
const result = straightenLine({ x: 10, y: 10 }, { x: 10, y: 0 }, 90);
|
|
39
|
-
|
|
40
|
-
expect(result.x).toBeCloseTo(10);
|
|
41
|
-
expect(result.y).toBeCloseTo(0);
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
test('straightenLine keeps downward vertical snap downward', () => {
|
|
45
|
-
const result = straightenLine({ x: 10, y: 10 }, { x: 10, y: 25 }, 90);
|
|
46
|
-
|
|
47
|
-
expect(result.x).toBeCloseTo(10);
|
|
48
|
-
expect(result.y).toBeCloseTo(25);
|
|
49
|
-
});
|