tailwind_rs_core/utilities/grid/
column_span.rs

1//! Grid column span utilities for tailwind-rs
2
3use crate::classes::ClassBuilder;
4use serde::{Deserialize, Serialize};
5use std::fmt;
6
7/// Grid column span values
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
9pub enum GridColumnSpan {
10    /// Span 1 column
11    Span1,
12    /// Span 2 columns
13    Span2,
14    /// Span 3 columns
15    Span3,
16    /// Span 4 columns
17    Span4,
18    /// Span 5 columns
19    Span5,
20    /// Span 6 columns
21    Span6,
22    /// Span 7 columns
23    Span7,
24    /// Span 8 columns
25    Span8,
26    /// Span 9 columns
27    Span9,
28    /// Span 10 columns
29    Span10,
30    /// Span 11 columns
31    Span11,
32    /// Span 12 columns
33    Span12,
34    /// Span all columns
35    SpanFull,
36}
37
38impl fmt::Display for GridColumnSpan {
39    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
40        match self {
41            GridColumnSpan::Span1 => write!(f, "col-span-1"),
42            GridColumnSpan::Span2 => write!(f, "col-span-2"),
43            GridColumnSpan::Span3 => write!(f, "col-span-3"),
44            GridColumnSpan::Span4 => write!(f, "col-span-4"),
45            GridColumnSpan::Span5 => write!(f, "col-span-5"),
46            GridColumnSpan::Span6 => write!(f, "col-span-6"),
47            GridColumnSpan::Span7 => write!(f, "col-span-7"),
48            GridColumnSpan::Span8 => write!(f, "col-span-8"),
49            GridColumnSpan::Span9 => write!(f, "col-span-9"),
50            GridColumnSpan::Span10 => write!(f, "col-span-10"),
51            GridColumnSpan::Span11 => write!(f, "col-span-11"),
52            GridColumnSpan::Span12 => write!(f, "col-span-12"),
53            GridColumnSpan::SpanFull => write!(f, "col-span-full"),
54        }
55    }
56}
57
58/// Trait for adding grid column span utilities to a class builder
59pub trait GridColumnSpanUtilities {
60    fn grid_column_span(self, span: GridColumnSpan) -> Self;
61}
62
63impl GridColumnSpanUtilities for ClassBuilder {
64    fn grid_column_span(self, span: GridColumnSpan) -> Self {
65        self.class(span.to_string())
66    }
67}
68
69#[cfg(test)]
70mod tests {
71    use super::*;
72
73    #[test]
74    fn test_grid_column_span_display() {
75        assert_eq!(GridColumnSpan::Span1.to_string(), "col-span-1");
76        assert_eq!(GridColumnSpan::Span2.to_string(), "col-span-2");
77        assert_eq!(GridColumnSpan::SpanFull.to_string(), "col-span-full");
78    }
79
80    #[test]
81    fn test_grid_column_span_utilities() {
82        let classes = ClassBuilder::new()
83            .grid_column_span(GridColumnSpan::Span3)
84            .build();
85        
86        assert!(classes.to_css_classes().contains("col-span-3"));
87    }
88}