Skip to main content

css_ast/values/
webkit.rs

1//! Webkit-prefixed CSS property value types.
2//!
3//! Non-standard aliases for standardised properties, kept for compatibility
4//! with legacy stylesheets.
5
6use super::prelude::*;
7use crate::{Length, PositionOne, PositionTwo};
8use css_parse::{Cursor, Parse, Parser, Result as ParseResult};
9
10/// Represents the style value for `-webkit-filter`.
11///
12/// Legacy alias for `filter`. Accepts the same grammar.
13///
14/// The grammar is defined as:
15///
16/// ```text,ignore
17/// none | <filter-value-list>
18/// ```
19#[syntax(" none | <filter-value-list> ")]
20#[derive(
21	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
22)]
23#[declaration_metadata(
24    initial = "none",
25    applies_to = Unknown,
26    animation_type = Unknown,
27    property_group = FilterEffects,
28    computed_value_type = AsSpecified,
29    canonical_order = "per grammar",
30)]
31#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
32#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
33#[derive(csskit_derives::NodeWithMetadata)]
34pub struct WebkitFilterStyleValue<'a>;
35
36/// Represents the style value for `-webkit-flex`.
37///
38/// Legacy alias for `flex`. Accepts the same grammar.
39///
40/// The grammar is defined as:
41///
42/// ```text,ignore
43/// none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
44/// ```
45#[syntax(" none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ] ")]
46#[derive(
47	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
48)]
49#[declaration_metadata(
50    initial = "0 1 auto",
51    applies_to = Elements,
52    animation_type = Unknown,
53    property_group = Flexbox,
54    computed_value_type = Unknown,
55    canonical_order = "per grammar",
56)]
57#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
58#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
59#[derive(csskit_derives::NodeWithMetadata)]
60pub struct WebkitFlexStyleValue;
61
62/// Represents the style value for `-webkit-order`.
63///
64/// Legacy alias for `order`. Accepts the same grammar.
65///
66/// The grammar is defined as:
67///
68/// ```text,ignore
69/// <integer>
70/// ```
71#[syntax(" <integer> ")]
72#[derive(
73	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
74)]
75#[declaration_metadata(
76    initial = "0",
77    applies_to = Elements,
78    animation_type = ByComputedValue,
79    property_group = Flexbox,
80    computed_value_type = AsSpecified,
81    canonical_order = "per grammar",
82)]
83#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
84#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
85#[derive(csskit_derives::NodeWithMetadata)]
86pub struct WebkitOrderStyleValue;
87
88/// Represents the style value for `-webkit-transform-origin`.
89///
90/// Legacy alias for `transform-origin`. Accepts the same grammar.
91///
92/// The grammar is defined as:
93///
94/// ```text,ignore
95/// <position-one> | <position-two> <length>?
96/// ```
97#[syntax(" <position-one> | <position-two> <length>? ")]
98#[derive(
99	Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
100)]
101#[declaration_metadata(
102    initial = "none",
103    applies_to = Unknown,
104    animation_type = Unknown,
105    property_group = FilterEffects,
106    computed_value_type = AsSpecified,
107    canonical_order = "per grammar",
108)]
109#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
110#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
111#[derive(csskit_derives::NodeWithMetadata)]
112pub enum WebkitTransformOriginStyleValue {}
113
114impl<'a> Parse<'a> for WebkitTransformOriginStyleValue {
115	fn parse<I>(p: &mut Parser<'a, I>) -> ParseResult<Self>
116	where
117		I: Iterator<Item = Cursor> + Clone,
118	{
119		let first = p.parse::<PositionOne>()?;
120		let Some(second) = p.parse_if_peek::<PositionOne>()? else { return Ok(Self::PositionOne(first)) };
121		let two = PositionTwo::from_two(p, first, second)?;
122		Ok(Self::PositionTwo(two, p.parse_if_peek::<Length>()?))
123	}
124}
125
126/// Represents the style value for `-webkit-transition`.
127///
128/// Legacy alias for `transition`. Accepts the same grammar.
129///
130/// The grammar is defined as:
131///
132/// ```text,ignore
133/// <single-transition>#
134/// ```
135#[syntax(" <single-transition># ")]
136#[derive(
137	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
138)]
139#[declaration_metadata(
140    initial = "see individual properties",
141    applies_to = Elements,
142    property_group = Transitions,
143    computed_value_type = Unknown,
144    canonical_order = "per grammar",
145)]
146#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
147#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
148#[derive(csskit_derives::NodeWithMetadata)]
149pub struct WebkitTransitionStyleValue<'a>;
150
151/// Represents the style value for `-webkit-appearance`.
152///
153/// Legacy alias for `appearance`. Accepts the same grammar.
154///
155/// The grammar is defined as:
156///
157/// ```text,ignore
158/// none | auto | base | base-select | <compat-auto> | <compat-special>
159/// ```
160#[syntax(" none | auto | base | base-select | <compat-auto> | <compat-special> ")]
161#[derive(
162	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
163)]
164#[declaration_metadata(
165    initial = "none",
166    applies_to = Elements,
167    animation_type = Discrete,
168    property_group = Ui,
169    computed_value_type = Unknown,
170    canonical_order = "per grammar",
171)]
172#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
173#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
174#[derive(csskit_derives::NodeWithMetadata)]
175pub enum WebkitAppearanceStyleValue {}
176
177/// Represents the style value for `-webkit-transform`.
178///
179/// Legacy alias for `transform`. Accepts the same grammar.
180///
181/// The grammar is defined as:
182///
183/// ```text,ignore
184/// none | <transform-list>
185/// ```
186#[syntax(" none | <transform-list> ")]
187#[derive(
188	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
189)]
190#[declaration_metadata(
191    initial = "none",
192    applies_to = Unknown,
193    animation_type = Unknown,
194    property_group = Transforms,
195    computed_value_type = AsSpecified,
196    canonical_order = "per grammar",
197)]
198#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
199#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
200#[derive(csskit_derives::NodeWithMetadata)]
201pub struct WebkitTransformStyleValue<'a>;
202
203/// Represents the style value for `-webkit-font-smoothing`.
204///
205/// Non-standard WebKit property controlling font antialiasing.
206///
207/// The grammar is defined as:
208///
209/// ```text,ignore
210/// auto | none | antialiased | subpixel-antialiased
211/// ```
212#[syntax(" auto | none | antialiased | subpixel-antialiased ")]
213#[derive(
214	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
215)]
216#[declaration_metadata(
217    initial = "auto",
218    applies_to = Unknown,
219    animation_type = Unknown,
220    property_group = Fonts,
221    computed_value_type = AsSpecified,
222    canonical_order = "per grammar",
223)]
224#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
225#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
226#[derive(csskit_derives::NodeWithMetadata)]
227pub enum WebkitFontSmoothingStyleValue {}
228
229/// Represents the style value for `-webkit-text-size-adjust`.
230///
231/// Legacy alias for `text-size-adjust`.
232///
233/// The grammar is defined as:
234///
235/// ```text,ignore
236/// auto | none | <percentage [0,∞]>
237/// ```
238#[syntax(" auto | none | <percentage [0,∞]> ")]
239#[derive(
240	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
241)]
242#[declaration_metadata(
243    initial = "auto",
244    inherits,
245    applies_to = Elements,
246    animation_type = ByComputedValue,
247    percentages = Unknown,
248    property_group = SizeAdjust,
249    computed_value_type = Unknown,
250    canonical_order = "N/A",
251)]
252#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
253#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
254#[derive(csskit_derives::NodeWithMetadata)]
255pub struct WebkitTextSizeAdjustStyleValue;
256
257/// Represents the style value for `-webkit-animation-delay`.
258///
259/// Legacy alias for `animation-delay`. Accepts the same grammar.
260///
261/// The grammar is defined as:
262///
263/// ```text,ignore
264/// <time>#
265/// ```
266#[syntax(" <time># ")]
267#[derive(
268	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
269)]
270#[declaration_metadata(
271    initial = "0s",
272    applies_to = Elements,
273    property_group = Animations,
274    computed_value_type = Unknown,
275    canonical_order = "per grammar",
276)]
277#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
278#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
279#[derive(csskit_derives::NodeWithMetadata)]
280pub struct WebkitAnimationDelayStyleValue<'a>;
281
282/// Represents the style value for `-webkit-animation-duration`.
283///
284/// Legacy alias for `animation-duration`. Accepts the same grammar.
285///
286/// The grammar is defined as:
287///
288/// ```text,ignore
289/// [ auto | <time [0s,∞]> ]#
290/// ```
291#[syntax(" [ auto | <time [0s,∞]> ]# ")]
292#[derive(
293	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
294)]
295#[declaration_metadata(
296    initial = "auto",
297    applies_to = Elements,
298    property_group = Animations,
299    computed_value_type = Unknown,
300    canonical_order = "per grammar",
301)]
302#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
303#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
304#[derive(csskit_derives::NodeWithMetadata)]
305pub struct WebkitAnimationDurationStyleValue<'a>;
306
307/// Represents the style value for `-webkit-animation-fill-mode`.
308///
309/// Legacy alias for `animation-fill-mode`. Accepts the same grammar.
310///
311/// The grammar is defined as:
312///
313/// ```text,ignore
314/// <single-animation-fill-mode>#
315/// ```
316#[syntax(" <single-animation-fill-mode># ")]
317#[derive(
318	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
319)]
320#[declaration_metadata(
321    initial = "none",
322    applies_to = Elements,
323    property_group = Animations,
324    computed_value_type = Unknown,
325    canonical_order = "per grammar",
326)]
327#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
328#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
329#[derive(csskit_derives::NodeWithMetadata)]
330pub struct WebkitAnimationFillModeStyleValue<'a>;
331
332/// Represents the style value for `-webkit-animation-iteration-count`.
333///
334/// Legacy alias for `animation-iteration-count`. Accepts the same grammar.
335///
336/// The grammar is defined as:
337///
338/// ```text,ignore
339/// <single-animation-iteration-count>#
340/// ```
341#[syntax(" <single-animation-iteration-count># ")]
342#[derive(
343	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
344)]
345#[declaration_metadata(
346    initial = "1",
347    applies_to = Elements,
348    property_group = Animations,
349    computed_value_type = Unknown,
350    canonical_order = "per grammar",
351)]
352#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
353#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
354#[derive(csskit_derives::NodeWithMetadata)]
355pub struct WebkitAnimationIterationCountStyleValue<'a>;
356
357/// Represents the style value for `-webkit-animation-name`.
358///
359/// Legacy alias for `animation-name`. Accepts the same grammar.
360///
361/// The grammar is defined as:
362///
363/// ```text,ignore
364/// [ none | <keyframes-name> ]#
365/// ```
366#[syntax(" [ none | <keyframes-name> ]# ")]
367#[derive(
368	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
369)]
370#[declaration_metadata(
371    initial = "none",
372    applies_to = Elements,
373    property_group = Animations,
374    computed_value_type = Unknown,
375    canonical_order = "per grammar",
376)]
377#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
378#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
379#[derive(csskit_derives::NodeWithMetadata)]
380pub struct WebkitAnimationNameStyleValue<'a>;
381
382/// Represents the style value for `-webkit-animation-timing-function`.
383///
384/// Legacy alias for `animation-timing-function`. Accepts the same grammar.
385///
386/// The grammar is defined as:
387///
388/// ```text,ignore
389/// <easing-function>#
390/// ```
391#[syntax(" <easing-function># ")]
392#[derive(
393	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
394)]
395#[declaration_metadata(
396    initial = "ease",
397    applies_to = Elements,
398    property_group = Animations,
399    computed_value_type = Unknown,
400    canonical_order = "per grammar",
401)]
402#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
403#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
404#[derive(csskit_derives::NodeWithMetadata)]
405pub struct WebkitAnimationTimingFunctionStyleValue<'a>;
406
407/// Represents the style value for `-webkit-backface-visibility`.
408///
409/// Legacy alias for `backface-visibility`. Accepts the same grammar.
410///
411/// The grammar is defined as:
412///
413/// ```text,ignore
414/// visible | hidden
415/// ```
416#[syntax(" visible | hidden ")]
417#[derive(
418	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
419)]
420#[declaration_metadata(
421    initial = "visible",
422    applies_to = Elements,
423    property_group = Transforms,
424    computed_value_type = AsSpecified,
425    canonical_order = "per grammar",
426)]
427#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
428#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
429#[derive(csskit_derives::NodeWithMetadata)]
430pub enum WebkitBackfaceVisibilityStyleValue {}
431
432/// Represents the style value for `-webkit-tap-highlight-color`.
433///
434/// Non-standard property. Sets the highlight colour when an element is tapped.
435///
436/// The grammar is defined as:
437///
438/// ```text,ignore
439/// <color>
440/// ```
441#[syntax(" <color> ")]
442#[derive(
443	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
444)]
445#[declaration_metadata(
446    initial = "transparent",
447    applies_to = Elements,
448    property_group = Ui,
449    computed_value_type = AsSpecified,
450    canonical_order = "per grammar",
451)]
452#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
453#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
454#[derive(csskit_derives::NodeWithMetadata)]
455pub struct WebkitTapHighlightColorStyleValue<'a>;
456
457/// Represents the style value for `-webkit-transition-duration`.
458///
459/// Legacy alias for `transition-duration`. Accepts the same grammar.
460///
461/// The grammar is defined as:
462///
463/// ```text,ignore
464/// <time [0s,∞]>#
465/// ```
466#[syntax(" <time [0s,∞]># ")]
467#[derive(
468	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
469)]
470#[declaration_metadata(
471    initial = "0s",
472    applies_to = Elements,
473    property_group = Transitions,
474    computed_value_type = Unknown,
475    canonical_order = "per grammar",
476)]
477#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
478#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
479#[derive(csskit_derives::NodeWithMetadata)]
480pub struct WebkitTransitionDurationStyleValue<'a>;
481
482/// Represents the style value for `-webkit-transition-timing-function`.
483///
484/// Legacy alias for `transition-timing-function`. Accepts the same grammar.
485///
486/// The grammar is defined as:
487///
488/// ```text,ignore
489/// <easing-function>#
490/// ```
491#[syntax(" <easing-function># ")]
492#[derive(
493	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
494)]
495#[declaration_metadata(
496    initial = "ease",
497    applies_to = Elements,
498    property_group = Transitions,
499    computed_value_type = AsSpecified,
500    canonical_order = "per grammar",
501)]
502#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
503#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
504#[derive(csskit_derives::NodeWithMetadata)]
505pub struct WebkitTransitionTimingFunctionStyleValue<'a>;
506
507// ── Flexbox aliases ──────────────────────────────────────────────────────────
508
509/// `-webkit-flex-direction` — alias for `flex-direction`.
510#[syntax(" row | row-reverse | column | column-reverse ")]
511#[derive(
512	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
513)]
514#[declaration_metadata(
515    initial = "row",
516    applies_to = Elements,
517    animation_type = Discrete,
518    property_group = Flexbox,
519    computed_value_type = AsSpecified,
520    canonical_order = "per grammar",
521)]
522#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
523#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
524#[derive(csskit_derives::NodeWithMetadata)]
525pub enum WebkitFlexDirectionStyleValue {}
526
527/// `-webkit-flex-wrap` — alias for `flex-wrap`.
528#[syntax(" nowrap | wrap | wrap-reverse ")]
529#[derive(
530	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
531)]
532#[declaration_metadata(
533    initial = "nowrap",
534    applies_to = Elements,
535    animation_type = Discrete,
536    property_group = Flexbox,
537    computed_value_type = AsSpecified,
538    canonical_order = "per grammar",
539)]
540#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
541#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
542#[derive(csskit_derives::NodeWithMetadata)]
543pub enum WebkitFlexWrapStyleValue {}
544
545/// `-webkit-flex-basis` — alias for `flex-basis`.
546#[syntax(" content | <'width'> ")]
547#[derive(
548	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
549)]
550#[declaration_metadata(
551    initial = "auto",
552    applies_to = Elements,
553    animation_type = ByComputedValue,
554    property_group = Flexbox,
555    computed_value_type = Unknown,
556    canonical_order = "per grammar",
557)]
558#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
559#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
560#[derive(csskit_derives::NodeWithMetadata)]
561pub enum WebkitFlexBasisStyleValue {}
562
563/// `-webkit-flex-flow` — alias for `flex-flow`.
564#[syntax(" <'flex-direction'> || <'flex-wrap'> ")]
565#[derive(
566	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
567)]
568#[declaration_metadata(
569    initial = "see individual properties",
570    applies_to = Elements,
571    property_group = Flexbox,
572    computed_value_type = Unknown,
573    canonical_order = "per grammar",
574)]
575#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
576#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
577#[derive(csskit_derives::NodeWithMetadata)]
578pub struct WebkitFlexFlowStyleValue;
579
580/// `-webkit-flex-grow` — alias for `flex-grow`.
581#[syntax(" <number [0,∞]> ")]
582#[derive(
583	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
584)]
585#[declaration_metadata(
586    initial = "0",
587    applies_to = Elements,
588    animation_type = ByComputedValue,
589    property_group = Flexbox,
590    computed_value_type = AsSpecified,
591    canonical_order = "per grammar",
592)]
593#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
594#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
595#[derive(csskit_derives::NodeWithMetadata)]
596pub struct WebkitFlexGrowStyleValue;
597
598/// `-webkit-justify-content` — alias for `justify-content`.
599#[syntax(" normal | <content-distribution> | <overflow-position>? [ <content-position> | left | right ] ")]
600#[derive(
601	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
602)]
603#[declaration_metadata(
604    initial = "normal",
605    applies_to = Elements,
606    animation_type = Discrete,
607    property_group = Align,
608    computed_value_type = AsSpecified,
609    canonical_order = "per grammar",
610)]
611#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
612#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
613#[derive(csskit_derives::NodeWithMetadata)]
614pub enum WebkitJustifyContentStyleValue {}
615
616/// `-webkit-align-items` — alias for `align-items`.
617#[syntax(" normal | stretch | <baseline-position> | <overflow-position>? <self-position> ")]
618#[derive(
619	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
620)]
621#[declaration_metadata(
622    initial = "normal",
623    applies_to = Elements,
624    animation_type = Discrete,
625    property_group = Align,
626    computed_value_type = AsSpecified,
627    canonical_order = "per grammar",
628)]
629#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
630#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
631#[derive(csskit_derives::NodeWithMetadata)]
632pub enum WebkitAlignItemsStyleValue {}
633
634/// `-webkit-align-self` — alias for `align-self`.
635#[syntax(" auto | <overflow-position>? [ normal | <self-position> ] | stretch | <baseline-position> ")]
636#[derive(
637	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
638)]
639#[declaration_metadata(
640    initial = "auto",
641    applies_to = Elements,
642    animation_type = Discrete,
643    property_group = Align,
644    computed_value_type = AsSpecified,
645    canonical_order = "per grammar",
646)]
647#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
648#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
649#[derive(csskit_derives::NodeWithMetadata)]
650pub enum WebkitAlignSelfStyleValue {}
651
652/// `-webkit-align-content` — alias for `align-content`.
653#[syntax(" normal | <baseline-position> | <content-distribution> | <overflow-position>? <content-position> ")]
654#[derive(
655	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
656)]
657#[declaration_metadata(
658    initial = "normal",
659    applies_to = Elements,
660    animation_type = Discrete,
661    property_group = Align,
662    computed_value_type = AsSpecified,
663    canonical_order = "per grammar",
664)]
665#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
666#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
667#[derive(csskit_derives::NodeWithMetadata)]
668pub enum WebkitAlignContentStyleValue {}
669
670// ── Legacy box model ─────────────────────────────────────────────────────────
671
672/// `-webkit-box-orient` — legacy flexbox axis direction.
673#[syntax(" horizontal | vertical | inline-axis | block-axis ")]
674#[derive(
675	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
676)]
677#[declaration_metadata(
678    initial = "inline-axis",
679    applies_to = Elements,
680    animation_type = Discrete,
681    property_group = Flexbox,
682    computed_value_type = AsSpecified,
683    canonical_order = "per grammar",
684)]
685#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
686#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
687#[derive(csskit_derives::NodeWithMetadata)]
688pub enum WebkitBoxOrientStyleValue {}
689
690/// `-webkit-box-direction` — legacy flexbox item order direction.
691#[syntax(" normal | reverse ")]
692#[derive(
693	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
694)]
695#[declaration_metadata(
696    initial = "normal",
697    applies_to = Elements,
698    animation_type = Discrete,
699    property_group = Flexbox,
700    computed_value_type = AsSpecified,
701    canonical_order = "per grammar",
702)]
703#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
704#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
705#[derive(csskit_derives::NodeWithMetadata)]
706pub enum WebkitBoxDirectionStyleValue {}
707
708/// `-webkit-box-pack` — legacy flexbox main-axis alignment.
709#[syntax(" start | end | center | justify ")]
710#[derive(
711	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
712)]
713#[declaration_metadata(
714    initial = "start",
715    applies_to = Elements,
716    animation_type = Discrete,
717    property_group = Flexbox,
718    computed_value_type = AsSpecified,
719    canonical_order = "per grammar",
720)]
721#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
722#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
723#[derive(csskit_derives::NodeWithMetadata)]
724pub enum WebkitBoxPackStyleValue {}
725
726/// `-webkit-box-align` — legacy flexbox cross-axis alignment.
727#[syntax(" stretch | start | end | center | baseline ")]
728#[derive(
729	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
730)]
731#[declaration_metadata(
732    initial = "stretch",
733    applies_to = Elements,
734    animation_type = Discrete,
735    property_group = Flexbox,
736    computed_value_type = AsSpecified,
737    canonical_order = "per grammar",
738)]
739#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
740#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
741#[derive(csskit_derives::NodeWithMetadata)]
742pub enum WebkitBoxAlignStyleValue {}
743
744/// `-webkit-box-flex` — legacy flexbox grow factor.
745#[syntax(" <number> ")]
746#[derive(
747	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
748)]
749#[declaration_metadata(
750    initial = "0",
751    applies_to = Elements,
752    animation_type = ByComputedValue,
753    property_group = Flexbox,
754    computed_value_type = AsSpecified,
755    canonical_order = "per grammar",
756)]
757#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
758#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
759#[derive(csskit_derives::NodeWithMetadata)]
760pub struct WebkitBoxFlexStyleValue;
761
762/// `-webkit-box-ordinal-group` — legacy flexbox ordering.
763#[syntax(" <integer [1,∞]> ")]
764#[derive(
765	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
766)]
767#[declaration_metadata(
768    initial = "1",
769    applies_to = Elements,
770    animation_type = ByComputedValue,
771    property_group = Flexbox,
772    computed_value_type = AsSpecified,
773    canonical_order = "per grammar",
774)]
775#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
776#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
777#[derive(csskit_derives::NodeWithMetadata)]
778pub struct WebkitBoxOrdinalGroupStyleValue;
779
780/// `-webkit-box-shadow` — alias for `box-shadow`.
781#[syntax(" <spread-shadow># ")]
782#[derive(
783	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
784)]
785#[declaration_metadata(
786    initial = "none",
787    applies_to = Elements,
788    animation_type = ByComputedValue,
789    property_group = Borders,
790    computed_value_type = Unknown,
791    canonical_order = "per grammar",
792)]
793#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
794#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
795#[derive(csskit_derives::NodeWithMetadata)]
796pub struct WebkitBoxShadowStyleValue<'a>;
797
798/// `-webkit-box-sizing` — alias for `box-sizing`.
799#[syntax(" content-box | border-box ")]
800#[derive(
801	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
802)]
803#[declaration_metadata(
804    initial = "content-box",
805    applies_to = Elements,
806    animation_type = Discrete,
807    property_group = Sizing,
808    computed_value_type = AsSpecified,
809    canonical_order = "per grammar",
810)]
811#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
812#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
813#[derive(csskit_derives::NodeWithMetadata)]
814pub enum WebkitBoxSizingStyleValue {}
815
816/// `-webkit-box-decoration-break` — alias for `box-decoration-break`.
817#[syntax(" clone | slice ")]
818#[derive(
819	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
820)]
821#[declaration_metadata(
822    initial = "slice",
823    applies_to = Elements,
824    animation_type = Discrete,
825    property_group = Borders,
826    computed_value_type = AsSpecified,
827    canonical_order = "per grammar",
828)]
829#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
830#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
831#[derive(csskit_derives::NodeWithMetadata)]
832pub enum WebkitBoxDecorationBreakStyleValue {}
833
834// ── Misc aliases ─────────────────────────────────────────────────────────────
835
836/// `-webkit-user-select` — alias for `user-select`.
837#[syntax(" auto | text | none | all ")]
838#[derive(
839	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
840)]
841#[declaration_metadata(
842    initial = "auto",
843    applies_to = Elements,
844    animation_type = Discrete,
845    property_group = Ui,
846    computed_value_type = AsSpecified,
847    canonical_order = "per grammar",
848)]
849#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
850#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
851#[derive(csskit_derives::NodeWithMetadata)]
852pub enum WebkitUserSelectStyleValue {}
853
854/// `-webkit-overflow-scrolling` — non-standard momentum scrolling on iOS.
855#[syntax(" auto | touch ")]
856#[derive(
857	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
858)]
859#[declaration_metadata(
860    initial = "auto",
861    applies_to = Elements,
862    animation_type = Discrete,
863    property_group = Overflow,
864    computed_value_type = AsSpecified,
865    canonical_order = "per grammar",
866)]
867#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
868#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
869#[derive(csskit_derives::NodeWithMetadata)]
870pub enum WebkitOverflowScrollingStyleValue {}
871
872/// `-webkit-print-color-adjust` — alias for `print-color-adjust`.
873#[syntax(" economy | exact ")]
874#[derive(
875	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
876)]
877#[declaration_metadata(
878    initial = "economy",
879    inherits,
880    applies_to = Elements,
881    animation_type = Discrete,
882    property_group = ColorAdjust,
883    computed_value_type = AsSpecified,
884    canonical_order = "per grammar",
885)]
886#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
887#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
888#[derive(csskit_derives::NodeWithMetadata)]
889pub enum WebkitPrintColorAdjustStyleValue {}
890
891/// `-webkit-text-decoration` — alias for `text-decoration`.
892#[syntax(
893	" <'text-decoration-line'> || <'text-decoration-thickness'> || <'text-decoration-style'> || <'text-decoration-color'> "
894)]
895#[derive(
896	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
897)]
898#[declaration_metadata(
899    initial = "see individual properties",
900    applies_to = Elements,
901    animation_type = Unknown,
902    property_group = TextDecor,
903    computed_value_type = Unknown,
904    canonical_order = "per grammar",
905)]
906#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
907#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
908#[derive(csskit_derives::NodeWithMetadata)]
909pub struct WebkitTextDecorationStyleValue<'a>;
910
911/// `-webkit-text-decoration-color` — alias for `text-decoration-color`.
912#[syntax(" <color> ")]
913#[derive(
914	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
915)]
916#[declaration_metadata(
917    initial = "currentcolor",
918    inherits,
919    applies_to = Elements,
920    animation_type = ByComputedValue,
921    property_group = TextDecor,
922    computed_value_type = Unknown,
923    canonical_order = "per grammar",
924)]
925#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
926#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
927#[derive(csskit_derives::NodeWithMetadata)]
928pub struct WebkitTextDecorationColorStyleValue<'a>;
929
930/// `-webkit-text-decoration-skip-ink` — alias for `text-decoration-skip-ink`.
931#[syntax(" auto | none | all ")]
932#[derive(
933	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
934)]
935#[declaration_metadata(
936    initial = "auto",
937    inherits,
938    applies_to = Elements,
939    animation_type = Discrete,
940    property_group = TextDecor,
941    computed_value_type = AsSpecified,
942    canonical_order = "per grammar",
943)]
944#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
945#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
946#[derive(csskit_derives::NodeWithMetadata)]
947pub enum WebkitTextDecorationSkipInkStyleValue {}
948
949/// `-webkit-column-gap` — alias for `column-gap`.
950#[syntax(" normal | <length-percentage [0,∞]> | <line-width> ")]
951#[derive(
952	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
953)]
954#[declaration_metadata(
955    initial = "normal",
956    applies_to = Elements,
957    animation_type = ByComputedValue,
958    property_group = Gaps,
959    computed_value_type = Unknown,
960    canonical_order = "per grammar",
961)]
962#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
963#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
964#[derive(csskit_derives::NodeWithMetadata)]
965pub enum WebkitColumnGapStyleValue {}
966
967/// `-webkit-column-count` — alias for `column-count`.
968#[syntax(" auto | <integer [1,∞]> ")]
969#[derive(
970	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
971)]
972#[declaration_metadata(
973    initial = "auto",
974    applies_to = Elements,
975    animation_type = ByComputedValue,
976    property_group = Multicol,
977    computed_value_type = AsSpecified,
978    canonical_order = "per grammar",
979)]
980#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
981#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
982#[derive(csskit_derives::NodeWithMetadata)]
983pub struct WebkitColumnCountStyleValue;
984
985/// `-webkit-margin-end` — alias for `margin-inline-end`.
986#[syntax(" <'margin-top'> ")]
987#[derive(
988	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
989)]
990#[declaration_metadata(
991    initial = "0",
992    applies_to = Elements,
993    animation_type = ByComputedValue,
994    property_group = Logical,
995    computed_value_type = Unknown,
996    canonical_order = "per grammar",
997)]
998#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
999#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
1000#[derive(csskit_derives::NodeWithMetadata)]
1001pub struct WebkitMarginEndStyleValue;
1002
1003/// `-webkit-mask-position` — alias for `mask-position`.
1004#[syntax(" <position># ")]
1005#[derive(
1006	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
1007)]
1008#[declaration_metadata(
1009    initial = "0% 0%",
1010    applies_to = Elements,
1011    animation_type = Unknown,
1012    property_group = Masking,
1013    computed_value_type = Unknown,
1014    canonical_order = "per grammar",
1015)]
1016#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
1017#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
1018#[derive(csskit_derives::NodeWithMetadata)]
1019pub struct WebkitMaskPositionStyleValue<'a>;
1020
1021/// `-webkit-mask-size` — alias for `mask-size`.
1022#[syntax(" <bg-size># ")]
1023#[derive(
1024	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
1025)]
1026#[declaration_metadata(
1027    initial = "auto",
1028    applies_to = Elements,
1029    animation_type = Unknown,
1030    property_group = Masking,
1031    computed_value_type = Unknown,
1032    canonical_order = "per grammar",
1033)]
1034#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
1035#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
1036#[derive(csskit_derives::NodeWithMetadata)]
1037pub struct WebkitMaskSizeStyleValue<'a>;
1038
1039/// `-webkit-transition-property` — alias for `transition-property`.
1040#[syntax(" none | <single-transition-property># ")]
1041#[derive(
1042	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
1043)]
1044#[declaration_metadata(
1045    initial = "all",
1046    applies_to = Elements,
1047    property_group = Transitions,
1048    computed_value_type = Unknown,
1049    canonical_order = "per grammar",
1050)]
1051#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
1052#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
1053#[derive(csskit_derives::NodeWithMetadata)]
1054pub struct WebkitTransitionPropertyStyleValue<'a>;
1055
1056/// `-webkit-transition-delay` — alias for `transition-delay`.
1057#[syntax(" <time># ")]
1058#[derive(
1059	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
1060)]
1061#[declaration_metadata(
1062    initial = "0s",
1063    applies_to = Elements,
1064    property_group = Transitions,
1065    computed_value_type = Unknown,
1066    canonical_order = "per grammar",
1067)]
1068#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
1069#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
1070#[derive(csskit_derives::NodeWithMetadata)]
1071pub struct WebkitTransitionDelayStyleValue<'a>;
1072
1073/// `-webkit-user-drag` — non-standard drag behaviour.
1074#[syntax(" auto | none | element ")]
1075#[derive(
1076	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
1077)]
1078#[declaration_metadata(
1079    initial = "auto",
1080    applies_to = Elements,
1081    animation_type = Discrete,
1082    property_group = Ui,
1083    computed_value_type = AsSpecified,
1084    canonical_order = "per grammar",
1085)]
1086#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
1087#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
1088#[derive(csskit_derives::NodeWithMetadata)]
1089pub enum WebkitUserDragStyleValue {}
1090
1091/// `-webkit-touch-callout` — non-standard iOS touch callout behaviour.
1092#[syntax(" default | none ")]
1093#[derive(
1094	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
1095)]
1096#[declaration_metadata(
1097    initial = "default",
1098    inherits,
1099    applies_to = Elements,
1100    animation_type = Discrete,
1101    property_group = Ui,
1102    computed_value_type = AsSpecified,
1103    canonical_order = "per grammar",
1104)]
1105#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
1106#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
1107#[derive(csskit_derives::NodeWithMetadata)]
1108pub enum WebkitTouchCalloutStyleValue {}
1109
1110/// `-webkit-text-fill-color` — non-standard text fill colour.
1111#[syntax(" <color> ")]
1112#[derive(
1113	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
1114)]
1115#[declaration_metadata(
1116    initial = "currentcolor",
1117    inherits,
1118    applies_to = Elements,
1119    animation_type = ByComputedValue,
1120    property_group = Fonts,
1121    computed_value_type = Unknown,
1122    canonical_order = "per grammar",
1123)]
1124#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
1125#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
1126#[derive(csskit_derives::NodeWithMetadata)]
1127pub struct WebkitTextFillColorStyleValue<'a>;
1128
1129/// `-webkit-text-stroke-color` — non-standard text stroke colour.
1130#[syntax(" <color> ")]
1131#[derive(
1132	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
1133)]
1134#[declaration_metadata(
1135    initial = "currentcolor",
1136    inherits,
1137    applies_to = Elements,
1138    animation_type = ByComputedValue,
1139    property_group = Fonts,
1140    computed_value_type = Unknown,
1141    canonical_order = "per grammar",
1142)]
1143#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
1144#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
1145#[derive(csskit_derives::NodeWithMetadata)]
1146pub struct WebkitTextStrokeColorStyleValue<'a>;
1147
1148/// `-webkit-text-stroke-width` — non-standard text stroke width.
1149#[syntax(" <line-width> ")]
1150#[derive(
1151	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
1152)]
1153#[declaration_metadata(
1154    initial = "0",
1155    inherits,
1156    applies_to = Elements,
1157    animation_type = Discrete,
1158    property_group = Fonts,
1159    computed_value_type = Unknown,
1160    canonical_order = "per grammar",
1161)]
1162#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
1163#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
1164#[derive(csskit_derives::NodeWithMetadata)]
1165pub struct WebkitTextStrokeWidthStyleValue;
1166
1167/// `-webkit-background-clip` — alias for `background-clip`.
1168#[syntax(" <bg-clip># ")]
1169#[derive(
1170	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
1171)]
1172#[declaration_metadata(
1173    initial = "border-box",
1174    applies_to = Elements,
1175    animation_type = Discrete,
1176    property_group = Backgrounds,
1177    computed_value_type = AsSpecified,
1178    canonical_order = "per grammar",
1179)]
1180#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
1181#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
1182#[derive(csskit_derives::NodeWithMetadata)]
1183pub struct WebkitBackgroundClipStyleValue<'a>;
1184
1185/// `-webkit-background-size` — alias for `background-size`.
1186#[syntax(" <bg-size># ")]
1187#[derive(
1188	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
1189)]
1190#[declaration_metadata(
1191    initial = "auto",
1192    applies_to = Elements,
1193    animation_type = ByComputedValue,
1194    property_group = Backgrounds,
1195    computed_value_type = Unknown,
1196    canonical_order = "per grammar",
1197)]
1198#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
1199#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
1200#[derive(csskit_derives::NodeWithMetadata)]
1201pub struct WebkitBackgroundSizeStyleValue<'a>;
1202
1203// TODO: `-webkit-animation` — alias for `animation`.
1204// Blocked on `<single-animation>` type (animation shorthand not yet implemented).
1205// #[syntax(" <single-animation># ")]
1206// pub struct WebkitAnimationStyleValue<'a>;
1207
1208/// `-webkit-perspective` — alias for `perspective`.
1209#[syntax(" none | <length [0,∞]> ")]
1210#[derive(
1211	Parse, Peek, ToSpan, ToCursors, DeclarationMetadata, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
1212)]
1213#[declaration_metadata(
1214    initial = "none",
1215    applies_to = Elements,
1216    animation_type = ByComputedValue,
1217    property_group = Transforms,
1218    computed_value_type = Unknown,
1219    canonical_order = "per grammar",
1220)]
1221#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
1222#[cfg_attr(feature = "visitable", derive(Visitable), visit)]
1223#[derive(csskit_derives::NodeWithMetadata)]
1224pub struct WebkitPerspectiveStyleValue;
1225
1226// TODO: `-webkit-clip-path` — alias for `clip-path`.
1227// Blocked on `<basic-shape>` and `<clip-source>` types (Todo stubs).
1228// #[syntax(" none | <clip-source> | [ <basic-shape> || <geometry-box> ] ")]
1229// pub enum WebkitClipPathStyleValue<'a> {}
1230
1231#[cfg(test)]
1232mod tests {
1233	use super::*;
1234	use crate::CssAtomSet;
1235	use css_parse::{assert_parse, assert_parse_error, assert_peek_false};
1236
1237	#[test]
1238	fn size_test() {
1239		assert_eq!(std::mem::size_of::<WebkitFilterStyleValue>(), 32);
1240	}
1241
1242	#[test]
1243	fn test_parses() {
1244		assert_parse!(CssAtomSet::ATOMS, WebkitFilterStyleValue, "none");
1245		assert_parse!(CssAtomSet::ATOMS, WebkitFilterStyleValue, "blur(4px)");
1246		assert_parse!(CssAtomSet::ATOMS, WebkitFilterStyleValue, "brightness(0.5) contrast(1.2)");
1247		assert_parse!(CssAtomSet::ATOMS, WebkitFilterStyleValue, "drop-shadow(2px 4px)");
1248		assert_parse!(CssAtomSet::ATOMS, WebkitFilterStyleValue, "drop-shadow(red 2px 4px)");
1249	}
1250
1251	#[test]
1252	fn test_errors() {
1253		assert_peek_false!(CssAtomSet::ATOMS, WebkitFilterStyleValue, "invalid");
1254	}
1255
1256	#[test]
1257	fn size_test_transition() {
1258		assert_eq!(
1259			std::mem::size_of::<WebkitTransitionStyleValue>(),
1260			std::mem::size_of::<crate::values::TransitionStyleValue>()
1261		);
1262	}
1263
1264	#[test]
1265	fn test_transition_parses() {
1266		assert_parse!(CssAtomSet::ATOMS, WebkitTransitionStyleValue, "none");
1267		assert_parse!(CssAtomSet::ATOMS, WebkitTransitionStyleValue, "all 0.3s ease");
1268		assert_parse!(CssAtomSet::ATOMS, WebkitTransitionStyleValue, "opacity 1s, transform 0.5s");
1269	}
1270
1271	#[test]
1272	fn test_transition_errors() {
1273		assert_parse_error!(CssAtomSet::ATOMS, WebkitTransitionStyleValue, "invalid!!!!");
1274	}
1275
1276	#[test]
1277	fn size_test_flex() {
1278		assert_eq!(std::mem::size_of::<WebkitFlexStyleValue>(), std::mem::size_of::<crate::values::FlexStyleValue>());
1279	}
1280
1281	#[test]
1282	fn test_flex_parses() {
1283		assert_parse!(CssAtomSet::ATOMS, WebkitFlexStyleValue, "none");
1284		assert_parse!(CssAtomSet::ATOMS, WebkitFlexStyleValue, "1");
1285		assert_parse!(CssAtomSet::ATOMS, WebkitFlexStyleValue, "1 1 auto");
1286	}
1287
1288	#[test]
1289	fn test_flex_errors() {
1290		assert_peek_false!(CssAtomSet::ATOMS, WebkitFlexStyleValue, "invalid");
1291	}
1292
1293	#[test]
1294	fn size_test_order() {
1295		assert_eq!(std::mem::size_of::<WebkitOrderStyleValue>(), std::mem::size_of::<crate::values::OrderStyleValue>());
1296	}
1297
1298	#[test]
1299	fn test_order_parses() {
1300		assert_parse!(CssAtomSet::ATOMS, WebkitOrderStyleValue, "0");
1301		assert_parse!(CssAtomSet::ATOMS, WebkitOrderStyleValue, "-1");
1302		assert_parse!(CssAtomSet::ATOMS, WebkitOrderStyleValue, "5");
1303	}
1304
1305	#[test]
1306	fn test_order_errors() {
1307		assert_peek_false!(CssAtomSet::ATOMS, WebkitOrderStyleValue, "none");
1308	}
1309
1310	#[test]
1311	fn size_test_appearance() {
1312		assert_eq!(std::mem::size_of::<WebkitAppearanceStyleValue>(), 20);
1313	}
1314
1315	#[test]
1316	fn test_appearance_parses() {
1317		assert_parse!(CssAtomSet::ATOMS, WebkitAppearanceStyleValue, "none");
1318		assert_parse!(CssAtomSet::ATOMS, WebkitAppearanceStyleValue, "auto");
1319		assert_parse!(CssAtomSet::ATOMS, WebkitAppearanceStyleValue, "textfield");
1320		assert_parse!(CssAtomSet::ATOMS, WebkitAppearanceStyleValue, "button");
1321	}
1322
1323	#[test]
1324	fn test_appearance_errors() {
1325		assert_peek_false!(CssAtomSet::ATOMS, WebkitAppearanceStyleValue, "invalid");
1326	}
1327
1328	#[test]
1329	fn size_test_transform() {
1330		assert_eq!(std::mem::size_of::<WebkitTransformStyleValue>(), 32);
1331	}
1332
1333	#[test]
1334	fn test_transform_parses() {
1335		assert_parse!(CssAtomSet::ATOMS, WebkitTransformStyleValue, "none");
1336		assert_parse!(CssAtomSet::ATOMS, WebkitTransformStyleValue, "rotate(45deg)");
1337		assert_parse!(CssAtomSet::ATOMS, WebkitTransformStyleValue, "scale(-1, 1)");
1338	}
1339
1340	#[test]
1341	fn test_transform_errors() {
1342		assert_peek_false!(CssAtomSet::ATOMS, WebkitTransformStyleValue, "invalid");
1343	}
1344
1345	#[test]
1346	fn size_test_font_smoothing() {
1347		assert_eq!(std::mem::size_of::<WebkitFontSmoothingStyleValue>(), 16);
1348	}
1349
1350	#[test]
1351	fn test_font_smoothing_parses() {
1352		assert_parse!(CssAtomSet::ATOMS, WebkitFontSmoothingStyleValue, "auto");
1353		assert_parse!(CssAtomSet::ATOMS, WebkitFontSmoothingStyleValue, "none");
1354		assert_parse!(CssAtomSet::ATOMS, WebkitFontSmoothingStyleValue, "antialiased");
1355		assert_parse!(CssAtomSet::ATOMS, WebkitFontSmoothingStyleValue, "subpixel-antialiased");
1356	}
1357
1358	#[test]
1359	fn test_font_smoothing_errors() {
1360		assert_peek_false!(CssAtomSet::ATOMS, WebkitFontSmoothingStyleValue, "invalid");
1361	}
1362
1363	#[test]
1364	fn size_test_text_size_adjust() {
1365		assert_eq!(std::mem::size_of::<WebkitTextSizeAdjustStyleValue>(), 16);
1366	}
1367
1368	#[test]
1369	fn test_text_size_adjust_parses() {
1370		assert_parse!(CssAtomSet::ATOMS, WebkitTextSizeAdjustStyleValue, "auto");
1371		assert_parse!(CssAtomSet::ATOMS, WebkitTextSizeAdjustStyleValue, "none");
1372		assert_parse!(CssAtomSet::ATOMS, WebkitTextSizeAdjustStyleValue, "100%");
1373	}
1374
1375	#[test]
1376	fn test_text_size_adjust_errors() {
1377		assert_peek_false!(CssAtomSet::ATOMS, WebkitTextSizeAdjustStyleValue, "invalid");
1378	}
1379
1380	#[test]
1381	fn size_test_animation_delay() {
1382		assert_eq!(
1383			std::mem::size_of::<WebkitAnimationDelayStyleValue>(),
1384			std::mem::size_of::<crate::values::AnimationDelayStyleValue>()
1385		);
1386	}
1387
1388	#[test]
1389	fn test_animation_delay_parses() {
1390		assert_parse!(CssAtomSet::ATOMS, WebkitAnimationDelayStyleValue, "0s");
1391		assert_parse!(CssAtomSet::ATOMS, WebkitAnimationDelayStyleValue, "0.5s, 1s");
1392	}
1393
1394	#[test]
1395	fn test_animation_delay_errors() {
1396		assert_peek_false!(CssAtomSet::ATOMS, WebkitAnimationDelayStyleValue, "invalid");
1397	}
1398
1399	#[test]
1400	fn size_test_animation_duration() {
1401		assert_eq!(
1402			std::mem::size_of::<WebkitAnimationDurationStyleValue>(),
1403			std::mem::size_of::<crate::values::AnimationDurationStyleValue>()
1404		);
1405	}
1406
1407	#[test]
1408	fn test_animation_duration_parses() {
1409		assert_parse!(CssAtomSet::ATOMS, WebkitAnimationDurationStyleValue, "auto");
1410		assert_parse!(CssAtomSet::ATOMS, WebkitAnimationDurationStyleValue, "0.3s");
1411		assert_parse!(CssAtomSet::ATOMS, WebkitAnimationDurationStyleValue, "1s, 2s");
1412	}
1413
1414	#[test]
1415	fn test_animation_duration_errors() {
1416		assert_peek_false!(CssAtomSet::ATOMS, WebkitAnimationDurationStyleValue, "invalid");
1417	}
1418
1419	#[test]
1420	fn size_test_animation_fill_mode() {
1421		assert_eq!(
1422			std::mem::size_of::<WebkitAnimationFillModeStyleValue>(),
1423			std::mem::size_of::<crate::values::AnimationFillModeStyleValue>()
1424		);
1425	}
1426
1427	#[test]
1428	fn test_animation_fill_mode_parses() {
1429		assert_parse!(CssAtomSet::ATOMS, WebkitAnimationFillModeStyleValue, "none");
1430		assert_parse!(CssAtomSet::ATOMS, WebkitAnimationFillModeStyleValue, "forwards");
1431		assert_parse!(CssAtomSet::ATOMS, WebkitAnimationFillModeStyleValue, "both");
1432	}
1433
1434	#[test]
1435	fn test_animation_fill_mode_errors() {
1436		assert_peek_false!(CssAtomSet::ATOMS, WebkitAnimationFillModeStyleValue, "invalid");
1437	}
1438
1439	#[test]
1440	fn size_test_animation_iteration_count() {
1441		assert_eq!(
1442			std::mem::size_of::<WebkitAnimationIterationCountStyleValue>(),
1443			std::mem::size_of::<crate::values::AnimationIterationCountStyleValue>()
1444		);
1445	}
1446
1447	#[test]
1448	fn test_animation_iteration_count_parses() {
1449		assert_parse!(CssAtomSet::ATOMS, WebkitAnimationIterationCountStyleValue, "1");
1450		assert_parse!(CssAtomSet::ATOMS, WebkitAnimationIterationCountStyleValue, "infinite");
1451		assert_parse!(CssAtomSet::ATOMS, WebkitAnimationIterationCountStyleValue, "3");
1452	}
1453
1454	#[test]
1455	fn test_animation_iteration_count_errors() {
1456		assert_peek_false!(CssAtomSet::ATOMS, WebkitAnimationIterationCountStyleValue, "invalid");
1457	}
1458
1459	#[test]
1460	fn size_test_animation_name() {
1461		assert_eq!(
1462			std::mem::size_of::<WebkitAnimationNameStyleValue>(),
1463			std::mem::size_of::<crate::values::AnimationNameStyleValue>()
1464		);
1465	}
1466
1467	#[test]
1468	fn test_animation_name_parses() {
1469		assert_parse!(CssAtomSet::ATOMS, WebkitAnimationNameStyleValue, "none");
1470		assert_parse!(CssAtomSet::ATOMS, WebkitAnimationNameStyleValue, "my-animation");
1471	}
1472
1473	#[test]
1474	fn test_animation_name_errors() {
1475		assert_peek_false!(CssAtomSet::ATOMS, WebkitAnimationNameStyleValue, "");
1476		assert_peek_false!(CssAtomSet::ATOMS, WebkitAnimationNameStyleValue, "1px");
1477	}
1478
1479	#[test]
1480	fn size_test_animation_timing_function() {
1481		assert_eq!(
1482			std::mem::size_of::<WebkitAnimationTimingFunctionStyleValue>(),
1483			std::mem::size_of::<crate::values::AnimationTimingFunctionStyleValue>()
1484		);
1485	}
1486
1487	#[test]
1488	fn test_animation_timing_function_parses() {
1489		assert_parse!(CssAtomSet::ATOMS, WebkitAnimationTimingFunctionStyleValue, "ease");
1490		assert_parse!(CssAtomSet::ATOMS, WebkitAnimationTimingFunctionStyleValue, "linear");
1491		assert_parse!(CssAtomSet::ATOMS, WebkitAnimationTimingFunctionStyleValue, "ease-in-out");
1492		assert_parse!(CssAtomSet::ATOMS, WebkitAnimationTimingFunctionStyleValue, "cubic-bezier(0.4, 0, 0.2, 1)");
1493	}
1494
1495	#[test]
1496	fn test_animation_timing_function_errors() {
1497		assert_peek_false!(CssAtomSet::ATOMS, WebkitAnimationTimingFunctionStyleValue, "invalid");
1498	}
1499
1500	#[test]
1501	fn size_test_backface_visibility() {
1502		assert_eq!(
1503			std::mem::size_of::<WebkitBackfaceVisibilityStyleValue>(),
1504			std::mem::size_of::<crate::values::BackfaceVisibilityStyleValue>()
1505		);
1506	}
1507
1508	#[test]
1509	fn test_backface_visibility_parses() {
1510		assert_parse!(CssAtomSet::ATOMS, WebkitBackfaceVisibilityStyleValue, "visible");
1511		assert_parse!(CssAtomSet::ATOMS, WebkitBackfaceVisibilityStyleValue, "hidden");
1512	}
1513
1514	#[test]
1515	fn test_backface_visibility_errors() {
1516		assert_peek_false!(CssAtomSet::ATOMS, WebkitBackfaceVisibilityStyleValue, "invalid");
1517	}
1518
1519	#[test]
1520	fn size_test_tap_highlight_color() {
1521		assert_eq!(
1522			std::mem::size_of::<WebkitTapHighlightColorStyleValue>(),
1523			std::mem::size_of::<crate::values::BackgroundColorStyleValue>()
1524		);
1525	}
1526
1527	#[test]
1528	fn test_tap_highlight_color_parses() {
1529		assert_parse!(CssAtomSet::ATOMS, WebkitTapHighlightColorStyleValue, "transparent");
1530		assert_parse!(CssAtomSet::ATOMS, WebkitTapHighlightColorStyleValue, "red");
1531		assert_parse!(CssAtomSet::ATOMS, WebkitTapHighlightColorStyleValue, "rgba(0, 0, 0, 0)");
1532	}
1533
1534	#[test]
1535	fn test_tap_highlight_color_errors() {
1536		assert_peek_false!(CssAtomSet::ATOMS, WebkitTapHighlightColorStyleValue, "invalid");
1537	}
1538
1539	#[test]
1540	fn size_test_transition_duration() {
1541		assert_eq!(
1542			std::mem::size_of::<WebkitTransitionDurationStyleValue>(),
1543			std::mem::size_of::<crate::values::TransitionDurationStyleValue>()
1544		);
1545	}
1546
1547	#[test]
1548	fn test_transition_duration_parses() {
1549		assert_parse!(CssAtomSet::ATOMS, WebkitTransitionDurationStyleValue, "0s");
1550		assert_parse!(CssAtomSet::ATOMS, WebkitTransitionDurationStyleValue, "0.3s");
1551		assert_parse!(CssAtomSet::ATOMS, WebkitTransitionDurationStyleValue, "1s, 200ms");
1552	}
1553
1554	#[test]
1555	fn test_transition_duration_errors() {
1556		assert_peek_false!(CssAtomSet::ATOMS, WebkitTransitionDurationStyleValue, "invalid");
1557	}
1558
1559	#[test]
1560	fn size_test_transition_timing_function() {
1561		assert_eq!(
1562			std::mem::size_of::<WebkitTransitionTimingFunctionStyleValue>(),
1563			std::mem::size_of::<crate::values::TransitionTimingFunctionStyleValue>()
1564		);
1565	}
1566
1567	#[test]
1568	fn test_transition_timing_function_parses() {
1569		assert_parse!(CssAtomSet::ATOMS, WebkitTransitionTimingFunctionStyleValue, "ease");
1570		assert_parse!(CssAtomSet::ATOMS, WebkitTransitionTimingFunctionStyleValue, "linear");
1571		assert_parse!(CssAtomSet::ATOMS, WebkitTransitionTimingFunctionStyleValue, "cubic-bezier(0.4, 0, 0.2, 1)");
1572	}
1573
1574	#[test]
1575	fn test_transition_timing_function_errors() {
1576		assert_peek_false!(CssAtomSet::ATOMS, WebkitTransitionTimingFunctionStyleValue, "invalid");
1577	}
1578
1579	#[test]
1580	fn test_webkit_perspective_parses() {
1581		assert_parse!(CssAtomSet::ATOMS, WebkitPerspectiveStyleValue, "none");
1582		assert_parse!(CssAtomSet::ATOMS, WebkitPerspectiveStyleValue, "800px");
1583	}
1584
1585	#[test]
1586	fn test_webkit_perspective_errors() {
1587		assert_peek_false!(CssAtomSet::ATOMS, WebkitPerspectiveStyleValue, "invalid");
1588	}
1589}