tailwind_rs_core/utilities/layout/
position.rs

1//! Position utilities for tailwind-rs
2
3use crate::classes::ClassBuilder;
4use serde::{Deserialize, Serialize};
5use std::fmt;
6
7/// Position values
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
9pub enum Position {
10    /// Static position
11    Static,
12    /// Fixed position
13    Fixed,
14    /// Absolute position
15    Absolute,
16    /// Relative position
17    Relative,
18    /// Sticky position
19    Sticky,
20}
21
22impl fmt::Display for Position {
23    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
24        match self {
25            Position::Static => write!(f, "static"),
26            Position::Fixed => write!(f, "fixed"),
27            Position::Absolute => write!(f, "absolute"),
28            Position::Relative => write!(f, "relative"),
29            Position::Sticky => write!(f, "sticky"),
30        }
31    }
32}
33
34/// Trait for adding position utilities to a class builder
35pub trait PositionUtilities {
36    fn position(self, position: Position) -> Self;
37}
38
39impl PositionUtilities for ClassBuilder {
40    fn position(self, position: Position) -> Self {
41        self.class(position.to_string())
42    }
43}
44
45#[cfg(test)]
46mod tests {
47    use super::*;
48
49    #[test]
50    fn test_position_utilities() {
51        let classes = ClassBuilder::new()
52            .position(Position::Relative)
53            .build();
54        
55        assert!(classes.to_css_classes().contains("relative"));
56    }
57}