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 7759acebe2a6..d72c64a2548b 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 000000000000..f9d90fe32ce4 --- /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 a31e08d57139..671c9eb2389d 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 000000000000..e258f165c158 --- /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 ae3bf593b629..c29346ca990f 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 000000000000..388a51925f5e --- /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 2a35234576c4..657b90781711 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 4b704c2b17f2..07d1839a4c0a 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 330ce127980c..a2de8f27e2aa 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 7e4cac501b78..e2aacbaaac78 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 6207ce88f357..5fa07b18af70 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 c2c7b9c55b8c..951d1d19282a 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 e7dc63c7ca04..d930cb696640 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 af2a1efe4c87..05eea6b29809 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 6a9079fab518..ffa200355025 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 2c443d15483d..ed78db4d98f7 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 d138a7481454..a61b90b38370 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 000000000000..cfa123fb46c6 --- /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 e1be3a01a291..df11da0d3a34 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 07d1839a4c0a..1ca47172f9fa 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 a2de8f27e2aa..777213ff609a 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 e2aacbaaac78..030f65f3918b 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 5fa07b18af70..0717d9252c85 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 951d1d19282a..be12c2dd1310 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 d930cb696640..61bc30052264 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 05eea6b29809..f1536aa4a5f3 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 ffa200355025..25492550cc4f 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 ed78db4d98f7..3c2a34f00aad 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 a61b90b38370..f2736afc7b4f 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 a8c38ae5d9c7..b35fcaa0d04a 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 671c9eb2389d..f34b32cc2832 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 c29346ca990f..258b137f56af 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 657b90781711..539d89af88e5 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 dcf81de41678..d66dfbfee722 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 05b502a52229..09d0f82ef11e 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 4644cfbf4722..8483e5981dc6 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 5d88d6f8f772..381fad13d046 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 d4d730d69734..263d53e9b864 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 e7657e6e6cb5..541e4cdba2b1 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 fea9ca1c9a56..112bf7ca22a5 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 1af10833c169..11c9daeea6bf 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 48f03dfc2c71..b5e87a146c15 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 c3abc7f2de13..fccefab6fa1e 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 98ff36fe5153..dd8b1847e7cd 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 c3b9a8ba23b9..42e1aa00e7ee 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 b3a192f6ebad..b413453ab59e 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 4fc42cc84b1b..e9a61a801f66 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 8734fa35ba2f..db4cfb1c8047 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 eba64a40ef7c..a3ff512f0e47 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 18b3b0a48cc5..188531c4591e 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 ba6416bcd59a..cf4f7889c128 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 76231f235126..64149e379b2c 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 1651ef01d1e6..3b960b23b2af 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 453f064246d9..e9eb2b97872e 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 68b51cf2a846..77272ae0d5f5 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 3d9bf612a1fb..46aa0397c3aa 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 426ac6fc151f..3ef6f02d5ffc 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 60a534a82ec4..ea5784c68981 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 a166e632da06..4254c0b94a6a 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 8d6b8a2415dd..9c22245b1216 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 06fb02b11b5b..f8320b03573f 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 5698bf08da21..7ef7fdf0a0ae 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 be1818efaae3..2da96f375d05 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 e4a169196e03..5236a58a2f9b 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 a39b9275acc4..296a5a68b7e6 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 a012eadc5f4e..4b1bd09349fa 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 b36d471b43fb..000000000000 --- 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 000000000000..01eea411a4b0 --- /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 e6b5eb70b61c..61addbc7a4c4 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 90be5ec8b93e..c8d6ef4a5324 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');