Skip to main content

material_color_utils/helpers/
structs.rs

1use crate::dynamic::color_spec::{Platform, SpecVersion};
2use crate::dynamic::variant::Variant;
3use crate::palettes::tonal_palette::TonalPalette;
4use crate::utils::color_utils::Argb;
5
6#[derive(Debug, Clone, PartialEq)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8pub struct MaterializedTheme {
9    pub source_color: Argb,
10    pub variant: Variant,
11    pub contrast_level: f64,
12    pub platform: Platform,
13    pub spec_version: SpecVersion,
14    pub schemes: MaterializedSchemeGroup,
15}
16
17#[derive(Debug, Clone, PartialEq)]
18#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
19pub struct MaterializedSchemeGroup {
20    pub light: MaterializedScheme,
21    pub dark: MaterializedScheme,
22}
23
24#[derive(Debug, Clone, PartialEq)]
25#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
26pub struct MaterializedScheme {
27    // Metadata and Parameters
28    pub is_dark: bool,
29    pub source_color: Argb,
30    pub variant: Variant,
31    pub contrast_level: f64,
32    pub platform: Platform,
33    pub spec_version: SpecVersion,
34
35    // Tonal Palettes
36    pub primary_palette: TonalPalette,
37    pub secondary_palette: TonalPalette,
38    pub tertiary_palette: TonalPalette,
39    pub neutral_palette: TonalPalette,
40    pub neutral_variant_palette: TonalPalette,
41    pub error_palette: TonalPalette,
42
43    // Surface and Background Colors
44    pub background: Argb,
45    pub on_background: Argb,
46    pub surface: Argb,
47    pub surface_dim: Argb,
48    pub surface_bright: Argb,
49    pub surface_container_lowest: Argb,
50    pub surface_container_low: Argb,
51    pub surface_container: Argb,
52    pub surface_container_high: Argb,
53    pub surface_container_highest: Argb,
54    pub on_surface: Argb,
55    pub surface_variant: Argb,
56    pub on_surface_variant: Argb,
57    pub inverse_surface: Argb,
58    pub inverse_on_surface: Argb,
59
60    // Utility and Decorative
61    pub outline: Argb,
62    pub outline_variant: Argb,
63    pub shadow: Argb,
64    pub scrim: Argb,
65    pub surface_tint: Argb,
66
67    // Primary Brand Colors
68    pub primary: Argb,
69    pub on_primary: Argb,
70    pub primary_container: Argb,
71    pub on_primary_container: Argb,
72    pub inverse_primary: Argb,
73
74    // Secondary Brand Colors
75    pub secondary: Argb,
76    pub on_secondary: Argb,
77    pub secondary_container: Argb,
78    pub on_secondary_container: Argb,
79
80    // Tertiary Brand Colors
81    pub tertiary: Argb,
82    pub on_tertiary: Argb,
83    pub tertiary_container: Argb,
84    pub on_tertiary_container: Argb,
85
86    // Error Colors
87    pub error: Argb,
88    pub on_error: Argb,
89    pub error_container: Argb,
90    pub on_error_container: Argb,
91
92    // Fixed Accent Colors
93    pub primary_fixed: Argb,
94    pub primary_fixed_dim: Argb,
95    pub on_primary_fixed: Argb,
96    pub on_primary_fixed_variant: Argb,
97
98    pub secondary_fixed: Argb,
99    pub secondary_fixed_dim: Argb,
100    pub on_secondary_fixed: Argb,
101    pub on_secondary_fixed_variant: Argb,
102
103    pub tertiary_fixed: Argb,
104    pub tertiary_fixed_dim: Argb,
105    pub on_tertiary_fixed: Argb,
106    pub on_tertiary_fixed_variant: Argb,
107}