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