css_ast/types/
animateable_feature.rs

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