tailwind_rs_core/classes/
class_builder.rs1use crate::responsive::Breakpoint;
6use super::ClassSet;
7
8#[derive(Debug, Clone)]
10pub struct ClassBuilder {
11 class_set: ClassSet,
12}
13
14impl ClassBuilder {
15 pub fn new() -> Self {
17 Self {
18 class_set: ClassSet::new(),
19 }
20 }
21
22 pub fn class(mut self, class: impl Into<String>) -> Self {
24 self.class_set.add_class(class);
25 self
26 }
27
28 pub fn classes(mut self, classes: impl IntoIterator<Item = String>) -> Self {
30 self.class_set.add_classes(classes);
31 self
32 }
33
34 pub fn responsive(mut self, breakpoint: Breakpoint, class: impl Into<String>) -> Self {
36 self.class_set.add_responsive_class(breakpoint, class);
37 self
38 }
39
40 pub fn conditional(mut self, condition: impl Into<String>, class: impl Into<String>) -> Self {
42 self.class_set.add_conditional_class(condition, class);
43 self
44 }
45
46 pub fn custom(mut self, property: impl Into<String>, value: impl Into<String>) -> Self {
48 self.class_set.add_custom(property, value);
49 self
50 }
51
52 pub fn custom_variant(mut self, variant: impl Into<String>, class: impl Into<String>) -> Self {
54 let variant = variant.into();
55 let class = class.into();
56
57 self.class_set.add_conditional_class(variant, class);
59 self
60 }
61
62 pub fn aria(self, aria_attr: impl Into<String>, class: impl Into<String>) -> Self {
64 let variant = format!("aria-{}", aria_attr.into());
65 self.custom_variant(variant, class)
66 }
67
68 pub fn data(self, data_attr: impl Into<String>, value: Option<String>, class: impl Into<String>) -> Self {
70 let variant = if let Some(val) = value {
71 format!("data-{}={}", data_attr.into(), val)
72 } else {
73 format!("data-{}", data_attr.into())
74 };
75 self.custom_variant(variant, class)
76 }
77
78 pub fn supports(self, feature: impl Into<String>, class: impl Into<String>) -> Self {
80 let variant = format!("supports-{}", feature.into());
81 self.custom_variant(variant, class)
82 }
83
84 pub fn build(self) -> ClassSet {
86 self.class_set
87 }
88
89 pub fn build_string(self) -> String {
91 self.class_set.to_css_classes()
92 }
93}
94
95impl Default for ClassBuilder {
96 fn default() -> Self {
97 Self::new()
98 }
99}