@draftbit/theme 50.5.5 → 50.5.6-68e043.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/lib/commonjs/DefaultTheme.js +1 -1
- package/lib/commonjs/Provider.js +1 -1
- package/lib/commonjs/createTheme.js +1 -1
- package/lib/commonjs/createThemeValuesProxy.js +1 -1
- package/lib/commonjs/types.js +1 -0
- package/lib/commonjs/validators.js +1 -1
- package/lib/typescript/src/DefaultTheme.js +38 -38
- package/lib/typescript/src/DefaultTheme.js.map +1 -1
- package/lib/typescript/src/Provider.js +29 -11
- package/lib/typescript/src/Provider.js.map +1 -1
- package/lib/typescript/src/createTheme.js +25 -3
- package/lib/typescript/src/createTheme.js.map +1 -1
- package/lib/typescript/src/createThemeValuesProxy.d.ts +9 -1
- package/lib/typescript/src/createThemeValuesProxy.js +41 -27
- package/lib/typescript/src/createThemeValuesProxy.js.map +1 -1
- package/lib/typescript/src/types.d.ts +30 -2
- package/lib/typescript/src/validators.d.ts +3 -1
- package/lib/typescript/src/validators.js +81 -42
- package/lib/typescript/src/validators.js.map +1 -1
- package/lib/typescript/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/src/DefaultTheme.js +38 -38
- package/src/DefaultTheme.js.map +1 -1
- package/src/DefaultTheme.ts +38 -38
- package/src/Provider.js +29 -11
- package/src/Provider.js.map +1 -1
- package/src/Provider.tsx +29 -41
- package/src/createTheme.js +25 -3
- package/src/createTheme.js.map +1 -1
- package/src/createTheme.ts +30 -2
- package/src/createThemeValuesProxy.js +41 -27
- package/src/createThemeValuesProxy.js.map +1 -1
- package/src/createThemeValuesProxy.ts +68 -96
- package/src/types.ts +33 -2
- package/src/validators.js +81 -42
- package/src/validators.js.map +1 -1
- package/src/validators.ts +103 -46
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createThemeValuesProxy.js","sourceRoot":"","sources":["createThemeValuesProxy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"createThemeValuesProxy.js","sourceRoot":"","sources":["createThemeValuesProxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { ThemeValues, Breakpoints } from "./types";
|
|
2
|
-
import { Platform } from "react-native";
|
|
3
|
-
import {
|
|
2
|
+
import { Platform, TextStyle } from "react-native";
|
|
3
|
+
import { asThemeValuesObject } from "./validators";
|
|
4
|
+
|
|
5
|
+
interface CreateThemeValuesProxyInput {
|
|
6
|
+
value: ThemeValues | undefined;
|
|
7
|
+
breakpoints: Breakpoints;
|
|
8
|
+
deviceWidth: number;
|
|
9
|
+
devicePlatform: typeof Platform.OS;
|
|
10
|
+
currentLightDarkSelection: "light" | "dark";
|
|
11
|
+
}
|
|
4
12
|
|
|
5
13
|
/**
|
|
6
14
|
* Creates a proxy for theme value objects to select a value whenever
|
|
@@ -9,13 +17,13 @@ import { isObject } from "lodash";
|
|
|
9
17
|
* Ex: {color: {ios: "blue", android: "red"}}
|
|
10
18
|
* -> theme.color returns "blue" when the platform is ios and "red" when android
|
|
11
19
|
*/
|
|
12
|
-
export default function createThemeValuesProxy(
|
|
13
|
-
value
|
|
14
|
-
breakpoints
|
|
15
|
-
deviceWidth
|
|
16
|
-
devicePlatform
|
|
17
|
-
currentLightDarkSelection
|
|
18
|
-
): any /* return type 'any' to allow arbitrary object references (object.example.another.there) */ {
|
|
20
|
+
export default function createThemeValuesProxy({
|
|
21
|
+
value,
|
|
22
|
+
breakpoints,
|
|
23
|
+
deviceWidth,
|
|
24
|
+
devicePlatform,
|
|
25
|
+
currentLightDarkSelection,
|
|
26
|
+
}: CreateThemeValuesProxyInput): any /* return type 'any' to allow arbitrary object references (object.example.another.there) */ {
|
|
19
27
|
if (value === undefined || value === null) {
|
|
20
28
|
return undefined;
|
|
21
29
|
}
|
|
@@ -23,56 +31,44 @@ export default function createThemeValuesProxy(
|
|
|
23
31
|
get: (
|
|
24
32
|
target: ThemeValues,
|
|
25
33
|
key: string
|
|
26
|
-
): string | number | ThemeValues | undefined => {
|
|
34
|
+
): string | number | ThemeValues | TextStyle | undefined => {
|
|
27
35
|
const currentValue = target[key];
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
36
|
+
|
|
37
|
+
const valueAsThemeValues = asThemeValuesObject(currentValue);
|
|
38
|
+
|
|
39
|
+
if (valueAsThemeValues) {
|
|
31
40
|
const platformKeys = ["ios", "android", "web", "macos", "windows"];
|
|
32
41
|
const breakpointKeys = Object.keys(breakpoints);
|
|
33
42
|
const lightDarkKeys = ["light", "dark"];
|
|
43
|
+
|
|
34
44
|
const keysType = getKeysType(
|
|
35
|
-
|
|
45
|
+
valueAsThemeValues,
|
|
36
46
|
platformKeys,
|
|
37
47
|
breakpointKeys,
|
|
38
48
|
lightDarkKeys
|
|
39
49
|
);
|
|
40
50
|
|
|
51
|
+
const input: CreateThemeValuesProxyInput = {
|
|
52
|
+
value: valueAsThemeValues,
|
|
53
|
+
breakpoints,
|
|
54
|
+
deviceWidth,
|
|
55
|
+
devicePlatform,
|
|
56
|
+
currentLightDarkSelection,
|
|
57
|
+
};
|
|
58
|
+
|
|
41
59
|
if (keysType === "default") {
|
|
42
|
-
return createThemeValuesProxy(
|
|
43
|
-
currentValue,
|
|
44
|
-
breakpoints,
|
|
45
|
-
deviceWidth,
|
|
46
|
-
devicePlatform,
|
|
47
|
-
currentLightDarkSelection
|
|
48
|
-
);
|
|
60
|
+
return createThemeValuesProxy(input);
|
|
49
61
|
} else if (keysType === "platform") {
|
|
50
|
-
return getPlatformValue(
|
|
51
|
-
currentValue,
|
|
52
|
-
breakpoints,
|
|
53
|
-
deviceWidth,
|
|
54
|
-
devicePlatform,
|
|
55
|
-
currentLightDarkSelection
|
|
56
|
-
);
|
|
62
|
+
return getPlatformValue(input);
|
|
57
63
|
} else if (keysType === "breakpoint") {
|
|
58
|
-
return getBreakpointValue(
|
|
59
|
-
currentValue,
|
|
60
|
-
breakpoints,
|
|
61
|
-
deviceWidth,
|
|
62
|
-
devicePlatform,
|
|
63
|
-
currentLightDarkSelection
|
|
64
|
-
);
|
|
64
|
+
return getBreakpointValue(input);
|
|
65
65
|
} else if (keysType === "lightDark") {
|
|
66
|
-
return getLightDarkValue(
|
|
67
|
-
currentValue,
|
|
68
|
-
breakpoints,
|
|
69
|
-
deviceWidth,
|
|
70
|
-
devicePlatform,
|
|
71
|
-
currentLightDarkSelection
|
|
72
|
-
);
|
|
66
|
+
return getLightDarkValue(input);
|
|
73
67
|
} else {
|
|
74
68
|
return undefined;
|
|
75
69
|
}
|
|
70
|
+
} else {
|
|
71
|
+
return currentValue;
|
|
76
72
|
}
|
|
77
73
|
},
|
|
78
74
|
set: () => {
|
|
@@ -139,37 +135,25 @@ function allFalse(a: boolean, b: boolean, c: boolean, d: boolean) {
|
|
|
139
135
|
return [a, b, c, d].filter((x) => x).length === 0;
|
|
140
136
|
}
|
|
141
137
|
|
|
142
|
-
function getPlatformValue(
|
|
143
|
-
value
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
) {
|
|
149
|
-
|
|
150
|
-
if (!isObject(currentPlatformValue)) {
|
|
151
|
-
return currentPlatformValue;
|
|
138
|
+
function getPlatformValue(input: CreateThemeValuesProxyInput) {
|
|
139
|
+
const { value, devicePlatform } = input;
|
|
140
|
+
|
|
141
|
+
const currentPlatformValue = value?.[devicePlatform] ?? value?.default;
|
|
142
|
+
const valueAsThemeValues = asThemeValuesObject(currentPlatformValue);
|
|
143
|
+
|
|
144
|
+
if (valueAsThemeValues) {
|
|
145
|
+
return createThemeValuesProxy({ ...input, value: valueAsThemeValues });
|
|
152
146
|
} else {
|
|
153
|
-
return
|
|
154
|
-
currentPlatformValue,
|
|
155
|
-
breakpoints,
|
|
156
|
-
deviceWidth,
|
|
157
|
-
devicePlatform,
|
|
158
|
-
currentLightDarkSelection
|
|
159
|
-
);
|
|
147
|
+
return currentPlatformValue;
|
|
160
148
|
}
|
|
161
149
|
}
|
|
162
150
|
|
|
163
|
-
function getBreakpointValue(
|
|
164
|
-
value
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
) {
|
|
170
|
-
const keysToBreakpointValue: [string, number][] = Object.keys(value).map(
|
|
171
|
-
(key) => [key, breakpoints[key]]
|
|
172
|
-
);
|
|
151
|
+
function getBreakpointValue(input: CreateThemeValuesProxyInput) {
|
|
152
|
+
const { value, breakpoints, deviceWidth } = input;
|
|
153
|
+
|
|
154
|
+
const keysToBreakpointValue: [string, number][] = Object.keys(
|
|
155
|
+
value ?? {}
|
|
156
|
+
).map((key) => [key, breakpoints[key]]);
|
|
173
157
|
const orderedBreakpoints = keysToBreakpointValue.sort(([_, val]) => val);
|
|
174
158
|
let currentBreakpointKey = "";
|
|
175
159
|
for (const [breakpointKey, breakpointValue] of orderedBreakpoints) {
|
|
@@ -177,39 +161,27 @@ function getBreakpointValue(
|
|
|
177
161
|
currentBreakpointKey = breakpointKey;
|
|
178
162
|
}
|
|
179
163
|
}
|
|
180
|
-
const currentBreakpointValue =
|
|
181
|
-
|
|
182
|
-
|
|
164
|
+
const currentBreakpointValue =
|
|
165
|
+
value?.[currentBreakpointKey] ?? value?.default;
|
|
166
|
+
const valueAsThemeValues = asThemeValuesObject(currentBreakpointValue);
|
|
167
|
+
|
|
168
|
+
if (valueAsThemeValues) {
|
|
169
|
+
return createThemeValuesProxy({ ...input, value: valueAsThemeValues });
|
|
183
170
|
} else {
|
|
184
|
-
return
|
|
185
|
-
currentBreakpointValue,
|
|
186
|
-
breakpoints,
|
|
187
|
-
deviceWidth,
|
|
188
|
-
devicePlatform,
|
|
189
|
-
currentLightDarkSelection
|
|
190
|
-
);
|
|
171
|
+
return currentBreakpointValue;
|
|
191
172
|
}
|
|
192
173
|
}
|
|
193
174
|
|
|
194
|
-
function getLightDarkValue(
|
|
195
|
-
value
|
|
196
|
-
|
|
197
|
-
deviceWidth: number,
|
|
198
|
-
devicePlatform: typeof Platform.OS,
|
|
199
|
-
currentLightDarkSelection: "light" | "dark"
|
|
200
|
-
) {
|
|
175
|
+
function getLightDarkValue(input: CreateThemeValuesProxyInput) {
|
|
176
|
+
const { value, currentLightDarkSelection } = input;
|
|
177
|
+
|
|
201
178
|
const currentLightDarkValue =
|
|
202
|
-
value[currentLightDarkSelection] ?? value
|
|
179
|
+
value?.[currentLightDarkSelection] ?? value?.default;
|
|
180
|
+
const valueAsThemeValues = asThemeValuesObject(currentLightDarkValue);
|
|
203
181
|
|
|
204
|
-
if (
|
|
205
|
-
return
|
|
182
|
+
if (valueAsThemeValues) {
|
|
183
|
+
return createThemeValuesProxy({ ...input, value: valueAsThemeValues });
|
|
206
184
|
} else {
|
|
207
|
-
return
|
|
208
|
-
currentLightDarkValue,
|
|
209
|
-
breakpoints,
|
|
210
|
-
deviceWidth,
|
|
211
|
-
devicePlatform,
|
|
212
|
-
currentLightDarkSelection
|
|
213
|
-
);
|
|
185
|
+
return currentLightDarkValue;
|
|
214
186
|
}
|
|
215
187
|
}
|
package/src/types.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { TextStyle } from "react-native";
|
|
2
|
+
|
|
1
3
|
export type ThemeValues = {
|
|
2
|
-
[key: string]: string | number | ThemeValues;
|
|
4
|
+
[key: string]: string | number | TextStyle | ThemeValues;
|
|
3
5
|
};
|
|
4
6
|
|
|
5
7
|
export type Theme = {
|
|
@@ -11,7 +13,21 @@ export type Theme = {
|
|
|
11
13
|
foreground?: ThemeValues;
|
|
12
14
|
border?: ThemeValues;
|
|
13
15
|
};
|
|
14
|
-
typography: {
|
|
16
|
+
typography: {
|
|
17
|
+
body1?: ThemeValues | TextStyle;
|
|
18
|
+
body2?: ThemeValues | TextStyle;
|
|
19
|
+
button?: ThemeValues | TextStyle;
|
|
20
|
+
caption?: ThemeValues | TextStyle;
|
|
21
|
+
headline1?: ThemeValues | TextStyle;
|
|
22
|
+
headline2?: ThemeValues | TextStyle;
|
|
23
|
+
headline3?: ThemeValues | TextStyle;
|
|
24
|
+
headline4?: ThemeValues | TextStyle;
|
|
25
|
+
headline5?: ThemeValues | TextStyle;
|
|
26
|
+
headline6?: ThemeValues | TextStyle;
|
|
27
|
+
overline?: ThemeValues | TextStyle;
|
|
28
|
+
subtitle1?: ThemeValues | TextStyle;
|
|
29
|
+
subtitle2?: ThemeValues | TextStyle;
|
|
30
|
+
};
|
|
15
31
|
};
|
|
16
32
|
|
|
17
33
|
export type ValidatedTheme = Theme & {
|
|
@@ -26,6 +42,21 @@ export type ReadTheme = Theme & {
|
|
|
26
42
|
foreground?: any;
|
|
27
43
|
border?: any;
|
|
28
44
|
};
|
|
45
|
+
typography: {
|
|
46
|
+
body1?: any;
|
|
47
|
+
body2?: any;
|
|
48
|
+
button?: any;
|
|
49
|
+
caption?: any;
|
|
50
|
+
headline1?: any;
|
|
51
|
+
headline2?: any;
|
|
52
|
+
headline3?: any;
|
|
53
|
+
headline4?: any;
|
|
54
|
+
headline5?: any;
|
|
55
|
+
headline6?: any;
|
|
56
|
+
overline?: any;
|
|
57
|
+
subtitle1?: any;
|
|
58
|
+
subtitle2?: any;
|
|
59
|
+
};
|
|
29
60
|
};
|
|
30
61
|
|
|
31
62
|
export type ColorPaletteValues = {
|
package/src/validators.js
CHANGED
|
@@ -1,52 +1,91 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const PaletteSchema = z.record(z.string(), z.record(z.string(), z.string()));
|
|
3
|
+
const BreakpointSchema = z.record(z.string(), z.number());
|
|
4
|
+
const TextStyleSchema = z.union([
|
|
5
|
+
z.object({
|
|
6
|
+
fontSize: z.number(),
|
|
7
|
+
}),
|
|
8
|
+
z.object({
|
|
9
|
+
fontFamily: z.string(),
|
|
10
|
+
}),
|
|
11
|
+
z.object({
|
|
12
|
+
fontWeight: z.enum([
|
|
13
|
+
"normal",
|
|
14
|
+
"bold",
|
|
15
|
+
"100",
|
|
16
|
+
"200",
|
|
17
|
+
"300",
|
|
18
|
+
"400",
|
|
19
|
+
"500",
|
|
20
|
+
"600",
|
|
21
|
+
"700",
|
|
22
|
+
"800",
|
|
23
|
+
"900",
|
|
24
|
+
]),
|
|
25
|
+
}),
|
|
26
|
+
z.object({
|
|
27
|
+
fontStyle: z.enum(["normal", "italic"]),
|
|
28
|
+
}),
|
|
29
|
+
z.object({
|
|
30
|
+
letterSpacing: z.number(),
|
|
31
|
+
}),
|
|
32
|
+
z.object({
|
|
33
|
+
lineHeight: z.number(),
|
|
34
|
+
}),
|
|
35
|
+
]);
|
|
36
|
+
const ThemeValuesSchema = z.record(z.string(), z.lazy(() => z.union([z.string(), z.number(), TextStyleSchema, ThemeValuesSchema])));
|
|
37
|
+
const TextStyleOrThemeValuesSchema = z.union([TextStyleSchema, ThemeValuesSchema]);
|
|
38
|
+
const ThemeSchema = z.object({
|
|
39
|
+
name: z.string(),
|
|
40
|
+
colors: z.object({
|
|
41
|
+
branding: ThemeValuesSchema.optional(),
|
|
42
|
+
text: ThemeValuesSchema.optional(),
|
|
43
|
+
background: ThemeValuesSchema.optional(),
|
|
44
|
+
foreground: ThemeValuesSchema.optional(),
|
|
45
|
+
border: ThemeValuesSchema.optional(),
|
|
46
|
+
}),
|
|
47
|
+
typography: z.object({
|
|
48
|
+
body1: TextStyleOrThemeValuesSchema.optional(),
|
|
49
|
+
body2: TextStyleOrThemeValuesSchema.optional(),
|
|
50
|
+
button: TextStyleOrThemeValuesSchema.optional(),
|
|
51
|
+
caption: TextStyleOrThemeValuesSchema.optional(),
|
|
52
|
+
headline1: TextStyleOrThemeValuesSchema.optional(),
|
|
53
|
+
headline2: TextStyleOrThemeValuesSchema.optional(),
|
|
54
|
+
headline3: TextStyleOrThemeValuesSchema.optional(),
|
|
55
|
+
headline4: TextStyleOrThemeValuesSchema.optional(),
|
|
56
|
+
headline5: TextStyleOrThemeValuesSchema.optional(),
|
|
57
|
+
headline6: TextStyleOrThemeValuesSchema.optional(),
|
|
58
|
+
overline: TextStyleOrThemeValuesSchema.optional(),
|
|
59
|
+
subtitle1: TextStyleOrThemeValuesSchema.optional(),
|
|
60
|
+
subtitle2: TextStyleOrThemeValuesSchema.optional(),
|
|
61
|
+
}),
|
|
62
|
+
});
|
|
1
63
|
export function validatePalettes(palettes) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
for (const [innerKey, value] of Object.entries(palettes[key])) {
|
|
7
|
-
if (typeof innerKey !== "string") {
|
|
8
|
-
throw new Error(`Invalid palette color key, ${innerKey} is not a string`);
|
|
9
|
-
}
|
|
10
|
-
if (typeof value !== "string") {
|
|
11
|
-
throw new Error(`Invalid palette color value, ${value} is not a string`);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
64
|
+
const result = PaletteSchema.safeParse(palettes);
|
|
65
|
+
if (!result.success) {
|
|
66
|
+
throw new Error("Invalid palettes object: " + result.error.message);
|
|
14
67
|
}
|
|
15
68
|
}
|
|
16
69
|
export function validateBreakpoints(breakpoints) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
if (typeof value !== "number") {
|
|
22
|
-
throw new Error(`Invalid breakpoint value, ${value} is not a number`);
|
|
23
|
-
}
|
|
70
|
+
const result = BreakpointSchema.safeParse(breakpoints);
|
|
71
|
+
if (!result.success) {
|
|
72
|
+
throw new Error("Invalid breakpoints object: " + result.error.message);
|
|
24
73
|
}
|
|
25
74
|
}
|
|
26
75
|
export function validateTheme(theme) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
for (const [key, value] of Object.entries(themeValue)) {
|
|
32
|
-
if (typeof key !== "string") {
|
|
33
|
-
throw new Error(`Invalid theme key, ${key} is not a string`);
|
|
34
|
-
}
|
|
35
|
-
if (value === undefined || value === null) {
|
|
36
|
-
continue;
|
|
37
|
-
}
|
|
38
|
-
else if (typeof value === "object") {
|
|
39
|
-
validateThemeValues(value);
|
|
40
|
-
}
|
|
41
|
-
else if (typeof value !== "string" && typeof value !== "number") {
|
|
42
|
-
throw new Error(`Invalid theme value, ${value} is not a string, number, or object`);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
76
|
+
const result = ThemeSchema.safeParse(theme);
|
|
77
|
+
if (!result.success) {
|
|
78
|
+
throw new Error("Invalid theme object: " + result.error.message);
|
|
45
79
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
80
|
+
}
|
|
81
|
+
export function isTextStyleObject(value) {
|
|
82
|
+
return TextStyleSchema.safeParse(value).success;
|
|
83
|
+
}
|
|
84
|
+
export function asThemeValuesObject(value) {
|
|
85
|
+
// Text style matches the shape of ThemeValues, but we don't want to treat it as a ThemeValues
|
|
86
|
+
if (isTextStyleObject(value)) {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
return ThemeValuesSchema.safeParse(value).success ? value : null;
|
|
51
90
|
}
|
|
52
91
|
//# sourceMappingURL=validators.js.map
|
package/src/validators.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.js","sourceRoot":"","sources":["validators.ts"],"names":[],"mappings":"AAEA,MAAM,
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["validators.ts"],"names":[],"mappings":"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"}
|
package/src/validators.ts
CHANGED
|
@@ -1,59 +1,116 @@
|
|
|
1
1
|
import { ColorPalettes, Breakpoints, Theme, ThemeValues } from "./types";
|
|
2
|
+
import { TextStyle } from "react-native";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
|
|
5
|
+
const PaletteSchema: z.ZodType<ColorPalettes> = z.record(
|
|
6
|
+
z.string(),
|
|
7
|
+
z.record(z.string(), z.string())
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
const BreakpointSchema: z.ZodType<Breakpoints> = z.record(
|
|
11
|
+
z.string(),
|
|
12
|
+
z.number()
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
const TextStyleSchema: z.ZodType<TextStyle> = z.union([
|
|
16
|
+
z.object({
|
|
17
|
+
fontSize: z.number(),
|
|
18
|
+
}),
|
|
19
|
+
z.object({
|
|
20
|
+
fontFamily: z.string(),
|
|
21
|
+
}),
|
|
22
|
+
z.object({
|
|
23
|
+
fontWeight: z.enum([
|
|
24
|
+
"normal",
|
|
25
|
+
"bold",
|
|
26
|
+
"100",
|
|
27
|
+
"200",
|
|
28
|
+
"300",
|
|
29
|
+
"400",
|
|
30
|
+
"500",
|
|
31
|
+
"600",
|
|
32
|
+
"700",
|
|
33
|
+
"800",
|
|
34
|
+
"900",
|
|
35
|
+
]),
|
|
36
|
+
}),
|
|
37
|
+
z.object({
|
|
38
|
+
fontStyle: z.enum(["normal", "italic"]),
|
|
39
|
+
}),
|
|
40
|
+
z.object({
|
|
41
|
+
letterSpacing: z.number(),
|
|
42
|
+
}),
|
|
43
|
+
z.object({
|
|
44
|
+
lineHeight: z.number(),
|
|
45
|
+
}),
|
|
46
|
+
]);
|
|
47
|
+
|
|
48
|
+
const ThemeValuesSchema: z.ZodType<ThemeValues> = z.record(
|
|
49
|
+
z.string(),
|
|
50
|
+
z.lazy(() =>
|
|
51
|
+
z.union([z.string(), z.number(), TextStyleSchema, ThemeValuesSchema])
|
|
52
|
+
)
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
const TextStyleOrThemeValuesSchema: z.ZodType<ThemeValues | TextStyle> =
|
|
56
|
+
z.union([TextStyleSchema, ThemeValuesSchema]);
|
|
57
|
+
|
|
58
|
+
const ThemeSchema: z.ZodType<Theme> = z.object({
|
|
59
|
+
name: z.string(),
|
|
60
|
+
colors: z.object({
|
|
61
|
+
branding: ThemeValuesSchema.optional(),
|
|
62
|
+
text: ThemeValuesSchema.optional(),
|
|
63
|
+
background: ThemeValuesSchema.optional(),
|
|
64
|
+
foreground: ThemeValuesSchema.optional(),
|
|
65
|
+
border: ThemeValuesSchema.optional(),
|
|
66
|
+
}),
|
|
67
|
+
typography: z.object({
|
|
68
|
+
body1: TextStyleOrThemeValuesSchema.optional(),
|
|
69
|
+
body2: TextStyleOrThemeValuesSchema.optional(),
|
|
70
|
+
button: TextStyleOrThemeValuesSchema.optional(),
|
|
71
|
+
caption: TextStyleOrThemeValuesSchema.optional(),
|
|
72
|
+
headline1: TextStyleOrThemeValuesSchema.optional(),
|
|
73
|
+
headline2: TextStyleOrThemeValuesSchema.optional(),
|
|
74
|
+
headline3: TextStyleOrThemeValuesSchema.optional(),
|
|
75
|
+
headline4: TextStyleOrThemeValuesSchema.optional(),
|
|
76
|
+
headline5: TextStyleOrThemeValuesSchema.optional(),
|
|
77
|
+
headline6: TextStyleOrThemeValuesSchema.optional(),
|
|
78
|
+
overline: TextStyleOrThemeValuesSchema.optional(),
|
|
79
|
+
subtitle1: TextStyleOrThemeValuesSchema.optional(),
|
|
80
|
+
subtitle2: TextStyleOrThemeValuesSchema.optional(),
|
|
81
|
+
}),
|
|
82
|
+
});
|
|
2
83
|
|
|
3
84
|
export function validatePalettes(palettes: ColorPalettes) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
for (const [innerKey, value] of Object.entries(palettes[key])) {
|
|
9
|
-
if (typeof innerKey !== "string") {
|
|
10
|
-
throw new Error(
|
|
11
|
-
`Invalid palette color key, ${innerKey} is not a string`
|
|
12
|
-
);
|
|
13
|
-
}
|
|
14
|
-
if (typeof value !== "string") {
|
|
15
|
-
throw new Error(
|
|
16
|
-
`Invalid palette color value, ${value} is not a string`
|
|
17
|
-
);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
85
|
+
const result = PaletteSchema.safeParse(palettes);
|
|
86
|
+
if (!result.success) {
|
|
87
|
+
throw new Error("Invalid palettes object: " + result.error.message);
|
|
20
88
|
}
|
|
21
89
|
}
|
|
22
90
|
|
|
23
91
|
export function validateBreakpoints(breakpoints: Breakpoints) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
if (typeof value !== "number") {
|
|
29
|
-
throw new Error(`Invalid breakpoint value, ${value} is not a number`);
|
|
30
|
-
}
|
|
92
|
+
const result = BreakpointSchema.safeParse(breakpoints);
|
|
93
|
+
if (!result.success) {
|
|
94
|
+
throw new Error("Invalid breakpoints object: " + result.error.message);
|
|
31
95
|
}
|
|
32
96
|
}
|
|
33
97
|
|
|
34
98
|
export function validateTheme(theme: Theme) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
for (const [key, value] of Object.entries(themeValue)) {
|
|
40
|
-
if (typeof key !== "string") {
|
|
41
|
-
throw new Error(`Invalid theme key, ${key} is not a string`);
|
|
42
|
-
}
|
|
43
|
-
if (value === undefined || value === null) {
|
|
44
|
-
continue;
|
|
45
|
-
} else if (typeof value === "object") {
|
|
46
|
-
validateThemeValues(value);
|
|
47
|
-
} else if (typeof value !== "string" && typeof value !== "number") {
|
|
48
|
-
throw new Error(
|
|
49
|
-
`Invalid theme value, ${value} is not a string, number, or object`
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
99
|
+
const result = ThemeSchema.safeParse(theme);
|
|
100
|
+
if (!result.success) {
|
|
101
|
+
throw new Error("Invalid theme object: " + result.error.message);
|
|
53
102
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export function isTextStyleObject(value: any): boolean {
|
|
106
|
+
return TextStyleSchema.safeParse(value).success;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export function asThemeValuesObject(value: any): ThemeValues | null {
|
|
110
|
+
// Text style matches the shape of ThemeValues, but we don't want to treat it as a ThemeValues
|
|
111
|
+
if (isTextStyleObject(value)) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return ThemeValuesSchema.safeParse(value).success ? value : null;
|
|
59
116
|
}
|