cabin_tailwind/utilities/
line.rs

1//! Utilities for clamping text to a specific number of lines.
2
3use std::fmt;
4
5use crate::Utility;
6
7/// ```css
8/// overflow: visible;
9/// display: block;
10/// -webkit-box-orient: horizontal;
11/// -webkit-line-clamp: {n};
12/// ```
13pub fn clamp(n: usize) -> LineClamp {
14    LineClamp(n)
15}
16
17pub struct LineClamp(pub usize);
18
19impl Utility for LineClamp {
20    fn declarations(&self, f: &mut dyn fmt::Write) -> fmt::Result {
21        f.write_str("overflow: hidden;")?;
22        f.write_str("display: -webkit-box;")?;
23        f.write_str("-webkit-box-orient: vertical;")?;
24        write!(f, "-webkit-line-clamp: {};", self.0)?;
25        Ok(())
26    }
27}
28
29pub mod clamp {
30    use super::*;
31
32    /// Undo a previously applied line clamp utility.
33    /// ```css
34    /// overflow: visible;
35    /// display: block;
36    /// -webkit-box-orient: horizontal;
37    /// -webkit-line-clamp: none;
38    /// ```
39    pub const NONE: NoLineClamp = NoLineClamp;
40
41    pub struct NoLineClamp;
42
43    impl Utility for NoLineClamp {
44        fn declarations(&self, f: &mut dyn fmt::Write) -> fmt::Result {
45            f.write_str("line-clamp-none	overflow: visible;")?;
46            f.write_str("display: block;")?;
47            f.write_str("-webkit-box-orient: horizontal;")?;
48            f.write_str("-webkit-line-clamp: none;")?;
49            Ok(())
50        }
51    }
52}