diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSColorUtils.h b/packages/react-native/ReactCommon/react/renderer/css/CSSColorUtils.h index 3eb3d1b29de..ca384138779 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSColorUtils.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSColorUtils.h @@ -12,6 +12,7 @@ #include namespace facebook::react { + // https://www.w3.org/TR/css-color-4/#named-colors template constexpr std::optional parseCSSNamedColor(std::string_view name) { @@ -298,6 +299,8 @@ constexpr std::optional parseCSSNamedColor(std::string_view name) { return CSSValueT::color(216, 191, 216, 255); case fnv1a("tomato"): return CSSValueT::color(255, 99, 71, 255); + case fnv1a("transparent"): + return CSSValueT::color(0, 0, 0, 0); case fnv1a("turquoise"): return CSSValueT::color(64, 224, 208, 255); case fnv1a("violet"): diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSValue.h b/packages/react-native/ReactCommon/react/renderer/css/CSSValue.h index 62c890c3df2..1b39c78caf5 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSValue.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSValue.h @@ -82,6 +82,10 @@ struct CSSAngle { float degrees{}; }; +/** + * Representation of CSS data type + * https://www.w3.org/TR/css-color-5/#typedef-color + */ struct CSSColor { uint8_t r{}; uint8_t g{}; diff --git a/packages/react-native/ReactCommon/react/renderer/css/tests/CSSValueParserTest.cpp b/packages/react-native/ReactCommon/react/renderer/css/tests/CSSValueParserTest.cpp index 205410af33b..5908316ba71 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/tests/CSSValueParserTest.cpp +++ b/packages/react-native/ReactCommon/react/renderer/css/tests/CSSValueParserTest.cpp @@ -415,5 +415,14 @@ TEST(CSSValueParser, named_colors) { EXPECT_EQ(namedColorMixedCaseTestValue.getColor().g, 255); EXPECT_EQ(namedColorMixedCaseTestValue.getColor().b, 127); EXPECT_EQ(namedColorMixedCaseTestValue.getColor().a, 255); + + auto transparentColor = + parseCSSValue("transparent"); + EXPECT_EQ(transparentColor.type(), CSSValueType::Color); + EXPECT_EQ(transparentColor.getColor().r, 0); + EXPECT_EQ(transparentColor.getColor().g, 0); + EXPECT_EQ(transparentColor.getColor().b, 0); + EXPECT_EQ(transparentColor.getColor().a, 0); } + } // namespace facebook::react