rustyle_css/tokens/
mod.rs1pub mod animation;
8pub mod border;
9pub mod color;
10pub mod shadow;
11pub mod spacing;
12pub mod typography;
13pub mod validation;
14
15pub use animation::AnimationTokens;
16pub use border::BorderTokens;
17pub use color::ColorTokens;
18pub use shadow::ShadowTokens;
19pub use spacing::SpacingTokens;
20pub use typography::TypographyTokens;
21pub use validation::{TokenInheritance, TokenRuntime, TokenValidator, ValidationResult};
22
23#[derive(Clone, Debug)]
30pub struct DesignTokens {
31 pub colors: ColorTokens,
33 pub spacing: SpacingTokens,
35 pub typography: TypographyTokens,
37 pub shadows: ShadowTokens,
39 pub borders: BorderTokens,
41 pub animations: AnimationTokens,
43}
44
45impl DesignTokens {
46 pub fn new() -> Self {
48 Self {
49 colors: ColorTokens::default(),
50 spacing: SpacingTokens::default(),
51 typography: TypographyTokens::default(),
52 shadows: ShadowTokens::default(),
53 borders: BorderTokens::default(),
54 animations: AnimationTokens::default(),
55 }
56 }
57
58 pub fn custom(
60 colors: ColorTokens,
61 spacing: SpacingTokens,
62 typography: TypographyTokens,
63 shadows: ShadowTokens,
64 borders: BorderTokens,
65 animations: AnimationTokens,
66 ) -> Self {
67 Self {
68 colors,
69 spacing,
70 typography,
71 shadows,
72 borders,
73 animations,
74 }
75 }
76
77 pub fn to_css_vars(&self) -> String {
79 let mut vars = String::from(":root {\n");
80
81 vars.push_str(&self.colors.to_css_vars());
83
84 vars.push_str(&self.spacing.to_css_vars());
86
87 vars.push_str(&self.typography.to_css_vars());
89
90 vars.push_str(&self.shadows.to_css_vars());
92
93 vars.push_str(&self.borders.to_css_vars());
95
96 vars.push_str(&self.animations.to_css_vars());
98
99 vars.push_str("}\n");
100 vars
101 }
102}
103
104impl Default for DesignTokens {
105 fn default() -> Self {
106 Self::new()
107 }
108}