Skip to main content

css_ast/types/
animateable_feature.rs

1use super::prelude::*;
2
3/// <https://drafts.csswg.org/css-will-change-1/#typedef-animateable-feature>
4///
5/// ```text,ignore
6/// <animateable-feature> = scroll-position | contents | <custom-ident>
7/// ```
8#[derive(Parse, Peek, IntoCursor, ToCursors, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
9#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
10#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit(self))]
11#[derive(csskit_derives::NodeWithMetadata)]
12pub enum AnimateableFeature {
13	#[atom(CssAtomSet::ScrollPosition)]
14	ScrollPosition(T![Ident]),
15	#[atom(CssAtomSet::Contents)]
16	Contents(T![Ident]),
17
18	// These are known "custom idents" that Firefox, Safari and WebKit support.
19	// See https://searchfox.org/mozilla-central/source/servo/components/style/values/specified/box.rs#1001-1025
20	// and also https://searchfox.org/mozilla-central/source/servo/components/style/values/specified/box.rs#1033-1053
21	// for Firefox.
22	//
23	// See https://searchfox.org/wubkat/source/Source/WebCore/rendering/style/WillChangeData.cpp for Safari
24	//
25	// See https://source.chromium.org/search?q=%22WillChangeProperties().Contains%22
26	// and also https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/style/computed_style.cc;l=1366-1400
27	// for Chromium
28
29	// Shared
30	#[atom(CssAtomSet::BackdropFilter)]
31	BackdropFilter(T![Ident]),
32	#[atom(CssAtomSet::ClipPath)]
33	ClipPath(T![Ident]),
34	#[atom(CssAtomSet::Contain)]
35	Contain(T![Ident]),
36	#[atom(CssAtomSet::Filter)]
37	Filter(T![Ident]),
38	#[atom(CssAtomSet::Isolation)]
39	Isolation(T![Ident]),
40	#[atom(CssAtomSet::MixBlendMode)]
41	MixBlendMode(T![Ident]),
42	#[atom(CssAtomSet::OffsetPath)]
43	OffsetPath(T![Ident]),
44	#[atom(CssAtomSet::Opacity)]
45	Opacity(T![Ident]),
46	#[atom(CssAtomSet::Perspective)]
47	Perspective(T![Ident]),
48	#[atom(CssAtomSet::Position)]
49	Position(T![Ident]),
50	#[atom(CssAtomSet::Rotate)]
51	Rotate(T![Ident]),
52	#[atom(CssAtomSet::Scale)]
53	Scale(T![Ident]),
54	#[atom(CssAtomSet::Transform)]
55	Transform(T![Ident]),
56	#[atom(CssAtomSet::TransformStyle)]
57	TransformStyle(T![Ident]),
58	#[atom(CssAtomSet::Translate)]
59	Translate(T![Ident]),
60	#[atom(CssAtomSet::ZIndex)]
61	ZIndex(T![Ident]),
62
63	// Chrome also supports
64	#[atom(CssAtomSet::ViewTransitionName)]
65	ViewTransitionName(T![Ident]),
66
67	// Chrome & Safari (but not Firefox) support
68	#[atom(CssAtomSet::Mask)]
69	Mask(T![Ident]),
70	#[atom(CssAtomSet::OffsetPosition)]
71	OffsetPosition(T![Ident]),
72	#[atom(CssAtomSet::_WebkitBoxReflect)]
73	WebkitBoxReflect(T![Ident]),
74	#[atom(CssAtomSet::_WebkitMaskBoxImage)]
75	WebkitMaskBoxImage(T![Ident]),
76
77	// Safari also supports
78	#[atom(CssAtomSet::MaskBorder)]
79	MaskBorder(T![Ident]),
80	#[atom(CssAtomSet::_WebkitMask)]
81	WebkitMask(T![Ident]),
82	#[atom(CssAtomSet::_WebkitPerspective)]
83	WebkitPerspective(T![Ident]),
84	#[atom(CssAtomSet::_WebkitBackdropFilter)]
85	WebkitBackdropFilter(T![Ident]),
86	#[atom(CssAtomSet::_WebkitOverflowScrolling)]
87	WebkitOverflowScrolling(T![Ident]),
88
89	// Firefox & Safari also supports:
90	#[atom(CssAtomSet::MaskImage)]
91	MaskImage(T![Ident]),
92
93	CustomIdent(T![Ident]),
94}