// Generated by tools/generate-common-values.mbtx.

///|
pub trait BoxSizeInput {
  fn property_input(Self) -> PropertyInput
}

///|
pub impl BoxSizeInput for @values.BoxSize with fn property_input(self) {
  expression_input(@values.box_size(self).expression())
}

///|
pub impl BoxSizeInput for @values.Length with fn property_input(self) {
  let input = expression_input(@values.box_size(self).expression())
  { ..input, value_origin: @ir.LiteralOrigin([input.css]), }
}

///|
pub impl BoxSizeInput for @values.LengthPercentage with fn property_input(self) {
  let input = expression_input(@values.box_size(self).expression())
  { ..input, value_origin: @ir.LiteralOrigin([input.css]), }
}

///|
pub impl BoxSizeInput for @values.Percentage with fn property_input(self) {
  let input = expression_input(@values.box_size(self).expression())
  { ..input, value_origin: @ir.LiteralOrigin([input.css]), }
}

///|
pub impl[T : @values.BoxSizeDimension] BoxSizeInput for @values.Token[T] with fn property_input(
  self,
) {
  let input = expression_input(@values.box_size(self).expression())
  {
    ..input,
    value_origin: @ir.TokenOrigin(contract_variable(self.variable_use())),
  }
}

///|
pub impl[T : @values.BoxSizeDimension] BoxSizeInput for @values.DynamicSlot[T] with fn property_input(
  self,
) {
  let input = expression_input(@values.box_size(self).expression())
  {
    ..input,
    value_origin: @ir.DynamicSlotOrigin(contract_variable(self.variable_use())),
  }
}

///|
pub impl[T : @values.BoxSizeDimension] BoxSizeInput for @values.MathExpr[T] with fn property_input(
  self,
) {
  expression_input(@values.box_size(self).expression())
}

///|
pub trait FlexBasisInput {
  fn property_input(Self) -> PropertyInput
}

///|
pub impl FlexBasisInput for @values.FlexBasis with fn property_input(self) {
  expression_input(@values.flex_basis_value(self).expression())
}

///|
pub impl FlexBasisInput for @values.Length with fn property_input(self) {
  let input = expression_input(@values.flex_basis_value(self).expression())
  { ..input, value_origin: @ir.LiteralOrigin([input.css]), }
}

///|
pub impl FlexBasisInput for @values.LengthPercentage with fn property_input(
  self,
) {
  let input = expression_input(@values.flex_basis_value(self).expression())
  { ..input, value_origin: @ir.LiteralOrigin([input.css]), }
}

///|
pub impl FlexBasisInput for @values.Percentage with fn property_input(self) {
  let input = expression_input(@values.flex_basis_value(self).expression())
  { ..input, value_origin: @ir.LiteralOrigin([input.css]), }
}

///|
pub impl[T : @values.FlexBasisDimension] FlexBasisInput for @values.Token[T] with fn property_input(
  self,
) {
  let input = expression_input(@values.flex_basis_value(self).expression())
  {
    ..input,
    value_origin: @ir.TokenOrigin(contract_variable(self.variable_use())),
  }
}

///|
pub impl[T : @values.FlexBasisDimension] FlexBasisInput for @values.DynamicSlot[
  T,
] with fn property_input(self) {
  let input = expression_input(@values.flex_basis_value(self).expression())
  {
    ..input,
    value_origin: @ir.DynamicSlotOrigin(contract_variable(self.variable_use())),
  }
}

///|
pub impl[T : @values.FlexBasisDimension] FlexBasisInput for @values.MathExpr[T] with fn property_input(
  self,
) {
  expression_input(@values.flex_basis_value(self).expression())
}

///|
pub trait FontSizeInput {
  fn property_input(Self) -> PropertyInput
}

///|
pub impl FontSizeInput for @values.FontSize with fn property_input(self) {
  expression_input(@values.font_size_value(self).expression())
}

///|
pub impl FontSizeInput for @values.Length with fn property_input(self) {
  let input = expression_input(@values.font_size_value(self).expression())
  { ..input, value_origin: @ir.LiteralOrigin([input.css]), }
}

///|
pub impl FontSizeInput for @values.LengthPercentage with fn property_input(self) {
  let input = expression_input(@values.font_size_value(self).expression())
  { ..input, value_origin: @ir.LiteralOrigin([input.css]), }
}

///|
pub impl FontSizeInput for @values.Percentage with fn property_input(self) {
  let input = expression_input(@values.font_size_value(self).expression())
  { ..input, value_origin: @ir.LiteralOrigin([input.css]), }
}

///|
pub impl[T : @values.FontSizeDimension] FontSizeInput for @values.Token[T] with fn property_input(
  self,
) {
  let input = expression_input(@values.font_size_value(self).expression())
  {
    ..input,
    value_origin: @ir.TokenOrigin(contract_variable(self.variable_use())),
  }
}

///|
pub impl[T : @values.FontSizeDimension] FontSizeInput for @values.DynamicSlot[T] with fn property_input(
  self,
) {
  let input = expression_input(@values.font_size_value(self).expression())
  {
    ..input,
    value_origin: @ir.DynamicSlotOrigin(contract_variable(self.variable_use())),
  }
}

///|
pub impl[T : @values.FontSizeDimension] FontSizeInput for @values.MathExpr[T] with fn property_input(
  self,
) {
  expression_input(@values.font_size_value(self).expression())
}

///|
pub trait LineHeightInput {
  fn property_input(Self) -> PropertyInput
}

///|
pub impl LineHeightInput for @values.LineHeight with fn property_input(self) {
  expression_input(@values.line_height_value(self).expression())
}

///|
pub impl LineHeightInput for @values.Length with fn property_input(self) {
  let input = expression_input(@values.line_height_value(self).expression())
  { ..input, value_origin: @ir.LiteralOrigin([input.css]), }
}

///|
pub impl LineHeightInput for @values.LengthPercentage with fn property_input(
  self,
) {
  let input = expression_input(@values.line_height_value(self).expression())
  { ..input, value_origin: @ir.LiteralOrigin([input.css]), }
}

///|
pub impl LineHeightInput for @values.Percentage with fn property_input(self) {
  let input = expression_input(@values.line_height_value(self).expression())
  { ..input, value_origin: @ir.LiteralOrigin([input.css]), }
}

///|
pub impl LineHeightInput for @values.Number with fn property_input(self) {
  let input = expression_input(@values.line_height_value(self).expression())
  { ..input, value_origin: @ir.LiteralOrigin([input.css]), }
}

///|
pub impl LineHeightInput for Double with fn property_input(self) {
  let input = expression_input(@values.line_height_value(self).expression())
  { ..input, value_origin: @ir.LiteralOrigin([input.css]), }
}

///|
pub impl[T : @values.LineHeightDimension] LineHeightInput for @values.Token[T] with fn property_input(
  self,
) {
  let input = expression_input(@values.line_height_value(self).expression())
  {
    ..input,
    value_origin: @ir.TokenOrigin(contract_variable(self.variable_use())),
  }
}

///|
pub impl[T : @values.LineHeightDimension] LineHeightInput for @values.DynamicSlot[
  T,
] with fn property_input(self) {
  let input = expression_input(@values.line_height_value(self).expression())
  {
    ..input,
    value_origin: @ir.DynamicSlotOrigin(contract_variable(self.variable_use())),
  }
}

///|
pub impl[T : @values.LineHeightDimension] LineHeightInput for @values.MathExpr[
  T,
] with fn property_input(self) {
  expression_input(@values.line_height_value(self).expression())
}

///|
pub impl FlexBasisInput for @values.BoxSize with fn property_input(self) {
  expression_input(@values.flex_basis_value(self).expression())
}

///|
pub impl[T : CornerRadiusInput] CornerRadiusInputFallbacks for Array[T] with fn fallback_inputs(
  self,
) {
  self.map(value => value.property_input())
}

///|
pub trait CornerRadiusInput {
  fn property_input(Self) -> PropertyInput
}

///|
pub impl CornerRadiusInput for @values.CornerRadius with fn property_input(self) {
  expression_input(self.expression())
}

///|
pub impl CornerRadiusInput for @values.Length with fn property_input(self) {
  expression_input(@values.corner_radius(self).expression())
}

///|
pub impl CornerRadiusInput for @values.LengthPercentage with fn property_input(
  self,
) {
  expression_input(@values.corner_radius(self).expression())
}

///|
pub impl CornerRadiusInput for @values.Percentage with fn property_input(self) {
  expression_input(@values.corner_radius(self).expression())
}

///|
pub impl[T : @values.BoxSizeDimension] CornerRadiusInput for @values.Token[T] with fn property_input(
  self,
) {
  expression_input(@values.corner_radius(self).expression())
}

///|
pub impl[T : @values.BoxSizeDimension] CornerRadiusInput for @values.DynamicSlot[
  T,
] with fn property_input(self) {
  expression_input(@values.corner_radius(self).expression())
}

///|
pub impl[T : @values.BoxSizeDimension] CornerRadiusInput for @values.MathExpr[T] with fn property_input(
  self,
) {
  expression_input(@values.corner_radius(self).expression())
}

///|
pub trait BorderRadiiInput {
  fn property_input(Self) -> PropertyInput
}

///|
pub impl BorderRadiiInput for @values.BorderRadii with fn property_input(self) {
  expression_input(self.expression())
}

///|
pub impl BorderRadiiInput for @values.Length with fn property_input(self) {
  expression_input(@values.single_radius(self).expression())
}

///|
pub impl BorderRadiiInput for @values.LengthPercentage with fn property_input(
  self,
) {
  expression_input(@values.single_radius(self).expression())
}

///|
pub impl BorderRadiiInput for @values.Percentage with fn property_input(self) {
  expression_input(@values.single_radius(self).expression())
}

///|
pub impl[T : @values.BoxSizeDimension] BorderRadiiInput for @values.Token[T] with fn property_input(
  self,
) {
  expression_input(@values.single_radius(self).expression())
}

///|
pub impl[T : @values.BoxSizeDimension] BorderRadiiInput for @values.DynamicSlot[
  T,
] with fn property_input(self) {
  expression_input(@values.single_radius(self).expression())
}

///|
pub impl[T : @values.BoxSizeDimension] BorderRadiiInput for @values.MathExpr[T] with fn property_input(
  self,
) {
  expression_input(@values.single_radius(self).expression())
}