tailwind_css/modules/borders/outline/
mod.rs

1use super::*;
2
3pub(crate) mod outline_color;
4pub(crate) mod outline_offset;
5pub(crate) mod outline_style;
6pub(crate) mod outline_width;
7
8pub(crate) fn outline_adaptor(pattern: &[&str], arbitrary: &TailwindArbitrary) -> Result<Box<dyn TailwindInstance>> {
9    let out = match pattern {
10        // https://tailwindcss.com/docs/outline-style
11        [] if arbitrary.is_none() => TailwindOutlineStyle::from("solid").boxed(),
12        [s @ ("dashed" | "dotted" | "double" | "hidden" | "solid")] => TailwindOutlineStyle::from(*s).boxed(),
13        ["none"] => TailwindOutlineStyle::from("<NONE>").boxed(),
14        ["style", rest @ ..] => TailwindOutlineStyle::parse(rest, arbitrary)?.boxed(),
15        // https://tailwindcss.com/docs/outline-offset
16        ["offset", rest @ ..] => TailwindOutlineOffset::parse(rest, arbitrary)?.boxed(),
17        // https://tailwindcss.com/docs/outline-width
18        ["width", rest @ ..] => TailwindOutlineWidth::parse(rest, arbitrary)?.boxed(),
19        // https://tailwindcss.com/docs/outline-color
20        ["black" | "white" | "inherit" | "current" | "transparent" | "revert"] =>
21            TailwindOutlineColor::parse(pattern, arbitrary)?.boxed(),
22        ["color", rest @ ..] => TailwindOutlineColor::parse(rest, arbitrary)?.boxed(),
23        // Flexible parsing pattern
24        [] if arbitrary.as_str().starts_with(|c: char| c.is_numeric()) => TailwindOutlineWidth::from(arbitrary).boxed(),
25        [n] => resolve1(n)?,
26        _ => TailwindOutlineColor::parse(pattern, arbitrary)?.boxed(),
27    };
28    Ok(out)
29}
30
31fn resolve1(n: &str) -> Result<Box<dyn TailwindInstance>> {
32    let a = TailwindArbitrary::from(n);
33    if n.starts_with(|c: char| c.is_numeric()) {
34        return Ok(resolve1_length(&a).or_else(|_| resolve1_unit(&a))?.boxed());
35    }
36    if n.starts_with(|c: char| c == '#') {
37        return Ok(resolve1_color(&a)?.boxed());
38    }
39    Ok(TailwindOutlineColor::from(TailwindColor::Themed(n.to_string(), 0)).boxed())
40}
41
42fn resolve1_length(a: &TailwindArbitrary) -> Result<TailwindOutlineWidth> {
43    Ok(TailwindOutlineWidth::from(a.as_length()?))
44}
45
46fn resolve1_unit(a: &TailwindArbitrary) -> Result<TailwindOutlineWidth> {
47    Ok(TailwindOutlineWidth::from(a.as_integer()?))
48}
49
50fn resolve1_color(a: &TailwindArbitrary) -> Result<TailwindOutlineColor> {
51    Ok(TailwindOutlineColor::from(a.as_color()?))
52}