swc_css_minifier/compressor/
keyframes.rs1use swc_atoms::atom;
2use swc_common::DUMMY_SP;
3use swc_css_ast::*;
4
5use super::Compressor;
6use crate::is_css_wide_keyword;
7
8impl Compressor {
9 pub(super) fn compress_keyframes_at_rule(&mut self, at_rule: &mut AtRule) {
10 match at_rule.prelude.as_deref() {
11 Some(AtRulePrelude::KeyframesPrelude(KeyframesName::Str(string)))
12 if !is_css_wide_keyword(&string.value)
13 && !string.value.eq_ignore_ascii_case("none") =>
14 {
15 at_rule.prelude = Some(Box::new(AtRulePrelude::KeyframesPrelude(
16 if self.is_ident_shorter_than_str(&string.value) {
17 KeyframesName::CustomIdent(Box::new(CustomIdent {
18 span: string.span,
19 value: string.value.clone(),
20 raw: None,
21 }))
22 } else {
23 KeyframesName::Str(Box::new(Str {
24 span: string.span,
25 value: string.value.clone(),
26 raw: None,
27 }))
28 },
29 )));
30 }
31 _ => {}
32 }
33 }
34
35 pub(super) fn compress_keyframe_selector(&mut self, keyframe_selector: &mut KeyframeSelector) {
36 if let KeyframeSelector::Ident(i) = keyframe_selector {
37 i.value = i.value.to_ascii_lowercase();
38 }
39
40 match keyframe_selector {
41 KeyframeSelector::Ident(i) if i.value == "from" => {
42 *keyframe_selector = KeyframeSelector::Percentage(Percentage {
43 span: i.span,
44 value: Number {
45 span: DUMMY_SP,
46 value: 0.0,
47 raw: None,
48 },
49 })
50 }
51 KeyframeSelector::Percentage(i) if i.value.value == 100.0 => {
52 *keyframe_selector = KeyframeSelector::Ident(Ident {
53 span: i.span,
54 value: atom!("to"),
55 raw: None,
56 })
57 }
58 _ => {}
59 }
60 }
61}