@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.
Files changed (85) hide show
  1. package/dist/bin/config.d.ts +162 -0
  2. package/dist/bin/config.d.ts.map +1 -0
  3. package/dist/bin/config.js +56 -0
  4. package/dist/bin/designsystemet.js +140 -29
  5. package/dist/bin/options.d.ts +16 -0
  6. package/dist/bin/options.d.ts.map +1 -0
  7. package/dist/bin/options.js +12 -0
  8. package/dist/config.schema.json +82 -0
  9. package/dist/src/build-scripts/createJsonSchema.d.ts +2 -0
  10. package/dist/src/build-scripts/createJsonSchema.d.ts.map +1 -0
  11. package/dist/src/build-scripts/createJsonSchema.js +15 -0
  12. package/dist/src/tokens/build/configs.d.ts.map +1 -1
  13. package/dist/src/tokens/build/configs.js +23 -12
  14. package/dist/src/tokens/build/formats/css.d.ts +4 -2
  15. package/dist/src/tokens/build/formats/css.d.ts.map +1 -1
  16. package/dist/src/tokens/build/formats/css.js +20 -12
  17. package/dist/src/tokens/build/formats/js-tokens.d.ts.map +1 -1
  18. package/dist/src/tokens/build/formats/js-tokens.js +7 -4
  19. package/dist/src/tokens/build/transformers.d.ts +0 -1
  20. package/dist/src/tokens/build/transformers.d.ts.map +1 -1
  21. package/dist/src/tokens/build/transformers.js +1 -13
  22. package/dist/src/tokens/build.d.ts +3 -1
  23. package/dist/src/tokens/build.d.ts.map +1 -1
  24. package/dist/src/tokens/build.js +5 -2
  25. package/dist/src/tokens/create.d.ts +16 -11
  26. package/dist/src/tokens/create.d.ts.map +1 -1
  27. package/dist/src/tokens/create.js +15 -5
  28. package/dist/src/tokens/design-tokens/default/Figma/components.json +3 -3
  29. package/dist/src/tokens/design-tokens/default/primitives/globals.json +1 -1
  30. package/dist/src/tokens/design-tokens/default/primitives/modes/size/global.json +21 -21
  31. package/dist/src/tokens/design-tokens/default/semantic/style.json +109 -27
  32. package/dist/src/tokens/design-tokens/template/$themes.json +63 -63
  33. package/dist/src/tokens/design-tokens/template/semantic/color-base-file.json +1 -1
  34. package/dist/src/tokens/design-tokens/template/themes/theme-base-file.json +8 -8
  35. package/dist/src/tokens/index.d.ts +2 -1
  36. package/dist/src/tokens/index.d.ts.map +1 -1
  37. package/dist/src/tokens/index.js +2 -2
  38. package/dist/src/tokens/types.d.ts +2 -8
  39. package/dist/src/tokens/types.d.ts.map +1 -1
  40. package/dist/src/tokens/utils.d.ts +2 -0
  41. package/dist/src/tokens/utils.d.ts.map +1 -1
  42. package/dist/src/tokens/utils.js +11 -0
  43. package/dist/src/tokens/write.d.ts +3 -0
  44. package/dist/src/tokens/write.d.ts.map +1 -1
  45. package/dist/src/tokens/write.js +6 -2
  46. package/package.json +23 -17
  47. package/dist/src/init/createTokensPackage.d.ts +0 -5
  48. package/dist/src/init/createTokensPackage.d.ts.map +0 -1
  49. package/dist/src/init/createTokensPackage.js +0 -273
  50. package/dist/src/init/generateMetadataJson.d.ts +0 -6
  51. package/dist/src/init/generateMetadataJson.d.ts.map +0 -1
  52. package/dist/src/init/generateMetadataJson.js +0 -24
  53. package/dist/src/init/generateThemesJson.d.ts +0 -3
  54. package/dist/src/init/generateThemesJson.d.ts.map +0 -1
  55. package/dist/src/init/generateThemesJson.js +0 -103
  56. package/dist/src/init/index.d.ts +0 -3
  57. package/dist/src/init/index.d.ts.map +0 -1
  58. package/dist/src/init/index.js +0 -10
  59. package/dist/src/init/nextStepsMarkdown.d.ts +0 -3
  60. package/dist/src/init/nextStepsMarkdown.d.ts.map +0 -1
  61. package/dist/src/init/nextStepsMarkdown.js +0 -92
  62. package/dist/src/init/template/default-files/README.md +0 -10
  63. package/dist/src/init/template/default-files/design-tokens/Figma/components.json +0 -22
  64. package/dist/src/init/template/default-files/design-tokens/README.md +0 -3
  65. package/dist/src/init/template/default-files/design-tokens/primitives/globals.json +0 -161
  66. package/dist/src/init/template/default-files/design-tokens/primitives/size/default.json +0 -175
  67. package/dist/src/init/template/default-files/design-tokens/semantic/color.json +0 -572
  68. package/dist/src/init/template/default-files/design-tokens/semantic/style.json +0 -564
  69. package/dist/src/init/template/default-files/design-tokens/themes/theme.json +0 -334
  70. package/dist/src/init/template/template-files/design-tokens/primitives/modes/colors/contrast/global.json +0 -376
  71. package/dist/src/init/template/template-files/design-tokens/primitives/modes/colors/contrast/theme-template.json +0 -314
  72. package/dist/src/init/template/template-files/design-tokens/primitives/modes/colors/dark/global.json +0 -376
  73. package/dist/src/init/template/template-files/design-tokens/primitives/modes/colors/dark/theme-template.json +0 -314
  74. package/dist/src/init/template/template-files/design-tokens/primitives/modes/colors/light/global.json +0 -376
  75. package/dist/src/init/template/template-files/design-tokens/primitives/modes/colors/light/theme-template.json +0 -314
  76. package/dist/src/init/template/template-files/design-tokens/primitives/modes/typography/primary/theme-template.json +0 -30
  77. package/dist/src/init/template/template-files/design-tokens/primitives/modes/typography/secondary/theme-template.json +0 -30
  78. package/dist/src/init/template/template-files/design-tokens/themes/theme-template.json +0 -334
  79. package/dist/src/init/template/template-files/package.json +0 -24
  80. package/dist/src/init/utils.d.ts +0 -4
  81. package/dist/src/init/utils.d.ts.map +0 -1
  82. package/dist/src/init/utils.js +0 -15
  83. package/dist/src/tokens/build/utils/noCase.d.ts +0 -11
  84. package/dist/src/tokens/build/utils/noCase.d.ts.map +0 -1
  85. 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 { colorCliOptions, createTokens } from "../src/tokens/create.js";
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 DEFAULT_TOKENS_DIR = "./design-tokens";
13
- const DEFAULT_BUILD_DIR = "./design-tokens-build";
14
- tokenCmd.command("build").description("Build Designsystemet tokens").option("-t, --tokens <string>", `Path to ${chalk.blue("design-tokens")}`, DEFAULT_TOKENS_DIR).option("-o, --out-dir <string>", `Output directory for built ${chalk.blue("design-tokens")}`, DEFAULT_BUILD_DIR).option("--dry [boolean]", `Dry run for built ${chalk.blue("design-tokens")}`, false).option("-p, --preview", "Generate preview token.ts files", false).option("--verbose", "Enable verbose output", false).action((opts) => {
15
- const { preview, verbose } = opts;
16
- const tokens = typeof opts.tokens === "string" ? opts.tokens : DEFAULT_TOKENS_DIR;
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").requiredOption(`-m, --${colorCliOptions.main} <name:hex...>`, `Main colors`, parseColorValues).requiredOption(`-s, --${colorCliOptions.support} <name:hex...>`, `Support colors`, parseColorValues).requiredOption(`-n, --${colorCliOptions.neutral} <hex>`, `Neutral hex color`, convertToHex).option("-o, --out-dir <string>", `Output directory for created ${chalk.blue("design-tokens")}`, DEFAULT_TOKENS_DIR).option("--dry [boolean]", `Dry run for created ${chalk.blue("design-tokens")}`, false).option("-f, --font-family <string>", `Font family`, "Inter").option("-b, --border-radius <number>", `Unitless base border-radius in px`, "4").option("--theme <string>", `Theme name`, "theme").action(async (opts) => {
26
- const { theme, fontFamily, outDir } = opts;
27
- const dry = Boolean(opts.dry);
28
- const borderRadius = Number(opts.borderRadius);
29
- console.log(`Creating tokens with options ${chalk.green(JSON.stringify(opts, null, 2))}`);
30
- const themeOptions = {
31
- name: theme,
32
- colors: {
33
- main: opts.mainColors,
34
- support: opts.supportColors,
35
- neutral: opts.neutralColor
36
- },
37
- typography: {
38
- fontFamily
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 tokens = createTokens(themeOptions);
46
- await writeTokens({ outDir, tokens, theme: themeOptions, dry });
47
- return Promise.resolve();
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=createJsonSchema.d.ts.map
@@ -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;AA+BjC,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;AAoPnH,eAAO,MAAM,OAAO;;;;;;;CAOnB,CAAC;AAEF,eAAO,MAAM,4BAA4B,cAC5B,wBAAwB,UAC3B,oBAAoB,EAAE,cAClB,cAAc,EAAE,WACnB,kBAAkB,KAC1B,2BAA2B,EA8B7B,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"}