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