react-native-tvos 0.85.0-0rc5 → 0.85.3-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +1 -0
  2. package/Libraries/Components/ScrollView/ScrollView.d.ts +7 -0
  3. package/Libraries/Components/ScrollView/ScrollView.js +6 -0
  4. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +2 -0
  5. package/Libraries/Components/ScrollView/ScrollViewNativeComponentType.js +1 -0
  6. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +5 -1
  7. package/Libraries/Components/TextInput/TextInput.flow.js +1 -0
  8. package/Libraries/Core/ReactNativeVersion.js +2 -2
  9. package/Libraries/Utilities/HMRClient.js +28 -1
  10. package/README.md +52 -0
  11. package/React/Base/RCTVersion.m +2 -2
  12. package/React/CoreModules/RCTDevLoadingView.mm +17 -0
  13. package/React/CoreModules/RCTJscSafeUrl+Internal.h +23 -0
  14. package/React/CoreModules/RCTJscSafeUrl.mm +38 -0
  15. package/React/CoreModules/RCTRedBox+Internal.h +42 -0
  16. package/React/CoreModules/RCTRedBox.mm +30 -471
  17. package/React/CoreModules/RCTRedBox2AnsiParser+Internal.h +22 -0
  18. package/React/CoreModules/RCTRedBox2AnsiParser.mm +55 -0
  19. package/React/CoreModules/RCTRedBox2Controller+Internal.h +34 -0
  20. package/React/CoreModules/RCTRedBox2Controller.mm +764 -0
  21. package/React/CoreModules/RCTRedBox2ErrorParser+Internal.h +46 -0
  22. package/React/CoreModules/RCTRedBox2ErrorParser.mm +57 -0
  23. package/React/CoreModules/RCTRedBoxController+Internal.h +31 -0
  24. package/React/CoreModules/RCTRedBoxController.mm +447 -0
  25. package/React/CoreModules/RCTRedBoxHMRClient+Internal.h +26 -0
  26. package/React/CoreModules/RCTRedBoxHMRClient.mm +125 -0
  27. package/React/CoreModules/React-CoreModules.podspec +1 -0
  28. package/React/DevSupport/RCTFrameTimingsObserver.h +24 -0
  29. package/React/DevSupport/RCTFrameTimingsObserver.mm +298 -0
  30. package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +40 -0
  31. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTEnhancedScrollView.h +1 -0
  32. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTEnhancedScrollView.mm +78 -0
  33. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +32 -6
  34. package/React/Views/ScrollView/RCTScrollViewManager.m +1 -0
  35. package/ReactAndroid/build.gradle.kts +2 -0
  36. package/ReactAndroid/gradle.properties +1 -1
  37. package/ReactAndroid/hermes-engine/build.gradle.kts +17 -0
  38. package/ReactAndroid/publish.gradle +20 -46
  39. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/InspectorFlags.kt +4 -0
  40. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingSequence.kt +1 -1
  41. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingsObserver.kt +127 -26
  42. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +31 -1
  43. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +51 -1
  44. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +11 -1
  45. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +12 -2
  46. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +56 -1
  47. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt +5 -1
  48. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +11 -1
  49. package/ReactAndroid/src/main/java/com/facebook/react/internal/tracing/PerformanceTracer.kt +39 -0
  50. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkEventUtil.kt +8 -0
  51. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/RequestBodyUtil.kt +2 -0
  52. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +2 -2
  53. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt +50 -10
  54. package/ReactAndroid/src/main/java/com/facebook/react/views/common/UiModeUtils.kt +20 -0
  55. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +57 -8
  56. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollViewManager.kt +5 -0
  57. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +48 -2
  58. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.kt +5 -0
  59. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java +28 -3
  60. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.kt +5 -0
  61. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSubmitEditingEvent.kt +6 -1
  62. package/ReactAndroid/src/main/jni/CMakeLists.txt +7 -0
  63. package/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.cpp +22 -0
  64. package/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.h +2 -0
  65. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +71 -1
  66. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +16 -1
  67. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.cpp +14 -0
  68. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.h +18 -4
  69. package/ReactCommon/React-Fabric.podspec +7 -0
  70. package/ReactCommon/cxxreact/ReactNativeVersion.h +3 -3
  71. package/ReactCommon/jsinspector-modern/HostAgent.cpp +36 -0
  72. package/ReactCommon/jsinspector-modern/HostTarget.cpp +7 -1
  73. package/ReactCommon/jsinspector-modern/HostTarget.h +25 -0
  74. package/ReactCommon/jsinspector-modern/HostTargetTracing.cpp +1 -1
  75. package/ReactCommon/jsinspector-modern/HostTargetTracing.h +4 -4
  76. package/ReactCommon/jsinspector-modern/InspectorFlags.cpp +12 -0
  77. package/ReactCommon/jsinspector-modern/InspectorFlags.h +12 -0
  78. package/ReactCommon/jsinspector-modern/NetworkIOAgent.cpp +1 -1
  79. package/ReactCommon/jsinspector-modern/RuntimeAgent.cpp +19 -0
  80. package/ReactCommon/jsinspector-modern/RuntimeAgent.h +7 -0
  81. package/ReactCommon/jsinspector-modern/RuntimeTarget.cpp +33 -0
  82. package/ReactCommon/jsinspector-modern/RuntimeTarget.h +6 -0
  83. package/ReactCommon/jsinspector-modern/tests/HostTargetTest.cpp +12 -0
  84. package/ReactCommon/jsinspector-modern/tests/InspectorMocks.h +3 -2
  85. package/ReactCommon/jsinspector-modern/tests/JsiIntegrationTest.cpp +1 -0
  86. package/ReactCommon/jsinspector-modern/tests/NetworkReporterTest.cpp +1 -1
  87. package/ReactCommon/jsinspector-modern/tests/TracingTest.cpp +1 -1
  88. package/ReactCommon/jsinspector-modern/tests/utils/InspectorFlagOverridesGuard.cpp +10 -0
  89. package/ReactCommon/jsinspector-modern/tests/utils/InspectorFlagOverridesGuard.h +3 -1
  90. package/ReactCommon/jsinspector-modern/tracing/CMakeLists.txt +1 -0
  91. package/ReactCommon/jsinspector-modern/tracing/FrameTimingSequence.h +7 -3
  92. package/ReactCommon/jsinspector-modern/tracing/HostTracingProfileSerializer.cpp +52 -29
  93. package/ReactCommon/jsinspector-modern/tracing/HostTracingProfileSerializer.h +6 -6
  94. package/ReactCommon/jsinspector-modern/tracing/PerformanceTracerSection.h +113 -0
  95. package/ReactCommon/jsinspector-modern/tracing/React-jsinspectortracing.podspec +1 -0
  96. package/ReactCommon/jsinspector-modern/tracing/TraceEventGenerator.cpp +12 -5
  97. package/ReactCommon/jsinspector-modern/tracing/TraceEventGenerator.h +3 -1
  98. package/ReactCommon/jsinspector-modern/tracing/TraceEventSerializer.cpp +42 -0
  99. package/ReactCommon/jsinspector-modern/tracing/TraceEventSerializer.h +7 -0
  100. package/ReactCommon/react/debug/CMakeLists.txt +2 -1
  101. package/ReactCommon/react/debug/React-debug.podspec +7 -1
  102. package/ReactCommon/react/debug/redbox/AnsiParser.cpp +139 -0
  103. package/ReactCommon/react/debug/redbox/AnsiParser.h +35 -0
  104. package/ReactCommon/react/debug/redbox/JscSafeUrl.cpp +179 -0
  105. package/ReactCommon/react/debug/redbox/JscSafeUrl.h +27 -0
  106. package/ReactCommon/react/debug/redbox/RedBoxErrorParser.cpp +171 -0
  107. package/ReactCommon/react/debug/redbox/RedBoxErrorParser.h +40 -0
  108. package/ReactCommon/react/debug/redbox/tests/AnsiParserTest.cpp +97 -0
  109. package/ReactCommon/react/debug/redbox/tests/JscSafeUrlTest.cpp +173 -0
  110. package/ReactCommon/react/debug/redbox/tests/RedBoxErrorParserTest.cpp +107 -0
  111. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +21 -1
  112. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +26 -1
  113. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +135 -45
  114. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +12 -2
  115. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +22 -2
  116. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +46 -1
  117. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h +9 -1
  118. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +6 -1
  119. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModule.mm +3 -1
  120. package/ReactCommon/react/nativemodule/defaults/CMakeLists.txt +1 -0
  121. package/ReactCommon/react/nativemodule/defaults/DefaultTurboModules.cpp +7 -0
  122. package/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec +1 -0
  123. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +26 -1
  124. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +11 -1
  125. package/ReactCommon/react/nativemodule/mutationobserver/NativeMutationObserver.h +4 -0
  126. package/ReactCommon/react/nativemodule/mutationobserver/React-mutationobservernativemodule.podspec +66 -0
  127. package/ReactCommon/react/performance/timeline/PerformanceObserver.cpp +18 -6
  128. package/ReactCommon/react/performance/timeline/PerformanceObserver.h +2 -0
  129. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.cpp +4 -1
  130. package/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp +58 -25
  131. package/ReactCommon/react/renderer/animationbackend/AnimationBackend.h +9 -0
  132. package/ReactCommon/react/renderer/animationbackend/AnimationChoreographer.h +5 -0
  133. package/ReactCommon/react/renderer/components/scrollview/BaseScrollViewProps.cpp +10 -0
  134. package/ReactCommon/react/renderer/components/scrollview/BaseScrollViewProps.h +1 -0
  135. package/ReactCommon/react/renderer/uimanager/UIManagerAnimationBackend.h +1 -0
  136. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.mm +115 -0
  137. package/ReactCommon/{jsinspector-modern → react/utils}/Base64.h +2 -2
  138. package/package.json +11 -11
  139. package/scripts/cocoapods/utils.rb +1 -0
  140. package/scripts/codegen/generate-artifacts-executor/generateAppDependencyProvider.js +4 -4
  141. package/scripts/codegen/generate-artifacts-executor/generateCustomURLHandlers.js +3 -3
  142. package/scripts/codegen/generate-artifacts-executor/generateNativeCode.js +2 -3
  143. package/scripts/codegen/generate-artifacts-executor/generatePackageSwift.js +2 -2
  144. package/scripts/codegen/generate-artifacts-executor/generateRCTModuleProviders.js +3 -2
  145. package/scripts/codegen/generate-artifacts-executor/generateRCTThirdPartyComponents.js +3 -2
  146. package/scripts/codegen/generate-artifacts-executor/generateReactCodegenPodspec.js +2 -2
  147. package/scripts/codegen/generate-artifacts-executor/generateUnstableModulesRequiringMainQueueSetupProvider.js +3 -3
  148. package/scripts/codegen/generate-artifacts-executor/utils.js +48 -0
  149. package/scripts/react_native_pods.rb +1 -0
  150. package/scripts/replace-rncore-version.js +72 -15
  151. package/src/private/featureflags/ReactNativeFeatureFlags.js +27 -2
  152. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +6 -1
  153. package/src/private/setup/setUpDefaultReactNativeEnvironment.js +6 -0
  154. package/types/public/ReactNativeTVTypes.d.ts +8 -0
@@ -39,6 +39,7 @@ import androidx.core.view.ViewCompat.FocusDirection;
39
39
  import com.facebook.common.logging.FLog;
40
40
  import com.facebook.infer.annotation.Assertions;
41
41
  import com.facebook.infer.annotation.Nullsafe;
42
+ import com.facebook.react.views.common.UiModeUtils;
42
43
  import com.facebook.react.R;
43
44
  import com.facebook.react.common.ReactConstants;
44
45
  import com.facebook.react.common.build.ReactBuildConfig;
@@ -139,6 +140,8 @@ public class ReactHorizontalScrollView extends HorizontalScrollView
139
140
  private boolean mEmittedOverScrollSinceScrollBegin = false;
140
141
  private boolean mScrollsChildToFocus = true;
141
142
  private int mSnapToItemPadding;
143
+ private boolean mScrollAnimationEnabled = true;
144
+ private boolean mBlockScrollDelta = false;
142
145
 
143
146
  public ReactHorizontalScrollView(Context context) {
144
147
  this(context, null);
@@ -251,9 +254,23 @@ public class ReactHorizontalScrollView extends HorizontalScrollView
251
254
  return mScrollEnabled && super.canScrollHorizontally(direction);
252
255
  }
253
256
 
257
+ @Override
258
+ public void computeScroll() {
259
+ if (UiModeUtils.isTVDevice(getContext())
260
+ && !mScrollAnimationEnabled
261
+ && mScroller != null
262
+ && !mScroller.isFinished()) {
263
+ // Jump instantly to the target position instead of animating.
264
+ scrollTo(mScroller.getFinalX(), mScroller.getFinalY());
265
+ mScroller.forceFinished(true);
266
+ return;
267
+ }
268
+ super.computeScroll();
269
+ }
270
+
254
271
  @Override
255
272
  protected int computeScrollDeltaToGetChildRectOnScreen(Rect rect) {
256
- if (!mScrollEnabled) {
273
+ if (!mScrollEnabled || mBlockScrollDelta) {
257
274
  return 0;
258
275
  }
259
276
  return super.computeScrollDeltaToGetChildRectOnScreen(rect);
@@ -400,6 +417,10 @@ public class ReactHorizontalScrollView extends HorizontalScrollView
400
417
  mSnapToItemPadding = snapToItemPadding;
401
418
  }
402
419
 
420
+ public void setScrollAnimationEnabled(boolean scrollAnimationEnabled) {
421
+ mScrollAnimationEnabled = scrollAnimationEnabled;
422
+ }
423
+
403
424
  @Override
404
425
  protected float getLeftFadingEdgeStrength() {
405
426
  float max = Math.max(mFadingEdgeLengthStart, mFadingEdgeLengthEnd);
@@ -623,7 +644,11 @@ public class ReactHorizontalScrollView extends HorizontalScrollView
623
644
  * unblocks such customization.
624
645
  */
625
646
  protected void requestChildFocusWithoutScroll(View child, View focused) {
647
+ // Temporarily block HorizontalScrollView's internal scrollToChild from running
648
+ // during super.requestChildFocus — we've already handled scrolling in requestChildFocus.
649
+ mBlockScrollDelta = true;
626
650
  super.requestChildFocus(child, focused);
651
+ mBlockScrollDelta = false;
627
652
  }
628
653
 
629
654
  @Override
@@ -839,21 +864,41 @@ public class ReactHorizontalScrollView extends HorizontalScrollView
839
864
  public boolean arrowScroll(int direction) {
840
865
  boolean handled = false;
841
866
 
842
- if (mPagingEnabled) {
867
+ if (mSnapToAlignment == SNAP_ALIGNMENT_ITEM) {
868
+ // When snapToAlignment is "item", find the next focusable and request focus directly.
869
+ // This avoids super.arrowScroll() which starts its own scroll animation that conflicts
870
+ // with tryScrollSnapToChild's snap scrolling.
871
+ // requestChildFocus → tryScrollSnapToChild handles scrolling.
872
+ View currentFocused = findFocus();
873
+ View nextFocused = FocusFinder.getInstance().findNextFocus(this, currentFocused, direction);
874
+ if (nextFocused != null && nextFocused != currentFocused && nextFocused != this) {
875
+ nextFocused.requestFocus(direction);
876
+ handled = true;
877
+ }
878
+ } else if (mPagingEnabled) {
843
879
  mPagedArrowScrolling = true;
844
880
 
845
881
  if (getChildCount() > 0) {
846
882
  View currentFocused = findFocus();
847
883
  View nextFocused = FocusFinder.getInstance().findNextFocus(this, currentFocused, direction);
848
884
  View rootChild = getContentView();
849
- if (isDescendantOf(rootChild, nextFocused)) {
850
- if (!isScrolledInView(nextFocused) && !isMostlyScrolledInView(nextFocused)) {
851
- smoothScrollToNextPage(direction);
885
+ if (rootChild != null && nextFocused != null && isDescendantOf(rootChild, nextFocused)) {
886
+ if (mSnapToAlignment == SNAP_ALIGNMENT_ITEM) {
887
+ // When snapToAlignment is "item", don't use smoothScrollToNextPage (which scrolls
888
+ // by full page width and ignores snapToItemPadding). Instead just request focus —
889
+ // requestChildFocus → tryScrollSnapToChild handles scrolling with correct padding.
890
+ nextFocused.requestFocus();
891
+ } else {
892
+ if (!isScrolledInView(nextFocused) && !isMostlyScrolledInView(nextFocused)) {
893
+ smoothScrollToNextPage(direction);
894
+ }
895
+ nextFocused.requestFocus();
852
896
  }
853
- nextFocused.requestFocus();
854
897
  handled = true;
855
898
  } else {
856
- smoothScrollToNextPage(direction);
899
+ if (mSnapToAlignment != SNAP_ALIGNMENT_ITEM) {
900
+ smoothScrollToNextPage(direction);
901
+ }
857
902
  handled = true;
858
903
  }
859
904
  }
@@ -1652,7 +1697,11 @@ public class ReactHorizontalScrollView extends HorizontalScrollView
1652
1697
  * scroll view and state. Calling raw `smoothScrollTo` doesn't update state.
1653
1698
  */
1654
1699
  public void reactSmoothScrollTo(int x, int y) {
1655
- ReactScrollViewHelper.smoothScrollTo(this, x, y);
1700
+ if (mScrollAnimationEnabled || !UiModeUtils.isTVDevice(getContext())) {
1701
+ ReactScrollViewHelper.smoothScrollTo(this, x, y);
1702
+ } else {
1703
+ scrollTo(x, y);
1704
+ }
1656
1705
  setPendingContentOffsets(x, y);
1657
1706
  }
1658
1707
 
@@ -169,6 +169,11 @@ constructor(private val fpsListener: FpsListener? = null) :
169
169
  view.setSnapToItemPadding(px)
170
170
  }
171
171
 
172
+ @ReactProp(name = "scrollAnimationEnabled", defaultBoolean = true)
173
+ public fun setScrollAnimationEnabled(view: ReactHorizontalScrollView, value: Boolean) {
174
+ view.setScrollAnimationEnabled(value)
175
+ }
176
+
172
177
  @ReactProp(name = ReactClippingViewGroupHelper.PROP_REMOVE_CLIPPED_SUBVIEWS)
173
178
  public fun setRemoveClippedSubviews(
174
179
  view: ReactHorizontalScrollView,
@@ -24,6 +24,7 @@ import android.graphics.Rect;
24
24
  import android.graphics.drawable.ColorDrawable;
25
25
  import android.graphics.drawable.Drawable;
26
26
  import android.os.Build;
27
+ import android.view.FocusFinder;
27
28
  import android.view.KeyEvent;
28
29
  import android.view.MotionEvent;
29
30
  import android.view.View;
@@ -38,6 +39,7 @@ import androidx.core.view.ViewCompat.FocusDirection;
38
39
  import com.facebook.common.logging.FLog;
39
40
  import com.facebook.infer.annotation.Assertions;
40
41
  import com.facebook.infer.annotation.Nullsafe;
42
+ import com.facebook.react.views.common.UiModeUtils;
41
43
  import com.facebook.react.R;
42
44
  import com.facebook.react.bridge.ReadableMap;
43
45
  import com.facebook.react.common.ReactConstants;
@@ -136,6 +138,8 @@ public class ReactScrollView extends ScrollView
136
138
  private boolean mEmittedOverScrollSinceScrollBegin;
137
139
  private boolean mScrollsChildToFocus = true;
138
140
  private int mSnapToItemPadding;
141
+ private boolean mScrollAnimationEnabled = true;
142
+ private boolean mBlockScrollDelta = false;
139
143
 
140
144
  public ReactScrollView(Context context) {
141
145
  this(context, null);
@@ -366,6 +370,10 @@ public class ReactScrollView extends ScrollView
366
370
  mSnapToItemPadding = snapToItemPadding;
367
371
  }
368
372
 
373
+ public void setScrollAnimationEnabled(boolean scrollAnimationEnabled) {
374
+ mScrollAnimationEnabled = scrollAnimationEnabled;
375
+ }
376
+
369
377
  @Override
370
378
  protected float getTopFadingEdgeStrength() {
371
379
  float max = Math.max(mFadingEdgeLengthStart, mFadingEdgeLengthEnd);
@@ -544,6 +552,24 @@ public class ReactScrollView extends ScrollView
544
552
  return true;
545
553
  }
546
554
 
555
+ @Override
556
+ public boolean arrowScroll(int direction) {
557
+ if (mSnapToAlignment == SNAP_ALIGNMENT_ITEM) {
558
+ // When snapToAlignment is "item", find the next focusable and request focus directly.
559
+ // This avoids super.arrowScroll() which starts its own scroll animation that conflicts
560
+ // with tryScrollSnapToChild's snap scrolling.
561
+ // requestChildFocus → tryScrollSnapToChild handles scrolling.
562
+ View currentFocused = findFocus();
563
+ View nextFocused = FocusFinder.getInstance().findNextFocus(this, currentFocused, direction);
564
+ if (nextFocused != null && nextFocused != currentFocused && nextFocused != this) {
565
+ nextFocused.requestFocus(direction);
566
+ return true;
567
+ }
568
+ return false;
569
+ }
570
+ return super.arrowScroll(direction);
571
+ }
572
+
547
573
  /**
548
574
  * Since ReactScrollView handles layout changes on JS side, it does not call super.onlayout due to
549
575
  * which mIsLayoutDirty flag in ScrollView remains true and prevents scrolling to child when
@@ -567,7 +593,9 @@ public class ReactScrollView extends ScrollView
567
593
  * unblocks such customization.
568
594
  */
569
595
  protected void requestChildFocusWithoutScroll(View child, View focused) {
596
+ mBlockScrollDelta = true;
570
597
  super.requestChildFocus(child, focused);
598
+ mBlockScrollDelta = false;
571
599
  }
572
600
 
573
601
  @Override
@@ -619,9 +647,23 @@ public class ReactScrollView extends ScrollView
619
647
  }
620
648
  }
621
649
 
650
+ @Override
651
+ public void computeScroll() {
652
+ if (UiModeUtils.isTVDevice(getContext())
653
+ && !mScrollAnimationEnabled
654
+ && mScroller != null
655
+ && !mScroller.isFinished()) {
656
+ // Jump instantly to the target position instead of animating.
657
+ scrollTo(mScroller.getFinalX(), mScroller.getFinalY());
658
+ mScroller.forceFinished(true);
659
+ return;
660
+ }
661
+ super.computeScroll();
662
+ }
663
+
622
664
  @Override
623
665
  protected int computeScrollDeltaToGetChildRectOnScreen(Rect rect) {
624
- if (!mScrollEnabled) {
666
+ if (!mScrollEnabled || mBlockScrollDelta) {
625
667
  return 0;
626
668
  }
627
669
  return super.computeScrollDeltaToGetChildRectOnScreen(rect);
@@ -1396,7 +1438,11 @@ public class ReactScrollView extends ScrollView
1396
1438
  * scroll view and state. Calling raw `smoothScrollTo` doesn't update state.
1397
1439
  */
1398
1440
  public void reactSmoothScrollTo(int x, int y) {
1399
- ReactScrollViewHelper.smoothScrollTo(this, x, y);
1441
+ if (mScrollAnimationEnabled || !UiModeUtils.isTVDevice(getContext())) {
1442
+ ReactScrollViewHelper.smoothScrollTo(this, x, y);
1443
+ } else {
1444
+ scrollTo(x, y);
1445
+ }
1400
1446
  setPendingContentOffsets(x, y);
1401
1447
  }
1402
1448
 
@@ -153,6 +153,11 @@ constructor(private val fpsListener: FpsListener? = null) :
153
153
  view.setSnapToItemPadding(px)
154
154
  }
155
155
 
156
+ @ReactProp(name = "scrollAnimationEnabled", defaultBoolean = true)
157
+ public fun setScrollAnimationEnabled(view: ReactScrollView, value: Boolean) {
158
+ view.setScrollAnimationEnabled(value)
159
+ }
160
+
156
161
  @ReactProp(name = ReactClippingViewGroupHelper.PROP_REMOVE_CLIPPED_SUBVIEWS)
157
162
  public fun setRemoveClippedSubviews(view: ReactScrollView, removeClippedSubviews: Boolean) {
158
163
  view.removeClippedSubviews = removeClippedSubviews
@@ -30,6 +30,7 @@ import androidx.appcompat.widget.TintContextWrapper;
30
30
  import androidx.core.view.AccessibilityDelegateCompat;
31
31
  import androidx.core.view.ViewCompat;
32
32
  import androidx.customview.widget.ExploreByTouchHelper;
33
+ import com.facebook.react.views.common.UiModeUtils;
33
34
  import com.facebook.common.logging.FLog;
34
35
  import com.facebook.infer.annotation.Assertions;
35
36
  import com.facebook.infer.annotation.Nullsafe;
@@ -153,14 +154,38 @@ public class ReactTextView extends AppCompatTextView implements ReactCompoundVie
153
154
  // mViewFlags = SOUND_EFFECTS_ENABLED | HAPTIC_FEEDBACK_ENABLED |
154
155
  // LAYOUT_DIRECTION_INHERIT;
155
156
  setEnabled(true);
156
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
157
- setFocusable(View.FOCUSABLE_AUTO);
158
- }
157
+ // Changed from FOCUSABLE_AUTO to NOT_FOCUSABLE to prevent Android TV's
158
+ // focus engine from landing on text views when no other views are available
159
+ setFocusable(View.NOT_FOCUSABLE);
159
160
 
160
161
  setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_NONE);
161
162
  updateView(); // call after changing ellipsizeLocation in particular
162
163
  }
163
164
 
165
+ // On Android TV, prevent text views from becoming focusable.
166
+ // ReactTextAnchorViewManager.setAccessible() ties isFocusable to the
167
+ // "accessible" prop, which causes Android TV's D-pad focus engine to land
168
+ // on text views inside recycled list items (FlashList), triggering
169
+ // requestChildFocus -> scrollToChild scroll jumps.
170
+ // On non-TV devices, focusability is left unchanged for accessibility.
171
+ @Override
172
+ public void setFocusable(boolean focusable) {
173
+ if (UiModeUtils.isTVDevice(getContext())) {
174
+ super.setFocusable(false);
175
+ } else {
176
+ super.setFocusable(focusable);
177
+ }
178
+ }
179
+
180
+ @Override
181
+ public void setFocusable(int focusable) {
182
+ if (UiModeUtils.isTVDevice(getContext())) {
183
+ super.setFocusable(View.NOT_FOCUSABLE);
184
+ } else {
185
+ super.setFocusable(focusable);
186
+ }
187
+ }
188
+
164
189
  private static WritableMap inlineViewJson(
165
190
  int visibility, int index, int left, int top, int right, int bottom) {
166
191
  WritableMap json = Arguments.createMap();
@@ -925,6 +925,11 @@ public open class ReactTextInputManager public constructor() :
925
925
  reactContext.surfaceId,
926
926
  editText.id,
927
927
  editText.text.toString(),
928
+ action = when (actionId) {
929
+ EditorInfo.IME_ACTION_NEXT -> ReactTextInputSubmitEditingEvent.ACTION_NEXT
930
+ EditorInfo.IME_ACTION_PREVIOUS -> ReactTextInputSubmitEditingEvent.ACTION_PREVIOUS
931
+ else -> ReactTextInputSubmitEditingEvent.ACTION_SUBMIT
932
+ },
928
933
  )
929
934
  )
930
935
  }
@@ -11,11 +11,12 @@ import com.facebook.react.bridge.Arguments
11
11
  import com.facebook.react.bridge.WritableMap
12
12
  import com.facebook.react.uimanager.events.Event
13
13
 
14
- /** Event emitted by EditText native view when the user submits the text. */
14
+ /** Event emitted by EditText native view when the user triggers an IME editor action. */
15
15
  internal class ReactTextInputSubmitEditingEvent(
16
16
  surfaceId: Int,
17
17
  viewId: Int,
18
18
  private val text: String,
19
+ private val action: String = ACTION_SUBMIT,
19
20
  ) : Event<ReactTextInputSubmitEditingEvent>(surfaceId, viewId) {
20
21
  override fun getEventName(): String = EVENT_NAME
21
22
 
@@ -23,6 +24,7 @@ internal class ReactTextInputSubmitEditingEvent(
23
24
  return Arguments.createMap().apply {
24
25
  putInt("target", viewTag)
25
26
  putString("text", text)
27
+ putString("action", action)
26
28
  }
27
29
  }
28
30
 
@@ -30,5 +32,8 @@ internal class ReactTextInputSubmitEditingEvent(
30
32
 
31
33
  companion object {
32
34
  private const val EVENT_NAME = "topSubmitEditing"
35
+ const val ACTION_SUBMIT = "submit"
36
+ const val ACTION_NEXT = "next"
37
+ const val ACTION_PREVIOUS = "previous"
33
38
  }
34
39
  }
@@ -117,6 +117,7 @@ add_react_common_subdir(react/renderer/components/safeareaview)
117
117
  add_react_common_subdir(react/renderer/leakchecker)
118
118
  add_react_common_subdir(react/renderer/observers/events)
119
119
  add_react_common_subdir(react/renderer/observers/intersection)
120
+ add_react_common_subdir(react/renderer/observers/mutation)
120
121
  add_react_common_subdir(react/renderer/textlayoutmanager)
121
122
  add_react_common_subdir(react/utils)
122
123
  add_react_common_subdir(react/bridging)
@@ -128,6 +129,7 @@ add_react_common_subdir(react/nativemodule/featureflags)
128
129
  add_react_common_subdir(react/nativemodule/microtasks)
129
130
  add_react_common_subdir(react/nativemodule/idlecallbacks)
130
131
  add_react_common_subdir(react/nativemodule/intersectionobserver)
132
+ add_react_common_subdir(react/nativemodule/mutationobserver)
131
133
  add_react_common_subdir(react/nativemodule/webperformance)
132
134
  add_react_common_subdir(react/networking)
133
135
  add_react_common_subdir(jserrorhandler)
@@ -197,6 +199,7 @@ add_library(reactnative
197
199
  $<TARGET_OBJECTS:react_nativemodule_idlecallbacks>
198
200
  $<TARGET_OBJECTS:react_nativemodule_intersectionobserver>
199
201
  $<TARGET_OBJECTS:react_nativemodule_microtasks>
202
+ $<TARGET_OBJECTS:react_nativemodule_mutationobserver>
200
203
  $<TARGET_OBJECTS:react_nativemodule_webperformance>
201
204
  $<TARGET_OBJECTS:react_networking>
202
205
  $<TARGET_OBJECTS:react_newarchdefaults>
@@ -219,6 +222,7 @@ add_library(reactnative
219
222
  $<TARGET_OBJECTS:react_renderer_mounting>
220
223
  $<TARGET_OBJECTS:react_renderer_observers_events>
221
224
  $<TARGET_OBJECTS:react_renderer_observers_intersection>
225
+ $<TARGET_OBJECTS:react_renderer_observers_mutation>
222
226
  $<TARGET_OBJECTS:react_renderer_runtimescheduler>
223
227
  $<TARGET_OBJECTS:react_renderer_scheduler>
224
228
  $<TARGET_OBJECTS:react_renderer_telemetry>
@@ -292,6 +296,7 @@ target_include_directories(reactnative
292
296
  $<TARGET_PROPERTY:react_nativemodule_idlecallbacks,INTERFACE_INCLUDE_DIRECTORIES>
293
297
  $<TARGET_PROPERTY:react_nativemodule_intersectionobserver,INTERFACE_INCLUDE_DIRECTORIES>
294
298
  $<TARGET_PROPERTY:react_nativemodule_microtasks,INTERFACE_INCLUDE_DIRECTORIES>
299
+ $<TARGET_PROPERTY:react_nativemodule_mutationobserver,INTERFACE_INCLUDE_DIRECTORIES>
295
300
  $<TARGET_PROPERTY:react_nativemodule_webperformance,INTERFACE_INCLUDE_DIRECTORIES>
296
301
  $<TARGET_PROPERTY:react_networking,INTERFACE_INCLUDE_DIRECTORIES>
297
302
  $<TARGET_PROPERTY:react_newarchdefaults,INTERFACE_INCLUDE_DIRECTORIES>
@@ -315,6 +320,8 @@ target_include_directories(reactnative
315
320
  $<TARGET_PROPERTY:react_renderer_mapbuffer,INTERFACE_INCLUDE_DIRECTORIES>
316
321
  $<TARGET_PROPERTY:react_renderer_mounting,INTERFACE_INCLUDE_DIRECTORIES>
317
322
  $<TARGET_PROPERTY:react_renderer_observers_events,INTERFACE_INCLUDE_DIRECTORIES>
323
+ $<TARGET_PROPERTY:react_renderer_observers_intersection,INTERFACE_INCLUDE_DIRECTORIES>
324
+ $<TARGET_PROPERTY:react_renderer_observers_mutation,INTERFACE_INCLUDE_DIRECTORIES>
318
325
  $<TARGET_PROPERTY:react_renderer_runtimescheduler,INTERFACE_INCLUDE_DIRECTORIES>
319
326
  $<TARGET_PROPERTY:react_renderer_scheduler,INTERFACE_INCLUDE_DIRECTORIES>
320
327
  $<TARGET_PROPERTY:react_renderer_telemetry,INTERFACE_INCLUDE_DIRECTORIES>
@@ -11,6 +11,12 @@
11
11
 
12
12
  namespace facebook::react::jsinspector_modern {
13
13
 
14
+ bool JInspectorFlags::getScreenshotCaptureEnabled(
15
+ jni::alias_ref<jclass> /*unused*/) {
16
+ auto& inspectorFlags = InspectorFlags::getInstance();
17
+ return inspectorFlags.getScreenshotCaptureEnabled();
18
+ }
19
+
14
20
  bool JInspectorFlags::getFuseboxEnabled(jni::alias_ref<jclass> /*unused*/) {
15
21
  auto& inspectorFlags = InspectorFlags::getInstance();
16
22
  return inspectorFlags.getFuseboxEnabled();
@@ -21,7 +27,18 @@ bool JInspectorFlags::getIsProfilingBuild(jni::alias_ref<jclass> /*unused*/) {
21
27
  return inspectorFlags.getIsProfilingBuild();
22
28
  }
23
29
 
30
+ bool JInspectorFlags::getFrameRecordingEnabled(
31
+ jni::alias_ref<jclass> /*unused*/) {
32
+ auto& inspectorFlags = InspectorFlags::getInstance();
33
+ return inspectorFlags.getFrameRecordingEnabled();
34
+ }
35
+
24
36
  void JInspectorFlags::registerNatives() {
37
+ javaClassLocal()->registerNatives({
38
+ makeNativeMethod(
39
+ "getScreenshotCaptureEnabled",
40
+ JInspectorFlags::getScreenshotCaptureEnabled),
41
+ });
25
42
  javaClassLocal()->registerNatives({
26
43
  makeNativeMethod("getFuseboxEnabled", JInspectorFlags::getFuseboxEnabled),
27
44
  });
@@ -29,6 +46,11 @@ void JInspectorFlags::registerNatives() {
29
46
  makeNativeMethod(
30
47
  "getIsProfilingBuild", JInspectorFlags::getIsProfilingBuild),
31
48
  });
49
+ javaClassLocal()->registerNatives({
50
+ makeNativeMethod(
51
+ "getFrameRecordingEnabled",
52
+ JInspectorFlags::getFrameRecordingEnabled),
53
+ });
32
54
  }
33
55
 
34
56
  } // namespace facebook::react::jsinspector_modern
@@ -18,8 +18,10 @@ class JInspectorFlags : public jni::JavaClass<JInspectorFlags> {
18
18
  public:
19
19
  static constexpr auto kJavaDescriptor = "Lcom/facebook/react/devsupport/InspectorFlags;";
20
20
 
21
+ static bool getScreenshotCaptureEnabled(jni::alias_ref<jclass> /*unused*/);
21
22
  static bool getFuseboxEnabled(jni::alias_ref<jclass> /*unused*/);
22
23
  static bool getIsProfilingBuild(jni::alias_ref<jclass> /*unused*/);
24
+ static bool getFrameRecordingEnabled(jni::alias_ref<jclass> /*unused*/);
23
25
 
24
26
  static void registerNatives();
25
27
 
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<0b95d68522d63d51d3e524aeecff246a>>
7
+ * @generated SignedSource<<fbfa1db0da68d08e055002244a6847de>>
8
8
  */
9
9
 
10
10
  /**
@@ -285,6 +285,12 @@ class ReactNativeFeatureFlagsJavaProvider
285
285
  return method(javaProvider_);
286
286
  }
287
287
 
288
+ bool enableMutationObserverByDefault() override {
289
+ static const auto method =
290
+ getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableMutationObserverByDefault");
291
+ return method(javaProvider_);
292
+ }
293
+
288
294
  bool enableNativeCSSParsing() override {
289
295
  static const auto method =
290
296
  getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableNativeCSSParsing");
@@ -393,12 +399,24 @@ class ReactNativeFeatureFlagsJavaProvider
393
399
  return method(javaProvider_);
394
400
  }
395
401
 
402
+ bool fuseboxFrameRecordingEnabled() override {
403
+ static const auto method =
404
+ getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("fuseboxFrameRecordingEnabled");
405
+ return method(javaProvider_);
406
+ }
407
+
396
408
  bool fuseboxNetworkInspectionEnabled() override {
397
409
  static const auto method =
398
410
  getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("fuseboxNetworkInspectionEnabled");
399
411
  return method(javaProvider_);
400
412
  }
401
413
 
414
+ bool fuseboxScreenshotCaptureEnabled() override {
415
+ static const auto method =
416
+ getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("fuseboxScreenshotCaptureEnabled");
417
+ return method(javaProvider_);
418
+ }
419
+
402
420
  bool hideOffscreenVirtualViewsOnIOS() override {
403
421
  static const auto method =
404
422
  getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("hideOffscreenVirtualViewsOnIOS");
@@ -435,6 +453,18 @@ class ReactNativeFeatureFlagsJavaProvider
435
453
  return method(javaProvider_);
436
454
  }
437
455
 
456
+ bool redBoxV2Android() override {
457
+ static const auto method =
458
+ getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("redBoxV2Android");
459
+ return method(javaProvider_);
460
+ }
461
+
462
+ bool redBoxV2IOS() override {
463
+ static const auto method =
464
+ getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("redBoxV2IOS");
465
+ return method(javaProvider_);
466
+ }
467
+
438
468
  bool shouldPressibilityUseW3CPointerEventsForHover() override {
439
469
  static const auto method =
440
470
  getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("shouldPressibilityUseW3CPointerEventsForHover");
@@ -758,6 +788,11 @@ bool JReactNativeFeatureFlagsCxxInterop::enableModuleArgumentNSNullConversionIOS
758
788
  return ReactNativeFeatureFlags::enableModuleArgumentNSNullConversionIOS();
759
789
  }
760
790
 
791
+ bool JReactNativeFeatureFlagsCxxInterop::enableMutationObserverByDefault(
792
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
793
+ return ReactNativeFeatureFlags::enableMutationObserverByDefault();
794
+ }
795
+
761
796
  bool JReactNativeFeatureFlagsCxxInterop::enableNativeCSSParsing(
762
797
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
763
798
  return ReactNativeFeatureFlags::enableNativeCSSParsing();
@@ -848,11 +883,21 @@ bool JReactNativeFeatureFlagsCxxInterop::fuseboxEnabledRelease(
848
883
  return ReactNativeFeatureFlags::fuseboxEnabledRelease();
849
884
  }
850
885
 
886
+ bool JReactNativeFeatureFlagsCxxInterop::fuseboxFrameRecordingEnabled(
887
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
888
+ return ReactNativeFeatureFlags::fuseboxFrameRecordingEnabled();
889
+ }
890
+
851
891
  bool JReactNativeFeatureFlagsCxxInterop::fuseboxNetworkInspectionEnabled(
852
892
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
853
893
  return ReactNativeFeatureFlags::fuseboxNetworkInspectionEnabled();
854
894
  }
855
895
 
896
+ bool JReactNativeFeatureFlagsCxxInterop::fuseboxScreenshotCaptureEnabled(
897
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
898
+ return ReactNativeFeatureFlags::fuseboxScreenshotCaptureEnabled();
899
+ }
900
+
856
901
  bool JReactNativeFeatureFlagsCxxInterop::hideOffscreenVirtualViewsOnIOS(
857
902
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
858
903
  return ReactNativeFeatureFlags::hideOffscreenVirtualViewsOnIOS();
@@ -883,6 +928,16 @@ bool JReactNativeFeatureFlagsCxxInterop::preventShadowTreeCommitExhaustion(
883
928
  return ReactNativeFeatureFlags::preventShadowTreeCommitExhaustion();
884
929
  }
885
930
 
931
+ bool JReactNativeFeatureFlagsCxxInterop::redBoxV2Android(
932
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
933
+ return ReactNativeFeatureFlags::redBoxV2Android();
934
+ }
935
+
936
+ bool JReactNativeFeatureFlagsCxxInterop::redBoxV2IOS(
937
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
938
+ return ReactNativeFeatureFlags::redBoxV2IOS();
939
+ }
940
+
886
941
  bool JReactNativeFeatureFlagsCxxInterop::shouldPressibilityUseW3CPointerEventsForHover(
887
942
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
888
943
  return ReactNativeFeatureFlags::shouldPressibilityUseW3CPointerEventsForHover();
@@ -1132,6 +1187,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
1132
1187
  makeNativeMethod(
1133
1188
  "enableModuleArgumentNSNullConversionIOS",
1134
1189
  JReactNativeFeatureFlagsCxxInterop::enableModuleArgumentNSNullConversionIOS),
1190
+ makeNativeMethod(
1191
+ "enableMutationObserverByDefault",
1192
+ JReactNativeFeatureFlagsCxxInterop::enableMutationObserverByDefault),
1135
1193
  makeNativeMethod(
1136
1194
  "enableNativeCSSParsing",
1137
1195
  JReactNativeFeatureFlagsCxxInterop::enableNativeCSSParsing),
@@ -1186,9 +1244,15 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
1186
1244
  makeNativeMethod(
1187
1245
  "fuseboxEnabledRelease",
1188
1246
  JReactNativeFeatureFlagsCxxInterop::fuseboxEnabledRelease),
1247
+ makeNativeMethod(
1248
+ "fuseboxFrameRecordingEnabled",
1249
+ JReactNativeFeatureFlagsCxxInterop::fuseboxFrameRecordingEnabled),
1189
1250
  makeNativeMethod(
1190
1251
  "fuseboxNetworkInspectionEnabled",
1191
1252
  JReactNativeFeatureFlagsCxxInterop::fuseboxNetworkInspectionEnabled),
1253
+ makeNativeMethod(
1254
+ "fuseboxScreenshotCaptureEnabled",
1255
+ JReactNativeFeatureFlagsCxxInterop::fuseboxScreenshotCaptureEnabled),
1192
1256
  makeNativeMethod(
1193
1257
  "hideOffscreenVirtualViewsOnIOS",
1194
1258
  JReactNativeFeatureFlagsCxxInterop::hideOffscreenVirtualViewsOnIOS),
@@ -1207,6 +1271,12 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
1207
1271
  makeNativeMethod(
1208
1272
  "preventShadowTreeCommitExhaustion",
1209
1273
  JReactNativeFeatureFlagsCxxInterop::preventShadowTreeCommitExhaustion),
1274
+ makeNativeMethod(
1275
+ "redBoxV2Android",
1276
+ JReactNativeFeatureFlagsCxxInterop::redBoxV2Android),
1277
+ makeNativeMethod(
1278
+ "redBoxV2IOS",
1279
+ JReactNativeFeatureFlagsCxxInterop::redBoxV2IOS),
1210
1280
  makeNativeMethod(
1211
1281
  "shouldPressibilityUseW3CPointerEventsForHover",
1212
1282
  JReactNativeFeatureFlagsCxxInterop::shouldPressibilityUseW3CPointerEventsForHover),
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<6b7e2af51ba9d64ae4e474dfa104a7c3>>
7
+ * @generated SignedSource<<707465eb2a901c79a91681f2bcec1972>>
8
8
  */
9
9
 
10
10
  /**
@@ -153,6 +153,9 @@ class JReactNativeFeatureFlagsCxxInterop
153
153
  static bool enableModuleArgumentNSNullConversionIOS(
154
154
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
155
155
 
156
+ static bool enableMutationObserverByDefault(
157
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
158
+
156
159
  static bool enableNativeCSSParsing(
157
160
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
158
161
 
@@ -207,9 +210,15 @@ class JReactNativeFeatureFlagsCxxInterop
207
210
  static bool fuseboxEnabledRelease(
208
211
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
209
212
 
213
+ static bool fuseboxFrameRecordingEnabled(
214
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
215
+
210
216
  static bool fuseboxNetworkInspectionEnabled(
211
217
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
212
218
 
219
+ static bool fuseboxScreenshotCaptureEnabled(
220
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
221
+
213
222
  static bool hideOffscreenVirtualViewsOnIOS(
214
223
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
215
224
 
@@ -228,6 +237,12 @@ class JReactNativeFeatureFlagsCxxInterop
228
237
  static bool preventShadowTreeCommitExhaustion(
229
238
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
230
239
 
240
+ static bool redBoxV2Android(
241
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
242
+
243
+ static bool redBoxV2IOS(
244
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
245
+
231
246
  static bool shouldPressibilityUseW3CPointerEventsForHover(
232
247
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
233
248