@digdir/designsystemet 1.0.0-next.45 → 1.0.0-next.47
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/bin/config.d.ts +162 -0
- package/dist/bin/config.d.ts.map +1 -0
- package/dist/bin/config.js +56 -0
- package/dist/bin/designsystemet.js +140 -29
- package/dist/bin/options.d.ts +16 -0
- package/dist/bin/options.d.ts.map +1 -0
- package/dist/bin/options.js +12 -0
- package/dist/config.schema.json +82 -0
- package/dist/src/build-scripts/createJsonSchema.d.ts +2 -0
- package/dist/src/build-scripts/createJsonSchema.d.ts.map +1 -0
- package/dist/src/build-scripts/createJsonSchema.js +15 -0
- package/dist/src/tokens/build/configs.d.ts.map +1 -1
- package/dist/src/tokens/build/configs.js +23 -12
- package/dist/src/tokens/build/formats/css.d.ts +4 -2
- package/dist/src/tokens/build/formats/css.d.ts.map +1 -1
- package/dist/src/tokens/build/formats/css.js +20 -12
- package/dist/src/tokens/build/formats/js-tokens.d.ts.map +1 -1
- package/dist/src/tokens/build/formats/js-tokens.js +7 -4
- package/dist/src/tokens/build/transformers.d.ts +0 -1
- package/dist/src/tokens/build/transformers.d.ts.map +1 -1
- package/dist/src/tokens/build/transformers.js +1 -13
- package/dist/src/tokens/build.d.ts +3 -1
- package/dist/src/tokens/build.d.ts.map +1 -1
- package/dist/src/tokens/build.js +5 -2
- package/dist/src/tokens/create.d.ts +16 -11
- package/dist/src/tokens/create.d.ts.map +1 -1
- package/dist/src/tokens/create.js +15 -5
- package/dist/src/tokens/design-tokens/default/Figma/components.json +3 -3
- package/dist/src/tokens/design-tokens/default/primitives/globals.json +1 -1
- package/dist/src/tokens/design-tokens/default/primitives/modes/size/global.json +21 -21
- package/dist/src/tokens/design-tokens/default/semantic/style.json +109 -27
- package/dist/src/tokens/design-tokens/template/$themes.json +63 -63
- package/dist/src/tokens/design-tokens/template/semantic/color-base-file.json +1 -1
- package/dist/src/tokens/design-tokens/template/themes/theme-base-file.json +8 -8
- package/dist/src/tokens/index.d.ts +2 -1
- package/dist/src/tokens/index.d.ts.map +1 -1
- package/dist/src/tokens/index.js +2 -2
- package/dist/src/tokens/types.d.ts +2 -8
- package/dist/src/tokens/types.d.ts.map +1 -1
- package/dist/src/tokens/utils.d.ts +2 -0
- package/dist/src/tokens/utils.d.ts.map +1 -1
- package/dist/src/tokens/utils.js +11 -0
- package/dist/src/tokens/write.d.ts +3 -0
- package/dist/src/tokens/write.d.ts.map +1 -1
- package/dist/src/tokens/write.js +6 -2
- package/package.json +23 -17
- package/dist/src/init/createTokensPackage.d.ts +0 -5
- package/dist/src/init/createTokensPackage.d.ts.map +0 -1
- package/dist/src/init/createTokensPackage.js +0 -273
- package/dist/src/init/generateMetadataJson.d.ts +0 -6
- package/dist/src/init/generateMetadataJson.d.ts.map +0 -1
- package/dist/src/init/generateMetadataJson.js +0 -24
- package/dist/src/init/generateThemesJson.d.ts +0 -3
- package/dist/src/init/generateThemesJson.d.ts.map +0 -1
- package/dist/src/init/generateThemesJson.js +0 -103
- package/dist/src/init/index.d.ts +0 -3
- package/dist/src/init/index.d.ts.map +0 -1
- package/dist/src/init/index.js +0 -10
- package/dist/src/init/nextStepsMarkdown.d.ts +0 -3
- package/dist/src/init/nextStepsMarkdown.d.ts.map +0 -1
- package/dist/src/init/nextStepsMarkdown.js +0 -92
- package/dist/src/init/template/default-files/README.md +0 -10
- package/dist/src/init/template/default-files/design-tokens/Figma/components.json +0 -22
- package/dist/src/init/template/default-files/design-tokens/README.md +0 -3
- package/dist/src/init/template/default-files/design-tokens/primitives/globals.json +0 -161
- package/dist/src/init/template/default-files/design-tokens/primitives/size/default.json +0 -175
- package/dist/src/init/template/default-files/design-tokens/semantic/color.json +0 -572
- package/dist/src/init/template/default-files/design-tokens/semantic/style.json +0 -564
- package/dist/src/init/template/default-files/design-tokens/themes/theme.json +0 -334
- package/dist/src/init/template/template-files/design-tokens/primitives/modes/colors/contrast/global.json +0 -376
- package/dist/src/init/template/template-files/design-tokens/primitives/modes/colors/contrast/theme-template.json +0 -314
- package/dist/src/init/template/template-files/design-tokens/primitives/modes/colors/dark/global.json +0 -376
- package/dist/src/init/template/template-files/design-tokens/primitives/modes/colors/dark/theme-template.json +0 -314
- package/dist/src/init/template/template-files/design-tokens/primitives/modes/colors/light/global.json +0 -376
- package/dist/src/init/template/template-files/design-tokens/primitives/modes/colors/light/theme-template.json +0 -314
- package/dist/src/init/template/template-files/design-tokens/primitives/modes/typography/primary/theme-template.json +0 -30
- package/dist/src/init/template/template-files/design-tokens/primitives/modes/typography/secondary/theme-template.json +0 -30
- package/dist/src/init/template/template-files/design-tokens/themes/theme-template.json +0 -334
- package/dist/src/init/template/template-files/package.json +0 -24
- package/dist/src/init/utils.d.ts +0 -4
- package/dist/src/init/utils.d.ts.map +0 -1
- package/dist/src/init/utils.js +0 -15
- package/dist/src/tokens/build/utils/noCase.d.ts +0 -11
- package/dist/src/tokens/build/utils/noCase.d.ts.map +0 -1
- package/dist/src/tokens/build/utils/noCase.js +0 -24
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare function mapPathToOptionName(path: (string | number)[]): string | undefined;
|
|
3
|
+
export declare const colorRegex: RegExp;
|
|
4
|
+
/**
|
|
5
|
+
* This defines the structure of the JSON config file
|
|
6
|
+
*/
|
|
7
|
+
export declare const configFileSchema: z.ZodObject<{
|
|
8
|
+
outDir: z.ZodOptional<z.ZodString>;
|
|
9
|
+
clean: z.ZodOptional<z.ZodBoolean>;
|
|
10
|
+
themes: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
11
|
+
colors: z.ZodObject<{
|
|
12
|
+
main: z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodString, `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`, string>>;
|
|
13
|
+
support: z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodString, `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`, string>>;
|
|
14
|
+
neutral: z.ZodEffects<z.ZodString, `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`, string>;
|
|
15
|
+
}, "strip", z.ZodTypeAny, {
|
|
16
|
+
main: Record<string, `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`>;
|
|
17
|
+
neutral: `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`;
|
|
18
|
+
support: Record<string, `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`>;
|
|
19
|
+
}, {
|
|
20
|
+
main: Record<string, string>;
|
|
21
|
+
neutral: string;
|
|
22
|
+
support: Record<string, string>;
|
|
23
|
+
}>;
|
|
24
|
+
typography: z.ZodObject<{
|
|
25
|
+
fontFamily: z.ZodString;
|
|
26
|
+
}, "strip", z.ZodTypeAny, {
|
|
27
|
+
fontFamily: string;
|
|
28
|
+
}, {
|
|
29
|
+
fontFamily: string;
|
|
30
|
+
}>;
|
|
31
|
+
borderRadius: z.ZodNumber;
|
|
32
|
+
}, "strip", z.ZodTypeAny, {
|
|
33
|
+
colors: {
|
|
34
|
+
main: Record<string, `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`>;
|
|
35
|
+
neutral: `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`;
|
|
36
|
+
support: Record<string, `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`>;
|
|
37
|
+
};
|
|
38
|
+
typography: {
|
|
39
|
+
fontFamily: string;
|
|
40
|
+
};
|
|
41
|
+
borderRadius: number;
|
|
42
|
+
}, {
|
|
43
|
+
colors: {
|
|
44
|
+
main: Record<string, string>;
|
|
45
|
+
neutral: string;
|
|
46
|
+
support: Record<string, string>;
|
|
47
|
+
};
|
|
48
|
+
typography: {
|
|
49
|
+
fontFamily: string;
|
|
50
|
+
};
|
|
51
|
+
borderRadius: number;
|
|
52
|
+
}>>;
|
|
53
|
+
}, "strip", z.ZodTypeAny, {
|
|
54
|
+
themes: Record<string, {
|
|
55
|
+
colors: {
|
|
56
|
+
main: Record<string, `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`>;
|
|
57
|
+
neutral: `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`;
|
|
58
|
+
support: Record<string, `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`>;
|
|
59
|
+
};
|
|
60
|
+
typography: {
|
|
61
|
+
fontFamily: string;
|
|
62
|
+
};
|
|
63
|
+
borderRadius: number;
|
|
64
|
+
}>;
|
|
65
|
+
clean?: boolean | undefined;
|
|
66
|
+
outDir?: string | undefined;
|
|
67
|
+
}, {
|
|
68
|
+
themes: Record<string, {
|
|
69
|
+
colors: {
|
|
70
|
+
main: Record<string, string>;
|
|
71
|
+
neutral: string;
|
|
72
|
+
support: Record<string, string>;
|
|
73
|
+
};
|
|
74
|
+
typography: {
|
|
75
|
+
fontFamily: string;
|
|
76
|
+
};
|
|
77
|
+
borderRadius: number;
|
|
78
|
+
}>;
|
|
79
|
+
clean?: boolean | undefined;
|
|
80
|
+
outDir?: string | undefined;
|
|
81
|
+
}>;
|
|
82
|
+
/**
|
|
83
|
+
* This defines the structure of the final configuration after combining the config file,
|
|
84
|
+
* command-line options and default values.
|
|
85
|
+
*/
|
|
86
|
+
export declare const combinedConfigSchema: z.ZodObject<{
|
|
87
|
+
outDir: z.ZodString;
|
|
88
|
+
clean: z.ZodBoolean;
|
|
89
|
+
themes: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
90
|
+
colors: z.ZodObject<{
|
|
91
|
+
main: z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodString, `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`, string>>;
|
|
92
|
+
support: z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodString, `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`, string>>;
|
|
93
|
+
neutral: z.ZodEffects<z.ZodString, `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`, string>;
|
|
94
|
+
}, "strip", z.ZodTypeAny, {
|
|
95
|
+
main: Record<string, `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`>;
|
|
96
|
+
neutral: `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`;
|
|
97
|
+
support: Record<string, `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`>;
|
|
98
|
+
}, {
|
|
99
|
+
main: Record<string, string>;
|
|
100
|
+
neutral: string;
|
|
101
|
+
support: Record<string, string>;
|
|
102
|
+
}>;
|
|
103
|
+
typography: z.ZodObject<{
|
|
104
|
+
fontFamily: z.ZodString;
|
|
105
|
+
}, "strip", z.ZodTypeAny, {
|
|
106
|
+
fontFamily: string;
|
|
107
|
+
}, {
|
|
108
|
+
fontFamily: string;
|
|
109
|
+
}>;
|
|
110
|
+
borderRadius: z.ZodNumber;
|
|
111
|
+
}, "strip", z.ZodTypeAny, {
|
|
112
|
+
colors: {
|
|
113
|
+
main: Record<string, `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`>;
|
|
114
|
+
neutral: `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`;
|
|
115
|
+
support: Record<string, `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`>;
|
|
116
|
+
};
|
|
117
|
+
typography: {
|
|
118
|
+
fontFamily: string;
|
|
119
|
+
};
|
|
120
|
+
borderRadius: number;
|
|
121
|
+
}, {
|
|
122
|
+
colors: {
|
|
123
|
+
main: Record<string, string>;
|
|
124
|
+
neutral: string;
|
|
125
|
+
support: Record<string, string>;
|
|
126
|
+
};
|
|
127
|
+
typography: {
|
|
128
|
+
fontFamily: string;
|
|
129
|
+
};
|
|
130
|
+
borderRadius: number;
|
|
131
|
+
}>>;
|
|
132
|
+
}, "strip", z.ZodTypeAny, {
|
|
133
|
+
clean: boolean;
|
|
134
|
+
themes: Record<string, {
|
|
135
|
+
colors: {
|
|
136
|
+
main: Record<string, `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`>;
|
|
137
|
+
neutral: `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`;
|
|
138
|
+
support: Record<string, `#${string}` | `rgb(${number} ${number} ${number})` | `hsl(${number}deg ${number}% ${number}%)` | `hsv(${number}deg ${number}% ${number}%)` | `hsluv(${number} ${number} ${number})` | `lab(${number}% ${number} ${number})` | `lch(${number}% ${number} ${number}deg)` | `oklab(${number}% ${number} ${number})` | `oklch(${number}% ${number} ${number}deg)` | `jab(${number}% ${number} ${number})` | `jch(${number}% ${number} ${number}deg)`>;
|
|
139
|
+
};
|
|
140
|
+
typography: {
|
|
141
|
+
fontFamily: string;
|
|
142
|
+
};
|
|
143
|
+
borderRadius: number;
|
|
144
|
+
}>;
|
|
145
|
+
outDir: string;
|
|
146
|
+
}, {
|
|
147
|
+
clean: boolean;
|
|
148
|
+
themes: Record<string, {
|
|
149
|
+
colors: {
|
|
150
|
+
main: Record<string, string>;
|
|
151
|
+
neutral: string;
|
|
152
|
+
support: Record<string, string>;
|
|
153
|
+
};
|
|
154
|
+
typography: {
|
|
155
|
+
fontFamily: string;
|
|
156
|
+
};
|
|
157
|
+
borderRadius: number;
|
|
158
|
+
}>;
|
|
159
|
+
outDir: string;
|
|
160
|
+
}>;
|
|
161
|
+
export type CombinedConfigSchema = z.infer<typeof combinedConfigSchema>;
|
|
162
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../bin/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,sBAQ5D;AAUD,eAAO,MAAM,UAAU,QAA2C,CAAC;AA6BnE;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO3B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA8B,CAAC;AAChE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import * as R from "ramda";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { convertToHex } from "../src/colors/index.js";
|
|
4
|
+
import { cliOptions } from "../src/tokens/create.js";
|
|
5
|
+
function mapPathToOptionName(path) {
|
|
6
|
+
const normalisedPath = path[0] === "themes" ? ["theme", ...R.drop(2, path)] : path;
|
|
7
|
+
const option = R.path(normalisedPath, cliOptions);
|
|
8
|
+
if (typeof option !== "string") {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
return option;
|
|
12
|
+
}
|
|
13
|
+
const hexPatterns = [
|
|
14
|
+
// Hex colors: #000, #0000, #000000, #00000000
|
|
15
|
+
`#[0-9a-fA-F]{3}`,
|
|
16
|
+
`#[0-9a-fA-F]{4}`,
|
|
17
|
+
`#[0-9a-fA-F]{6}`,
|
|
18
|
+
`#[0-9a-fA-F]{8}`
|
|
19
|
+
];
|
|
20
|
+
const colorRegex = new RegExp(`^${hexPatterns.join("|")}$`);
|
|
21
|
+
const colorSchema = z.string({ description: "A hex color, which is used for creating a color scale" }).regex(colorRegex).transform(convertToHex);
|
|
22
|
+
const colorCategorySchema = z.record(colorSchema, { description: "One or more color definitions" });
|
|
23
|
+
const themeSchema = z.object(
|
|
24
|
+
{
|
|
25
|
+
colors: z.object(
|
|
26
|
+
{
|
|
27
|
+
main: colorCategorySchema,
|
|
28
|
+
support: colorCategorySchema,
|
|
29
|
+
neutral: colorSchema
|
|
30
|
+
},
|
|
31
|
+
{ description: "Defines the colors for this theme" }
|
|
32
|
+
),
|
|
33
|
+
typography: z.object(
|
|
34
|
+
{
|
|
35
|
+
fontFamily: z.string({ description: "Sets the font-family for this theme" })
|
|
36
|
+
},
|
|
37
|
+
{ description: "Defines the typography for a given theme" }
|
|
38
|
+
),
|
|
39
|
+
borderRadius: z.number({ description: "Defines the border-radius for this theme" })
|
|
40
|
+
},
|
|
41
|
+
{ description: "An object defining a theme. The property name holding the object becomes the theme name." }
|
|
42
|
+
);
|
|
43
|
+
const configFileSchema = z.object({
|
|
44
|
+
outDir: z.string({ description: "Path to the output directory for the created design tokens" }).optional(),
|
|
45
|
+
clean: z.boolean({ description: "Delete the output directory before building or creating tokens" }).optional(),
|
|
46
|
+
themes: z.record(themeSchema, {
|
|
47
|
+
description: "An object with one or more themes. Each property defines a theme, and the property name is used as the theme name."
|
|
48
|
+
})
|
|
49
|
+
});
|
|
50
|
+
const combinedConfigSchema = configFileSchema.required();
|
|
51
|
+
export {
|
|
52
|
+
colorRegex,
|
|
53
|
+
combinedConfigSchema,
|
|
54
|
+
configFileSchema,
|
|
55
|
+
mapPathToOptionName
|
|
56
|
+
};
|
|
@@ -1,50 +1,119 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
2
4
|
import { Argument, createCommand, program } from "@commander-js/extra-typings";
|
|
3
5
|
import chalk from "chalk";
|
|
6
|
+
import * as R from "ramda";
|
|
7
|
+
import { fromError } from "zod-validation-error";
|
|
4
8
|
import { convertToHex } from "../src/colors/index.js";
|
|
5
9
|
import migrations from "../src/migrations/index.js";
|
|
6
10
|
import { buildTokens } from "../src/tokens/build.js";
|
|
7
|
-
import {
|
|
11
|
+
import { cliOptions, createTokens } from "../src/tokens/create.js";
|
|
8
12
|
import { writeTokens } from "../src/tokens/write.js";
|
|
13
|
+
import { combinedConfigSchema, configFileSchema, mapPathToOptionName } from "./config.js";
|
|
14
|
+
import { getDefaultOrExplicitOption, getExplicitOptionOnly } from "./options.js";
|
|
9
15
|
program.name("designsystemet").description("CLI for working with Designsystemet").showHelpAfterError();
|
|
10
16
|
function makeTokenCommands() {
|
|
11
17
|
const tokenCmd = createCommand("tokens");
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
18
|
+
const DEFAULT_TOKENS_CREATE_DIR = "./design-tokens";
|
|
19
|
+
const DEFAULT_TOKENS_BUILD_DIR = "./design-tokens-build";
|
|
20
|
+
const DEFAULT_FONT = "Inter";
|
|
21
|
+
const DEFAULT_THEME_NAME = "theme";
|
|
22
|
+
const DEFAULT_CONFIG_FILE = "designsystemet.config.json";
|
|
23
|
+
tokenCmd.command("build").description("Build Designsystemet tokens").option("-t, --tokens <string>", `Path to ${chalk.blue("design-tokens")}`, DEFAULT_TOKENS_CREATE_DIR).option(
|
|
24
|
+
"-o, --out-dir <string>",
|
|
25
|
+
`Output directory for built ${chalk.blue("design-tokens")}`,
|
|
26
|
+
DEFAULT_TOKENS_BUILD_DIR
|
|
27
|
+
).option(`--${cliOptions.clean} [boolean]`, "Clean output directory before building tokens", parseBoolean, false).option("--dry [boolean]", `Dry run for built ${chalk.blue("design-tokens")}`, parseBoolean, false).option("-p, --preview", "Generate preview token.ts files", false).option("--verbose", "Enable verbose output", false).action((opts) => {
|
|
28
|
+
const { preview, verbose, clean, dry } = opts;
|
|
29
|
+
const tokens = typeof opts.tokens === "string" ? opts.tokens : DEFAULT_TOKENS_CREATE_DIR;
|
|
17
30
|
const outDir = typeof opts.outDir === "string" ? opts.outDir : "./dist/tokens";
|
|
18
|
-
const dry = Boolean(opts.dry);
|
|
19
31
|
console.log(`Building tokens in ${chalk.green(tokens)}`);
|
|
20
32
|
if (dry) {
|
|
21
33
|
console.log(`Performing dry run, no files will be written`);
|
|
22
34
|
}
|
|
23
|
-
return buildTokens({ tokens, outDir, preview, verbose, dry });
|
|
35
|
+
return buildTokens({ tokens, outDir, preview, verbose, dry, clean });
|
|
24
36
|
});
|
|
25
|
-
tokenCmd.command("create").description("Create Designsystemet tokens").
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
borderRadius
|
|
41
|
-
};
|
|
42
|
-
if (dry) {
|
|
37
|
+
tokenCmd.command("create").description("Create Designsystemet tokens").option(`-m, --${cliOptions.theme.colors.main} <name:hex...>`, `Main colors`, parseColorValues).option(`-s, --${cliOptions.theme.colors.support} <name:hex...>`, `Support colors`, parseColorValues).option(`-n, --${cliOptions.theme.colors.neutral} <hex>`, `Neutral hex color`, convertToHex).option(
|
|
38
|
+
`-o, --${cliOptions.outDir} <string>`,
|
|
39
|
+
`Output directory for created ${chalk.blue("design-tokens")}`,
|
|
40
|
+
DEFAULT_TOKENS_CREATE_DIR
|
|
41
|
+
).option(`--${cliOptions.clean} [boolean]`, "Clean output directory before creating tokens", parseBoolean, false).option("--dry [boolean]", `Dry run for created ${chalk.blue("design-tokens")}`, parseBoolean, false).option(`-f, --${cliOptions.theme.typography.fontFamily} <string>`, `Font family`, DEFAULT_FONT).option(
|
|
42
|
+
`-b, --${cliOptions.theme.borderRadius} <number>`,
|
|
43
|
+
`Unitless base border-radius in px`,
|
|
44
|
+
(radiusAsString) => Number(radiusAsString),
|
|
45
|
+
4
|
|
46
|
+
).option("--theme <string>", "Theme name (ignored when using JSON config file)", DEFAULT_THEME_NAME).option(
|
|
47
|
+
"--json <string>",
|
|
48
|
+
`Path to JSON config file (default: "${DEFAULT_CONFIG_FILE}")`,
|
|
49
|
+
(value) => parseJsonConfig(value, { allowFileNotFound: false })
|
|
50
|
+
).action(async (opts, cmd) => {
|
|
51
|
+
if (opts.dry) {
|
|
43
52
|
console.log(`Performing dry run, no files will be written`);
|
|
44
53
|
}
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
54
|
+
const configFile = await (opts.json ? opts.json : parseJsonConfig(DEFAULT_CONFIG_FILE, { allowFileNotFound: true }));
|
|
55
|
+
const propsFromJson = configFile?.config;
|
|
56
|
+
if (propsFromJson) {
|
|
57
|
+
const themeColors = Object.values(propsFromJson?.themes ?? {}).map(
|
|
58
|
+
(x) => /* @__PURE__ */ new Set([...R.keys(x.colors.main), ...R.keys(x.colors.support)])
|
|
59
|
+
);
|
|
60
|
+
if (!R.all(R.equals(R.__, themeColors[0]), themeColors)) {
|
|
61
|
+
console.error(
|
|
62
|
+
chalk.redBright(
|
|
63
|
+
`In JSON config ${configFile.path}, all themes must have the same custom color names, but we found:`
|
|
64
|
+
)
|
|
65
|
+
);
|
|
66
|
+
const themeNames = R.keys(propsFromJson.themes ?? {});
|
|
67
|
+
themeColors.forEach((colors, index) => {
|
|
68
|
+
const colorNames = Array.from(colors);
|
|
69
|
+
console.log(` - ${themeNames[index]}: ${colorNames.join(", ")}`);
|
|
70
|
+
});
|
|
71
|
+
console.log();
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const noUndefined = R.reject(R.isNil);
|
|
76
|
+
const getThemeOptions = (optionGetter) => noUndefined({
|
|
77
|
+
colors: noUndefined({
|
|
78
|
+
main: optionGetter(cmd, "mainColors"),
|
|
79
|
+
support: optionGetter(cmd, "supportColors"),
|
|
80
|
+
neutral: optionGetter(cmd, "neutralColor")
|
|
81
|
+
}),
|
|
82
|
+
typography: noUndefined({
|
|
83
|
+
fontFamily: optionGetter(cmd, "fontFamily")
|
|
84
|
+
}),
|
|
85
|
+
borderRadius: optionGetter(cmd, "borderRadius")
|
|
86
|
+
});
|
|
87
|
+
const unvalidatedConfig = noUndefined({
|
|
88
|
+
outDir: propsFromJson?.outDir ?? getDefaultOrExplicitOption(cmd, "outDir"),
|
|
89
|
+
clean: propsFromJson?.clean ?? getDefaultOrExplicitOption(cmd, "clean"),
|
|
90
|
+
themes: propsFromJson?.themes ? (
|
|
91
|
+
// For each theme specified in the JSON config, we override the config values
|
|
92
|
+
// with the explicitly set options from the CLI.
|
|
93
|
+
R.map((theme) => R.mergeDeepRight(theme, getThemeOptions(getExplicitOptionOnly)), propsFromJson.themes)
|
|
94
|
+
) : (
|
|
95
|
+
// If there are no themes specified in the JSON config, we use both explicit
|
|
96
|
+
// and default theme options from the CLI.
|
|
97
|
+
{
|
|
98
|
+
[opts.theme]: getThemeOptions(getDefaultOrExplicitOption)
|
|
99
|
+
}
|
|
100
|
+
)
|
|
101
|
+
});
|
|
102
|
+
let config;
|
|
103
|
+
try {
|
|
104
|
+
config = combinedConfigSchema.parse(unvalidatedConfig);
|
|
105
|
+
} catch (err) {
|
|
106
|
+
console.error(chalk.redBright("Invalid config after combining JSON file and CLI options"));
|
|
107
|
+
const validationError = makeFriendlyError(err);
|
|
108
|
+
console.error(validationError.toString());
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
console.log(`Creating tokens with configuration ${chalk.green(JSON.stringify(config, null, 2))}`);
|
|
112
|
+
for (const [name, themeWithoutName] of Object.entries(config.themes)) {
|
|
113
|
+
const theme = { name, ...themeWithoutName };
|
|
114
|
+
const tokens = createTokens(theme);
|
|
115
|
+
await writeTokens({ outDir: config.outDir, tokens, theme, dry: opts.dry, clean: config.clean });
|
|
116
|
+
}
|
|
48
117
|
});
|
|
49
118
|
return tokenCmd;
|
|
50
119
|
}
|
|
@@ -68,8 +137,50 @@ program.command("migrate").description("run a Designsystemet migration").addArgu
|
|
|
68
137
|
}
|
|
69
138
|
});
|
|
70
139
|
await program.parseAsync(process.argv);
|
|
140
|
+
async function parseJsonConfig(jsonPath, options) {
|
|
141
|
+
const resolvedPath = path.resolve(process.cwd(), jsonPath);
|
|
142
|
+
let jsonFile;
|
|
143
|
+
try {
|
|
144
|
+
jsonFile = await fs.readFile(resolvedPath, { encoding: "utf-8" });
|
|
145
|
+
console.log(`Found JSON config file: ${chalk.green(resolvedPath)}`);
|
|
146
|
+
} catch (err) {
|
|
147
|
+
if (err instanceof Error) {
|
|
148
|
+
const nodeErr = err;
|
|
149
|
+
if (nodeErr.code === "ENOENT" && options.allowFileNotFound) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
throw err;
|
|
154
|
+
}
|
|
155
|
+
try {
|
|
156
|
+
return {
|
|
157
|
+
path: jsonPath,
|
|
158
|
+
config: await configFileSchema.parseAsync(JSON.parse(jsonFile))
|
|
159
|
+
};
|
|
160
|
+
} catch (err) {
|
|
161
|
+
console.error(chalk.redBright(`Invalid JSON config in ${jsonPath}`));
|
|
162
|
+
const validationError = makeFriendlyError(err);
|
|
163
|
+
console.error(validationError.toString());
|
|
164
|
+
process.exit(1);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
function makeFriendlyError(err) {
|
|
168
|
+
return fromError(err, {
|
|
169
|
+
messageBuilder: (issues) => issues.map((issue) => {
|
|
170
|
+
const issuePath = issue.path.join(".");
|
|
171
|
+
const optionName = mapPathToOptionName(issue.path);
|
|
172
|
+
const errorCode = `(error code: ${issue.code})`;
|
|
173
|
+
const optionMessage = optionName ? ` or CLI option --${optionName}` : "";
|
|
174
|
+
return ` - Error in JSON value ${chalk.red(issuePath)}${optionMessage}:
|
|
175
|
+
${issue.message} ${chalk.dim(errorCode)}`;
|
|
176
|
+
}).join("\n")
|
|
177
|
+
});
|
|
178
|
+
}
|
|
71
179
|
function parseColorValues(value, previous = {}) {
|
|
72
180
|
const [name, hex] = value.split(":");
|
|
73
181
|
previous[name] = convertToHex(hex);
|
|
74
182
|
return previous;
|
|
75
183
|
}
|
|
184
|
+
function parseBoolean(value, previous) {
|
|
185
|
+
return value === "true" || value === true;
|
|
186
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Command, OptionValueSource, OptionValues } from '@commander-js/extra-typings';
|
|
2
|
+
declare const getOptionIfMatchingSource: (...sources: OptionValueSource[]) => <Args extends unknown[], Opts extends OptionValues, K extends keyof Opts>(command: Command<Args, Opts>, option: K) => Opts[K] | undefined;
|
|
3
|
+
export type OptionGetter = ReturnType<typeof getOptionIfMatchingSource>;
|
|
4
|
+
/**
|
|
5
|
+
* Get an option value if it is explicitly supplied to the CLI command.
|
|
6
|
+
* The difference between this and using the option directly is that we return undefined
|
|
7
|
+
* instead of the default value if the option was not explicitly set.
|
|
8
|
+
*/
|
|
9
|
+
export declare const getExplicitOptionOnly: <Args extends unknown[], Opts extends OptionValues, K extends keyof Opts>(command: Command<Args, Opts>, option: K) => Opts[K] | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* This function is basically the default behaviour, unlike {@link getExplicitOptionOnly}.
|
|
12
|
+
* It is provided so that the program can choose its behaviour as needed.
|
|
13
|
+
*/
|
|
14
|
+
export declare const getDefaultOrExplicitOption: <Args extends unknown[], Opts extends OptionValues, K extends keyof Opts>(command: Command<Args, Opts>, option: K) => Opts[K] | undefined;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../bin/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE5F,QAAA,MAAM,yBAAyB,eAChB,iBAAiB,EAAE,MAC/B,IAAI,SAAS,OAAO,EAAE,EAAE,IAAI,SAAS,YAAY,EAAE,CAAC,SAAS,MAAM,IAAI,WAC7D,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,UACpB,CAAC,wBAMV,CAAC;AAEJ,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAExE;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAjB/B,IAAI,SAAS,OAAO,EAAE,EAAE,IAAI,SAAS,YAAY,EAAE,CAAC,SAAS,MAAM,IAAI,WAC7D,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,UACpB,CAAC,wBAewD,CAAC;AAEtE;;;GAGG;AACH,eAAO,MAAM,0BAA0B,GAvBpC,IAAI,SAAS,OAAO,EAAE,EAAE,IAAI,SAAS,YAAY,EAAE,CAAC,SAAS,MAAM,IAAI,WAC7D,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,UACpB,CAAC,wBAqBwE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const getOptionIfMatchingSource = (...sources) => (command, option) => {
|
|
2
|
+
const source = command.getOptionValueSource(option);
|
|
3
|
+
if (sources.includes(source)) {
|
|
4
|
+
return command.getOptionValue(option);
|
|
5
|
+
}
|
|
6
|
+
};
|
|
7
|
+
const getExplicitOptionOnly = getOptionIfMatchingSource("cli");
|
|
8
|
+
const getDefaultOrExplicitOption = getOptionIfMatchingSource("cli", "default");
|
|
9
|
+
export {
|
|
10
|
+
getDefaultOrExplicitOption,
|
|
11
|
+
getExplicitOptionOnly
|
|
12
|
+
};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type": "object",
|
|
3
|
+
"properties": {
|
|
4
|
+
"$schema": {
|
|
5
|
+
"type": "string"
|
|
6
|
+
},
|
|
7
|
+
"outDir": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"description": "Path to the output directory for the created design tokens"
|
|
10
|
+
},
|
|
11
|
+
"clean": {
|
|
12
|
+
"type": "boolean",
|
|
13
|
+
"description": "Delete the output directory before building or creating tokens"
|
|
14
|
+
},
|
|
15
|
+
"themes": {
|
|
16
|
+
"type": "object",
|
|
17
|
+
"additionalProperties": {
|
|
18
|
+
"type": "object",
|
|
19
|
+
"properties": {
|
|
20
|
+
"colors": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"properties": {
|
|
23
|
+
"main": {
|
|
24
|
+
"type": "object",
|
|
25
|
+
"additionalProperties": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"pattern": "^#[0-9a-fA-F]{3}|#[0-9a-fA-F]{4}|#[0-9a-fA-F]{6}|#[0-9a-fA-F]{8}$",
|
|
28
|
+
"description": "A hex color, which is used for creating a color scale"
|
|
29
|
+
},
|
|
30
|
+
"description": "One or more color definitions"
|
|
31
|
+
},
|
|
32
|
+
"support": {
|
|
33
|
+
"$ref": "#/properties/themes/additionalProperties/properties/colors/properties/main"
|
|
34
|
+
},
|
|
35
|
+
"neutral": {
|
|
36
|
+
"$ref": "#/properties/themes/additionalProperties/properties/colors/properties/main/additionalProperties"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"required": [
|
|
40
|
+
"main",
|
|
41
|
+
"support",
|
|
42
|
+
"neutral"
|
|
43
|
+
],
|
|
44
|
+
"additionalProperties": false,
|
|
45
|
+
"description": "Defines the colors for this theme"
|
|
46
|
+
},
|
|
47
|
+
"typography": {
|
|
48
|
+
"type": "object",
|
|
49
|
+
"properties": {
|
|
50
|
+
"fontFamily": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"description": "Sets the font-family for this theme"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"required": [
|
|
56
|
+
"fontFamily"
|
|
57
|
+
],
|
|
58
|
+
"additionalProperties": false,
|
|
59
|
+
"description": "Defines the typography for a given theme"
|
|
60
|
+
},
|
|
61
|
+
"borderRadius": {
|
|
62
|
+
"type": "number",
|
|
63
|
+
"description": "Defines the border-radius for this theme"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"required": [
|
|
67
|
+
"colors",
|
|
68
|
+
"typography",
|
|
69
|
+
"borderRadius"
|
|
70
|
+
],
|
|
71
|
+
"additionalProperties": false,
|
|
72
|
+
"description": "An object defining a theme. The property name holding the object becomes the theme name."
|
|
73
|
+
},
|
|
74
|
+
"description": "An object with one or more themes. Each property defines a theme, and the property name is used as the theme name."
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"required": [
|
|
78
|
+
"themes"
|
|
79
|
+
],
|
|
80
|
+
"additionalProperties": false,
|
|
81
|
+
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
82
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createJsonSchema.d.ts","sourceRoot":"","sources":["../../../src/build-scripts/createJsonSchema.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { writeFile } from "node:fs/promises";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { zodToJsonSchema } from "zod-to-json-schema";
|
|
5
|
+
import { configFileSchema } from "../../bin/config.js";
|
|
6
|
+
const schema = z.object({
|
|
7
|
+
$schema: z.string().optional()
|
|
8
|
+
}).extend(configFileSchema.shape);
|
|
9
|
+
writeFile(
|
|
10
|
+
resolve(import.meta.dirname, "../../dist/config.schema.json"),
|
|
11
|
+
JSON.stringify(zodToJsonSchema(schema), void 0, 2),
|
|
12
|
+
{
|
|
13
|
+
encoding: "utf-8"
|
|
14
|
+
}
|
|
15
|
+
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configs.d.ts","sourceRoot":"","sources":["../../../../src/tokens/build/configs.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,IAAI,qBAAqB,EAAoB,MAAM,wBAAwB,CAAC;AAQhG,OAAO,KAAK,EAEV,kBAAkB,EAClB,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,oBAAoB,EAA6B,MAAM,sCAAsC,CAAC;AAO5G,eAAO,MAAM,MAAM,OAAO,CAAC;AAC3B,eAAO,MAAM,cAAc,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"configs.d.ts","sourceRoot":"","sources":["../../../../src/tokens/build/configs.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,IAAI,qBAAqB,EAAoB,MAAM,wBAAwB,CAAC;AAQhG,OAAO,KAAK,EAEV,kBAAkB,EAClB,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,oBAAoB,EAA6B,MAAM,sCAAsC,CAAC;AAO5G,eAAO,MAAM,MAAM,OAAO,CAAC;AAC3B,eAAO,MAAM,cAAc,KAAK,CAAC;AA8BjC,MAAM,MAAM,wBAAwB,GAAG,CACrC,WAAW,EAAE,gBAAgB,EAC7B,OAAO,EAAE;IACP,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,KACE,qBAAqB,GAAG;IAAE,MAAM,EAAE,qBAAqB,CAAC;IAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;CAAE,EAAE,CAAC;AA+PnH,eAAO,MAAM,OAAO;;;;;;;CAOnB,CAAC;AAEF,eAAO,MAAM,4BAA4B,cAC5B,wBAAwB,UAC3B,oBAAoB,EAAE,cAClB,cAAc,EAAE,WACnB,kBAAkB,KAC1B,2BAA2B,EA8B7B,CAAC"}
|