@webstudio-is/css-engine 0.205.0 → 0.207.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/index.js +4 -2
- package/lib/runtime.js +98 -0
- package/lib/types/core/rules.d.ts +4 -0
- package/lib/types/core/to-property.d.ts +2 -1
- package/lib/types/index.d.ts +1 -0
- package/lib/types/runtime.d.ts +1 -0
- package/lib/types/schema.d.ts +1 -5
- package/package.json +14 -7
package/lib/index.js
CHANGED
|
@@ -249,7 +249,6 @@ var StyleValue = z.union([
|
|
|
249
249
|
UnsetValue,
|
|
250
250
|
VarValue
|
|
251
251
|
]);
|
|
252
|
-
var Style = z.record(z.string(), StyleValue);
|
|
253
252
|
|
|
254
253
|
// src/css.ts
|
|
255
254
|
var cssWideKeywords = /* @__PURE__ */ new Set([
|
|
@@ -380,7 +379,10 @@ var mergeStyles = (styleMap) => {
|
|
|
380
379
|
};
|
|
381
380
|
|
|
382
381
|
// src/core/to-property.ts
|
|
383
|
-
var hyphenateProperty = (property) => property.replace(
|
|
382
|
+
var hyphenateProperty = (property) => property.replace(
|
|
383
|
+
/[A-Z]/g,
|
|
384
|
+
(match) => "-" + match.toLowerCase()
|
|
385
|
+
);
|
|
384
386
|
|
|
385
387
|
// src/core/rules.ts
|
|
386
388
|
var mapGroupBy = (array, getKey) => {
|
package/lib/runtime.js
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// src/core/to-value.ts
|
|
2
|
+
import { DEFAULT_FONT_FALLBACK, SYSTEM_FONTS } from "@webstudio-is/fonts";
|
|
3
|
+
var fallbackTransform = (styleValue) => {
|
|
4
|
+
if (styleValue.type !== "fontFamily") {
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
let { value } = styleValue;
|
|
8
|
+
if (value.length === 0) {
|
|
9
|
+
value = [DEFAULT_FONT_FALLBACK];
|
|
10
|
+
}
|
|
11
|
+
if (value.length === 1) {
|
|
12
|
+
const stack = SYSTEM_FONTS.get(value[0])?.stack;
|
|
13
|
+
value = stack ?? [value[0], DEFAULT_FONT_FALLBACK];
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
type: "fontFamily",
|
|
17
|
+
value: Array.from(new Set(value))
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
var sanitizeCssUrl = (str) => JSON.stringify(str);
|
|
21
|
+
var toValue = (styleValue, transformValue) => {
|
|
22
|
+
if (styleValue === void 0) {
|
|
23
|
+
return "";
|
|
24
|
+
}
|
|
25
|
+
const transformedValue = transformValue?.(styleValue) ?? fallbackTransform(styleValue);
|
|
26
|
+
const value = transformedValue ?? styleValue;
|
|
27
|
+
if (value.type === "unit") {
|
|
28
|
+
return value.value + (value.unit === "number" ? "" : value.unit);
|
|
29
|
+
}
|
|
30
|
+
if (value.type === "fontFamily") {
|
|
31
|
+
const families = [];
|
|
32
|
+
for (const family of value.value) {
|
|
33
|
+
families.push(family.includes(" ") ? `"${family}"` : family);
|
|
34
|
+
}
|
|
35
|
+
return families.join(", ");
|
|
36
|
+
}
|
|
37
|
+
if (value.type === "var") {
|
|
38
|
+
if (value.hidden) {
|
|
39
|
+
return "";
|
|
40
|
+
}
|
|
41
|
+
let fallbacksString = "";
|
|
42
|
+
if (value.fallback) {
|
|
43
|
+
fallbacksString = `, ${toValue(value.fallback, transformValue)}`;
|
|
44
|
+
}
|
|
45
|
+
return `var(--${value.value}${fallbacksString})`;
|
|
46
|
+
}
|
|
47
|
+
if (value.type === "keyword") {
|
|
48
|
+
if (value.hidden === true) {
|
|
49
|
+
return "";
|
|
50
|
+
}
|
|
51
|
+
return value.value;
|
|
52
|
+
}
|
|
53
|
+
if (value.type === "invalid") {
|
|
54
|
+
return value.value;
|
|
55
|
+
}
|
|
56
|
+
if (value.type === "unset") {
|
|
57
|
+
return value.value;
|
|
58
|
+
}
|
|
59
|
+
if (value.type === "rgb") {
|
|
60
|
+
return `rgba(${value.r}, ${value.g}, ${value.b}, ${value.alpha})`;
|
|
61
|
+
}
|
|
62
|
+
if (value.type === "image") {
|
|
63
|
+
if (value.hidden || value.value.type !== "url") {
|
|
64
|
+
return "none";
|
|
65
|
+
}
|
|
66
|
+
return `url(${sanitizeCssUrl(value.value.url)})`;
|
|
67
|
+
}
|
|
68
|
+
if (value.type === "unparsed") {
|
|
69
|
+
if (value.hidden === true) {
|
|
70
|
+
return "none";
|
|
71
|
+
}
|
|
72
|
+
return value.value;
|
|
73
|
+
}
|
|
74
|
+
if (value.type === "layers") {
|
|
75
|
+
const valueString = value.value.filter((layer) => layer.hidden !== true).map((layer) => toValue(layer, transformValue)).join(", ");
|
|
76
|
+
return valueString === "" ? "none" : valueString;
|
|
77
|
+
}
|
|
78
|
+
if (value.type === "tuple") {
|
|
79
|
+
if (value.hidden === true) {
|
|
80
|
+
return "none";
|
|
81
|
+
}
|
|
82
|
+
return value.value.filter((value2) => value2.hidden !== true).map((value2) => toValue(value2, transformValue)).join(" ");
|
|
83
|
+
}
|
|
84
|
+
if (value.type === "function") {
|
|
85
|
+
if (value.hidden === true) {
|
|
86
|
+
return "";
|
|
87
|
+
}
|
|
88
|
+
return `${value.name}(${toValue(value.args, transformValue)})`;
|
|
89
|
+
}
|
|
90
|
+
if (value.type === "guaranteedInvalid") {
|
|
91
|
+
return "";
|
|
92
|
+
}
|
|
93
|
+
value;
|
|
94
|
+
return "";
|
|
95
|
+
};
|
|
96
|
+
export {
|
|
97
|
+
toValue
|
|
98
|
+
};
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import type { StyleValue } from "../schema";
|
|
2
2
|
import { type TransformValue } from "./to-value";
|
|
3
|
+
/**
|
|
4
|
+
* Use CssStyleMap instead to enforce hyphenated properties.
|
|
5
|
+
* @deprecated
|
|
6
|
+
*/
|
|
3
7
|
export type StyleMap = Map<string, StyleValue>;
|
|
4
8
|
export declare const generateStyleMap: (style: StyleMap, { indent, transformValue, }?: {
|
|
5
9
|
indent?: number;
|
package/lib/types/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { toValue } from "./core/to-value";
|
package/lib/types/schema.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { type TransformValue } from "./core/to-value";
|
|
|
4
4
|
export type CustomProperty = `--${string}`;
|
|
5
5
|
export type StyleProperty = CamelCasedProperty | CustomProperty;
|
|
6
6
|
export type CssProperty = HyphenatedProperty | CustomProperty;
|
|
7
|
+
export type CssStyleMap = Map<CssProperty, StyleValue>;
|
|
7
8
|
declare const Unit: z.ZodType<GeneratedUnit | "number">;
|
|
8
9
|
export type Unit = z.infer<typeof Unit>;
|
|
9
10
|
export declare const UnitValue: z.ZodObject<{
|
|
@@ -3922,9 +3923,4 @@ export declare const StyleValue: z.ZodUnion<[z.ZodObject<{
|
|
|
3922
3923
|
hidden?: boolean | undefined;
|
|
3923
3924
|
}>]>;
|
|
3924
3925
|
export type StyleValue = z.infer<typeof StyleValue>;
|
|
3925
|
-
export type Style = {
|
|
3926
|
-
[property in StyleProperty]?: StyleValue;
|
|
3927
|
-
} & {
|
|
3928
|
-
[property: CustomProperty]: StyleValue;
|
|
3929
|
-
};
|
|
3930
3926
|
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webstudio-is/css-engine",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.207.0",
|
|
4
4
|
"description": "CSS Renderer for Webstudio",
|
|
5
5
|
"author": "Webstudio <github@webstudio.is>",
|
|
6
6
|
"homepage": "https://webstudio.is",
|
|
@@ -8,20 +8,27 @@
|
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"@emotion/hash": "^0.9.2",
|
|
10
10
|
"zod": "^3.22.4",
|
|
11
|
-
"@webstudio-is/fonts": "0.
|
|
11
|
+
"@webstudio-is/fonts": "0.207.0"
|
|
12
12
|
},
|
|
13
13
|
"devDependencies": {
|
|
14
14
|
"@types/react": "^18.2.70",
|
|
15
15
|
"@types/react-dom": "^18.2.25",
|
|
16
16
|
"react": "18.3.0-canary-14898b6a9-20240318",
|
|
17
17
|
"react-dom": "18.3.0-canary-14898b6a9-20240318",
|
|
18
|
-
"vitest": "^3.0.
|
|
18
|
+
"vitest": "^3.0.8",
|
|
19
19
|
"@webstudio-is/tsconfig": "1.0.7"
|
|
20
20
|
},
|
|
21
21
|
"exports": {
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
".": {
|
|
23
|
+
"webstudio": "./src/index.ts",
|
|
24
|
+
"types": "./lib/types/index.d.ts",
|
|
25
|
+
"import": "./lib/index.js"
|
|
26
|
+
},
|
|
27
|
+
"./runtime": {
|
|
28
|
+
"webstudio": "./src/runtime.ts",
|
|
29
|
+
"types": "./lib/types/runtime.d.ts",
|
|
30
|
+
"import": "./lib/runtime.js"
|
|
31
|
+
}
|
|
25
32
|
},
|
|
26
33
|
"files": [
|
|
27
34
|
"lib/*",
|
|
@@ -32,7 +39,7 @@
|
|
|
32
39
|
"sideEffects": false,
|
|
33
40
|
"scripts": {
|
|
34
41
|
"typecheck": "tsc",
|
|
35
|
-
"build": "rm -rf lib && esbuild src/index.ts --outdir=lib --bundle --format=esm --packages=external",
|
|
42
|
+
"build": "rm -rf lib && esbuild src/index.ts --outdir=lib --bundle --format=esm --packages=external && esbuild src/runtime.ts --outdir=lib --bundle --format=esm --packages=external",
|
|
36
43
|
"dts": "tsc --project tsconfig.dts.json",
|
|
37
44
|
"test": "vitest run"
|
|
38
45
|
}
|