1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4pub struct FontsConfig {
5 pub body: FontConfig,
6 pub heading: FontConfig,
7 #[serde(default)]
8 pub brand: Option<FontConfig>,
9}
10
11#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct FontConfig {
13 pub family: String,
14 pub fallback: String,
15 #[serde(default)]
16 pub files: Vec<FontFile>,
17}
18
19#[derive(Debug, Clone, Serialize, Deserialize)]
20pub struct FontFile {
21 pub path: String,
22 pub weight: u16,
23 pub style: String,
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct ColorsConfig {
28 pub light: ColorPalette,
29 pub dark: ColorPalette,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct ColorPalette {
34 pub primary: PrimaryColor,
35 pub secondary: PrimaryColor,
36 pub success: String,
37 pub warning: String,
38 pub error: String,
39 pub surface: SurfaceColors,
40 pub text: TextColors,
41 pub background: BackgroundColors,
42 pub border: BorderColors,
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize)]
46pub struct PrimaryColor {
47 pub hsl: String,
48 pub rgb: [u8; 3],
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
52pub struct SurfaceColors {
53 pub default: String,
54 pub dark: String,
55 pub variant: String,
56 #[serde(rename = "secondaryContainer")]
57 pub secondary_container: String,
58 #[serde(rename = "errorContainer")]
59 pub error_container: String,
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize)]
63pub struct TextColors {
64 pub primary: String,
65 pub secondary: String,
66 pub inverted: String,
67 pub disabled: String,
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize)]
71pub struct BackgroundColors {
72 pub default: String,
73 pub dark: String,
74}
75
76#[derive(Debug, Clone, Serialize, Deserialize)]
77pub struct BorderColors {
78 pub default: String,
79 pub dark: String,
80 pub outline: String,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize)]
84pub struct TypographyConfig {
85 pub sizes: TypographySizes,
86 pub weights: TypographyWeights,
87}
88
89#[derive(Debug, Clone, Serialize, Deserialize)]
90pub struct TypographySizes {
91 pub xs: String,
92 pub sm: String,
93 pub md: String,
94 pub lg: String,
95 pub xl: String,
96 pub xxl: String,
97}
98
99#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
100pub struct TypographyWeights {
101 pub regular: u16,
102 pub medium: u16,
103 pub semibold: u16,
104 pub bold: u16,
105}
106
107#[derive(Debug, Clone, Serialize, Deserialize)]
108pub struct SpacingConfig {
109 pub xs: String,
110 pub sm: String,
111 pub md: String,
112 pub lg: String,
113 pub xl: String,
114 pub xxl: String,
115}
116
117#[derive(Debug, Clone, Serialize, Deserialize)]
118pub struct RadiusConfig {
119 pub xs: String,
120 pub sm: String,
121 pub md: String,
122 pub lg: String,
123 pub xl: String,
124 pub xxl: String,
125 pub round: String,
126}
127
128#[derive(Debug, Clone, Serialize, Deserialize)]
129pub struct ShadowsConfig {
130 pub light: ShadowSet,
131 pub dark: ShadowSet,
132}
133
134#[derive(Debug, Clone, Serialize, Deserialize)]
135pub struct ShadowSet {
136 pub sm: String,
137 pub md: String,
138 pub lg: String,
139 pub accent: String,
140}
141
142#[derive(Debug, Clone, Serialize, Deserialize)]
143pub struct AnimationConfig {
144 pub fast: String,
145 pub normal: String,
146 pub slow: String,
147}
148
149#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
150pub struct ZIndexConfig {
151 pub base: u32,
152 pub content: u32,
153 pub navigation: u32,
154 pub modal: u32,
155 pub tooltip: u32,
156}
157
158#[derive(Debug, Clone, Serialize, Deserialize)]
159pub struct LayoutConfig {
160 #[serde(rename = "headerHeight")]
161 pub header_height: String,
162 #[serde(rename = "sidebarLeft")]
163 pub sidebar_left: SidebarConfig,
164 #[serde(rename = "sidebarRight")]
165 pub sidebar_right: SidebarConfig,
166 #[serde(rename = "navHeight")]
167 pub nav_height: String,
168 #[serde(rename = "contentMaxWidth")]
169 pub content_max_width: String,
170}
171
172#[derive(Debug, Clone, Serialize, Deserialize)]
173pub struct SidebarConfig {
174 pub width: String,
175 #[serde(rename = "minWidth")]
176 pub min_width: String,
177 #[serde(rename = "maxWidth")]
178 pub max_width: String,
179}
180
181#[derive(Debug, Clone, Serialize, Deserialize)]
182pub struct CardConfig {
183 pub radius: CardRadius,
184 pub padding: CardPadding,
185 pub gradient: CardGradient,
186}
187
188#[derive(Debug, Clone, Serialize, Deserialize)]
189pub struct CardRadius {
190 pub default: String,
191 pub cut: String,
192}
193
194#[derive(Debug, Clone, Serialize, Deserialize)]
195pub struct CardPadding {
196 pub sm: String,
197 pub md: String,
198 pub lg: String,
199}
200
201#[derive(Debug, Clone, Serialize, Deserialize)]
202pub struct CardGradient {
203 pub start: String,
204 pub mid: String,
205 pub end: String,
206}
207
208#[derive(Debug, Clone, Serialize, Deserialize)]
209pub struct MobileConfig {
210 pub spacing: SpacingConfig,
211 pub typography: MobileTypography,
212 pub layout: MobileLayout,
213 pub card: MobileCardConfig,
214}
215
216#[derive(Debug, Clone, Serialize, Deserialize)]
217pub struct MobileTypography {
218 pub sizes: TypographySizes,
219}
220
221#[derive(Debug, Clone, Serialize, Deserialize)]
222pub struct MobileLayout {
223 #[serde(rename = "headerHeight")]
224 pub header_height: String,
225 #[serde(rename = "navHeight")]
226 pub nav_height: String,
227}
228
229#[derive(Debug, Clone, Serialize, Deserialize)]
230pub struct MobileCardConfig {
231 pub padding: CardPadding,
232}
233
234#[derive(Debug, Clone, Serialize, Deserialize)]
235pub struct TouchTargetsConfig {
236 pub default: String,
237 pub sm: String,
238 pub lg: String,
239}