module FF.CSS.Spec.Safe.Value where

open import Agda.Builtin.String using (String; primStringAppend)
open import Agda.Primitive using (lzero) renaming (Set to Type)

open import FF.CSS.Spec.Safe.Property
open import FF.CSS.Spec.Safe.Value.Base public
open import FF.CSS.Spec.Safe.Value.Unit public
open import FF.CSS.Spec.Safe.Value.Color public
open import FF.CSS.Spec.Safe.Value.Transform public
open import FF.CSS.Spec.Safe.Value.Animation public
open import FF.CSS.Spec.Safe.Value.Scroll public
open import FF.CSS.Spec.Safe.Value.Table public
open import FF.CSS.Spec.Safe.Value.List public
open import FF.CSS.Spec.Safe.Value.Masking public
open import FF.CSS.Spec.Safe.Value.Break public
open import FF.CSS.Spec.Safe.Value.Filter public
open import FF.CSS.Spec.Safe.Value.Multicol public
open import FF.CSS.Spec.Safe.Value.Ruby public
open import FF.CSS.Spec.Safe.Value.Image public
open import FF.CSS.Spec.Safe.Value.ColorAdjust public
open import FF.CSS.Spec.Safe.Value.Containment public
open import FF.CSS.Spec.Safe.Value.Compositing public
open import FF.CSS.Spec.Safe.Value.GeneratedContent public
open import FF.CSS.Spec.Safe.Value.Inline public
open import FF.CSS.Spec.Safe.Value.Misc public

private
  infixr 5 _++_

  _++_ : String -> String -> String
  _++_ = primStringAppend

-- CSS-wide keywords:
-- https://developer.mozilla.org/en-US/docs/Web/CSS/initial
-- https://developer.mozilla.org/en-US/docs/Web/CSS/inherit
-- https://developer.mozilla.org/en-US/docs/Web/CSS/unset
-- https://developer.mozilla.org/en-US/docs/Web/CSS/revert
-- https://developer.mozilla.org/en-US/docs/Web/CSS/revert-layer
data GlobalKeyword : Type lzero where
  kwInherit kwInitial kwUnset kwRevert kwRevertLayer : GlobalKeyword

renderGlobalKeyword : GlobalKeyword -> String
renderGlobalKeyword kwInherit = "inherit"
renderGlobalKeyword kwInitial = "initial"
renderGlobalKeyword kwUnset = "unset"
renderGlobalKeyword kwRevert = "revert"
renderGlobalKeyword kwRevertLayer = "revert-layer"

data DisplayOutside : Type lzero where
  outsideBlock outsideInline outsideRunIn : DisplayOutside

renderDisplayOutside : DisplayOutside -> String
renderDisplayOutside outsideBlock = "block"
renderDisplayOutside outsideInline = "inline"
renderDisplayOutside outsideRunIn = "run-in"

data DisplayInside : Type lzero where
  insideFlow insideFlowRoot insideTable insideFlex insideGrid insideRuby : DisplayInside

renderDisplayInside : DisplayInside -> String
renderDisplayInside insideFlow = "flow"
renderDisplayInside insideFlowRoot = "flow-root"
renderDisplayInside insideTable = "table"
renderDisplayInside insideFlex = "flex"
renderDisplayInside insideGrid = "grid"
renderDisplayInside insideRuby = "ruby"

data DisplayBox : Type lzero where
  displayContents displayNone : DisplayBox

renderDisplayBox : DisplayBox -> String
renderDisplayBox displayContents = "contents"
renderDisplayBox displayNone = "none"

data DisplayLegacy : Type lzero where
  inlineBlock inlineFlex inlineGrid inlineTable : DisplayLegacy

renderDisplayLegacy : DisplayLegacy -> String
renderDisplayLegacy inlineBlock = "inline-block"
renderDisplayLegacy inlineFlex = "inline-flex"
renderDisplayLegacy inlineGrid = "inline-grid"
renderDisplayLegacy inlineTable = "inline-table"

-- MDN display property:
-- https://developer.mozilla.org/en-US/docs/Web/CSS/display
data Display : Type lzero where
  displayOutsideInside : DisplayOutside -> DisplayInside -> Display
  displayOutsideOnly   : DisplayOutside -> Display
  displayInsideOnly    : DisplayInside -> Display
  displayBox           : DisplayBox -> Display
  displayLegacy        : DisplayLegacy -> Display
  displayListItem      : Display

renderDisplay : Display -> String
renderDisplay (displayOutsideInside outside inside) =
  renderDisplayOutside outside ++ " " ++ renderDisplayInside inside
renderDisplay (displayOutsideOnly outside) = renderDisplayOutside outside
renderDisplay (displayInsideOnly inside) = renderDisplayInside inside
renderDisplay (displayBox box) = renderDisplayBox box
renderDisplay (displayLegacy legacy) = renderDisplayLegacy legacy
renderDisplay displayListItem = "list-item"

data Visibility : Type lzero where
  visible hidden collapse : Visibility

renderVisibility : Visibility -> String
renderVisibility visible = "visible"
renderVisibility hidden = "hidden"
renderVisibility collapse = "collapse"

data ReadingFlow : Type lzero where
  readingNormal readingSourceOrder readingFlexVisual readingFlexFlow readingGridRows readingGridColumns readingGridOrder : ReadingFlow

renderReadingFlow : ReadingFlow -> String
renderReadingFlow readingNormal = "normal"
renderReadingFlow readingSourceOrder = "source-order"
renderReadingFlow readingFlexVisual = "flex-visual"
renderReadingFlow readingFlexFlow = "flex-flow"
renderReadingFlow readingGridRows = "grid-rows"
renderReadingFlow readingGridColumns = "grid-columns"
renderReadingFlow readingGridOrder = "grid-order"

data Position : Type lzero where
  static relative absolute fixed sticky : Position

renderPosition : Position -> String
renderPosition static = "static"
renderPosition relative = "relative"
renderPosition absolute = "absolute"
renderPosition fixed = "fixed"
renderPosition sticky = "sticky"

data ZIndex : Type lzero where
  zAuto : ZIndex
  zInteger : Integer -> ZIndex

renderZIndex : ZIndex -> String
renderZIndex zAuto = "auto"
renderZIndex (zInteger value) = renderInteger value

data Float : Type lzero where
  floatLeft floatRight floatNone inlineStart inlineEnd : Float

renderFloat : Float -> String
renderFloat floatLeft = "left"
renderFloat floatRight = "right"
renderFloat floatNone = "none"
renderFloat inlineStart = "inline-start"
renderFloat inlineEnd = "inline-end"

data Clear : Type lzero where
  clearNone clearLeft clearRight clearBoth clearInlineStart clearInlineEnd : Clear

renderClear : Clear -> String
renderClear clearNone = "none"
renderClear clearLeft = "left"
renderClear clearRight = "right"
renderClear clearBoth = "both"
renderClear clearInlineStart = "inline-start"
renderClear clearInlineEnd = "inline-end"

data InsetOffset : Type lzero where
  insetAuto : InsetOffset
  insetLengthPercentage : LengthPercentage -> InsetOffset
  insetAnchor : RawValue -> InsetOffset
  insetAnchorSize : RawValue -> InsetOffset

renderInsetOffset : InsetOffset -> String
renderInsetOffset insetAuto = "auto"
renderInsetOffset (insetLengthPercentage value) = renderLengthPercentage value
renderInsetOffset (insetAnchor value) = renderRawValue value
renderInsetOffset (insetAnchorSize value) = renderRawValue value

data MarginSize : Type lzero where
  marginAuto : MarginSize
  marginLengthPercentage : LengthPercentage -> MarginSize
  marginAnchorSize : RawValue -> MarginSize

renderMarginSize : MarginSize -> String
renderMarginSize marginAuto = "auto"
renderMarginSize (marginLengthPercentage value) = renderLengthPercentage value
renderMarginSize (marginAnchorSize value) = renderRawValue value

data SizeBase : Type lzero where
  sizeLengthPercentage : LengthPercentage -> SizeBase
  sizeMinContent sizeMaxContent sizeFitContent : SizeBase
  sizeFitContentOf : LengthPercentage -> SizeBase
  sizeCalc : RawValue -> SizeBase
  sizeAnchor : RawValue -> SizeBase

renderSizeBase : SizeBase -> String
renderSizeBase (sizeLengthPercentage value) = renderLengthPercentage value
renderSizeBase sizeMinContent = "min-content"
renderSizeBase sizeMaxContent = "max-content"
renderSizeBase sizeFitContent = "fit-content"
renderSizeBase (sizeFitContentOf value) = "fit-content(" ++ renderLengthPercentage value ++ ")"
renderSizeBase (sizeCalc value) = renderRawValue value
renderSizeBase (sizeAnchor value) = renderRawValue value

data PreferredSize : Type lzero where
  preferredAuto : PreferredSize
  preferredSize : SizeBase -> PreferredSize

renderPreferredSize : PreferredSize -> String
renderPreferredSize preferredAuto = "auto"
renderPreferredSize (preferredSize value) = renderSizeBase value

data MaxSize : Type lzero where
  maxSizeNone : MaxSize
  maxSize : SizeBase -> MaxSize

renderMaxSize : MaxSize -> String
renderMaxSize maxSizeNone = "none"
renderMaxSize (maxSize value) = renderSizeBase value

data AutoColor : Type lzero where
  autoColor : AutoColor
  chosenColor : Color -> AutoColor

renderAutoColor : AutoColor -> String
renderAutoColor autoColor = "auto"
renderAutoColor (chosenColor value) = renderColor value

data CommaList (A : Type lzero) : Type lzero where
  commaOne : A -> CommaList A
  commaCons : A -> CommaList A -> CommaList A

renderCommaList : {A : Type lzero} -> (A -> String) -> CommaList A -> String
renderCommaList renderA (commaOne value) = renderA value
renderCommaList renderA (commaCons value rest) = renderA value ++ ", " ++ renderCommaList renderA rest

data BackgroundAttachment : Type lzero where
  attachmentScroll attachmentFixed attachmentLocal : BackgroundAttachment

renderBackgroundAttachment : BackgroundAttachment -> String
renderBackgroundAttachment attachmentScroll = "scroll"
renderBackgroundAttachment attachmentFixed = "fixed"
renderBackgroundAttachment attachmentLocal = "local"

data VisualBox : Type lzero where
  visualContentBox visualPaddingBox visualBorderBox : VisualBox

renderVisualBox : VisualBox -> String
renderVisualBox visualContentBox = "content-box"
renderVisualBox visualPaddingBox = "padding-box"
renderVisualBox visualBorderBox = "border-box"

data BackgroundClip : Type lzero where
  clipVisualBox : VisualBox -> BackgroundClip
  clipBorderArea clipText : BackgroundClip

renderBackgroundClip : BackgroundClip -> String
renderBackgroundClip (clipVisualBox value) = renderVisualBox value
renderBackgroundClip clipBorderArea = "border-area"
renderBackgroundClip clipText = "text"

data BackgroundRepeatAxis : Type lzero where
  repeat repeatX repeatY noRepeat space round : BackgroundRepeatAxis

renderBackgroundRepeatAxis : BackgroundRepeatAxis -> String
renderBackgroundRepeatAxis repeat = "repeat"
renderBackgroundRepeatAxis repeatX = "repeat-x"
renderBackgroundRepeatAxis repeatY = "repeat-y"
renderBackgroundRepeatAxis noRepeat = "no-repeat"
renderBackgroundRepeatAxis space = "space"
renderBackgroundRepeatAxis round = "round"

data BackgroundRepeat : Type lzero where
  repeatOne : BackgroundRepeatAxis -> BackgroundRepeat
  repeatTwo : BackgroundRepeatAxis -> BackgroundRepeatAxis -> BackgroundRepeat

renderBackgroundRepeat : BackgroundRepeat -> String
renderBackgroundRepeat (repeatOne value) = renderBackgroundRepeatAxis value
renderBackgroundRepeat (repeatTwo horizontal vertical) =
  renderBackgroundRepeatAxis horizontal ++ " " ++ renderBackgroundRepeatAxis vertical

data BackgroundSize : Type lzero where
  bgSizeAuto bgSizeCover bgSizeContain : BackgroundSize
  bgSizeOne : LengthPercentageAuto -> BackgroundSize
  bgSizeTwo : LengthPercentageAuto -> LengthPercentageAuto -> BackgroundSize

renderBackgroundSize : BackgroundSize -> String
renderBackgroundSize bgSizeAuto = "auto"
renderBackgroundSize bgSizeCover = "cover"
renderBackgroundSize bgSizeContain = "contain"
renderBackgroundSize (bgSizeOne value) = renderLengthPercentageAuto value
renderBackgroundSize (bgSizeTwo width height) =
  renderLengthPercentageAuto width ++ " " ++ renderLengthPercentageAuto height

data Appearance : Type lzero where
  appearanceNone appearanceAuto : Appearance

renderAppearance : Appearance -> String
renderAppearance appearanceNone = "none"
renderAppearance appearanceAuto = "auto"

data CaretAnimation : Type lzero where
  caretAnimationAuto caretAnimationManual : CaretAnimation

renderCaretAnimation : CaretAnimation -> String
renderCaretAnimation caretAnimationAuto = "auto"
renderCaretAnimation caretAnimationManual = "manual"

data CaretShape : Type lzero where
  caretShapeAuto caretShapeBar caretShapeBlock caretShapeUnderscore : CaretShape

renderCaretShape : CaretShape -> String
renderCaretShape caretShapeAuto = "auto"
renderCaretShape caretShapeBar = "bar"
renderCaretShape caretShapeBlock = "block"
renderCaretShape caretShapeUnderscore = "underscore"

data Interactivity : Type lzero where
  interactivityAuto interactivityInert : Interactivity

renderInteractivity : Interactivity -> String
renderInteractivity interactivityAuto = "auto"
renderInteractivity interactivityInert = "inert"

data PointerEvents : Type lzero where
  pointerAuto pointerNone pointerVisiblePainted pointerVisibleFill pointerVisibleStroke pointerVisible pointerPainted pointerFill pointerStroke pointerAll pointerInherit : PointerEvents

renderPointerEvents : PointerEvents -> String
renderPointerEvents pointerAuto = "auto"
renderPointerEvents pointerNone = "none"
renderPointerEvents pointerVisiblePainted = "visiblePainted"
renderPointerEvents pointerVisibleFill = "visibleFill"
renderPointerEvents pointerVisibleStroke = "visibleStroke"
renderPointerEvents pointerVisible = "visible"
renderPointerEvents pointerPainted = "painted"
renderPointerEvents pointerFill = "fill"
renderPointerEvents pointerStroke = "stroke"
renderPointerEvents pointerAll = "all"
renderPointerEvents pointerInherit = "inherit"

data Resize : Type lzero where
  resizeNone resizeBoth resizeHorizontal resizeVertical resizeBlock resizeInline : Resize

renderResize : Resize -> String
renderResize resizeNone = "none"
renderResize resizeBoth = "both"
renderResize resizeHorizontal = "horizontal"
renderResize resizeVertical = "vertical"
renderResize resizeBlock = "block"
renderResize resizeInline = "inline"

data UserSelect : Type lzero where
  userSelectAuto userSelectText userSelectNone userSelectAll : UserSelect

renderUserSelect : UserSelect -> String
renderUserSelect userSelectAuto = "auto"
renderUserSelect userSelectText = "text"
renderUserSelect userSelectNone = "none"
renderUserSelect userSelectAll = "all"

data OverflowKeyword : Type lzero where
  overflowVisible overflowHidden overflowClip overflowScroll overflowAuto : OverflowKeyword

renderOverflowKeyword : OverflowKeyword -> String
renderOverflowKeyword overflowVisible = "visible"
renderOverflowKeyword overflowHidden = "hidden"
renderOverflowKeyword overflowClip = "clip"
renderOverflowKeyword overflowScroll = "scroll"
renderOverflowKeyword overflowAuto = "auto"

data OneOrTwo (A : Type lzero) : Type lzero where
  oneValue : A -> OneOrTwo A
  twoValues : A -> A -> OneOrTwo A

renderOneOrTwo : {A : Type lzero} -> (A -> String) -> OneOrTwo A -> String
renderOneOrTwo renderA (oneValue value) = renderA value
renderOneOrTwo renderA (twoValues first second) = renderA first ++ " " ++ renderA second

data LineClamp : Type lzero where
  lineClampNone : LineClamp
  lineClampInteger : Integer -> LineClamp

renderLineClamp : LineClamp -> String
renderLineClamp lineClampNone = "none"
renderLineClamp (lineClampInteger value) = renderInteger value

data ScrollBehavior : Type lzero where
  scrollAuto scrollSmooth : ScrollBehavior

renderScrollBehavior : ScrollBehavior -> String
renderScrollBehavior scrollAuto = "auto"
renderScrollBehavior scrollSmooth = "smooth"

data ScrollMarkerGroup : Type lzero where
  scrollMarkerNone scrollMarkerBefore scrollMarkerAfter : ScrollMarkerGroup

renderScrollMarkerGroup : ScrollMarkerGroup -> String
renderScrollMarkerGroup scrollMarkerNone = "none"
renderScrollMarkerGroup scrollMarkerBefore = "before"
renderScrollMarkerGroup scrollMarkerAfter = "after"

data ScrollTargetGroup : Type lzero where
  scrollTargetNone scrollTargetAuto : ScrollTargetGroup

renderScrollTargetGroup : ScrollTargetGroup -> String
renderScrollTargetGroup scrollTargetNone = "none"
renderScrollTargetGroup scrollTargetAuto = "auto"

data ScrollbarGutter : Type lzero where
  gutterAuto gutterStable gutterStableBothEdges : ScrollbarGutter

renderScrollbarGutter : ScrollbarGutter -> String
renderScrollbarGutter gutterAuto = "auto"
renderScrollbarGutter gutterStable = "stable"
renderScrollbarGutter gutterStableBothEdges = "stable both-edges"

data BoxSizing : Type lzero where
  contentBox borderBox : BoxSizing

renderBoxSizing : BoxSizing -> String
renderBoxSizing contentBox = "content-box"
renderBoxSizing borderBox = "border-box"

data AspectRatio : Type lzero where
  aspectAuto  : AspectRatio
  aspectRatio : Ratio -> AspectRatio

renderAspectRatio : AspectRatio -> String
renderAspectRatio aspectAuto = "auto"
renderAspectRatio (aspectRatio value) = renderRatio value

data BoxSides (A : Type lzero) : Type lzero where
  oneSide   : A -> BoxSides A
  twoSides  : A -> A -> BoxSides A
  threeSides : A -> A -> A -> BoxSides A
  fourSides : A -> A -> A -> A -> BoxSides A

renderBoxSides : {A : Type lzero} -> (A -> String) -> BoxSides A -> String
renderBoxSides renderA (oneSide value) = renderA value
renderBoxSides renderA (twoSides vertical horizontal) =
  renderA vertical ++ " " ++ renderA horizontal
renderBoxSides renderA (threeSides top horizontal bottom) =
  renderA top ++ " " ++ renderA horizontal ++ " " ++ renderA bottom
renderBoxSides renderA (fourSides top right bottom left) =
  renderA top ++ " " ++ renderA right ++ " " ++ renderA bottom ++ " " ++ renderA left

data BorderRadius : Type lzero where
  radiusSimple : BoxSides LengthPercentage -> BorderRadius
  radiusElliptic : BoxSides LengthPercentage -> BoxSides LengthPercentage -> BorderRadius

renderBorderRadius : BorderRadius -> String
renderBorderRadius (radiusSimple horizontal) = renderBoxSides renderLengthPercentage horizontal
renderBorderRadius (radiusElliptic horizontal vertical) =
  renderBoxSides renderLengthPercentage horizontal ++ " / " ++ renderBoxSides renderLengthPercentage vertical

data GapValue : Type lzero where
  gapNormal : GapValue
  gapLengthPercentage : LengthPercentage -> GapValue

renderGapValue : GapValue -> String
renderGapValue gapNormal = "normal"
renderGapValue (gapLengthPercentage value) = renderLengthPercentage value

data BorderWidth : Type lzero where
  thin medium thick : BorderWidth
  borderLength : Length -> BorderWidth

renderBorderWidth : BorderWidth -> String
renderBorderWidth thin = "thin"
renderBorderWidth medium = "medium"
renderBorderWidth thick = "thick"
renderBorderWidth (borderLength value) = renderLength value

data BorderStyle : Type lzero where
  borderNone hiddenBorder dotted dashed solid double groove ridge inset outset : BorderStyle

renderBorderStyle : BorderStyle -> String
renderBorderStyle borderNone = "none"
renderBorderStyle hiddenBorder = "hidden"
renderBorderStyle dotted = "dotted"
renderBorderStyle dashed = "dashed"
renderBorderStyle solid = "solid"
renderBorderStyle double = "double"
renderBorderStyle groove = "groove"
renderBorderStyle ridge = "ridge"
renderBorderStyle inset = "inset"
renderBorderStyle outset = "outset"

data OutlineStyle : Type lzero where
  outlineAuto : OutlineStyle
  outlineLineStyle : BorderStyle -> OutlineStyle

renderOutlineStyle : OutlineStyle -> String
renderOutlineStyle outlineAuto = "auto"
renderOutlineStyle (outlineLineStyle value) = renderBorderStyle value

data FontWeight : Type lzero where
  weightNormal weightBold weightBolder weightLighter : FontWeight
  weightNumber : Number -> FontWeight

renderFontWeight : FontWeight -> String
renderFontWeight weightNormal = "normal"
renderFontWeight weightBold = "bold"
renderFontWeight weightBolder = "bolder"
renderFontWeight weightLighter = "lighter"
renderFontWeight (weightNumber value) = renderNumber value

data FontStyle : Type lzero where
  fontStyleNormal fontStyleItalic fontStyleOblique : FontStyle
  fontStyleObliqueAngle : Angle -> FontStyle

renderFontStyle : FontStyle -> String
renderFontStyle fontStyleNormal = "normal"
renderFontStyle fontStyleItalic = "italic"
renderFontStyle fontStyleOblique = "oblique"
renderFontStyle (fontStyleObliqueAngle angleValue) = "oblique " ++ renderAngle angleValue

data AutoNone : Type lzero where
  autoNoneAuto autoNoneNone : AutoNone

renderAutoNone : AutoNone -> String
renderAutoNone autoNoneAuto = "auto"
renderAutoNone autoNoneNone = "none"

data FontKerning : Type lzero where
  kerningAuto kerningNormal kerningNone : FontKerning

renderFontKerning : FontKerning -> String
renderFontKerning kerningAuto = "auto"
renderFontKerning kerningNormal = "normal"
renderFontKerning kerningNone = "none"

data FontLanguageOverride : Type lzero where
  languageOverrideNormal : FontLanguageOverride
  languageOverrideString : StringToken -> FontLanguageOverride

renderFontLanguageOverride : FontLanguageOverride -> String
renderFontLanguageOverride languageOverrideNormal = "normal"
renderFontLanguageOverride (languageOverrideString value) = renderStringToken value

data FontVariantCaps : Type lzero where
  capsNormal capsSmall capsAllSmall capsPetite capsAllPetite capsUnicase capsTitling : FontVariantCaps

renderFontVariantCaps : FontVariantCaps -> String
renderFontVariantCaps capsNormal = "normal"
renderFontVariantCaps capsSmall = "small-caps"
renderFontVariantCaps capsAllSmall = "all-small-caps"
renderFontVariantCaps capsPetite = "petite-caps"
renderFontVariantCaps capsAllPetite = "all-petite-caps"
renderFontVariantCaps capsUnicase = "unicase"
renderFontVariantCaps capsTitling = "titling-caps"

data FontVariantEmoji : Type lzero where
  emojiNormal emojiText emojiEmoji emojiUnicode : FontVariantEmoji

renderFontVariantEmoji : FontVariantEmoji -> String
renderFontVariantEmoji emojiNormal = "normal"
renderFontVariantEmoji emojiText = "text"
renderFontVariantEmoji emojiEmoji = "emoji"
renderFontVariantEmoji emojiUnicode = "unicode"

data FontVariantPosition : Type lzero where
  variantPositionNormal variantPositionSub variantPositionSuper : FontVariantPosition

renderFontVariantPosition : FontVariantPosition -> String
renderFontVariantPosition variantPositionNormal = "normal"
renderFontVariantPosition variantPositionSub = "sub"
renderFontVariantPosition variantPositionSuper = "super"

data LineHeight : Type lzero where
  lineHeightNormal : LineHeight
  lineHeightNumber : Number -> LineHeight
  lineHeightLengthPercentage : LengthPercentage -> LineHeight

renderLineHeight : LineHeight -> String
renderLineHeight lineHeightNormal = "normal"
renderLineHeight (lineHeightNumber value) = renderNumber value
renderLineHeight (lineHeightLengthPercentage value) = renderLengthPercentage value

data TextAlign : Type lzero where
  textStart textEnd textLeft textRight textCenter textJustify textMatchParent : TextAlign

renderTextAlign : TextAlign -> String
renderTextAlign textStart = "start"
renderTextAlign textEnd = "end"
renderTextAlign textLeft = "left"
renderTextAlign textRight = "right"
renderTextAlign textCenter = "center"
renderTextAlign textJustify = "justify"
renderTextAlign textMatchParent = "match-parent"

data TextAlignLast : Type lzero where
  textAlignLastAuto textAlignLastStart textAlignLastEnd textAlignLastLeft textAlignLastRight textAlignLastCenter textAlignLastJustify : TextAlignLast

renderTextAlignLast : TextAlignLast -> String
renderTextAlignLast textAlignLastAuto = "auto"
renderTextAlignLast textAlignLastStart = "start"
renderTextAlignLast textAlignLastEnd = "end"
renderTextAlignLast textAlignLastLeft = "left"
renderTextAlignLast textAlignLastRight = "right"
renderTextAlignLast textAlignLastCenter = "center"
renderTextAlignLast textAlignLastJustify = "justify"

data TextTransform : Type lzero where
  transformNone capitalize uppercase lowercase fullWidth fullSizeKana mathAuto : TextTransform

renderTextTransform : TextTransform -> String
renderTextTransform transformNone = "none"
renderTextTransform capitalize = "capitalize"
renderTextTransform uppercase = "uppercase"
renderTextTransform lowercase = "lowercase"
renderTextTransform fullWidth = "full-width"
renderTextTransform fullSizeKana = "full-size-kana"
renderTextTransform mathAuto = "math-auto"

data WhiteSpace : Type lzero where
  whiteNormal nowrap pre preWrap preLine breakSpaces : WhiteSpace

renderWhiteSpace : WhiteSpace -> String
renderWhiteSpace whiteNormal = "normal"
renderWhiteSpace nowrap = "nowrap"
renderWhiteSpace pre = "pre"
renderWhiteSpace preWrap = "pre-wrap"
renderWhiteSpace preLine = "pre-line"
renderWhiteSpace breakSpaces = "break-spaces"

data WhiteSpaceCollapse : Type lzero where
  collapseWhiteSpace preserveWhiteSpace preserveBreaks preserveSpaces breakSpacesCollapse : WhiteSpaceCollapse

renderWhiteSpaceCollapse : WhiteSpaceCollapse -> String
renderWhiteSpaceCollapse collapseWhiteSpace = "collapse"
renderWhiteSpaceCollapse preserveWhiteSpace = "preserve"
renderWhiteSpaceCollapse preserveBreaks = "preserve-breaks"
renderWhiteSpaceCollapse preserveSpaces = "preserve-spaces"
renderWhiteSpaceCollapse breakSpacesCollapse = "break-spaces"

data TextWrapMode : Type lzero where
  textWrapWrap textWrapNowrap : TextWrapMode

renderTextWrapMode : TextWrapMode -> String
renderTextWrapMode textWrapWrap = "wrap"
renderTextWrapMode textWrapNowrap = "nowrap"

data TextWrapStyle : Type lzero where
  textWrapAuto textWrapBalance textWrapStable textWrapPretty : TextWrapStyle

renderTextWrapStyle : TextWrapStyle -> String
renderTextWrapStyle textWrapAuto = "auto"
renderTextWrapStyle textWrapBalance = "balance"
renderTextWrapStyle textWrapStable = "stable"
renderTextWrapStyle textWrapPretty = "pretty"

data TextWrap : Type lzero where
  textWrapModeOnly : TextWrapMode -> TextWrap
  textWrapStyleOnly : TextWrapStyle -> TextWrap
  textWrapModeStyle : TextWrapMode -> TextWrapStyle -> TextWrap

renderTextWrap : TextWrap -> String
renderTextWrap (textWrapModeOnly value) = renderTextWrapMode value
renderTextWrap (textWrapStyleOnly value) = renderTextWrapStyle value
renderTextWrap (textWrapModeStyle mode style) = renderTextWrapMode mode ++ " " ++ renderTextWrapStyle style

data OverflowWrap : Type lzero where
  overflowNormal breakWord anywhere : OverflowWrap

renderOverflowWrap : OverflowWrap -> String
renderOverflowWrap overflowNormal = "normal"
renderOverflowWrap breakWord = "break-word"
renderOverflowWrap anywhere = "anywhere"

data WordBreak : Type lzero where
  wordNormal breakAll keepAll autoPhrase breakWordDeprecated : WordBreak

renderWordBreak : WordBreak -> String
renderWordBreak wordNormal = "normal"
renderWordBreak breakAll = "break-all"
renderWordBreak keepAll = "keep-all"
renderWordBreak autoPhrase = "auto-phrase"
renderWordBreak breakWordDeprecated = "break-word"

data WordWrap : Type lzero where
  wordWrapNormal wordWrapBreakWord : WordWrap

renderWordWrap : WordWrap -> String
renderWordWrap wordWrapNormal = "normal"
renderWordWrap wordWrapBreakWord = "break-word"

data Hyphens : Type lzero where
  hyphensNone hyphensManual hyphensAuto : Hyphens

renderHyphens : Hyphens -> String
renderHyphens hyphensNone = "none"
renderHyphens hyphensManual = "manual"
renderHyphens hyphensAuto = "auto"

data LineBreak : Type lzero where
  lineBreakAuto lineBreakLoose lineBreakNormal lineBreakStrict lineBreakAnywhere : LineBreak

renderLineBreak : LineBreak -> String
renderLineBreak lineBreakAuto = "auto"
renderLineBreak lineBreakLoose = "loose"
renderLineBreak lineBreakNormal = "normal"
renderLineBreak lineBreakStrict = "strict"
renderLineBreak lineBreakAnywhere = "anywhere"

data TextJustify : Type lzero where
  justifyTextAuto justifyTextInterCharacter justifyTextInterWord justifyTextNone : TextJustify

renderTextJustify : TextJustify -> String
renderTextJustify justifyTextAuto = "auto"
renderTextJustify justifyTextInterCharacter = "inter-character"
renderTextJustify justifyTextInterWord = "inter-word"
renderTextJustify justifyTextNone = "none"

data NormalLength : Type lzero where
  normalLength : NormalLength
  specifiedLength : Length -> NormalLength

renderNormalLength : NormalLength -> String
renderNormalLength normalLength = "normal"
renderNormalLength (specifiedLength value) = renderLength value

data TabSize : Type lzero where
  tabInteger : Integer -> TabSize
  tabLength : Length -> TabSize

renderTabSize : TabSize -> String
renderTabSize (tabInteger value) = renderInteger value
renderTabSize (tabLength value) = renderLength value

data AutoStringToken : Type lzero where
  autoString : AutoStringToken
  chosenString : StringToken -> AutoStringToken

renderAutoStringToken : AutoStringToken -> String
renderAutoStringToken autoString = "auto"
renderAutoStringToken (chosenString value) = renderStringToken value

data TextDecorationLine : Type lzero where
  decorationLineNone decorationUnderline decorationOverline decorationLineThrough decorationBlink decorationSpellingError decorationGrammarError : TextDecorationLine

renderTextDecorationLine : TextDecorationLine -> String
renderTextDecorationLine decorationLineNone = "none"
renderTextDecorationLine decorationUnderline = "underline"
renderTextDecorationLine decorationOverline = "overline"
renderTextDecorationLine decorationLineThrough = "line-through"
renderTextDecorationLine decorationBlink = "blink"
renderTextDecorationLine decorationSpellingError = "spelling-error"
renderTextDecorationLine decorationGrammarError = "grammar-error"

data TextDecorationStyle : Type lzero where
  decorationSolid decorationDouble decorationDotted decorationDashed decorationWavy : TextDecorationStyle

renderTextDecorationStyle : TextDecorationStyle -> String
renderTextDecorationStyle decorationSolid = "solid"
renderTextDecorationStyle decorationDouble = "double"
renderTextDecorationStyle decorationDotted = "dotted"
renderTextDecorationStyle decorationDashed = "dashed"
renderTextDecorationStyle decorationWavy = "wavy"

data TextDecorationSkipInk : Type lzero where
  skipInkAuto skipInkAll skipInkNone : TextDecorationSkipInk

renderTextDecorationSkipInk : TextDecorationSkipInk -> String
renderTextDecorationSkipInk skipInkAuto = "auto"
renderTextDecorationSkipInk skipInkAll = "all"
renderTextDecorationSkipInk skipInkNone = "none"

data TextDecorationThickness : Type lzero where
  thicknessAuto thicknessFromFont : TextDecorationThickness
  thicknessLength : Length -> TextDecorationThickness
  thicknessPercentage : Percentage -> TextDecorationThickness

renderTextDecorationThickness : TextDecorationThickness -> String
renderTextDecorationThickness thicknessAuto = "auto"
renderTextDecorationThickness thicknessFromFont = "from-font"
renderTextDecorationThickness (thicknessLength value) = renderLength value
renderTextDecorationThickness (thicknessPercentage value) = renderPercentage value

data TextUnderlineOffset : Type lzero where
  underlineOffsetAuto : TextUnderlineOffset
  underlineOffsetLength : Length -> TextUnderlineOffset
  underlineOffsetPercentage : Percentage -> TextUnderlineOffset

renderTextUnderlineOffset : TextUnderlineOffset -> String
renderTextUnderlineOffset underlineOffsetAuto = "auto"
renderTextUnderlineOffset (underlineOffsetLength value) = renderLength value
renderTextUnderlineOffset (underlineOffsetPercentage value) = renderPercentage value

data UnderlineSide : Type lzero where
  underlineLeft underlineRight : UnderlineSide

renderUnderlineSide : UnderlineSide -> String
renderUnderlineSide underlineLeft = "left"
renderUnderlineSide underlineRight = "right"

data TextUnderlinePosition : Type lzero where
  underlinePositionAuto underlinePositionFromFont underlinePositionUnder : TextUnderlinePosition
  underlinePositionUnderSide : UnderlineSide -> TextUnderlinePosition

renderTextUnderlinePosition : TextUnderlinePosition -> String
renderTextUnderlinePosition underlinePositionAuto = "auto"
renderTextUnderlinePosition underlinePositionFromFont = "from-font"
renderTextUnderlinePosition underlinePositionUnder = "under"
renderTextUnderlinePosition (underlinePositionUnderSide side) = "under " ++ renderUnderlineSide side

data EmphasisFill : Type lzero where
  filled openMark : EmphasisFill

renderEmphasisFill : EmphasisFill -> String
renderEmphasisFill filled = "filled"
renderEmphasisFill openMark = "open"

data EmphasisShape : Type lzero where
  emphasisDot emphasisCircle emphasisDoubleCircle emphasisTriangle emphasisSesame : EmphasisShape

renderEmphasisShape : EmphasisShape -> String
renderEmphasisShape emphasisDot = "dot"
renderEmphasisShape emphasisCircle = "circle"
renderEmphasisShape emphasisDoubleCircle = "double-circle"
renderEmphasisShape emphasisTriangle = "triangle"
renderEmphasisShape emphasisSesame = "sesame"

data TextEmphasisStyle : Type lzero where
  emphasisStyleNone : TextEmphasisStyle
  emphasisStyleShape : EmphasisShape -> TextEmphasisStyle
  emphasisStyleFillShape : EmphasisFill -> EmphasisShape -> TextEmphasisStyle
  emphasisStyleString : StringToken -> TextEmphasisStyle

renderTextEmphasisStyle : TextEmphasisStyle -> String
renderTextEmphasisStyle emphasisStyleNone = "none"
renderTextEmphasisStyle (emphasisStyleShape shape) = renderEmphasisShape shape
renderTextEmphasisStyle (emphasisStyleFillShape fill shape) = renderEmphasisFill fill ++ " " ++ renderEmphasisShape shape
renderTextEmphasisStyle (emphasisStyleString value) = renderStringToken value

data EmphasisVertical : Type lzero where
  emphasisOver emphasisUnder : EmphasisVertical

renderEmphasisVertical : EmphasisVertical -> String
renderEmphasisVertical emphasisOver = "over"
renderEmphasisVertical emphasisUnder = "under"

data EmphasisHorizontal : Type lzero where
  emphasisRight emphasisLeft : EmphasisHorizontal

renderEmphasisHorizontal : EmphasisHorizontal -> String
renderEmphasisHorizontal emphasisRight = "right"
renderEmphasisHorizontal emphasisLeft = "left"

data TextEmphasisPosition : Type lzero where
  emphasisPositionAuto : TextEmphasisPosition
  emphasisPosition : EmphasisVertical -> TextEmphasisPosition
  emphasisPositionSide : EmphasisVertical -> EmphasisHorizontal -> TextEmphasisPosition

renderTextEmphasisPosition : TextEmphasisPosition -> String
renderTextEmphasisPosition emphasisPositionAuto = "auto"
renderTextEmphasisPosition (emphasisPosition vertical) = renderEmphasisVertical vertical
renderTextEmphasisPosition (emphasisPositionSide vertical horizontal) =
  renderEmphasisVertical vertical ++ " " ++ renderEmphasisHorizontal horizontal

data TextOverflow : Type lzero where
  textOverflowClip textOverflowEllipsis : TextOverflow
  textOverflowString : StringToken -> TextOverflow

renderTextOverflow : TextOverflow -> String
renderTextOverflow textOverflowClip = "clip"
renderTextOverflow textOverflowEllipsis = "ellipsis"
renderTextOverflow (textOverflowString value) = renderStringToken value

data FlexDirection : Type lzero where
  row rowReverse column columnReverse : FlexDirection

renderFlexDirection : FlexDirection -> String
renderFlexDirection row = "row"
renderFlexDirection rowReverse = "row-reverse"
renderFlexDirection column = "column"
renderFlexDirection columnReverse = "column-reverse"

data FlexWrap : Type lzero where
  nowrapFlex wrap wrapReverse : FlexWrap

renderFlexWrap : FlexWrap -> String
renderFlexWrap nowrapFlex = "nowrap"
renderFlexWrap wrap = "wrap"
renderFlexWrap wrapReverse = "wrap-reverse"

data JustifyContent : Type lzero where
  justifyNormal justifyStart justifyEnd justifyCenter justifyFlexStart justifyFlexEnd justifySpaceBetween justifySpaceAround justifySpaceEvenly justifyStretch : JustifyContent

renderJustifyContent : JustifyContent -> String
renderJustifyContent justifyNormal = "normal"
renderJustifyContent justifyStart = "start"
renderJustifyContent justifyEnd = "end"
renderJustifyContent justifyCenter = "center"
renderJustifyContent justifyFlexStart = "flex-start"
renderJustifyContent justifyFlexEnd = "flex-end"
renderJustifyContent justifySpaceBetween = "space-between"
renderJustifyContent justifySpaceAround = "space-around"
renderJustifyContent justifySpaceEvenly = "space-evenly"
renderJustifyContent justifyStretch = "stretch"

data AlignContent : Type lzero where
  alignContentNormal alignContentCenter alignContentStart alignContentEnd alignContentFlexStart alignContentFlexEnd alignContentSpaceBetween alignContentSpaceAround alignContentSpaceEvenly alignContentStretch alignContentBaseline : AlignContent

renderAlignContent : AlignContent -> String
renderAlignContent alignContentNormal = "normal"
renderAlignContent alignContentCenter = "center"
renderAlignContent alignContentStart = "start"
renderAlignContent alignContentEnd = "end"
renderAlignContent alignContentFlexStart = "flex-start"
renderAlignContent alignContentFlexEnd = "flex-end"
renderAlignContent alignContentSpaceBetween = "space-between"
renderAlignContent alignContentSpaceAround = "space-around"
renderAlignContent alignContentSpaceEvenly = "space-evenly"
renderAlignContent alignContentStretch = "stretch"
renderAlignContent alignContentBaseline = "baseline"

data AlignItems : Type lzero where
  alignNormal alignStretch alignCenter alignStart alignEnd alignFlexStart alignFlexEnd alignBaseline alignAnchorCenter : AlignItems

renderAlignItems : AlignItems -> String
renderAlignItems alignNormal = "normal"
renderAlignItems alignStretch = "stretch"
renderAlignItems alignCenter = "center"
renderAlignItems alignStart = "start"
renderAlignItems alignEnd = "end"
renderAlignItems alignFlexStart = "flex-start"
renderAlignItems alignFlexEnd = "flex-end"
renderAlignItems alignBaseline = "baseline"
renderAlignItems alignAnchorCenter = "anchor-center"

data AlignSelf : Type lzero where
  alignSelfAuto : AlignSelf
  alignSelfItems : AlignItems -> AlignSelf

renderAlignSelf : AlignSelf -> String
renderAlignSelf alignSelfAuto = "auto"
renderAlignSelf (alignSelfItems value) = renderAlignItems value

data JustifyItems : Type lzero where
  justifyItemsNormal justifyItemsStretch justifyItemsCenter justifyItemsStart justifyItemsEnd justifyItemsLeft justifyItemsRight justifyItemsBaseline justifyItemsLegacy justifyItemsAnchorCenter : JustifyItems

renderJustifyItems : JustifyItems -> String
renderJustifyItems justifyItemsNormal = "normal"
renderJustifyItems justifyItemsStretch = "stretch"
renderJustifyItems justifyItemsCenter = "center"
renderJustifyItems justifyItemsStart = "start"
renderJustifyItems justifyItemsEnd = "end"
renderJustifyItems justifyItemsLeft = "left"
renderJustifyItems justifyItemsRight = "right"
renderJustifyItems justifyItemsBaseline = "baseline"
renderJustifyItems justifyItemsLegacy = "legacy"
renderJustifyItems justifyItemsAnchorCenter = "anchor-center"

data JustifySelf : Type lzero where
  justifySelfAuto : JustifySelf
  justifySelfItems : JustifyItems -> JustifySelf

renderJustifySelf : JustifySelf -> String
renderJustifySelf justifySelfAuto = "auto"
renderJustifySelf (justifySelfItems value) = renderJustifyItems value

data FlexFlow : Type lzero where
  flexFlowDirection : FlexDirection -> FlexFlow
  flexFlowWrap : FlexWrap -> FlexFlow
  flexFlowBoth : FlexDirection -> FlexWrap -> FlexFlow

renderFlexFlow : FlexFlow -> String
renderFlexFlow (flexFlowDirection direction) = renderFlexDirection direction
renderFlexFlow (flexFlowWrap wrapValue) = renderFlexWrap wrapValue
renderFlexFlow (flexFlowBoth direction wrapValue) =
  renderFlexDirection direction ++ " " ++ renderFlexWrap wrapValue

data FlexBasis : Type lzero where
  basisContent : FlexBasis
  basisSize : PreferredSize -> FlexBasis

renderFlexBasis : FlexBasis -> String
renderFlexBasis basisContent = "content"
renderFlexBasis (basisSize value) = renderPreferredSize value

data GridAutoFlow : Type lzero where
  gridFlowRow gridFlowColumn gridFlowDense gridFlowRowDense gridFlowColumnDense : GridAutoFlow

renderGridAutoFlow : GridAutoFlow -> String
renderGridAutoFlow gridFlowRow = "row"
renderGridAutoFlow gridFlowColumn = "column"
renderGridAutoFlow gridFlowDense = "dense"
renderGridAutoFlow gridFlowRowDense = "row dense"
renderGridAutoFlow gridFlowColumnDense = "column dense"

data CssDirection : Type lzero where
  dirLtr dirRtl : CssDirection

renderCssDirection : CssDirection -> String
renderCssDirection dirLtr = "ltr"
renderCssDirection dirRtl = "rtl"

data WritingMode : Type lzero where
  horizontalTb verticalRl verticalLr sidewaysRl sidewaysLr : WritingMode

renderWritingMode : WritingMode -> String
renderWritingMode horizontalTb = "horizontal-tb"
renderWritingMode verticalRl = "vertical-rl"
renderWritingMode verticalLr = "vertical-lr"
renderWritingMode sidewaysRl = "sideways-rl"
renderWritingMode sidewaysLr = "sideways-lr"

data TextOrientation : Type lzero where
  orientationMixed orientationUpright orientationSideways : TextOrientation

renderTextOrientation : TextOrientation -> String
renderTextOrientation orientationMixed = "mixed"
renderTextOrientation orientationUpright = "upright"
renderTextOrientation orientationSideways = "sideways"

data UnicodeBidi : Type lzero where
  unicodeNormal unicodeEmbed unicodeIsolate unicodeBidiOverride unicodeIsolateOverride unicodePlaintext : UnicodeBidi

renderUnicodeBidi : UnicodeBidi -> String
renderUnicodeBidi unicodeNormal = "normal"
renderUnicodeBidi unicodeEmbed = "embed"
renderUnicodeBidi unicodeIsolate = "isolate"
renderUnicodeBidi unicodeBidiOverride = "bidi-override"
renderUnicodeBidi unicodeIsolateOverride = "isolate-override"
renderUnicodeBidi unicodePlaintext = "plaintext"

data TextCombineUpright : Type lzero where
  combineNone combineAll combineDigits : TextCombineUpright
  combineDigitsLimit : Integer -> TextCombineUpright

renderTextCombineUpright : TextCombineUpright -> String
renderTextCombineUpright combineNone = "none"
renderTextCombineUpright combineAll = "all"
renderTextCombineUpright combineDigits = "digits"
renderTextCombineUpright (combineDigitsLimit value) = "digits " ++ renderInteger value

record TrackList : Type lzero where
  constructor trackList
  field rawTrackList : String

open TrackList public

renderTrackList : TrackList -> String
renderTrackList (trackList value) = value

record GridLine : Type lzero where
  constructor gridLine
  field rawGridLine : String

open GridLine public

renderGridLine : GridLine -> String
renderGridLine (gridLine value) = value

data PropertyValue : PropertyName -> Type lzero where
  allValue : All -> PropertyValue allProp
  colorValue : Color -> PropertyValue colorProp
  backgroundColorValue : Color -> PropertyValue backgroundColorProp
  backgroundAttachmentValue : CommaList BackgroundAttachment -> PropertyValue backgroundAttachmentProp
  backgroundClipValue : CommaList BackgroundClip -> PropertyValue backgroundClipProp
  backgroundOriginValue : CommaList VisualBox -> PropertyValue backgroundOriginProp
  backgroundRepeatValue : CommaList BackgroundRepeat -> PropertyValue backgroundRepeatProp
  backgroundSizeValue : CommaList BackgroundSize -> PropertyValue backgroundSizeProp
  backgroundBlendModeValue : BlendModeList -> PropertyValue backgroundBlendModeProp
  displayValue : Display -> PropertyValue displayProp
  visibilityValue : Visibility -> PropertyValue visibilityProp
  opacityValue : Number -> PropertyValue opacityProp
  orderValue : Integer -> PropertyValue orderProp
  readingFlowValue : ReadingFlow -> PropertyValue readingFlowProp
  readingOrderValue : Integer -> PropertyValue readingOrderProp
  colorSchemeValue : ColorScheme -> PropertyValue colorSchemeProp
  dynamicRangeLimitValue : DynamicRangeLimit -> PropertyValue dynamicRangeLimitProp
  forcedColorAdjustValue : ForcedColorAdjust -> PropertyValue forcedColorAdjustProp
  printColorAdjustValue : PrintColorAdjust -> PropertyValue printColorAdjustProp
  positionValue : Position -> PropertyValue positionProp
  topValue : InsetOffset -> PropertyValue topProp
  rightValue : InsetOffset -> PropertyValue rightProp
  bottomValue : InsetOffset -> PropertyValue bottomProp
  leftValue : InsetOffset -> PropertyValue leftProp
  insetValue : BoxSides InsetOffset -> PropertyValue insetProp
  zIndexValue : ZIndex -> PropertyValue zIndexProp
  floatValue : Float -> PropertyValue floatProp
  clearValue : Clear -> PropertyValue clearProp
  widthValue : PreferredSize -> PropertyValue widthProp
  heightValue : PreferredSize -> PropertyValue heightProp
  minWidthValue : PreferredSize -> PropertyValue minWidthProp
  maxWidthValue : MaxSize -> PropertyValue maxWidthProp
  minHeightValue : PreferredSize -> PropertyValue minHeightProp
  maxHeightValue : MaxSize -> PropertyValue maxHeightProp
  boxSizingValue : BoxSizing -> PropertyValue boxSizingProp
  aspectRatioValue : AspectRatio -> PropertyValue aspectRatioProp
  marginValue : BoxSides MarginSize -> PropertyValue marginProp
  marginTopValue : MarginSize -> PropertyValue marginTopProp
  marginRightValue : MarginSize -> PropertyValue marginRightProp
  marginBottomValue : MarginSize -> PropertyValue marginBottomProp
  marginLeftValue : MarginSize -> PropertyValue marginLeftProp
  paddingValue : BoxSides LengthPercentage -> PropertyValue paddingProp
  paddingTopValue : LengthPercentage -> PropertyValue paddingTopProp
  paddingRightValue : LengthPercentage -> PropertyValue paddingRightProp
  paddingBottomValue : LengthPercentage -> PropertyValue paddingBottomProp
  paddingLeftValue : LengthPercentage -> PropertyValue paddingLeftProp
  borderWidthValue : BoxSides BorderWidth -> PropertyValue borderWidthProp
  borderTopWidthValue : BorderWidth -> PropertyValue borderTopWidthProp
  borderRightWidthValue : BorderWidth -> PropertyValue borderRightWidthProp
  borderBottomWidthValue : BorderWidth -> PropertyValue borderBottomWidthProp
  borderLeftWidthValue : BorderWidth -> PropertyValue borderLeftWidthProp
  borderStyleValue : BoxSides BorderStyle -> PropertyValue borderStyleProp
  borderTopStyleValue : BorderStyle -> PropertyValue borderTopStyleProp
  borderRightStyleValue : BorderStyle -> PropertyValue borderRightStyleProp
  borderBottomStyleValue : BorderStyle -> PropertyValue borderBottomStyleProp
  borderLeftStyleValue : BorderStyle -> PropertyValue borderLeftStyleProp
  borderColorValue : BoxSides Color -> PropertyValue borderColorProp
  borderTopColorValue : Color -> PropertyValue borderTopColorProp
  borderRightColorValue : Color -> PropertyValue borderRightColorProp
  borderBottomColorValue : Color -> PropertyValue borderBottomColorProp
  borderLeftColorValue : Color -> PropertyValue borderLeftColorProp
  borderRadiusValue : BorderRadius -> PropertyValue borderRadiusProp
  borderTopLeftRadiusValue : OneOrTwo LengthPercentage -> PropertyValue borderTopLeftRadiusProp
  borderTopRightRadiusValue : OneOrTwo LengthPercentage -> PropertyValue borderTopRightRadiusProp
  borderBottomRightRadiusValue : OneOrTwo LengthPercentage -> PropertyValue borderBottomRightRadiusProp
  borderBottomLeftRadiusValue : OneOrTwo LengthPercentage -> PropertyValue borderBottomLeftRadiusProp
  boxShadowValue : RawValue -> PropertyValue boxShadowProp
  borderCollapseValue : BorderCollapse -> PropertyValue borderCollapseProp
  borderSpacingValue : BorderSpacing -> PropertyValue borderSpacingProp
  captionSideValue : CaptionSide -> PropertyValue captionSideProp
  emptyCellsValue : EmptyCells -> PropertyValue emptyCellsProp
  tableLayoutValue : TableLayout -> PropertyValue tableLayoutProp
  breakAfterValue : BreakAfter -> PropertyValue breakAfterProp
  breakBeforeValue : BreakBefore -> PropertyValue breakBeforeProp
  breakInsideValue : BreakInside -> PropertyValue breakInsideProp
  boxDecorationBreakValue : BoxDecorationBreak -> PropertyValue boxDecorationBreakProp
  orphansValue : Orphans -> PropertyValue orphansProp
  widowsValue : Widows -> PropertyValue widowsProp
  accentColorValue : AutoColor -> PropertyValue accentColorProp
  appearanceValue : Appearance -> PropertyValue appearanceProp
  caretAnimationValue : CaretAnimation -> PropertyValue caretAnimationProp
  caretColorValue : AutoColor -> PropertyValue caretColorProp
  caretShapeValue : CaretShape -> PropertyValue caretShapeProp
  interactivityValue : Interactivity -> PropertyValue interactivityProp
  outlineColorValue : AutoColor -> PropertyValue outlineColorProp
  outlineOffsetValue : Length -> PropertyValue outlineOffsetProp
  outlineStyleValue : OutlineStyle -> PropertyValue outlineStyleProp
  outlineWidthValue : BorderWidth -> PropertyValue outlineWidthProp
  pointerEventsValue : PointerEvents -> PropertyValue pointerEventsProp
  resizeValue : Resize -> PropertyValue resizeProp
  userSelectValue : UserSelect -> PropertyValue userSelectProp
  overflowValue : OneOrTwo OverflowKeyword -> PropertyValue overflowProp
  overflowBlockValue : OverflowKeyword -> PropertyValue overflowBlockProp
  overflowInlineValue : OverflowKeyword -> PropertyValue overflowInlineProp
  overflowXValue : OverflowKeyword -> PropertyValue overflowXProp
  overflowYValue : OverflowKeyword -> PropertyValue overflowYProp
  lineClampValue : LineClamp -> PropertyValue lineClampProp
  scrollBehaviorValue : ScrollBehavior -> PropertyValue scrollBehaviorProp
  scrollMarkerGroupValue : ScrollMarkerGroup -> PropertyValue scrollMarkerGroupProp
  scrollTargetGroupValue : ScrollTargetGroup -> PropertyValue scrollTargetGroupProp
  scrollbarGutterValue : ScrollbarGutter -> PropertyValue scrollbarGutterProp
  textOverflowValue : OneOrTwo TextOverflow -> PropertyValue textOverflowProp
  overscrollBehaviorValue : OverscrollBehavior -> PropertyValue overscrollBehaviorProp
  overscrollBehaviorBlockValue : OverscrollBehaviorBlock -> PropertyValue overscrollBehaviorBlockProp
  overscrollBehaviorInlineValue : OverscrollBehaviorInline -> PropertyValue overscrollBehaviorInlineProp
  overscrollBehaviorXValue : OverscrollBehaviorX -> PropertyValue overscrollBehaviorXProp
  overscrollBehaviorYValue : OverscrollBehaviorY -> PropertyValue overscrollBehaviorYProp
  scrollSnapAlignValue : ScrollSnapAlign -> PropertyValue scrollSnapAlignProp
  scrollSnapStopValue : ScrollSnapStop -> PropertyValue scrollSnapStopProp
  scrollSnapTypeValue : ScrollSnapType -> PropertyValue scrollSnapTypeProp
  scrollPaddingValue : ScrollPadding -> PropertyValue scrollPaddingProp
  scrollPaddingBlockValue : ScrollPaddingBlock -> PropertyValue scrollPaddingBlockProp
  scrollPaddingBlockStartValue : ScrollPaddingBlockStart -> PropertyValue scrollPaddingBlockStartProp
  scrollPaddingBlockEndValue : ScrollPaddingBlockEnd -> PropertyValue scrollPaddingBlockEndProp
  scrollPaddingInlineValue : ScrollPaddingInline -> PropertyValue scrollPaddingInlineProp
  scrollPaddingInlineStartValue : ScrollPaddingInlineStart -> PropertyValue scrollPaddingInlineStartProp
  scrollPaddingInlineEndValue : ScrollPaddingInlineEnd -> PropertyValue scrollPaddingInlineEndProp
  scrollPaddingTopValue : ScrollPaddingTop -> PropertyValue scrollPaddingTopProp
  scrollPaddingRightValue : ScrollPaddingRight -> PropertyValue scrollPaddingRightProp
  scrollPaddingBottomValue : ScrollPaddingBottom -> PropertyValue scrollPaddingBottomProp
  scrollPaddingLeftValue : ScrollPaddingLeft -> PropertyValue scrollPaddingLeftProp
  scrollMarginValue : ScrollMargin -> PropertyValue scrollMarginProp
  scrollMarginBlockValue : ScrollMarginBlock -> PropertyValue scrollMarginBlockProp
  scrollMarginBlockStartValue : ScrollMarginBlockStart -> PropertyValue scrollMarginBlockStartProp
  scrollMarginBlockEndValue : ScrollMarginBlockEnd -> PropertyValue scrollMarginBlockEndProp
  scrollMarginInlineValue : ScrollMarginInline -> PropertyValue scrollMarginInlineProp
  scrollMarginInlineStartValue : ScrollMarginInlineStart -> PropertyValue scrollMarginInlineStartProp
  scrollMarginInlineEndValue : ScrollMarginInlineEnd -> PropertyValue scrollMarginInlineEndProp
  scrollMarginTopValue : ScrollMarginTop -> PropertyValue scrollMarginTopProp
  scrollMarginRightValue : ScrollMarginRight -> PropertyValue scrollMarginRightProp
  scrollMarginBottomValue : ScrollMarginBottom -> PropertyValue scrollMarginBottomProp
  scrollMarginLeftValue : ScrollMarginLeft -> PropertyValue scrollMarginLeftProp
  scrollTimelineAxisValue : ScrollTimelineAxis -> PropertyValue scrollTimelineAxisProp
  scrollTimelineNameValue : ScrollTimelineName -> PropertyValue scrollTimelineNameProp
  scrollbarColorValue : ScrollbarColor -> PropertyValue scrollbarColorProp
  scrollbarWidthValue : ScrollbarWidth -> PropertyValue scrollbarWidthProp
  fontSizeValue : LengthPercentage -> PropertyValue fontSizeProp
  fontStyleValue : FontStyle -> PropertyValue fontStyleProp
  fontWeightValue : FontWeight -> PropertyValue fontWeightProp
  fontKerningValue : FontKerning -> PropertyValue fontKerningProp
  fontLanguageOverrideValue : FontLanguageOverride -> PropertyValue fontLanguageOverrideProp
  fontOpticalSizingValue : AutoNone -> PropertyValue fontOpticalSizingProp
  fontSynthesisSmallCapsValue : AutoNone -> PropertyValue fontSynthesisSmallCapsProp
  fontSynthesisStyleValue : AutoNone -> PropertyValue fontSynthesisStyleProp
  fontSynthesisWeightValue : AutoNone -> PropertyValue fontSynthesisWeightProp
  fontVariantCapsValue : FontVariantCaps -> PropertyValue fontVariantCapsProp
  fontVariantEmojiValue : FontVariantEmoji -> PropertyValue fontVariantEmojiProp
  fontVariantPositionValue : FontVariantPosition -> PropertyValue fontVariantPositionProp
  lineHeightValue : LineHeight -> PropertyValue lineHeightProp
  textAlignValue : TextAlign -> PropertyValue textAlignProp
  textAlignLastValue : TextAlignLast -> PropertyValue textAlignLastProp
  textTransformValue : TextTransform -> PropertyValue textTransformProp
  whiteSpaceValue : WhiteSpace -> PropertyValue whiteSpaceProp
  whiteSpaceCollapseValue : WhiteSpaceCollapse -> PropertyValue whiteSpaceCollapseProp
  textWrapValue : TextWrap -> PropertyValue textWrapProp
  textWrapModeValue : TextWrapMode -> PropertyValue textWrapModeProp
  textWrapStyleValue : TextWrapStyle -> PropertyValue textWrapStyleProp
  overflowWrapValue : OverflowWrap -> PropertyValue overflowWrapProp
  wordBreakValue : WordBreak -> PropertyValue wordBreakProp
  wordWrapValue : WordWrap -> PropertyValue wordWrapProp
  hyphensValue : Hyphens -> PropertyValue hyphensProp
  lineBreakValue : LineBreak -> PropertyValue lineBreakProp
  textJustifyValue : TextJustify -> PropertyValue textJustifyProp
  letterSpacingValue : NormalLength -> PropertyValue letterSpacingProp
  wordSpacingValue : NormalLength -> PropertyValue wordSpacingProp
  tabSizeValue : TabSize -> PropertyValue tabSizeProp
  hyphenateCharacterValue : AutoStringToken -> PropertyValue hyphenateCharacterProp
  contentValue : Content -> PropertyValue contentProp
  quotesValue : Quotes -> PropertyValue quotesProp
  textDecorationColorValue : Color -> PropertyValue textDecorationColorProp
  textDecorationLineValue : TextDecorationLine -> PropertyValue textDecorationLineProp
  textDecorationSkipInkValue : TextDecorationSkipInk -> PropertyValue textDecorationSkipInkProp
  textDecorationStyleValue : TextDecorationStyle -> PropertyValue textDecorationStyleProp
  textDecorationThicknessValue : TextDecorationThickness -> PropertyValue textDecorationThicknessProp
  textEmphasisColorValue : Color -> PropertyValue textEmphasisColorProp
  textEmphasisPositionValue : TextEmphasisPosition -> PropertyValue textEmphasisPositionProp
  textEmphasisStyleValue : TextEmphasisStyle -> PropertyValue textEmphasisStyleProp
  textUnderlineOffsetValue : TextUnderlineOffset -> PropertyValue textUnderlineOffsetProp
  textUnderlinePositionValue : TextUnderlinePosition -> PropertyValue textUnderlinePositionProp
  listStylePositionValue : ListStylePosition -> PropertyValue listStylePositionProp
  listStyleTypeValue : ListStyleType -> PropertyValue listStyleTypeProp
  listStyleImageValue : ListStyleImage -> PropertyValue listStyleImageProp
  listStyleValue : ListStyle -> PropertyValue listStyleProp
  counterResetValue : CounterReset -> PropertyValue counterResetProp
  counterIncrementValue : CounterIncrement -> PropertyValue counterIncrementProp
  counterSetValue : CounterSet -> PropertyValue counterSetProp
  flexDirectionValue : FlexDirection -> PropertyValue flexDirectionProp
  flexWrapValue : FlexWrap -> PropertyValue flexWrapProp
  flexGrowValue : Number -> PropertyValue flexGrowProp
  flexShrinkValue : Number -> PropertyValue flexShrinkProp
  flexBasisValue : FlexBasis -> PropertyValue flexBasisProp
  justifyContentValue : JustifyContent -> PropertyValue justifyContentProp
  alignItemsValue : AlignItems -> PropertyValue alignItemsProp
  gapValue : OneOrTwo GapValue -> PropertyValue gapProp
  rowGapValue : GapValue -> PropertyValue rowGapProp
  columnGapValue : GapValue -> PropertyValue columnGapProp
  alignContentValue : AlignContent -> PropertyValue alignContentProp
  alignSelfValue : AlignSelf -> PropertyValue alignSelfProp
  justifyItemsValue : JustifyItems -> PropertyValue justifyItemsProp
  justifySelfValue : JustifySelf -> PropertyValue justifySelfProp
  flexFlowValue : FlexFlow -> PropertyValue flexFlowProp
  columnCountValue : ColumnCount -> PropertyValue columnCountProp
  columnFillValue : ColumnFill -> PropertyValue columnFillProp
  columnRuleColorValue : ColumnRuleColor -> PropertyValue columnRuleColorProp
  columnRuleStyleValue : ColumnRuleStyle -> PropertyValue columnRuleStyleProp
  columnRuleWidthValue : ColumnRuleWidth -> PropertyValue columnRuleWidthProp
  columnRuleValue : ColumnRule -> PropertyValue columnRuleProp
  columnSpanValue : ColumnSpan -> PropertyValue columnSpanProp
  columnWidthValue : ColumnWidth -> PropertyValue columnWidthProp
  columnHeightValue : ColumnHeight -> PropertyValue columnHeightProp
  columnWrapValue : ColumnWrap -> PropertyValue columnWrapProp
  columnsValue : Columns -> PropertyValue columnsProp
  gridTemplateValue : RawValue -> PropertyValue gridTemplateProp
  gridTemplateAreasValue : RawValue -> PropertyValue gridTemplateAreasProp
  gridTemplateColumnsValue : TrackList -> PropertyValue gridTemplateColumnsProp
  gridTemplateRowsValue : TrackList -> PropertyValue gridTemplateRowsProp
  gridAutoColumnsValue : TrackList -> PropertyValue gridAutoColumnsProp
  gridAutoRowsValue : TrackList -> PropertyValue gridAutoRowsProp
  gridAutoFlowValue : GridAutoFlow -> PropertyValue gridAutoFlowProp
  gridColumnValue : GridLine -> PropertyValue gridColumnProp
  gridColumnStartValue : GridLine -> PropertyValue gridColumnStartProp
  gridColumnEndValue : GridLine -> PropertyValue gridColumnEndProp
  gridRowValue : GridLine -> PropertyValue gridRowProp
  gridRowStartValue : GridLine -> PropertyValue gridRowStartProp
  gridRowEndValue : GridLine -> PropertyValue gridRowEndProp
  gridAreaValue : GridLine -> PropertyValue gridAreaProp
  imageOrientationValue : ImageOrientation -> PropertyValue imageOrientationProp
  imageRenderingValue : ImageRendering -> PropertyValue imageRenderingProp
  objectFitValue : ObjectFit -> PropertyValue objectFitProp
  objectPositionValue : ObjectPosition -> PropertyValue objectPositionProp
  containValue : Contain -> PropertyValue containProp
  contentVisibilityValue : ContentVisibility -> PropertyValue contentVisibilityProp
  containerNameValue : ContainerName -> PropertyValue containerNameProp
  containerTypeValue : ContainerType -> PropertyValue containerTypeProp
  containerValue : Container -> PropertyValue containerProp
  rubyAlignValue : RubyAlign -> PropertyValue rubyAlignProp
  rubyOverhangValue : RubyOverhang -> PropertyValue rubyOverhangProp
  rubyPositionValue : RubyPosition -> PropertyValue rubyPositionProp
  alignmentBaselineValue : AlignmentBaseline -> PropertyValue alignmentBaselineProp
  baselineShiftValue : BaselineShift -> PropertyValue baselineShiftProp
  baselineSourceValue : BaselineSource -> PropertyValue baselineSourceProp
  dominantBaselineValue : DominantBaseline -> PropertyValue dominantBaselineProp
  initialLetterValue : InitialLetter -> PropertyValue initialLetterProp
  textBoxValue : TextBox -> PropertyValue textBoxProp
  textBoxEdgeValue : TextBoxEdge -> PropertyValue textBoxEdgeProp
  textBoxTrimValue : TextBoxTrim -> PropertyValue textBoxTrimProp
  verticalAlignValue : VerticalAlign -> PropertyValue verticalAlignProp
  directionValue : CssDirection -> PropertyValue directionProp
  writingModeValue : WritingMode -> PropertyValue writingModeProp
  textOrientationValue : TextOrientation -> PropertyValue textOrientationProp
  unicodeBidiValue : UnicodeBidi -> PropertyValue unicodeBidiProp
  textCombineUprightValue : TextCombineUpright -> PropertyValue textCombineUprightProp
  blockSizeValue : PreferredSize -> PropertyValue blockSizeProp
  inlineSizeValue : PreferredSize -> PropertyValue inlineSizeProp
  minBlockSizeValue : PreferredSize -> PropertyValue minBlockSizeProp
  minInlineSizeValue : PreferredSize -> PropertyValue minInlineSizeProp
  maxBlockSizeValue : MaxSize -> PropertyValue maxBlockSizeProp
  maxInlineSizeValue : MaxSize -> PropertyValue maxInlineSizeProp
  insetBlockValue : OneOrTwo InsetOffset -> PropertyValue insetBlockProp
  insetBlockStartValue : InsetOffset -> PropertyValue insetBlockStartProp
  insetBlockEndValue : InsetOffset -> PropertyValue insetBlockEndProp
  insetInlineValue : OneOrTwo InsetOffset -> PropertyValue insetInlineProp
  insetInlineStartValue : InsetOffset -> PropertyValue insetInlineStartProp
  insetInlineEndValue : InsetOffset -> PropertyValue insetInlineEndProp
  marginBlockValue : OneOrTwo MarginSize -> PropertyValue marginBlockProp
  marginBlockStartValue : MarginSize -> PropertyValue marginBlockStartProp
  marginBlockEndValue : MarginSize -> PropertyValue marginBlockEndProp
  marginInlineValue : OneOrTwo MarginSize -> PropertyValue marginInlineProp
  marginInlineStartValue : MarginSize -> PropertyValue marginInlineStartProp
  marginInlineEndValue : MarginSize -> PropertyValue marginInlineEndProp
  paddingBlockValue : OneOrTwo LengthPercentage -> PropertyValue paddingBlockProp
  paddingBlockStartValue : LengthPercentage -> PropertyValue paddingBlockStartProp
  paddingBlockEndValue : LengthPercentage -> PropertyValue paddingBlockEndProp
  paddingInlineValue : OneOrTwo LengthPercentage -> PropertyValue paddingInlineProp
  paddingInlineStartValue : LengthPercentage -> PropertyValue paddingInlineStartProp
  paddingInlineEndValue : LengthPercentage -> PropertyValue paddingInlineEndProp
  borderBlockColorValue : OneOrTwo Color -> PropertyValue borderBlockColorProp
  borderBlockStartColorValue : Color -> PropertyValue borderBlockStartColorProp
  borderBlockEndColorValue : Color -> PropertyValue borderBlockEndColorProp
  borderInlineColorValue : OneOrTwo Color -> PropertyValue borderInlineColorProp
  borderInlineStartColorValue : Color -> PropertyValue borderInlineStartColorProp
  borderInlineEndColorValue : Color -> PropertyValue borderInlineEndColorProp
  borderBlockStyleValue : OneOrTwo BorderStyle -> PropertyValue borderBlockStyleProp
  borderBlockStartStyleValue : BorderStyle -> PropertyValue borderBlockStartStyleProp
  borderBlockEndStyleValue : BorderStyle -> PropertyValue borderBlockEndStyleProp
  borderInlineStyleValue : OneOrTwo BorderStyle -> PropertyValue borderInlineStyleProp
  borderInlineStartStyleValue : BorderStyle -> PropertyValue borderInlineStartStyleProp
  borderInlineEndStyleValue : BorderStyle -> PropertyValue borderInlineEndStyleProp
  borderBlockWidthValue : OneOrTwo BorderWidth -> PropertyValue borderBlockWidthProp
  borderBlockStartWidthValue : BorderWidth -> PropertyValue borderBlockStartWidthProp
  borderBlockEndWidthValue : BorderWidth -> PropertyValue borderBlockEndWidthProp
  borderInlineWidthValue : OneOrTwo BorderWidth -> PropertyValue borderInlineWidthProp
  borderInlineStartWidthValue : BorderWidth -> PropertyValue borderInlineStartWidthProp
  borderInlineEndWidthValue : BorderWidth -> PropertyValue borderInlineEndWidthProp
  borderStartStartRadiusValue : OneOrTwo LengthPercentage -> PropertyValue borderStartStartRadiusProp
  borderStartEndRadiusValue : OneOrTwo LengthPercentage -> PropertyValue borderStartEndRadiusProp
  borderEndStartRadiusValue : OneOrTwo LengthPercentage -> PropertyValue borderEndStartRadiusProp
  borderEndEndRadiusValue : OneOrTwo LengthPercentage -> PropertyValue borderEndEndRadiusProp
  backfaceVisibilityValue : BackfaceVisibility -> PropertyValue backfaceVisibilityProp
  perspectiveValue : Perspective -> PropertyValue perspectiveProp
  perspectiveOriginValue : PerspectiveOrigin -> PropertyValue perspectiveOriginProp
  rotateValue : Rotate -> PropertyValue rotateProp
  scaleValue : Scale -> PropertyValue scaleProp
  transformValue : Transform -> PropertyValue transformProp
  transformBoxValue : TransformBox -> PropertyValue transformBoxProp
  transformOriginValue : TransformOrigin -> PropertyValue transformOriginProp
  transformStyleValue : TransformStyle -> PropertyValue transformStyleProp
  translateValue : Translate -> PropertyValue translateProp
  animationValue : RawValue -> PropertyValue animationProp
  animationCompositionValue : AnimationCompositionList -> PropertyValue animationCompositionProp
  animationDelayValue : TimeList -> PropertyValue animationDelayProp
  animationDirectionValue : AnimationDirectionList -> PropertyValue animationDirectionProp
  animationDurationValue : RawValue -> PropertyValue animationDurationProp
  animationFillModeValue : AnimationFillModeList -> PropertyValue animationFillModeProp
  animationIterationCountValue : AnimationIterationCountList -> PropertyValue animationIterationCountProp
  animationNameValue : AnimationNameList -> PropertyValue animationNameProp
  animationPlayStateValue : AnimationPlayStateList -> PropertyValue animationPlayStateProp
  animationTimingFunctionValue : EasingFunctionList -> PropertyValue animationTimingFunctionProp
  transitionValue : RawValue -> PropertyValue transitionProp
  transitionBehaviorValue : TransitionBehaviorList -> PropertyValue transitionBehaviorProp
  transitionDelayValue : TimeList -> PropertyValue transitionDelayProp
  transitionDurationValue : TimeList -> PropertyValue transitionDurationProp
  transitionPropertyValue : RawValue -> PropertyValue transitionPropertyProp
  transitionTimingFunctionValue : EasingFunctionList -> PropertyValue transitionTimingFunctionProp
  clipPathValue : ClipPath -> PropertyValue clipPathProp
  maskClipValue : MaskClip -> PropertyValue maskClipProp
  maskCompositeValue : MaskComposite -> PropertyValue maskCompositeProp
  maskImageValue : MaskImage -> PropertyValue maskImageProp
  maskModeValue : MaskMode -> PropertyValue maskModeProp
  maskOriginValue : MaskOrigin -> PropertyValue maskOriginProp
  maskPositionValue : MaskPosition -> PropertyValue maskPositionProp
  maskRepeatValue : MaskRepeat -> PropertyValue maskRepeatProp
  maskSizeValue : MaskSize -> PropertyValue maskSizeProp
  maskTypeValue : MaskType -> PropertyValue maskTypeProp
  filterValue : Filter -> PropertyValue filterProp
  backdropFilterValue : BackdropFilter -> PropertyValue backdropFilterProp
  colorInterpolationFiltersValue : ColorInterpolationFilters -> PropertyValue colorInterpolationFiltersProp
  floodColorValue : FloodColor -> PropertyValue floodColorProp
  floodOpacityValue : FloodOpacity -> PropertyValue floodOpacityProp
  lightingColorValue : LightingColor -> PropertyValue lightingColorProp
  isolationValue : Isolation -> PropertyValue isolationProp
  mixBlendModeValue : MixBlendMode -> PropertyValue mixBlendModeProp
  willChangeValue : WillChange -> PropertyValue willChangeProp
  viewTransitionClassValue : ViewTransitionClass -> PropertyValue viewTransitionClassProp
  viewTransitionNameValue : ViewTransitionName -> PropertyValue viewTransitionNameProp
  overflowAnchorValue : OverflowAnchor -> PropertyValue overflowAnchorProp
  customValue : {name : String} -> RawValue -> PropertyValue (customProp name)

data CssValue (propertyName : PropertyName) : Type lzero where
  wide     : GlobalKeyword -> CssValue propertyName
  specific : PropertyValue propertyName -> CssValue propertyName

renderPropertyValue : (propertyName : PropertyName) -> PropertyValue propertyName -> String
renderPropertyValue allProp (allValue value) = renderAll value
renderPropertyValue colorProp (colorValue value) = renderColor value
renderPropertyValue backgroundColorProp (backgroundColorValue value) = renderColor value
renderPropertyValue backgroundAttachmentProp (backgroundAttachmentValue value) = renderCommaList renderBackgroundAttachment value
renderPropertyValue backgroundClipProp (backgroundClipValue value) = renderCommaList renderBackgroundClip value
renderPropertyValue backgroundOriginProp (backgroundOriginValue value) = renderCommaList renderVisualBox value
renderPropertyValue backgroundRepeatProp (backgroundRepeatValue value) = renderCommaList renderBackgroundRepeat value
renderPropertyValue backgroundSizeProp (backgroundSizeValue value) = renderCommaList renderBackgroundSize value
renderPropertyValue backgroundBlendModeProp (backgroundBlendModeValue value) = renderBlendModeList value
renderPropertyValue displayProp (displayValue value) = renderDisplay value
renderPropertyValue visibilityProp (visibilityValue value) = renderVisibility value
renderPropertyValue opacityProp (opacityValue value) = renderNumber value
renderPropertyValue orderProp (orderValue value) = renderInteger value
renderPropertyValue readingFlowProp (readingFlowValue value) = renderReadingFlow value
renderPropertyValue readingOrderProp (readingOrderValue value) = renderInteger value
renderPropertyValue colorSchemeProp (colorSchemeValue value) = renderColorScheme value
renderPropertyValue dynamicRangeLimitProp (dynamicRangeLimitValue value) = renderDynamicRangeLimit value
renderPropertyValue forcedColorAdjustProp (forcedColorAdjustValue value) = renderForcedColorAdjust value
renderPropertyValue printColorAdjustProp (printColorAdjustValue value) = renderPrintColorAdjust value
renderPropertyValue positionProp (positionValue value) = renderPosition value
renderPropertyValue topProp (topValue value) = renderInsetOffset value
renderPropertyValue rightProp (rightValue value) = renderInsetOffset value
renderPropertyValue bottomProp (bottomValue value) = renderInsetOffset value
renderPropertyValue leftProp (leftValue value) = renderInsetOffset value
renderPropertyValue insetProp (insetValue value) = renderBoxSides renderInsetOffset value
renderPropertyValue zIndexProp (zIndexValue value) = renderZIndex value
renderPropertyValue floatProp (floatValue value) = renderFloat value
renderPropertyValue clearProp (clearValue value) = renderClear value
renderPropertyValue widthProp (widthValue value) = renderPreferredSize value
renderPropertyValue heightProp (heightValue value) = renderPreferredSize value
renderPropertyValue minWidthProp (minWidthValue value) = renderPreferredSize value
renderPropertyValue maxWidthProp (maxWidthValue value) = renderMaxSize value
renderPropertyValue minHeightProp (minHeightValue value) = renderPreferredSize value
renderPropertyValue maxHeightProp (maxHeightValue value) = renderMaxSize value
renderPropertyValue boxSizingProp (boxSizingValue value) = renderBoxSizing value
renderPropertyValue aspectRatioProp (aspectRatioValue value) = renderAspectRatio value
renderPropertyValue marginProp (marginValue value) = renderBoxSides renderMarginSize value
renderPropertyValue marginTopProp (marginTopValue value) = renderMarginSize value
renderPropertyValue marginRightProp (marginRightValue value) = renderMarginSize value
renderPropertyValue marginBottomProp (marginBottomValue value) = renderMarginSize value
renderPropertyValue marginLeftProp (marginLeftValue value) = renderMarginSize value
renderPropertyValue paddingProp (paddingValue value) = renderBoxSides renderLengthPercentage value
renderPropertyValue paddingTopProp (paddingTopValue value) = renderLengthPercentage value
renderPropertyValue paddingRightProp (paddingRightValue value) = renderLengthPercentage value
renderPropertyValue paddingBottomProp (paddingBottomValue value) = renderLengthPercentage value
renderPropertyValue paddingLeftProp (paddingLeftValue value) = renderLengthPercentage value
renderPropertyValue borderWidthProp (borderWidthValue value) = renderBoxSides renderBorderWidth value
renderPropertyValue borderTopWidthProp (borderTopWidthValue value) = renderBorderWidth value
renderPropertyValue borderRightWidthProp (borderRightWidthValue value) = renderBorderWidth value
renderPropertyValue borderBottomWidthProp (borderBottomWidthValue value) = renderBorderWidth value
renderPropertyValue borderLeftWidthProp (borderLeftWidthValue value) = renderBorderWidth value
renderPropertyValue borderStyleProp (borderStyleValue value) = renderBoxSides renderBorderStyle value
renderPropertyValue borderTopStyleProp (borderTopStyleValue value) = renderBorderStyle value
renderPropertyValue borderRightStyleProp (borderRightStyleValue value) = renderBorderStyle value
renderPropertyValue borderBottomStyleProp (borderBottomStyleValue value) = renderBorderStyle value
renderPropertyValue borderLeftStyleProp (borderLeftStyleValue value) = renderBorderStyle value
renderPropertyValue borderColorProp (borderColorValue value) = renderBoxSides renderColor value
renderPropertyValue borderTopColorProp (borderTopColorValue value) = renderColor value
renderPropertyValue borderRightColorProp (borderRightColorValue value) = renderColor value
renderPropertyValue borderBottomColorProp (borderBottomColorValue value) = renderColor value
renderPropertyValue borderLeftColorProp (borderLeftColorValue value) = renderColor value
renderPropertyValue borderRadiusProp (borderRadiusValue value) = renderBorderRadius value
renderPropertyValue borderTopLeftRadiusProp (borderTopLeftRadiusValue value) = renderOneOrTwo renderLengthPercentage value
renderPropertyValue borderTopRightRadiusProp (borderTopRightRadiusValue value) = renderOneOrTwo renderLengthPercentage value
renderPropertyValue borderBottomRightRadiusProp (borderBottomRightRadiusValue value) = renderOneOrTwo renderLengthPercentage value
renderPropertyValue borderBottomLeftRadiusProp (borderBottomLeftRadiusValue value) = renderOneOrTwo renderLengthPercentage value
renderPropertyValue boxShadowProp (boxShadowValue value) = renderRawValue value
renderPropertyValue borderCollapseProp (borderCollapseValue value) = renderBorderCollapse value
renderPropertyValue borderSpacingProp (borderSpacingValue value) = renderBorderSpacing value
renderPropertyValue captionSideProp (captionSideValue value) = renderCaptionSide value
renderPropertyValue emptyCellsProp (emptyCellsValue value) = renderEmptyCells value
renderPropertyValue tableLayoutProp (tableLayoutValue value) = renderTableLayout value
renderPropertyValue breakAfterProp (breakAfterValue value) = renderBreakAfter value
renderPropertyValue breakBeforeProp (breakBeforeValue value) = renderBreakBefore value
renderPropertyValue breakInsideProp (breakInsideValue value) = renderBreakInside value
renderPropertyValue boxDecorationBreakProp (boxDecorationBreakValue value) = renderBoxDecorationBreak value
renderPropertyValue orphansProp (orphansValue value) = renderOrphans value
renderPropertyValue widowsProp (widowsValue value) = renderWidows value
renderPropertyValue accentColorProp (accentColorValue value) = renderAutoColor value
renderPropertyValue appearanceProp (appearanceValue value) = renderAppearance value
renderPropertyValue caretAnimationProp (caretAnimationValue value) = renderCaretAnimation value
renderPropertyValue caretColorProp (caretColorValue value) = renderAutoColor value
renderPropertyValue caretShapeProp (caretShapeValue value) = renderCaretShape value
renderPropertyValue interactivityProp (interactivityValue value) = renderInteractivity value
renderPropertyValue outlineColorProp (outlineColorValue value) = renderAutoColor value
renderPropertyValue outlineOffsetProp (outlineOffsetValue value) = renderLength value
renderPropertyValue outlineStyleProp (outlineStyleValue value) = renderOutlineStyle value
renderPropertyValue outlineWidthProp (outlineWidthValue value) = renderBorderWidth value
renderPropertyValue pointerEventsProp (pointerEventsValue value) = renderPointerEvents value
renderPropertyValue resizeProp (resizeValue value) = renderResize value
renderPropertyValue userSelectProp (userSelectValue value) = renderUserSelect value
renderPropertyValue overflowProp (overflowValue value) = renderOneOrTwo renderOverflowKeyword value
renderPropertyValue overflowBlockProp (overflowBlockValue value) = renderOverflowKeyword value
renderPropertyValue overflowInlineProp (overflowInlineValue value) = renderOverflowKeyword value
renderPropertyValue overflowXProp (overflowXValue value) = renderOverflowKeyword value
renderPropertyValue overflowYProp (overflowYValue value) = renderOverflowKeyword value
renderPropertyValue lineClampProp (lineClampValue value) = renderLineClamp value
renderPropertyValue scrollBehaviorProp (scrollBehaviorValue value) = renderScrollBehavior value
renderPropertyValue scrollMarkerGroupProp (scrollMarkerGroupValue value) = renderScrollMarkerGroup value
renderPropertyValue scrollTargetGroupProp (scrollTargetGroupValue value) = renderScrollTargetGroup value
renderPropertyValue scrollbarGutterProp (scrollbarGutterValue value) = renderScrollbarGutter value
renderPropertyValue textOverflowProp (textOverflowValue value) = renderOneOrTwo renderTextOverflow value
renderPropertyValue overscrollBehaviorProp (overscrollBehaviorValue value) = renderOverscrollBehavior value
renderPropertyValue overscrollBehaviorBlockProp (overscrollBehaviorBlockValue value) = renderOverscrollBehaviorBlock value
renderPropertyValue overscrollBehaviorInlineProp (overscrollBehaviorInlineValue value) = renderOverscrollBehaviorInline value
renderPropertyValue overscrollBehaviorXProp (overscrollBehaviorXValue value) = renderOverscrollBehaviorX value
renderPropertyValue overscrollBehaviorYProp (overscrollBehaviorYValue value) = renderOverscrollBehaviorY value
renderPropertyValue scrollSnapAlignProp (scrollSnapAlignValue value) = renderScrollSnapAlign value
renderPropertyValue scrollSnapStopProp (scrollSnapStopValue value) = renderScrollSnapStop value
renderPropertyValue scrollSnapTypeProp (scrollSnapTypeValue value) = renderScrollSnapType value
renderPropertyValue scrollPaddingProp (scrollPaddingValue value) = renderScrollPadding value
renderPropertyValue scrollPaddingBlockProp (scrollPaddingBlockValue value) = renderScrollPaddingBlock value
renderPropertyValue scrollPaddingBlockStartProp (scrollPaddingBlockStartValue value) = renderScrollPaddingBlockStart value
renderPropertyValue scrollPaddingBlockEndProp (scrollPaddingBlockEndValue value) = renderScrollPaddingBlockEnd value
renderPropertyValue scrollPaddingInlineProp (scrollPaddingInlineValue value) = renderScrollPaddingInline value
renderPropertyValue scrollPaddingInlineStartProp (scrollPaddingInlineStartValue value) = renderScrollPaddingInlineStart value
renderPropertyValue scrollPaddingInlineEndProp (scrollPaddingInlineEndValue value) = renderScrollPaddingInlineEnd value
renderPropertyValue scrollPaddingTopProp (scrollPaddingTopValue value) = renderScrollPaddingTop value
renderPropertyValue scrollPaddingRightProp (scrollPaddingRightValue value) = renderScrollPaddingRight value
renderPropertyValue scrollPaddingBottomProp (scrollPaddingBottomValue value) = renderScrollPaddingBottom value
renderPropertyValue scrollPaddingLeftProp (scrollPaddingLeftValue value) = renderScrollPaddingLeft value
renderPropertyValue scrollMarginProp (scrollMarginValue value) = renderScrollMargin value
renderPropertyValue scrollMarginBlockProp (scrollMarginBlockValue value) = renderScrollMarginBlock value
renderPropertyValue scrollMarginBlockStartProp (scrollMarginBlockStartValue value) = renderScrollMarginBlockStart value
renderPropertyValue scrollMarginBlockEndProp (scrollMarginBlockEndValue value) = renderScrollMarginBlockEnd value
renderPropertyValue scrollMarginInlineProp (scrollMarginInlineValue value) = renderScrollMarginInline value
renderPropertyValue scrollMarginInlineStartProp (scrollMarginInlineStartValue value) = renderScrollMarginInlineStart value
renderPropertyValue scrollMarginInlineEndProp (scrollMarginInlineEndValue value) = renderScrollMarginInlineEnd value
renderPropertyValue scrollMarginTopProp (scrollMarginTopValue value) = renderScrollMarginTop value
renderPropertyValue scrollMarginRightProp (scrollMarginRightValue value) = renderScrollMarginRight value
renderPropertyValue scrollMarginBottomProp (scrollMarginBottomValue value) = renderScrollMarginBottom value
renderPropertyValue scrollMarginLeftProp (scrollMarginLeftValue value) = renderScrollMarginLeft value
renderPropertyValue scrollTimelineAxisProp (scrollTimelineAxisValue value) = renderScrollTimelineAxis value
renderPropertyValue scrollTimelineNameProp (scrollTimelineNameValue value) = renderScrollTimelineName value
renderPropertyValue scrollbarColorProp (scrollbarColorValue value) = renderScrollbarColor value
renderPropertyValue scrollbarWidthProp (scrollbarWidthValue value) = renderScrollbarWidth value
renderPropertyValue fontSizeProp (fontSizeValue value) = renderLengthPercentage value
renderPropertyValue fontStyleProp (fontStyleValue value) = renderFontStyle value
renderPropertyValue fontWeightProp (fontWeightValue value) = renderFontWeight value
renderPropertyValue fontKerningProp (fontKerningValue value) = renderFontKerning value
renderPropertyValue fontLanguageOverrideProp (fontLanguageOverrideValue value) = renderFontLanguageOverride value
renderPropertyValue fontOpticalSizingProp (fontOpticalSizingValue value) = renderAutoNone value
renderPropertyValue fontSynthesisSmallCapsProp (fontSynthesisSmallCapsValue value) = renderAutoNone value
renderPropertyValue fontSynthesisStyleProp (fontSynthesisStyleValue value) = renderAutoNone value
renderPropertyValue fontSynthesisWeightProp (fontSynthesisWeightValue value) = renderAutoNone value
renderPropertyValue fontVariantCapsProp (fontVariantCapsValue value) = renderFontVariantCaps value
renderPropertyValue fontVariantEmojiProp (fontVariantEmojiValue value) = renderFontVariantEmoji value
renderPropertyValue fontVariantPositionProp (fontVariantPositionValue value) = renderFontVariantPosition value
renderPropertyValue lineHeightProp (lineHeightValue value) = renderLineHeight value
renderPropertyValue textAlignProp (textAlignValue value) = renderTextAlign value
renderPropertyValue textAlignLastProp (textAlignLastValue value) = renderTextAlignLast value
renderPropertyValue textTransformProp (textTransformValue value) = renderTextTransform value
renderPropertyValue whiteSpaceProp (whiteSpaceValue value) = renderWhiteSpace value
renderPropertyValue whiteSpaceCollapseProp (whiteSpaceCollapseValue value) = renderWhiteSpaceCollapse value
renderPropertyValue textWrapProp (textWrapValue value) = renderTextWrap value
renderPropertyValue textWrapModeProp (textWrapModeValue value) = renderTextWrapMode value
renderPropertyValue textWrapStyleProp (textWrapStyleValue value) = renderTextWrapStyle value
renderPropertyValue overflowWrapProp (overflowWrapValue value) = renderOverflowWrap value
renderPropertyValue wordBreakProp (wordBreakValue value) = renderWordBreak value
renderPropertyValue wordWrapProp (wordWrapValue value) = renderWordWrap value
renderPropertyValue hyphensProp (hyphensValue value) = renderHyphens value
renderPropertyValue lineBreakProp (lineBreakValue value) = renderLineBreak value
renderPropertyValue textJustifyProp (textJustifyValue value) = renderTextJustify value
renderPropertyValue letterSpacingProp (letterSpacingValue value) = renderNormalLength value
renderPropertyValue wordSpacingProp (wordSpacingValue value) = renderNormalLength value
renderPropertyValue tabSizeProp (tabSizeValue value) = renderTabSize value
renderPropertyValue hyphenateCharacterProp (hyphenateCharacterValue value) = renderAutoStringToken value
renderPropertyValue contentProp (contentValue value) = renderContent value
renderPropertyValue quotesProp (quotesValue value) = renderQuotes value
renderPropertyValue textDecorationColorProp (textDecorationColorValue value) = renderColor value
renderPropertyValue textDecorationLineProp (textDecorationLineValue value) = renderTextDecorationLine value
renderPropertyValue textDecorationSkipInkProp (textDecorationSkipInkValue value) = renderTextDecorationSkipInk value
renderPropertyValue textDecorationStyleProp (textDecorationStyleValue value) = renderTextDecorationStyle value
renderPropertyValue textDecorationThicknessProp (textDecorationThicknessValue value) = renderTextDecorationThickness value
renderPropertyValue textEmphasisColorProp (textEmphasisColorValue value) = renderColor value
renderPropertyValue textEmphasisPositionProp (textEmphasisPositionValue value) = renderTextEmphasisPosition value
renderPropertyValue textEmphasisStyleProp (textEmphasisStyleValue value) = renderTextEmphasisStyle value
renderPropertyValue textUnderlineOffsetProp (textUnderlineOffsetValue value) = renderTextUnderlineOffset value
renderPropertyValue textUnderlinePositionProp (textUnderlinePositionValue value) = renderTextUnderlinePosition value
renderPropertyValue listStylePositionProp (listStylePositionValue value) = renderListStylePosition value
renderPropertyValue listStyleTypeProp (listStyleTypeValue value) = renderListStyleType value
renderPropertyValue listStyleImageProp (listStyleImageValue value) = renderListStyleImage value
renderPropertyValue listStyleProp (listStyleValue value) = renderListStyle value
renderPropertyValue counterResetProp (counterResetValue value) = renderCounterReset value
renderPropertyValue counterIncrementProp (counterIncrementValue value) = renderCounterIncrement value
renderPropertyValue counterSetProp (counterSetValue value) = renderCounterSet value
renderPropertyValue flexDirectionProp (flexDirectionValue value) = renderFlexDirection value
renderPropertyValue flexWrapProp (flexWrapValue value) = renderFlexWrap value
renderPropertyValue flexGrowProp (flexGrowValue value) = renderNumber value
renderPropertyValue flexShrinkProp (flexShrinkValue value) = renderNumber value
renderPropertyValue flexBasisProp (flexBasisValue value) = renderFlexBasis value
renderPropertyValue justifyContentProp (justifyContentValue value) = renderJustifyContent value
renderPropertyValue alignItemsProp (alignItemsValue value) = renderAlignItems value
renderPropertyValue gapProp (gapValue value) = renderOneOrTwo renderGapValue value
renderPropertyValue rowGapProp (rowGapValue value) = renderGapValue value
renderPropertyValue columnGapProp (columnGapValue value) = renderGapValue value
renderPropertyValue alignContentProp (alignContentValue value) = renderAlignContent value
renderPropertyValue alignSelfProp (alignSelfValue value) = renderAlignSelf value
renderPropertyValue justifyItemsProp (justifyItemsValue value) = renderJustifyItems value
renderPropertyValue justifySelfProp (justifySelfValue value) = renderJustifySelf value
renderPropertyValue flexFlowProp (flexFlowValue value) = renderFlexFlow value
renderPropertyValue columnCountProp (columnCountValue value) = renderColumnCount value
renderPropertyValue columnFillProp (columnFillValue value) = renderColumnFill value
renderPropertyValue columnRuleColorProp (columnRuleColorValue value) = renderColumnRuleColor value
renderPropertyValue columnRuleStyleProp (columnRuleStyleValue value) = renderColumnRuleStyle value
renderPropertyValue columnRuleWidthProp (columnRuleWidthValue value) = renderColumnRuleWidth value
renderPropertyValue columnRuleProp (columnRuleValue value) = renderColumnRule value
renderPropertyValue columnSpanProp (columnSpanValue value) = renderColumnSpan value
renderPropertyValue columnWidthProp (columnWidthValue value) = renderColumnWidth value
renderPropertyValue columnHeightProp (columnHeightValue value) = renderColumnHeight value
renderPropertyValue columnWrapProp (columnWrapValue value) = renderColumnWrap value
renderPropertyValue columnsProp (columnsValue value) = renderColumns value
renderPropertyValue gridTemplateProp (gridTemplateValue value) = renderRawValue value
renderPropertyValue gridTemplateAreasProp (gridTemplateAreasValue value) = renderRawValue value
renderPropertyValue gridTemplateColumnsProp (gridTemplateColumnsValue value) = renderTrackList value
renderPropertyValue gridTemplateRowsProp (gridTemplateRowsValue value) = renderTrackList value
renderPropertyValue gridAutoColumnsProp (gridAutoColumnsValue value) = renderTrackList value
renderPropertyValue gridAutoRowsProp (gridAutoRowsValue value) = renderTrackList value
renderPropertyValue gridAutoFlowProp (gridAutoFlowValue value) = renderGridAutoFlow value
renderPropertyValue gridColumnProp (gridColumnValue value) = renderGridLine value
renderPropertyValue gridColumnStartProp (gridColumnStartValue value) = renderGridLine value
renderPropertyValue gridColumnEndProp (gridColumnEndValue value) = renderGridLine value
renderPropertyValue gridRowProp (gridRowValue value) = renderGridLine value
renderPropertyValue gridRowStartProp (gridRowStartValue value) = renderGridLine value
renderPropertyValue gridRowEndProp (gridRowEndValue value) = renderGridLine value
renderPropertyValue gridAreaProp (gridAreaValue value) = renderGridLine value
renderPropertyValue imageOrientationProp (imageOrientationValue value) = renderImageOrientation value
renderPropertyValue imageRenderingProp (imageRenderingValue value) = renderImageRendering value
renderPropertyValue objectFitProp (objectFitValue value) = renderObjectFit value
renderPropertyValue objectPositionProp (objectPositionValue value) = renderObjectPosition value
renderPropertyValue containProp (containValue value) = renderContain value
renderPropertyValue contentVisibilityProp (contentVisibilityValue value) = renderContentVisibility value
renderPropertyValue containerNameProp (containerNameValue value) = renderContainerName value
renderPropertyValue containerTypeProp (containerTypeValue value) = renderContainerType value
renderPropertyValue containerProp (containerValue value) = renderContainer value
renderPropertyValue rubyAlignProp (rubyAlignValue value) = renderRubyAlign value
renderPropertyValue rubyOverhangProp (rubyOverhangValue value) = renderRubyOverhang value
renderPropertyValue rubyPositionProp (rubyPositionValue value) = renderRubyPosition value
renderPropertyValue alignmentBaselineProp (alignmentBaselineValue value) = renderAlignmentBaseline value
renderPropertyValue baselineShiftProp (baselineShiftValue value) = renderBaselineShift value
renderPropertyValue baselineSourceProp (baselineSourceValue value) = renderBaselineSource value
renderPropertyValue dominantBaselineProp (dominantBaselineValue value) = renderDominantBaseline value
renderPropertyValue initialLetterProp (initialLetterValue value) = renderInitialLetter value
renderPropertyValue textBoxProp (textBoxValue value) = renderTextBox value
renderPropertyValue textBoxEdgeProp (textBoxEdgeValue value) = renderTextBoxEdge value
renderPropertyValue textBoxTrimProp (textBoxTrimValue value) = renderTextBoxTrim value
renderPropertyValue verticalAlignProp (verticalAlignValue value) = renderVerticalAlign value
renderPropertyValue directionProp (directionValue value) = renderCssDirection value
renderPropertyValue writingModeProp (writingModeValue value) = renderWritingMode value
renderPropertyValue textOrientationProp (textOrientationValue value) = renderTextOrientation value
renderPropertyValue unicodeBidiProp (unicodeBidiValue value) = renderUnicodeBidi value
renderPropertyValue textCombineUprightProp (textCombineUprightValue value) = renderTextCombineUpright value
renderPropertyValue blockSizeProp (blockSizeValue value) = renderPreferredSize value
renderPropertyValue inlineSizeProp (inlineSizeValue value) = renderPreferredSize value
renderPropertyValue minBlockSizeProp (minBlockSizeValue value) = renderPreferredSize value
renderPropertyValue minInlineSizeProp (minInlineSizeValue value) = renderPreferredSize value
renderPropertyValue maxBlockSizeProp (maxBlockSizeValue value) = renderMaxSize value
renderPropertyValue maxInlineSizeProp (maxInlineSizeValue value) = renderMaxSize value
renderPropertyValue insetBlockProp (insetBlockValue value) = renderOneOrTwo renderInsetOffset value
renderPropertyValue insetBlockStartProp (insetBlockStartValue value) = renderInsetOffset value
renderPropertyValue insetBlockEndProp (insetBlockEndValue value) = renderInsetOffset value
renderPropertyValue insetInlineProp (insetInlineValue value) = renderOneOrTwo renderInsetOffset value
renderPropertyValue insetInlineStartProp (insetInlineStartValue value) = renderInsetOffset value
renderPropertyValue insetInlineEndProp (insetInlineEndValue value) = renderInsetOffset value
renderPropertyValue marginBlockProp (marginBlockValue value) = renderOneOrTwo renderMarginSize value
renderPropertyValue marginBlockStartProp (marginBlockStartValue value) = renderMarginSize value
renderPropertyValue marginBlockEndProp (marginBlockEndValue value) = renderMarginSize value
renderPropertyValue marginInlineProp (marginInlineValue value) = renderOneOrTwo renderMarginSize value
renderPropertyValue marginInlineStartProp (marginInlineStartValue value) = renderMarginSize value
renderPropertyValue marginInlineEndProp (marginInlineEndValue value) = renderMarginSize value
renderPropertyValue paddingBlockProp (paddingBlockValue value) = renderOneOrTwo renderLengthPercentage value
renderPropertyValue paddingBlockStartProp (paddingBlockStartValue value) = renderLengthPercentage value
renderPropertyValue paddingBlockEndProp (paddingBlockEndValue value) = renderLengthPercentage value
renderPropertyValue paddingInlineProp (paddingInlineValue value) = renderOneOrTwo renderLengthPercentage value
renderPropertyValue paddingInlineStartProp (paddingInlineStartValue value) = renderLengthPercentage value
renderPropertyValue paddingInlineEndProp (paddingInlineEndValue value) = renderLengthPercentage value
renderPropertyValue borderBlockColorProp (borderBlockColorValue value) = renderOneOrTwo renderColor value
renderPropertyValue borderBlockStartColorProp (borderBlockStartColorValue value) = renderColor value
renderPropertyValue borderBlockEndColorProp (borderBlockEndColorValue value) = renderColor value
renderPropertyValue borderInlineColorProp (borderInlineColorValue value) = renderOneOrTwo renderColor value
renderPropertyValue borderInlineStartColorProp (borderInlineStartColorValue value) = renderColor value
renderPropertyValue borderInlineEndColorProp (borderInlineEndColorValue value) = renderColor value
renderPropertyValue borderBlockStyleProp (borderBlockStyleValue value) = renderOneOrTwo renderBorderStyle value
renderPropertyValue borderBlockStartStyleProp (borderBlockStartStyleValue value) = renderBorderStyle value
renderPropertyValue borderBlockEndStyleProp (borderBlockEndStyleValue value) = renderBorderStyle value
renderPropertyValue borderInlineStyleProp (borderInlineStyleValue value) = renderOneOrTwo renderBorderStyle value
renderPropertyValue borderInlineStartStyleProp (borderInlineStartStyleValue value) = renderBorderStyle value
renderPropertyValue borderInlineEndStyleProp (borderInlineEndStyleValue value) = renderBorderStyle value
renderPropertyValue borderBlockWidthProp (borderBlockWidthValue value) = renderOneOrTwo renderBorderWidth value
renderPropertyValue borderBlockStartWidthProp (borderBlockStartWidthValue value) = renderBorderWidth value
renderPropertyValue borderBlockEndWidthProp (borderBlockEndWidthValue value) = renderBorderWidth value
renderPropertyValue borderInlineWidthProp (borderInlineWidthValue value) = renderOneOrTwo renderBorderWidth value
renderPropertyValue borderInlineStartWidthProp (borderInlineStartWidthValue value) = renderBorderWidth value
renderPropertyValue borderInlineEndWidthProp (borderInlineEndWidthValue value) = renderBorderWidth value
renderPropertyValue borderStartStartRadiusProp (borderStartStartRadiusValue value) = renderOneOrTwo renderLengthPercentage value
renderPropertyValue borderStartEndRadiusProp (borderStartEndRadiusValue value) = renderOneOrTwo renderLengthPercentage value
renderPropertyValue borderEndStartRadiusProp (borderEndStartRadiusValue value) = renderOneOrTwo renderLengthPercentage value
renderPropertyValue borderEndEndRadiusProp (borderEndEndRadiusValue value) = renderOneOrTwo renderLengthPercentage value
renderPropertyValue backfaceVisibilityProp (backfaceVisibilityValue value) = renderBackfaceVisibility value
renderPropertyValue perspectiveProp (perspectiveValue value) = renderPerspective value
renderPropertyValue perspectiveOriginProp (perspectiveOriginValue value) = renderPerspectiveOrigin value
renderPropertyValue rotateProp (rotateValue value) = renderRotate value
renderPropertyValue scaleProp (scaleValue value) = renderScale value
renderPropertyValue transformProp (transformValue value) = renderTransform value
renderPropertyValue transformBoxProp (transformBoxValue value) = renderTransformBox value
renderPropertyValue transformOriginProp (transformOriginValue value) = renderTransformOrigin value
renderPropertyValue transformStyleProp (transformStyleValue value) = renderTransformStyle value
renderPropertyValue translateProp (translateValue value) = renderTranslate value
renderPropertyValue animationProp (animationValue value) = renderRawValue value
renderPropertyValue animationCompositionProp (animationCompositionValue value) = renderAnimationCompositionList value
renderPropertyValue animationDelayProp (animationDelayValue value) = renderTimeList value
renderPropertyValue animationDirectionProp (animationDirectionValue value) = renderAnimationDirectionList value
renderPropertyValue animationDurationProp (animationDurationValue value) = renderRawValue value
renderPropertyValue animationFillModeProp (animationFillModeValue value) = renderAnimationFillModeList value
renderPropertyValue animationIterationCountProp (animationIterationCountValue value) = renderAnimationIterationCountList value
renderPropertyValue animationNameProp (animationNameValue value) = renderAnimationNameList value
renderPropertyValue animationPlayStateProp (animationPlayStateValue value) = renderAnimationPlayStateList value
renderPropertyValue animationTimingFunctionProp (animationTimingFunctionValue value) = renderEasingFunctionList value
renderPropertyValue transitionProp (transitionValue value) = renderRawValue value
renderPropertyValue transitionBehaviorProp (transitionBehaviorValue value) = renderTransitionBehaviorList value
renderPropertyValue transitionDelayProp (transitionDelayValue value) = renderTimeList value
renderPropertyValue transitionDurationProp (transitionDurationValue value) = renderTimeList value
renderPropertyValue transitionPropertyProp (transitionPropertyValue value) = renderRawValue value
renderPropertyValue transitionTimingFunctionProp (transitionTimingFunctionValue value) = renderEasingFunctionList value
renderPropertyValue clipPathProp (clipPathValue value) = renderClipPath value
renderPropertyValue maskClipProp (maskClipValue value) = renderMaskClip value
renderPropertyValue maskCompositeProp (maskCompositeValue value) = renderMaskComposite value
renderPropertyValue maskImageProp (maskImageValue value) = renderMaskImage value
renderPropertyValue maskModeProp (maskModeValue value) = renderMaskMode value
renderPropertyValue maskOriginProp (maskOriginValue value) = renderMaskOrigin value
renderPropertyValue maskPositionProp (maskPositionValue value) = renderMaskPosition value
renderPropertyValue maskRepeatProp (maskRepeatValue value) = renderMaskRepeat value
renderPropertyValue maskSizeProp (maskSizeValue value) = renderMaskSize value
renderPropertyValue maskTypeProp (maskTypeValue value) = renderMaskType value
renderPropertyValue filterProp (filterValue value) = renderFilter value
renderPropertyValue backdropFilterProp (backdropFilterValue value) = renderBackdropFilter value
renderPropertyValue colorInterpolationFiltersProp (colorInterpolationFiltersValue value) = renderColorInterpolationFilters value
renderPropertyValue floodColorProp (floodColorValue value) = renderFloodColor value
renderPropertyValue floodOpacityProp (floodOpacityValue value) = renderFloodOpacity value
renderPropertyValue lightingColorProp (lightingColorValue value) = renderLightingColor value
renderPropertyValue isolationProp (isolationValue value) = renderIsolation value
renderPropertyValue mixBlendModeProp (mixBlendModeValue value) = renderMixBlendMode value
renderPropertyValue willChangeProp (willChangeValue value) = renderWillChange value
renderPropertyValue viewTransitionClassProp (viewTransitionClassValue value) = renderViewTransitionClass value
renderPropertyValue viewTransitionNameProp (viewTransitionNameValue value) = renderViewTransitionName value
renderPropertyValue overflowAnchorProp (overflowAnchorValue value) = renderOverflowAnchor value
renderPropertyValue (customProp name) (customValue value) = renderRawValue value

valueString : (propertyName : PropertyName) -> CssValue propertyName -> String
valueString propertyName (wide keyword) = renderGlobalKeyword keyword
valueString propertyName (specific value) = renderPropertyValue propertyName value