tailwind_rs_core/utilities/grid/
template_columns.rs

1//! Grid template columns utilities for tailwind-rs
2
3use crate::classes::ClassBuilder;
4use serde::{Deserialize, Serialize};
5use std::fmt;
6
7/// Grid template columns values
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
9pub enum GridTemplateColumns {
10    /// 1 column
11    Cols1,
12    /// 2 columns
13    Cols2,
14    /// 3 columns
15    Cols3,
16    /// 4 columns
17    Cols4,
18    /// 5 columns
19    Cols5,
20    /// 6 columns
21    Cols6,
22    /// 7 columns
23    Cols7,
24    /// 8 columns
25    Cols8,
26    /// 9 columns
27    Cols9,
28    /// 10 columns
29    Cols10,
30    /// 11 columns
31    Cols11,
32    /// 12 columns
33    Cols12,
34    /// None
35    None,
36    /// Subgrid
37    Subgrid,
38}
39
40impl fmt::Display for GridTemplateColumns {
41    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
42        match self {
43            GridTemplateColumns::Cols1 => write!(f, "grid-cols-1"),
44            GridTemplateColumns::Cols2 => write!(f, "grid-cols-2"),
45            GridTemplateColumns::Cols3 => write!(f, "grid-cols-3"),
46            GridTemplateColumns::Cols4 => write!(f, "grid-cols-4"),
47            GridTemplateColumns::Cols5 => write!(f, "grid-cols-5"),
48            GridTemplateColumns::Cols6 => write!(f, "grid-cols-6"),
49            GridTemplateColumns::Cols7 => write!(f, "grid-cols-7"),
50            GridTemplateColumns::Cols8 => write!(f, "grid-cols-8"),
51            GridTemplateColumns::Cols9 => write!(f, "grid-cols-9"),
52            GridTemplateColumns::Cols10 => write!(f, "grid-cols-10"),
53            GridTemplateColumns::Cols11 => write!(f, "grid-cols-11"),
54            GridTemplateColumns::Cols12 => write!(f, "grid-cols-12"),
55            GridTemplateColumns::None => write!(f, "grid-cols-none"),
56            GridTemplateColumns::Subgrid => write!(f, "grid-cols-subgrid"),
57        }
58    }
59}
60
61/// Trait for adding grid template columns utilities to a class builder
62pub trait GridTemplateColumnsUtilities {
63    fn grid_template_columns(self, columns: GridTemplateColumns) -> Self;
64}
65
66impl GridTemplateColumnsUtilities for ClassBuilder {
67    fn grid_template_columns(self, columns: GridTemplateColumns) -> Self {
68        self.class(columns.to_string())
69    }
70}
71
72#[cfg(test)]
73mod tests {
74    use super::*;
75
76    #[test]
77    fn test_grid_template_columns_display() {
78        assert_eq!(GridTemplateColumns::Cols1.to_string(), "grid-cols-1");
79        assert_eq!(GridTemplateColumns::Cols2.to_string(), "grid-cols-2");
80        assert_eq!(GridTemplateColumns::Cols3.to_string(), "grid-cols-3");
81        assert_eq!(GridTemplateColumns::Cols4.to_string(), "grid-cols-4");
82        assert_eq!(GridTemplateColumns::Cols5.to_string(), "grid-cols-5");
83        assert_eq!(GridTemplateColumns::Cols6.to_string(), "grid-cols-6");
84        assert_eq!(GridTemplateColumns::Cols7.to_string(), "grid-cols-7");
85        assert_eq!(GridTemplateColumns::Cols8.to_string(), "grid-cols-8");
86        assert_eq!(GridTemplateColumns::Cols9.to_string(), "grid-cols-9");
87        assert_eq!(GridTemplateColumns::Cols10.to_string(), "grid-cols-10");
88        assert_eq!(GridTemplateColumns::Cols11.to_string(), "grid-cols-11");
89        assert_eq!(GridTemplateColumns::Cols12.to_string(), "grid-cols-12");
90        assert_eq!(GridTemplateColumns::None.to_string(), "grid-cols-none");
91        assert_eq!(GridTemplateColumns::Subgrid.to_string(), "grid-cols-subgrid");
92    }
93
94    #[test]
95    fn test_grid_template_columns_utilities() {
96        let classes = ClassBuilder::new()
97            .grid_template_columns(GridTemplateColumns::Cols3)
98            .build();
99        
100        assert!(classes.to_css_classes().contains("grid-cols-3"));
101    }
102
103    #[test]
104    fn test_grid_template_columns_serialization() {
105        let columns = GridTemplateColumns::Cols4;
106        let serialized = serde_json::to_string(&columns).unwrap();
107        let deserialized: GridTemplateColumns = serde_json::from_str(&serialized).unwrap();
108        assert_eq!(columns, deserialized);
109    }
110}