From 52c619ab5d98530110aceb72bbae5e2e5969dceb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Ma=C5=82ecki?= Date: Fri, 2 Oct 2026 03:59:08 -0700 Subject: [PATCH 1/4] Move leaf View parsers out of headers Summary: Move View CSS parsing implementation details for color and length coercion, box shadows, and filters from exported headers into compiled source files. Keep only the supported `coerceColor`, `coerceLength`, and `fromRawValue` declarations in public headers while preserving existing parsing behavior. Update existing conversion tests to exercise the same paths through the public entry points, and regenerate the C++ API snapshots to remove private helper declarations. Changelog: [Internal] Differential Revision: D119507169 --- .../view/BackgroundImagePropsConversions.cpp | 18 +- .../view/BoxShadowPropsConversions.cpp | 281 ++++++++++++ .../view/BoxShadowPropsConversions.h | 250 +--------- .../components/view/CSSConversions.cpp | 57 +++ .../renderer/components/view/CSSConversions.h | 81 +--- .../view/FilterPropsConversions.cpp | 434 ++++++++++++++++++ .../components/view/FilterPropsConversions.h | 353 +------------- .../components/view/tests/ConversionsTest.cpp | 91 ++-- .../api-snapshots/ReactAndroidDebugCxx.api | 17 - .../api-snapshots/ReactAndroidNewarchCxx.api | 17 - .../api-snapshots/ReactAndroidReleaseCxx.api | 17 - .../api-snapshots/ReactAppleDebugCxx.api | 17 - .../api-snapshots/ReactAppleNewarchCxx.api | 17 - .../api-snapshots/ReactAppleReleaseCxx.api | 17 - .../api-snapshots/ReactCommonDebugCxx.api | 17 - .../api-snapshots/ReactCommonNewarchCxx.api | 17 - .../api-snapshots/ReactCommonReleaseCxx.api | 17 - 17 files changed, 851 insertions(+), 867 deletions(-) create mode 100644 packages/react-native/ReactCommon/react/renderer/components/view/BoxShadowPropsConversions.cpp create mode 100644 packages/react-native/ReactCommon/react/renderer/components/view/CSSConversions.cpp create mode 100644 packages/react-native/ReactCommon/react/renderer/components/view/FilterPropsConversions.cpp diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/BackgroundImagePropsConversions.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/BackgroundImagePropsConversions.cpp index 7759acebe2a..d72c64a2548 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/BackgroundImagePropsConversions.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/BackgroundImagePropsConversions.cpp @@ -438,20 +438,32 @@ void fromCSSColorStop( // first stop with start position colorStops.push_back( ColorStop{ - .color = fromCSSColor(colorStop.color), + .color = colorFromRGBA( + colorStop.color.r, + colorStop.color.g, + colorStop.color.b, + colorStop.color.a), .position = convertLengthPercentageToValueUnit( *colorStop.startPosition)}); // second stop with end position (same color) colorStops.push_back( ColorStop{ - .color = fromCSSColor(colorStop.color), + .color = colorFromRGBA( + colorStop.color.r, + colorStop.color.g, + colorStop.color.b, + colorStop.color.a), .position = convertLengthPercentageToValueUnit(*colorStop.endPosition)}); } else { // single color stop ColorStop stop; - stop.color = fromCSSColor(colorStop.color); + stop.color = colorFromRGBA( + colorStop.color.r, + colorStop.color.g, + colorStop.color.b, + colorStop.color.a); // handle start position if present if (colorStop.startPosition.has_value()) { diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/BoxShadowPropsConversions.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/BoxShadowPropsConversions.cpp new file mode 100644 index 00000000000..f9d90fe32ce --- /dev/null +++ b/packages/react-native/ReactCommon/react/renderer/components/view/BoxShadowPropsConversions.cpp @@ -0,0 +1,281 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include "BoxShadowPropsConversions.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace facebook::react { + +namespace { + +void parseProcessedBoxShadow( + const PropsParserContext& context, + const RawValue& value, + std::vector& result) { + react_native_expect(value.hasType>()); + if (!value.hasType>()) { + result = {}; + return; + } + + std::vector boxShadows{}; + auto rawBoxShadows = static_cast>(value); + for (const auto& rawBoxShadow : rawBoxShadows) { + bool isMap = + rawBoxShadow.hasType>(); + react_native_expect(isMap); + if (!isMap) { + // If any box shadow is malformed then we should not apply any of them + // which is the web behavior. + result = {}; + return; + } + + auto rawBoxShadowMap = + static_cast>(rawBoxShadow); + BoxShadow boxShadow{}; + auto offsetX = rawBoxShadowMap.find("offsetX"); + react_native_expect(offsetX != rawBoxShadowMap.end()); + if (offsetX == rawBoxShadowMap.end()) { + result = {}; + return; + } + react_native_expect(offsetX->second.hasType()); + if (!offsetX->second.hasType()) { + result = {}; + return; + } + boxShadow.offsetX = (Float)offsetX->second; + + auto offsetY = rawBoxShadowMap.find("offsetY"); + react_native_expect(offsetY != rawBoxShadowMap.end()); + if (offsetY == rawBoxShadowMap.end()) { + result = {}; + return; + } + react_native_expect(offsetY->second.hasType()); + if (!offsetY->second.hasType()) { + result = {}; + return; + } + boxShadow.offsetY = (Float)offsetY->second; + + auto blurRadius = rawBoxShadowMap.find("blurRadius"); + if (blurRadius != rawBoxShadowMap.end()) { + react_native_expect(blurRadius->second.hasType()); + if (!blurRadius->second.hasType()) { + result = {}; + return; + } + boxShadow.blurRadius = (Float)blurRadius->second; + } + + auto spreadDistance = rawBoxShadowMap.find("spreadDistance"); + if (spreadDistance != rawBoxShadowMap.end()) { + react_native_expect(spreadDistance->second.hasType()); + if (!spreadDistance->second.hasType()) { + result = {}; + return; + } + boxShadow.spreadDistance = (Float)spreadDistance->second; + } + + auto inset = rawBoxShadowMap.find("inset"); + if (inset != rawBoxShadowMap.end()) { + react_native_expect(inset->second.hasType()); + if (!inset->second.hasType()) { + result = {}; + return; + } + boxShadow.inset = (bool)inset->second; + } + + auto color = rawBoxShadowMap.find("color"); + if (color != rawBoxShadowMap.end()) { + fromRawValue( + context.contextContainer, + context.surfaceId, + color->second, + boxShadow.color); + } + + boxShadows.push_back(boxShadow); + } + + result = boxShadows; +} + +std::optional fromCSSShadow(const CSSShadow& cssShadow) { + // TODO: handle non-px values + if (cssShadow.offsetX.unit != CSSLengthUnit::Px || + cssShadow.offsetY.unit != CSSLengthUnit::Px || + cssShadow.blurRadius.unit != CSSLengthUnit::Px || + cssShadow.spreadDistance.unit != CSSLengthUnit::Px) { + return {}; + } + + return BoxShadow{ + .offsetX = cssShadow.offsetX.value, + .offsetY = cssShadow.offsetY.value, + .blurRadius = cssShadow.blurRadius.value, + .spreadDistance = cssShadow.spreadDistance.value, + .color = colorFromRGBA( + cssShadow.color.r, + cssShadow.color.g, + cssShadow.color.b, + cssShadow.color.a), + .inset = cssShadow.inset, + }; +} + +void parseUnprocessedBoxShadowString( + std::string&& value, + std::vector& result) { + auto boxShadowList = parseCSSProperty((std::string)value); + if (!std::holds_alternative(boxShadowList)) { + result = {}; + return; + } + + for (const auto& cssShadow : std::get(boxShadowList)) { + if (auto boxShadow = fromCSSShadow(cssShadow)) { + result.push_back(*boxShadow); + } else { + result = {}; + return; + } + } +} + +std::optional parseBoxShadowRawValue( + const PropsParserContext& context, + const RawValue& value) { + if (!value.hasType>()) { + return {}; + } + + auto boxShadow = std::unordered_map(value); + auto rawOffsetX = boxShadow.find("offsetX"); + if (rawOffsetX == boxShadow.end()) { + return {}; + } + auto offsetX = coerceLength(rawOffsetX->second); + if (!offsetX.has_value()) { + return {}; + } + + auto rawOffsetY = boxShadow.find("offsetY"); + if (rawOffsetY == boxShadow.end()) { + return {}; + } + auto offsetY = coerceLength(rawOffsetY->second); + if (!offsetY.has_value()) { + return {}; + } + + Float blurRadius = 0; + auto rawBlurRadius = boxShadow.find("blurRadius"); + if (rawBlurRadius != boxShadow.end()) { + if (auto blurRadiusValue = coerceLength(rawBlurRadius->second)) { + if (*blurRadiusValue < 0) { + return {}; + } + blurRadius = *blurRadiusValue; + } else { + return {}; + } + } + + Float spreadDistance = 0; + auto rawSpreadDistance = boxShadow.find("spreadDistance"); + if (rawSpreadDistance != boxShadow.end()) { + if (auto spreadDistanceValue = coerceLength(rawSpreadDistance->second)) { + spreadDistance = *spreadDistanceValue; + } else { + return {}; + } + } + + bool inset = false; + auto rawInset = boxShadow.find("inset"); + if (rawInset != boxShadow.end()) { + if (rawInset->second.hasType()) { + inset = (bool)rawInset->second; + } else { + return {}; + } + } + + SharedColor color; + auto rawColor = boxShadow.find("color"); + if (rawColor != boxShadow.end()) { + color = coerceColor(rawColor->second, context); + if (!color) { + return {}; + } + } + + return BoxShadow{ + .offsetX = *offsetX, + .offsetY = *offsetY, + .blurRadius = blurRadius, + .spreadDistance = spreadDistance, + .color = color, + .inset = inset}; +} + +void parseUnprocessedBoxShadowList( + const PropsParserContext& context, + std::vector&& value, + std::vector& result) { + for (const auto& rawValue : value) { + if (auto boxShadow = parseBoxShadowRawValue(context, rawValue)) { + result.push_back(*boxShadow); + } else { + result = {}; + return; + } + } +} + +void parseUnprocessedBoxShadow( + const PropsParserContext& context, + const RawValue& value, + std::vector& result) { + if (value.hasType()) { + parseUnprocessedBoxShadowString((std::string)value, result); + } else if (value.hasType>()) { + parseUnprocessedBoxShadowList( + context, (std::vector)value, result); + } else { + result = {}; + } +} + +} // namespace + +void fromRawValue( + const PropsParserContext& context, + const RawValue& value, + std::vector& result) { + if (ReactNativeFeatureFlags::enableNativeCSSParsing()) { + parseUnprocessedBoxShadow(context, value, result); + } else { + parseProcessedBoxShadow(context, value, result); + } +} + +} // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/BoxShadowPropsConversions.h b/packages/react-native/ReactCommon/react/renderer/components/view/BoxShadowPropsConversions.h index a31e08d5713..671c9eb2389 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/BoxShadowPropsConversions.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/BoxShadowPropsConversions.h @@ -9,257 +9,13 @@ #include -#include -#include -#include -#include #include -#include -#include -#include +#include #include -#include -#include -#include +#include namespace facebook::react { -inline void -parseProcessedBoxShadow(const PropsParserContext &context, const RawValue &value, std::vector &result) -{ - react_native_expect(value.hasType>()); - if (!value.hasType>()) { - result = {}; - return; - } - - std::vector boxShadows{}; - auto rawBoxShadows = static_cast>(value); - for (const auto &rawBoxShadow : rawBoxShadows) { - bool isMap = rawBoxShadow.hasType>(); - react_native_expect(isMap); - if (!isMap) { - // If any box shadow is malformed then we should not apply any of them - // which is the web behavior. - result = {}; - return; - } - - auto rawBoxShadowMap = static_cast>(rawBoxShadow); - BoxShadow boxShadow{}; - auto offsetX = rawBoxShadowMap.find("offsetX"); - react_native_expect(offsetX != rawBoxShadowMap.end()); - if (offsetX == rawBoxShadowMap.end()) { - result = {}; - return; - } - react_native_expect(offsetX->second.hasType()); - if (!offsetX->second.hasType()) { - result = {}; - return; - } - boxShadow.offsetX = (Float)offsetX->second; - - auto offsetY = rawBoxShadowMap.find("offsetY"); - react_native_expect(offsetY != rawBoxShadowMap.end()); - if (offsetY == rawBoxShadowMap.end()) { - result = {}; - return; - } - react_native_expect(offsetY->second.hasType()); - if (!offsetY->second.hasType()) { - result = {}; - return; - } - boxShadow.offsetY = (Float)offsetY->second; - - auto blurRadius = rawBoxShadowMap.find("blurRadius"); - if (blurRadius != rawBoxShadowMap.end()) { - react_native_expect(blurRadius->second.hasType()); - if (!blurRadius->second.hasType()) { - result = {}; - return; - } - boxShadow.blurRadius = (Float)blurRadius->second; - } - - auto spreadDistance = rawBoxShadowMap.find("spreadDistance"); - if (spreadDistance != rawBoxShadowMap.end()) { - react_native_expect(spreadDistance->second.hasType()); - if (!spreadDistance->second.hasType()) { - result = {}; - return; - } - boxShadow.spreadDistance = (Float)spreadDistance->second; - } - - auto inset = rawBoxShadowMap.find("inset"); - if (inset != rawBoxShadowMap.end()) { - react_native_expect(inset->second.hasType()); - if (!inset->second.hasType()) { - result = {}; - return; - } - boxShadow.inset = (bool)inset->second; - } - - auto color = rawBoxShadowMap.find("color"); - if (color != rawBoxShadowMap.end()) { - fromRawValue(context.contextContainer, context.surfaceId, color->second, boxShadow.color); - } - - boxShadows.push_back(boxShadow); - } - - result = boxShadows; -} - -inline std::optional fromCSSShadow(const CSSShadow &cssShadow) -{ - // TODO: handle non-px values - if (cssShadow.offsetX.unit != CSSLengthUnit::Px || cssShadow.offsetY.unit != CSSLengthUnit::Px || - cssShadow.blurRadius.unit != CSSLengthUnit::Px || cssShadow.spreadDistance.unit != CSSLengthUnit::Px) { - return {}; - } - - return BoxShadow{ - .offsetX = cssShadow.offsetX.value, - .offsetY = cssShadow.offsetY.value, - .blurRadius = cssShadow.blurRadius.value, - .spreadDistance = cssShadow.spreadDistance.value, - .color = fromCSSColor(cssShadow.color), - .inset = cssShadow.inset, - }; -} - -inline void parseUnprocessedBoxShadowString(std::string &&value, std::vector &result) -{ - auto boxShadowList = parseCSSProperty((std::string)value); - if (!std::holds_alternative(boxShadowList)) { - result = {}; - return; - } - - for (const auto &cssShadow : std::get(boxShadowList)) { - if (auto boxShadow = fromCSSShadow(cssShadow)) { - result.push_back(*boxShadow); - } else { - result = {}; - return; - } - } -} - -inline std::optional parseBoxShadowRawValue(const PropsParserContext &context, const RawValue &value) -{ - if (!value.hasType>()) { - return {}; - } - - auto boxShadow = std::unordered_map(value); - auto rawOffsetX = boxShadow.find("offsetX"); - if (rawOffsetX == boxShadow.end()) { - return {}; - } - auto offsetX = coerceLength(rawOffsetX->second); - if (!offsetX.has_value()) { - return {}; - } - - auto rawOffsetY = boxShadow.find("offsetY"); - if (rawOffsetY == boxShadow.end()) { - return {}; - } - auto offsetY = coerceLength(rawOffsetY->second); - if (!offsetY.has_value()) { - return {}; - } - - Float blurRadius = 0; - auto rawBlurRadius = boxShadow.find("blurRadius"); - if (rawBlurRadius != boxShadow.end()) { - if (auto blurRadiusValue = coerceLength(rawBlurRadius->second)) { - if (*blurRadiusValue < 0) { - return {}; - } - blurRadius = *blurRadiusValue; - } else { - return {}; - } - } - - Float spreadDistance = 0; - auto rawSpreadDistance = boxShadow.find("spreadDistance"); - if (rawSpreadDistance != boxShadow.end()) { - if (auto spreadDistanceValue = coerceLength(rawSpreadDistance->second)) { - spreadDistance = *spreadDistanceValue; - } else { - return {}; - } - } - - bool inset = false; - auto rawInset = boxShadow.find("inset"); - if (rawInset != boxShadow.end()) { - if (rawInset->second.hasType()) { - inset = (bool)rawInset->second; - } else { - return {}; - } - } - - SharedColor color; - auto rawColor = boxShadow.find("color"); - if (rawColor != boxShadow.end()) { - color = coerceColor(rawColor->second, context); - if (!color) { - return {}; - } - } - - return BoxShadow{ - .offsetX = *offsetX, - .offsetY = *offsetY, - .blurRadius = blurRadius, - .spreadDistance = spreadDistance, - .color = color, - .inset = inset}; -} - -inline void parseUnprocessedBoxShadowList( - const PropsParserContext &context, - std::vector &&value, - std::vector &result) -{ - for (const auto &rawValue : value) { - if (auto boxShadow = parseBoxShadowRawValue(context, rawValue)) { - result.push_back(*boxShadow); - } else { - result = {}; - return; - } - } -} - -inline void -parseUnprocessedBoxShadow(const PropsParserContext &context, const RawValue &value, std::vector &result) -{ - if (value.hasType()) { - parseUnprocessedBoxShadowString((std::string)value, result); - } else if (value.hasType>()) { - parseUnprocessedBoxShadowList(context, (std::vector)value, result); - } else { - result = {}; - } -} - -inline void fromRawValue(const PropsParserContext &context, const RawValue &value, std::vector &result) -{ - if (ReactNativeFeatureFlags_DO_NOT_USE::enableNativeCSSParsing()) { - parseUnprocessedBoxShadow(context, value, result); - } else { - parseProcessedBoxShadow(context, value, result); - } -} +void fromRawValue(const PropsParserContext &context, const RawValue &value, std::vector &result); } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/CSSConversions.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/CSSConversions.cpp new file mode 100644 index 00000000000..e258f165c15 --- /dev/null +++ b/packages/react-native/ReactCommon/react/renderer/components/view/CSSConversions.cpp @@ -0,0 +1,57 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include "CSSConversions.h" + +#include +#include +#include +#include + +namespace facebook::react { + +SharedColor coerceColor( + const RawValue& value, + const PropsParserContext& context) { + if (value.hasType()) { + auto cssColor = parseCSSProperty((std::string)value); + if (!std::holds_alternative(cssColor)) { + return {}; + } + + const auto& color = std::get(cssColor); + return colorFromRGBA(color.r, color.g, color.b, color.a); + } + + SharedColor color; + fromRawValue(context.contextContainer, context.surfaceId, value, color); + return color; +} + +std::optional coerceLength(const RawValue& value) { + if (value.hasType()) { + return (Float)value; + } + + if (value.hasType()) { + auto length = parseCSSProperty((std::string)value); + if (!std::holds_alternative(length)) { + return {}; + } + + auto cssLength = std::get(length); + if (cssLength.unit != CSSLengthUnit::Px) { + return {}; + } + + return cssLength.value; + } + + return {}; +} + +} // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/CSSConversions.h b/packages/react-native/ReactCommon/react/renderer/components/view/CSSConversions.h index ae3bf593b62..c29346ca990 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/CSSConversions.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/CSSConversions.h @@ -11,89 +11,14 @@ #include #include -#include -#include -#include -#include -#include -#include #include #include +#include namespace facebook::react { -inline SharedColor fromCSSColor(const CSSColor &cssColor) -{ - return hostPlatformColorFromRGBA(cssColor.r, cssColor.g, cssColor.b, cssColor.a); -} +SharedColor coerceColor(const RawValue &value, const PropsParserContext &context); -inline std::optional coerceAmount(const RawValue &value) -{ - if (value.hasType()) { - return (Float)value; - } - - if (value.hasType()) { - auto cssVal = parseCSSProperty((std::string)value); - if (std::holds_alternative(cssVal)) { - return std::get(cssVal).value; - } else if (std::holds_alternative(cssVal)) { - return std::get(cssVal).value / 100.0f; - } - } - return {}; -} - -inline std::optional coerceAngle(const RawValue &value) -{ - if (value.hasType()) { - return (Float)value; - } - - if (value.hasType()) { - auto cssVal = parseCSSProperty((std::string)value); - if (std::holds_alternative(cssVal)) { - return std::get(cssVal).degrees; - } - } - return {}; -} - -inline SharedColor coerceColor(const RawValue &value, const PropsParserContext &context) -{ - if (value.hasType()) { - auto cssColor = parseCSSProperty((std::string)value); - if (!std::holds_alternative(cssColor)) { - return {}; - } - return fromCSSColor(std::get(cssColor)); - } - - SharedColor color; - fromRawValue(context.contextContainer, context.surfaceId, value, color); - return color; -} - -inline std::optional coerceLength(const RawValue &value) -{ - if (value.hasType()) { - return (Float)value; - } - - if (value.hasType()) { - auto len = parseCSSProperty((std::string)value); - if (!std::holds_alternative(len)) { - return {}; - } - - auto cssLen = std::get(len); - if (cssLen.unit != CSSLengthUnit::Px) { - return {}; - } - - return cssLen.value; - } - return {}; -} +std::optional coerceLength(const RawValue &value); } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/FilterPropsConversions.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/FilterPropsConversions.cpp new file mode 100644 index 00000000000..388a51925f5 --- /dev/null +++ b/packages/react-native/ReactCommon/react/renderer/components/view/FilterPropsConversions.cpp @@ -0,0 +1,434 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include "FilterPropsConversions.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace facebook::react { + +namespace { + +std::optional coerceAmount(const RawValue& value) { + if (value.hasType()) { + return (Float)value; + } + + if (value.hasType()) { + auto cssValue = + parseCSSProperty((std::string)value); + if (std::holds_alternative(cssValue)) { + return std::get(cssValue).value; + } + if (std::holds_alternative(cssValue)) { + return std::get(cssValue).value / 100.0f; + } + } + + return {}; +} + +std::optional coerceAngle(const RawValue& value) { + if (value.hasType()) { + return (Float)value; + } + + if (value.hasType()) { + auto cssValue = parseCSSProperty((std::string)value); + if (std::holds_alternative(cssValue)) { + return std::get(cssValue).degrees; + } + } + + return {}; +} + +void parseProcessedFilter( + const PropsParserContext& context, + const RawValue& value, + std::vector& result) { + react_native_expect(value.hasType>()); + if (!value.hasType>()) { + result = {}; + return; + } + + std::vector filter{}; + auto rawFilter = static_cast>(value); + for (const auto& rawFilterPrimitive : rawFilter) { + bool isMap = + rawFilterPrimitive.hasType>(); + react_native_expect(isMap); + if (!isMap) { + // If a filter is malformed then we should not apply any of them which + // is the web behavior. + result = {}; + return; + } + + auto rawFilterFunction = + static_cast>( + rawFilterPrimitive); + FilterFunction filterFunction{}; + auto filterType = filterTypeFromString(rawFilterFunction.begin()->first); + if (!filterType.has_value()) { + LOG(ERROR) << "Could not parse FilterFunction: " + << rawFilterFunction.begin()->first; + result = {}; + return; + } + filterFunction.type = *filterType; + if (filterFunction.type == FilterType::DropShadow) { + auto rawDropShadow = + static_cast>( + rawFilterFunction.begin()->second); + DropShadowParams dropShadowParams{}; + + auto offsetX = rawDropShadow.find("offsetX"); + react_native_expect(offsetX != rawDropShadow.end()); + if (offsetX == rawDropShadow.end()) { + result = {}; + return; + } + + react_native_expect(offsetX->second.hasType()); + if (!offsetX->second.hasType()) { + result = {}; + return; + } + dropShadowParams.offsetX = (Float)offsetX->second; + + auto offsetY = rawDropShadow.find("offsetY"); + react_native_expect(offsetY != rawDropShadow.end()); + if (offsetY == rawDropShadow.end()) { + result = {}; + return; + } + react_native_expect(offsetY->second.hasType()); + if (!offsetY->second.hasType()) { + result = {}; + return; + } + dropShadowParams.offsetY = (Float)offsetY->second; + + auto standardDeviation = rawDropShadow.find("standardDeviation"); + if (standardDeviation != rawDropShadow.end()) { + react_native_expect(standardDeviation->second.hasType()); + if (!standardDeviation->second.hasType()) { + result = {}; + return; + } + dropShadowParams.standardDeviation = (Float)standardDeviation->second; + } + + auto color = rawDropShadow.find("color"); + if (color != rawDropShadow.end()) { + fromRawValue( + context.contextContainer, + context.surfaceId, + color->second, + dropShadowParams.color); + } + + filterFunction.parameters = dropShadowParams; + } else { + filterFunction.parameters = (float)rawFilterFunction.begin()->second; + } + filter.push_back(filterFunction); + } + + result = filter; +} + +FilterType filterTypeFromVariant(const CSSFilterFunction& filter) { + return std::visit( + [](auto&& filter) -> FilterType { + using FilterT = std::decay_t; + + if constexpr (std::is_same_v) { + return FilterType::Blur; + } + if constexpr (std::is_same_v) { + return FilterType::Brightness; + } + if constexpr (std::is_same_v) { + return FilterType::Contrast; + } + if constexpr (std::is_same_v) { + return FilterType::DropShadow; + } + if constexpr (std::is_same_v) { + return FilterType::Grayscale; + } + if constexpr (std::is_same_v) { + return FilterType::HueRotate; + } + if constexpr (std::is_same_v) { + return FilterType::Invert; + } + if constexpr (std::is_same_v) { + return FilterType::Opacity; + } + if constexpr (std::is_same_v) { + return FilterType::Saturate; + } + if constexpr (std::is_same_v) { + return FilterType::Sepia; + } + }, + filter); +} + +std::optional fromCSSFilter( + const CSSFilterFunction& cssFilter) { + return std::visit( + [&](auto&& filter) -> std::optional { + using FilterT = std::decay_t; + + if constexpr (std::is_same_v) { + // TODO: support non-px values + if (filter.amount.unit != CSSLengthUnit::Px) { + return {}; + } + return FilterFunction{ + .type = filterTypeFromVariant(cssFilter), + .parameters = filter.amount.value, + }; + } + + if constexpr (std::is_same_v) { + // TODO: support non-px values + if (filter.offsetX.unit != CSSLengthUnit::Px || + filter.offsetY.unit != CSSLengthUnit::Px || + filter.standardDeviation.unit != CSSLengthUnit::Px) { + return {}; + } + + return FilterFunction{ + .type = FilterType::DropShadow, + .parameters = DropShadowParams{ + .offsetX = filter.offsetX.value, + .offsetY = filter.offsetY.value, + .standardDeviation = filter.standardDeviation.value, + .color = colorFromRGBA( + filter.color.r, + filter.color.g, + filter.color.b, + filter.color.a), + }}; + } + + if constexpr ( + std::is_same_v || + std::is_same_v || + std::is_same_v || + std::is_same_v || + std::is_same_v || + std::is_same_v || + std::is_same_v) { + return FilterFunction{ + .type = filterTypeFromVariant(cssFilter), + .parameters = filter.amount, + }; + } + + if constexpr (std::is_same_v) { + return FilterFunction{ + .type = filterTypeFromVariant(cssFilter), + .parameters = filter.degrees, + }; + } + }, + cssFilter); +} + +void parseUnprocessedFilterString( + std::string&& value, + std::vector& result) { + auto filterList = parseCSSProperty((std::string)value); + if (!std::holds_alternative(filterList)) { + result = {}; + return; + } + + for (const auto& cssFilter : std::get(filterList)) { + if (auto filter = fromCSSFilter(cssFilter)) { + result.push_back(*filter); + } else { + result = {}; + return; + } + } +} + +std::optional parseDropShadow( + const PropsParserContext& context, + const RawValue& value) { + if (value.hasType()) { + auto val = parseCSSProperty( + std::string("drop-shadow(") + (std::string)value + ")"); + if (std::holds_alternative(val)) { + return fromCSSFilter(std::get(val)); + } + return {}; + } + + if (!value.hasType>()) { + return {}; + } + auto rawDropShadow = + static_cast>(value); + + DropShadowParams dropShadowParams{}; + + auto offsetX = rawDropShadow.find("offsetX"); + if (offsetX == rawDropShadow.end()) { + return {}; + } + + if (auto parsedOffsetX = coerceLength(offsetX->second)) { + dropShadowParams.offsetX = *parsedOffsetX; + } else { + return {}; + } + + auto offsetY = rawDropShadow.find("offsetY"); + if (offsetY == rawDropShadow.end()) { + return {}; + } + + if (auto parsedOffsetY = coerceLength(offsetY->second)) { + dropShadowParams.offsetY = *parsedOffsetY; + } else { + return {}; + } + + auto standardDeviation = rawDropShadow.find("standardDeviation"); + if (standardDeviation != rawDropShadow.end()) { + if (auto parsedStandardDeviation = + coerceLength(standardDeviation->second)) { + if (*parsedStandardDeviation < 0.0f) { + return {}; + } + dropShadowParams.standardDeviation = *parsedStandardDeviation; + } else { + return {}; + } + } + + auto color = rawDropShadow.find("color"); + if (color != rawDropShadow.end()) { + if (auto parsedColor = coerceColor(color->second, context)) { + dropShadowParams.color = *parsedColor; + } else { + return {}; + } + } + + return FilterFunction{ + .type = FilterType::DropShadow, .parameters = dropShadowParams}; +} + +std::optional parseFilterRawValue( + const PropsParserContext& context, + const RawValue& value) { + if (!value.hasType>()) { + return {}; + } + auto rawFilter = + static_cast>(value); + + if (rawFilter.size() != 1) { + return {}; + } + + const auto& filterKey = rawFilter.begin()->first; + + if (filterKey == "drop-shadow") { + return parseDropShadow(context, rawFilter.begin()->second); + } else if (filterKey == "blur") { + if (auto length = coerceLength(rawFilter.begin()->second)) { + if (*length < 0.0f) { + return {}; + } + return FilterFunction{.type = FilterType::Blur, .parameters = *length}; + } + return {}; + } else if (filterKey == "hue-rotate") { + if (auto angle = coerceAngle(rawFilter.begin()->second)) { + return FilterFunction{ + .type = FilterType::HueRotate, .parameters = *angle}; + } + return {}; + } else { + auto filterType = filterTypeFromString(filterKey); + if (!filterType.has_value()) { + return {}; + } + if (auto amount = coerceAmount(rawFilter.begin()->second)) { + if (*amount < 0.0f) { + return {}; + } + return FilterFunction{.type = *filterType, .parameters = *amount}; + } + return {}; + } +} + +void parseUnprocessedFilterList( + const PropsParserContext& context, + std::vector&& value, + std::vector& result) { + for (const auto& rawValue : value) { + if (auto Filter = parseFilterRawValue(context, rawValue)) { + result.push_back(*Filter); + } else { + result = {}; + return; + } + } +} + +void parseUnprocessedFilter( + const PropsParserContext& context, + const RawValue& value, + std::vector& result) { + if (value.hasType()) { + parseUnprocessedFilterString((std::string)value, result); + } else if (value.hasType>()) { + parseUnprocessedFilterList(context, (std::vector)value, result); + } else { + result = {}; + } +} + +} // namespace + +void fromRawValue( + const PropsParserContext& context, + const RawValue& value, + std::vector& result) { + if (ReactNativeFeatureFlags::enableNativeCSSParsing()) { + parseUnprocessedFilter(context, value, result); + } else { + parseProcessedFilter(context, value, result); + } +} + +} // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/FilterPropsConversions.h b/packages/react-native/ReactCommon/react/renderer/components/view/FilterPropsConversions.h index 2a35234576c..657b9078171 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/FilterPropsConversions.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/FilterPropsConversions.h @@ -9,360 +9,13 @@ #include -#include -#include -#include -#include #include -#include -#include -#include +#include #include -#include -#include -#include +#include namespace facebook::react { -inline void -parseProcessedFilter(const PropsParserContext &context, const RawValue &value, std::vector &result) -{ - react_native_expect(value.hasType>()); - if (!value.hasType>()) { - result = {}; - return; - } - - std::vector filter{}; - auto rawFilter = static_cast>(value); - for (const auto &rawFilterPrimitive : rawFilter) { - bool isMap = rawFilterPrimitive.hasType>(); - react_native_expect(isMap); - if (!isMap) { - // If a filter is malformed then we should not apply any of them which - // is the web behavior. - result = {}; - return; - } - - auto rawFilterFunction = static_cast>(rawFilterPrimitive); - FilterFunction filterFunction{}; - auto filterType = filterTypeFromString(rawFilterFunction.begin()->first); - if (!filterType.has_value()) { - LOG(ERROR) << "Could not parse FilterFunction: " << rawFilterFunction.begin()->first; - result = {}; - return; - } - filterFunction.type = *filterType; - if (filterFunction.type == FilterType::DropShadow) { - auto rawDropShadow = static_cast>(rawFilterFunction.begin()->second); - DropShadowParams dropShadowParams{}; - - auto offsetX = rawDropShadow.find("offsetX"); - react_native_expect(offsetX != rawDropShadow.end()); - if (offsetX == rawDropShadow.end()) { - result = {}; - return; - } - - react_native_expect(offsetX->second.hasType()); - if (!offsetX->second.hasType()) { - result = {}; - return; - } - dropShadowParams.offsetX = (Float)offsetX->second; - - auto offsetY = rawDropShadow.find("offsetY"); - react_native_expect(offsetY != rawDropShadow.end()); - if (offsetY == rawDropShadow.end()) { - result = {}; - return; - } - react_native_expect(offsetY->second.hasType()); - if (!offsetY->second.hasType()) { - result = {}; - return; - } - dropShadowParams.offsetY = (Float)offsetY->second; - - auto standardDeviation = rawDropShadow.find("standardDeviation"); - if (standardDeviation != rawDropShadow.end()) { - react_native_expect(standardDeviation->second.hasType()); - if (!standardDeviation->second.hasType()) { - result = {}; - return; - } - dropShadowParams.standardDeviation = (Float)standardDeviation->second; - } - - auto color = rawDropShadow.find("color"); - if (color != rawDropShadow.end()) { - fromRawValue(context.contextContainer, context.surfaceId, color->second, dropShadowParams.color); - } - - filterFunction.parameters = dropShadowParams; - } else { - filterFunction.parameters = (float)rawFilterFunction.begin()->second; - } - filter.push_back(filterFunction); - } - - result = filter; -} - -inline FilterType filterTypeFromVariant(const CSSFilterFunction &filter) -{ - return std::visit( - [](auto &&filter) -> FilterType { - using FilterT = std::decay_t; - - if constexpr (std::is_same_v) { - return FilterType::Blur; - } - if constexpr (std::is_same_v) { - return FilterType::Brightness; - } - if constexpr (std::is_same_v) { - return FilterType::Contrast; - } - if constexpr (std::is_same_v) { - return FilterType::DropShadow; - } - if constexpr (std::is_same_v) { - return FilterType::Grayscale; - } - if constexpr (std::is_same_v) { - return FilterType::HueRotate; - } - if constexpr (std::is_same_v) { - return FilterType::Invert; - } - if constexpr (std::is_same_v) { - return FilterType::Opacity; - } - if constexpr (std::is_same_v) { - return FilterType::Saturate; - } - if constexpr (std::is_same_v) { - return FilterType::Sepia; - } - }, - filter); -} - -inline std::optional fromCSSFilter(const CSSFilterFunction &cssFilter) -{ - return std::visit( - [&](auto &&filter) -> std::optional { - using FilterT = std::decay_t; - - if constexpr (std::is_same_v) { - // TODO: support non-px values - if (filter.amount.unit != CSSLengthUnit::Px) { - return {}; - } - return FilterFunction{ - .type = filterTypeFromVariant(cssFilter), - .parameters = filter.amount.value, - }; - } - - if constexpr (std::is_same_v) { - // TODO: support non-px values - if (filter.offsetX.unit != CSSLengthUnit::Px || filter.offsetY.unit != CSSLengthUnit::Px || - filter.standardDeviation.unit != CSSLengthUnit::Px) { - return {}; - } - - return FilterFunction{ - .type = FilterType::DropShadow, - .parameters = DropShadowParams{ - .offsetX = filter.offsetX.value, - .offsetY = filter.offsetY.value, - .standardDeviation = filter.standardDeviation.value, - .color = fromCSSColor(filter.color), - }}; - } - - if constexpr ( - std::is_same_v || std::is_same_v || - std::is_same_v || std::is_same_v || - std::is_same_v || std::is_same_v || - std::is_same_v) { - return FilterFunction{ - .type = filterTypeFromVariant(cssFilter), - .parameters = filter.amount, - }; - } - - if constexpr (std::is_same_v) { - return FilterFunction{ - .type = filterTypeFromVariant(cssFilter), - .parameters = filter.degrees, - }; - } - }, - cssFilter); -} - -inline void parseUnprocessedFilterString(std::string &&value, std::vector &result) -{ - auto filterList = parseCSSProperty((std::string)value); - if (!std::holds_alternative(filterList)) { - result = {}; - return; - } - - for (const auto &cssFilter : std::get(filterList)) { - if (auto filter = fromCSSFilter(cssFilter)) { - result.push_back(*filter); - } else { - result = {}; - return; - } - } -} - -inline std::optional parseDropShadow(const PropsParserContext &context, const RawValue &value) -{ - if (value.hasType()) { - auto val = parseCSSProperty(std::string("drop-shadow(") + (std::string)value + ")"); - if (std::holds_alternative(val)) { - return fromCSSFilter(std::get(val)); - } - return {}; - } - - if (!value.hasType>()) { - return {}; - } - auto rawDropShadow = static_cast>(value); - - DropShadowParams dropShadowParams{}; - - auto offsetX = rawDropShadow.find("offsetX"); - if (offsetX == rawDropShadow.end()) { - return {}; - } - - if (auto parsedOffsetX = coerceLength(offsetX->second)) { - dropShadowParams.offsetX = *parsedOffsetX; - } else { - return {}; - } - - auto offsetY = rawDropShadow.find("offsetY"); - if (offsetY == rawDropShadow.end()) { - return {}; - } - - if (auto parsedOffsetY = coerceLength(offsetY->second)) { - dropShadowParams.offsetY = *parsedOffsetY; - } else { - return {}; - } - - auto standardDeviation = rawDropShadow.find("standardDeviation"); - if (standardDeviation != rawDropShadow.end()) { - if (auto parsedStandardDeviation = coerceLength(standardDeviation->second)) { - if (*parsedStandardDeviation < 0.0f) { - return {}; - } - dropShadowParams.standardDeviation = *parsedStandardDeviation; - } else { - return {}; - } - } - - auto color = rawDropShadow.find("color"); - if (color != rawDropShadow.end()) { - if (auto parsedColor = coerceColor(color->second, context)) { - dropShadowParams.color = *parsedColor; - } else { - return {}; - } - } - - return FilterFunction{.type = FilterType::DropShadow, .parameters = dropShadowParams}; -} - -inline std::optional parseFilterRawValue(const PropsParserContext &context, const RawValue &value) -{ - if (!value.hasType>()) { - return {}; - } - auto rawFilter = static_cast>(value); - - if (rawFilter.size() != 1) { - return {}; - } - - const auto &filterKey = rawFilter.begin()->first; - - if (filterKey == "drop-shadow") { - return parseDropShadow(context, rawFilter.begin()->second); - } else if (filterKey == "blur") { - if (auto length = coerceLength(rawFilter.begin()->second)) { - if (*length < 0.0f) { - return {}; - } - return FilterFunction{.type = FilterType::Blur, .parameters = *length}; - } - return {}; - } else if (filterKey == "hue-rotate") { - if (auto angle = coerceAngle(rawFilter.begin()->second)) { - return FilterFunction{.type = FilterType::HueRotate, .parameters = *angle}; - } - return {}; - } else { - auto filterType = filterTypeFromString(filterKey); - if (!filterType.has_value()) { - return {}; - } - if (auto amount = coerceAmount(rawFilter.begin()->second)) { - if (*amount < 0.0f) { - return {}; - } - return FilterFunction{.type = *filterType, .parameters = *amount}; - } - return {}; - } -} - -inline void parseUnprocessedFilterList( - const PropsParserContext &context, - std::vector &&value, - std::vector &result) -{ - for (const auto &rawValue : value) { - if (auto Filter = parseFilterRawValue(context, rawValue)) { - result.push_back(*Filter); - } else { - result = {}; - return; - } - } -} - -inline void -parseUnprocessedFilter(const PropsParserContext &context, const RawValue &value, std::vector &result) -{ - if (value.hasType()) { - parseUnprocessedFilterString((std::string)value, result); - } else if (value.hasType>()) { - parseUnprocessedFilterList(context, (std::vector)value, result); - } else { - result = {}; - } -} - -inline void fromRawValue(const PropsParserContext &context, const RawValue &value, std::vector &result) -{ - if (ReactNativeFeatureFlags_DO_NOT_USE::enableNativeCSSParsing()) { - parseUnprocessedFilter(context, value, result); - } else { - parseProcessedFilter(context, value, result); - } -} +void fromRawValue(const PropsParserContext &context, const RawValue &value, std::vector &result); } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/tests/ConversionsTest.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/tests/ConversionsTest.cpp index 4b704c2b17f..07d1839a4c0 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/tests/ConversionsTest.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/tests/ConversionsTest.cpp @@ -6,9 +6,12 @@ */ #include +#include #include +#include +#include #include #include #include @@ -17,6 +20,30 @@ namespace facebook::react { +namespace { + +class NativeCSSParsingEnabledFlags : public ReactNativeFeatureFlagsDefaults { + public: + bool enableNativeCSSParsing() override { + return true; + } +}; + +class NativeCSSConversionsTest : public ::testing::Test { + protected: + void SetUp() override { + ReactNativeFeatureFlags::dangerouslyReset(); + ReactNativeFeatureFlags::override( + std::make_unique()); + } + + void TearDown() override { + ReactNativeFeatureFlags::dangerouslyReset(); + } +}; + +} // namespace + TEST(ConversionsTest, accessibility_roles_round_trip) { struct AccessibilityRoleTestCase { AccessibilityRole role; @@ -122,13 +149,12 @@ TEST(ConversionsTest, accessibility_roles_round_trip) { } } -TEST(ConversionsTest, unprocessed_box_shadow_string) { +TEST_F(NativeCSSConversionsTest, unprocessed_box_shadow_string) { RawValue value{ folly::dynamic("10px 2px 0 5px #fff, inset 20px 10px 5px 0 #000")}; std::vector boxShadows; - parseUnprocessedBoxShadow( - PropsParserContext{-1, ContextContainer{}}, value, boxShadows); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, boxShadows); EXPECT_EQ(boxShadows.size(), 2); EXPECT_EQ(boxShadows[0].offsetX, 10); @@ -146,7 +172,7 @@ TEST(ConversionsTest, unprocessed_box_shadow_string) { EXPECT_TRUE(boxShadows[1].inset); } -TEST(ConversionsTest, unprocessed_box_shadow_objects) { +TEST_F(NativeCSSConversionsTest, unprocessed_box_shadow_objects) { RawValue value{folly::dynamic::array( folly::dynamic::object("offsetX", 10)("offsetY", 2)("blurRadius", 3)( "spreadDistance", 5), @@ -154,8 +180,7 @@ TEST(ConversionsTest, unprocessed_box_shadow_objects) { "color", "#fff")("inset", true))}; std::vector boxShadows; - parseUnprocessedBoxShadow( - PropsParserContext{-1, ContextContainer{}}, value, boxShadows); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, boxShadows); EXPECT_EQ(boxShadows.size(), 2); EXPECT_EQ(boxShadows[0].offsetX, 10); @@ -173,37 +198,34 @@ TEST(ConversionsTest, unprocessed_box_shadow_objects) { EXPECT_TRUE(boxShadows[1].inset); } -TEST(ConversionsTest, unprocessed_box_object_invalid_color) { +TEST_F(NativeCSSConversionsTest, unprocessed_box_object_invalid_color) { RawValue value{folly::dynamic::array( folly::dynamic::object("offsetX", 10)("offsetY", 2)("blurRadius", 3)( "spreadDistance", 5)("color", "hello"))}; std::vector boxShadows; - parseUnprocessedBoxShadow( - PropsParserContext{-1, ContextContainer{}}, value, boxShadows); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, boxShadows); EXPECT_TRUE(boxShadows.empty()); } -TEST(ConversionsTest, unprocessed_box_object_negative_blur) { +TEST_F(NativeCSSConversionsTest, unprocessed_box_object_negative_blur) { RawValue value{folly::dynamic::array( folly::dynamic::object("offsetX", 10)("offsetY", 2)("blurRadius", -3)( "spreadDistance", 5))}; std::vector boxShadows; - parseUnprocessedBoxShadow( - PropsParserContext{-1, ContextContainer{}}, value, boxShadows); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, boxShadows); EXPECT_TRUE(boxShadows.empty()); } -TEST(ConversionsTest, unprocessed_filter_string) { +TEST_F(NativeCSSConversionsTest, unprocessed_filter_string) { RawValue value{folly::dynamic( "drop-shadow(10px -2px 0.5px #fff) blur(5px) hue-rotate(90deg) saturate(2) brightness(50%)")}; std::vector filters; - parseUnprocessedFilter( - PropsParserContext{-1, ContextContainer{}}, value, filters); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, filters); EXPECT_EQ(filters.size(), 5); @@ -234,7 +256,7 @@ TEST(ConversionsTest, unprocessed_filter_string) { EXPECT_EQ(std::get(filters[4].parameters), 0.5f); } -TEST(ConversionsTest, unprocessed_filter_objects) { +TEST_F(NativeCSSConversionsTest, unprocessed_filter_objects) { RawValue value{folly::dynamic::array( folly::dynamic::object( "drop-shadow", @@ -247,8 +269,7 @@ TEST(ConversionsTest, unprocessed_filter_objects) { folly::dynamic::object("brightness", "50%"))}; std::vector filters; - parseUnprocessedFilter( - PropsParserContext{-1, ContextContainer{}}, value, filters); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, filters); EXPECT_EQ(filters.size(), 6); @@ -288,7 +309,9 @@ TEST(ConversionsTest, unprocessed_filter_objects) { EXPECT_EQ(std::get(filters[5].parameters), 0.5f); } -TEST(ConversionsTest, unprocessed_filter_objects_negative_shadow_blur) { +TEST_F( + NativeCSSConversionsTest, + unprocessed_filter_objects_negative_shadow_blur) { RawValue value{folly::dynamic::array( folly::dynamic::object( "drop-shadow", @@ -296,40 +319,38 @@ TEST(ConversionsTest, unprocessed_filter_objects_negative_shadow_blur) { "standardDeviation", -0.5)))}; std::vector filters; - parseUnprocessedFilter( - PropsParserContext{-1, ContextContainer{}}, value, filters); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, filters); EXPECT_TRUE(filters.empty()); } -TEST(ConversionsTest, unprocessed_filter_objects_negative_blur) { +TEST_F(NativeCSSConversionsTest, unprocessed_filter_objects_negative_blur) { RawValue value{folly::dynamic::array(folly::dynamic::object("blur", -5))}; std::vector filters; - parseUnprocessedFilter( - PropsParserContext{-1, ContextContainer{}}, value, filters); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, filters); EXPECT_TRUE(filters.empty()); } -TEST(ConversionsTest, unprocessed_filter_objects_negative_contrast) { +TEST_F(NativeCSSConversionsTest, unprocessed_filter_objects_negative_contrast) { RawValue value{ folly::dynamic::array(folly::dynamic::object("constrast", -5))}; std::vector filters; - parseUnprocessedFilter( - PropsParserContext{-1, ContextContainer{}}, value, filters); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, filters); EXPECT_TRUE(filters.empty()); } -TEST(ConversionsTest, unprocessed_filter_objects_negative_hue_rotate) { +TEST_F( + NativeCSSConversionsTest, + unprocessed_filter_objects_negative_hue_rotate) { RawValue value{ folly::dynamic::array(folly::dynamic::object("hue-rotate", -5))}; std::vector filters; - parseUnprocessedFilter( - PropsParserContext{-1, ContextContainer{}}, value, filters); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, filters); EXPECT_EQ(filters.size(), 1); @@ -338,24 +359,22 @@ TEST(ConversionsTest, unprocessed_filter_objects_negative_hue_rotate) { EXPECT_EQ(std::get(filters[0].parameters), -5.0f); } -TEST(ConversionsTest, unprocessed_filter_objects_multiple_objects) { +TEST_F(NativeCSSConversionsTest, unprocessed_filter_objects_multiple_objects) { RawValue value{folly::dynamic::array( folly::dynamic::object("blur", 5)("hue-rotate", "90deg"))}; std::vector filters; - parseUnprocessedFilter( - PropsParserContext{-1, ContextContainer{}}, value, filters); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, filters); EXPECT_TRUE(filters.empty()); } -TEST(ConversionsTest, unprocessed_filter_objects_unknown_type) { +TEST_F(NativeCSSConversionsTest, unprocessed_filter_objects_unknown_type) { RawValue value{ folly::dynamic::array(folly::dynamic::object("unknown-filter", 5))}; std::vector filters; - parseUnprocessedFilter( - PropsParserContext{-1, ContextContainer{}}, value, filters); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, filters); EXPECT_TRUE(filters.empty()); } diff --git a/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api b/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api index 330ce127980..a2de8f27e2a 100644 --- a/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api @@ -873,7 +873,6 @@ facebook::react::ColorSpace facebook::react::getDefaultColorSpace(); facebook::react::ComponentBuilder facebook::react::simpleComponentBuilder(std::shared_ptr contextContainer = nullptr); facebook::react::ComponentRegistryFactory facebook::react::getDefaultComponentRegistryFactory(); facebook::react::DisplayType facebook::react::displayTypeFromYGDisplay(YGDisplay display); -facebook::react::FilterType facebook::react::filterTypeFromVariant(const facebook::react::CSSFilterFunction& filter); facebook::react::Float facebook::react::floatFromYogaFloat(float value); facebook::react::Float facebook::react::floatFromYogaOptionalFloat(facebook::yoga::FloatOptional value); facebook::react::LayoutMetrics facebook::react::layoutMetricsFromYogaNode(facebook::yoga::Node& yogaNode); @@ -895,7 +894,6 @@ facebook::react::SharedColor facebook::react::clearColor(); facebook::react::SharedColor facebook::react::coerceColor(const facebook::react::RawValue& value, const facebook::react::PropsParserContext& context); facebook::react::SharedColor facebook::react::colorFromComponents(facebook::react::ColorComponents components); facebook::react::SharedColor facebook::react::colorFromRGBA(uint8_t r, uint8_t g, uint8_t b, uint8_t a); -facebook::react::SharedColor facebook::react::fromCSSColor(const facebook::react::CSSColor& cssColor); facebook::react::SharedColor facebook::react::parsePlatformColor(const facebook::react::ContextContainer& contextContainer, int32_t surfaceId, const facebook::react::RawValue& value); facebook::react::SharedColor facebook::react::whiteColor(); facebook::react::Size facebook::react::ModalHostViewScreenSize(void); @@ -947,14 +945,7 @@ size_t facebook::react::attributedStringHashLayoutWise(const facebook::react::At size_t facebook::react::textAttributesHashLayoutWise(const facebook::react::TextAttributes& textAttributes); std::function facebook::react::makeCallback(std::weak_ptr instance, const folly::dynamic& callbackId); std::optional facebook::react::blendModeFromString(std::string_view blendModeName); -std::optional facebook::react::fromCSSShadow(const facebook::react::CSSShadow& cssShadow); -std::optional facebook::react::parseBoxShadowRawValue(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); -std::optional facebook::react::fromCSSFilter(const facebook::react::CSSFilterFunction& cssFilter); -std::optional facebook::react::parseDropShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); -std::optional facebook::react::parseFilterRawValue(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); std::optional facebook::react::filterTypeFromString(std::string_view filterName); -std::optional facebook::react::coerceAmount(const facebook::react::RawValue& value); -std::optional facebook::react::coerceAngle(const facebook::react::RawValue& value); std::optional facebook::react::coerceLength(const facebook::react::RawValue& value); std::optional facebook::react::optionalFloatFromYogaValue(const facebook::yoga::Style::Length& length, std::optional base = {}); std::optional facebook::react::toRadians(const facebook::react::RawValue& value); @@ -1152,19 +1143,11 @@ void facebook::react::fromString(const std::string& string, facebook::react::Acc void facebook::react::g_setNativeAnimatedNowTimestampFunction(facebook::react::TimePointFunction nowFunction); void facebook::react::handleJSError(facebook::jsi::Runtime& runtime, const facebook::jsi::JSError& error, bool isFatal); void facebook::react::parseProcessedBackgroundImage(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseProcessedBoxShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseProcessedFilter(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); void facebook::react::parseProcessedFontVariant(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseProcessedTransform(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::Transform& result); void facebook::react::parseProcessedTransformOrigin(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); void facebook::react::parseUnprocessedBackgroundImageList(const facebook::react::PropsParserContext& context, const std::vector& value, std::vector& result); void facebook::react::parseUnprocessedBackgroundImageString(const std::string& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadowList(const facebook::react::PropsParserContext& context, std::vector&& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadowString(std::string&& value, std::vector& result); -void facebook::react::parseUnprocessedFilter(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseUnprocessedFilterList(const facebook::react::PropsParserContext& context, std::vector&& value, std::vector& result); -void facebook::react::parseUnprocessedFilterString(std::string&& value, std::vector& result); void facebook::react::parseUnprocessedFontVariant(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedFontVariantString(const std::string& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedTransform(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::Transform& result); diff --git a/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api b/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api index 7e4cac501b7..e2aacbaaac7 100644 --- a/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api @@ -872,7 +872,6 @@ facebook::react::ColorSpace facebook::react::getDefaultColorSpace(); facebook::react::ComponentBuilder facebook::react::simpleComponentBuilder(std::shared_ptr contextContainer = nullptr); facebook::react::ComponentRegistryFactory facebook::react::getDefaultComponentRegistryFactory(); facebook::react::DisplayType facebook::react::displayTypeFromYGDisplay(YGDisplay display); -facebook::react::FilterType facebook::react::filterTypeFromVariant(const facebook::react::CSSFilterFunction& filter); facebook::react::Float facebook::react::floatFromYogaFloat(float value); facebook::react::Float facebook::react::floatFromYogaOptionalFloat(facebook::yoga::FloatOptional value); facebook::react::LayoutMetrics facebook::react::layoutMetricsFromYogaNode(facebook::yoga::Node& yogaNode); @@ -894,7 +893,6 @@ facebook::react::SharedColor facebook::react::clearColor(); facebook::react::SharedColor facebook::react::coerceColor(const facebook::react::RawValue& value, const facebook::react::PropsParserContext& context); facebook::react::SharedColor facebook::react::colorFromComponents(facebook::react::ColorComponents components); facebook::react::SharedColor facebook::react::colorFromRGBA(uint8_t r, uint8_t g, uint8_t b, uint8_t a); -facebook::react::SharedColor facebook::react::fromCSSColor(const facebook::react::CSSColor& cssColor); facebook::react::SharedColor facebook::react::parsePlatformColor(const facebook::react::ContextContainer& contextContainer, int32_t surfaceId, const facebook::react::RawValue& value); facebook::react::SharedColor facebook::react::whiteColor(); facebook::react::Size facebook::react::ModalHostViewScreenSize(void); @@ -945,14 +943,7 @@ size_t facebook::react::attributedStringHashDisplayWise(const facebook::react::A size_t facebook::react::attributedStringHashLayoutWise(const facebook::react::AttributedString& attributedString); size_t facebook::react::textAttributesHashLayoutWise(const facebook::react::TextAttributes& textAttributes); std::optional facebook::react::blendModeFromString(std::string_view blendModeName); -std::optional facebook::react::fromCSSShadow(const facebook::react::CSSShadow& cssShadow); -std::optional facebook::react::parseBoxShadowRawValue(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); -std::optional facebook::react::fromCSSFilter(const facebook::react::CSSFilterFunction& cssFilter); -std::optional facebook::react::parseDropShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); -std::optional facebook::react::parseFilterRawValue(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); std::optional facebook::react::filterTypeFromString(std::string_view filterName); -std::optional facebook::react::coerceAmount(const facebook::react::RawValue& value); -std::optional facebook::react::coerceAngle(const facebook::react::RawValue& value); std::optional facebook::react::coerceLength(const facebook::react::RawValue& value); std::optional facebook::react::optionalFloatFromYogaValue(const facebook::yoga::Style::Length& length, std::optional base = {}); std::optional facebook::react::toRadians(const facebook::react::RawValue& value); @@ -1148,19 +1139,11 @@ void facebook::react::fromString(const std::string& string, facebook::react::Acc void facebook::react::g_setNativeAnimatedNowTimestampFunction(facebook::react::TimePointFunction nowFunction); void facebook::react::handleJSError(facebook::jsi::Runtime& runtime, const facebook::jsi::JSError& error, bool isFatal); void facebook::react::parseProcessedBackgroundImage(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseProcessedBoxShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseProcessedFilter(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); void facebook::react::parseProcessedFontVariant(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseProcessedTransform(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::Transform& result); void facebook::react::parseProcessedTransformOrigin(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); void facebook::react::parseUnprocessedBackgroundImageList(const facebook::react::PropsParserContext& context, const std::vector& value, std::vector& result); void facebook::react::parseUnprocessedBackgroundImageString(const std::string& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadowList(const facebook::react::PropsParserContext& context, std::vector&& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadowString(std::string&& value, std::vector& result); -void facebook::react::parseUnprocessedFilter(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseUnprocessedFilterList(const facebook::react::PropsParserContext& context, std::vector&& value, std::vector& result); -void facebook::react::parseUnprocessedFilterString(std::string&& value, std::vector& result); void facebook::react::parseUnprocessedFontVariant(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedFontVariantString(const std::string& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedTransform(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::Transform& result); diff --git a/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api b/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api index 6207ce88f35..5fa07b18af7 100644 --- a/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api @@ -873,7 +873,6 @@ facebook::react::ColorSpace facebook::react::getDefaultColorSpace(); facebook::react::ComponentBuilder facebook::react::simpleComponentBuilder(std::shared_ptr contextContainer = nullptr); facebook::react::ComponentRegistryFactory facebook::react::getDefaultComponentRegistryFactory(); facebook::react::DisplayType facebook::react::displayTypeFromYGDisplay(YGDisplay display); -facebook::react::FilterType facebook::react::filterTypeFromVariant(const facebook::react::CSSFilterFunction& filter); facebook::react::Float facebook::react::floatFromYogaFloat(float value); facebook::react::Float facebook::react::floatFromYogaOptionalFloat(facebook::yoga::FloatOptional value); facebook::react::LayoutMetrics facebook::react::layoutMetricsFromYogaNode(facebook::yoga::Node& yogaNode); @@ -895,7 +894,6 @@ facebook::react::SharedColor facebook::react::clearColor(); facebook::react::SharedColor facebook::react::coerceColor(const facebook::react::RawValue& value, const facebook::react::PropsParserContext& context); facebook::react::SharedColor facebook::react::colorFromComponents(facebook::react::ColorComponents components); facebook::react::SharedColor facebook::react::colorFromRGBA(uint8_t r, uint8_t g, uint8_t b, uint8_t a); -facebook::react::SharedColor facebook::react::fromCSSColor(const facebook::react::CSSColor& cssColor); facebook::react::SharedColor facebook::react::parsePlatformColor(const facebook::react::ContextContainer& contextContainer, int32_t surfaceId, const facebook::react::RawValue& value); facebook::react::SharedColor facebook::react::whiteColor(); facebook::react::Size facebook::react::ModalHostViewScreenSize(void); @@ -947,14 +945,7 @@ size_t facebook::react::attributedStringHashLayoutWise(const facebook::react::At size_t facebook::react::textAttributesHashLayoutWise(const facebook::react::TextAttributes& textAttributes); std::function facebook::react::makeCallback(std::weak_ptr instance, const folly::dynamic& callbackId); std::optional facebook::react::blendModeFromString(std::string_view blendModeName); -std::optional facebook::react::fromCSSShadow(const facebook::react::CSSShadow& cssShadow); -std::optional facebook::react::parseBoxShadowRawValue(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); -std::optional facebook::react::fromCSSFilter(const facebook::react::CSSFilterFunction& cssFilter); -std::optional facebook::react::parseDropShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); -std::optional facebook::react::parseFilterRawValue(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); std::optional facebook::react::filterTypeFromString(std::string_view filterName); -std::optional facebook::react::coerceAmount(const facebook::react::RawValue& value); -std::optional facebook::react::coerceAngle(const facebook::react::RawValue& value); std::optional facebook::react::coerceLength(const facebook::react::RawValue& value); std::optional facebook::react::optionalFloatFromYogaValue(const facebook::yoga::Style::Length& length, std::optional base = {}); std::optional facebook::react::toRadians(const facebook::react::RawValue& value); @@ -1152,19 +1143,11 @@ void facebook::react::fromString(const std::string& string, facebook::react::Acc void facebook::react::g_setNativeAnimatedNowTimestampFunction(facebook::react::TimePointFunction nowFunction); void facebook::react::handleJSError(facebook::jsi::Runtime& runtime, const facebook::jsi::JSError& error, bool isFatal); void facebook::react::parseProcessedBackgroundImage(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseProcessedBoxShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseProcessedFilter(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); void facebook::react::parseProcessedFontVariant(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseProcessedTransform(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::Transform& result); void facebook::react::parseProcessedTransformOrigin(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); void facebook::react::parseUnprocessedBackgroundImageList(const facebook::react::PropsParserContext& context, const std::vector& value, std::vector& result); void facebook::react::parseUnprocessedBackgroundImageString(const std::string& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadowList(const facebook::react::PropsParserContext& context, std::vector&& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadowString(std::string&& value, std::vector& result); -void facebook::react::parseUnprocessedFilter(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseUnprocessedFilterList(const facebook::react::PropsParserContext& context, std::vector&& value, std::vector& result); -void facebook::react::parseUnprocessedFilterString(std::string&& value, std::vector& result); void facebook::react::parseUnprocessedFontVariant(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedFontVariantString(const std::string& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedTransform(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::Transform& result); diff --git a/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api index c2c7b9c55b8..951d1d19282 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api @@ -3694,7 +3694,6 @@ facebook::react::ColorSpace facebook::react::getDefaultColorSpace(); facebook::react::ComponentBuilder facebook::react::simpleComponentBuilder(std::shared_ptr contextContainer = nullptr); facebook::react::ComponentRegistryFactory facebook::react::getDefaultComponentRegistryFactory(); facebook::react::DisplayType facebook::react::displayTypeFromYGDisplay(YGDisplay display); -facebook::react::FilterType facebook::react::filterTypeFromVariant(const facebook::react::CSSFilterFunction& filter); facebook::react::Float facebook::react::floatFromYogaFloat(float value); facebook::react::Float facebook::react::floatFromYogaOptionalFloat(facebook::yoga::FloatOptional value); facebook::react::LayoutMetrics facebook::react::layoutMetricsFromYogaNode(facebook::yoga::Node& yogaNode); @@ -3709,7 +3708,6 @@ facebook::react::SharedColor facebook::react::clearColor(); facebook::react::SharedColor facebook::react::coerceColor(const facebook::react::RawValue& value, const facebook::react::PropsParserContext& context); facebook::react::SharedColor facebook::react::colorFromComponents(facebook::react::ColorComponents components); facebook::react::SharedColor facebook::react::colorFromRGBA(uint8_t r, uint8_t g, uint8_t b, uint8_t a); -facebook::react::SharedColor facebook::react::fromCSSColor(const facebook::react::CSSColor& cssColor); facebook::react::SharedColor facebook::react::parsePlatformColor(const facebook::react::ContextContainer& contextContainer, int32_t surfaceId, const facebook::react::RawValue& value); facebook::react::SharedColor facebook::react::whiteColor(); facebook::react::Size facebook::react::ModalHostViewScreenSize(void); @@ -3745,14 +3743,7 @@ size_t facebook::react::attributedStringHashLayoutWise(const facebook::react::At size_t facebook::react::textAttributesHashLayoutWise(const facebook::react::TextAttributes& textAttributes); std::function facebook::react::makeCallback(std::weak_ptr instance, const folly::dynamic& callbackId); std::optional facebook::react::blendModeFromString(std::string_view blendModeName); -std::optional facebook::react::fromCSSShadow(const facebook::react::CSSShadow& cssShadow); -std::optional facebook::react::parseBoxShadowRawValue(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); -std::optional facebook::react::fromCSSFilter(const facebook::react::CSSFilterFunction& cssFilter); -std::optional facebook::react::parseDropShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); -std::optional facebook::react::parseFilterRawValue(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); std::optional facebook::react::filterTypeFromString(std::string_view filterName); -std::optional facebook::react::coerceAmount(const facebook::react::RawValue& value); -std::optional facebook::react::coerceAngle(const facebook::react::RawValue& value); std::optional facebook::react::coerceLength(const facebook::react::RawValue& value); std::optional facebook::react::optionalFloatFromYogaValue(const facebook::yoga::Style::Length& length, std::optional base = {}); std::optional facebook::react::toRadians(const facebook::react::RawValue& value); @@ -3952,19 +3943,11 @@ void facebook::react::g_setNativeAnimatedNowTimestampFunction(facebook::react::T void facebook::react::handleJSError(facebook::jsi::Runtime& runtime, const facebook::jsi::JSError& error, bool isFatal); void facebook::react::installLegacyUIManagerConstantsProviderBinding(facebook::jsi::Runtime& runtime); void facebook::react::parseProcessedBackgroundImage(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseProcessedBoxShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseProcessedFilter(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); void facebook::react::parseProcessedFontVariant(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseProcessedTransform(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::Transform& result); void facebook::react::parseProcessedTransformOrigin(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); void facebook::react::parseUnprocessedBackgroundImageList(const facebook::react::PropsParserContext& context, const std::vector& value, std::vector& result); void facebook::react::parseUnprocessedBackgroundImageString(const std::string& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadowList(const facebook::react::PropsParserContext& context, std::vector&& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadowString(std::string&& value, std::vector& result); -void facebook::react::parseUnprocessedFilter(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseUnprocessedFilterList(const facebook::react::PropsParserContext& context, std::vector&& value, std::vector& result); -void facebook::react::parseUnprocessedFilterString(std::string&& value, std::vector& result); void facebook::react::parseUnprocessedFontVariant(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedFontVariantString(const std::string& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedTransform(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::Transform& result); diff --git a/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api index e7dc63c7ca0..d930cb69664 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api @@ -3685,7 +3685,6 @@ facebook::react::ColorSpace facebook::react::getDefaultColorSpace(); facebook::react::ComponentBuilder facebook::react::simpleComponentBuilder(std::shared_ptr contextContainer = nullptr); facebook::react::ComponentRegistryFactory facebook::react::getDefaultComponentRegistryFactory(); facebook::react::DisplayType facebook::react::displayTypeFromYGDisplay(YGDisplay display); -facebook::react::FilterType facebook::react::filterTypeFromVariant(const facebook::react::CSSFilterFunction& filter); facebook::react::Float facebook::react::floatFromYogaFloat(float value); facebook::react::Float facebook::react::floatFromYogaOptionalFloat(facebook::yoga::FloatOptional value); facebook::react::LayoutMetrics facebook::react::layoutMetricsFromYogaNode(facebook::yoga::Node& yogaNode); @@ -3700,7 +3699,6 @@ facebook::react::SharedColor facebook::react::clearColor(); facebook::react::SharedColor facebook::react::coerceColor(const facebook::react::RawValue& value, const facebook::react::PropsParserContext& context); facebook::react::SharedColor facebook::react::colorFromComponents(facebook::react::ColorComponents components); facebook::react::SharedColor facebook::react::colorFromRGBA(uint8_t r, uint8_t g, uint8_t b, uint8_t a); -facebook::react::SharedColor facebook::react::fromCSSColor(const facebook::react::CSSColor& cssColor); facebook::react::SharedColor facebook::react::parsePlatformColor(const facebook::react::ContextContainer& contextContainer, int32_t surfaceId, const facebook::react::RawValue& value); facebook::react::SharedColor facebook::react::whiteColor(); facebook::react::Size facebook::react::ModalHostViewScreenSize(void); @@ -3735,14 +3733,7 @@ size_t facebook::react::attributedStringHashDisplayWise(const facebook::react::A size_t facebook::react::attributedStringHashLayoutWise(const facebook::react::AttributedString& attributedString); size_t facebook::react::textAttributesHashLayoutWise(const facebook::react::TextAttributes& textAttributes); std::optional facebook::react::blendModeFromString(std::string_view blendModeName); -std::optional facebook::react::fromCSSShadow(const facebook::react::CSSShadow& cssShadow); -std::optional facebook::react::parseBoxShadowRawValue(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); -std::optional facebook::react::fromCSSFilter(const facebook::react::CSSFilterFunction& cssFilter); -std::optional facebook::react::parseDropShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); -std::optional facebook::react::parseFilterRawValue(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); std::optional facebook::react::filterTypeFromString(std::string_view filterName); -std::optional facebook::react::coerceAmount(const facebook::react::RawValue& value); -std::optional facebook::react::coerceAngle(const facebook::react::RawValue& value); std::optional facebook::react::coerceLength(const facebook::react::RawValue& value); std::optional facebook::react::optionalFloatFromYogaValue(const facebook::yoga::Style::Length& length, std::optional base = {}); std::optional facebook::react::toRadians(const facebook::react::RawValue& value); @@ -3941,19 +3932,11 @@ void facebook::react::g_setNativeAnimatedNowTimestampFunction(facebook::react::T void facebook::react::handleJSError(facebook::jsi::Runtime& runtime, const facebook::jsi::JSError& error, bool isFatal); void facebook::react::installLegacyUIManagerConstantsProviderBinding(facebook::jsi::Runtime& runtime); void facebook::react::parseProcessedBackgroundImage(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseProcessedBoxShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseProcessedFilter(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); void facebook::react::parseProcessedFontVariant(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseProcessedTransform(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::Transform& result); void facebook::react::parseProcessedTransformOrigin(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); void facebook::react::parseUnprocessedBackgroundImageList(const facebook::react::PropsParserContext& context, const std::vector& value, std::vector& result); void facebook::react::parseUnprocessedBackgroundImageString(const std::string& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadowList(const facebook::react::PropsParserContext& context, std::vector&& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadowString(std::string&& value, std::vector& result); -void facebook::react::parseUnprocessedFilter(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseUnprocessedFilterList(const facebook::react::PropsParserContext& context, std::vector&& value, std::vector& result); -void facebook::react::parseUnprocessedFilterString(std::string&& value, std::vector& result); void facebook::react::parseUnprocessedFontVariant(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedFontVariantString(const std::string& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedTransform(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::Transform& result); diff --git a/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api index af2a1efe4c8..05eea6b2980 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api @@ -3694,7 +3694,6 @@ facebook::react::ColorSpace facebook::react::getDefaultColorSpace(); facebook::react::ComponentBuilder facebook::react::simpleComponentBuilder(std::shared_ptr contextContainer = nullptr); facebook::react::ComponentRegistryFactory facebook::react::getDefaultComponentRegistryFactory(); facebook::react::DisplayType facebook::react::displayTypeFromYGDisplay(YGDisplay display); -facebook::react::FilterType facebook::react::filterTypeFromVariant(const facebook::react::CSSFilterFunction& filter); facebook::react::Float facebook::react::floatFromYogaFloat(float value); facebook::react::Float facebook::react::floatFromYogaOptionalFloat(facebook::yoga::FloatOptional value); facebook::react::LayoutMetrics facebook::react::layoutMetricsFromYogaNode(facebook::yoga::Node& yogaNode); @@ -3709,7 +3708,6 @@ facebook::react::SharedColor facebook::react::clearColor(); facebook::react::SharedColor facebook::react::coerceColor(const facebook::react::RawValue& value, const facebook::react::PropsParserContext& context); facebook::react::SharedColor facebook::react::colorFromComponents(facebook::react::ColorComponents components); facebook::react::SharedColor facebook::react::colorFromRGBA(uint8_t r, uint8_t g, uint8_t b, uint8_t a); -facebook::react::SharedColor facebook::react::fromCSSColor(const facebook::react::CSSColor& cssColor); facebook::react::SharedColor facebook::react::parsePlatformColor(const facebook::react::ContextContainer& contextContainer, int32_t surfaceId, const facebook::react::RawValue& value); facebook::react::SharedColor facebook::react::whiteColor(); facebook::react::Size facebook::react::ModalHostViewScreenSize(void); @@ -3745,14 +3743,7 @@ size_t facebook::react::attributedStringHashLayoutWise(const facebook::react::At size_t facebook::react::textAttributesHashLayoutWise(const facebook::react::TextAttributes& textAttributes); std::function facebook::react::makeCallback(std::weak_ptr instance, const folly::dynamic& callbackId); std::optional facebook::react::blendModeFromString(std::string_view blendModeName); -std::optional facebook::react::fromCSSShadow(const facebook::react::CSSShadow& cssShadow); -std::optional facebook::react::parseBoxShadowRawValue(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); -std::optional facebook::react::fromCSSFilter(const facebook::react::CSSFilterFunction& cssFilter); -std::optional facebook::react::parseDropShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); -std::optional facebook::react::parseFilterRawValue(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); std::optional facebook::react::filterTypeFromString(std::string_view filterName); -std::optional facebook::react::coerceAmount(const facebook::react::RawValue& value); -std::optional facebook::react::coerceAngle(const facebook::react::RawValue& value); std::optional facebook::react::coerceLength(const facebook::react::RawValue& value); std::optional facebook::react::optionalFloatFromYogaValue(const facebook::yoga::Style::Length& length, std::optional base = {}); std::optional facebook::react::toRadians(const facebook::react::RawValue& value); @@ -3952,19 +3943,11 @@ void facebook::react::g_setNativeAnimatedNowTimestampFunction(facebook::react::T void facebook::react::handleJSError(facebook::jsi::Runtime& runtime, const facebook::jsi::JSError& error, bool isFatal); void facebook::react::installLegacyUIManagerConstantsProviderBinding(facebook::jsi::Runtime& runtime); void facebook::react::parseProcessedBackgroundImage(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseProcessedBoxShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseProcessedFilter(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); void facebook::react::parseProcessedFontVariant(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseProcessedTransform(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::Transform& result); void facebook::react::parseProcessedTransformOrigin(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); void facebook::react::parseUnprocessedBackgroundImageList(const facebook::react::PropsParserContext& context, const std::vector& value, std::vector& result); void facebook::react::parseUnprocessedBackgroundImageString(const std::string& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadowList(const facebook::react::PropsParserContext& context, std::vector&& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadowString(std::string&& value, std::vector& result); -void facebook::react::parseUnprocessedFilter(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseUnprocessedFilterList(const facebook::react::PropsParserContext& context, std::vector&& value, std::vector& result); -void facebook::react::parseUnprocessedFilterString(std::string&& value, std::vector& result); void facebook::react::parseUnprocessedFontVariant(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedFontVariantString(const std::string& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedTransform(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::Transform& result); diff --git a/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api b/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api index 6a9079fab51..ffa20035502 100644 --- a/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api @@ -477,7 +477,6 @@ facebook::react::ColorSpace facebook::react::getDefaultColorSpace(); facebook::react::ComponentBuilder facebook::react::simpleComponentBuilder(std::shared_ptr contextContainer = nullptr); facebook::react::ComponentRegistryFactory facebook::react::getDefaultComponentRegistryFactory(); facebook::react::DisplayType facebook::react::displayTypeFromYGDisplay(YGDisplay display); -facebook::react::FilterType facebook::react::filterTypeFromVariant(const facebook::react::CSSFilterFunction& filter); facebook::react::LayoutMetrics facebook::react::layoutMetricsFromYogaNode(facebook::yoga::Node& yogaNode); facebook::react::ParagraphAttributes facebook::react::convertRawProp(const facebook::react::PropsParserContext& context, const facebook::react::RawProps& rawProps, const facebook::react::ParagraphAttributes& sourceParagraphAttributes, const facebook::react::ParagraphAttributes& defaultParagraphAttributes); facebook::react::Rect facebook::react::insetBy(const facebook::react::Rect& rect, const facebook::react::EdgeInsets& insets) noexcept; @@ -490,7 +489,6 @@ facebook::react::SharedColor facebook::react::clearColor(); facebook::react::SharedColor facebook::react::coerceColor(const facebook::react::RawValue& value, const facebook::react::PropsParserContext& context); facebook::react::SharedColor facebook::react::colorFromComponents(facebook::react::ColorComponents components); facebook::react::SharedColor facebook::react::colorFromRGBA(uint8_t r, uint8_t g, uint8_t b, uint8_t a); -facebook::react::SharedColor facebook::react::fromCSSColor(const facebook::react::CSSColor& cssColor); facebook::react::SharedColor facebook::react::whiteColor(); facebook::react::Size facebook::react::ModalHostViewScreenSize(void); facebook::react::Size facebook::react::yogaMeassureToSize(int64_t value); @@ -518,17 +516,10 @@ size_t facebook::react::attributedStringHashDisplayWise(const facebook::react::A size_t facebook::react::attributedStringHashLayoutWise(const facebook::react::AttributedString& attributedString); size_t facebook::react::textAttributesHashLayoutWise(const facebook::react::TextAttributes& textAttributes); std::function facebook::react::makeCallback(std::weak_ptr instance, const folly::dynamic& callbackId); -std::optional facebook::react::coerceAmount(const facebook::react::RawValue& value); -std::optional facebook::react::coerceAngle(const facebook::react::RawValue& value); std::optional facebook::react::coerceLength(const facebook::react::RawValue& value); std::optional facebook::react::optionalFloatFromYogaValue(const facebook::yoga::Style::Length& length, std::optional base = {}); std::optional facebook::react::toRadians(const facebook::react::RawValue& value); std::optional facebook::react::blendModeFromString(std::string_view blendModeName); -std::optional facebook::react::fromCSSShadow(const facebook::react::CSSShadow& cssShadow); -std::optional facebook::react::parseBoxShadowRawValue(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); -std::optional facebook::react::fromCSSFilter(const facebook::react::CSSFilterFunction& cssFilter); -std::optional facebook::react::parseDropShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); -std::optional facebook::react::parseFilterRawValue(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); std::optional facebook::react::filterTypeFromString(std::string_view filterName); std::optional facebook::react::fontVariantFromCSSFontVariant(facebook::react::CSSFontVariant cssVariant); std::optional facebook::react::isolationFromString(std::string_view isolationSetting); @@ -712,19 +703,11 @@ void facebook::react::fromString(const std::string& string, facebook::react::Acc void facebook::react::g_setNativeAnimatedNowTimestampFunction(facebook::react::TimePointFunction nowFunction); void facebook::react::handleJSError(facebook::jsi::Runtime& runtime, const facebook::jsi::JSError& error, bool isFatal); void facebook::react::parseProcessedBackgroundImage(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseProcessedBoxShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseProcessedFilter(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); void facebook::react::parseProcessedFontVariant(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseProcessedTransform(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::Transform& result); void facebook::react::parseProcessedTransformOrigin(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); void facebook::react::parseUnprocessedBackgroundImageList(const facebook::react::PropsParserContext& context, const std::vector& value, std::vector& result); void facebook::react::parseUnprocessedBackgroundImageString(const std::string& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadowList(const facebook::react::PropsParserContext& context, std::vector&& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadowString(std::string&& value, std::vector& result); -void facebook::react::parseUnprocessedFilter(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseUnprocessedFilterList(const facebook::react::PropsParserContext& context, std::vector&& value, std::vector& result); -void facebook::react::parseUnprocessedFilterString(std::string&& value, std::vector& result); void facebook::react::parseUnprocessedFontVariant(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedFontVariantString(const std::string& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedTransform(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::Transform& result); diff --git a/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api b/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api index 2c443d15483..ed78db4d98f 100644 --- a/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api @@ -476,7 +476,6 @@ facebook::react::ColorSpace facebook::react::getDefaultColorSpace(); facebook::react::ComponentBuilder facebook::react::simpleComponentBuilder(std::shared_ptr contextContainer = nullptr); facebook::react::ComponentRegistryFactory facebook::react::getDefaultComponentRegistryFactory(); facebook::react::DisplayType facebook::react::displayTypeFromYGDisplay(YGDisplay display); -facebook::react::FilterType facebook::react::filterTypeFromVariant(const facebook::react::CSSFilterFunction& filter); facebook::react::LayoutMetrics facebook::react::layoutMetricsFromYogaNode(facebook::yoga::Node& yogaNode); facebook::react::ParagraphAttributes facebook::react::convertRawProp(const facebook::react::PropsParserContext& context, const facebook::react::RawProps& rawProps, const facebook::react::ParagraphAttributes& sourceParagraphAttributes, const facebook::react::ParagraphAttributes& defaultParagraphAttributes); facebook::react::Rect facebook::react::insetBy(const facebook::react::Rect& rect, const facebook::react::EdgeInsets& insets) noexcept; @@ -489,7 +488,6 @@ facebook::react::SharedColor facebook::react::clearColor(); facebook::react::SharedColor facebook::react::coerceColor(const facebook::react::RawValue& value, const facebook::react::PropsParserContext& context); facebook::react::SharedColor facebook::react::colorFromComponents(facebook::react::ColorComponents components); facebook::react::SharedColor facebook::react::colorFromRGBA(uint8_t r, uint8_t g, uint8_t b, uint8_t a); -facebook::react::SharedColor facebook::react::fromCSSColor(const facebook::react::CSSColor& cssColor); facebook::react::SharedColor facebook::react::whiteColor(); facebook::react::Size facebook::react::ModalHostViewScreenSize(void); facebook::react::Size facebook::react::yogaMeassureToSize(int64_t value); @@ -516,17 +514,10 @@ size_t facebook::react::attributedStringFragmentHashLayoutWise(const facebook::r size_t facebook::react::attributedStringHashDisplayWise(const facebook::react::AttributedString& attributedString); size_t facebook::react::attributedStringHashLayoutWise(const facebook::react::AttributedString& attributedString); size_t facebook::react::textAttributesHashLayoutWise(const facebook::react::TextAttributes& textAttributes); -std::optional facebook::react::coerceAmount(const facebook::react::RawValue& value); -std::optional facebook::react::coerceAngle(const facebook::react::RawValue& value); std::optional facebook::react::coerceLength(const facebook::react::RawValue& value); std::optional facebook::react::optionalFloatFromYogaValue(const facebook::yoga::Style::Length& length, std::optional base = {}); std::optional facebook::react::toRadians(const facebook::react::RawValue& value); std::optional facebook::react::blendModeFromString(std::string_view blendModeName); -std::optional facebook::react::fromCSSShadow(const facebook::react::CSSShadow& cssShadow); -std::optional facebook::react::parseBoxShadowRawValue(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); -std::optional facebook::react::fromCSSFilter(const facebook::react::CSSFilterFunction& cssFilter); -std::optional facebook::react::parseDropShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); -std::optional facebook::react::parseFilterRawValue(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); std::optional facebook::react::filterTypeFromString(std::string_view filterName); std::optional facebook::react::fontVariantFromCSSFontVariant(facebook::react::CSSFontVariant cssVariant); std::optional facebook::react::isolationFromString(std::string_view isolationSetting); @@ -709,19 +700,11 @@ void facebook::react::fromString(const std::string& string, facebook::react::Acc void facebook::react::g_setNativeAnimatedNowTimestampFunction(facebook::react::TimePointFunction nowFunction); void facebook::react::handleJSError(facebook::jsi::Runtime& runtime, const facebook::jsi::JSError& error, bool isFatal); void facebook::react::parseProcessedBackgroundImage(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseProcessedBoxShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseProcessedFilter(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); void facebook::react::parseProcessedFontVariant(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseProcessedTransform(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::Transform& result); void facebook::react::parseProcessedTransformOrigin(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); void facebook::react::parseUnprocessedBackgroundImageList(const facebook::react::PropsParserContext& context, const std::vector& value, std::vector& result); void facebook::react::parseUnprocessedBackgroundImageString(const std::string& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadowList(const facebook::react::PropsParserContext& context, std::vector&& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadowString(std::string&& value, std::vector& result); -void facebook::react::parseUnprocessedFilter(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseUnprocessedFilterList(const facebook::react::PropsParserContext& context, std::vector&& value, std::vector& result); -void facebook::react::parseUnprocessedFilterString(std::string&& value, std::vector& result); void facebook::react::parseUnprocessedFontVariant(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedFontVariantString(const std::string& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedTransform(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::Transform& result); diff --git a/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api b/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api index d138a748145..a61b90b3837 100644 --- a/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api @@ -477,7 +477,6 @@ facebook::react::ColorSpace facebook::react::getDefaultColorSpace(); facebook::react::ComponentBuilder facebook::react::simpleComponentBuilder(std::shared_ptr contextContainer = nullptr); facebook::react::ComponentRegistryFactory facebook::react::getDefaultComponentRegistryFactory(); facebook::react::DisplayType facebook::react::displayTypeFromYGDisplay(YGDisplay display); -facebook::react::FilterType facebook::react::filterTypeFromVariant(const facebook::react::CSSFilterFunction& filter); facebook::react::LayoutMetrics facebook::react::layoutMetricsFromYogaNode(facebook::yoga::Node& yogaNode); facebook::react::ParagraphAttributes facebook::react::convertRawProp(const facebook::react::PropsParserContext& context, const facebook::react::RawProps& rawProps, const facebook::react::ParagraphAttributes& sourceParagraphAttributes, const facebook::react::ParagraphAttributes& defaultParagraphAttributes); facebook::react::Rect facebook::react::insetBy(const facebook::react::Rect& rect, const facebook::react::EdgeInsets& insets) noexcept; @@ -490,7 +489,6 @@ facebook::react::SharedColor facebook::react::clearColor(); facebook::react::SharedColor facebook::react::coerceColor(const facebook::react::RawValue& value, const facebook::react::PropsParserContext& context); facebook::react::SharedColor facebook::react::colorFromComponents(facebook::react::ColorComponents components); facebook::react::SharedColor facebook::react::colorFromRGBA(uint8_t r, uint8_t g, uint8_t b, uint8_t a); -facebook::react::SharedColor facebook::react::fromCSSColor(const facebook::react::CSSColor& cssColor); facebook::react::SharedColor facebook::react::whiteColor(); facebook::react::Size facebook::react::ModalHostViewScreenSize(void); facebook::react::Size facebook::react::yogaMeassureToSize(int64_t value); @@ -518,17 +516,10 @@ size_t facebook::react::attributedStringHashDisplayWise(const facebook::react::A size_t facebook::react::attributedStringHashLayoutWise(const facebook::react::AttributedString& attributedString); size_t facebook::react::textAttributesHashLayoutWise(const facebook::react::TextAttributes& textAttributes); std::function facebook::react::makeCallback(std::weak_ptr instance, const folly::dynamic& callbackId); -std::optional facebook::react::coerceAmount(const facebook::react::RawValue& value); -std::optional facebook::react::coerceAngle(const facebook::react::RawValue& value); std::optional facebook::react::coerceLength(const facebook::react::RawValue& value); std::optional facebook::react::optionalFloatFromYogaValue(const facebook::yoga::Style::Length& length, std::optional base = {}); std::optional facebook::react::toRadians(const facebook::react::RawValue& value); std::optional facebook::react::blendModeFromString(std::string_view blendModeName); -std::optional facebook::react::fromCSSShadow(const facebook::react::CSSShadow& cssShadow); -std::optional facebook::react::parseBoxShadowRawValue(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); -std::optional facebook::react::fromCSSFilter(const facebook::react::CSSFilterFunction& cssFilter); -std::optional facebook::react::parseDropShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); -std::optional facebook::react::parseFilterRawValue(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value); std::optional facebook::react::filterTypeFromString(std::string_view filterName); std::optional facebook::react::fontVariantFromCSSFontVariant(facebook::react::CSSFontVariant cssVariant); std::optional facebook::react::isolationFromString(std::string_view isolationSetting); @@ -712,19 +703,11 @@ void facebook::react::fromString(const std::string& string, facebook::react::Acc void facebook::react::g_setNativeAnimatedNowTimestampFunction(facebook::react::TimePointFunction nowFunction); void facebook::react::handleJSError(facebook::jsi::Runtime& runtime, const facebook::jsi::JSError& error, bool isFatal); void facebook::react::parseProcessedBackgroundImage(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseProcessedBoxShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseProcessedFilter(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); void facebook::react::parseProcessedFontVariant(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseProcessedTransform(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::Transform& result); void facebook::react::parseProcessedTransformOrigin(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); void facebook::react::parseUnprocessedBackgroundImageList(const facebook::react::PropsParserContext& context, const std::vector& value, std::vector& result); void facebook::react::parseUnprocessedBackgroundImageString(const std::string& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadow(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadowList(const facebook::react::PropsParserContext& context, std::vector&& value, std::vector& result); -void facebook::react::parseUnprocessedBoxShadowString(std::string&& value, std::vector& result); -void facebook::react::parseUnprocessedFilter(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); -void facebook::react::parseUnprocessedFilterList(const facebook::react::PropsParserContext& context, std::vector&& value, std::vector& result); -void facebook::react::parseUnprocessedFilterString(std::string&& value, std::vector& result); void facebook::react::parseUnprocessedFontVariant(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedFontVariantString(const std::string& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedTransform(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::Transform& result); From 4591d20541bfeb9e5c73d95c9c37217aea8d7d43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Ma=C5=82ecki?= Date: Fri, 2 Oct 2026 03:59:08 -0700 Subject: [PATCH 2/4] Make renderer View conversions CSS-free Summary: Move CSS-dependent View conversion implementations for Yoga lengths, value units, transforms, transform origins, and aspect ratios from the exported `conversions.h` header into `conversions.cpp`. Keep the supported conversion declarations public and preserve existing parsing behavior. Update existing conversion tests to exercise the same paths through supported public entry points, and regenerate the C++ API snapshots to remove private helper declarations. Changelog: [Internal] Differential Revision: D119507215 --- .../renderer/components/view/conversions.cpp | 779 ++++++++++++++++++ .../renderer/components/view/conversions.h | 644 +-------------- .../components/view/tests/ConversionsTest.cpp | 115 +-- .../api-snapshots/ReactAndroidDebugCxx.api | 9 - .../api-snapshots/ReactAndroidNewarchCxx.api | 9 - .../api-snapshots/ReactAndroidReleaseCxx.api | 9 - .../api-snapshots/ReactAppleDebugCxx.api | 9 - .../api-snapshots/ReactAppleNewarchCxx.api | 9 - .../api-snapshots/ReactAppleReleaseCxx.api | 9 - .../api-snapshots/ReactCommonDebugCxx.api | 9 - .../api-snapshots/ReactCommonNewarchCxx.api | 9 - .../api-snapshots/ReactCommonReleaseCxx.api | 9 - 12 files changed, 848 insertions(+), 771 deletions(-) create mode 100644 packages/react-native/ReactCommon/react/renderer/components/view/conversions.cpp diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/conversions.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/conversions.cpp new file mode 100644 index 00000000000..cfa123fb46c --- /dev/null +++ b/packages/react-native/ReactCommon/react/renderer/components/view/conversions.cpp @@ -0,0 +1,779 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include "conversions.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace facebook::react { + +void fromRawValue( + const PropsParserContext& /*context*/, + const RawValue& value, + yoga::Style::SizeLength& result) { + if (value.hasType()) { + result = yoga::StyleSizeLength::points((float)value); + return; + } else if (value.hasType()) { + const auto stringValue = (std::string)value; + if (stringValue == "auto") { + result = yoga::StyleSizeLength::ofAuto(); + return; + } else if (stringValue == "max-content") { + result = yoga::StyleSizeLength::ofMaxContent(); + return; + } else if (stringValue == "stretch") { + result = yoga::StyleSizeLength::ofStretch(); + return; + } else if (stringValue == "fit-content") { + result = yoga::StyleSizeLength::ofFitContent(); + return; + } else { + auto parsed = parseCSSProperty(stringValue); + if (std::holds_alternative(parsed)) { + result = yoga::StyleSizeLength::percent( + std::get(parsed).value); + return; + } else if (std::holds_alternative(parsed)) { + result = + yoga::StyleSizeLength::points(std::get(parsed).value); + return; + } + } + } + result = yoga::StyleSizeLength::undefined(); +} + +void fromRawValue( + const PropsParserContext& context, + const RawValue& value, + yoga::Style::Length& result) { + if (value.hasType()) { + result = yoga::StyleLength::points((float)value); + return; + } else if (value.hasType()) { + const auto stringValue = (std::string)value; + if (stringValue == "auto") { + result = yoga::StyleLength::ofAuto(); + return; + } else { + auto parsed = parseCSSProperty(stringValue); + if (std::holds_alternative(parsed)) { + result = + yoga::StyleLength::percent(std::get(parsed).value); + return; + } else if (std::holds_alternative(parsed)) { + result = yoga::StyleLength::points(std::get(parsed).value); + return; + } + } + } + result = yoga::StyleLength::undefined(); +} + +void fromRawValue( + const PropsParserContext& context, + const RawValue& value, + YGValue& result) { + yoga::Style::Length length{}; + fromRawValue(context, value, length); + result = (YGValue)length; +} + +yoga::FloatOptional convertAspectRatio( + const PropsParserContext& /*context*/, + const RawValue& value) { + if (value.hasType()) { + return yoga::FloatOptional((float)value); + } + if (ReactNativeFeatureFlags::enableNativeCSSParsing() && + value.hasType()) { + auto ratio = parseCSSProperty((std::string)value); + if (std::holds_alternative(ratio)) { + auto r = std::get(ratio); + if (!r.isDegenerate()) { + return yoga::FloatOptional(r.numerator / r.denominator); + } + } + } + return {}; +} + +namespace { + +std::optional toRadians(const RawValue& value) { + if (value.hasType()) { + return (Float)value; + } + if (!value.hasType()) { + return {}; + } + + auto angle = parseCSSProperty((std::string)value); + if (std::holds_alternative(angle)) { + return static_cast( + std::get(angle).degrees * M_PI / 180.0f); + } + + return {}; +} + +} // namespace + +ValueUnit toValueUnit(const RawValue& value) { + if (value.hasType()) { + return ValueUnit((Float)value, UnitType::Point); + } + if (!value.hasType()) { + return {}; + } + + auto pct = parseCSSProperty((std::string)value); + if (std::holds_alternative(pct)) { + return ValueUnit(std::get(pct).value, UnitType::Percent); + } + + return {}; +} + +void fromRawValue( + const PropsParserContext& /*context*/, + const RawValue& value, + ValueUnit& result) { + result = toValueUnit(value); +} + +namespace { + +ValueUnit cssLengthPercentageToValueUnit( + const std::variant& value) { + if (std::holds_alternative(value)) { + auto len = std::get(value); + if (len.unit != CSSLengthUnit::Px) { + return {}; + } + return {len.value, UnitType::Point}; + } else { + return {std::get(value).value, UnitType::Percent}; + } +} + +std::optional fromCSSTransformFunction( + const CSSTransformFunction& cssTransform) { + constexpr auto Zero = ValueUnit(0, UnitType::Point); + constexpr auto One = ValueUnit(1, UnitType::Point); + + return std::visit( + [&](auto&& func) -> std::optional { + using T = std::decay_t; + + if constexpr (std::is_same_v) { + auto radians = static_cast(func.degrees * M_PI / 180.0f); + return TransformOperation{ + .type = TransformOperationType::Rotate, + .x = Zero, + .y = Zero, + .z = ValueUnit(radians, UnitType::Point)}; + } + + if constexpr (std::is_same_v) { + auto radians = static_cast(func.degrees * M_PI / 180.0f); + return TransformOperation{ + .type = TransformOperationType::Rotate, + .x = ValueUnit(radians, UnitType::Point), + .y = Zero, + .z = Zero}; + } + + if constexpr (std::is_same_v) { + auto radians = static_cast(func.degrees * M_PI / 180.0f); + return TransformOperation{ + .type = TransformOperationType::Rotate, + .x = Zero, + .y = ValueUnit(radians, UnitType::Point), + .z = Zero}; + } + + if constexpr (std::is_same_v) { + auto radians = static_cast(func.degrees * M_PI / 180.0f); + return TransformOperation{ + .type = TransformOperationType::Rotate, + .x = Zero, + .y = Zero, + .z = ValueUnit(radians, UnitType::Point)}; + } + + if constexpr (std::is_same_v) { + auto x = cssLengthPercentageToValueUnit(func.x); + auto y = cssLengthPercentageToValueUnit(func.y); + if (!x || !y) { + return std::nullopt; + } + return TransformOperation{ + .type = TransformOperationType::Translate, + .x = x, + .y = y, + .z = Zero}; + } + + if constexpr (std::is_same_v) { + auto x = cssLengthPercentageToValueUnit(func.value); + if (!x) { + return std::nullopt; + } + return TransformOperation{ + .type = TransformOperationType::Translate, + .x = x, + .y = Zero, + .z = Zero}; + } + + if constexpr (std::is_same_v) { + auto y = cssLengthPercentageToValueUnit(func.value); + if (!y) { + return std::nullopt; + } + return TransformOperation{ + .type = TransformOperationType::Translate, + .x = Zero, + .y = y, + .z = Zero}; + } + + if constexpr (std::is_same_v) { + auto x = cssLengthPercentageToValueUnit(func.x); + auto y = cssLengthPercentageToValueUnit(func.y); + if (!x || !y || func.z.unit != CSSLengthUnit::Px) { + return std::nullopt; + } + return TransformOperation{ + .type = TransformOperationType::Translate, + .x = x, + .y = y, + .z = ValueUnit(func.z.value, UnitType::Point)}; + } + + if constexpr (std::is_same_v) { + return TransformOperation{ + .type = TransformOperationType::Scale, + .x = ValueUnit(func.x, UnitType::Point), + .y = ValueUnit(func.y, UnitType::Point), + .z = One}; + } + + if constexpr (std::is_same_v) { + return TransformOperation{ + .type = TransformOperationType::Scale, + .x = ValueUnit(func.value, UnitType::Point), + .y = One, + .z = One}; + } + + if constexpr (std::is_same_v) { + return TransformOperation{ + .type = TransformOperationType::Scale, + .x = One, + .y = ValueUnit(func.value, UnitType::Point), + .z = One}; + } + + if constexpr (std::is_same_v) { + auto radians = static_cast(func.degrees * M_PI / 180.0f); + return TransformOperation{ + .type = TransformOperationType::Skew, + .x = ValueUnit(radians, UnitType::Point), + .y = Zero, + .z = Zero}; + } + + if constexpr (std::is_same_v) { + auto radians = static_cast(func.degrees * M_PI / 180.0f); + return TransformOperation{ + .type = TransformOperationType::Skew, + .x = Zero, + .y = ValueUnit(radians, UnitType::Point), + .z = Zero}; + } + + if constexpr (std::is_same_v) { + if (func.length.unit != CSSLengthUnit::Px) { + return std::nullopt; + } + return TransformOperation{ + .type = TransformOperationType::Perspective, + .x = ValueUnit(func.length.value, UnitType::Point), + .y = Zero, + .z = Zero}; + } + + if constexpr (std::is_same_v) { + return TransformOperation{ + .type = TransformOperationType::Arbitrary, + .x = Zero, + .y = Zero, + .z = Zero}; + } + }, + cssTransform); +} + +void parseProcessedTransform( + const PropsParserContext& /*context*/, + const RawValue& value, + Transform& result) { + auto transformMatrix = Transform{}; + react_native_expect(value.hasType>()); + if (!value.hasType>()) { + result = transformMatrix; + return; + } + + auto configurations = static_cast>(value); + for (const auto& configuration : configurations) { + if (!configuration.hasType>()) { + result = {}; + return; + } + + auto configurationPair = + static_cast>(configuration); + if (configurationPair.size() != 1) { + result = {}; + return; + } + + auto pair = configurationPair.begin(); + auto operation = pair->first; + auto& parameters = pair->second; + auto Zero = ValueUnit(0, UnitType::Point); + auto One = ValueUnit(1, UnitType::Point); + + if (operation == "matrix") { + // T215634510: We should support matrix transforms as part of a list of + // transforms + if (configurations.size() > 1) { + result = {}; + return; + } + + if (!parameters.hasType>()) { + result = {}; + return; + } + + auto numbers = (std::vector)parameters; + if (numbers.size() != 9 && numbers.size() != 16) { + result = {}; + return; + } + + if (numbers.size() == 16) { + size_t i = 0; + + for (auto number : numbers) { + transformMatrix.matrix[i++] = number; + } + } else if (numbers.size() == 9) { + // We need to convert the 2d transform matrix into a 3d one as such: + // [ + // x00, x01, 0, x02 + // x10, x11, 0, x12 + // 0, 0, 1, 0 + // x20, x21, 0, x22 + // ] + transformMatrix.matrix[0] = numbers[0]; + transformMatrix.matrix[1] = numbers[1]; + transformMatrix.matrix[2] = 0; + transformMatrix.matrix[3] = numbers[2]; + transformMatrix.matrix[4] = numbers[3]; + transformMatrix.matrix[5] = numbers[4]; + transformMatrix.matrix[6] = 0; + transformMatrix.matrix[7] = numbers[5]; + transformMatrix.matrix[8] = 0; + transformMatrix.matrix[9] = 0; + transformMatrix.matrix[10] = 1; + transformMatrix.matrix[11] = 0; + transformMatrix.matrix[12] = numbers[6]; + transformMatrix.matrix[13] = numbers[7]; + transformMatrix.matrix[14] = 0; + transformMatrix.matrix[15] = numbers[8]; + } + transformMatrix.operations.push_back( + TransformOperation{ + .type = TransformOperationType::Arbitrary, + .x = Zero, + .y = Zero, + .z = Zero}); + } else if (operation == "perspective") { + if (!parameters.hasType()) { + result = {}; + return; + } + + transformMatrix.operations.push_back( + TransformOperation{ + .type = TransformOperationType::Perspective, + .x = ValueUnit((Float)parameters, UnitType::Point), + .y = Zero, + .z = Zero}); + } else if (operation == "rotateX") { + auto radians = toRadians(parameters); + if (!radians.has_value()) { + result = {}; + return; + } + + transformMatrix.operations.push_back( + TransformOperation{ + .type = TransformOperationType::Rotate, + .x = ValueUnit(*radians, UnitType::Point), + .y = Zero, + .z = Zero}); + } else if (operation == "rotateY") { + auto radians = toRadians(parameters); + if (!radians.has_value()) { + result = {}; + return; + } + + transformMatrix.operations.push_back( + TransformOperation{ + .type = TransformOperationType::Rotate, + .x = Zero, + .y = ValueUnit(*radians, UnitType::Point), + .z = Zero}); + } else if (operation == "rotateZ" || operation == "rotate") { + auto radians = toRadians(parameters); + if (!radians.has_value()) { + result = {}; + return; + } + + transformMatrix.operations.push_back( + TransformOperation{ + .type = TransformOperationType::Rotate, + .x = Zero, + .y = Zero, + .z = ValueUnit(*radians, UnitType::Point)}); + } else if (operation == "scale") { + if (!parameters.hasType()) { + result = {}; + return; + } + + auto number = ValueUnit((Float)parameters, UnitType::Point); + transformMatrix.operations.push_back( + TransformOperation{ + .type = TransformOperationType::Scale, + .x = number, + .y = number, + .z = number}); + } else if (operation == "scaleX") { + if (!parameters.hasType()) { + result = {}; + return; + } + + transformMatrix.operations.push_back( + TransformOperation{ + .type = TransformOperationType::Scale, + .x = ValueUnit((Float)parameters, UnitType::Point), + .y = One, + .z = One}); + } else if (operation == "scaleY") { + if (!parameters.hasType()) { + result = {}; + return; + } + + transformMatrix.operations.push_back( + TransformOperation{ + .type = TransformOperationType::Scale, + .x = One, + .y = ValueUnit((Float)parameters, UnitType::Point), + .z = One}); + } else if (operation == "scaleZ") { + if (!parameters.hasType()) { + result = {}; + return; + } + + transformMatrix.operations.push_back( + TransformOperation{ + .type = TransformOperationType::Scale, + .x = One, + .y = One, + .z = ValueUnit((Float)parameters, UnitType::Point)}); + } else if (operation == "translate") { + if (!parameters.hasType>()) { + result = {}; + return; + } + + auto numbers = (std::vector)parameters; + if (numbers.size() != 2) { + result = {}; + return; + } + + auto valueX = toValueUnit(numbers[0]); + if (!valueX) { + result = {}; + return; + } + + auto valueY = toValueUnit(numbers[1]); + if (!valueY) { + result = {}; + return; + } + + transformMatrix.operations.push_back( + TransformOperation{ + .type = TransformOperationType::Translate, + .x = valueX, + .y = valueY, + .z = Zero}); + } else if (operation == "translateX") { + auto valueX = toValueUnit(parameters); + if (!valueX) { + result = {}; + return; + } + + transformMatrix.operations.push_back( + TransformOperation{ + .type = TransformOperationType::Translate, + .x = valueX, + .y = Zero, + .z = Zero}); + } else if (operation == "translateY") { + auto valueY = toValueUnit(parameters); + if (!valueY) { + result = {}; + return; + } + + transformMatrix.operations.push_back( + TransformOperation{ + .type = TransformOperationType::Translate, + .x = Zero, + .y = valueY, + .z = Zero}); + } else if (operation == "skewX") { + auto radians = toRadians(parameters); + if (!radians.has_value()) { + result = {}; + return; + } + + transformMatrix.operations.push_back( + TransformOperation{ + .type = TransformOperationType::Skew, + .x = ValueUnit(*radians, UnitType::Point), + .y = Zero, + .z = Zero}); + } else if (operation == "skewY") { + auto radians = toRadians(parameters); + if (!radians.has_value()) { + result = {}; + return; + } + + transformMatrix.operations.push_back( + TransformOperation{ + .type = TransformOperationType::Skew, + .x = Zero, + .y = ValueUnit(*radians, UnitType::Point), + .z = Zero}); + } + } + + result = transformMatrix; +} + +void parseUnprocessedTransformString( + const std::string& value, + Transform& result) { + auto transformList = parseCSSProperty(value); + if (!std::holds_alternative(transformList)) { + result = {}; + return; + } + + auto transformMatrix = Transform{}; + const auto& cssFuncs = std::get(transformList); + transformMatrix.operations.reserve(cssFuncs.size()); + for (const auto& cssFunc : cssFuncs) { + auto op = fromCSSTransformFunction(cssFunc); + if (!op.has_value()) { + result = {}; + return; + } + + if (op->type == TransformOperationType::Arbitrary) { + // CSSMatrix: expand 6-value 2D matrix to 4x4 matrix + if (std::holds_alternative(cssFunc)) { + const auto& m = std::get(cssFunc); + transformMatrix.matrix[0] = m.values[0]; + transformMatrix.matrix[1] = m.values[1]; + transformMatrix.matrix[2] = 0; + transformMatrix.matrix[3] = 0; + transformMatrix.matrix[4] = m.values[2]; + transformMatrix.matrix[5] = m.values[3]; + transformMatrix.matrix[6] = 0; + transformMatrix.matrix[7] = 0; + transformMatrix.matrix[8] = 0; + transformMatrix.matrix[9] = 0; + transformMatrix.matrix[10] = 1; + transformMatrix.matrix[11] = 0; + transformMatrix.matrix[12] = m.values[4]; + transformMatrix.matrix[13] = m.values[5]; + transformMatrix.matrix[14] = 0; + transformMatrix.matrix[15] = 1; + } + } + + transformMatrix.operations.push_back(*op); + } + + result = transformMatrix; +} + +void parseUnprocessedTransform( + const PropsParserContext& context, + const RawValue& value, + Transform& result) { + if (value.hasType()) { + parseUnprocessedTransformString((std::string)value, result); + } else { + parseProcessedTransform(context, value, result); + } +} + +} // namespace + +void fromRawValue( + const PropsParserContext& context, + const RawValue& value, + Transform& result) { + if (ReactNativeFeatureFlags::enableNativeCSSParsing()) { + parseUnprocessedTransform(context, value, result); + } else { + parseProcessedTransform(context, value, result); + } +} + +namespace { + +void parseProcessedTransformOrigin( + const PropsParserContext& /*context*/, + const RawValue& value, + TransformOrigin& result) { + if (!value.hasType>()) { + result = {}; + return; + } + + auto origins = (std::vector)value; + if (origins.size() != 3) { + result = {}; + return; + } + + TransformOrigin transformOrigin; + + for (size_t i = 0; i < 2; i++) { + auto origin = toValueUnit(origins[i]); + if (!origin) { + result = {}; + return; + } + + transformOrigin.xy[i] = origin; + } + + if (!origins[2].hasType()) { + result = {}; + return; + } + transformOrigin.z = (Float)origins[2]; + + result = transformOrigin; +} + +void parseUnprocessedTransformOriginString( + const std::string& value, + TransformOrigin& result) { + auto cssOrigin = parseCSSProperty(value); + if (!std::holds_alternative(cssOrigin)) { + result = {}; + return; + } + + const auto& origin = std::get(cssOrigin); + TransformOrigin transformOrigin; + + auto x = cssLengthPercentageToValueUnit(origin.x); + auto y = cssLengthPercentageToValueUnit(origin.y); + if (!x || !y) { + result = {}; + return; + } + + transformOrigin.xy[0] = x; + transformOrigin.xy[1] = y; + + if (origin.z.unit != CSSLengthUnit::Px) { + result = {}; + return; + } + transformOrigin.z = origin.z.value; + + result = transformOrigin; +} + +void parseUnprocessedTransformOrigin( + const PropsParserContext& context, + const RawValue& value, + TransformOrigin& result) { + if (value.hasType()) { + parseUnprocessedTransformOriginString((std::string)value, result); + } else { + parseProcessedTransformOrigin(context, value, result); + } +} + +} // namespace + +void fromRawValue( + const PropsParserContext& context, + const RawValue& value, + TransformOrigin& result) { + if (ReactNativeFeatureFlags::enableNativeCSSParsing()) { + parseUnprocessedTransformOrigin(context, value, result); + } else { + parseProcessedTransformOrigin(context, value, result); + } +} + +} // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/conversions.h b/packages/react-native/ReactCommon/react/renderer/components/view/conversions.h index e1be3a01a29..df11da0d3a3 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/conversions.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/conversions.h @@ -11,19 +11,11 @@ #include #include -#include #include #include #include #include #include -#include -#include -#include -#include -#include -#include -#include #include #include #include @@ -32,7 +24,6 @@ #include #include #include -#include #include #include #include @@ -446,645 +437,26 @@ inline void fromRawValue(const PropsParserContext &context, const RawValue &valu LOG(ERROR) << "Could not parse yoga::Display: " << stringValue; } -inline void fromRawValue(const PropsParserContext & /*context*/, const RawValue &value, yoga::Style::SizeLength &result) -{ - if (value.hasType()) { - result = yoga::StyleSizeLength::points((float)value); - return; - } else if (value.hasType()) { - const auto stringValue = (std::string)value; - if (stringValue == "auto") { - result = yoga::StyleSizeLength::ofAuto(); - return; - } else if (stringValue == "max-content") { - result = yoga::StyleSizeLength::ofMaxContent(); - return; - } else if (stringValue == "stretch") { - result = yoga::StyleSizeLength::ofStretch(); - return; - } else if (stringValue == "fit-content") { - result = yoga::StyleSizeLength::ofFitContent(); - return; - } else { - auto parsed = parseCSSProperty(stringValue); - if (std::holds_alternative(parsed)) { - result = yoga::StyleSizeLength::percent(std::get(parsed).value); - return; - } else if (std::holds_alternative(parsed)) { - result = yoga::StyleSizeLength::points(std::get(parsed).value); - return; - } - } - } - result = yoga::StyleSizeLength::undefined(); -} +void fromRawValue(const PropsParserContext & /*context*/, const RawValue &value, yoga::Style::SizeLength &result); -inline void fromRawValue(const PropsParserContext &context, const RawValue &value, yoga::Style::Length &result) -{ - if (value.hasType()) { - result = yoga::StyleLength::points((float)value); - return; - } else if (value.hasType()) { - const auto stringValue = (std::string)value; - if (stringValue == "auto") { - result = yoga::StyleLength::ofAuto(); - return; - } else { - auto parsed = parseCSSProperty(stringValue); - if (std::holds_alternative(parsed)) { - result = yoga::StyleLength::percent(std::get(parsed).value); - return; - } else if (std::holds_alternative(parsed)) { - result = yoga::StyleLength::points(std::get(parsed).value); - return; - } - } - } - result = yoga::StyleLength::undefined(); -} +void fromRawValue(const PropsParserContext &context, const RawValue &value, yoga::Style::Length &result); -inline void fromRawValue(const PropsParserContext &context, const RawValue &value, YGValue &result) -{ - yoga::Style::Length length{}; - fromRawValue(context, value, length); - result = (YGValue)length; -} +void fromRawValue(const PropsParserContext &context, const RawValue &value, YGValue &result); inline void fromRawValue(const PropsParserContext &context, const RawValue &value, yoga::FloatOptional &result) { result = value.hasType() ? yoga::FloatOptional((float)value) : yoga::FloatOptional(); } -inline yoga::FloatOptional convertAspectRatio(const PropsParserContext & /*context*/, const RawValue &value) -{ - if (value.hasType()) { - return yoga::FloatOptional((float)value); - } - if (ReactNativeFeatureFlags_DO_NOT_USE::enableNativeCSSParsing() && value.hasType()) { - auto ratio = parseCSSProperty((std::string)value); - if (std::holds_alternative(ratio)) { - auto r = std::get(ratio); - if (!r.isDegenerate()) { - return yoga::FloatOptional(r.numerator / r.denominator); - } - } - } - return {}; -} - -inline std::optional toRadians(const RawValue &value) -{ - if (value.hasType()) { - return (Float)value; - } - if (!value.hasType()) { - return {}; - } - - auto angle = parseCSSProperty((std::string)value); - if (std::holds_alternative(angle)) { - return static_cast(std::get(angle).degrees * M_PI / 180.0f); - } - - return {}; -} - -inline ValueUnit toValueUnit(const RawValue &value) -{ - if (value.hasType()) { - return ValueUnit((Float)value, UnitType::Point); - } - if (!value.hasType()) { - return {}; - } - - auto pct = parseCSSProperty((std::string)value); - if (std::holds_alternative(pct)) { - return ValueUnit(std::get(pct).value, UnitType::Percent); - } - - return {}; -} - -inline void fromRawValue(const PropsParserContext & /*context*/, const RawValue &value, ValueUnit &result) -{ - result = toValueUnit(value); -} - -inline ValueUnit cssLengthPercentageToValueUnit(const std::variant &value) -{ - if (std::holds_alternative(value)) { - auto len = std::get(value); - if (len.unit != CSSLengthUnit::Px) { - return {}; - } - return {len.value, UnitType::Point}; - } else { - return {std::get(value).value, UnitType::Percent}; - } -} - -inline std::optional fromCSSTransformFunction(const CSSTransformFunction &cssTransform) -{ - constexpr auto Zero = ValueUnit(0, UnitType::Point); - constexpr auto One = ValueUnit(1, UnitType::Point); - - return std::visit( - [&](auto &&func) -> std::optional { - using T = std::decay_t; - - if constexpr (std::is_same_v) { - auto radians = static_cast(func.degrees * M_PI / 180.0f); - return TransformOperation{ - .type = TransformOperationType::Rotate, .x = Zero, .y = Zero, .z = ValueUnit(radians, UnitType::Point)}; - } - - if constexpr (std::is_same_v) { - auto radians = static_cast(func.degrees * M_PI / 180.0f); - return TransformOperation{ - .type = TransformOperationType::Rotate, .x = ValueUnit(radians, UnitType::Point), .y = Zero, .z = Zero}; - } - - if constexpr (std::is_same_v) { - auto radians = static_cast(func.degrees * M_PI / 180.0f); - return TransformOperation{ - .type = TransformOperationType::Rotate, .x = Zero, .y = ValueUnit(radians, UnitType::Point), .z = Zero}; - } - - if constexpr (std::is_same_v) { - auto radians = static_cast(func.degrees * M_PI / 180.0f); - return TransformOperation{ - .type = TransformOperationType::Rotate, .x = Zero, .y = Zero, .z = ValueUnit(radians, UnitType::Point)}; - } - - if constexpr (std::is_same_v) { - auto x = cssLengthPercentageToValueUnit(func.x); - auto y = cssLengthPercentageToValueUnit(func.y); - if (!x || !y) { - return std::nullopt; - } - return TransformOperation{.type = TransformOperationType::Translate, .x = x, .y = y, .z = Zero}; - } - - if constexpr (std::is_same_v) { - auto x = cssLengthPercentageToValueUnit(func.value); - if (!x) { - return std::nullopt; - } - return TransformOperation{.type = TransformOperationType::Translate, .x = x, .y = Zero, .z = Zero}; - } - - if constexpr (std::is_same_v) { - auto y = cssLengthPercentageToValueUnit(func.value); - if (!y) { - return std::nullopt; - } - return TransformOperation{.type = TransformOperationType::Translate, .x = Zero, .y = y, .z = Zero}; - } - - if constexpr (std::is_same_v) { - auto x = cssLengthPercentageToValueUnit(func.x); - auto y = cssLengthPercentageToValueUnit(func.y); - if (!x || !y || func.z.unit != CSSLengthUnit::Px) { - return std::nullopt; - } - return TransformOperation{ - .type = TransformOperationType::Translate, .x = x, .y = y, .z = ValueUnit(func.z.value, UnitType::Point)}; - } - - if constexpr (std::is_same_v) { - return TransformOperation{ - .type = TransformOperationType::Scale, - .x = ValueUnit(func.x, UnitType::Point), - .y = ValueUnit(func.y, UnitType::Point), - .z = One}; - } - - if constexpr (std::is_same_v) { - return TransformOperation{ - .type = TransformOperationType::Scale, .x = ValueUnit(func.value, UnitType::Point), .y = One, .z = One}; - } - - if constexpr (std::is_same_v) { - return TransformOperation{ - .type = TransformOperationType::Scale, .x = One, .y = ValueUnit(func.value, UnitType::Point), .z = One}; - } - - if constexpr (std::is_same_v) { - auto radians = static_cast(func.degrees * M_PI / 180.0f); - return TransformOperation{ - .type = TransformOperationType::Skew, .x = ValueUnit(radians, UnitType::Point), .y = Zero, .z = Zero}; - } - - if constexpr (std::is_same_v) { - auto radians = static_cast(func.degrees * M_PI / 180.0f); - return TransformOperation{ - .type = TransformOperationType::Skew, .x = Zero, .y = ValueUnit(radians, UnitType::Point), .z = Zero}; - } - - if constexpr (std::is_same_v) { - if (func.length.unit != CSSLengthUnit::Px) { - return std::nullopt; - } - return TransformOperation{ - .type = TransformOperationType::Perspective, - .x = ValueUnit(func.length.value, UnitType::Point), - .y = Zero, - .z = Zero}; - } - - if constexpr (std::is_same_v) { - return TransformOperation{.type = TransformOperationType::Arbitrary, .x = Zero, .y = Zero, .z = Zero}; - } - }, - cssTransform); -} - -inline void parseProcessedTransform(const PropsParserContext & /*context*/, const RawValue &value, Transform &result) -{ - auto transformMatrix = Transform{}; - react_native_expect(value.hasType>()); - if (!value.hasType>()) { - result = transformMatrix; - return; - } - - auto configurations = static_cast>(value); - for (const auto &configuration : configurations) { - if (!configuration.hasType>()) { - result = {}; - return; - } - - auto configurationPair = static_cast>(configuration); - if (configurationPair.size() != 1) { - result = {}; - return; - } +yoga::FloatOptional convertAspectRatio(const PropsParserContext & /*context*/, const RawValue &value); - auto pair = configurationPair.begin(); - auto operation = pair->first; - auto ¶meters = pair->second; - auto Zero = ValueUnit(0, UnitType::Point); - auto One = ValueUnit(1, UnitType::Point); - - if (operation == "matrix") { - // T215634510: We should support matrix transforms as part of a list of - // transforms - if (configurations.size() > 1) { - result = {}; - return; - } +ValueUnit toValueUnit(const RawValue &value); - if (!parameters.hasType>()) { - result = {}; - return; - } +void fromRawValue(const PropsParserContext & /*context*/, const RawValue &value, ValueUnit &result); - auto numbers = (std::vector)parameters; - if (numbers.size() != 9 && numbers.size() != 16) { - result = {}; - return; - } - - if (numbers.size() == 16) { - size_t i = 0; +void fromRawValue(const PropsParserContext &context, const RawValue &value, Transform &result); - for (auto number : numbers) { - transformMatrix.matrix[i++] = number; - } - } else if (numbers.size() == 9) { - // We need to convert the 2d transform matrix into a 3d one as such: - // [ - // x00, x01, 0, x02 - // x10, x11, 0, x12 - // 0, 0, 1, 0 - // x20, x21, 0, x22 - // ] - transformMatrix.matrix[0] = numbers[0]; - transformMatrix.matrix[1] = numbers[1]; - transformMatrix.matrix[2] = 0; - transformMatrix.matrix[3] = numbers[2]; - transformMatrix.matrix[4] = numbers[3]; - transformMatrix.matrix[5] = numbers[4]; - transformMatrix.matrix[6] = 0; - transformMatrix.matrix[7] = numbers[5]; - transformMatrix.matrix[8] = 0; - transformMatrix.matrix[9] = 0; - transformMatrix.matrix[10] = 1; - transformMatrix.matrix[11] = 0; - transformMatrix.matrix[12] = numbers[6]; - transformMatrix.matrix[13] = numbers[7]; - transformMatrix.matrix[14] = 0; - transformMatrix.matrix[15] = numbers[8]; - } - transformMatrix.operations.push_back( - TransformOperation{.type = TransformOperationType::Arbitrary, .x = Zero, .y = Zero, .z = Zero}); - } else if (operation == "perspective") { - if (!parameters.hasType()) { - result = {}; - return; - } - - transformMatrix.operations.push_back( - TransformOperation{ - .type = TransformOperationType::Perspective, - .x = ValueUnit((Float)parameters, UnitType::Point), - .y = Zero, - .z = Zero}); - } else if (operation == "rotateX") { - auto radians = toRadians(parameters); - if (!radians.has_value()) { - result = {}; - return; - } - - transformMatrix.operations.push_back( - TransformOperation{ - .type = TransformOperationType::Rotate, .x = ValueUnit(*radians, UnitType::Point), .y = Zero, .z = Zero}); - } else if (operation == "rotateY") { - auto radians = toRadians(parameters); - if (!radians.has_value()) { - result = {}; - return; - } - - transformMatrix.operations.push_back( - TransformOperation{ - .type = TransformOperationType::Rotate, .x = Zero, .y = ValueUnit(*radians, UnitType::Point), .z = Zero}); - } else if (operation == "rotateZ" || operation == "rotate") { - auto radians = toRadians(parameters); - if (!radians.has_value()) { - result = {}; - return; - } - - transformMatrix.operations.push_back( - TransformOperation{ - .type = TransformOperationType::Rotate, .x = Zero, .y = Zero, .z = ValueUnit(*radians, UnitType::Point)}); - } else if (operation == "scale") { - if (!parameters.hasType()) { - result = {}; - return; - } - - auto number = ValueUnit((Float)parameters, UnitType::Point); - transformMatrix.operations.push_back( - TransformOperation{.type = TransformOperationType::Scale, .x = number, .y = number, .z = number}); - } else if (operation == "scaleX") { - if (!parameters.hasType()) { - result = {}; - return; - } - - transformMatrix.operations.push_back( - TransformOperation{ - .type = TransformOperationType::Scale, - .x = ValueUnit((Float)parameters, UnitType::Point), - .y = One, - .z = One}); - } else if (operation == "scaleY") { - if (!parameters.hasType()) { - result = {}; - return; - } - - transformMatrix.operations.push_back( - TransformOperation{ - .type = TransformOperationType::Scale, - .x = One, - .y = ValueUnit((Float)parameters, UnitType::Point), - .z = One}); - } else if (operation == "scaleZ") { - if (!parameters.hasType()) { - result = {}; - return; - } - - transformMatrix.operations.push_back( - TransformOperation{ - .type = TransformOperationType::Scale, - .x = One, - .y = One, - .z = ValueUnit((Float)parameters, UnitType::Point)}); - } else if (operation == "translate") { - if (!parameters.hasType>()) { - result = {}; - return; - } - - auto numbers = (std::vector)parameters; - if (numbers.size() != 2) { - result = {}; - return; - } - - auto valueX = toValueUnit(numbers[0]); - if (!valueX) { - result = {}; - return; - } - - auto valueY = toValueUnit(numbers[1]); - if (!valueY) { - result = {}; - return; - } - - transformMatrix.operations.push_back( - TransformOperation{.type = TransformOperationType::Translate, .x = valueX, .y = valueY, .z = Zero}); - } else if (operation == "translateX") { - auto valueX = toValueUnit(parameters); - if (!valueX) { - result = {}; - return; - } - - transformMatrix.operations.push_back( - TransformOperation{.type = TransformOperationType::Translate, .x = valueX, .y = Zero, .z = Zero}); - } else if (operation == "translateY") { - auto valueY = toValueUnit(parameters); - if (!valueY) { - result = {}; - return; - } - - transformMatrix.operations.push_back( - TransformOperation{.type = TransformOperationType::Translate, .x = Zero, .y = valueY, .z = Zero}); - } else if (operation == "skewX") { - auto radians = toRadians(parameters); - if (!radians.has_value()) { - result = {}; - return; - } - - transformMatrix.operations.push_back( - TransformOperation{ - .type = TransformOperationType::Skew, .x = ValueUnit(*radians, UnitType::Point), .y = Zero, .z = Zero}); - } else if (operation == "skewY") { - auto radians = toRadians(parameters); - if (!radians.has_value()) { - result = {}; - return; - } - - transformMatrix.operations.push_back( - TransformOperation{ - .type = TransformOperationType::Skew, .x = Zero, .y = ValueUnit(*radians, UnitType::Point), .z = Zero}); - } - } - - result = transformMatrix; -} - -inline void parseUnprocessedTransformString(const std::string &value, Transform &result) -{ - auto transformList = parseCSSProperty(value); - if (!std::holds_alternative(transformList)) { - result = {}; - return; - } - - auto transformMatrix = Transform{}; - const auto &cssFuncs = std::get(transformList); - transformMatrix.operations.reserve(cssFuncs.size()); - for (const auto &cssFunc : cssFuncs) { - auto op = fromCSSTransformFunction(cssFunc); - if (!op.has_value()) { - result = {}; - return; - } - - if (op->type == TransformOperationType::Arbitrary) { - // CSSMatrix: expand 6-value 2D matrix to 4x4 matrix - if (std::holds_alternative(cssFunc)) { - const auto &m = std::get(cssFunc); - transformMatrix.matrix[0] = m.values[0]; - transformMatrix.matrix[1] = m.values[1]; - transformMatrix.matrix[2] = 0; - transformMatrix.matrix[3] = 0; - transformMatrix.matrix[4] = m.values[2]; - transformMatrix.matrix[5] = m.values[3]; - transformMatrix.matrix[6] = 0; - transformMatrix.matrix[7] = 0; - transformMatrix.matrix[8] = 0; - transformMatrix.matrix[9] = 0; - transformMatrix.matrix[10] = 1; - transformMatrix.matrix[11] = 0; - transformMatrix.matrix[12] = m.values[4]; - transformMatrix.matrix[13] = m.values[5]; - transformMatrix.matrix[14] = 0; - transformMatrix.matrix[15] = 1; - } - } - - transformMatrix.operations.push_back(*op); - } - - result = transformMatrix; -} - -inline void parseUnprocessedTransform(const PropsParserContext &context, const RawValue &value, Transform &result) -{ - if (value.hasType()) { - parseUnprocessedTransformString((std::string)value, result); - } else { - parseProcessedTransform(context, value, result); - } -} - -inline void fromRawValue(const PropsParserContext &context, const RawValue &value, Transform &result) -{ - if (ReactNativeFeatureFlags_DO_NOT_USE::enableNativeCSSParsing()) { - parseUnprocessedTransform(context, value, result); - } else { - parseProcessedTransform(context, value, result); - } -} - -inline void -parseProcessedTransformOrigin(const PropsParserContext & /*context*/, const RawValue &value, TransformOrigin &result) -{ - if (!value.hasType>()) { - result = {}; - return; - } - - auto origins = (std::vector)value; - if (origins.size() != 3) { - result = {}; - return; - } - - TransformOrigin transformOrigin; - - for (size_t i = 0; i < 2; i++) { - auto origin = toValueUnit(origins[i]); - if (!origin) { - result = {}; - return; - } - - transformOrigin.xy[i] = origin; - } - - if (!origins[2].hasType()) { - result = {}; - return; - } - transformOrigin.z = (Float)origins[2]; - - result = transformOrigin; -} - -inline void parseUnprocessedTransformOriginString(const std::string &value, TransformOrigin &result) -{ - auto cssOrigin = parseCSSProperty(value); - if (!std::holds_alternative(cssOrigin)) { - result = {}; - return; - } - - const auto &origin = std::get(cssOrigin); - TransformOrigin transformOrigin; - - auto x = cssLengthPercentageToValueUnit(origin.x); - auto y = cssLengthPercentageToValueUnit(origin.y); - if (!x || !y) { - result = {}; - return; - } - - transformOrigin.xy[0] = x; - transformOrigin.xy[1] = y; - - if (origin.z.unit != CSSLengthUnit::Px) { - result = {}; - return; - } - transformOrigin.z = origin.z.value; - - result = transformOrigin; -} - -inline void -parseUnprocessedTransformOrigin(const PropsParserContext &context, const RawValue &value, TransformOrigin &result) -{ - if (value.hasType()) { - parseUnprocessedTransformOriginString((std::string)value, result); - } else { - parseProcessedTransformOrigin(context, value, result); - } -} - -inline void fromRawValue(const PropsParserContext &context, const RawValue &value, TransformOrigin &result) -{ - if (ReactNativeFeatureFlags_DO_NOT_USE::enableNativeCSSParsing()) { - parseUnprocessedTransformOrigin(context, value, result); - } else { - parseProcessedTransformOrigin(context, value, result); - } -} +void fromRawValue(const PropsParserContext &context, const RawValue &value, TransformOrigin &result); inline void fromRawValue(const PropsParserContext &context, const RawValue &value, PointerEventsMode &result) { diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/tests/ConversionsTest.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/tests/ConversionsTest.cpp index 07d1839a4c0..1ca47172f9f 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/tests/ConversionsTest.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/tests/ConversionsTest.cpp @@ -379,10 +379,10 @@ TEST_F(NativeCSSConversionsTest, unprocessed_filter_objects_unknown_type) { EXPECT_TRUE(filters.empty()); } -TEST(ConversionsTest, unprocessed_transform_css_string) { +TEST_F(NativeCSSConversionsTest, unprocessed_transform_css_string) { + RawValue value{folly::dynamic("rotate(45deg) scale(2) translateX(10px)")}; Transform result; - parseUnprocessedTransformString( - "rotate(45deg) scale(2) translateX(10px)", result); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, result); EXPECT_EQ(result.operations.size(), 3); @@ -405,9 +405,10 @@ TEST(ConversionsTest, unprocessed_transform_css_string) { EXPECT_EQ(result.operations[2].y.value, 0.0f); } -TEST(ConversionsTest, unprocessed_transform_css_translate_percent) { +TEST_F(NativeCSSConversionsTest, unprocessed_transform_css_translate_percent) { + RawValue value{folly::dynamic("translate(10px, 50%)")}; Transform result; - parseUnprocessedTransformString("translate(10px, 50%)", result); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, result); EXPECT_EQ(result.operations.size(), 1); EXPECT_EQ(result.operations[0].type, TransformOperationType::Translate); @@ -417,27 +418,28 @@ TEST(ConversionsTest, unprocessed_transform_css_translate_percent) { EXPECT_EQ(result.operations[0].y.unit, UnitType::Percent); } -TEST(ConversionsTest, unprocessed_transform_css_perspective) { +TEST_F(NativeCSSConversionsTest, unprocessed_transform_css_perspective) { + RawValue value{folly::dynamic("perspective(500px)")}; Transform result; - parseUnprocessedTransformString("perspective(500px)", result); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, result); EXPECT_EQ(result.operations.size(), 1); EXPECT_EQ(result.operations[0].type, TransformOperationType::Perspective); EXPECT_EQ(result.operations[0].x.value, 500.0f); } -TEST(ConversionsTest, unprocessed_transform_css_invalid_string) { +TEST_F(NativeCSSConversionsTest, unprocessed_transform_css_invalid_string) { + RawValue value{folly::dynamic("not-a-transform")}; Transform result; - parseUnprocessedTransformString("not-a-transform", result); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, result); EXPECT_TRUE(result.operations.empty()); } -TEST(ConversionsTest, unprocessed_transform_rawvalue_string) { +TEST_F(NativeCSSConversionsTest, unprocessed_transform_rawvalue_string) { RawValue value{folly::dynamic("rotate(45deg) scale(2)")}; Transform result; - parseUnprocessedTransform( - PropsParserContext{-1, ContextContainer{}}, value, result); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, result); EXPECT_EQ(result.operations.size(), 2); EXPECT_EQ(result.operations[0].type, TransformOperationType::Rotate); @@ -449,8 +451,7 @@ TEST(ConversionsTest, unprocessed_transform_rawvalue_array) { folly::dynamic::object("rotate", "45deg"), folly::dynamic::object("scale", 2))}; Transform result; - parseUnprocessedTransform( - PropsParserContext{-1, ContextContainer{}}, value, result); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, result); EXPECT_EQ(result.operations.size(), 2); EXPECT_EQ(result.operations[0].type, TransformOperationType::Rotate); @@ -465,8 +466,7 @@ TEST(ConversionsTest, unprocessed_transform_rawvalue_matrix) { folly::dynamic::array( 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)))}; Transform result; - parseUnprocessedTransform( - PropsParserContext{-1, ContextContainer{}}, value, result); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, result); EXPECT_EQ(result.operations.size(), 1); EXPECT_EQ(result.operations[0].type, TransformOperationType::Arbitrary); @@ -476,8 +476,7 @@ TEST(ConversionsTest, unprocessed_transform_rawvalue_translate_percent) { RawValue value{ folly::dynamic::array(folly::dynamic::object("translateX", "50%"))}; Transform result; - parseUnprocessedTransform( - PropsParserContext{-1, ContextContainer{}}, value, result); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, result); EXPECT_EQ(result.operations.size(), 1); EXPECT_EQ(result.operations[0].type, TransformOperationType::Translate); @@ -485,9 +484,10 @@ TEST(ConversionsTest, unprocessed_transform_rawvalue_translate_percent) { EXPECT_EQ(result.operations[0].x.unit, UnitType::Percent); } -TEST(ConversionsTest, unprocessed_transform_origin_css_top_left) { +TEST_F(NativeCSSConversionsTest, unprocessed_transform_origin_css_top_left) { + RawValue value{folly::dynamic("top left")}; TransformOrigin result; - parseUnprocessedTransformOriginString("top left", result); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, result); EXPECT_EQ(result.xy[0].value, 0.0f); EXPECT_EQ(result.xy[0].unit, UnitType::Percent); @@ -496,9 +496,10 @@ TEST(ConversionsTest, unprocessed_transform_origin_css_top_left) { EXPECT_EQ(result.z, 0.0f); } -TEST(ConversionsTest, unprocessed_transform_origin_css_center) { +TEST_F(NativeCSSConversionsTest, unprocessed_transform_origin_css_center) { + RawValue value{folly::dynamic("center")}; TransformOrigin result; - parseUnprocessedTransformOriginString("center", result); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, result); EXPECT_EQ(result.xy[0].value, 50.0f); EXPECT_EQ(result.xy[0].unit, UnitType::Percent); @@ -507,9 +508,12 @@ TEST(ConversionsTest, unprocessed_transform_origin_css_center) { EXPECT_EQ(result.z, 0.0f); } -TEST(ConversionsTest, unprocessed_transform_origin_css_right_bottom) { +TEST_F( + NativeCSSConversionsTest, + unprocessed_transform_origin_css_right_bottom) { + RawValue value{folly::dynamic("right bottom")}; TransformOrigin result; - parseUnprocessedTransformOriginString("right bottom", result); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, result); EXPECT_EQ(result.xy[0].value, 100.0f); EXPECT_EQ(result.xy[0].unit, UnitType::Percent); @@ -518,9 +522,12 @@ TEST(ConversionsTest, unprocessed_transform_origin_css_right_bottom) { EXPECT_EQ(result.z, 0.0f); } -TEST(ConversionsTest, unprocessed_transform_origin_css_length_percent) { +TEST_F( + NativeCSSConversionsTest, + unprocessed_transform_origin_css_length_percent) { + RawValue value{folly::dynamic("10px 50%")}; TransformOrigin result; - parseUnprocessedTransformOriginString("10px 50%", result); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, result); EXPECT_EQ(result.xy[0].value, 10.0f); EXPECT_EQ(result.xy[0].unit, UnitType::Point); @@ -533,8 +540,7 @@ TEST(ConversionsTest, unprocessed_transform_origin_processed_array) { RawValue value{folly::dynamic::array("50%", "50%", 0)}; TransformOrigin result; - parseProcessedTransformOrigin( - PropsParserContext{-1, ContextContainer{}}, value, result); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, result); EXPECT_EQ(result.xy[0].value, 50.0f); EXPECT_EQ(result.xy[0].unit, UnitType::Percent); @@ -543,11 +549,10 @@ TEST(ConversionsTest, unprocessed_transform_origin_processed_array) { EXPECT_EQ(result.z, 0.0f); } -TEST(ConversionsTest, unprocessed_transform_origin_rawvalue_string) { +TEST_F(NativeCSSConversionsTest, unprocessed_transform_origin_rawvalue_string) { RawValue value{folly::dynamic("top left")}; TransformOrigin result; - parseUnprocessedTransformOrigin( - PropsParserContext{-1, ContextContainer{}}, value, result); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, result); EXPECT_EQ(result.xy[0].value, 0.0f); EXPECT_EQ(result.xy[0].unit, UnitType::Percent); @@ -559,8 +564,7 @@ TEST(ConversionsTest, unprocessed_transform_origin_rawvalue_string) { TEST(ConversionsTest, unprocessed_transform_origin_rawvalue_array) { RawValue value{folly::dynamic::array(10, "50%", 5)}; TransformOrigin result; - parseUnprocessedTransformOrigin( - PropsParserContext{-1, ContextContainer{}}, value, result); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, result); EXPECT_EQ(result.xy[0].value, 10.0f); EXPECT_EQ(result.xy[0].unit, UnitType::Point); @@ -569,11 +573,12 @@ TEST(ConversionsTest, unprocessed_transform_origin_rawvalue_array) { EXPECT_EQ(result.z, 5.0f); } -TEST(ConversionsTest, unprocessed_transform_origin_rawvalue_string_with_z) { +TEST_F( + NativeCSSConversionsTest, + unprocessed_transform_origin_rawvalue_string_with_z) { RawValue value{folly::dynamic("center center 15px")}; TransformOrigin result; - parseUnprocessedTransformOrigin( - PropsParserContext{-1, ContextContainer{}}, value, result); + fromRawValue(PropsParserContext{-1, ContextContainer{}}, value, result); EXPECT_EQ(result.xy[0].value, 50.0f); EXPECT_EQ(result.xy[0].unit, UnitType::Percent); @@ -616,28 +621,30 @@ TEST(ConversionsTest, convert_aspect_ratio_float) { EXPECT_EQ(result.unwrap(), 1.5f); } -TEST(ConversionsTest, convert_aspect_ratio_ratio_string) { - // CSSRatio parses "16/9" as {numerator: 16, denominator: 9} - auto ratio = parseCSSProperty("16/9"); - ASSERT_TRUE(std::holds_alternative(ratio)); - auto r = std::get(ratio); - EXPECT_FALSE(r.isDegenerate()); - EXPECT_NEAR(r.numerator / r.denominator, 16.0f / 9.0f, 0.001f); +TEST_F(NativeCSSConversionsTest, convert_aspect_ratio_ratio_string) { + RawValue value{folly::dynamic("16/9")}; + auto result = + convertAspectRatio(PropsParserContext{-1, ContextContainer{}}, value); + + ASSERT_FALSE(result.isUndefined()); + EXPECT_NEAR(result.unwrap(), 16.0f / 9.0f, 0.001f); } -TEST(ConversionsTest, convert_aspect_ratio_number_string) { - // CSSRatio parses "1.5" as {numerator: 1.5, denominator: 1.0} - auto ratio = parseCSSProperty("1.5"); - ASSERT_TRUE(std::holds_alternative(ratio)); - auto r = std::get(ratio); - EXPECT_FALSE(r.isDegenerate()); - EXPECT_EQ(r.numerator / r.denominator, 1.5f); +TEST_F(NativeCSSConversionsTest, convert_aspect_ratio_number_string) { + RawValue value{folly::dynamic("1.5")}; + auto result = + convertAspectRatio(PropsParserContext{-1, ContextContainer{}}, value); + + ASSERT_FALSE(result.isUndefined()); + EXPECT_EQ(result.unwrap(), 1.5f); } -TEST(ConversionsTest, convert_aspect_ratio_degenerate) { - auto ratio = parseCSSProperty("0/0"); - ASSERT_TRUE(std::holds_alternative(ratio)); - EXPECT_TRUE(std::get(ratio).isDegenerate()); +TEST_F(NativeCSSConversionsTest, convert_aspect_ratio_degenerate) { + RawValue value{folly::dynamic("0/0")}; + auto result = + convertAspectRatio(PropsParserContext{-1, ContextContainer{}}, value); + + EXPECT_TRUE(result.isUndefined()); } TEST(ConversionsTest, float_optional_from_rawvalue_float) { diff --git a/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api b/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api index a2de8f27e2a..777213ff609 100644 --- a/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api @@ -900,7 +900,6 @@ facebook::react::Size facebook::react::ModalHostViewScreenSize(void); facebook::react::Size facebook::react::yogaMeassureToSize(int64_t value); facebook::react::SurfaceId facebook::react::getNextRootViewTag() noexcept; facebook::react::TurboModuleMethodValueKind facebook::react::getTurboModuleMethodValueKind(facebook::jsi::Runtime& rt, const facebook::jsi::Value* value); -facebook::react::ValueUnit facebook::react::cssLengthPercentageToValueUnit(const std::variant& value); facebook::react::ValueUnit facebook::react::toValueUnit(const facebook::react::RawValue& value); facebook::yoga::FloatOptional facebook::react::convertAspectRatio(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value); facebook::yoga::FloatOptional facebook::react::yogaOptionalFloatFromFloat(facebook::react::Float value); @@ -948,10 +947,8 @@ std::optional facebook::react::blendModeFromString(s std::optional facebook::react::filterTypeFromString(std::string_view filterName); std::optional facebook::react::coerceLength(const facebook::react::RawValue& value); std::optional facebook::react::optionalFloatFromYogaValue(const facebook::yoga::Style::Length& length, std::optional base = {}); -std::optional facebook::react::toRadians(const facebook::react::RawValue& value); std::optional facebook::react::fontVariantFromCSSFontVariant(facebook::react::CSSFontVariant cssVariant); std::optional facebook::react::isolationFromString(std::string_view isolationSetting); -std::optional facebook::react::fromCSSTransformFunction(const facebook::react::CSSTransformFunction& cssTransform); std::pair facebook::react::calculateAnimationProgress(uint64_t now, const facebook::react::LayoutAnimation& animation, const facebook::react::AnimationConfig& mutationConfig); std::string facebook::react::base64Encode(const std::string_view s); std::string facebook::react::componentNameByReactViewName(std::string viewName); @@ -1144,16 +1141,10 @@ void facebook::react::g_setNativeAnimatedNowTimestampFunction(facebook::react::T void facebook::react::handleJSError(facebook::jsi::Runtime& runtime, const facebook::jsi::JSError& error, bool isFatal); void facebook::react::parseProcessedBackgroundImage(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); void facebook::react::parseProcessedFontVariant(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::FontVariant& result); -void facebook::react::parseProcessedTransform(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::Transform& result); -void facebook::react::parseProcessedTransformOrigin(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); void facebook::react::parseUnprocessedBackgroundImageList(const facebook::react::PropsParserContext& context, const std::vector& value, std::vector& result); void facebook::react::parseUnprocessedBackgroundImageString(const std::string& value, std::vector& result); void facebook::react::parseUnprocessedFontVariant(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedFontVariantString(const std::string& value, facebook::react::FontVariant& result); -void facebook::react::parseUnprocessedTransform(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::Transform& result); -void facebook::react::parseUnprocessedTransformOrigin(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); -void facebook::react::parseUnprocessedTransformOriginString(const std::string& value, facebook::react::TransformOrigin& result); -void facebook::react::parseUnprocessedTransformString(const std::string& value, facebook::react::Transform& result); void facebook::react::reactAndroidLoggingHook(const std::string& message, unsigned int logLevel); void facebook::react::registerCxxModuleToGlobalModuleMap(std::string name, std::function(std::shared_ptr jsInvoker)> moduleProviderFunc); void facebook::react::serializeTransformAxis(const facebook::react::TransformOperation& operation, const std::string& operationName, float defaultValue, folly::dynamic& resultTranslateArray); diff --git a/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api b/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api index e2aacbaaac7..030f65f3918 100644 --- a/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api @@ -899,7 +899,6 @@ facebook::react::Size facebook::react::ModalHostViewScreenSize(void); facebook::react::Size facebook::react::yogaMeassureToSize(int64_t value); facebook::react::SurfaceId facebook::react::getNextRootViewTag() noexcept; facebook::react::TurboModuleMethodValueKind facebook::react::getTurboModuleMethodValueKind(facebook::jsi::Runtime& rt, const facebook::jsi::Value* value); -facebook::react::ValueUnit facebook::react::cssLengthPercentageToValueUnit(const std::variant& value); facebook::react::ValueUnit facebook::react::toValueUnit(const facebook::react::RawValue& value); facebook::yoga::FloatOptional facebook::react::convertAspectRatio(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value); facebook::yoga::FloatOptional facebook::react::yogaOptionalFloatFromFloat(facebook::react::Float value); @@ -946,10 +945,8 @@ std::optional facebook::react::blendModeFromString(s std::optional facebook::react::filterTypeFromString(std::string_view filterName); std::optional facebook::react::coerceLength(const facebook::react::RawValue& value); std::optional facebook::react::optionalFloatFromYogaValue(const facebook::yoga::Style::Length& length, std::optional base = {}); -std::optional facebook::react::toRadians(const facebook::react::RawValue& value); std::optional facebook::react::fontVariantFromCSSFontVariant(facebook::react::CSSFontVariant cssVariant); std::optional facebook::react::isolationFromString(std::string_view isolationSetting); -std::optional facebook::react::fromCSSTransformFunction(const facebook::react::CSSTransformFunction& cssTransform); std::pair facebook::react::calculateAnimationProgress(uint64_t now, const facebook::react::LayoutAnimation& animation, const facebook::react::AnimationConfig& mutationConfig); std::string facebook::react::base64Encode(const std::string_view s); std::string facebook::react::componentNameByReactViewName(std::string viewName); @@ -1140,16 +1137,10 @@ void facebook::react::g_setNativeAnimatedNowTimestampFunction(facebook::react::T void facebook::react::handleJSError(facebook::jsi::Runtime& runtime, const facebook::jsi::JSError& error, bool isFatal); void facebook::react::parseProcessedBackgroundImage(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); void facebook::react::parseProcessedFontVariant(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::FontVariant& result); -void facebook::react::parseProcessedTransform(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::Transform& result); -void facebook::react::parseProcessedTransformOrigin(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); void facebook::react::parseUnprocessedBackgroundImageList(const facebook::react::PropsParserContext& context, const std::vector& value, std::vector& result); void facebook::react::parseUnprocessedBackgroundImageString(const std::string& value, std::vector& result); void facebook::react::parseUnprocessedFontVariant(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedFontVariantString(const std::string& value, facebook::react::FontVariant& result); -void facebook::react::parseUnprocessedTransform(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::Transform& result); -void facebook::react::parseUnprocessedTransformOrigin(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); -void facebook::react::parseUnprocessedTransformOriginString(const std::string& value, facebook::react::TransformOrigin& result); -void facebook::react::parseUnprocessedTransformString(const std::string& value, facebook::react::Transform& result); void facebook::react::reactAndroidLoggingHook(const std::string& message, unsigned int logLevel); void facebook::react::registerCxxModuleToGlobalModuleMap(std::string name, std::function(std::shared_ptr jsInvoker)> moduleProviderFunc); void facebook::react::serializeTransformAxis(const facebook::react::TransformOperation& operation, const std::string& operationName, float defaultValue, folly::dynamic& resultTranslateArray); diff --git a/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api b/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api index 5fa07b18af7..0717d9252c8 100644 --- a/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api @@ -900,7 +900,6 @@ facebook::react::Size facebook::react::ModalHostViewScreenSize(void); facebook::react::Size facebook::react::yogaMeassureToSize(int64_t value); facebook::react::SurfaceId facebook::react::getNextRootViewTag() noexcept; facebook::react::TurboModuleMethodValueKind facebook::react::getTurboModuleMethodValueKind(facebook::jsi::Runtime& rt, const facebook::jsi::Value* value); -facebook::react::ValueUnit facebook::react::cssLengthPercentageToValueUnit(const std::variant& value); facebook::react::ValueUnit facebook::react::toValueUnit(const facebook::react::RawValue& value); facebook::yoga::FloatOptional facebook::react::convertAspectRatio(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value); facebook::yoga::FloatOptional facebook::react::yogaOptionalFloatFromFloat(facebook::react::Float value); @@ -948,10 +947,8 @@ std::optional facebook::react::blendModeFromString(s std::optional facebook::react::filterTypeFromString(std::string_view filterName); std::optional facebook::react::coerceLength(const facebook::react::RawValue& value); std::optional facebook::react::optionalFloatFromYogaValue(const facebook::yoga::Style::Length& length, std::optional base = {}); -std::optional facebook::react::toRadians(const facebook::react::RawValue& value); std::optional facebook::react::fontVariantFromCSSFontVariant(facebook::react::CSSFontVariant cssVariant); std::optional facebook::react::isolationFromString(std::string_view isolationSetting); -std::optional facebook::react::fromCSSTransformFunction(const facebook::react::CSSTransformFunction& cssTransform); std::pair facebook::react::calculateAnimationProgress(uint64_t now, const facebook::react::LayoutAnimation& animation, const facebook::react::AnimationConfig& mutationConfig); std::string facebook::react::base64Encode(const std::string_view s); std::string facebook::react::componentNameByReactViewName(std::string viewName); @@ -1144,16 +1141,10 @@ void facebook::react::g_setNativeAnimatedNowTimestampFunction(facebook::react::T void facebook::react::handleJSError(facebook::jsi::Runtime& runtime, const facebook::jsi::JSError& error, bool isFatal); void facebook::react::parseProcessedBackgroundImage(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); void facebook::react::parseProcessedFontVariant(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::FontVariant& result); -void facebook::react::parseProcessedTransform(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::Transform& result); -void facebook::react::parseProcessedTransformOrigin(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); void facebook::react::parseUnprocessedBackgroundImageList(const facebook::react::PropsParserContext& context, const std::vector& value, std::vector& result); void facebook::react::parseUnprocessedBackgroundImageString(const std::string& value, std::vector& result); void facebook::react::parseUnprocessedFontVariant(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedFontVariantString(const std::string& value, facebook::react::FontVariant& result); -void facebook::react::parseUnprocessedTransform(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::Transform& result); -void facebook::react::parseUnprocessedTransformOrigin(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); -void facebook::react::parseUnprocessedTransformOriginString(const std::string& value, facebook::react::TransformOrigin& result); -void facebook::react::parseUnprocessedTransformString(const std::string& value, facebook::react::Transform& result); void facebook::react::reactAndroidLoggingHook(const std::string& message, unsigned int logLevel); void facebook::react::registerCxxModuleToGlobalModuleMap(std::string name, std::function(std::shared_ptr jsInvoker)> moduleProviderFunc); void facebook::react::serializeTransformAxis(const facebook::react::TransformOperation& operation, const std::string& operationName, float defaultValue, folly::dynamic& resultTranslateArray); diff --git a/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api index 951d1d19282..be12c2dd131 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api @@ -3714,7 +3714,6 @@ facebook::react::Size facebook::react::ModalHostViewScreenSize(void); facebook::react::Size facebook::react::yogaMeassureToSize(int64_t value); facebook::react::SurfaceId facebook::react::getNextRootViewTag() noexcept; facebook::react::TurboModuleMethodValueKind facebook::react::getTurboModuleMethodValueKind(facebook::jsi::Runtime& rt, const facebook::jsi::Value* value); -facebook::react::ValueUnit facebook::react::cssLengthPercentageToValueUnit(const std::variant& value); facebook::react::ValueUnit facebook::react::toValueUnit(const facebook::react::RawValue& value); facebook::yoga::FloatOptional facebook::react::convertAspectRatio(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value); facebook::yoga::FloatOptional facebook::react::yogaOptionalFloatFromFloat(facebook::react::Float value); @@ -3746,10 +3745,8 @@ std::optional facebook::react::blendModeFromString(s std::optional facebook::react::filterTypeFromString(std::string_view filterName); std::optional facebook::react::coerceLength(const facebook::react::RawValue& value); std::optional facebook::react::optionalFloatFromYogaValue(const facebook::yoga::Style::Length& length, std::optional base = {}); -std::optional facebook::react::toRadians(const facebook::react::RawValue& value); std::optional facebook::react::fontVariantFromCSSFontVariant(facebook::react::CSSFontVariant cssVariant); std::optional facebook::react::isolationFromString(std::string_view isolationSetting); -std::optional facebook::react::fromCSSTransformFunction(const facebook::react::CSSTransformFunction& cssTransform); std::pair facebook::react::calculateAnimationProgress(uint64_t now, const facebook::react::LayoutAnimation& animation, const facebook::react::AnimationConfig& mutationConfig); std::string facebook::react::base64Encode(const std::string_view s); std::string facebook::react::componentNameByReactViewName(std::string viewName); @@ -3944,16 +3941,10 @@ void facebook::react::handleJSError(facebook::jsi::Runtime& runtime, const faceb void facebook::react::installLegacyUIManagerConstantsProviderBinding(facebook::jsi::Runtime& runtime); void facebook::react::parseProcessedBackgroundImage(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); void facebook::react::parseProcessedFontVariant(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::FontVariant& result); -void facebook::react::parseProcessedTransform(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::Transform& result); -void facebook::react::parseProcessedTransformOrigin(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); void facebook::react::parseUnprocessedBackgroundImageList(const facebook::react::PropsParserContext& context, const std::vector& value, std::vector& result); void facebook::react::parseUnprocessedBackgroundImageString(const std::string& value, std::vector& result); void facebook::react::parseUnprocessedFontVariant(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedFontVariantString(const std::string& value, facebook::react::FontVariant& result); -void facebook::react::parseUnprocessedTransform(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::Transform& result); -void facebook::react::parseUnprocessedTransformOrigin(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); -void facebook::react::parseUnprocessedTransformOriginString(const std::string& value, facebook::react::TransformOrigin& result); -void facebook::react::parseUnprocessedTransformString(const std::string& value, facebook::react::Transform& result); void facebook::react::registerCxxModuleToGlobalModuleMap(std::string name, std::function(std::shared_ptr jsInvoker)> moduleProviderFunc); void facebook::react::serializeTransformAxis(const facebook::react::TransformOperation& operation, const std::string& operationName, float defaultValue, folly::dynamic& resultTranslateArray); void facebook::react::serializeTransformOperationValue(const std::string& operationName, const facebook::react::ValueUnit& valueUnit, folly::dynamic& resultArray); diff --git a/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api index d930cb69664..61bc3005226 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api @@ -3705,7 +3705,6 @@ facebook::react::Size facebook::react::ModalHostViewScreenSize(void); facebook::react::Size facebook::react::yogaMeassureToSize(int64_t value); facebook::react::SurfaceId facebook::react::getNextRootViewTag() noexcept; facebook::react::TurboModuleMethodValueKind facebook::react::getTurboModuleMethodValueKind(facebook::jsi::Runtime& rt, const facebook::jsi::Value* value); -facebook::react::ValueUnit facebook::react::cssLengthPercentageToValueUnit(const std::variant& value); facebook::react::ValueUnit facebook::react::toValueUnit(const facebook::react::RawValue& value); facebook::yoga::FloatOptional facebook::react::convertAspectRatio(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value); facebook::yoga::FloatOptional facebook::react::yogaOptionalFloatFromFloat(facebook::react::Float value); @@ -3736,10 +3735,8 @@ std::optional facebook::react::blendModeFromString(s std::optional facebook::react::filterTypeFromString(std::string_view filterName); std::optional facebook::react::coerceLength(const facebook::react::RawValue& value); std::optional facebook::react::optionalFloatFromYogaValue(const facebook::yoga::Style::Length& length, std::optional base = {}); -std::optional facebook::react::toRadians(const facebook::react::RawValue& value); std::optional facebook::react::fontVariantFromCSSFontVariant(facebook::react::CSSFontVariant cssVariant); std::optional facebook::react::isolationFromString(std::string_view isolationSetting); -std::optional facebook::react::fromCSSTransformFunction(const facebook::react::CSSTransformFunction& cssTransform); std::pair facebook::react::calculateAnimationProgress(uint64_t now, const facebook::react::LayoutAnimation& animation, const facebook::react::AnimationConfig& mutationConfig); std::string facebook::react::base64Encode(const std::string_view s); std::string facebook::react::componentNameByReactViewName(std::string viewName); @@ -3933,16 +3930,10 @@ void facebook::react::handleJSError(facebook::jsi::Runtime& runtime, const faceb void facebook::react::installLegacyUIManagerConstantsProviderBinding(facebook::jsi::Runtime& runtime); void facebook::react::parseProcessedBackgroundImage(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); void facebook::react::parseProcessedFontVariant(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::FontVariant& result); -void facebook::react::parseProcessedTransform(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::Transform& result); -void facebook::react::parseProcessedTransformOrigin(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); void facebook::react::parseUnprocessedBackgroundImageList(const facebook::react::PropsParserContext& context, const std::vector& value, std::vector& result); void facebook::react::parseUnprocessedBackgroundImageString(const std::string& value, std::vector& result); void facebook::react::parseUnprocessedFontVariant(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedFontVariantString(const std::string& value, facebook::react::FontVariant& result); -void facebook::react::parseUnprocessedTransform(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::Transform& result); -void facebook::react::parseUnprocessedTransformOrigin(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); -void facebook::react::parseUnprocessedTransformOriginString(const std::string& value, facebook::react::TransformOrigin& result); -void facebook::react::parseUnprocessedTransformString(const std::string& value, facebook::react::Transform& result); void facebook::react::registerCxxModuleToGlobalModuleMap(std::string name, std::function(std::shared_ptr jsInvoker)> moduleProviderFunc); void facebook::react::serializeTransformAxis(const facebook::react::TransformOperation& operation, const std::string& operationName, float defaultValue, folly::dynamic& resultTranslateArray); void facebook::react::serializeTransformOperationValue(const std::string& operationName, const facebook::react::ValueUnit& valueUnit, folly::dynamic& resultArray); diff --git a/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api index 05eea6b2980..f1536aa4a5f 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api @@ -3714,7 +3714,6 @@ facebook::react::Size facebook::react::ModalHostViewScreenSize(void); facebook::react::Size facebook::react::yogaMeassureToSize(int64_t value); facebook::react::SurfaceId facebook::react::getNextRootViewTag() noexcept; facebook::react::TurboModuleMethodValueKind facebook::react::getTurboModuleMethodValueKind(facebook::jsi::Runtime& rt, const facebook::jsi::Value* value); -facebook::react::ValueUnit facebook::react::cssLengthPercentageToValueUnit(const std::variant& value); facebook::react::ValueUnit facebook::react::toValueUnit(const facebook::react::RawValue& value); facebook::yoga::FloatOptional facebook::react::convertAspectRatio(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value); facebook::yoga::FloatOptional facebook::react::yogaOptionalFloatFromFloat(facebook::react::Float value); @@ -3746,10 +3745,8 @@ std::optional facebook::react::blendModeFromString(s std::optional facebook::react::filterTypeFromString(std::string_view filterName); std::optional facebook::react::coerceLength(const facebook::react::RawValue& value); std::optional facebook::react::optionalFloatFromYogaValue(const facebook::yoga::Style::Length& length, std::optional base = {}); -std::optional facebook::react::toRadians(const facebook::react::RawValue& value); std::optional facebook::react::fontVariantFromCSSFontVariant(facebook::react::CSSFontVariant cssVariant); std::optional facebook::react::isolationFromString(std::string_view isolationSetting); -std::optional facebook::react::fromCSSTransformFunction(const facebook::react::CSSTransformFunction& cssTransform); std::pair facebook::react::calculateAnimationProgress(uint64_t now, const facebook::react::LayoutAnimation& animation, const facebook::react::AnimationConfig& mutationConfig); std::string facebook::react::base64Encode(const std::string_view s); std::string facebook::react::componentNameByReactViewName(std::string viewName); @@ -3944,16 +3941,10 @@ void facebook::react::handleJSError(facebook::jsi::Runtime& runtime, const faceb void facebook::react::installLegacyUIManagerConstantsProviderBinding(facebook::jsi::Runtime& runtime); void facebook::react::parseProcessedBackgroundImage(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); void facebook::react::parseProcessedFontVariant(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::FontVariant& result); -void facebook::react::parseProcessedTransform(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::Transform& result); -void facebook::react::parseProcessedTransformOrigin(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); void facebook::react::parseUnprocessedBackgroundImageList(const facebook::react::PropsParserContext& context, const std::vector& value, std::vector& result); void facebook::react::parseUnprocessedBackgroundImageString(const std::string& value, std::vector& result); void facebook::react::parseUnprocessedFontVariant(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedFontVariantString(const std::string& value, facebook::react::FontVariant& result); -void facebook::react::parseUnprocessedTransform(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::Transform& result); -void facebook::react::parseUnprocessedTransformOrigin(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); -void facebook::react::parseUnprocessedTransformOriginString(const std::string& value, facebook::react::TransformOrigin& result); -void facebook::react::parseUnprocessedTransformString(const std::string& value, facebook::react::Transform& result); void facebook::react::registerCxxModuleToGlobalModuleMap(std::string name, std::function(std::shared_ptr jsInvoker)> moduleProviderFunc); void facebook::react::serializeTransformAxis(const facebook::react::TransformOperation& operation, const std::string& operationName, float defaultValue, folly::dynamic& resultTranslateArray); void facebook::react::serializeTransformOperationValue(const std::string& operationName, const facebook::react::ValueUnit& valueUnit, folly::dynamic& resultArray); diff --git a/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api b/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api index ffa20035502..25492550cc4 100644 --- a/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api @@ -494,7 +494,6 @@ facebook::react::Size facebook::react::ModalHostViewScreenSize(void); facebook::react::Size facebook::react::yogaMeassureToSize(int64_t value); facebook::react::SurfaceId facebook::react::getNextRootViewTag() noexcept; facebook::react::TurboModuleMethodValueKind facebook::react::getTurboModuleMethodValueKind(facebook::jsi::Runtime& rt, const facebook::jsi::Value* value); -facebook::react::ValueUnit facebook::react::cssLengthPercentageToValueUnit(const std::variant& value); facebook::react::ValueUnit facebook::react::toValueUnit(const facebook::react::RawValue& value); facebook::yoga::FloatOptional facebook::react::convertAspectRatio(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value); facebook::yoga::FloatOptional facebook::react::yogaOptionalFloatFromFloat(Float value); @@ -518,12 +517,10 @@ size_t facebook::react::textAttributesHashLayoutWise(const facebook::react::Text std::function facebook::react::makeCallback(std::weak_ptr instance, const folly::dynamic& callbackId); std::optional facebook::react::coerceLength(const facebook::react::RawValue& value); std::optional facebook::react::optionalFloatFromYogaValue(const facebook::yoga::Style::Length& length, std::optional base = {}); -std::optional facebook::react::toRadians(const facebook::react::RawValue& value); std::optional facebook::react::blendModeFromString(std::string_view blendModeName); std::optional facebook::react::filterTypeFromString(std::string_view filterName); std::optional facebook::react::fontVariantFromCSSFontVariant(facebook::react::CSSFontVariant cssVariant); std::optional facebook::react::isolationFromString(std::string_view isolationSetting); -std::optional facebook::react::fromCSSTransformFunction(const facebook::react::CSSTransformFunction& cssTransform); std::pair facebook::react::calculateAnimationProgress(uint64_t now, const facebook::react::LayoutAnimation& animation, const facebook::react::AnimationConfig& mutationConfig); std::string facebook::react::base64Encode(const std::string_view s); std::string facebook::react::componentNameByReactViewName(std::string viewName); @@ -704,16 +701,10 @@ void facebook::react::g_setNativeAnimatedNowTimestampFunction(facebook::react::T void facebook::react::handleJSError(facebook::jsi::Runtime& runtime, const facebook::jsi::JSError& error, bool isFatal); void facebook::react::parseProcessedBackgroundImage(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); void facebook::react::parseProcessedFontVariant(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::FontVariant& result); -void facebook::react::parseProcessedTransform(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::Transform& result); -void facebook::react::parseProcessedTransformOrigin(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); void facebook::react::parseUnprocessedBackgroundImageList(const facebook::react::PropsParserContext& context, const std::vector& value, std::vector& result); void facebook::react::parseUnprocessedBackgroundImageString(const std::string& value, std::vector& result); void facebook::react::parseUnprocessedFontVariant(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedFontVariantString(const std::string& value, facebook::react::FontVariant& result); -void facebook::react::parseUnprocessedTransform(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::Transform& result); -void facebook::react::parseUnprocessedTransformOrigin(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); -void facebook::react::parseUnprocessedTransformOriginString(const std::string& value, facebook::react::TransformOrigin& result); -void facebook::react::parseUnprocessedTransformString(const std::string& value, facebook::react::Transform& result); void facebook::react::registerCxxModuleToGlobalModuleMap(std::string name, std::function(std::shared_ptr jsInvoker)> moduleProviderFunc); void facebook::react::serializeTransformAxis(const facebook::react::TransformOperation& operation, const std::string& operationName, float defaultValue, folly::dynamic& resultTranslateArray); void facebook::react::serializeTransformOperationValue(const std::string& operationName, const facebook::react::ValueUnit& valueUnit, folly::dynamic& resultArray); diff --git a/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api b/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api index ed78db4d98f..3c2a34f00aa 100644 --- a/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api @@ -493,7 +493,6 @@ facebook::react::Size facebook::react::ModalHostViewScreenSize(void); facebook::react::Size facebook::react::yogaMeassureToSize(int64_t value); facebook::react::SurfaceId facebook::react::getNextRootViewTag() noexcept; facebook::react::TurboModuleMethodValueKind facebook::react::getTurboModuleMethodValueKind(facebook::jsi::Runtime& rt, const facebook::jsi::Value* value); -facebook::react::ValueUnit facebook::react::cssLengthPercentageToValueUnit(const std::variant& value); facebook::react::ValueUnit facebook::react::toValueUnit(const facebook::react::RawValue& value); facebook::yoga::FloatOptional facebook::react::convertAspectRatio(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value); facebook::yoga::FloatOptional facebook::react::yogaOptionalFloatFromFloat(Float value); @@ -516,12 +515,10 @@ size_t facebook::react::attributedStringHashLayoutWise(const facebook::react::At size_t facebook::react::textAttributesHashLayoutWise(const facebook::react::TextAttributes& textAttributes); std::optional facebook::react::coerceLength(const facebook::react::RawValue& value); std::optional facebook::react::optionalFloatFromYogaValue(const facebook::yoga::Style::Length& length, std::optional base = {}); -std::optional facebook::react::toRadians(const facebook::react::RawValue& value); std::optional facebook::react::blendModeFromString(std::string_view blendModeName); std::optional facebook::react::filterTypeFromString(std::string_view filterName); std::optional facebook::react::fontVariantFromCSSFontVariant(facebook::react::CSSFontVariant cssVariant); std::optional facebook::react::isolationFromString(std::string_view isolationSetting); -std::optional facebook::react::fromCSSTransformFunction(const facebook::react::CSSTransformFunction& cssTransform); std::pair facebook::react::calculateAnimationProgress(uint64_t now, const facebook::react::LayoutAnimation& animation, const facebook::react::AnimationConfig& mutationConfig); std::string facebook::react::base64Encode(const std::string_view s); std::string facebook::react::componentNameByReactViewName(std::string viewName); @@ -701,16 +698,10 @@ void facebook::react::g_setNativeAnimatedNowTimestampFunction(facebook::react::T void facebook::react::handleJSError(facebook::jsi::Runtime& runtime, const facebook::jsi::JSError& error, bool isFatal); void facebook::react::parseProcessedBackgroundImage(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); void facebook::react::parseProcessedFontVariant(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::FontVariant& result); -void facebook::react::parseProcessedTransform(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::Transform& result); -void facebook::react::parseProcessedTransformOrigin(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); void facebook::react::parseUnprocessedBackgroundImageList(const facebook::react::PropsParserContext& context, const std::vector& value, std::vector& result); void facebook::react::parseUnprocessedBackgroundImageString(const std::string& value, std::vector& result); void facebook::react::parseUnprocessedFontVariant(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedFontVariantString(const std::string& value, facebook::react::FontVariant& result); -void facebook::react::parseUnprocessedTransform(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::Transform& result); -void facebook::react::parseUnprocessedTransformOrigin(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); -void facebook::react::parseUnprocessedTransformOriginString(const std::string& value, facebook::react::TransformOrigin& result); -void facebook::react::parseUnprocessedTransformString(const std::string& value, facebook::react::Transform& result); void facebook::react::registerCxxModuleToGlobalModuleMap(std::string name, std::function(std::shared_ptr jsInvoker)> moduleProviderFunc); void facebook::react::serializeTransformAxis(const facebook::react::TransformOperation& operation, const std::string& operationName, float defaultValue, folly::dynamic& resultTranslateArray); void facebook::react::serializeTransformOperationValue(const std::string& operationName, const facebook::react::ValueUnit& valueUnit, folly::dynamic& resultArray); diff --git a/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api b/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api index a61b90b3837..f2736afc7b4 100644 --- a/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api @@ -494,7 +494,6 @@ facebook::react::Size facebook::react::ModalHostViewScreenSize(void); facebook::react::Size facebook::react::yogaMeassureToSize(int64_t value); facebook::react::SurfaceId facebook::react::getNextRootViewTag() noexcept; facebook::react::TurboModuleMethodValueKind facebook::react::getTurboModuleMethodValueKind(facebook::jsi::Runtime& rt, const facebook::jsi::Value* value); -facebook::react::ValueUnit facebook::react::cssLengthPercentageToValueUnit(const std::variant& value); facebook::react::ValueUnit facebook::react::toValueUnit(const facebook::react::RawValue& value); facebook::yoga::FloatOptional facebook::react::convertAspectRatio(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value); facebook::yoga::FloatOptional facebook::react::yogaOptionalFloatFromFloat(Float value); @@ -518,12 +517,10 @@ size_t facebook::react::textAttributesHashLayoutWise(const facebook::react::Text std::function facebook::react::makeCallback(std::weak_ptr instance, const folly::dynamic& callbackId); std::optional facebook::react::coerceLength(const facebook::react::RawValue& value); std::optional facebook::react::optionalFloatFromYogaValue(const facebook::yoga::Style::Length& length, std::optional base = {}); -std::optional facebook::react::toRadians(const facebook::react::RawValue& value); std::optional facebook::react::blendModeFromString(std::string_view blendModeName); std::optional facebook::react::filterTypeFromString(std::string_view filterName); std::optional facebook::react::fontVariantFromCSSFontVariant(facebook::react::CSSFontVariant cssVariant); std::optional facebook::react::isolationFromString(std::string_view isolationSetting); -std::optional facebook::react::fromCSSTransformFunction(const facebook::react::CSSTransformFunction& cssTransform); std::pair facebook::react::calculateAnimationProgress(uint64_t now, const facebook::react::LayoutAnimation& animation, const facebook::react::AnimationConfig& mutationConfig); std::string facebook::react::base64Encode(const std::string_view s); std::string facebook::react::componentNameByReactViewName(std::string viewName); @@ -704,16 +701,10 @@ void facebook::react::g_setNativeAnimatedNowTimestampFunction(facebook::react::T void facebook::react::handleJSError(facebook::jsi::Runtime& runtime, const facebook::jsi::JSError& error, bool isFatal); void facebook::react::parseProcessedBackgroundImage(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, std::vector& result); void facebook::react::parseProcessedFontVariant(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::FontVariant& result); -void facebook::react::parseProcessedTransform(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::Transform& result); -void facebook::react::parseProcessedTransformOrigin(const facebook::react::PropsParserContext&, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); void facebook::react::parseUnprocessedBackgroundImageList(const facebook::react::PropsParserContext& context, const std::vector& value, std::vector& result); void facebook::react::parseUnprocessedBackgroundImageString(const std::string& value, std::vector& result); void facebook::react::parseUnprocessedFontVariant(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::FontVariant& result); void facebook::react::parseUnprocessedFontVariantString(const std::string& value, facebook::react::FontVariant& result); -void facebook::react::parseUnprocessedTransform(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::Transform& result); -void facebook::react::parseUnprocessedTransformOrigin(const facebook::react::PropsParserContext& context, const facebook::react::RawValue& value, facebook::react::TransformOrigin& result); -void facebook::react::parseUnprocessedTransformOriginString(const std::string& value, facebook::react::TransformOrigin& result); -void facebook::react::parseUnprocessedTransformString(const std::string& value, facebook::react::Transform& result); void facebook::react::registerCxxModuleToGlobalModuleMap(std::string name, std::function(std::shared_ptr jsInvoker)> moduleProviderFunc); void facebook::react::serializeTransformAxis(const facebook::react::TransformOperation& operation, const std::string& operationName, float defaultValue, folly::dynamic& resultTranslateArray); void facebook::react::serializeTransformOperationValue(const std::string& operationName, const facebook::react::ValueUnit& valueUnit, folly::dynamic& resultArray); From e2ff1318ee3871cb862d237cc7885ddd8d8389d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Ma=C5=82ecki?= Date: Fri, 2 Oct 2026 05:32:23 -0700 Subject: [PATCH 3/4] Seal renderer View public boundary Summary: Reclassify the CSS-dependent View conversion headers as private implementation details: - `BackgroundImagePropsConversions.h` - `BoxShadowPropsConversions.h` - `CSSConversions.h` - `FilterPropsConversions.h` - `propsConversions.h` These headers now use the private guard and are removed from the `` umbrella, along with `conversions.h`. The public `accessibilityPropsConversions.h` stays in the umbrella: it is CSS-free, and framework-tier headers such as the attributed string conversions reach the accessibility role parsers through it. `LayoutConformanceProps.h` now includes the public `conversions.h` and core `propsConversions.h` instead of the private View `propsConversions.h`, so the umbrella stays self-contained under the strict API. Following the Graphics module, renderer CSS becomes an implementation dependency of View in Buck instead of an exported one. Header publishing in Buck, CocoaPods, SwiftPM, and Gradle prefab is unchanged, consistent with other private headers, and the C++ API snapshots are unchanged. Changelog: [Internal] Differential Revision: D119970889 --- .../components/view/BackgroundImagePropsConversions.h | 2 +- .../renderer/components/view/BoxShadowPropsConversions.h | 2 +- .../react/renderer/components/view/CSSConversions.h | 2 +- .../react/renderer/components/view/FilterPropsConversions.h | 2 +- .../react/renderer/components/view/LayoutConformanceProps.h | 3 ++- .../ReactCommon/react/renderer/components/view/React/View.h | 6 ------ .../react/renderer/components/view/propsConversions.h | 2 +- 7 files changed, 7 insertions(+), 12 deletions(-) diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/BackgroundImagePropsConversions.h b/packages/react-native/ReactCommon/react/renderer/components/view/BackgroundImagePropsConversions.h index a8c38ae5d9c..b35fcaa0d04 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/BackgroundImagePropsConversions.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/BackgroundImagePropsConversions.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/BoxShadowPropsConversions.h b/packages/react-native/ReactCommon/react/renderer/components/view/BoxShadowPropsConversions.h index 671c9eb2389..f34b32cc283 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/BoxShadowPropsConversions.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/BoxShadowPropsConversions.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/CSSConversions.h b/packages/react-native/ReactCommon/react/renderer/components/view/CSSConversions.h index c29346ca990..258b137f56a 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/CSSConversions.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/CSSConversions.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/FilterPropsConversions.h b/packages/react-native/ReactCommon/react/renderer/components/view/FilterPropsConversions.h index 657b9078171..539d89af88e 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/FilterPropsConversions.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/FilterPropsConversions.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/LayoutConformanceProps.h b/packages/react-native/ReactCommon/react/renderer/components/view/LayoutConformanceProps.h index dcf81de4167..d66dfbfee72 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/LayoutConformanceProps.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/LayoutConformanceProps.h @@ -10,7 +10,8 @@ #include #include -#include +#include +#include namespace facebook::react { diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/React/View.h b/packages/react-native/ReactCommon/react/renderer/components/view/React/View.h index 05b502a5222..09d0f82ef11 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/React/View.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/React/View.h @@ -33,14 +33,10 @@ #include #include -#include #include #include #include -#include -#include #include -#include #include #include #include @@ -60,9 +56,7 @@ #include #include #include -#include #include -#include #undef RN_UMBRELLA_CONTEXT #pragma pop_macro("RN_UMBRELLA_CONTEXT") diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/propsConversions.h b/packages/react-native/ReactCommon/react/renderer/components/view/propsConversions.h index 4644cfbf472..8483e5981dc 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/propsConversions.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/propsConversions.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include From d3ca48bfde79cb42eae763e74292e7eae674cb81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Ma=C5=82ecki?= Date: Fri, 2 Oct 2026 08:48:01 -0700 Subject: [PATCH 4/4] Reclassify renderer CSS as for-frameworks Summary: Reclassify the renderer CSS headers (`react/renderer/css/*.h`) as framework-tier APIs by switching them from the public umbrella guard to the for-frameworks guard. Framework integrations keep access to the fine-grained headers and acknowledge that usage by defining `RN_ALLOW_FRAMEWORKS`. Remove the `React/CSS.h` umbrella and stop publishing it from Buck, CocoaPods, Android prefab, the iOS prebuild header config, and the iOS prebuild header linking step. Its only consumer, the attributed string conversions header (itself framework-tier), now includes the CSS headers it uses (`CSSFontVariant.h` and `CSSValueParser.h`) directly. Changelog: [Internal] Reviewed By: cipolleschi Differential Revision: D119642784 --- .../ReactAndroid/build.gradle.kts | 1 - .../renderer/attributedstring/conversions.h | 3 +- .../ReactCommon/react/renderer/css/CSSAngle.h | 2 +- .../react/renderer/css/CSSAngleUnit.h | 2 +- .../react/renderer/css/CSSBackgroundImage.h | 2 +- .../ReactCommon/react/renderer/css/CSSColor.h | 2 +- .../react/renderer/css/CSSColorFunction.h | 2 +- .../react/renderer/css/CSSCompoundDataType.h | 2 +- .../react/renderer/css/CSSDataType.h | 2 +- .../react/renderer/css/CSSFilter.h | 2 +- .../react/renderer/css/CSSFontVariant.h | 2 +- .../react/renderer/css/CSSHexColor.h | 2 +- .../react/renderer/css/CSSKeyword.h | 2 +- .../react/renderer/css/CSSLength.h | 2 +- .../react/renderer/css/CSSLengthPercentage.h | 2 +- .../react/renderer/css/CSSLengthUnit.h | 2 +- .../ReactCommon/react/renderer/css/CSSList.h | 2 +- .../react/renderer/css/CSSNamedColor.h | 2 +- .../react/renderer/css/CSSNumber.h | 2 +- .../react/renderer/css/CSSPercentage.h | 2 +- .../ReactCommon/react/renderer/css/CSSRatio.h | 2 +- .../react/renderer/css/CSSShadow.h | 2 +- .../react/renderer/css/CSSSyntaxParser.h | 2 +- .../ReactCommon/react/renderer/css/CSSToken.h | 2 +- .../react/renderer/css/CSSTokenizer.h | 2 +- .../react/renderer/css/CSSTransform.h | 2 +- .../react/renderer/css/CSSTransformOrigin.h | 2 +- .../react/renderer/css/CSSValueParser.h | 2 +- .../ReactCommon/react/renderer/css/CSSZero.h | 2 +- .../renderer/css/React-renderercss.podspec | 6 -- .../react/renderer/css/React/CSS.h | 62 ------------------- .../__tests__/headers-config-test.js | 30 +++++++++ .../scripts/ios-prebuild/headers-config.js | 5 -- .../scripts/ios-prebuild/setup.js | 1 - 34 files changed, 59 insertions(+), 103 deletions(-) delete mode 100644 packages/react-native/ReactCommon/react/renderer/css/React/CSS.h create mode 100644 packages/react-native/scripts/ios-prebuild/__tests__/headers-config-test.js diff --git a/packages/react-native/ReactAndroid/build.gradle.kts b/packages/react-native/ReactAndroid/build.gradle.kts index 5d88d6f8f77..381fad13d04 100644 --- a/packages/react-native/ReactAndroid/build.gradle.kts +++ b/packages/react-native/ReactAndroid/build.gradle.kts @@ -143,7 +143,6 @@ val preparePrefab by Pair("../ReactCommon/react/renderer/core/React/", "React/"), // react_renderer_css Pair("../ReactCommon/react/renderer/css/", "react/renderer/css/"), - Pair("../ReactCommon/react/renderer/css/React/", "React/"), // react_debug Pair("../ReactCommon/react/debug/", "react/debug/"), Pair("../ReactCommon/react/debug/React/", "React/"), diff --git a/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h b/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h index d4d730d6973..263d53e9b86 100644 --- a/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h +++ b/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h @@ -9,7 +9,6 @@ #include -#include #include #include #include @@ -18,6 +17,8 @@ #include #include #include +#include +#include #include #ifdef RN_SERIALIZABLE_STATE diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSAngle.h b/packages/react-native/ReactCommon/react/renderer/css/CSSAngle.h index e7657e6e6cb..541e4cdba2b 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSAngle.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSAngle.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSAngleUnit.h b/packages/react-native/ReactCommon/react/renderer/css/CSSAngleUnit.h index fea9ca1c9a5..112bf7ca22a 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSAngleUnit.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSAngleUnit.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSBackgroundImage.h b/packages/react-native/ReactCommon/react/renderer/css/CSSBackgroundImage.h index 1af10833c16..11c9daeea6b 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSBackgroundImage.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSBackgroundImage.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSColor.h b/packages/react-native/ReactCommon/react/renderer/css/CSSColor.h index 48f03dfc2c7..b5e87a146c1 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSColor.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSColor.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSColorFunction.h b/packages/react-native/ReactCommon/react/renderer/css/CSSColorFunction.h index c3abc7f2de1..fccefab6fa1 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSColorFunction.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSColorFunction.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSCompoundDataType.h b/packages/react-native/ReactCommon/react/renderer/css/CSSCompoundDataType.h index 98ff36fe515..dd8b1847e7c 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSCompoundDataType.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSCompoundDataType.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSDataType.h b/packages/react-native/ReactCommon/react/renderer/css/CSSDataType.h index c3b9a8ba23b..42e1aa00e7e 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSDataType.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSDataType.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSFilter.h b/packages/react-native/ReactCommon/react/renderer/css/CSSFilter.h index b3a192f6eba..b413453ab59 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSFilter.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSFilter.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSFontVariant.h b/packages/react-native/ReactCommon/react/renderer/css/CSSFontVariant.h index 4fc42cc84b1..e9a61a801f6 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSFontVariant.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSFontVariant.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSHexColor.h b/packages/react-native/ReactCommon/react/renderer/css/CSSHexColor.h index 8734fa35ba2..db4cfb1c804 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSHexColor.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSHexColor.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSKeyword.h b/packages/react-native/ReactCommon/react/renderer/css/CSSKeyword.h index eba64a40ef7..a3ff512f0e4 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSKeyword.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSKeyword.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSLength.h b/packages/react-native/ReactCommon/react/renderer/css/CSSLength.h index 18b3b0a48cc..188531c4591 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSLength.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSLength.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSLengthPercentage.h b/packages/react-native/ReactCommon/react/renderer/css/CSSLengthPercentage.h index ba6416bcd59..cf4f7889c12 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSLengthPercentage.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSLengthPercentage.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSLengthUnit.h b/packages/react-native/ReactCommon/react/renderer/css/CSSLengthUnit.h index 76231f23512..64149e379b2 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSLengthUnit.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSLengthUnit.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSList.h b/packages/react-native/ReactCommon/react/renderer/css/CSSList.h index 1651ef01d1e..3b960b23b2a 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSList.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSList.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSNamedColor.h b/packages/react-native/ReactCommon/react/renderer/css/CSSNamedColor.h index 453f064246d..e9eb2b97872 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSNamedColor.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSNamedColor.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSNumber.h b/packages/react-native/ReactCommon/react/renderer/css/CSSNumber.h index 68b51cf2a84..77272ae0d5f 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSNumber.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSNumber.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSPercentage.h b/packages/react-native/ReactCommon/react/renderer/css/CSSPercentage.h index 3d9bf612a1f..46aa0397c3a 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSPercentage.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSPercentage.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSRatio.h b/packages/react-native/ReactCommon/react/renderer/css/CSSRatio.h index 426ac6fc151..3ef6f02d5ff 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSRatio.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSRatio.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSShadow.h b/packages/react-native/ReactCommon/react/renderer/css/CSSShadow.h index 60a534a82ec..ea5784c6898 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSShadow.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSShadow.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSSyntaxParser.h b/packages/react-native/ReactCommon/react/renderer/css/CSSSyntaxParser.h index a166e632da0..4254c0b94a6 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSSyntaxParser.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSSyntaxParser.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSToken.h b/packages/react-native/ReactCommon/react/renderer/css/CSSToken.h index 8d6b8a2415d..9c22245b121 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSToken.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSToken.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSTokenizer.h b/packages/react-native/ReactCommon/react/renderer/css/CSSTokenizer.h index 06fb02b11b5..f8320b03573 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSTokenizer.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSTokenizer.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSTransform.h b/packages/react-native/ReactCommon/react/renderer/css/CSSTransform.h index 5698bf08da2..7ef7fdf0a0a 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSTransform.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSTransform.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSTransformOrigin.h b/packages/react-native/ReactCommon/react/renderer/css/CSSTransformOrigin.h index be1818efaae..2da96f375d0 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSTransformOrigin.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSTransformOrigin.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSValueParser.h b/packages/react-native/ReactCommon/react/renderer/css/CSSValueParser.h index e4a169196e0..5236a58a2f9 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSValueParser.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSValueParser.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSZero.h b/packages/react-native/ReactCommon/react/renderer/css/CSSZero.h index a39b9275acc..296a5a68b7e 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSZero.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSZero.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/React-renderercss.podspec b/packages/react-native/ReactCommon/react/renderer/css/React-renderercss.podspec index a012eadc5f4..4b1bd09349f 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/React-renderercss.podspec +++ b/packages/react-native/ReactCommon/react/renderer/css/React-renderercss.podspec @@ -45,11 +45,5 @@ Pod::Spec.new do |s| add_dependency(s, "React-utils") s.dependency "React-cxxstableapi" - s.subspec "cssUmbrella" do |ss| - ss.source_files = "React/*.h" - ss.header_dir = "" - ss.header_mappings_dir = "." - end - mark_as_react_native_build(s) end diff --git a/packages/react-native/ReactCommon/react/renderer/css/React/CSS.h b/packages/react-native/ReactCommon/react/renderer/css/React/CSS.h deleted file mode 100644 index b36d471b43f..00000000000 --- a/packages/react-native/ReactCommon/react/renderer/css/React/CSS.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -#pragma once - -// ============================================================================= -// Umbrella header for the `react/renderer/css` module - public entry point. -// -// #include -// -// Re-exports the module's public interface headers. React Native's own code -// should keep using the fine-grained `` includes, -// except in headers it exports to consumers: those are preprocessed in the -// consumer's translation unit, where the fine-grained include hits this -// module's . `RN_ALLOW_FRAMEWORKS` does not -// suppress that guard, so a "for frameworks" header must reach this module -// through the umbrella. -// ============================================================================= - -// Marks that the following headers are pulled in through the umbrella, so their -// shared guard () accepts them. The marker -// is saved and restored rather than defined and undefined: the scope ends at -// this block, so later *direct* includes in the same TU are still caught, and -// it nests inside an enclosing umbrella rather than disarming it. -#pragma push_macro("RN_UMBRELLA_CONTEXT") -#undef RN_UMBRELLA_CONTEXT -#define RN_UMBRELLA_CONTEXT 1 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#undef RN_UMBRELLA_CONTEXT -#pragma pop_macro("RN_UMBRELLA_CONTEXT") diff --git a/packages/react-native/scripts/ios-prebuild/__tests__/headers-config-test.js b/packages/react-native/scripts/ios-prebuild/__tests__/headers-config-test.js new file mode 100644 index 00000000000..01eea411a4b --- /dev/null +++ b/packages/react-native/scripts/ios-prebuild/__tests__/headers-config-test.js @@ -0,0 +1,30 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow strict-local + * @format + */ + +'use strict'; + +const {PodspecExceptions} = require('../headers-config'); + +describe('React renderer CSS headers', () => { + test('publishes fine-grained headers without a stable umbrella', () => { + const rendererCss = + PodspecExceptions[ + 'ReactCommon/react/renderer/css/React-renderercss.podspec' + ]; + + expect(rendererCss.subSpecs).toEqual([ + { + name: 'css', + headerPatterns: ['*.h'], + headerDir: 'react/renderer/css', + }, + ]); + }); +}); diff --git a/packages/react-native/scripts/ios-prebuild/headers-config.js b/packages/react-native/scripts/ios-prebuild/headers-config.js index e6b5eb70b61..61addbc7a4c 100644 --- a/packages/react-native/scripts/ios-prebuild/headers-config.js +++ b/packages/react-native/scripts/ios-prebuild/headers-config.js @@ -655,11 +655,6 @@ const PodspecExceptions /*: {[key: string]: PodSpecConfiguration} */ = { headerPatterns: ['*.h'], headerDir: 'react/renderer/css', }, - { - name: 'cssUmbrella', - headerPatterns: ['React/*.h'], - headerDir: 'React', - }, ], }, 'ReactCommon/react/utils/React-utils.podspec': { diff --git a/packages/react-native/scripts/ios-prebuild/setup.js b/packages/react-native/scripts/ios-prebuild/setup.js index 90be5ec8b93..c8d6ef4a532 100644 --- a/packages/react-native/scripts/ios-prebuild/setup.js +++ b/packages/react-native/scripts/ios-prebuild/setup.js @@ -108,7 +108,6 @@ async function setup( link('ReactCommon/react/renderer/componentregistry/React', 'React'); link('ReactCommon/react/renderer/core'); link('ReactCommon/react/renderer/core/React', 'React'); - link('ReactCommon/react/renderer/css/React', 'React'); link('ReactCommon/react/renderer/components/image/React', 'React'); link('ReactCommon/react/renderer/mapbuffer/React', 'React'); link('ReactCommon/react/bridging');