1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
5pub struct KitSpec {
6 pub name: String,
7 pub version: String,
8 pub brand: KitBrand,
9 pub colors: KitColors,
10 pub typography: KitTypography,
11 #[serde(default)]
12 pub density: KitDensity,
13 #[serde(default)]
14 pub radius: KitRadius,
15 #[serde(default)]
16 pub components: KitComponents,
17 #[serde(default)]
18 pub templates: Vec<String>,
19}
20
21#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
22pub struct KitBrand {
23 pub vibe: String,
24 #[serde(default)]
25 pub industry: Option<String>,
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
29pub struct KitColors {
30 pub primary: String,
31 #[serde(default)]
32 pub accent: Option<String>,
33 #[serde(default)]
34 pub surface: Option<String>,
35 #[serde(default)]
36 pub background: Option<String>,
37 #[serde(default)]
38 pub text: Option<String>,
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
42pub struct KitTypography {
43 pub family: String,
44 #[serde(default)]
45 pub scale: Option<String>,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, Default)]
49#[serde(rename_all = "snake_case")]
50pub enum KitDensity {
51 Compact,
52 #[default]
53 Comfortable,
54 Spacious,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, Default)]
58#[serde(rename_all = "snake_case")]
59pub enum KitRadius {
60 None,
61 Sm,
62 #[default]
63 Md,
64 Lg,
65 Xl,
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, Default)]
69pub struct KitComponents {
70 #[serde(default)]
71 pub button: Option<KitComponentButton>,
72 #[serde(default)]
73 pub card: Option<KitComponentCard>,
74 #[serde(default)]
75 pub input: Option<KitComponentInput>,
76 #[serde(default)]
77 pub table: Option<KitComponentTable>,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
81pub struct KitComponentButton {
82 #[serde(default)]
83 pub variants: Vec<String>,
84}
85
86#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
87pub struct KitComponentCard {
88 #[serde(default)]
89 pub elevation: Option<String>,
90}
91
92#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
93pub struct KitComponentInput {
94 #[serde(default)]
95 pub style: Option<String>,
96}
97
98#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
99pub struct KitComponentTable {
100 #[serde(default)]
101 pub striped: Option<bool>,
102}