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>