encre_css/plugins/transition/transition_timing_function/
mod.rs

1#![doc = include_str!("README.md")]
2#![doc(alias = "transition")]
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, .. } => ["linear", "in", "out", "in-out"].contains(value),
12            Modifier::Arbitrary { value, .. } => is_matching_all(value),
13        }
14    }
15
16    fn handle(&self, context: &mut ContextHandle) {
17        match context.modifier {
18            Modifier::Builtin { value, .. } => match *value {
19                "linear" => context.buffer.line("transition-timing-function: linear;"),
20                "in" => context
21                    .buffer
22                    .line("transition-timing-function: cubic-bezier(0.4, 0, 1, 1);"),
23                "out" => context
24                    .buffer
25                    .line("transition-timing-function: cubic-bezier(0, 0, 0.2, 1);"),
26                "in-out" => context
27                    .buffer
28                    .line("transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);"),
29                _ => unreachable!(),
30            },
31            Modifier::Arbitrary { value, .. } => {
32                context
33                    .buffer
34                    .line(format_args!("transition-timing-function: {value};"));
35            }
36        }
37    }
38}