@webstudio-is/css-engine 0.46.0 → 0.48.0
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/lib/cjs/core/to-value.cjs +11 -4
- package/lib/core/to-value.js +11 -4
- package/package.json +8 -7
- package/src/core/to-property.test.ts +1 -1
- package/src/core/to-value.ts +25 -4
|
@@ -28,7 +28,7 @@ const defaultOptions = {
|
|
|
28
28
|
const assertUnreachable = (_arg, errorMessage) => {
|
|
29
29
|
throw new Error(errorMessage);
|
|
30
30
|
};
|
|
31
|
-
const toValue = (value, options = defaultOptions) => {
|
|
31
|
+
const toValue = (value, options = defaultOptions, isEditMode) => {
|
|
32
32
|
if (value === void 0) {
|
|
33
33
|
return "";
|
|
34
34
|
}
|
|
@@ -47,9 +47,10 @@ const toValue = (value, options = defaultOptions) => {
|
|
|
47
47
|
return [...value.value, import_fonts.DEFAULT_FONT_FALLBACK].join(", ");
|
|
48
48
|
}
|
|
49
49
|
if (value.type === "var") {
|
|
50
|
+
const isEditMode2 = true;
|
|
50
51
|
const fallbacks = [];
|
|
51
52
|
for (const fallback of value.fallbacks) {
|
|
52
|
-
fallbacks.push(toValue(fallback, options));
|
|
53
|
+
fallbacks.push(toValue(fallback, options, isEditMode2));
|
|
53
54
|
}
|
|
54
55
|
const fallbacksString = fallbacks.length > 0 ? `, ${fallbacks.join(", ")}` : "";
|
|
55
56
|
return `var(--${value.value}${fallbacksString})`;
|
|
@@ -67,16 +68,22 @@ const toValue = (value, options = defaultOptions) => {
|
|
|
67
68
|
return `rgba(${value.r}, ${value.g}, ${value.b}, ${value.alpha})`;
|
|
68
69
|
}
|
|
69
70
|
if (value.type === "image") {
|
|
71
|
+
if (isEditMode && value.hidden) {
|
|
72
|
+
return "none";
|
|
73
|
+
}
|
|
70
74
|
return `url(${value.value.value.path}) /* id=${value.value.value.id} */`;
|
|
71
75
|
}
|
|
72
76
|
if (value.type === "unparsed") {
|
|
77
|
+
if (isEditMode && value.hidden) {
|
|
78
|
+
return "none";
|
|
79
|
+
}
|
|
73
80
|
return value.value;
|
|
74
81
|
}
|
|
75
82
|
if (value.type === "layers") {
|
|
76
|
-
return value.value.map((value2) => toValue(value2, options)).join(",");
|
|
83
|
+
return value.value.map((value2) => toValue(value2, options, isEditMode)).join(",");
|
|
77
84
|
}
|
|
78
85
|
if (value.type === "tuple") {
|
|
79
|
-
return value.value.map((value2) => toValue(value2, options)).join(" ");
|
|
86
|
+
return value.value.map((value2) => toValue(value2, options, isEditMode)).join(" ");
|
|
80
87
|
}
|
|
81
88
|
assertUnreachable(value, `Unknown value type`);
|
|
82
89
|
throw new Error("Unknown value type");
|
package/lib/core/to-value.js
CHANGED
|
@@ -5,7 +5,7 @@ const defaultOptions = {
|
|
|
5
5
|
const assertUnreachable = (_arg, errorMessage) => {
|
|
6
6
|
throw new Error(errorMessage);
|
|
7
7
|
};
|
|
8
|
-
const toValue = (value, options = defaultOptions) => {
|
|
8
|
+
const toValue = (value, options = defaultOptions, isEditMode) => {
|
|
9
9
|
if (value === void 0) {
|
|
10
10
|
return "";
|
|
11
11
|
}
|
|
@@ -24,9 +24,10 @@ const toValue = (value, options = defaultOptions) => {
|
|
|
24
24
|
return [...value.value, DEFAULT_FONT_FALLBACK].join(", ");
|
|
25
25
|
}
|
|
26
26
|
if (value.type === "var") {
|
|
27
|
+
const isEditMode2 = true;
|
|
27
28
|
const fallbacks = [];
|
|
28
29
|
for (const fallback of value.fallbacks) {
|
|
29
|
-
fallbacks.push(toValue(fallback, options));
|
|
30
|
+
fallbacks.push(toValue(fallback, options, isEditMode2));
|
|
30
31
|
}
|
|
31
32
|
const fallbacksString = fallbacks.length > 0 ? `, ${fallbacks.join(", ")}` : "";
|
|
32
33
|
return `var(--${value.value}${fallbacksString})`;
|
|
@@ -44,16 +45,22 @@ const toValue = (value, options = defaultOptions) => {
|
|
|
44
45
|
return `rgba(${value.r}, ${value.g}, ${value.b}, ${value.alpha})`;
|
|
45
46
|
}
|
|
46
47
|
if (value.type === "image") {
|
|
48
|
+
if (isEditMode && value.hidden) {
|
|
49
|
+
return "none";
|
|
50
|
+
}
|
|
47
51
|
return `url(${value.value.value.path}) /* id=${value.value.value.id} */`;
|
|
48
52
|
}
|
|
49
53
|
if (value.type === "unparsed") {
|
|
54
|
+
if (isEditMode && value.hidden) {
|
|
55
|
+
return "none";
|
|
56
|
+
}
|
|
50
57
|
return value.value;
|
|
51
58
|
}
|
|
52
59
|
if (value.type === "layers") {
|
|
53
|
-
return value.value.map((value2) => toValue(value2, options)).join(",");
|
|
60
|
+
return value.value.map((value2) => toValue(value2, options, isEditMode)).join(",");
|
|
54
61
|
}
|
|
55
62
|
if (value.type === "tuple") {
|
|
56
|
-
return value.value.map((value2) => toValue(value2, options)).join(" ");
|
|
63
|
+
return value.value.map((value2) => toValue(value2, options, isEditMode)).join(" ");
|
|
57
64
|
}
|
|
58
65
|
assertUnreachable(value, `Unknown value type`);
|
|
59
66
|
throw new Error("Unknown value type");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webstudio-is/css-engine",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.48.0",
|
|
4
4
|
"description": "CSS Renderer for Webstudio",
|
|
5
5
|
"author": "Webstudio <github@webstudio.is>",
|
|
6
6
|
"homepage": "https://webstudio.is",
|
|
@@ -9,25 +9,26 @@
|
|
|
9
9
|
"hyphenate-style-name": "^1.0.4",
|
|
10
10
|
"react": "^17.0.2",
|
|
11
11
|
"react-dom": "^17.0.2",
|
|
12
|
-
"@webstudio-is/fonts": "^0.
|
|
12
|
+
"@webstudio-is/fonts": "^0.48.0"
|
|
13
13
|
},
|
|
14
14
|
"devDependencies": {
|
|
15
15
|
"@jest/globals": "^29.3.1",
|
|
16
|
-
"@storybook/
|
|
17
|
-
"@storybook/react": "^6.5.14",
|
|
18
|
-
"@storybook/testing-library": "^0.0.13",
|
|
16
|
+
"@storybook/react": "^6.5.16",
|
|
19
17
|
"@types/hyphenate-style-name": "^1.0.0",
|
|
20
18
|
"@types/react": "^17.0.24",
|
|
21
19
|
"@types/react-dom": "^17.0.9",
|
|
22
20
|
"jest": "^29.3.1",
|
|
23
21
|
"typescript": "4.9.5",
|
|
24
|
-
"@webstudio-is/css-data": "^0.
|
|
22
|
+
"@webstudio-is/css-data": "^0.48.0",
|
|
25
23
|
"@webstudio-is/jest-config": "^1.0.2",
|
|
26
24
|
"@webstudio-is/scripts": "^0.0.0",
|
|
27
25
|
"@webstudio-is/storybook-config": "^0.0.0",
|
|
28
26
|
"@webstudio-is/tsconfig": "^1.0.1"
|
|
29
27
|
},
|
|
30
|
-
"exports":
|
|
28
|
+
"exports": {
|
|
29
|
+
"source": "./src/index.ts",
|
|
30
|
+
"import": "./lib/index.js"
|
|
31
|
+
},
|
|
31
32
|
"types": "src/index.ts",
|
|
32
33
|
"files": [
|
|
33
34
|
"lib/*",
|
package/src/core/to-value.ts
CHANGED
|
@@ -16,7 +16,8 @@ const assertUnreachable = (_arg: never, errorMessage: string) => {
|
|
|
16
16
|
|
|
17
17
|
export const toValue = (
|
|
18
18
|
value?: StyleValue,
|
|
19
|
-
options: ToCssOptions = defaultOptions
|
|
19
|
+
options: ToCssOptions = defaultOptions,
|
|
20
|
+
isEditMode?: boolean
|
|
20
21
|
): string => {
|
|
21
22
|
if (value === undefined) {
|
|
22
23
|
return "";
|
|
@@ -36,9 +37,11 @@ export const toValue = (
|
|
|
36
37
|
return [...value.value, DEFAULT_FONT_FALLBACK].join(", ");
|
|
37
38
|
}
|
|
38
39
|
if (value.type === "var") {
|
|
40
|
+
// We use var() in edit mode only
|
|
41
|
+
const isEditMode = true;
|
|
39
42
|
const fallbacks = [];
|
|
40
43
|
for (const fallback of value.fallbacks) {
|
|
41
|
-
fallbacks.push(toValue(fallback, options));
|
|
44
|
+
fallbacks.push(toValue(fallback, options, isEditMode));
|
|
42
45
|
}
|
|
43
46
|
const fallbacksString =
|
|
44
47
|
fallbacks.length > 0 ? `, ${fallbacks.join(", ")}` : "";
|
|
@@ -62,20 +65,38 @@ export const toValue = (
|
|
|
62
65
|
}
|
|
63
66
|
|
|
64
67
|
if (value.type === "image") {
|
|
68
|
+
if (isEditMode && value.hidden) {
|
|
69
|
+
// We assume that property is background-image and use this to hide background layers
|
|
70
|
+
// In the future we might want to have a more generic way to hide values
|
|
71
|
+
// i.e. have knowledge about property-name, as none is property specific
|
|
72
|
+
return "none";
|
|
73
|
+
}
|
|
74
|
+
|
|
65
75
|
// @todo image-set
|
|
66
76
|
return `url(${value.value.value.path}) /* id=${value.value.value.id} */`;
|
|
67
77
|
}
|
|
68
78
|
|
|
69
79
|
if (value.type === "unparsed") {
|
|
80
|
+
if (isEditMode && value.hidden) {
|
|
81
|
+
// We assume that property is background-image and use this to hide background layers
|
|
82
|
+
// In the future we might want to have a more generic way to hide values
|
|
83
|
+
// i.e. have knowledge about property-name, as none is property specific
|
|
84
|
+
return "none";
|
|
85
|
+
}
|
|
86
|
+
|
|
70
87
|
return value.value;
|
|
71
88
|
}
|
|
72
89
|
|
|
73
90
|
if (value.type === "layers") {
|
|
74
|
-
return value.value
|
|
91
|
+
return value.value
|
|
92
|
+
.map((value) => toValue(value, options, isEditMode))
|
|
93
|
+
.join(",");
|
|
75
94
|
}
|
|
76
95
|
|
|
77
96
|
if (value.type === "tuple") {
|
|
78
|
-
return value.value
|
|
97
|
+
return value.value
|
|
98
|
+
.map((value) => toValue(value, options, isEditMode))
|
|
99
|
+
.join(" ");
|
|
79
100
|
}
|
|
80
101
|
|
|
81
102
|
// Will give ts error in case of missing type
|