encre_css/plugins/transition/transition_timing_function/
mod.rs1#![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}