tailwind_rs_core/classes/
class_builder.rs1use crate::responsive::Breakpoint;
27use super::ClassSet;
28
29#[derive(Debug, Clone)]
31pub struct ClassBuilder {
32 class_set: ClassSet,
33}
34
35impl ClassBuilder {
36 pub fn new() -> Self {
38 Self {
39 class_set: ClassSet::new(),
40 }
41 }
42
43 pub fn class(mut self, class: impl Into<String>) -> Self {
45 self.class_set.add_class(class);
46 self
47 }
48
49 pub fn classes(mut self, classes: impl IntoIterator<Item = String>) -> Self {
51 self.class_set.add_classes(classes);
52 self
53 }
54
55 pub fn responsive(mut self, breakpoint: Breakpoint, class: impl Into<String>) -> Self {
57 self.class_set.add_responsive_class(breakpoint, class);
58 self
59 }
60
61 pub fn conditional(mut self, condition: impl Into<String>, class: impl Into<String>) -> Self {
63 self.class_set.add_conditional_class(condition, class);
64 self
65 }
66
67 pub fn custom(mut self, property: impl Into<String>, value: impl Into<String>) -> Self {
69 self.class_set.add_custom(property, value);
70 self
71 }
72
73 pub fn custom_variant(mut self, variant: impl Into<String>, class: impl Into<String>) -> Self {
75 let variant = variant.into();
76 let class = class.into();
77
78 self.class_set.add_conditional_class(variant, class);
80 self
81 }
82
83 pub fn aria(self, aria_attr: impl Into<String>, class: impl Into<String>) -> Self {
85 let variant = format!("aria-{}", aria_attr.into());
86 self.custom_variant(variant, class)
87 }
88
89 pub fn data(self, data_attr: impl Into<String>, value: Option<String>, class: impl Into<String>) -> Self {
91 let variant = if let Some(val) = value {
92 format!("data-{}={}", data_attr.into(), val)
93 } else {
94 format!("data-{}", data_attr.into())
95 };
96 self.custom_variant(variant, class)
97 }
98
99 pub fn supports(self, feature: impl Into<String>, class: impl Into<String>) -> Self {
101 let variant = format!("supports-{}", feature.into());
102 self.custom_variant(variant, class)
103 }
104
105 pub fn build(self) -> ClassSet {
107 self.class_set
108 }
109
110 pub fn build_string(self) -> String {
112 self.class_set.to_css_classes()
113 }
114}
115
116impl Default for ClassBuilder {
117 fn default() -> Self {
118 Self::new()
119 }
120}