diff --git a/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm b/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm index 00653abc9fd0..3853ea796772 100644 --- a/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +++ b/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm @@ -412,7 +412,8 @@ - (void)updateProps:(const Props::Shared &)props oldProps:(const Props::Shared & auto *scrollView = (RCTEnhancedScrollView *)_scrollView; if (oldScrollViewProps.snapToAlignment != newScrollViewProps.snapToAlignment) { - scrollView.snapToAlignment = RCTNSStringFromString(toString(newScrollViewProps.snapToAlignment)); + scrollView.snapToAlignment = + RCTNSStringFromString(toString(newScrollViewProps.snapToAlignment.value_or(ScrollViewSnapToAlignment::Start))); } scrollView.snapToStart = newScrollViewProps.snapToStart; diff --git a/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm b/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm index bdd0bb5af232..8a074cd2b604 100644 --- a/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +++ b/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm @@ -67,7 +67,7 @@ static BOOL RCTViewIsInteractiveAccessibilityElement(UIView *view, const ViewPro // `role` wins over the legacy `accessibilityRole` when both are set, matching // how the traits themselves are resolved. - if (props.role != Role::None) { + if (props.role.value_or(Role::None) != Role::None) { static const std::unordered_set interactiveRoles{ Role::Button, Role::Checkbox, @@ -82,7 +82,7 @@ static BOOL RCTViewIsInteractiveAccessibilityElement(UIView *view, const ViewPro Role::Switch, Role::Tab, Role::Treeitem}; - return interactiveRoles.contains(props.role); + return interactiveRoles.contains(*props.role); } static const std::unordered_set interactiveAccessibilityRoles{ @@ -1690,8 +1690,9 @@ - (NSString *)accessibilityValue } NSMutableArray *valueComponents = [NSMutableArray new]; - NSString *roleString = (props.role != Role::None) ? [NSString stringWithUTF8String:toString(props.role).c_str()] - : [NSString stringWithUTF8String:props.accessibilityRole.c_str()]; + NSString *roleString = (props.role.value_or(Role::None) != Role::None) + ? [NSString stringWithUTF8String:toString(*props.role).c_str()] + : [NSString stringWithUTF8String:props.accessibilityRole.c_str()]; // In iOS, checkbox and radio buttons aren't recognized as traits. However, // because our apps use checkbox and radio buttons often, we should announce diff --git a/packages/react-native/ReactCommon/react/renderer/components/scrollview/BaseScrollViewProps.cpp b/packages/react-native/ReactCommon/react/renderer/components/scrollview/BaseScrollViewProps.cpp index cb5407ea853e..5b6f28634352 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/scrollview/BaseScrollViewProps.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/scrollview/BaseScrollViewProps.cpp @@ -80,7 +80,7 @@ BaseScrollViewProps::BaseScrollViewProps( rawProps, "decelerationRate", sourceProps.decelerationRate, - (Float)0.998)), + kDefaultDecelerationRate)), endDraggingSensitivityMultiplier(convertRawProp( context, rawProps, @@ -427,10 +427,7 @@ SharedDebugStringConvertibleList BaseScrollViewProps::getDebugProps() const { "snapToInterval", snapToInterval, defaultScrollViewProps.snapToInterval), - debugStringConvertibleItem( - "snapToAlignment", - snapToAlignment, - defaultScrollViewProps.snapToAlignment), + debugStringConvertibleItem("snapToAlignment", snapToAlignment), debugStringConvertibleItem( "disableIntervalMomentum", disableIntervalMomentum, diff --git a/packages/react-native/ReactCommon/react/renderer/components/scrollview/BaseScrollViewProps.h b/packages/react-native/ReactCommon/react/renderer/components/scrollview/BaseScrollViewProps.h index 3a3ebbe84b9b..4e4b5d447852 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/scrollview/BaseScrollViewProps.h +++ b/packages/react-native/ReactCommon/react/renderer/components/scrollview/BaseScrollViewProps.h @@ -41,7 +41,13 @@ class BaseScrollViewProps : public ViewProps { bool automaticallyAdjustContentInsets{}; bool automaticallyAdjustsScrollIndicatorInsets{true}; bool automaticallyAdjustKeyboardInsets{false}; - Float decelerationRate{0.998f}; +#ifdef ANDROID + // ReactScrollView's initial rate. + static constexpr Float kDefaultDecelerationRate = 0.985f; +#else + static constexpr Float kDefaultDecelerationRate = 0.998f; +#endif + Float decelerationRate{kDefaultDecelerationRate}; Float endDraggingSensitivityMultiplier{1}; bool directionalLockEnabled{}; ScrollViewIndicatorStyle indicatorStyle{}; @@ -63,7 +69,7 @@ class BaseScrollViewProps : public ViewProps { Point contentOffset{}; EdgeInsets scrollIndicatorInsets{}; Float snapToInterval{}; - ScrollViewSnapToAlignment snapToAlignment{}; + std::optional snapToAlignment{}; bool disableIntervalMomentum{false}; std::vector snapToOffsets{}; bool snapToStart{true}; diff --git a/packages/react-native/ReactCommon/react/renderer/components/scrollview/platform/android/react/renderer/components/scrollview/HostPlatformScrollViewProps.cpp b/packages/react-native/ReactCommon/react/renderer/components/scrollview/platform/android/react/renderer/components/scrollview/HostPlatformScrollViewProps.cpp index a9a83ef67db1..2aa02d73854c 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/scrollview/platform/android/react/renderer/components/scrollview/HostPlatformScrollViewProps.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/scrollview/platform/android/react/renderer/components/scrollview/HostPlatformScrollViewProps.cpp @@ -49,7 +49,13 @@ HostPlatformScrollViewProps::HostPlatformScrollViewProps( rawProps, "endFillColor", sourceProps.endFillColor, - clearColor())) {} + clearColor())), + scrollsChildToFocus(convertRawProp( + context, + rawProps, + "scrollsChildToFocus", + sourceProps.scrollsChildToFocus, + true)) {} void HostPlatformScrollViewProps::setProp( const PropsParserContext& context, @@ -69,6 +75,7 @@ void HostPlatformScrollViewProps::setProp( RAW_SET_PROP_SWITCH_CASE_BASIC(fadingEdgeLength); RAW_SET_PROP_SWITCH_CASE_BASIC(overScrollMode); RAW_SET_PROP_SWITCH_CASE_BASIC(endFillColor); + RAW_SET_PROP_SWITCH_CASE_BASIC(scrollsChildToFocus); } } @@ -96,7 +103,11 @@ SharedDebugStringConvertibleList HostPlatformScrollViewProps::getDebugProps() debugStringConvertibleItem( "endFillColor", endFillColor, - defaultScrollViewProps.endFillColor)}; + defaultScrollViewProps.endFillColor), + debugStringConvertibleItem( + "scrollsChildToFocus", + scrollsChildToFocus, + defaultScrollViewProps.scrollsChildToFocus)}; } #endif @@ -301,17 +312,9 @@ folly::dynamic HostPlatformScrollViewProps::getDiffProps( } if (snapToAlignment != oldProps->snapToAlignment) { - switch (snapToAlignment) { - case ScrollViewSnapToAlignment::Start: - result["snapToAlignment"] = "start"; - break; - case ScrollViewSnapToAlignment::Center: - result["snapToAlignment"] = "center"; - break; - case ScrollViewSnapToAlignment::End: - result["snapToAlignment"] = "end"; - break; - } + result["snapToAlignment"] = snapToAlignment.has_value() + ? toString(*snapToAlignment) + : folly::dynamic(nullptr); } if (disableIntervalMomentum != oldProps->disableIntervalMomentum) { @@ -380,6 +383,10 @@ folly::dynamic HostPlatformScrollViewProps::getDiffProps( result["endFillColor"] = *endFillColor; } + if (scrollsChildToFocus != oldProps->scrollsChildToFocus) { + result["scrollsChildToFocus"] = scrollsChildToFocus; + } + return result; } diff --git a/packages/react-native/ReactCommon/react/renderer/components/scrollview/platform/android/react/renderer/components/scrollview/HostPlatformScrollViewProps.h b/packages/react-native/ReactCommon/react/renderer/components/scrollview/platform/android/react/renderer/components/scrollview/HostPlatformScrollViewProps.h index 7ac321ec89fd..49fcc1cb7f7f 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/scrollview/platform/android/react/renderer/components/scrollview/HostPlatformScrollViewProps.h +++ b/packages/react-native/ReactCommon/react/renderer/components/scrollview/platform/android/react/renderer/components/scrollview/HostPlatformScrollViewProps.h @@ -38,6 +38,7 @@ class HostPlatformScrollViewProps : public BaseScrollViewProps { folly::dynamic fadingEdgeLength{}; std::string overScrollMode{"auto"}; SharedColor endFillColor{clearColor()}; + bool scrollsChildToFocus{true}; #pragma mark - DebugStringConvertible diff --git a/packages/react-native/ReactCommon/react/renderer/components/scrollview/tests/ScrollViewPropsDiffTest.cpp b/packages/react-native/ReactCommon/react/renderer/components/scrollview/tests/ScrollViewPropsDiffTest.cpp new file mode 100644 index 000000000000..8c46c2b2db88 --- /dev/null +++ b/packages/react-native/ReactCommon/react/renderer/components/scrollview/tests/ScrollViewPropsDiffTest.cpp @@ -0,0 +1,70 @@ +/* + * 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 + +#include +#include + +#ifdef RN_SERIALIZABLE_STATE + +namespace facebook::react { + +namespace { + +using folly::dynamic; + +void expectPayloads(const std::vector& commits) { + expectPayloadsMatchRawProps(commits); +} + +} // namespace + +// ReactScrollViewManager has a setter for it; with +// enableExclusivePropsUpdateAndroid there is no rawProps fallback. +TEST(ScrollViewPropsDiffTest, emitsScrollsChildToFocus) { + expectPayloads({{dynamic::object("scrollsChildToFocus", false)}}); +} + +// Android ScrollViews start with snapping alignment disabled, and +// setSnapToAlignment disables it for null. +TEST( + ScrollViewPropsDiffTest, + keepsAnExplicitSnapToAlignmentStartApartFromUnset) { + expectPayloads({ + {dynamic::object("snapToAlignment", "start")}, + {dynamic::object("snapToAlignment", "center")}, + {dynamic::object("snapToAlignment", nullptr)}, + }); +} + +// Android ScrollViews start decelerating at 0.985 (ReactScrollViewHelper). +// A removed rate restores it; Props 1.5 sends null, which the setter reads as +// 0. +TEST(ScrollViewPropsDiffTest, emitsAnExplicitDecelerationRate) { + expectPayloads({ + {dynamic::object("decelerationRate", 0.998)}, + {dynamic::object("decelerationRate", nullptr), + dynamic::object("decelerationRate", 0.985)}, + }); +} + +// The ScrollView managers turn both off for null. +TEST(ScrollViewPropsDiffTest, removingNestedScrollAndMomentumEventsEmitsFalse) { + expectPayloads({ + {dynamic::object("nestedScrollEnabled", true)( + "sendMomentumEvents", true)}, + {dynamic::object("nestedScrollEnabled", nullptr)( + "sendMomentumEvents", nullptr), + dynamic::object("nestedScrollEnabled", false)( + "sendMomentumEvents", false)}, + }); +} + +} // namespace facebook::react + +#endif diff --git a/packages/react-native/ReactCommon/react/renderer/components/text/BaseTextProps.cpp b/packages/react-native/ReactCommon/react/renderer/components/text/BaseTextProps.cpp index 135463aa2d09..407445b5a6b2 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/text/BaseTextProps.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/text/BaseTextProps.cpp @@ -13,6 +13,8 @@ #include #include +#include + namespace facebook::react { static TextAttributes convertRawProp( @@ -436,7 +438,9 @@ void BaseTextProps::appendTextAttributesProps( if (!floatEquality( textAttributes.letterSpacing, oldProps->textAttributes.letterSpacing)) { - result["letterSpacing"] = textAttributes.letterSpacing; + result["letterSpacing"] = std::isnan(textAttributes.letterSpacing) + ? folly::dynamic(nullptr) + : textAttributes.letterSpacing; } if (textAttributes.textTransform != oldProps->textAttributes.textTransform) { diff --git a/packages/react-native/ReactCommon/react/renderer/components/text/tests/ParagraphPropsDiffTest.cpp b/packages/react-native/ReactCommon/react/renderer/components/text/tests/ParagraphPropsDiffTest.cpp new file mode 100644 index 000000000000..96ede0ca8e10 --- /dev/null +++ b/packages/react-native/ReactCommon/react/renderer/components/text/tests/ParagraphPropsDiffTest.cpp @@ -0,0 +1,30 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include + +#include +#include + +#ifdef RN_SERIALIZABLE_STATE + +namespace facebook::react { + +using folly::dynamic; + +// ReactTextViewManager resets letterSpacing to 0 for null; +// ReactTextView.setLetterSpacing ignores NaN. +TEST(ParagraphPropsDiffTest, removingLetterSpacingEmitsNull) { + expectPayloadsMatchRawProps({ + {dynamic::object("letterSpacing", 4.0)}, + {dynamic::object("letterSpacing", nullptr)}, + }); +} + +} // namespace facebook::react + +#endif diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp index b204a3fd3c58..4bc58608d2a2 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp @@ -18,12 +18,12 @@ namespace facebook::react { // members. This makes accessibilityTraits the single source of truth. // See: github.com/facebook/react-native/issues/57515 static AccessibilityTraits deriveAccessibilityTraits( - Role role, + std::optional role, const std::string& accessibilityRole, const std::optional& accessibilityState) { AccessibilityTraits traits = AccessibilityTraits::None; - if (role != Role::None) { - fromString(toString(role), traits); + if (role.value_or(Role::None) != Role::None) { + fromString(toString(*role), traits); } else if (!accessibilityRole.empty()) { fromString(accessibilityRole, traits); } @@ -179,16 +179,15 @@ AccessibilityProps::AccessibilityProps( auto* accessibilityRoleValue = rawProps.at("accessibilityRole"); auto* roleValue = rawProps.at("role"); - if (accessibilityRoleValue == nullptr || - !accessibilityRoleValue->hasValue()) { + if (accessibilityRoleValue == nullptr) { accessibilityRole = sourceProps.accessibilityRole; - } else { + } else if (accessibilityRoleValue->hasValue()) { fromRawValue(context, *accessibilityRoleValue, accessibilityRole); } - if (roleValue == nullptr || !roleValue->hasValue()) { + if (roleValue == nullptr) { role = sourceProps.role; - } else { + } else if (roleValue->hasValue()) { fromRawValue(context, *roleValue, role); } diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityProps.h b/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityProps.h index 53524bb4a015..0b055d60f9b8 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityProps.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityProps.h @@ -56,7 +56,7 @@ class AccessibilityProps { bool onAccessibilityEscape{}; bool onAccessibilityAction{}; ImportantForAccessibility importantForAccessibility{ImportantForAccessibility::Auto}; - Role role{Role::None}; + std::optional role{}; std::string testId; #pragma mark - DebugStringConvertible diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/HostPlatformViewProps.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/HostPlatformViewProps.cpp index d2417698a5f6..2f2820422161 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/HostPlatformViewProps.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/HostPlatformViewProps.cpp @@ -395,58 +395,39 @@ inline static void updateNativeDrawableProp( result[propName] = nativeDrawableResult; } -inline static void updateAccessibilityStateProp( - folly::dynamic& result, - const std::optional& newState, - const std::optional& oldState) { - folly::dynamic resultState = folly::dynamic::object(); - - if (!newState.has_value() && oldState.has_value()) { - result["accessibilityState"] = resultState; - return; - } +static folly::dynamic toDynamic(const AccessibilityState& state) { + folly::dynamic result = folly::dynamic::object(); + result["disabled"] = state.disabled; - if (!oldState.has_value() || newState->disabled != oldState->disabled) { - resultState["disabled"] = newState->disabled; + // Omitting the key when `selected` is unset is what tells the platform the + // component is not selectable. BaseViewManager#setViewState falls back to + // `setSelected(false)` for an absent key, so the rendered result is + // unchanged from when this was a plain `bool`. + if (state.selected.has_value()) { + result["selected"] = state.selected.value(); } - if (!oldState.has_value() || newState->selected != oldState->selected) { - // Omitting the key when `selected` is unset is what tells the platform the - // component is not selectable. BaseViewManager#setViewState falls back to - // `setSelected(false)` for an absent key, so the rendered result is - // unchanged from when this was a plain `bool`. - if (newState->selected.has_value()) { - resultState["selected"] = newState->selected.value(); - } - } + result["busy"] = state.busy; - if (!oldState.has_value() || newState->busy != oldState->busy) { - resultState["busy"] = newState->busy; + if (state.expanded.has_value()) { + result["expanded"] = state.expanded.value(); } - if (!oldState.has_value() || newState->expanded != oldState->expanded) { - if (newState->expanded.has_value()) { - resultState["expanded"] = newState->expanded.value(); - } + switch (state.checked) { + case AccessibilityState::Unchecked: + result["checked"] = false; + break; + case AccessibilityState::Checked: + result["checked"] = true; + break; + case AccessibilityState::Mixed: + result["checked"] = "mixed"; + break; + case AccessibilityState::None: + result["checked"] = "none"; + break; } - - if (!oldState.has_value() || newState->checked != oldState->checked) { - switch (newState->checked) { - case AccessibilityState::Unchecked: - resultState["checked"] = false; - break; - case AccessibilityState::Checked: - resultState["checked"] = true; - break; - case AccessibilityState::Mixed: - resultState["checked"] = "mixed"; - break; - case AccessibilityState::None: - resultState["checked"] = "none"; - break; - } - } - result["accessibilityState"] = resultState; + return result; } static folly::dynamic toDynamic( @@ -540,7 +521,8 @@ folly::dynamic HostPlatformViewProps::getDiffProps( } if (role != oldProps->role) { - result["role"] = toString(role); + result["role"] = + role.has_value() ? toString(*role) : folly::dynamic(nullptr); } if (opacity != oldProps->opacity) { @@ -907,8 +889,9 @@ folly::dynamic HostPlatformViewProps::getDiffProps( // Accessibility if (accessibilityState != oldProps->accessibilityState) { - updateAccessibilityStateProp( - result, accessibilityState, oldProps->accessibilityState); + result["accessibilityState"] = accessibilityState.has_value() + ? toDynamic(*accessibilityState) + : folly::dynamic::object(); } if (accessibilityLabel != oldProps->accessibilityLabel) { @@ -941,7 +924,9 @@ folly::dynamic HostPlatformViewProps::getDiffProps( } if (accessibilityRole != oldProps->accessibilityRole) { - result["accessibilityRole"] = accessibilityRole; + result["accessibilityRole"] = accessibilityRole.empty() + ? folly::dynamic(nullptr) + : folly::dynamic(accessibilityRole); } if (accessibilityLanguage != oldProps->accessibilityLanguage) { @@ -962,7 +947,9 @@ folly::dynamic HostPlatformViewProps::getDiffProps( if (accessibilityValue.text.has_value()) { accessibilityValueObject["text"] = accessibilityValue.text.value(); } - result["accessibilityValue"] = accessibilityValueObject; + result["accessibilityValue"] = accessibilityValueObject.empty() + ? folly::dynamic(nullptr) + : accessibilityValueObject; } if (accessibilityActions != oldProps->accessibilityActions) { diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/tests/ViewPropsDiffTest.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/tests/ViewPropsDiffTest.cpp index 0c328359c855..7fe5a6dfdab3 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/tests/ViewPropsDiffTest.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/tests/ViewPropsDiffTest.cpp @@ -103,6 +103,55 @@ TEST(ViewPropsDiffTest, gradientColorHintEmitsNullColor) { "position", nullptr)))))}}); } +// BaseViewManager.setViewState replaces the whole state: an absent `selected` +// deselects the view and an absent `disabled` re-enables it. Props 2.0 sends an +// unset `checked` as "none", which Java ignores. +TEST(ViewPropsDiffTest, emitsTheWholeAccessibilityStateWhenOneMemberChanges) { + auto state = [](bool busy) { + return dynamic::object("selected", true)("disabled", true)("busy", busy); + }; + auto sentState = [&](bool busy) { + return dynamic::object( + "accessibilityState", state(busy)("checked", "none")); + }; + expectPayloads({ + {dynamic::object("accessibilityState", state(false)), sentState(false)}, + {dynamic::object("accessibilityState", state(true)), sentState(true)}, + }); +} + +// React sends a removed prop as null on top of the previous props. +// BaseViewManager clears the role only for null, and +// AccessibilityRole.fromValue("") throws. +TEST(ViewPropsDiffTest, removingAccessibilityRoleEmitsNull) { + expectPayloads({ + {dynamic::object("accessibilityRole", "button")}, + {dynamic::object("accessibilityRole", nullptr)}, + }); +} + +// BaseViewManager falls back to accessibilityRole only for a null role. +TEST(ViewPropsDiffTest, removingRoleEmitsNull) { + expectPayloads({ + {dynamic::object("role", "button")}, + {dynamic::object("role", nullptr)}, + }); +} + +// An explicit role="none" overrides accessibilityRole. +TEST(ViewPropsDiffTest, emitsAnExplicitRoleNone) { + expectPayloads( + {{dynamic::object("role", "none")("accessibilityRole", "button")}}); +} + +// BaseViewManager clears the value and the content description only for null. +TEST(ViewPropsDiffTest, removingAccessibilityValueEmitsNull) { + expectPayloads({ + {dynamic::object("accessibilityValue", dynamic::object("text", "50%"))}, + {dynamic::object("accessibilityValue", nullptr)}, + }); +} + } // namespace facebook::react #endif diff --git a/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api b/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api index 6d9ac1caa787..862d04da9832 100644 --- a/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api @@ -700,8 +700,8 @@ class facebook::react::AccessibilityProps { public facebook::react::AccessibilityTraits accessibilityTraits; public facebook::react::AccessibilityValue accessibilityValue; public facebook::react::ImportantForAccessibility importantForAccessibility; - public facebook::react::Role role; public std::optional accessibilityState; + public std::optional role; public std::string accessibilityHint; public std::string accessibilityLabel; public std::string accessibilityLanguage; diff --git a/scripts/cxx-api/api-snapshots/ReactAndroidFrameworksCxx.api b/scripts/cxx-api/api-snapshots/ReactAndroidFrameworksCxx.api index d2b41ea569c8..83896216ad31 100644 --- a/scripts/cxx-api/api-snapshots/ReactAndroidFrameworksCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAndroidFrameworksCxx.api @@ -1016,8 +1016,8 @@ class facebook::react::AccessibilityProps { public facebook::react::AccessibilityTraits accessibilityTraits; public facebook::react::AccessibilityValue accessibilityValue; public facebook::react::ImportantForAccessibility importantForAccessibility; - public facebook::react::Role role; public std::optional accessibilityState; + public std::optional role; public std::string accessibilityHint; public std::string accessibilityLabel; public std::string accessibilityLanguage; @@ -1439,8 +1439,9 @@ class facebook::react::BaseScrollViewProps : public facebook::react::HostPlatfor public facebook::react::Point contentOffset; public facebook::react::ScrollViewIndicatorStyle indicatorStyle; public facebook::react::ScrollViewKeyboardDismissMode keyboardDismissMode; - public facebook::react::ScrollViewSnapToAlignment snapToAlignment; + public static constexpr facebook::react::Float kDefaultDecelerationRate; public std::optional maintainVisibleContentPosition; + public std::optional snapToAlignment; public std::vector snapToOffsets; public void setProp(const facebook::react::PropsParserContext& context, facebook::react::RawPropsPropNameHash hash, const char* propName, const facebook::react::RawValue& value); } @@ -2049,6 +2050,7 @@ class facebook::react::HostPlatformScrollViewProps : public facebook::react::Bas public HostPlatformScrollViewProps() = default; public HostPlatformScrollViewProps(const facebook::react::PropsParserContext& context, const facebook::react::HostPlatformScrollViewProps& sourceProps, const facebook::react::RawProps& rawProps); public bool nestedScrollEnabled; + public bool scrollsChildToFocus; public bool sendMomentumEvents; public facebook::react::SharedColor endFillColor; public folly::dynamic fadingEdgeLength; diff --git a/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api b/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api index 57f7bc098311..97365fcd71a0 100644 --- a/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api @@ -700,8 +700,8 @@ class facebook::react::AccessibilityProps { public facebook::react::AccessibilityTraits accessibilityTraits; public facebook::react::AccessibilityValue accessibilityValue; public facebook::react::ImportantForAccessibility importantForAccessibility; - public facebook::react::Role role; public std::optional accessibilityState; + public std::optional role; public std::string accessibilityHint; public std::string accessibilityLabel; public std::string accessibilityLanguage; diff --git a/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api b/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api index 57f7bc098311..97365fcd71a0 100644 --- a/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api @@ -700,8 +700,8 @@ class facebook::react::AccessibilityProps { public facebook::react::AccessibilityTraits accessibilityTraits; public facebook::react::AccessibilityValue accessibilityValue; public facebook::react::ImportantForAccessibility importantForAccessibility; - public facebook::react::Role role; public std::optional accessibilityState; + public std::optional role; public std::string accessibilityHint; public std::string accessibilityLabel; public std::string accessibilityLanguage; diff --git a/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api index 863038207ad0..3852766f9a17 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api @@ -3435,8 +3435,8 @@ class facebook::react::AccessibilityProps { public facebook::react::AccessibilityTraits accessibilityTraits; public facebook::react::AccessibilityValue accessibilityValue; public facebook::react::ImportantForAccessibility importantForAccessibility; - public facebook::react::Role role; public std::optional accessibilityState; + public std::optional role; public std::string accessibilityHint; public std::string accessibilityLabel; public std::string accessibilityLanguage; diff --git a/scripts/cxx-api/api-snapshots/ReactAppleFrameworksCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleFrameworksCxx.api index dece37c06a37..eb53f3f42a58 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleFrameworksCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleFrameworksCxx.api @@ -3794,8 +3794,8 @@ class facebook::react::AccessibilityProps { public facebook::react::AccessibilityTraits accessibilityTraits; public facebook::react::AccessibilityValue accessibilityValue; public facebook::react::ImportantForAccessibility importantForAccessibility; - public facebook::react::Role role; public std::optional accessibilityState; + public std::optional role; public std::string accessibilityHint; public std::string accessibilityLabel; public std::string accessibilityLanguage; @@ -4029,8 +4029,9 @@ class facebook::react::BaseScrollViewProps : public facebook::react::HostPlatfor public facebook::react::Point contentOffset; public facebook::react::ScrollViewIndicatorStyle indicatorStyle; public facebook::react::ScrollViewKeyboardDismissMode keyboardDismissMode; - public facebook::react::ScrollViewSnapToAlignment snapToAlignment; + public static constexpr facebook::react::Float kDefaultDecelerationRate; public std::optional maintainVisibleContentPosition; + public std::optional snapToAlignment; public std::vector snapToOffsets; public void setProp(const facebook::react::PropsParserContext& context, facebook::react::RawPropsPropNameHash hash, const char* propName, const facebook::react::RawValue& value); } diff --git a/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api index 3e9a7b4744fc..a1f8d4990257 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api @@ -3427,8 +3427,8 @@ class facebook::react::AccessibilityProps { public facebook::react::AccessibilityTraits accessibilityTraits; public facebook::react::AccessibilityValue accessibilityValue; public facebook::react::ImportantForAccessibility importantForAccessibility; - public facebook::react::Role role; public std::optional accessibilityState; + public std::optional role; public std::string accessibilityHint; public std::string accessibilityLabel; public std::string accessibilityLanguage; diff --git a/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api index a692b6489f17..d3bfac82c603 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api @@ -3435,8 +3435,8 @@ class facebook::react::AccessibilityProps { public facebook::react::AccessibilityTraits accessibilityTraits; public facebook::react::AccessibilityValue accessibilityValue; public facebook::react::ImportantForAccessibility importantForAccessibility; - public facebook::react::Role role; public std::optional accessibilityState; + public std::optional role; public std::string accessibilityHint; public std::string accessibilityLabel; public std::string accessibilityLanguage; diff --git a/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api b/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api index cd608ca12bc3..20dd41f82953 100644 --- a/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api @@ -321,8 +321,8 @@ class facebook::react::AccessibilityProps { public facebook::react::AccessibilityTraits accessibilityTraits; public facebook::react::AccessibilityValue accessibilityValue; public facebook::react::ImportantForAccessibility importantForAccessibility; - public facebook::react::Role role; public std::optional accessibilityState; + public std::optional role; public std::string accessibilityHint; public std::string accessibilityLabel; public std::string accessibilityLanguage; diff --git a/scripts/cxx-api/api-snapshots/ReactCommonFrameworksCxx.api b/scripts/cxx-api/api-snapshots/ReactCommonFrameworksCxx.api index c06d3fc44d2a..8f02bdc58fd1 100644 --- a/scripts/cxx-api/api-snapshots/ReactCommonFrameworksCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactCommonFrameworksCxx.api @@ -570,8 +570,8 @@ class facebook::react::AccessibilityProps { public facebook::react::AccessibilityTraits accessibilityTraits; public facebook::react::AccessibilityValue accessibilityValue; public facebook::react::ImportantForAccessibility importantForAccessibility; - public facebook::react::Role role; public std::optional accessibilityState; + public std::optional role; public std::string accessibilityHint; public std::string accessibilityLabel; public std::string accessibilityLanguage; @@ -780,8 +780,9 @@ class facebook::react::BaseScrollViewProps : public facebook::react::HostPlatfor public facebook::react::Point contentOffset; public facebook::react::ScrollViewIndicatorStyle indicatorStyle; public facebook::react::ScrollViewKeyboardDismissMode keyboardDismissMode; - public facebook::react::ScrollViewSnapToAlignment snapToAlignment; + public static constexpr Float kDefaultDecelerationRate; public std::optional maintainVisibleContentPosition; + public std::optional snapToAlignment; public std::vector snapToOffsets; public void setProp(const facebook::react::PropsParserContext& context, facebook::react::RawPropsPropNameHash hash, const char* propName, const facebook::react::RawValue& value); } diff --git a/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api b/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api index 1da6bfffd246..1d69ab6fc014 100644 --- a/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api @@ -321,8 +321,8 @@ class facebook::react::AccessibilityProps { public facebook::react::AccessibilityTraits accessibilityTraits; public facebook::react::AccessibilityValue accessibilityValue; public facebook::react::ImportantForAccessibility importantForAccessibility; - public facebook::react::Role role; public std::optional accessibilityState; + public std::optional role; public std::string accessibilityHint; public std::string accessibilityLabel; public std::string accessibilityLanguage; diff --git a/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api b/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api index 1da6bfffd246..1d69ab6fc014 100644 --- a/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api @@ -321,8 +321,8 @@ class facebook::react::AccessibilityProps { public facebook::react::AccessibilityTraits accessibilityTraits; public facebook::react::AccessibilityValue accessibilityValue; public facebook::react::ImportantForAccessibility importantForAccessibility; - public facebook::react::Role role; public std::optional accessibilityState; + public std::optional role; public std::string accessibilityHint; public std::string accessibilityLabel; public std::string accessibilityLanguage;