Skip to main content

mcu_material_color/
lib.rs

1// <FILE>src/lib.rs</FILE> - <DESC>Facade crate re-exporting all MCU modules</DESC>
2// <VERS>VERSION: 1.2.0</VERS>
3// <WCTX>Clean up dead code after ColorSpecDelegateImpl2021 implementation</WCTX>
4// <CLOG>Remove PlaceholderColorSpec re-export (dead code)</CLOG>
5
6//! # Material Color Utilities
7//!
8//! Rust port of Google's Material Color Utilities library for generating
9//! dynamic color schemes based on Material Design 3.
10//!
11//! ## Quick Start
12//!
13//! ```rust
14//! use mcu_material_color::prelude::*;
15//!
16//! // Create a scheme from a seed color
17//! let seed_color = 0xFF6750A4; // Purple
18//! let hct = Hct::from_int(seed_color);
19//! let scheme = SchemeTonalSpot::new(hct, false, 0.0);
20//!
21//! // Access the underlying DynamicScheme through Deref
22//! assert!(!scheme.is_dark);
23//! let _primary = &scheme.primary_palette;
24//! ```
25//!
26//! ## Modules
27//!
28//! - [`hct`] - HCT color space (Hue, Chroma, Tone) based on CAM16
29//! - [`palettes`] - Tonal and core color palette generation
30//! - [`scheme`] - Pre-built color scheme variants
31//! - [`dynamiccolor`] - Dynamic color system with runtime resolution
32//! - [`blend`] - Color blending in HCT and CAM16-UCS spaces
33//! - [`contrast`] - WCAG accessibility contrast calculations
34//! - [`quantize`] - Image color quantization algorithms
35//! - [`score`] - Color ranking for theme suitability
36//! - [`dislike`] - Fixing unfavorable colors
37//! - [`temperature`] - Color temperature calculations
38//!
39//! ## Prelude
40//!
41//! For most use cases, import the [`prelude`] module:
42//!
43//! ```rust
44//! use mcu_material_color::prelude::*;
45//! ```
46//!
47//! This provides commonly used types without polluting your namespace.
48
49// Re-export all internal crates as modules
50pub use mcu_blend as blend;
51pub use mcu_contrast as contrast;
52pub use mcu_dislike as dislike;
53pub use mcu_dynamiccolor as dynamiccolor;
54pub use mcu_hct as hct;
55pub use mcu_palettes as palettes;
56pub use mcu_quantize as quantize;
57pub use mcu_scheme as scheme;
58pub use mcu_score as score;
59pub use mcu_temperature as temperature;
60pub use mcu_utils as utils;
61
62// ============================================================================
63// Convenience re-exports for commonly used types
64// ============================================================================
65
66// HCT color space types
67pub use hct::{Cam16, Hct, ViewingConditions};
68
69// Palette types
70pub use palettes::{CorePalette, CorePaletteColors, TonalPalette};
71
72// Dynamic color system types
73pub use dynamiccolor::{
74    ColorSpecDelegate, ColorSpecDelegateImpl2021, ColorSpecDelegateImpl2025, ContrastCurve,
75    DeltaConstraint, DynamicColor, DynamicScheme, DynamicSchemeOptions, MaterialDynamicColors,
76    Platform, SpecVersion, ToneDeltaPair, TonePolarity, Variant,
77};
78
79// Scheme variants
80pub use scheme::{
81    SchemeContent, SchemeExpressive, SchemeFidelity, SchemeFruitSalad, SchemeMonochrome,
82    SchemeNeutral, SchemeRainbow, SchemeTonalSpot, SchemeVibrant,
83};
84
85// Blending
86pub use blend::Blend;
87
88// Contrast
89pub use contrast::Contrast;
90
91// Quantization
92pub use quantize::{QuantizerCelebi, QuantizerMap, QuantizerWsmeans, QuantizerWu};
93
94// Scoring
95pub use score::{Score, ScoreOptions};
96
97// ============================================================================
98// Prelude module for common imports
99// ============================================================================
100
101/// Prelude module providing commonly used types.
102///
103/// Import with:
104/// ```rust
105/// use mcu_material_color::prelude::*;
106/// ```
107///
108/// This includes:
109/// - HCT color representation
110/// - All scheme variants
111/// - Dynamic color system core types
112/// - Palette types
113/// - Blending, contrast, quantization, and scoring utilities
114pub mod prelude {
115    // HCT - the fundamental color type
116    pub use crate::Cam16;
117    pub use crate::Hct;
118    pub use crate::ViewingConditions;
119
120    // Palettes
121    pub use crate::CorePalette;
122    pub use crate::TonalPalette;
123
124    // Dynamic color core types
125    pub use crate::ContrastCurve;
126    pub use crate::DynamicColor;
127    pub use crate::DynamicScheme;
128    pub use crate::DynamicSchemeOptions;
129    pub use crate::MaterialDynamicColors;
130    pub use crate::Platform;
131    pub use crate::SpecVersion;
132    pub use crate::Variant;
133
134    // All scheme variants
135    pub use crate::SchemeContent;
136    pub use crate::SchemeExpressive;
137    pub use crate::SchemeFidelity;
138    pub use crate::SchemeFruitSalad;
139    pub use crate::SchemeMonochrome;
140    pub use crate::SchemeNeutral;
141    pub use crate::SchemeRainbow;
142    pub use crate::SchemeTonalSpot;
143    pub use crate::SchemeVibrant;
144
145    // Utility types
146    pub use crate::Blend;
147    pub use crate::Contrast;
148    pub use crate::QuantizerCelebi;
149    pub use crate::Score;
150    pub use crate::ScoreOptions;
151}
152
153// <FILE>src/lib.rs</FILE> - <DESC>Facade crate re-exporting all MCU modules</DESC>
154// <VERS>END OF VERSION: 1.2.0</VERS>