// This file is automatically generated from CSSProperties.json by the process-css-properties.py script. Do not edit it.

#pragma once

#ifndef COMPUTED_STYLE_PROPERTIES_GETTERS_INLINES_INCLUDE_TRAP
#error "Please do not include this file anywhere except from StyleComputedStyle+GettersInlines.h."
#endif

#include <WebCore/StyleComputedStyleProperties+GettersCustomInlines.h>

namespace WebCore {
namespace Style {

inline StyleAppearance ComputedStyleProperties::appearance() const
{
    return static_cast<StyleAppearance>(m_nonInheritedData->miscData->appearance);
}

inline Style::ColorScheme ComputedStyleProperties::colorScheme() const
{
    return m_inheritedRareData->colorScheme;
}

inline bool ComputedStyleProperties::hasExplicitlySetColorScheme() const
{
    return m_nonInheritedData->miscData->hasExplicitlySetColorScheme;
}

inline Style::MathDepth ComputedStyleProperties::mathDepth() const
{
    return m_inheritedRareData->mathDepth;
}

inline RubyPosition ComputedStyleProperties::rubyPosition() const
{
    return static_cast<RubyPosition>(m_inheritedRareData->rubyPosition);
}

inline bool ComputedStyleProperties::hasExplicitlySetWritingMode() const
{
    return m_nonInheritedData->miscData->hasExplicitlySetWritingMode;
}

inline bool ComputedStyleProperties::hasExplicitlySetDirection() const
{
    return m_nonInheritedData->miscData->hasExplicitlySetDirection;
}

constexpr Style::Display ComputedStyleProperties::display() const
{
    return Style::Display::fromRaw(m_nonInheritedFlags.display);
}

inline Style::Zoom ComputedStyleProperties::zoom() const
{
    return m_nonInheritedData->rareData->zoom;
}

inline Style::TextSizeAdjust ComputedStyleProperties::textSizeAdjust() const
{
    return m_inheritedRareData->textSizeAdjust;
}

inline TextZoom ComputedStyleProperties::textZoom() const
{
    return static_cast<TextZoom>(m_inheritedRareData->textZoom);
}

inline const Style::LetterSpacing& ComputedStyleProperties::computedLetterSpacing() const
{
    return m_inheritedData->fontData->letterSpacing;
}

inline const Style::WordSpacing& ComputedStyleProperties::computedWordSpacing() const
{
    return m_inheritedData->fontData->wordSpacing;
}

inline const Style::AccentColor& ComputedStyleProperties::accentColor() const
{
    return m_inheritedRareData->accentColor;
}

inline decltype(auto) ComputedStyleProperties::accentColorResolver() const
{
    return ColorPropertyResolver<ColorPropertyTraits<PropertyNameConstant<CSSPropertyAccentColor>>> { *this };
}

inline Style::AlignContent ComputedStyleProperties::alignContent() const
{
    return m_nonInheritedData->miscData->alignContent;
}

inline Style::AlignItems ComputedStyleProperties::alignItems() const
{
    return m_nonInheritedData->miscData->alignItems;
}

inline Style::AlignSelf ComputedStyleProperties::alignSelf() const
{
    return m_nonInheritedData->miscData->alignSelf;
}

inline AlignmentBaseline ComputedStyleProperties::alignmentBaseline() const
{
    return static_cast<AlignmentBaseline>(m_svgData->nonInheritedFlags.alignmentBaseline);
}

inline const Style::AnchorNames& ComputedStyleProperties::anchorNames() const
{
    return m_nonInheritedData->rareData->anchorNames;
}

inline const Style::NameScope& ComputedStyleProperties::anchorScope() const
{
    return m_nonInheritedData->rareData->anchorScope;
}

inline const Style::AspectRatio& ComputedStyleProperties::aspectRatio() const
{
    return m_nonInheritedData->miscData->aspectRatio;
}

inline const Style::Filter& ComputedStyleProperties::backdropFilter() const
{
    return m_nonInheritedData->rareData->backdropFilter->backdropFilter;
}

inline BackfaceVisibility ComputedStyleProperties::backfaceVisibility() const
{
    return static_cast<BackfaceVisibility>(m_nonInheritedData->rareData->backfaceVisibility);
}

inline const Style::Color& ComputedStyleProperties::backgroundColor() const
{
    return m_nonInheritedData->backgroundData->backgroundColor;
}

inline const Style::Color& ComputedStyleProperties::visitedLinkBackgroundColor() const
{
    return m_nonInheritedData->miscData->visitedLinkColor->visitedLinkBackgroundColor;
}

inline decltype(auto) ComputedStyleProperties::backgroundColorResolver() const
{
    return ColorPropertyResolver<ColorPropertyTraits<PropertyNameConstant<CSSPropertyBackgroundColor>>> { *this };
}

inline const Style::SVGBaselineShift& ComputedStyleProperties::baselineShift() const
{
    return m_svgData->miscData->baselineShift;
}

inline const Style::BlockEllipsis& ComputedStyleProperties::blockEllipsis() const
{
    return m_inheritedRareData->blockEllipsis;
}

inline BlockStepAlign ComputedStyleProperties::blockStepAlign() const
{
    return static_cast<BlockStepAlign>(m_nonInheritedData->rareData->blockStepAlign);
}

inline BlockStepInsert ComputedStyleProperties::blockStepInsert() const
{
    return static_cast<BlockStepInsert>(m_nonInheritedData->rareData->blockStepInsert);
}

inline BlockStepRound ComputedStyleProperties::blockStepRound() const
{
    return static_cast<BlockStepRound>(m_nonInheritedData->rareData->blockStepRound);
}

inline const Style::BlockStepSize& ComputedStyleProperties::blockStepSize() const
{
    return m_nonInheritedData->rareData->blockStepSize;
}

inline BorderCollapse ComputedStyleProperties::borderCollapse() const
{
    return static_cast<BorderCollapse>(m_inheritedFlags.borderCollapse);
}

inline const Style::BorderImageOutset& ComputedStyleProperties::borderImageOutset() const
{
    return m_nonInheritedData->surroundData->border.borderImage->borderImage.borderImageOutset;
}

inline const Style::BorderImageRepeat& ComputedStyleProperties::borderImageRepeat() const
{
    return m_nonInheritedData->surroundData->border.borderImage->borderImage.borderImageRepeat;
}

inline const Style::BorderImageSlice& ComputedStyleProperties::borderImageSlice() const
{
    return m_nonInheritedData->surroundData->border.borderImage->borderImage.borderImageSlice;
}

inline const Style::BorderImageSource& ComputedStyleProperties::borderImageSource() const
{
    return m_nonInheritedData->surroundData->border.borderImage->borderImage.borderImageSource;
}

inline const Style::BorderImageWidth& ComputedStyleProperties::borderImageWidth() const
{
    return m_nonInheritedData->surroundData->border.borderImage->borderImage.borderImageWidth;
}

inline const Style::BoxShadows& ComputedStyleProperties::boxShadow() const
{
    return m_nonInheritedData->miscData->boxShadow;
}

inline BoxSizing ComputedStyleProperties::boxSizing() const
{
    return static_cast<BoxSizing>(m_nonInheritedData->boxData->boxSizing);
}

inline BreakBetween ComputedStyleProperties::breakAfter() const
{
    return static_cast<BreakBetween>(m_nonInheritedData->rareData->breakAfter);
}

inline BreakBetween ComputedStyleProperties::breakBefore() const
{
    return static_cast<BreakBetween>(m_nonInheritedData->rareData->breakBefore);
}

inline BreakInside ComputedStyleProperties::breakInside() const
{
    return static_cast<BreakInside>(m_nonInheritedData->rareData->breakInside);
}

inline BufferedRendering ComputedStyleProperties::bufferedRendering() const
{
    return static_cast<BufferedRendering>(m_svgData->nonInheritedFlags.bufferedRendering);
}

inline CaptionSide ComputedStyleProperties::captionSide() const
{
    return static_cast<CaptionSide>(m_inheritedFlags.captionSide);
}

inline const Style::CaretColor& ComputedStyleProperties::caretColor() const
{
    return m_inheritedRareData->caretColor;
}

inline const Style::CaretColor& ComputedStyleProperties::visitedLinkCaretColor() const
{
    return m_inheritedRareData->visitedLinkCaretColor;
}

inline decltype(auto) ComputedStyleProperties::caretColorResolver() const
{
    return ColorPropertyResolver<ColorPropertyTraits<PropertyNameConstant<CSSPropertyCaretColor>>> { *this };
}

inline Clear ComputedStyleProperties::clear() const
{
    return static_cast<Clear>(m_nonInheritedFlags.clear);
}

inline const Style::Clip& ComputedStyleProperties::clip() const
{
    return m_nonInheritedData->rareData->clip;
}

inline const Style::ClipPath& ComputedStyleProperties::clipPath() const
{
    return m_nonInheritedData->rareData->clipPath;
}

inline WindRule ComputedStyleProperties::clipRule() const
{
    return static_cast<WindRule>(m_svgData->inheritedFlags.clipRule);
}

inline const WebCore::Color& ComputedStyleProperties::visitedLinkColor() const
{
    return m_inheritedData->visitedLinkColor;
}

inline decltype(auto) ComputedStyleProperties::colorResolver() const
{
    return ColorPropertyResolver<ColorPropertyTraits<PropertyNameConstant<CSSPropertyColor>>> { *this };
}

inline bool ComputedStyleProperties::hasExplicitlySetColor() const
{
    return m_inheritedFlags.hasExplicitlySetColor;
}

inline ColorInterpolation ComputedStyleProperties::colorInterpolation() const
{
    return static_cast<ColorInterpolation>(m_svgData->inheritedFlags.colorInterpolation);
}

inline ColorInterpolation ComputedStyleProperties::colorInterpolationFilters() const
{
    return static_cast<ColorInterpolation>(m_svgData->inheritedFlags.colorInterpolationFilters);
}

inline Style::ColumnCount ComputedStyleProperties::columnCount() const
{
    return m_nonInheritedData->miscData->multiCol->columnCount;
}

inline ColumnFill ComputedStyleProperties::columnFill() const
{
    return static_cast<ColumnFill>(m_nonInheritedData->miscData->multiCol->columnFill);
}

inline const Style::GapGutter& ComputedStyleProperties::columnGap() const
{
    return m_nonInheritedData->rareData->columnGap;
}

inline const Style::Color& ComputedStyleProperties::columnRuleColor() const
{
    return m_nonInheritedData->miscData->multiCol->columnRule.color;
}

inline const Style::Color& ComputedStyleProperties::visitedLinkColumnRuleColor() const
{
    return m_nonInheritedData->miscData->multiCol->visitedLinkColumnRuleColor;
}

inline decltype(auto) ComputedStyleProperties::columnRuleColorResolver() const
{
    return ColorPropertyResolver<ColorPropertyTraits<PropertyNameConstant<CSSPropertyColumnRuleColor>>> { *this };
}

inline BorderStyle ComputedStyleProperties::columnRuleStyle() const
{
    return static_cast<BorderStyle>(m_nonInheritedData->miscData->multiCol->columnRule.style);
}

inline const Style::LineWidth& ComputedStyleProperties::columnRuleWidth() const
{
    return m_nonInheritedData->miscData->multiCol->columnRule.width;
}

inline ColumnSpan ComputedStyleProperties::columnSpan() const
{
    return static_cast<ColumnSpan>(m_nonInheritedData->miscData->multiCol->columnSpan);
}

inline Style::ColumnWidth ComputedStyleProperties::columnWidth() const
{
    return m_nonInheritedData->miscData->multiCol->columnWidth;
}

inline Style::Contain ComputedStyleProperties::contain() const
{
    return Style::Contain::fromRaw(m_nonInheritedData->rareData->contain);
}

inline const Style::ContainerNames& ComputedStyleProperties::containerNames() const
{
    return m_nonInheritedData->rareData->containerNames;
}

inline const Style::ContainerType& ComputedStyleProperties::containerType() const
{
    return m_nonInheritedData->rareData->containerType;
}

inline const Style::Content& ComputedStyleProperties::content() const
{
    return m_nonInheritedData->miscData->content;
}

inline ContentVisibility ComputedStyleProperties::contentVisibility() const
{
    return static_cast<ContentVisibility>(m_nonInheritedData->rareData->contentVisibility);
}

inline OverflowContinue ComputedStyleProperties::overflowContinue() const
{
    return static_cast<OverflowContinue>(m_nonInheritedData->rareData->overflowContinue);
}

inline const Style::CounterIncrement& ComputedStyleProperties::counterIncrement() const
{
    return m_nonInheritedData->rareData->counterIncrement;
}

inline const Style::CounterReset& ComputedStyleProperties::counterReset() const
{
    return m_nonInheritedData->rareData->counterReset;
}

inline const Style::CounterSet& ComputedStyleProperties::counterSet() const
{
    return m_nonInheritedData->rareData->counterSet;
}

inline const Style::SVGCenterCoordinateComponent& ComputedStyleProperties::cx() const
{
    return m_svgData->layoutData->cx;
}

inline const Style::SVGCenterCoordinateComponent& ComputedStyleProperties::cy() const
{
    return m_svgData->layoutData->cy;
}

inline const Style::SVGPathData& ComputedStyleProperties::d() const
{
    return m_svgData->layoutData->d;
}

inline DominantBaseline ComputedStyleProperties::dominantBaseline() const
{
    return static_cast<DominantBaseline>(m_svgData->nonInheritedFlags.dominantBaseline);
}

inline const Style::DynamicRangeLimit& ComputedStyleProperties::dynamicRangeLimit() const
{
    return m_inheritedRareData->dynamicRangeLimit;
}

inline EmptyCell ComputedStyleProperties::emptyCells() const
{
    return static_cast<EmptyCell>(m_inheritedFlags.emptyCells);
}

inline FieldSizing ComputedStyleProperties::fieldSizing() const
{
    return static_cast<FieldSizing>(m_nonInheritedData->rareData->fieldSizing);
}

inline const Style::SVGPaint& ComputedStyleProperties::fill() const
{
    return m_svgData->fillData->fill;
}

inline const Style::SVGPaint& ComputedStyleProperties::visitedLinkFill() const
{
    return m_svgData->fillData->visitedLinkFill;
}

inline decltype(auto) ComputedStyleProperties::fillResolver() const
{
    return ColorPropertyResolver<ColorPropertyTraits<PropertyNameConstant<CSSPropertyFill>>> { *this };
}

inline Style::Opacity ComputedStyleProperties::fillOpacity() const
{
    return m_svgData->fillData->fillOpacity;
}

inline WindRule ComputedStyleProperties::fillRule() const
{
    return static_cast<WindRule>(m_svgData->inheritedFlags.fillRule);
}

inline const Style::Filter& ComputedStyleProperties::filter() const
{
    return m_nonInheritedData->miscData->filter->filter;
}

inline const Style::FlexBasis& ComputedStyleProperties::flexBasis() const
{
    return m_nonInheritedData->miscData->flexibleBox->flexBasis;
}

inline FlexDirection ComputedStyleProperties::flexDirection() const
{
    return static_cast<FlexDirection>(m_nonInheritedData->miscData->flexibleBox->flexDirection);
}

inline Style::FlexGrow ComputedStyleProperties::flexGrow() const
{
    return m_nonInheritedData->miscData->flexibleBox->flexGrow;
}

inline Style::FlexShrink ComputedStyleProperties::flexShrink() const
{
    return m_nonInheritedData->miscData->flexibleBox->flexShrink;
}

inline FlexWrap ComputedStyleProperties::flexWrap() const
{
    return static_cast<FlexWrap>(m_nonInheritedData->miscData->flexibleBox->flexWrap);
}

inline Float ComputedStyleProperties::floating() const
{
    return static_cast<Float>(m_nonInheritedFlags.floating);
}

inline const Style::Color& ComputedStyleProperties::floodColor() const
{
    return m_svgData->miscData->floodColor;
}

inline decltype(auto) ComputedStyleProperties::floodColorResolver() const
{
    return ColorPropertyResolver<ColorPropertyTraits<PropertyNameConstant<CSSPropertyFloodColor>>> { *this };
}

inline Style::Opacity ComputedStyleProperties::floodOpacity() const
{
    return m_svgData->miscData->floodOpacity;
}

inline const Style::FlowTolerance& ComputedStyleProperties::flowTolerance() const
{
    return m_nonInheritedData->rareData->grid->flowTolerance;
}

inline Style::SVGGlyphOrientationVertical ComputedStyleProperties::glyphOrientationVertical() const
{
    return static_cast<Style::SVGGlyphOrientationVertical>(m_svgData->inheritedFlags.glyphOrientationVertical);
}

inline const Style::GridTrackSizes& ComputedStyleProperties::gridAutoColumns() const
{
    return m_nonInheritedData->rareData->grid->gridAutoColumns;
}

inline Style::GridAutoFlow ComputedStyleProperties::gridAutoFlow() const
{
    return m_nonInheritedData->rareData->grid->gridAutoFlow;
}

inline const Style::GridTrackSizes& ComputedStyleProperties::gridAutoRows() const
{
    return m_nonInheritedData->rareData->grid->gridAutoRows;
}

inline const Style::GridPosition& ComputedStyleProperties::gridItemColumnEnd() const
{
    return m_nonInheritedData->rareData->gridItem->gridItemColumnEnd;
}

inline const Style::GridPosition& ComputedStyleProperties::gridItemColumnStart() const
{
    return m_nonInheritedData->rareData->gridItem->gridItemColumnStart;
}

inline const Style::GridPosition& ComputedStyleProperties::gridItemRowEnd() const
{
    return m_nonInheritedData->rareData->gridItem->gridItemRowEnd;
}

inline const Style::GridPosition& ComputedStyleProperties::gridItemRowStart() const
{
    return m_nonInheritedData->rareData->gridItem->gridItemRowStart;
}

inline const Style::GridTemplateAreas& ComputedStyleProperties::gridTemplateAreas() const
{
    return m_nonInheritedData->rareData->grid->gridTemplateAreas;
}

inline const Style::GridTemplateList& ComputedStyleProperties::gridTemplateColumns() const
{
    return m_nonInheritedData->rareData->grid->gridTemplateColumns;
}

inline const Style::GridTemplateList& ComputedStyleProperties::gridTemplateRows() const
{
    return m_nonInheritedData->rareData->grid->gridTemplateRows;
}

inline Style::HangingPunctuation ComputedStyleProperties::hangingPunctuation() const
{
    return Style::HangingPunctuation::fromRaw(m_inheritedRareData->hangingPunctuation);
}

inline const Style::HyphenateCharacter& ComputedStyleProperties::hyphenateCharacter() const
{
    return m_inheritedRareData->hyphenateCharacter;
}

inline Hyphens ComputedStyleProperties::hyphens() const
{
    return static_cast<Hyphens>(m_inheritedRareData->hyphens);
}

inline Style::ImageOrientation ComputedStyleProperties::imageOrientation() const
{
    return static_cast<Style::ImageOrientation>(m_inheritedRareData->imageOrientation);
}

inline ImageRendering ComputedStyleProperties::imageRendering() const
{
    return static_cast<ImageRendering>(m_inheritedRareData->imageRendering);
}

inline InputSecurity ComputedStyleProperties::inputSecurity() const
{
    return static_cast<InputSecurity>(m_nonInheritedData->rareData->inputSecurity);
}

inline Isolation ComputedStyleProperties::isolation() const
{
    return static_cast<Isolation>(m_nonInheritedData->rareData->isolation);
}

inline Style::JustifyContent ComputedStyleProperties::justifyContent() const
{
    return m_nonInheritedData->miscData->justifyContent;
}

inline Style::JustifyItems ComputedStyleProperties::justifyItems() const
{
    return m_nonInheritedData->miscData->justifyItems;
}

inline Style::JustifySelf ComputedStyleProperties::justifySelf() const
{
    return m_nonInheritedData->miscData->justifySelf;
}

inline const Style::Color& ComputedStyleProperties::lightingColor() const
{
    return m_svgData->miscData->lightingColor;
}

inline decltype(auto) ComputedStyleProperties::lightingColorResolver() const
{
    return ColorPropertyResolver<ColorPropertyTraits<PropertyNameConstant<CSSPropertyLightingColor>>> { *this };
}

inline LineBreak ComputedStyleProperties::lineBreak() const
{
    return static_cast<LineBreak>(m_inheritedRareData->lineBreak);
}

inline Style::LineFitEdge ComputedStyleProperties::lineFitEdge() const
{
    return m_inheritedRareData->lineFitEdge;
}

inline const Style::LineHeight& ComputedStyleProperties::lineHeight() const
{
    return m_inheritedData->lineHeight;
}

inline const Style::ImageOrNone& ComputedStyleProperties::listStyleImage() const
{
    return m_inheritedRareData->listStyleImage;
}

inline ListStylePosition ComputedStyleProperties::listStylePosition() const
{
    return static_cast<ListStylePosition>(m_inheritedFlags.listStylePosition);
}

inline const Style::ListStyleType& ComputedStyleProperties::listStyleType() const
{
    return m_inheritedRareData->listStyleType;
}

inline Style::MarginTrim ComputedStyleProperties::marginTrim() const
{
    return Style::MarginTrim::fromRaw(m_nonInheritedData->rareData->marginTrim);
}

inline const Style::SVGMarkerResource& ComputedStyleProperties::markerEnd() const
{
    return m_svgData->markerResourceData->markerEnd;
}

inline const Style::SVGMarkerResource& ComputedStyleProperties::markerMid() const
{
    return m_svgData->markerResourceData->markerMid;
}

inline const Style::SVGMarkerResource& ComputedStyleProperties::markerStart() const
{
    return m_svgData->markerResourceData->markerStart;
}

inline const Style::MaskBorderOutset& ComputedStyleProperties::maskBorderOutset() const
{
    return m_nonInheritedData->rareData->maskBorder->maskBorder.maskBorderOutset;
}

inline const Style::MaskBorderRepeat& ComputedStyleProperties::maskBorderRepeat() const
{
    return m_nonInheritedData->rareData->maskBorder->maskBorder.maskBorderRepeat;
}

inline const Style::MaskBorderSlice& ComputedStyleProperties::maskBorderSlice() const
{
    return m_nonInheritedData->rareData->maskBorder->maskBorder.maskBorderSlice;
}

inline const Style::MaskBorderSource& ComputedStyleProperties::maskBorderSource() const
{
    return m_nonInheritedData->rareData->maskBorder->maskBorder.maskBorderSource;
}

inline const Style::MaskBorderWidth& ComputedStyleProperties::maskBorderWidth() const
{
    return m_nonInheritedData->rareData->maskBorder->maskBorder.maskBorderWidth;
}

inline MaskType ComputedStyleProperties::maskType() const
{
    return static_cast<MaskType>(m_svgData->nonInheritedFlags.maskType);
}

inline MathShift ComputedStyleProperties::mathShift() const
{
    return static_cast<MathShift>(m_inheritedRareData->mathShift);
}

inline MathStyle ComputedStyleProperties::mathStyle() const
{
    return static_cast<MathStyle>(m_inheritedRareData->mathStyle);
}

inline Style::MaximumLines ComputedStyleProperties::maxLines() const
{
    return m_nonInheritedData->rareData->maxLines;
}

inline BlendMode ComputedStyleProperties::blendMode() const
{
    return static_cast<BlendMode>(m_nonInheritedData->rareData->effectiveBlendMode);
}

inline ObjectFit ComputedStyleProperties::objectFit() const
{
    return static_cast<ObjectFit>(m_nonInheritedData->miscData->objectFit);
}

inline const Style::ObjectPosition& ComputedStyleProperties::objectPosition() const
{
    return m_nonInheritedData->miscData->objectPosition;
}

inline const Style::OffsetAnchor& ComputedStyleProperties::offsetAnchor() const
{
    return m_nonInheritedData->rareData->offsetAnchor;
}

inline const Style::OffsetDistance& ComputedStyleProperties::offsetDistance() const
{
    return m_nonInheritedData->rareData->offsetDistance;
}

inline const Style::OffsetPath& ComputedStyleProperties::offsetPath() const
{
    return m_nonInheritedData->rareData->offsetPath;
}

inline const Style::OffsetPosition& ComputedStyleProperties::offsetPosition() const
{
    return m_nonInheritedData->rareData->offsetPosition;
}

inline const Style::OffsetRotate& ComputedStyleProperties::offsetRotate() const
{
    return m_nonInheritedData->rareData->offsetRotate;
}

inline Style::Opacity ComputedStyleProperties::opacity() const
{
    return m_nonInheritedData->miscData->opacity;
}

inline Style::Order ComputedStyleProperties::order() const
{
    return m_nonInheritedData->miscData->order;
}

inline Style::Orphans ComputedStyleProperties::orphans() const
{
    return m_inheritedRareData->orphans;
}

inline const Style::Color& ComputedStyleProperties::outlineColor() const
{
    return m_nonInheritedData->backgroundData->outline.outlineColor;
}

inline const Style::Color& ComputedStyleProperties::visitedLinkOutlineColor() const
{
    return m_nonInheritedData->miscData->visitedLinkColor->visitedLinkOutlineColor;
}

inline decltype(auto) ComputedStyleProperties::outlineColorResolver() const
{
    return ColorPropertyResolver<ColorPropertyTraits<PropertyNameConstant<CSSPropertyOutlineColor>>> { *this };
}

inline const Style::OutlineOffset& ComputedStyleProperties::outlineOffset() const
{
    return m_nonInheritedData->backgroundData->outline.outlineOffset;
}

inline OutlineStyle ComputedStyleProperties::outlineStyle() const
{
    return static_cast<OutlineStyle>(m_nonInheritedData->backgroundData->outline.outlineStyle);
}

inline const Style::LineWidth& ComputedStyleProperties::outlineWidth() const
{
    return m_nonInheritedData->backgroundData->outline.outlineWidth;
}

inline OverflowAnchor ComputedStyleProperties::overflowAnchor() const
{
    return static_cast<OverflowAnchor>(m_nonInheritedData->rareData->overflowAnchor);
}

inline const Style::OverflowClipMargin& ComputedStyleProperties::overflowClipMargin() const
{
    return m_nonInheritedData->rareData->overflowClipMargin;
}

inline OverflowWrap ComputedStyleProperties::overflowWrap() const
{
    return static_cast<OverflowWrap>(m_inheritedRareData->overflowWrap);
}

inline Style::SVGPaintOrder ComputedStyleProperties::paintOrder() const
{
    return Style::SVGPaintOrder::fromRaw(m_inheritedRareData->paintOrder);
}

inline const Style::Perspective& ComputedStyleProperties::perspective() const
{
    return m_nonInheritedData->rareData->perspective;
}

inline const Style::PerspectiveOriginX& ComputedStyleProperties::perspectiveOriginX() const
{
    return m_nonInheritedData->rareData->perspectiveOrigin.x;
}

inline const Style::PerspectiveOriginY& ComputedStyleProperties::perspectiveOriginY() const
{
    return m_nonInheritedData->rareData->perspectiveOrigin.y;
}

inline PointerEvents ComputedStyleProperties::pointerEvents() const
{
    return static_cast<PointerEvents>(m_inheritedFlags.pointerEvents);
}

inline PositionType ComputedStyleProperties::position() const
{
    return static_cast<PositionType>(m_nonInheritedFlags.position);
}

inline const Style::PositionAnchor& ComputedStyleProperties::positionAnchor() const
{
    return m_nonInheritedData->rareData->positionAnchor;
}

inline Style::PositionArea ComputedStyleProperties::positionArea() const
{
    return m_nonInheritedData->rareData->positionArea;
}

inline const Style::PositionTryFallbacks& ComputedStyleProperties::positionTryFallbacks() const
{
    return m_nonInheritedData->rareData->positionTryFallbacks;
}

inline Style::PositionTryOrder ComputedStyleProperties::positionTryOrder() const
{
    return static_cast<Style::PositionTryOrder>(m_nonInheritedData->rareData->positionTryOrder);
}

inline Style::PositionVisibility ComputedStyleProperties::positionVisibility() const
{
    return Style::PositionVisibility::fromRaw(m_nonInheritedData->rareData->positionVisibility);
}

inline PrintColorAdjust ComputedStyleProperties::printColorAdjust() const
{
    return static_cast<PrintColorAdjust>(m_inheritedFlags.printColorAdjust);
}

inline const Style::Quotes& ComputedStyleProperties::quotes() const
{
    return m_inheritedRareData->quotes;
}

inline const Style::SVGRadius& ComputedStyleProperties::r() const
{
    return m_svgData->layoutData->r;
}

inline Style::Resize ComputedStyleProperties::resize() const
{
    return static_cast<Style::Resize>(m_nonInheritedData->miscData->resize);
}

inline const Style::Rotate& ComputedStyleProperties::rotate() const
{
    return m_nonInheritedData->rareData->rotate;
}

inline const Style::GapGutter& ComputedStyleProperties::rowGap() const
{
    return m_nonInheritedData->rareData->rowGap;
}

inline RubyAlign ComputedStyleProperties::rubyAlign() const
{
    return static_cast<RubyAlign>(m_inheritedRareData->rubyAlign);
}

inline RubyOverhang ComputedStyleProperties::rubyOverhang() const
{
    return static_cast<RubyOverhang>(m_inheritedRareData->rubyOverhang);
}

inline const Style::SVGRadiusComponent& ComputedStyleProperties::rx() const
{
    return m_svgData->layoutData->rx;
}

inline const Style::SVGRadiusComponent& ComputedStyleProperties::ry() const
{
    return m_svgData->layoutData->ry;
}

inline const Style::Scale& ComputedStyleProperties::scale() const
{
    return m_nonInheritedData->rareData->scale;
}

inline Style::ScrollBehavior ComputedStyleProperties::scrollBehavior() const
{
    return static_cast<Style::ScrollBehavior>(m_nonInheritedData->rareData->scrollBehavior);
}

inline const Style::ScrollSnapAlign& ComputedStyleProperties::scrollSnapAlign() const
{
    return m_nonInheritedData->rareData->scrollSnapAlign;
}

inline ScrollSnapStop ComputedStyleProperties::scrollSnapStop() const
{
    return static_cast<ScrollSnapStop>(m_nonInheritedData->rareData->scrollSnapStop);
}

inline const Style::ScrollSnapType& ComputedStyleProperties::scrollSnapType() const
{
    return m_nonInheritedData->rareData->scrollSnapType;
}

inline const Style::ScrollbarColor& ComputedStyleProperties::scrollbarColor() const
{
    return m_inheritedRareData->scrollbarColor;
}

inline const Style::ScrollbarGutter& ComputedStyleProperties::scrollbarGutter() const
{
    return m_nonInheritedData->rareData->scrollbarGutter;
}

inline Style::ScrollbarWidth ComputedStyleProperties::scrollbarWidth() const
{
    return static_cast<Style::ScrollbarWidth>(m_nonInheritedData->rareData->scrollbarWidth);
}

inline Style::ShapeImageThreshold ComputedStyleProperties::shapeImageThreshold() const
{
    return m_nonInheritedData->rareData->shapeImageThreshold;
}

inline const Style::ShapeMargin& ComputedStyleProperties::shapeMargin() const
{
    return m_nonInheritedData->rareData->shapeMargin;
}

inline const Style::ShapeOutside& ComputedStyleProperties::shapeOutside() const
{
    return m_nonInheritedData->rareData->shapeOutside;
}

inline ShapeRendering ComputedStyleProperties::shapeRendering() const
{
    return static_cast<ShapeRendering>(m_svgData->inheritedFlags.shapeRendering);
}

inline Style::SpeakAs ComputedStyleProperties::speakAs() const
{
    return Style::SpeakAs::fromRaw(m_inheritedRareData->speakAs);
}

inline const Style::Color& ComputedStyleProperties::stopColor() const
{
    return m_svgData->stopData->stopColor;
}

inline decltype(auto) ComputedStyleProperties::stopColorResolver() const
{
    return ColorPropertyResolver<ColorPropertyTraits<PropertyNameConstant<CSSPropertyStopColor>>> { *this };
}

inline Style::Opacity ComputedStyleProperties::stopOpacity() const
{
    return m_svgData->stopData->stopOpacity;
}

inline const Style::SVGPaint& ComputedStyleProperties::stroke() const
{
    return m_svgData->strokeData->stroke;
}

inline const Style::SVGPaint& ComputedStyleProperties::visitedLinkStroke() const
{
    return m_svgData->strokeData->visitedLinkStroke;
}

inline decltype(auto) ComputedStyleProperties::strokeResolver() const
{
    return ColorPropertyResolver<ColorPropertyTraits<PropertyNameConstant<CSSPropertyStroke>>> { *this };
}

inline const Style::Color& ComputedStyleProperties::strokeColor() const
{
    return m_inheritedRareData->strokeColor;
}

inline const Style::Color& ComputedStyleProperties::visitedLinkStrokeColor() const
{
    return m_inheritedRareData->visitedLinkStrokeColor;
}

inline decltype(auto) ComputedStyleProperties::strokeColorResolver() const
{
    return ColorPropertyResolver<ColorPropertyTraits<PropertyNameConstant<CSSPropertyStrokeColor>>> { *this };
}

inline bool ComputedStyleProperties::hasExplicitlySetStrokeColor() const
{
    return m_inheritedRareData->hasExplicitlySetStrokeColor;
}

inline const Style::SVGStrokeDasharray& ComputedStyleProperties::strokeDashArray() const
{
    return m_svgData->strokeData->strokeDashArray;
}

inline const Style::SVGStrokeDashoffset& ComputedStyleProperties::strokeDashOffset() const
{
    return m_svgData->strokeData->strokeDashOffset;
}

inline LineCap ComputedStyleProperties::capStyle() const
{
    return static_cast<LineCap>(m_inheritedRareData->capStyle);
}

inline LineJoin ComputedStyleProperties::joinStyle() const
{
    return static_cast<LineJoin>(m_inheritedRareData->joinStyle);
}

inline Style::StrokeMiterlimit ComputedStyleProperties::strokeMiterLimit() const
{
    return m_inheritedRareData->strokeMiterLimit;
}

inline Style::Opacity ComputedStyleProperties::strokeOpacity() const
{
    return m_svgData->strokeData->strokeOpacity;
}

inline const Style::StrokeWidth& ComputedStyleProperties::strokeWidth() const
{
    return m_inheritedRareData->strokeWidth;
}

inline bool ComputedStyleProperties::hasExplicitlySetStrokeWidth() const
{
    return m_inheritedRareData->hasExplicitlySetStrokeWidth;
}

inline const Style::TabSize& ComputedStyleProperties::tabSize() const
{
    return m_inheritedRareData->tabSize;
}

inline TableLayoutType ComputedStyleProperties::tableLayout() const
{
    return static_cast<TableLayoutType>(m_nonInheritedData->miscData->tableLayout);
}

inline Style::TextAlign ComputedStyleProperties::textAlign() const
{
    return static_cast<Style::TextAlign>(m_inheritedFlags.textAlign);
}

inline Style::TextAlignLast ComputedStyleProperties::textAlignLast() const
{
    return static_cast<Style::TextAlignLast>(m_inheritedRareData->textAlignLast);
}

inline TextAnchor ComputedStyleProperties::textAnchor() const
{
    return static_cast<TextAnchor>(m_svgData->inheritedFlags.textAnchor);
}

inline Style::TextBoxEdge ComputedStyleProperties::textBoxEdge() const
{
    return m_inheritedRareData->textBoxEdge;
}

inline TextBoxTrim ComputedStyleProperties::textBoxTrim() const
{
    return static_cast<TextBoxTrim>(m_nonInheritedData->rareData->textBoxTrim);
}

inline TextCombine ComputedStyleProperties::textCombine() const
{
    return static_cast<TextCombine>(m_inheritedRareData->textCombine);
}

inline const Style::Color& ComputedStyleProperties::textDecorationColor() const
{
    return m_nonInheritedData->rareData->textDecorationColor;
}

inline const Style::Color& ComputedStyleProperties::visitedLinkTextDecorationColor() const
{
    return m_nonInheritedData->miscData->visitedLinkColor->visitedLinkTextDecorationColor;
}

inline decltype(auto) ComputedStyleProperties::textDecorationColorResolver() const
{
    return ColorPropertyResolver<ColorPropertyTraits<PropertyNameConstant<CSSPropertyTextDecorationColor>>> { *this };
}

inline Style::TextDecorationLine ComputedStyleProperties::textDecorationLine() const
{
    return Style::TextDecorationLine::fromRaw(m_nonInheritedFlags.textDecorationLine);
}

inline TextDecorationSkipInk ComputedStyleProperties::textDecorationSkipInk() const
{
    return static_cast<TextDecorationSkipInk>(m_inheritedRareData->textDecorationSkipInk);
}

inline TextDecorationStyle ComputedStyleProperties::textDecorationStyle() const
{
    return static_cast<TextDecorationStyle>(m_nonInheritedData->rareData->textDecorationStyle);
}

inline const Style::TextDecorationThickness& ComputedStyleProperties::textDecorationThickness() const
{
    return m_nonInheritedData->rareData->textDecorationThickness;
}

inline const Style::Color& ComputedStyleProperties::textEmphasisColor() const
{
    return m_inheritedRareData->textEmphasisColor;
}

inline const Style::Color& ComputedStyleProperties::visitedLinkTextEmphasisColor() const
{
    return m_inheritedRareData->visitedLinkTextEmphasisColor;
}

inline decltype(auto) ComputedStyleProperties::textEmphasisColorResolver() const
{
    return ColorPropertyResolver<ColorPropertyTraits<PropertyNameConstant<CSSPropertyTextEmphasisColor>>> { *this };
}

inline Style::TextEmphasisPosition ComputedStyleProperties::textEmphasisPosition() const
{
    return Style::TextEmphasisPosition::fromRaw(m_inheritedRareData->textEmphasisPosition);
}

inline const Style::TextEmphasisStyle& ComputedStyleProperties::textEmphasisStyle() const
{
    return m_inheritedRareData->textEmphasisStyle;
}

inline TextGroupAlign ComputedStyleProperties::textGroupAlign() const
{
    return static_cast<TextGroupAlign>(m_nonInheritedData->rareData->textGroupAlign);
}

inline const Style::TextIndent& ComputedStyleProperties::textIndent() const
{
    return m_inheritedRareData->textIndent;
}

inline TextJustify ComputedStyleProperties::textJustify() const
{
    return static_cast<TextJustify>(m_inheritedRareData->textJustify);
}

inline TextOverflow ComputedStyleProperties::textOverflow() const
{
    return static_cast<TextOverflow>(m_nonInheritedData->miscData->textOverflow);
}

inline const Style::TextShadows& ComputedStyleProperties::textShadow() const
{
    return m_inheritedRareData->textShadow;
}

inline Style::TextTransform ComputedStyleProperties::textTransform() const
{
    return Style::TextTransform::fromRaw(m_inheritedFlags.textTransform);
}

inline const Style::TextUnderlineOffset& ComputedStyleProperties::textUnderlineOffset() const
{
    return m_inheritedRareData->textUnderlineOffset;
}

inline Style::TextUnderlinePosition ComputedStyleProperties::textUnderlinePosition() const
{
    return Style::TextUnderlinePosition::fromRaw(m_inheritedRareData->textUnderlinePosition);
}

inline TextWrapMode ComputedStyleProperties::textWrapMode() const
{
    return static_cast<TextWrapMode>(m_inheritedFlags.textWrapMode);
}

inline TextWrapStyle ComputedStyleProperties::textWrapStyle() const
{
    return static_cast<TextWrapStyle>(m_inheritedFlags.textWrapStyle);
}

inline const Style::NameScope& ComputedStyleProperties::timelineScope() const
{
    return m_nonInheritedData->rareData->timelineScope;
}

inline Style::TouchAction ComputedStyleProperties::touchAction() const
{
    return m_nonInheritedData->rareData->touchAction;
}

inline const Style::Transform& ComputedStyleProperties::transform() const
{
    return m_nonInheritedData->miscData->transform->transform;
}

inline TransformBox ComputedStyleProperties::transformBox() const
{
    return static_cast<TransformBox>(m_nonInheritedData->miscData->transform->transformBox);
}

inline const Style::TransformOriginX& ComputedStyleProperties::transformOriginX() const
{
    return m_nonInheritedData->miscData->transform->origin.x;
}

inline const Style::TransformOriginY& ComputedStyleProperties::transformOriginY() const
{
    return m_nonInheritedData->miscData->transform->origin.y;
}

inline const Style::TransformOriginZ& ComputedStyleProperties::transformOriginZ() const
{
    return m_nonInheritedData->miscData->transform->origin.z;
}

inline TransformStyle3D ComputedStyleProperties::transformStyle3D() const
{
    return static_cast<TransformStyle3D>(m_nonInheritedData->rareData->transformStyle3D);
}

inline const Style::Translate& ComputedStyleProperties::translate() const
{
    return m_nonInheritedData->rareData->translate;
}

inline UnicodeBidi ComputedStyleProperties::unicodeBidi() const
{
    return static_cast<UnicodeBidi>(m_nonInheritedFlags.unicodeBidi);
}

inline VectorEffect ComputedStyleProperties::vectorEffect() const
{
    return static_cast<VectorEffect>(m_svgData->nonInheritedFlags.vectorEffect);
}

inline const Style::VerticalAlign& ComputedStyleProperties::verticalAlign() const
{
    return m_nonInheritedData->boxData->verticalAlign;
}

inline const Style::ViewTransitionClasses& ComputedStyleProperties::viewTransitionClasses() const
{
    return m_nonInheritedData->rareData->viewTransitionClasses;
}

inline const Style::ViewTransitionName& ComputedStyleProperties::viewTransitionName() const
{
    return m_nonInheritedData->rareData->viewTransitionName;
}

inline Visibility ComputedStyleProperties::visibility() const
{
    return static_cast<Visibility>(m_inheritedFlags.visibility);
}

inline WhiteSpaceCollapse ComputedStyleProperties::whiteSpaceCollapse() const
{
    return static_cast<WhiteSpaceCollapse>(m_inheritedFlags.whiteSpaceCollapse);
}

inline Style::Widows ComputedStyleProperties::widows() const
{
    return m_inheritedRareData->widows;
}

inline const Style::WillChange& ComputedStyleProperties::willChange() const
{
    return m_nonInheritedData->rareData->willChange;
}

inline WordBreak ComputedStyleProperties::wordBreak() const
{
    return static_cast<WordBreak>(m_inheritedRareData->wordBreak);
}

inline const Style::SVGCoordinateComponent& ComputedStyleProperties::x() const
{
    return m_svgData->layoutData->x;
}

inline const Style::SVGCoordinateComponent& ComputedStyleProperties::y() const
{
    return m_svgData->layoutData->y;
}

inline const Style::AppleColorFilter& ComputedStyleProperties::appleColorFilter() const
{
    return m_inheritedRareData->appleColorFilter->appleColorFilter;
}

inline ApplePayButtonStyle ComputedStyleProperties::applePayButtonStyle() const
{
    return static_cast<ApplePayButtonStyle>(m_nonInheritedData->rareData->applePayButtonStyle);
}

inline ApplePayButtonType ComputedStyleProperties::applePayButtonType() const
{
    return static_cast<ApplePayButtonType>(m_nonInheritedData->rareData->applePayButtonType);
}

inline AppleVisualEffect ComputedStyleProperties::appleVisualEffect() const
{
    return static_cast<AppleVisualEffect>(m_nonInheritedData->rareData->appleVisualEffect);
}

inline Style::WebkitBorderSpacing ComputedStyleProperties::borderHorizontalSpacing() const
{
    return m_inheritedData->borderHorizontalSpacing;
}

inline Style::WebkitBorderSpacing ComputedStyleProperties::borderVerticalSpacing() const
{
    return m_inheritedData->borderVerticalSpacing;
}

inline BoxAlignment ComputedStyleProperties::boxAlign() const
{
    return static_cast<BoxAlignment>(m_nonInheritedData->miscData->deprecatedFlexibleBox->boxAlign);
}

inline BoxDecorationBreak ComputedStyleProperties::boxDecorationBreak() const
{
    return static_cast<BoxDecorationBreak>(m_nonInheritedData->boxData->boxDecorationBreak);
}

inline BoxDirection ComputedStyleProperties::boxDirection() const
{
    return static_cast<BoxDirection>(m_inheritedFlags.boxDirection);
}

inline Style::WebkitBoxFlex ComputedStyleProperties::boxFlex() const
{
    return m_nonInheritedData->miscData->deprecatedFlexibleBox->boxFlex;
}

inline Style::WebkitBoxFlexGroup ComputedStyleProperties::boxFlexGroup() const
{
    return m_nonInheritedData->miscData->deprecatedFlexibleBox->boxFlexGroup;
}

inline BoxLines ComputedStyleProperties::boxLines() const
{
    return static_cast<BoxLines>(m_nonInheritedData->miscData->deprecatedFlexibleBox->boxLines);
}

inline Style::WebkitBoxOrdinalGroup ComputedStyleProperties::boxOrdinalGroup() const
{
    return m_nonInheritedData->miscData->deprecatedFlexibleBox->boxOrdinalGroup;
}

inline BoxOrient ComputedStyleProperties::boxOrient() const
{
    return static_cast<BoxOrient>(m_nonInheritedData->miscData->deprecatedFlexibleBox->boxOrient);
}

inline BoxPack ComputedStyleProperties::boxPack() const
{
    return static_cast<BoxPack>(m_nonInheritedData->miscData->deprecatedFlexibleBox->boxPack);
}

inline const Style::WebkitBoxReflect& ComputedStyleProperties::boxReflect() const
{
    return m_nonInheritedData->rareData->boxReflect;
}

inline ColumnAxis ComputedStyleProperties::columnAxis() const
{
    return static_cast<ColumnAxis>(m_nonInheritedData->miscData->multiCol->columnAxis);
}

inline ColumnProgression ComputedStyleProperties::columnProgression() const
{
    return static_cast<ColumnProgression>(m_nonInheritedData->miscData->multiCol->columnProgression);
}

inline CursorVisibility ComputedStyleProperties::cursorVisibility() const
{
    return static_cast<CursorVisibility>(m_inheritedFlags.cursorVisibility);
}

inline Style::HyphenateLimitEdge ComputedStyleProperties::hyphenateLimitAfter() const
{
    return m_inheritedRareData->hyphenateLimitAfter;
}

inline Style::HyphenateLimitEdge ComputedStyleProperties::hyphenateLimitBefore() const
{
    return m_inheritedRareData->hyphenateLimitBefore;
}

inline Style::HyphenateLimitLines ComputedStyleProperties::hyphenateLimitLines() const
{
    return m_inheritedRareData->hyphenateLimitLines;
}

inline const Style::WebkitInitialLetter& ComputedStyleProperties::initialLetter() const
{
    return m_nonInheritedData->rareData->initialLetter;
}

inline LineAlign ComputedStyleProperties::lineAlign() const
{
    return static_cast<LineAlign>(m_inheritedRareData->lineAlign);
}

inline Style::WebkitLineBoxContain ComputedStyleProperties::lineBoxContain() const
{
    return Style::WebkitLineBoxContain::fromRaw(m_inheritedRareData->lineBoxContain);
}

inline const Style::WebkitLineClamp& ComputedStyleProperties::lineClamp() const
{
    return m_nonInheritedData->rareData->lineClamp;
}

inline const Style::WebkitLineGrid& ComputedStyleProperties::lineGrid() const
{
    return m_inheritedRareData->lineGrid;
}

inline LineSnap ComputedStyleProperties::lineSnap() const
{
    return static_cast<LineSnap>(m_inheritedRareData->lineSnap);
}

inline MarqueeDirection ComputedStyleProperties::marqueeDirection() const
{
    return static_cast<MarqueeDirection>(m_nonInheritedData->rareData->marquee->marqueeDirection);
}

inline const Style::WebkitMarqueeIncrement& ComputedStyleProperties::marqueeIncrement() const
{
    return m_nonInheritedData->rareData->marquee->marqueeIncrement;
}

inline Style::WebkitMarqueeRepetition ComputedStyleProperties::marqueeRepetition() const
{
    return m_nonInheritedData->rareData->marquee->marqueeRepetition;
}

inline Style::WebkitMarqueeSpeed ComputedStyleProperties::marqueeSpeed() const
{
    return m_nonInheritedData->rareData->marquee->marqueeSpeed;
}

inline MarqueeBehavior ComputedStyleProperties::marqueeBehavior() const
{
    return static_cast<MarqueeBehavior>(m_nonInheritedData->rareData->marquee->marqueeBehavior);
}

inline NBSPMode ComputedStyleProperties::nbspMode() const
{
    return static_cast<NBSPMode>(m_inheritedRareData->nbspMode);
}

inline WebCore::Order ComputedStyleProperties::rtlOrdering() const
{
    return static_cast<WebCore::Order>(m_inheritedFlags.rtlOrdering);
}

inline const Style::Color& ComputedStyleProperties::tapHighlightColor() const
{
    return m_inheritedRareData->tapHighlightColor;
}

inline decltype(auto) ComputedStyleProperties::tapHighlightColorResolver() const
{
    return ColorPropertyResolver<ColorPropertyTraits<PropertyNameConstant<CSSPropertyWebkitTapHighlightColor>>> { *this };
}

inline Style::TextDecorationLine ComputedStyleProperties::textDecorationLineInEffect() const
{
    return Style::TextDecorationLine::fromRaw(m_inheritedFlags.textDecorationLineInEffect);
}

inline const Style::Color& ComputedStyleProperties::textFillColor() const
{
    return m_inheritedRareData->textFillColor;
}

inline const Style::Color& ComputedStyleProperties::visitedLinkTextFillColor() const
{
    return m_inheritedRareData->visitedLinkTextFillColor;
}

inline decltype(auto) ComputedStyleProperties::textFillColorResolver() const
{
    return ColorPropertyResolver<ColorPropertyTraits<PropertyNameConstant<CSSPropertyWebkitTextFillColor>>> { *this };
}

inline TextSecurity ComputedStyleProperties::textSecurity() const
{
    return static_cast<TextSecurity>(m_inheritedRareData->textSecurity);
}

inline const Style::Color& ComputedStyleProperties::textStrokeColor() const
{
    return m_inheritedRareData->textStrokeColor;
}

inline const Style::Color& ComputedStyleProperties::visitedLinkTextStrokeColor() const
{
    return m_inheritedRareData->visitedLinkTextStrokeColor;
}

inline decltype(auto) ComputedStyleProperties::textStrokeColorResolver() const
{
    return ColorPropertyResolver<ColorPropertyTraits<PropertyNameConstant<CSSPropertyWebkitTextStrokeColor>>> { *this };
}

inline Style::WebkitTextStrokeWidth ComputedStyleProperties::textStrokeWidth() const
{
    return m_inheritedRareData->textStrokeWidth;
}

inline UserDrag ComputedStyleProperties::userDrag() const
{
    return static_cast<UserDrag>(m_nonInheritedData->miscData->userDrag);
}

inline UserModify ComputedStyleProperties::userModify() const
{
    return static_cast<UserModify>(m_inheritedRareData->userModify);
}

inline UserSelect ComputedStyleProperties::userSelect() const
{
    return static_cast<UserSelect>(m_inheritedRareData->userSelect);
}

inline const Style::Color& ComputedStyleProperties::borderBottomColor() const
{
    return m_nonInheritedData->surroundData->border.colors().bottom();
}

inline const Style::Color& ComputedStyleProperties::visitedLinkBorderBottomColor() const
{
    return m_nonInheritedData->miscData->visitedLinkColor->visitedLinkBorderColors.bottom();
}

inline decltype(auto) ComputedStyleProperties::borderBottomColorResolver() const
{
    return ColorPropertyResolver<ColorPropertyTraits<PropertyNameConstant<CSSPropertyBorderBottomColor>>> { *this };
}

inline const Style::BorderRadiusValue& ComputedStyleProperties::borderBottomLeftRadius() const
{
    return m_nonInheritedData->surroundData->border.radii.bottomLeft();
}

inline bool ComputedStyleProperties::hasExplicitlySetBorderBottomLeftRadius() const
{
    return m_nonInheritedData->surroundData->hasExplicitlySetBorderBottomLeftRadius;
}

inline const Style::BorderRadiusValue& ComputedStyleProperties::borderBottomRightRadius() const
{
    return m_nonInheritedData->surroundData->border.radii.bottomRight();
}

inline bool ComputedStyleProperties::hasExplicitlySetBorderBottomRightRadius() const
{
    return m_nonInheritedData->surroundData->hasExplicitlySetBorderBottomRightRadius;
}

inline BorderStyle ComputedStyleProperties::borderBottomStyle() const
{
    return static_cast<BorderStyle>(m_nonInheritedData->surroundData->border.styles().bottom());
}

inline const Style::LineWidth& ComputedStyleProperties::borderBottomWidth() const
{
    return m_nonInheritedData->surroundData->border.widths().bottom();
}

inline const Style::Color& ComputedStyleProperties::borderLeftColor() const
{
    return m_nonInheritedData->surroundData->border.colors().left();
}

inline const Style::Color& ComputedStyleProperties::visitedLinkBorderLeftColor() const
{
    return m_nonInheritedData->miscData->visitedLinkColor->visitedLinkBorderColors.left();
}

inline decltype(auto) ComputedStyleProperties::borderLeftColorResolver() const
{
    return ColorPropertyResolver<ColorPropertyTraits<PropertyNameConstant<CSSPropertyBorderLeftColor>>> { *this };
}

inline BorderStyle ComputedStyleProperties::borderLeftStyle() const
{
    return static_cast<BorderStyle>(m_nonInheritedData->surroundData->border.styles().left());
}

inline const Style::LineWidth& ComputedStyleProperties::borderLeftWidth() const
{
    return m_nonInheritedData->surroundData->border.widths().left();
}

inline const Style::Color& ComputedStyleProperties::borderRightColor() const
{
    return m_nonInheritedData->surroundData->border.colors().right();
}

inline const Style::Color& ComputedStyleProperties::visitedLinkBorderRightColor() const
{
    return m_nonInheritedData->miscData->visitedLinkColor->visitedLinkBorderColors.right();
}

inline decltype(auto) ComputedStyleProperties::borderRightColorResolver() const
{
    return ColorPropertyResolver<ColorPropertyTraits<PropertyNameConstant<CSSPropertyBorderRightColor>>> { *this };
}

inline BorderStyle ComputedStyleProperties::borderRightStyle() const
{
    return static_cast<BorderStyle>(m_nonInheritedData->surroundData->border.styles().right());
}

inline const Style::LineWidth& ComputedStyleProperties::borderRightWidth() const
{
    return m_nonInheritedData->surroundData->border.widths().right();
}

inline const Style::Color& ComputedStyleProperties::borderTopColor() const
{
    return m_nonInheritedData->surroundData->border.colors().top();
}

inline const Style::Color& ComputedStyleProperties::visitedLinkBorderTopColor() const
{
    return m_nonInheritedData->miscData->visitedLinkColor->visitedLinkBorderColors.top();
}

inline decltype(auto) ComputedStyleProperties::borderTopColorResolver() const
{
    return ColorPropertyResolver<ColorPropertyTraits<PropertyNameConstant<CSSPropertyBorderTopColor>>> { *this };
}

inline const Style::BorderRadiusValue& ComputedStyleProperties::borderTopLeftRadius() const
{
    return m_nonInheritedData->surroundData->border.radii.topLeft();
}

inline bool ComputedStyleProperties::hasExplicitlySetBorderTopLeftRadius() const
{
    return m_nonInheritedData->surroundData->hasExplicitlySetBorderTopLeftRadius;
}

inline const Style::BorderRadiusValue& ComputedStyleProperties::borderTopRightRadius() const
{
    return m_nonInheritedData->surroundData->border.radii.topRight();
}

inline bool ComputedStyleProperties::hasExplicitlySetBorderTopRightRadius() const
{
    return m_nonInheritedData->surroundData->hasExplicitlySetBorderTopRightRadius;
}

inline BorderStyle ComputedStyleProperties::borderTopStyle() const
{
    return static_cast<BorderStyle>(m_nonInheritedData->surroundData->border.styles().top());
}

inline const Style::LineWidth& ComputedStyleProperties::borderTopWidth() const
{
    return m_nonInheritedData->surroundData->border.widths().top();
}

inline const Style::InsetEdge& ComputedStyleProperties::bottom() const
{
    return m_nonInheritedData->surroundData->inset.bottom();
}

inline const Style::ContainIntrinsicSize& ComputedStyleProperties::containIntrinsicHeight() const
{
    return m_nonInheritedData->rareData->containIntrinsicHeight;
}

inline const Style::ContainIntrinsicSize& ComputedStyleProperties::containIntrinsicWidth() const
{
    return m_nonInheritedData->rareData->containIntrinsicWidth;
}

inline const Style::CornerShapeValue& ComputedStyleProperties::cornerBottomLeftShape() const
{
    return m_nonInheritedData->surroundData->border.cornerShapes.bottomLeft();
}

inline const Style::CornerShapeValue& ComputedStyleProperties::cornerBottomRightShape() const
{
    return m_nonInheritedData->surroundData->border.cornerShapes.bottomRight();
}

inline const Style::CornerShapeValue& ComputedStyleProperties::cornerTopLeftShape() const
{
    return m_nonInheritedData->surroundData->border.cornerShapes.topLeft();
}

inline const Style::CornerShapeValue& ComputedStyleProperties::cornerTopRightShape() const
{
    return m_nonInheritedData->surroundData->border.cornerShapes.topRight();
}

inline const Style::PreferredSize& ComputedStyleProperties::height() const
{
    return m_nonInheritedData->boxData->height;
}

inline const Style::InsetEdge& ComputedStyleProperties::left() const
{
    return m_nonInheritedData->surroundData->inset.left();
}

inline const Style::MarginEdge& ComputedStyleProperties::marginBottom() const
{
    return m_nonInheritedData->surroundData->margin.bottom();
}

inline const Style::MarginEdge& ComputedStyleProperties::marginLeft() const
{
    return m_nonInheritedData->surroundData->margin.left();
}

inline const Style::MarginEdge& ComputedStyleProperties::marginRight() const
{
    return m_nonInheritedData->surroundData->margin.right();
}

inline const Style::MarginEdge& ComputedStyleProperties::marginTop() const
{
    return m_nonInheritedData->surroundData->margin.top();
}

inline const Style::MaximumSize& ComputedStyleProperties::maxHeight() const
{
    return m_nonInheritedData->boxData->maxHeight;
}

inline const Style::MaximumSize& ComputedStyleProperties::maxWidth() const
{
    return m_nonInheritedData->boxData->maxWidth;
}

inline const Style::MinimumSize& ComputedStyleProperties::minHeight() const
{
    return m_nonInheritedData->boxData->minHeight;
}

inline const Style::MinimumSize& ComputedStyleProperties::minWidth() const
{
    return m_nonInheritedData->boxData->minWidth;
}

inline Overflow ComputedStyleProperties::overflowX() const
{
    return static_cast<Overflow>(m_nonInheritedFlags.overflowX);
}

inline Overflow ComputedStyleProperties::overflowY() const
{
    return static_cast<Overflow>(m_nonInheritedFlags.overflowY);
}

inline OverscrollBehavior ComputedStyleProperties::overscrollBehaviorX() const
{
    return static_cast<OverscrollBehavior>(m_nonInheritedData->rareData->overscrollBehaviorX);
}

inline OverscrollBehavior ComputedStyleProperties::overscrollBehaviorY() const
{
    return static_cast<OverscrollBehavior>(m_nonInheritedData->rareData->overscrollBehaviorY);
}

inline const Style::PaddingEdge& ComputedStyleProperties::paddingBottom() const
{
    return m_nonInheritedData->surroundData->padding.bottom();
}

inline bool ComputedStyleProperties::hasExplicitlySetPaddingBottom() const
{
    return m_nonInheritedData->surroundData->hasExplicitlySetPaddingBottom;
}

inline const Style::PaddingEdge& ComputedStyleProperties::paddingLeft() const
{
    return m_nonInheritedData->surroundData->padding.left();
}

inline bool ComputedStyleProperties::hasExplicitlySetPaddingLeft() const
{
    return m_nonInheritedData->surroundData->hasExplicitlySetPaddingLeft;
}

inline const Style::PaddingEdge& ComputedStyleProperties::paddingRight() const
{
    return m_nonInheritedData->surroundData->padding.right();
}

inline bool ComputedStyleProperties::hasExplicitlySetPaddingRight() const
{
    return m_nonInheritedData->surroundData->hasExplicitlySetPaddingRight;
}

inline const Style::PaddingEdge& ComputedStyleProperties::paddingTop() const
{
    return m_nonInheritedData->surroundData->padding.top();
}

inline bool ComputedStyleProperties::hasExplicitlySetPaddingTop() const
{
    return m_nonInheritedData->surroundData->hasExplicitlySetPaddingTop;
}

inline const Style::InsetEdge& ComputedStyleProperties::right() const
{
    return m_nonInheritedData->surroundData->inset.right();
}

inline const Style::ScrollMarginEdge& ComputedStyleProperties::scrollMarginBottom() const
{
    return m_nonInheritedData->rareData->scrollMargin.bottom();
}

inline const Style::ScrollMarginEdge& ComputedStyleProperties::scrollMarginLeft() const
{
    return m_nonInheritedData->rareData->scrollMargin.left();
}

inline const Style::ScrollMarginEdge& ComputedStyleProperties::scrollMarginRight() const
{
    return m_nonInheritedData->rareData->scrollMargin.right();
}

inline const Style::ScrollMarginEdge& ComputedStyleProperties::scrollMarginTop() const
{
    return m_nonInheritedData->rareData->scrollMargin.top();
}

inline const Style::ScrollPaddingEdge& ComputedStyleProperties::scrollPaddingBottom() const
{
    return m_nonInheritedData->rareData->scrollPadding.bottom();
}

inline const Style::ScrollPaddingEdge& ComputedStyleProperties::scrollPaddingLeft() const
{
    return m_nonInheritedData->rareData->scrollPadding.left();
}

inline const Style::ScrollPaddingEdge& ComputedStyleProperties::scrollPaddingRight() const
{
    return m_nonInheritedData->rareData->scrollPadding.right();
}

inline const Style::ScrollPaddingEdge& ComputedStyleProperties::scrollPaddingTop() const
{
    return m_nonInheritedData->rareData->scrollPadding.top();
}

inline const Style::InsetEdge& ComputedStyleProperties::top() const
{
    return m_nonInheritedData->surroundData->inset.top();
}

inline const Style::PreferredSize& ComputedStyleProperties::width() const
{
    return m_nonInheritedData->boxData->width;
}

inline const Style::PreferredSize& ComputedStyleProperties::logicalWidth(WritingMode writingMode) const
{
    return writingMode.isHorizontal() ? width() : height();
}

inline const Style::PreferredSize& ComputedStyleProperties::logicalWidth() const
{
    return logicalWidth(writingMode());
}

inline const Style::PreferredSize& ComputedStyleProperties::logicalHeight(WritingMode writingMode) const
{
    return writingMode.isHorizontal() ? height() : width();
}

inline const Style::PreferredSize& ComputedStyleProperties::logicalHeight() const
{
    return logicalHeight(writingMode());
}

inline const Style::Color& ComputedStyleProperties::borderColorStart(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return writingMode.isInlineLeftToRight() ? borderLeftColor() : borderRightColor();
    else
        return writingMode.isInlineTopToBottom() ? borderTopColor() : borderBottomColor();
}

inline const Style::Color& ComputedStyleProperties::borderColorStart() const
{
    return borderColorStart(writingMode());
}

inline const Style::Color& ComputedStyleProperties::borderColorEnd(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return writingMode.isInlineLeftToRight() ? borderRightColor() : borderLeftColor();
    else
        return writingMode.isInlineTopToBottom() ? borderBottomColor() : borderTopColor();
}

inline const Style::Color& ComputedStyleProperties::borderColorEnd() const
{
    return borderColorEnd(writingMode());
}

inline const Style::Color& ComputedStyleProperties::borderColorBefore(WritingMode writingMode) const
{
    switch (writingMode.blockDirection()) {
    case FlowDirection::LeftToRight:
        return borderLeftColor();
    case FlowDirection::RightToLeft:
        return borderRightColor();
    case FlowDirection::TopToBottom:
        return borderTopColor();
    case FlowDirection::BottomToTop:
        return borderBottomColor();
    }
    ASSERT_NOT_REACHED();
    return borderBottomColor();
}

inline const Style::Color& ComputedStyleProperties::borderColorBefore() const
{
    return borderColorBefore(writingMode());
}

inline const Style::Color& ComputedStyleProperties::borderColorAfter(WritingMode writingMode) const
{
    switch (writingMode.blockDirection()) {
    case FlowDirection::LeftToRight:
        return borderRightColor();
    case FlowDirection::RightToLeft:
        return borderLeftColor();
    case FlowDirection::TopToBottom:
        return borderBottomColor();
    case FlowDirection::BottomToTop:
        return borderTopColor();
    }
    ASSERT_NOT_REACHED();
    return borderTopColor();
}

inline const Style::Color& ComputedStyleProperties::borderColorAfter() const
{
    return borderColorAfter(writingMode());
}

inline const Style::Color& ComputedStyleProperties::borderColorLogicalLeft(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return borderLeftColor();
    else
        return borderTopColor();
}

inline const Style::Color& ComputedStyleProperties::borderColorLogicalLeft() const
{
    return borderColorLogicalLeft(writingMode());
}

inline const Style::Color& ComputedStyleProperties::borderColorLogicalRight(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return borderRightColor();
    else
        return borderBottomColor();
}

inline const Style::Color& ComputedStyleProperties::borderColorLogicalRight() const
{
    return borderColorLogicalRight(writingMode());
}

inline BorderStyle ComputedStyleProperties::borderStyleStart(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return writingMode.isInlineLeftToRight() ? borderLeftStyle() : borderRightStyle();
    else
        return writingMode.isInlineTopToBottom() ? borderTopStyle() : borderBottomStyle();
}

inline BorderStyle ComputedStyleProperties::borderStyleStart() const
{
    return borderStyleStart(writingMode());
}

inline BorderStyle ComputedStyleProperties::borderStyleEnd(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return writingMode.isInlineLeftToRight() ? borderRightStyle() : borderLeftStyle();
    else
        return writingMode.isInlineTopToBottom() ? borderBottomStyle() : borderTopStyle();
}

inline BorderStyle ComputedStyleProperties::borderStyleEnd() const
{
    return borderStyleEnd(writingMode());
}

inline BorderStyle ComputedStyleProperties::borderStyleBefore(WritingMode writingMode) const
{
    switch (writingMode.blockDirection()) {
    case FlowDirection::LeftToRight:
        return borderLeftStyle();
    case FlowDirection::RightToLeft:
        return borderRightStyle();
    case FlowDirection::TopToBottom:
        return borderTopStyle();
    case FlowDirection::BottomToTop:
        return borderBottomStyle();
    }
    ASSERT_NOT_REACHED();
    return borderBottomStyle();
}

inline BorderStyle ComputedStyleProperties::borderStyleBefore() const
{
    return borderStyleBefore(writingMode());
}

inline BorderStyle ComputedStyleProperties::borderStyleAfter(WritingMode writingMode) const
{
    switch (writingMode.blockDirection()) {
    case FlowDirection::LeftToRight:
        return borderRightStyle();
    case FlowDirection::RightToLeft:
        return borderLeftStyle();
    case FlowDirection::TopToBottom:
        return borderBottomStyle();
    case FlowDirection::BottomToTop:
        return borderTopStyle();
    }
    ASSERT_NOT_REACHED();
    return borderTopStyle();
}

inline BorderStyle ComputedStyleProperties::borderStyleAfter() const
{
    return borderStyleAfter(writingMode());
}

inline BorderStyle ComputedStyleProperties::borderStyleLogicalLeft(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return borderLeftStyle();
    else
        return borderTopStyle();
}

inline BorderStyle ComputedStyleProperties::borderStyleLogicalLeft() const
{
    return borderStyleLogicalLeft(writingMode());
}

inline BorderStyle ComputedStyleProperties::borderStyleLogicalRight(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return borderRightStyle();
    else
        return borderBottomStyle();
}

inline BorderStyle ComputedStyleProperties::borderStyleLogicalRight() const
{
    return borderStyleLogicalRight(writingMode());
}

inline const Style::LineWidth& ComputedStyleProperties::borderWidthStart(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return writingMode.isInlineLeftToRight() ? borderLeftWidth() : borderRightWidth();
    else
        return writingMode.isInlineTopToBottom() ? borderTopWidth() : borderBottomWidth();
}

inline const Style::LineWidth& ComputedStyleProperties::borderWidthStart() const
{
    return borderWidthStart(writingMode());
}

inline const Style::LineWidth& ComputedStyleProperties::borderWidthEnd(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return writingMode.isInlineLeftToRight() ? borderRightWidth() : borderLeftWidth();
    else
        return writingMode.isInlineTopToBottom() ? borderBottomWidth() : borderTopWidth();
}

inline const Style::LineWidth& ComputedStyleProperties::borderWidthEnd() const
{
    return borderWidthEnd(writingMode());
}

inline const Style::LineWidth& ComputedStyleProperties::borderWidthBefore(WritingMode writingMode) const
{
    switch (writingMode.blockDirection()) {
    case FlowDirection::LeftToRight:
        return borderLeftWidth();
    case FlowDirection::RightToLeft:
        return borderRightWidth();
    case FlowDirection::TopToBottom:
        return borderTopWidth();
    case FlowDirection::BottomToTop:
        return borderBottomWidth();
    }
    ASSERT_NOT_REACHED();
    return borderBottomWidth();
}

inline const Style::LineWidth& ComputedStyleProperties::borderWidthBefore() const
{
    return borderWidthBefore(writingMode());
}

inline const Style::LineWidth& ComputedStyleProperties::borderWidthAfter(WritingMode writingMode) const
{
    switch (writingMode.blockDirection()) {
    case FlowDirection::LeftToRight:
        return borderRightWidth();
    case FlowDirection::RightToLeft:
        return borderLeftWidth();
    case FlowDirection::TopToBottom:
        return borderBottomWidth();
    case FlowDirection::BottomToTop:
        return borderTopWidth();
    }
    ASSERT_NOT_REACHED();
    return borderTopWidth();
}

inline const Style::LineWidth& ComputedStyleProperties::borderWidthAfter() const
{
    return borderWidthAfter(writingMode());
}

inline const Style::LineWidth& ComputedStyleProperties::borderWidthLogicalLeft(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return borderLeftWidth();
    else
        return borderTopWidth();
}

inline const Style::LineWidth& ComputedStyleProperties::borderWidthLogicalLeft() const
{
    return borderWidthLogicalLeft(writingMode());
}

inline const Style::LineWidth& ComputedStyleProperties::borderWidthLogicalRight(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return borderRightWidth();
    else
        return borderBottomWidth();
}

inline const Style::LineWidth& ComputedStyleProperties::borderWidthLogicalRight() const
{
    return borderWidthLogicalRight(writingMode());
}

inline const Style::InsetEdge& ComputedStyleProperties::insetStart(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return writingMode.isInlineLeftToRight() ? left() : right();
    else
        return writingMode.isInlineTopToBottom() ? top() : bottom();
}

inline const Style::InsetEdge& ComputedStyleProperties::insetStart() const
{
    return insetStart(writingMode());
}

inline const Style::InsetEdge& ComputedStyleProperties::insetEnd(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return writingMode.isInlineLeftToRight() ? right() : left();
    else
        return writingMode.isInlineTopToBottom() ? bottom() : top();
}

inline const Style::InsetEdge& ComputedStyleProperties::insetEnd() const
{
    return insetEnd(writingMode());
}

inline const Style::InsetEdge& ComputedStyleProperties::insetBefore(WritingMode writingMode) const
{
    switch (writingMode.blockDirection()) {
    case FlowDirection::LeftToRight:
        return left();
    case FlowDirection::RightToLeft:
        return right();
    case FlowDirection::TopToBottom:
        return top();
    case FlowDirection::BottomToTop:
        return bottom();
    }
    ASSERT_NOT_REACHED();
    return bottom();
}

inline const Style::InsetEdge& ComputedStyleProperties::insetBefore() const
{
    return insetBefore(writingMode());
}

inline const Style::InsetEdge& ComputedStyleProperties::insetAfter(WritingMode writingMode) const
{
    switch (writingMode.blockDirection()) {
    case FlowDirection::LeftToRight:
        return right();
    case FlowDirection::RightToLeft:
        return left();
    case FlowDirection::TopToBottom:
        return bottom();
    case FlowDirection::BottomToTop:
        return top();
    }
    ASSERT_NOT_REACHED();
    return top();
}

inline const Style::InsetEdge& ComputedStyleProperties::insetAfter() const
{
    return insetAfter(writingMode());
}

inline const Style::InsetEdge& ComputedStyleProperties::insetLogicalLeft(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return left();
    else
        return top();
}

inline const Style::InsetEdge& ComputedStyleProperties::insetLogicalLeft() const
{
    return insetLogicalLeft(writingMode());
}

inline const Style::InsetEdge& ComputedStyleProperties::insetLogicalRight(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return right();
    else
        return bottom();
}

inline const Style::InsetEdge& ComputedStyleProperties::insetLogicalRight() const
{
    return insetLogicalRight(writingMode());
}

inline const Style::MarginEdge& ComputedStyleProperties::marginStart(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return writingMode.isInlineLeftToRight() ? marginLeft() : marginRight();
    else
        return writingMode.isInlineTopToBottom() ? marginTop() : marginBottom();
}

inline const Style::MarginEdge& ComputedStyleProperties::marginStart() const
{
    return marginStart(writingMode());
}

inline const Style::MarginEdge& ComputedStyleProperties::marginEnd(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return writingMode.isInlineLeftToRight() ? marginRight() : marginLeft();
    else
        return writingMode.isInlineTopToBottom() ? marginBottom() : marginTop();
}

inline const Style::MarginEdge& ComputedStyleProperties::marginEnd() const
{
    return marginEnd(writingMode());
}

inline const Style::MarginEdge& ComputedStyleProperties::marginBefore(WritingMode writingMode) const
{
    switch (writingMode.blockDirection()) {
    case FlowDirection::LeftToRight:
        return marginLeft();
    case FlowDirection::RightToLeft:
        return marginRight();
    case FlowDirection::TopToBottom:
        return marginTop();
    case FlowDirection::BottomToTop:
        return marginBottom();
    }
    ASSERT_NOT_REACHED();
    return marginBottom();
}

inline const Style::MarginEdge& ComputedStyleProperties::marginBefore() const
{
    return marginBefore(writingMode());
}

inline const Style::MarginEdge& ComputedStyleProperties::marginAfter(WritingMode writingMode) const
{
    switch (writingMode.blockDirection()) {
    case FlowDirection::LeftToRight:
        return marginRight();
    case FlowDirection::RightToLeft:
        return marginLeft();
    case FlowDirection::TopToBottom:
        return marginBottom();
    case FlowDirection::BottomToTop:
        return marginTop();
    }
    ASSERT_NOT_REACHED();
    return marginTop();
}

inline const Style::MarginEdge& ComputedStyleProperties::marginAfter() const
{
    return marginAfter(writingMode());
}

inline const Style::MarginEdge& ComputedStyleProperties::marginLogicalLeft(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return marginLeft();
    else
        return marginTop();
}

inline const Style::MarginEdge& ComputedStyleProperties::marginLogicalLeft() const
{
    return marginLogicalLeft(writingMode());
}

inline const Style::MarginEdge& ComputedStyleProperties::marginLogicalRight(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return marginRight();
    else
        return marginBottom();
}

inline const Style::MarginEdge& ComputedStyleProperties::marginLogicalRight() const
{
    return marginLogicalRight(writingMode());
}

inline const Style::MaximumSize& ComputedStyleProperties::logicalMaxWidth(WritingMode writingMode) const
{
    return writingMode.isHorizontal() ? maxWidth() : maxHeight();
}

inline const Style::MaximumSize& ComputedStyleProperties::logicalMaxWidth() const
{
    return logicalMaxWidth(writingMode());
}

inline const Style::MaximumSize& ComputedStyleProperties::logicalMaxHeight(WritingMode writingMode) const
{
    return writingMode.isHorizontal() ? maxHeight() : maxWidth();
}

inline const Style::MaximumSize& ComputedStyleProperties::logicalMaxHeight() const
{
    return logicalMaxHeight(writingMode());
}

inline const Style::MinimumSize& ComputedStyleProperties::logicalMinWidth(WritingMode writingMode) const
{
    return writingMode.isHorizontal() ? minWidth() : minHeight();
}

inline const Style::MinimumSize& ComputedStyleProperties::logicalMinWidth() const
{
    return logicalMinWidth(writingMode());
}

inline const Style::MinimumSize& ComputedStyleProperties::logicalMinHeight(WritingMode writingMode) const
{
    return writingMode.isHorizontal() ? minHeight() : minWidth();
}

inline const Style::MinimumSize& ComputedStyleProperties::logicalMinHeight() const
{
    return logicalMinHeight(writingMode());
}

inline Overflow ComputedStyleProperties::logicalOverflowX(WritingMode writingMode) const
{
    return writingMode.isHorizontal() ? overflowX() : overflowY();
}

inline Overflow ComputedStyleProperties::logicalOverflowX() const
{
    return logicalOverflowX(writingMode());
}

inline Overflow ComputedStyleProperties::logicalOverflowY(WritingMode writingMode) const
{
    return writingMode.isHorizontal() ? overflowY() : overflowX();
}

inline Overflow ComputedStyleProperties::logicalOverflowY() const
{
    return logicalOverflowY(writingMode());
}

inline OverscrollBehavior ComputedStyleProperties::logicalOverscrollBehaviorX(WritingMode writingMode) const
{
    return writingMode.isHorizontal() ? overscrollBehaviorX() : overscrollBehaviorY();
}

inline OverscrollBehavior ComputedStyleProperties::logicalOverscrollBehaviorX() const
{
    return logicalOverscrollBehaviorX(writingMode());
}

inline OverscrollBehavior ComputedStyleProperties::logicalOverscrollBehaviorY(WritingMode writingMode) const
{
    return writingMode.isHorizontal() ? overscrollBehaviorY() : overscrollBehaviorX();
}

inline OverscrollBehavior ComputedStyleProperties::logicalOverscrollBehaviorY() const
{
    return logicalOverscrollBehaviorY(writingMode());
}

inline const Style::PaddingEdge& ComputedStyleProperties::paddingStart(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return writingMode.isInlineLeftToRight() ? paddingLeft() : paddingRight();
    else
        return writingMode.isInlineTopToBottom() ? paddingTop() : paddingBottom();
}

inline const Style::PaddingEdge& ComputedStyleProperties::paddingStart() const
{
    return paddingStart(writingMode());
}

inline const Style::PaddingEdge& ComputedStyleProperties::paddingEnd(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return writingMode.isInlineLeftToRight() ? paddingRight() : paddingLeft();
    else
        return writingMode.isInlineTopToBottom() ? paddingBottom() : paddingTop();
}

inline const Style::PaddingEdge& ComputedStyleProperties::paddingEnd() const
{
    return paddingEnd(writingMode());
}

inline const Style::PaddingEdge& ComputedStyleProperties::paddingBefore(WritingMode writingMode) const
{
    switch (writingMode.blockDirection()) {
    case FlowDirection::LeftToRight:
        return paddingLeft();
    case FlowDirection::RightToLeft:
        return paddingRight();
    case FlowDirection::TopToBottom:
        return paddingTop();
    case FlowDirection::BottomToTop:
        return paddingBottom();
    }
    ASSERT_NOT_REACHED();
    return paddingBottom();
}

inline const Style::PaddingEdge& ComputedStyleProperties::paddingBefore() const
{
    return paddingBefore(writingMode());
}

inline const Style::PaddingEdge& ComputedStyleProperties::paddingAfter(WritingMode writingMode) const
{
    switch (writingMode.blockDirection()) {
    case FlowDirection::LeftToRight:
        return paddingRight();
    case FlowDirection::RightToLeft:
        return paddingLeft();
    case FlowDirection::TopToBottom:
        return paddingBottom();
    case FlowDirection::BottomToTop:
        return paddingTop();
    }
    ASSERT_NOT_REACHED();
    return paddingTop();
}

inline const Style::PaddingEdge& ComputedStyleProperties::paddingAfter() const
{
    return paddingAfter(writingMode());
}

inline const Style::PaddingEdge& ComputedStyleProperties::paddingLogicalLeft(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return paddingLeft();
    else
        return paddingTop();
}

inline const Style::PaddingEdge& ComputedStyleProperties::paddingLogicalLeft() const
{
    return paddingLogicalLeft(writingMode());
}

inline const Style::PaddingEdge& ComputedStyleProperties::paddingLogicalRight(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return paddingRight();
    else
        return paddingBottom();
}

inline const Style::PaddingEdge& ComputedStyleProperties::paddingLogicalRight() const
{
    return paddingLogicalRight(writingMode());
}

inline const Style::ContainIntrinsicSize& ComputedStyleProperties::logicalContainIntrinsicWidth(WritingMode writingMode) const
{
    return writingMode.isHorizontal() ? containIntrinsicWidth() : containIntrinsicHeight();
}

inline const Style::ContainIntrinsicSize& ComputedStyleProperties::logicalContainIntrinsicWidth() const
{
    return logicalContainIntrinsicWidth(writingMode());
}

inline const Style::ContainIntrinsicSize& ComputedStyleProperties::logicalContainIntrinsicHeight(WritingMode writingMode) const
{
    return writingMode.isHorizontal() ? containIntrinsicHeight() : containIntrinsicWidth();
}

inline const Style::ContainIntrinsicSize& ComputedStyleProperties::logicalContainIntrinsicHeight() const
{
    return logicalContainIntrinsicHeight(writingMode());
}

inline const Style::ScrollMarginEdge& ComputedStyleProperties::scrollMarginStart(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return writingMode.isInlineLeftToRight() ? scrollMarginLeft() : scrollMarginRight();
    else
        return writingMode.isInlineTopToBottom() ? scrollMarginTop() : scrollMarginBottom();
}

inline const Style::ScrollMarginEdge& ComputedStyleProperties::scrollMarginStart() const
{
    return scrollMarginStart(writingMode());
}

inline const Style::ScrollMarginEdge& ComputedStyleProperties::scrollMarginEnd(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return writingMode.isInlineLeftToRight() ? scrollMarginRight() : scrollMarginLeft();
    else
        return writingMode.isInlineTopToBottom() ? scrollMarginBottom() : scrollMarginTop();
}

inline const Style::ScrollMarginEdge& ComputedStyleProperties::scrollMarginEnd() const
{
    return scrollMarginEnd(writingMode());
}

inline const Style::ScrollMarginEdge& ComputedStyleProperties::scrollMarginBefore(WritingMode writingMode) const
{
    switch (writingMode.blockDirection()) {
    case FlowDirection::LeftToRight:
        return scrollMarginLeft();
    case FlowDirection::RightToLeft:
        return scrollMarginRight();
    case FlowDirection::TopToBottom:
        return scrollMarginTop();
    case FlowDirection::BottomToTop:
        return scrollMarginBottom();
    }
    ASSERT_NOT_REACHED();
    return scrollMarginBottom();
}

inline const Style::ScrollMarginEdge& ComputedStyleProperties::scrollMarginBefore() const
{
    return scrollMarginBefore(writingMode());
}

inline const Style::ScrollMarginEdge& ComputedStyleProperties::scrollMarginAfter(WritingMode writingMode) const
{
    switch (writingMode.blockDirection()) {
    case FlowDirection::LeftToRight:
        return scrollMarginRight();
    case FlowDirection::RightToLeft:
        return scrollMarginLeft();
    case FlowDirection::TopToBottom:
        return scrollMarginBottom();
    case FlowDirection::BottomToTop:
        return scrollMarginTop();
    }
    ASSERT_NOT_REACHED();
    return scrollMarginTop();
}

inline const Style::ScrollMarginEdge& ComputedStyleProperties::scrollMarginAfter() const
{
    return scrollMarginAfter(writingMode());
}

inline const Style::ScrollMarginEdge& ComputedStyleProperties::scrollMarginLogicalLeft(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return scrollMarginLeft();
    else
        return scrollMarginTop();
}

inline const Style::ScrollMarginEdge& ComputedStyleProperties::scrollMarginLogicalLeft() const
{
    return scrollMarginLogicalLeft(writingMode());
}

inline const Style::ScrollMarginEdge& ComputedStyleProperties::scrollMarginLogicalRight(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return scrollMarginRight();
    else
        return scrollMarginBottom();
}

inline const Style::ScrollMarginEdge& ComputedStyleProperties::scrollMarginLogicalRight() const
{
    return scrollMarginLogicalRight(writingMode());
}

inline const Style::ScrollPaddingEdge& ComputedStyleProperties::scrollPaddingStart(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return writingMode.isInlineLeftToRight() ? scrollPaddingLeft() : scrollPaddingRight();
    else
        return writingMode.isInlineTopToBottom() ? scrollPaddingTop() : scrollPaddingBottom();
}

inline const Style::ScrollPaddingEdge& ComputedStyleProperties::scrollPaddingStart() const
{
    return scrollPaddingStart(writingMode());
}

inline const Style::ScrollPaddingEdge& ComputedStyleProperties::scrollPaddingEnd(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return writingMode.isInlineLeftToRight() ? scrollPaddingRight() : scrollPaddingLeft();
    else
        return writingMode.isInlineTopToBottom() ? scrollPaddingBottom() : scrollPaddingTop();
}

inline const Style::ScrollPaddingEdge& ComputedStyleProperties::scrollPaddingEnd() const
{
    return scrollPaddingEnd(writingMode());
}

inline const Style::ScrollPaddingEdge& ComputedStyleProperties::scrollPaddingBefore(WritingMode writingMode) const
{
    switch (writingMode.blockDirection()) {
    case FlowDirection::LeftToRight:
        return scrollPaddingLeft();
    case FlowDirection::RightToLeft:
        return scrollPaddingRight();
    case FlowDirection::TopToBottom:
        return scrollPaddingTop();
    case FlowDirection::BottomToTop:
        return scrollPaddingBottom();
    }
    ASSERT_NOT_REACHED();
    return scrollPaddingBottom();
}

inline const Style::ScrollPaddingEdge& ComputedStyleProperties::scrollPaddingBefore() const
{
    return scrollPaddingBefore(writingMode());
}

inline const Style::ScrollPaddingEdge& ComputedStyleProperties::scrollPaddingAfter(WritingMode writingMode) const
{
    switch (writingMode.blockDirection()) {
    case FlowDirection::LeftToRight:
        return scrollPaddingRight();
    case FlowDirection::RightToLeft:
        return scrollPaddingLeft();
    case FlowDirection::TopToBottom:
        return scrollPaddingBottom();
    case FlowDirection::BottomToTop:
        return scrollPaddingTop();
    }
    ASSERT_NOT_REACHED();
    return scrollPaddingTop();
}

inline const Style::ScrollPaddingEdge& ComputedStyleProperties::scrollPaddingAfter() const
{
    return scrollPaddingAfter(writingMode());
}

inline const Style::ScrollPaddingEdge& ComputedStyleProperties::scrollPaddingLogicalLeft(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return scrollPaddingLeft();
    else
        return scrollPaddingTop();
}

inline const Style::ScrollPaddingEdge& ComputedStyleProperties::scrollPaddingLogicalLeft() const
{
    return scrollPaddingLogicalLeft(writingMode());
}

inline const Style::ScrollPaddingEdge& ComputedStyleProperties::scrollPaddingLogicalRight(WritingMode writingMode) const
{
    if (writingMode.isHorizontal())
        return scrollPaddingRight();
    else
        return scrollPaddingBottom();
}

inline const Style::ScrollPaddingEdge& ComputedStyleProperties::scrollPaddingLogicalRight() const
{
    return scrollPaddingLogicalRight(writingMode());
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyBackgroundColor>>::color(const ComputedStyleProperties& style)
{
    return style.backgroundColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyBackgroundColor>>::visitedLinkColor(const ComputedStyleProperties& style)
{
    return style.visitedLinkBackgroundColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyColumnRuleColor>>::color(const ComputedStyleProperties& style)
{
    return style.columnRuleColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyColumnRuleColor>>::visitedLinkColor(const ComputedStyleProperties& style)
{
    return style.visitedLinkColumnRuleColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyFloodColor>>::color(const ComputedStyleProperties& style)
{
    return style.floodColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyLightingColor>>::color(const ComputedStyleProperties& style)
{
    return style.lightingColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyOutlineColor>>::color(const ComputedStyleProperties& style)
{
    return style.outlineColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyOutlineColor>>::visitedLinkColor(const ComputedStyleProperties& style)
{
    return style.visitedLinkOutlineColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyStopColor>>::color(const ComputedStyleProperties& style)
{
    return style.stopColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyStrokeColor>>::color(const ComputedStyleProperties& style)
{
    return style.strokeColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyStrokeColor>>::visitedLinkColor(const ComputedStyleProperties& style)
{
    return style.visitedLinkStrokeColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyTextDecorationColor>>::color(const ComputedStyleProperties& style)
{
    return style.textDecorationColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyTextDecorationColor>>::visitedLinkColor(const ComputedStyleProperties& style)
{
    return style.visitedLinkTextDecorationColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyTextEmphasisColor>>::color(const ComputedStyleProperties& style)
{
    return style.textEmphasisColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyTextEmphasisColor>>::visitedLinkColor(const ComputedStyleProperties& style)
{
    return style.visitedLinkTextEmphasisColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyWebkitTapHighlightColor>>::color(const ComputedStyleProperties& style)
{
    return style.tapHighlightColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyWebkitTextFillColor>>::color(const ComputedStyleProperties& style)
{
    return style.textFillColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyWebkitTextFillColor>>::visitedLinkColor(const ComputedStyleProperties& style)
{
    return style.visitedLinkTextFillColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyWebkitTextStrokeColor>>::color(const ComputedStyleProperties& style)
{
    return style.textStrokeColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyWebkitTextStrokeColor>>::visitedLinkColor(const ComputedStyleProperties& style)
{
    return style.visitedLinkTextStrokeColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyBorderBottomColor>>::color(const ComputedStyleProperties& style)
{
    return style.borderBottomColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyBorderBottomColor>>::visitedLinkColor(const ComputedStyleProperties& style)
{
    return style.visitedLinkBorderBottomColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyBorderLeftColor>>::color(const ComputedStyleProperties& style)
{
    return style.borderLeftColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyBorderLeftColor>>::visitedLinkColor(const ComputedStyleProperties& style)
{
    return style.visitedLinkBorderLeftColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyBorderRightColor>>::color(const ComputedStyleProperties& style)
{
    return style.borderRightColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyBorderRightColor>>::visitedLinkColor(const ComputedStyleProperties& style)
{
    return style.visitedLinkBorderRightColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyBorderTopColor>>::color(const ComputedStyleProperties& style)
{
    return style.borderTopColor();
}

inline const Color& ColorPropertyTraits<PropertyNameConstant<CSSPropertyBorderTopColor>>::visitedLinkColor(const ComputedStyleProperties& style)
{
    return style.visitedLinkBorderTopColor();
}

} // namespace WebCore
} // namespace Style

