diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSKeywords.h b/packages/react-native/ReactCommon/react/renderer/css/CSSKeywords.h index 15e5037c684..a584ef023b2 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSKeywords.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSKeywords.h @@ -32,11 +32,16 @@ enum class CSSKeyword : uint8_t { ColumnReverse, Content, Contents, + Dashed, + Dotted, + Double, End, Fixed, Flex, FlexEnd, FlexStart, + Grid, + Groove, Hidden, Inherit, Initial, @@ -44,19 +49,22 @@ enum class CSSKeyword : uint8_t { InlineBlock, InlineFlex, InlineGrid, + Inset, Ltr, - Grid, MaxContent, Medium, MinContent, None, Normal, NoWrap, + Outset, Relative, + Ridge, Row, RowReverse, Rtl, Scroll, + Solid, SpaceAround, SpaceBetween, SpaceEvenly, @@ -108,12 +116,16 @@ CSS_DEFINE_KEYWORD_CONEPTS(Column) CSS_DEFINE_KEYWORD_CONEPTS(ColumnReverse) CSS_DEFINE_KEYWORD_CONEPTS(Content) CSS_DEFINE_KEYWORD_CONEPTS(Contents) +CSS_DEFINE_KEYWORD_CONEPTS(Dashed) +CSS_DEFINE_KEYWORD_CONEPTS(Dotted) +CSS_DEFINE_KEYWORD_CONEPTS(Double) CSS_DEFINE_KEYWORD_CONEPTS(End) CSS_DEFINE_KEYWORD_CONEPTS(Fixed) CSS_DEFINE_KEYWORD_CONEPTS(Flex) CSS_DEFINE_KEYWORD_CONEPTS(FlexEnd) CSS_DEFINE_KEYWORD_CONEPTS(FlexStart) CSS_DEFINE_KEYWORD_CONEPTS(Grid) +CSS_DEFINE_KEYWORD_CONEPTS(Groove) CSS_DEFINE_KEYWORD_CONEPTS(Hidden) CSS_DEFINE_KEYWORD_CONEPTS(Inherit) CSS_DEFINE_KEYWORD_CONEPTS(Initial) @@ -121,6 +133,7 @@ CSS_DEFINE_KEYWORD_CONEPTS(Inline) CSS_DEFINE_KEYWORD_CONEPTS(InlineBlock) CSS_DEFINE_KEYWORD_CONEPTS(InlineFlex) CSS_DEFINE_KEYWORD_CONEPTS(InlineGrid) +CSS_DEFINE_KEYWORD_CONEPTS(Inset) CSS_DEFINE_KEYWORD_CONEPTS(Ltr) CSS_DEFINE_KEYWORD_CONEPTS(MaxContent) CSS_DEFINE_KEYWORD_CONEPTS(Medium) @@ -128,11 +141,14 @@ CSS_DEFINE_KEYWORD_CONEPTS(MinContent) CSS_DEFINE_KEYWORD_CONEPTS(None) CSS_DEFINE_KEYWORD_CONEPTS(Normal) CSS_DEFINE_KEYWORD_CONEPTS(NoWrap) +CSS_DEFINE_KEYWORD_CONEPTS(Outset) CSS_DEFINE_KEYWORD_CONEPTS(Relative) +CSS_DEFINE_KEYWORD_CONEPTS(Ridge) CSS_DEFINE_KEYWORD_CONEPTS(Row) CSS_DEFINE_KEYWORD_CONEPTS(RowReverse) CSS_DEFINE_KEYWORD_CONEPTS(Rtl) CSS_DEFINE_KEYWORD_CONEPTS(Scroll) +CSS_DEFINE_KEYWORD_CONEPTS(Solid) CSS_DEFINE_KEYWORD_CONEPTS(SpaceAround) CSS_DEFINE_KEYWORD_CONEPTS(SpaceBetween) CSS_DEFINE_KEYWORD_CONEPTS(SpaceEvenly) @@ -212,6 +228,21 @@ constexpr std::optional parseCSSKeyword(std::string_view ident) { return KeywordT::Contents; } break; + case fnv1a("dashed"): + if constexpr (detail::hasDashed) { + return KeywordT::Dashed; + } + break; + case fnv1a("dotted"): + if constexpr (detail::hasDotted) { + return KeywordT::Dotted; + } + break; + case fnv1a("double"): + if constexpr (detail::hasDouble) { + return KeywordT::Double; + } + break; case fnv1a("end"): if constexpr (detail::hasEnd) { return KeywordT::End; @@ -241,6 +272,11 @@ constexpr std::optional parseCSSKeyword(std::string_view ident) { return KeywordT::Grid; } break; + case fnv1a("groove"): + if constexpr (detail::hasGroove) { + return KeywordT::Groove; + } + break; case fnv1a("hidden"): if constexpr (detail::hasHidden) { return KeywordT::Hidden; @@ -306,11 +342,21 @@ constexpr std::optional parseCSSKeyword(std::string_view ident) { return KeywordT::NoWrap; } break; + case fnv1a("outset"): + if constexpr (detail::hasOutset) { + return KeywordT::Outset; + } + break; case fnv1a("relative"): if constexpr (detail::hasRelative) { return KeywordT::Relative; } break; + case fnv1a("ridge"): + if constexpr (detail::hasRidge) { + return KeywordT::Ridge; + } + break; case fnv1a("row"): if constexpr (detail::hasRow) { return KeywordT::Row; @@ -346,6 +392,11 @@ constexpr std::optional parseCSSKeyword(std::string_view ident) { return KeywordT::Scroll; } break; + case fnv1a("solid"): + if constexpr (detail::hasSolid) { + return KeywordT::Solid; + } + break; case fnv1a("start"): if constexpr (detail::hasStart) { return KeywordT::Start; diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSProperties.h b/packages/react-native/ReactCommon/react/renderer/css/CSSProperties.h index ad982552bcf..067d6c2b3a1 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSProperties.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSProperties.h @@ -20,18 +20,38 @@ enum class CSSProp { AlignItems, AlignSelf, AspectRatio, + BorderBlockEndStyle, BorderBlockEndWidth, + BorderBlockStartStyle, BorderBlockStartWidth, + BorderBlockStyle, BorderBlockWidth, + BorderBottomLeftRadius, + BorderBottomRightRadius, + BorderBottomStyle, BorderBottomWidth, + BorderEndEndRadius, + BorderEndStartRadius, BorderEndWidth, BorderHorizontalWidth, + BorderInlineEndStyle, BorderInlineEndWidth, + BorderInlineStartStyle, BorderInlineStartWidth, + BorderInlineStyle, BorderInlineWidth, + BorderLeftStyle, BorderLeftWidth, + BorderRadius, + BorderRightStyle, BorderRightWidth, + BorderStartEndRadius, + BorderStartStartRadius, BorderStartWidth, + BorderStyle, + BorderTopLeftRadius, + BorderTopRightRadius, + BorderTopStyle, BorderTopWidth, BorderVerticalWidth, BorderWidth, @@ -76,6 +96,7 @@ enum class CSSProp { MaxWidth, MinHeight, MinWidth, + Opacity, Overflow, Padding, PaddingBlock, @@ -122,6 +143,12 @@ using CSSSpecifiedValue = typename CSSPropDefinition

::SpecifiedValue; template using CSSComputedValue = typename CSSPropDefinition

::ComputedValue; +struct CSSComputeContext { + bool isRTL{false}; + bool useWebDefaults{false}; + bool swapLeftAndRight{false}; +}; + /** * CSS "align-content" property. * https://www.w3.org/TR/css-flexbox-1/#align-content-property @@ -143,6 +170,15 @@ struct CSSPropDefinition { using SpecifiedValue = CSSValueVariant; using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext& ctx) { + return ctx.useWebDefaults ? SpecifiedValue::keyword(Keyword::Stretch) + : SpecifiedValue::keyword(Keyword::FlexStart); + } }; /** @@ -164,10 +200,18 @@ struct CSSPropDefinition { using SpecifiedValue = CSSValueVariant; using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext&) { + return SpecifiedValue::keyword(Keyword::Stretch); + } }; /** - * CSS "align-items" property. + * CSS "align-self" property. * https://www.w3.org/TR/css-flexbox-1/#propdef-align-self * https://www.w3.org/TR/css-align-3/#align-self-property */ @@ -186,6 +230,14 @@ struct CSSPropDefinition { using SpecifiedValue = CSSValueVariant; using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext&) { + return SpecifiedValue::keyword(Keyword::Auto); + } }; /** @@ -200,8 +252,139 @@ struct CSSPropDefinition { using SpecifiedValue = CSSValueVariant; using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext&) { + return SpecifiedValue::keyword(Keyword::Auto); + } }; +/** + * CSS "border-radius" properties + * https://www.w3.org/TR/css-backgrounds-3/#border-radius + */ +template <> +struct CSSPropDefinition { + using SpecifiedValue = + CSSValueVariant; + using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext&) { + return SpecifiedValue::length(0.0f, CSSLengthUnit::Px); + } +}; + +template <> +struct CSSPropDefinition + : CSSPropDefinition {}; + +template <> +struct CSSPropDefinition + : CSSPropDefinition {}; + +template <> +struct CSSPropDefinition + : CSSPropDefinition {}; + +template <> +struct CSSPropDefinition + : CSSPropDefinition {}; + +template <> +struct CSSPropDefinition + : CSSPropDefinition {}; + +template <> +struct CSSPropDefinition + : CSSPropDefinition {}; + +template <> +struct CSSPropDefinition + : CSSPropDefinition {}; + +template <> +struct CSSPropDefinition + : CSSPropDefinition {}; + +/** + * CSS "border-style" properties + * https://www.w3.org/TR/css-backgrounds-3/#border-style + */ +template <> +struct CSSPropDefinition { + enum class Keyword : std::underlying_type_t { + None = to_underlying(CSSKeyword::None), + Hidden = to_underlying(CSSKeyword::Hidden), + Dotted = to_underlying(CSSKeyword::Dotted), + Dashed = to_underlying(CSSKeyword::Dashed), + Solid = to_underlying(CSSKeyword::Solid), + Double = to_underlying(CSSKeyword::Double), + Groove = to_underlying(CSSKeyword::Groove), + Ridge = to_underlying(CSSKeyword::Ridge), + Inset = to_underlying(CSSKeyword::Inset), + Outset = to_underlying(CSSKeyword::Outset), + }; + + using SpecifiedValue = CSSValueVariant; + using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext& ctx) { + return ctx.useWebDefaults ? SpecifiedValue::keyword(Keyword::None) + : SpecifiedValue::keyword(Keyword::Solid); + } +}; + +template <> +struct CSSPropDefinition + : CSSPropDefinition {}; + +template <> +struct CSSPropDefinition + : CSSPropDefinition {}; + +template <> +struct CSSPropDefinition + : CSSPropDefinition {}; + +template <> +struct CSSPropDefinition + : CSSPropDefinition {}; + +template <> +struct CSSPropDefinition + : CSSPropDefinition {}; + +template <> +struct CSSPropDefinition + : CSSPropDefinition {}; + +template <> +struct CSSPropDefinition + : CSSPropDefinition {}; + +template <> +struct CSSPropDefinition + : CSSPropDefinition {}; + +template <> +struct CSSPropDefinition + : CSSPropDefinition {}; + +template <> +struct CSSPropDefinition + : CSSPropDefinition {}; + /** * CSS "border-width" properties * https://www.w3.org/TR/css-backgrounds-3/#border-width @@ -216,6 +399,15 @@ struct CSSPropDefinition { using SpecifiedValue = CSSValueVariant; using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext& ctx) { + return ctx.useWebDefaults ? SpecifiedValue::keyword(Keyword::Medium) + : SpecifiedValue::length(0.0f, CSSLengthUnit::Px); + } }; template <> @@ -287,6 +479,14 @@ struct CSSPropDefinition { using SpecifiedValue = CSSValueVariant; using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return true; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext&) { + return SpecifiedValue::keyword(Keyword::Ltr); + } }; /** @@ -309,13 +509,23 @@ struct CSSPropDefinition { using SpecifiedValue = CSSValueVariant; using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext& ctx) { + return ctx.useWebDefaults ? SpecifiedValue::keyword(Keyword::Inline) + : SpecifiedValue::keyword(Keyword::Flex); + } }; /** * CSS "flex" shorthand property. * https://www.w3.org/TR/css-flexbox-1/#flex-property * - * React Native's interpretation of this prop is currently different than in CSS + * React Native's interpretation of this prop is currently different than in + * CSS. https://reactnative.dev/docs/layout-props#flex */ template <> struct CSSPropDefinition { @@ -326,6 +536,14 @@ struct CSSPropDefinition { using SpecifiedValue = CSSValueVariant; using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext&) { + return SpecifiedValue::number(0.0f); + } }; /** @@ -342,6 +560,14 @@ struct CSSPropDefinition { using SpecifiedValue = CSSValueVariant; using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext&) { + return SpecifiedValue::keyword(Keyword::Auto); + } }; /** @@ -359,6 +585,15 @@ struct CSSPropDefinition { using SpecifiedValue = CSSValueVariant; using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext& ctx) { + return ctx.useWebDefaults ? SpecifiedValue::keyword(Keyword::Row) + : SpecifiedValue::keyword(Keyword::Column); + } }; /** @@ -369,6 +604,14 @@ template <> struct CSSPropDefinition { using SpecifiedValue = CSSValueVariant; using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext&) { + return SpecifiedValue::number(0.0f); + } }; /** @@ -379,6 +622,15 @@ template <> struct CSSPropDefinition { using SpecifiedValue = CSSValueVariant; using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext& ctx) { + return ctx.useWebDefaults ? SpecifiedValue::number(1.0f) + : SpecifiedValue::number(0.0f); + } }; /** @@ -395,6 +647,14 @@ struct CSSPropDefinition { using SpecifiedValue = CSSValueVariant; using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext&) { + return SpecifiedValue::keyword(Keyword::NoWrap); + } }; /** @@ -409,6 +669,14 @@ struct CSSPropDefinition { using SpecifiedValue = CSSValueVariant; using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext&) { + return SpecifiedValue::keyword(Keyword::Normal); + } }; template <> @@ -433,6 +701,14 @@ struct CSSPropDefinition { using SpecifiedValue = CSSValueVariant; using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext&) { + return SpecifiedValue::keyword(Keyword::Auto); + } }; template <> @@ -468,6 +744,14 @@ struct CSSPropDefinition { using SpecifiedValue = CSSValueVariant; using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext&) { + return SpecifiedValue::keyword(Keyword::Auto); + } }; template <> @@ -533,6 +817,14 @@ struct CSSPropDefinition { using SpecifiedValue = CSSValueVariant; using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext&) { + return SpecifiedValue::keyword(Keyword::FlexStart); + } }; /** @@ -548,6 +840,14 @@ struct CSSPropDefinition { using SpecifiedValue = CSSValueVariant; using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext&) { + return SpecifiedValue::length(0.0f, CSSLengthUnit::Px); + } }; template <> @@ -606,6 +906,24 @@ template <> struct CSSPropDefinition : CSSPropDefinition {}; +/** + * CSS "opacity" property + * https://www.w3.org/TR/css-color-3/#transparency + */ +template <> +struct CSSPropDefinition { + using SpecifiedValue = CSSValueVariant; + using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext&) { + return SpecifiedValue::number(1.0f); + } +}; + /** * CSS "overflow" property. * https://www.w3.org/TR/css-overflow-3/#overflow-control @@ -622,6 +940,14 @@ struct CSSPropDefinition { using SpecifiedValue = CSSValueVariant; using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext&) { + return SpecifiedValue::keyword(Keyword::Visible); + } }; /** @@ -633,6 +959,14 @@ struct CSSPropDefinition { using SpecifiedValue = CSSValueVariant; using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext&) { + return SpecifiedValue::length(0.0f, CSSLengthUnit::Px); + } }; template <> @@ -707,6 +1041,15 @@ struct CSSPropDefinition { using SpecifiedValue = CSSValueVariant; using ComputedValue = CSSValueVariant; + + constexpr static bool isInherited() { + return false; + } + + constexpr static SpecifiedValue initialValue(const CSSComputeContext& ctx) { + return ctx.useWebDefaults ? SpecifiedValue::keyword(Keyword::Static) + : SpecifiedValue::keyword(Keyword::Relative); + } }; } // namespace facebook::react