@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.
@@ -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");
@@ -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.46.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.46.0"
12
+ "@webstudio-is/fonts": "^0.48.0"
13
13
  },
14
14
  "devDependencies": {
15
15
  "@jest/globals": "^29.3.1",
16
- "@storybook/jest": "^0.0.10",
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.46.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": "./lib/index.js",
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/*",
@@ -1,4 +1,4 @@
1
- import { describe, test } from "@jest/globals";
1
+ import { describe, test, expect } from "@jest/globals";
2
2
  import { toProperty } from "./to-property";
3
3
 
4
4
  describe("toProperty", () => {
@@ -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.map((value) => toValue(value, options)).join(",");
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.map((value) => toValue(value, options)).join(" ");
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