tailwind_css/modules/flexbox/flex/
mod.rs1use super::*;
2
3pub(crate) mod flex_direction;
4pub(crate) mod flex_wrap;
5
6#[doc=include_str!("readme.md")]
7#[derive(Debug, Clone)]
8pub struct TailwindFlex {
9 kind: NumericValue,
10}
11
12impl Display for TailwindFlex {
13 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
14 write!(f, "flex-{}", self.kind)
15 }
16}
17
18impl TailwindInstance for TailwindFlex {
19 fn attributes(&self, _: &TailwindBuilder) -> CssAttributes {
20 let flex = self.kind.get_properties(|f| f.to_string());
21 css_attributes! {
22 "flex" => flex
23 }
24 }
25}
26
27impl TailwindFlex {
28 pub fn adapt(pattern: &[&str], arbitrary: &TailwindArbitrary) -> Result<Box<dyn TailwindInstance>> {
29 let out = match pattern {
30 [] if arbitrary.is_none() => TailwindDisplay::from("flex").boxed(),
33 [] => TailwindFlex::parse_arbitrary(arbitrary)?.boxed(),
35 ["row"] => TailwindFlexDirection::from("row").boxed(),
37 ["row", "reverse"] => TailwindFlexDirection::from("row-reverse").boxed(),
38 ["col"] => TailwindFlexDirection::from("column").boxed(),
39 ["col", "reverse"] => TailwindFlexDirection::from("column-reverse").boxed(),
40 ["direction", rest @ ..] => TailwindFlexDirection::parse(rest, arbitrary)?.boxed(),
41 ["wrap", rest @ ..] => TailwindFlexWrap::parse(rest, arbitrary)?.boxed(),
43 ["nowrap"] => TailwindFlexWrap::from("nowrap").boxed(),
44 _ => Self::parse(pattern, arbitrary)?.boxed(),
46 };
47 Ok(out)
48 }
49 pub fn parse(pattern: &[&str], arbitrary: &TailwindArbitrary) -> Result<TailwindFlex> {
51 let kind = NumericValue::positive_parser("flex", &Self::check_valid)(pattern, arbitrary)?;
52 Ok(TailwindFlex { kind })
53 }
54 pub fn parse_arbitrary(arbitrary: &TailwindArbitrary) -> Result<Self> {
56 NumericValue::parse_arbitrary(arbitrary).map(|kind| Self { kind })
57 }
58 pub fn check_valid(mode: &str) -> bool {
60 let set = BTreeSet::from_iter(vec!["auto", "inherit", "initial", "initial", "none", "revert", "unset"]);
61 set.contains(mode)
62 }
63}