rustyle_css/
lib.rs

1//! Rustyle - Pure Rust CSS-in-RS solution for Leptos 0.8.14
2//!
3//! Rustyle provides compile-time CSS processing with zero runtime overhead,
4//! automatic scoped styles, and full SSR/CSR support for Leptos applications.
5//!
6//! # Example
7//!
8//! ```rust,no_run
9//! use leptos::*;
10//! use rustyle_css::style;
11//!
12//! #[component]
13//! fn Button(cx: Scope) -> impl IntoView {
14//!     let class = style! {
15//!         .button {
16//!             background-color: blue;
17//!             color: white;
18//!             padding: 10px 20px;
19//!             border-radius: 5px;
20//!         }
21//!     };
22//!
23//!     view! { cx,
24//!         <button class=class>"Click Me"</button>
25//!     }
26//! }
27//! ```
28
29#![doc(html_root_url = "https://docs.rs/rustyle-css/0.3.0")]
30
31#[cfg(feature = "csr")]
32#[cfg(feature = "csr")]
33pub mod csr;
34pub mod css;
35pub mod parser;
36pub mod reactive;
37pub mod responsive;
38pub mod scope;
39pub mod ssr;
40pub mod style;
41pub mod theme;
42pub mod tokens;
43pub use tokens::validation::{TokenInheritance, TokenRuntime, TokenValidator, ValidationResult};
44pub mod a11y;
45pub mod animation;
46pub mod components;
47pub mod composition;
48#[cfg(feature = "dev")]
49pub mod dev;
50pub mod dynamic;
51pub mod errors;
52pub mod lint;
53pub mod modules;
54pub mod optimization;
55pub mod testing;
56pub mod utils;
57pub mod view_transitions;
58
59// Re-export theme
60pub use theme::{
61    apply_theme, apply_theme_with_transition, register_system_theme, system_theme_detection, Theme,
62    ThemeManager,
63};
64
65// Re-export macros
66pub use rustyle_macros::{
67    container_style, global_style, keyframes, layer_style, media_style, style, style_signal,
68    style_with_vars,
69};
70// Note: css_module, view_transition, scope_style, starting_style macros are available via rustyle_macros
71// Use them as: rustyle_macros::css_module!("path/to/file.css")
72
73// Re-export for convenience
74pub use style::{register_global_style, register_style, Style};
75
76// Re-export CSS utilities
77pub use css::at_rules::{CustomMediaRule, FontFaceRule, LayerRule, SupportsRule};
78pub use css::StyleBuilder;
79pub use css::{Color, FontSize, FontWeight, Length, Radius, Spacing};
80
81// Re-export design tokens
82pub use tokens::DesignTokens;
83pub use tokens::{
84    AnimationTokens, BorderTokens, ColorTokens, ShadowTokens, SpacingTokens, TypographyTokens,
85};
86
87// Re-export view transitions
88pub use view_transitions::{register_view_transition, ViewTransition, ViewTransitionName};
89
90// Re-export components
91pub use components::{
92    AlertStyle, BadgeStyle, ButtonStyle, CardStyle, ComponentStyle, DropdownStyle, InputStyle,
93    ModalStyle, PaginationStyle, ProgressStyle, SelectStyle, Size, SpinnerStyle, State, TableStyle,
94    TabsStyle, TextareaStyle, TooltipPosition, TooltipStyle, Variant,
95};
96
97// Re-export optimization
98pub use optimization::{extract_critical_css, minify_css, remove_unused_css};
99
100// Re-export accessibility
101pub use a11y::contrast::{contrast_ratio, meets_wcag_aa, meets_wcag_aaa};
102pub use a11y::{reduced_motion_css, register_focus_styles, register_reduced_motion, FocusStyle};
103
104// Re-export animation
105pub use animation::{AnimationState, AnimationStateMachine};
106#[cfg(feature = "csr")]
107pub use reactive::{create_reactive_style, ReactiveStyleBuilder};
108
109// Re-export composition
110pub use composition::{MixinRegistry, StyleComposition, StyleMixin};
111
112// Re-export dynamic styles
113pub use dynamic::DynamicStyleBuilder;
114
115// Re-export errors
116pub use errors::{create_error_message, suggest_property, RustyleError};
117
118// Re-export dev tools (only in dev mode)
119#[cfg(feature = "dev")]
120pub use dev::{hot_reload, DebugInfo, StyleInspector};
121
122// Re-export testing utilities
123pub use testing::{CssAssertions, StyleValidator};
124
125// Re-export linting utilities
126pub use lint::{ContrastLinter, CssLinter, LintResult, LintSeverity};
127
128// Re-export CSS modules
129pub use modules::{CssModule, CssModuleClasses, CssModuleLoader};
130
131/// Initialize Rustyle (call this in your app setup)
132pub fn init() {
133    // Initialize style registry if needed (DashMap initializes lazily)
134    let _ = style::StyleRegistry::get();
135}
136
137#[cfg(test)]
138mod tests {
139    use super::*;
140
141    #[test]
142    fn test_init() {
143        init();
144    }
145}