tailwind_css_fixes/modules/borders/outline/outline_style/
mod.rs1use crate::StandardValue;
2
3use super::*;
4
5#[doc=include_str!("readme.md")]
6#[derive(Clone, Debug)]
7pub struct TailwindOutlineStyle {
8 kind: StandardValue,
9}
10
11impl<T> From<T> for TailwindOutlineStyle
12where
13 T: Into<String>,
14{
15 fn from(input: T) -> Self {
16 Self { kind: StandardValue::from(input.into()) }
17 }
18}
19
20impl Display for TailwindOutlineStyle {
21 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
22 write!(f, "outline")?;
23 match &self.kind {
24 StandardValue::Keyword(s) => match s.as_str() {
25 "solid" => write!(f, ""),
26 "<NONE>" => write!(f, "-none"),
27 s @ ("dashed" | "dotted" | "double" | "hidden") => write!(f, "-{}", s),
28 _ => write!(f, "-style-{}", s),
29 },
30 StandardValue::Arbitrary(a) => a.write_class(f, "-style-"),
31 }
32 }
33}
34
35impl TailwindInstance for TailwindOutlineStyle {
36 fn attributes(&self, _: &TailwindBuilder) -> CssAttributes {
37 match &self.kind {
38 StandardValue::Keyword(s) => match s.as_str() {
39 "<NONE>" => css_attributes! {
40 "outline-style" => "none"
41 },
42 "hidden" => css_attributes! {
43 "outline" => "2px solid transparent",
44 "outline-offset" => "2px"
45 },
46 _ => css_attributes! {
47 "outline-style" => s
48 },
49 },
50 StandardValue::Arbitrary(s) => css_attributes! {
51 "outline-style" => s.get_properties()
52 },
53 }
54 }
55}
56
57impl TailwindOutlineStyle {
58 pub fn parse(pattern: &[&str], arbitrary: &TailwindArbitrary) -> Result<Self> {
60 let kind = match pattern {
61 ["none"] => StandardValue::from("<NONE>"),
62 [] if arbitrary.is_none() => StandardValue::from("solid"),
63 _ => StandardValue::parser("outline-style", &Self::check_valid)(pattern, arbitrary)?,
64 };
65 Ok(Self { kind })
66 }
67 pub fn check_valid(mode: &str) -> bool {
69 let set = BTreeSet::from_iter(vec![
70 "auto", "dashed", "dotted", "double", "groove", "inherit", "initial", "inset", "none", "outset", "revert", "ridge",
71 "solid", "unset",
72 ]);
73 set.contains(mode)
74 }
75}