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