encre_css/plugins/border/ring_width/
mod.rs

1#![doc = include_str!("README.md")]
2#![doc(alias = "border")]
3use crate::prelude::build_plugin::*;
4
5#[derive(Debug)]
6pub(crate) struct PluginDefinition;
7
8impl Plugin for PluginDefinition {
9    fn can_handle(&self, context: ContextCanHandle) -> bool {
10        match context.modifier {
11            Modifier::Builtin { value, .. } => {
12                value.is_empty() || value.parse::<usize>().is_ok()
13            }
14            Modifier::Arbitrary {
15                hint,
16                value,
17                prefix,
18            } => {
19                prefix.is_empty()
20                    && (*hint == "length" || (hint.is_empty() && is_matching_length(value)))
21            }
22        }
23    }
24
25    fn handle(&self, context: &mut ContextHandle) {
26        match context.modifier {
27            Modifier::Builtin { value, .. } => {
28                context.buffer.line(format_args!("--en-ring-shadow: 0 0 0 calc({}px + var(--en-ring-offset-width)) var(--en-ring-color);", if value.is_empty() { "1" } else { value }));
29            }
30            Modifier::Arbitrary { value, .. } => context.buffer.line(format_args!("--en-ring-shadow: var(--en-ring-inset) 0 0 0 calc({value} + var(--en-ring-offset-width)) var(--en-ring-color);")),
31        }
32
33        context.buffer.line("box-shadow: var(--en-inset-shadow, 0 0 #0000), var(--en-inset-ring-shadow, 0 0 #0000), var(--en-ring-offset-shadow, 0 0 #0000), var(--en-ring-shadow), var(--en-shadow, 0 0 #0000);");
34    }
35}
36
37#[derive(Debug)]
38pub(crate) struct PluginInsetDefinition;
39
40impl Plugin for PluginInsetDefinition {
41    fn can_handle(&self, context: ContextCanHandle) -> bool {
42        match context.modifier {
43            Modifier::Builtin { value, .. } => {
44                value.is_empty() || value.parse::<usize>().is_ok()
45            }
46            Modifier::Arbitrary {
47                hint,
48                value,
49                prefix,
50            } => {
51                prefix.is_empty()
52                    && (*hint == "length" || (hint.is_empty() && is_matching_length(value)))
53            }
54        }
55    }
56
57    fn handle(&self, context: &mut ContextHandle) {
58        match context.modifier {
59            Modifier::Builtin { value, .. } => {
60                context.buffer.line(format_args!("--en-inset-ring-shadow: inset 0 0 0 calc({}px + var(--en-ring-offset-width)) var(--en-ring-color);", if value.is_empty() { "1" } else { value }));
61            }
62            Modifier::Arbitrary { value, .. } => context.buffer.line(format_args!("--en-inset-ring-shadow: inset 0 0 0 calc({value} + var(--en-ring-offset-width)) var(--en-ring-color);")),
63        }
64
65        context.buffer.line("box-shadow: var(--en-inset-shadow, 0 0 #0000), var(--en-inset-ring-shadow), var(--en-ring-offset-shadow, 0 0 #0000), var(--en-ring-shadow, 0 0 #0000), var(--en-shadow, 0 0 #0000);");
66    }
67}