AngleSharp by Florian Rappl

<PackageReference Include="AngleSharp" Version="0.8.1" />

.NET API 1,172,480 bytes

 CssTransitionProperty

More information available at: https://developer.mozilla.org/en-US/docs/CSS/transition
using AngleSharp.Css; using AngleSharp.Css.Values; using AngleSharp.Extensions; using System; using System.Collections.Generic; using System.Linq; namespace AngleSharp.Dom.Css { internal sealed class CssTransitionProperty : CssShorthandProperty, ICssTransitionProperty, ICssProperty, ICssTransitionDelayProperty, ICssTransitionDurationProperty, ICssTransitionPropertyProperty, ICssTransitionTimingFunctionProperty { internal static readonly IValueConverter<Tuple<string, Time, ITimingFunction, Time>[]> Converter = Converters.WithAny(CssTransitionPropertyProperty.SingleConverter.Option(CssTransitionPropertyProperty.Default), CssTransitionDurationProperty.SingleConverter.Option(CssTransitionDurationProperty.Default), CssTransitionTimingFunctionProperty.SingleConverter.Option(CssTransitionTimingFunctionProperty.Default), CssTransitionDelayProperty.SingleConverter.Option(CssTransitionDelayProperty.Default)).FromList(); private readonly CssTransitionDelayProperty _delay; private readonly CssTransitionDurationProperty _duration; private readonly CssTransitionTimingFunctionProperty _timingFunction; private readonly CssTransitionPropertyProperty _property; public IEnumerable<Time> Durations => _duration.Durations; public IEnumerable<Time> Delays => _delay.Delays; public IEnumerable<ITimingFunction> TimingFunctions => _timingFunction.TimingFunctions; IEnumerable<string> ICssTransitionPropertyProperty.Properties { get { return _property.Properties; } } internal CssTransitionProperty(CssStyleDeclaration rule) : base(PropertyNames.Transition, rule, PropertyFlags.None) { _delay = Get<CssTransitionDelayProperty>(); _duration = Get<CssTransitionDurationProperty>(); _timingFunction = Get<CssTransitionTimingFunctionProperty>(); _property = Get<CssTransitionPropertyProperty>(); } protected override bool IsValid(ICssValue value) { return Converter.TryConvert(value, delegate(Tuple<string, Time, ITimingFunction, Time>[] t) { _property.SetProperties(from m in t select m.Item1); _duration.SetDurations(from m in t select m.Item2); _timingFunction.SetTimingFunctions(from m in t select m.Item3); _delay.SetDelays(from m in t select m.Item4); }); } internal override string SerializeValue(IEnumerable<CssProperty> properties) { if (!properties.Contains(_property) || !properties.Contains(_duration)) return string.Empty; List<string> list = new List<string>(); list.Add(_property.SerializeValue()); list.Add(_duration.SerializeValue()); if (_timingFunction.HasValue && properties.Contains(_timingFunction)) list.Add(_timingFunction.SerializeValue()); if (_delay.HasValue && properties.Contains(_delay)) list.Add(_delay.SerializeValue()); return string.Join(" ", list); } } }