From 869d3f171fc4e14acf05e262d93b4968d14e2aee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Ma=C5=82ecki?= Date: Fri, 2 Oct 2026 07:50:32 -0700 Subject: [PATCH 1/2] Move leaf View parsers out of headers (#58785) Summary: Pull Request resolved: https://github.com/react/react-native/pull/58785 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. This change is necessary to remove CSS headers leaks as visibility of CSS module will be changed to `for frameworks` eventually. 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] Reviewed By: javache 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 2629f4af33df76a5e461749eff7d97a26e10b4e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Ma=C5=82ecki?= Date: Fri, 2 Oct 2026 07:55:21 -0700 Subject: [PATCH 2/2] Make renderer View conversions CSS-free (#58786) Summary: Pull Request resolved: https://github.com/react/react-native/pull/58786 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. This change is necessary to remove CSS headers leaks as visibility of CSS module will be changed to `for frameworks` eventually. 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] Reviewed By: javache 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);