react-native-tvos 0.83.9-0 → 0.83.10-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 (159) hide show
  1. package/Libraries/ActionSheetIOS/React-RCTActionSheet.podspec +1 -1
  2. package/Libraries/Animated/components/AnimatedScrollView.js +1 -1
  3. package/Libraries/AppDelegate/React-RCTAppDelegate.podspec +1 -1
  4. package/Libraries/Blob/React-RCTBlob.podspec +1 -1
  5. package/Libraries/Components/Button.js +2 -2
  6. package/Libraries/Components/ScrollView/ScrollView.d.ts +1 -1
  7. package/Libraries/Components/ScrollView/ScrollView.js +1 -1
  8. package/Libraries/Components/TV/TVViewPropTypes.js +9 -0
  9. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +1 -1
  10. package/Libraries/Components/TextInput/TextInput.flow.js +1 -1
  11. package/Libraries/Components/Touchable/Touchable.d.ts +1 -1
  12. package/Libraries/Components/View/View.js +7 -3
  13. package/Libraries/Components/View/ViewAccessibility.d.ts +1 -1
  14. package/Libraries/Components/View/ViewAccessibility.js +1 -1
  15. package/Libraries/Core/ReactNativeVersion.js +1 -1
  16. package/Libraries/Core/Timers/JSTimers.js +1 -1
  17. package/Libraries/Core/setUpNavigator.js +1 -1
  18. package/Libraries/EventEmitter/RCTNativeAppEventEmitter.d.ts +1 -1
  19. package/Libraries/FBLazyVector/FBLazyVector.podspec +1 -1
  20. package/Libraries/Image/ImageSource.d.ts +1 -1
  21. package/Libraries/Image/RCTImageLoader.mm +1 -1
  22. package/Libraries/Image/React-RCTImage.podspec +1 -1
  23. package/Libraries/Interaction/PanResponder.js +1 -1
  24. package/Libraries/LinkingIOS/React-RCTLinking.podspec +1 -1
  25. package/Libraries/NativeAnimation/React-RCTAnimation.podspec +1 -1
  26. package/Libraries/NativeComponent/TVViewConfig.js +1 -0
  27. package/Libraries/Network/React-RCTNetwork.podspec +1 -1
  28. package/Libraries/PushNotificationIOS/React-RCTPushNotification.podspec +1 -1
  29. package/Libraries/Renderer/README.md +2 -2
  30. package/Libraries/Required/RCTRequired.podspec +1 -1
  31. package/Libraries/Settings/React-RCTSettings.podspec +1 -1
  32. package/Libraries/Text/React-RCTText.podspec +1 -1
  33. package/Libraries/TypeSafety/RCTTypeSafety.podspec +1 -1
  34. package/Libraries/Utilities/PolyfillFunctions.js +1 -1
  35. package/Libraries/Vibration/React-RCTVibration.podspec +1 -1
  36. package/README-core.md +6 -6
  37. package/README.md +13 -1
  38. package/React/Base/RCTVersion.m +1 -1
  39. package/React/CoreModules/React-CoreModules.podspec +1 -1
  40. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +49 -17
  41. package/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm +12 -1
  42. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +34 -5
  43. package/React/React-RCTFBReactNativeSpec.podspec +1 -1
  44. package/React/React-RCTFabric.podspec +1 -1
  45. package/React/Runtime/React-RCTRuntime.podspec +1 -1
  46. package/React/Tests/Mounting/RCTViewComponentViewTests.mm +145 -0
  47. package/React/Views/ScrollView/RCTScrollView.m +1 -1
  48. package/React-Core.podspec +1 -1
  49. package/React.podspec +1 -1
  50. package/ReactAndroid/build.gradle.kts +1 -1
  51. package/ReactAndroid/gradle.properties +1 -1
  52. package/ReactAndroid/hermes-engine/build.gradle.kts +6 -0
  53. package/ReactAndroid/publish.gradle +5 -5
  54. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/CxxInspectorPackagerConnection.kt +99 -9
  55. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/InspectorNetworkHelper.kt +1 -1
  56. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java +2 -2
  57. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/JavaTimerManager.kt +1 -1
  58. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/ReactAndroidHWInputDeviceHelper.java +1 -0
  59. package/ReactAndroid/src/main/java/com/facebook/react/modules/intent/IntentModule.kt +1 -1
  60. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.kt +3 -3
  61. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
  62. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.kt +1 -1
  63. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java +1 -1
  64. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +14 -4
  65. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +14 -4
  66. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.kt +46 -6
  67. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.kt +1 -1
  68. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java +1 -1
  69. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.kt +2 -2
  70. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.kt +2 -2
  71. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextSelectionWatcher.kt +1 -1
  72. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt +1 -0
  73. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.kt +5 -0
  74. package/ReactAndroid/src/main/jni/react/devsupport/JCxxInspectorPackagerConnectionWebSocket.cpp +29 -2
  75. package/ReactApple/Libraries/RCTFoundation/RCTDeprecation/RCTDeprecation.podspec +1 -1
  76. package/ReactApple/RCTSwiftUI/RCTSwiftUI.podspec +1 -1
  77. package/ReactApple/RCTSwiftUIWrapper/RCTSwiftUIWrapper.podspec +1 -1
  78. package/ReactCommon/React-Fabric.podspec +1 -1
  79. package/ReactCommon/React-FabricComponents.podspec +1 -1
  80. package/ReactCommon/React-FabricImage.podspec +1 -1
  81. package/ReactCommon/React-Mapbuffer.podspec +1 -1
  82. package/ReactCommon/ReactCommon.podspec +1 -1
  83. package/ReactCommon/callinvoker/React-callinvoker.podspec +1 -1
  84. package/ReactCommon/cxxreact/React-cxxreact.podspec +1 -1
  85. package/ReactCommon/cxxreact/ReactNativeVersion.h +2 -2
  86. package/ReactCommon/hermes/React-hermes.podspec +1 -1
  87. package/ReactCommon/hermes/executor/React-jsitracing.podspec +1 -1
  88. package/ReactCommon/jserrorhandler/React-jserrorhandler.podspec +1 -1
  89. package/ReactCommon/jsi/React-jsi.podspec +1 -1
  90. package/ReactCommon/jsiexecutor/React-jsiexecutor.podspec +1 -1
  91. package/ReactCommon/jsinspector-modern/InspectorInterfaces.cpp +7 -3
  92. package/ReactCommon/jsinspector-modern/React-jsinspector.podspec +1 -1
  93. package/ReactCommon/jsinspector-modern/TracingAgent.cpp +1 -5
  94. package/ReactCommon/jsinspector-modern/cdp/React-jsinspectorcdp.podspec +1 -1
  95. package/ReactCommon/jsinspector-modern/network/React-jsinspectornetwork.podspec +1 -1
  96. package/ReactCommon/jsinspector-modern/tracing/React-jsinspectortracing.podspec +1 -1
  97. package/ReactCommon/jsitooling/React-jsitooling.podspec +1 -1
  98. package/ReactCommon/logger/React-logger.podspec +1 -1
  99. package/ReactCommon/oscompat/React-oscompat.podspec +1 -1
  100. package/ReactCommon/react/debug/React-debug.podspec +1 -1
  101. package/ReactCommon/react/debug/redbox/JscSafeUrl.h +1 -1
  102. package/ReactCommon/react/featureflags/React-featureflags.podspec +1 -1
  103. package/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaTurboModule.cpp +1 -1
  104. package/ReactCommon/react/nativemodule/core/platform/ios/React-NativeModulesApple.podspec +1 -1
  105. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTInteropTurboModule.mm +1 -1
  106. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModule.mm +1 -1
  107. package/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec +1 -1
  108. package/ReactCommon/react/nativemodule/dom/React-domnativemodule.podspec +1 -1
  109. package/ReactCommon/react/nativemodule/featureflags/React-featureflagsnativemodule.podspec +1 -1
  110. package/ReactCommon/react/nativemodule/idlecallbacks/React-idlecallbacksnativemodule.podspec +1 -1
  111. package/ReactCommon/react/nativemodule/intersectionobserver/React-intersectionobservernativemodule.podspec +1 -1
  112. package/ReactCommon/react/nativemodule/microtasks/React-microtasksnativemodule.podspec +1 -1
  113. package/ReactCommon/react/nativemodule/mutationobserver/React-mutationobservernativemodule.podspec +1 -1
  114. package/ReactCommon/react/nativemodule/samples/ReactCommon-Samples.podspec +1 -1
  115. package/ReactCommon/react/nativemodule/webperformance/React-webperformancenativemodule.podspec +1 -1
  116. package/ReactCommon/react/networking/React-networking.podspec +1 -1
  117. package/ReactCommon/react/performance/cdpmetrics/React-performancecdpmetrics.podspec +1 -1
  118. package/ReactCommon/react/performance/timeline/React-performancetimeline.podspec +1 -1
  119. package/ReactCommon/react/renderer/animated/internal/primitives.h +1 -1
  120. package/ReactCommon/react/renderer/components/view/BaseViewProps.cpp +7 -0
  121. package/ReactCommon/react/renderer/components/view/BaseViewProps.h +1 -0
  122. package/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/HostPlatformViewProps.cpp +18 -0
  123. package/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/HostPlatformViewProps.h +1 -0
  124. package/ReactCommon/react/renderer/consistency/React-rendererconsistency.podspec +1 -1
  125. package/ReactCommon/react/renderer/css/React-renderercss.podspec +1 -1
  126. package/ReactCommon/react/renderer/debug/React-rendererdebug.podspec +1 -1
  127. package/ReactCommon/react/renderer/graphics/React-graphics.podspec +1 -1
  128. package/ReactCommon/react/renderer/imagemanager/platform/ios/React-ImageManager.podspec +1 -1
  129. package/ReactCommon/react/renderer/mounting/internal/CullingContext.cpp +1 -1
  130. package/ReactCommon/react/renderer/runtimescheduler/React-runtimescheduler.podspec +1 -1
  131. package/ReactCommon/react/runtime/React-RuntimeCore.podspec +1 -1
  132. package/ReactCommon/react/runtime/React-RuntimeHermes.podspec +1 -1
  133. package/ReactCommon/react/runtime/platform/ios/React-RuntimeApple.podspec +1 -1
  134. package/ReactCommon/react/timing/React-timing.podspec +1 -1
  135. package/ReactCommon/react/utils/React-utils.podspec +1 -1
  136. package/ReactCommon/reactperflogger/React-perflogger.podspec +1 -1
  137. package/ReactCommon/runtimeexecutor/React-runtimeexecutor.podspec +1 -1
  138. package/ReactCommon/yoga/Yoga.podspec +2 -2
  139. package/ReactCommon/yoga/yoga/algorithm/AbsoluteLayout.cpp +2 -0
  140. package/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp +11 -7
  141. package/ReactCommon/yoga/yoga/algorithm/CalculateLayout.h +2 -0
  142. package/ReactCommon/yoga/yoga/node/Node.cpp +6 -1
  143. package/package.json +9 -9
  144. package/scripts/cocoapods/rncore.rb +26 -8
  145. package/scripts/cocoapods/rndependencies.rb +26 -5
  146. package/scripts/cocoapods/spm.rb +1 -1
  147. package/scripts/cocoapods/utils.rb +2 -2
  148. package/scripts/codegen/templates/ReactAppDependencyProvider.podspec.template +1 -1
  149. package/scripts/codegen/templates/ReactCodegen.podspec.template +1 -1
  150. package/scripts/ios-configure-glog.sh +1 -1
  151. package/sdks/hermes-engine/hermes-engine.podspec +6 -1
  152. package/sdks/hermes-engine/hermes-utils.rb +27 -5
  153. package/src/private/types/HostInstance.js +1 -1
  154. package/src/types/globals.d.ts +2 -2
  155. package/third-party-podspecs/RCT-Folly.podspec +1 -1
  156. package/third-party-podspecs/ReactNativeDependencies.podspec +1 -1
  157. package/third-party-podspecs/glog.podspec +1 -1
  158. package/types/public/ReactNativeTVTypes.d.ts +9 -0
  159. package/types/public/ReactNativeTypes.d.ts +2 -2
@@ -567,29 +567,39 @@ public class ReactHorizontalScrollView extends HorizontalScrollView
567
567
  }
568
568
 
569
569
  /**
570
- * Attempts to scroll-snap to the focused child based on snapToAlignment/scrollSnapAlign.
571
- * Returns true if snap scrolling was performed, false otherwise.
570
+ * Attempts to scroll-snap to the focused child based on snapToAlignment/scrollSnapAlign
571
+ * or scrollSnapOffset. Returns true if snap scrolling was performed, false otherwise.
572
572
  */
573
573
  private boolean tryScrollSnapToChild(View focused) {
574
574
  if (mSnapToAlignment != SNAP_ALIGNMENT_ITEM) {
575
575
  return false;
576
576
  }
577
577
 
578
- kotlin.Pair<View, String> result = ReactScrollViewHelper.findScrollSnapAlign(focused, this);
578
+ kotlin.Triple<View, String, Integer> result =
579
+ ReactScrollViewHelper.findScrollSnap(focused, this);
579
580
  if (result == null) {
580
581
  return false;
581
582
  }
582
583
 
583
584
  View snapTarget = result.getFirst();
584
585
  String alignment = result.getSecond();
586
+ Integer snapOffset = result.getThird();
585
587
 
586
588
  Rect rect = new Rect();
587
589
  snapTarget.getDrawingRect(rect);
588
590
  offsetDescendantRectToMyCoords(snapTarget, rect);
589
591
 
590
- int viewportWidth = getWidth() - getPaddingLeft() - getPaddingRight();
591
592
  int maxScrollX = Math.max(0, computeHorizontalScrollRange() - getWidth());
592
593
 
594
+ if (snapOffset != null) {
595
+ int targetOffset = ReactScrollViewHelper.computeScrollSnapTargetForOffset(
596
+ rect.left, snapOffset, mSnapInterval, maxScrollX);
597
+ reactSmoothScrollTo(targetOffset, getScrollY());
598
+ return true;
599
+ }
600
+
601
+ int viewportWidth = getWidth() - getPaddingLeft() - getPaddingRight();
602
+
593
603
  Integer targetOffset = ReactScrollViewHelper.computeScrollSnapOffset(
594
604
  rect.left, rect.right, viewportWidth, alignment, mSnapInterval, mSnapToItemPadding, maxScrollX);
595
605
  if (targetOffset == null) {
@@ -514,29 +514,39 @@ public class ReactScrollView extends ScrollView
514
514
  }
515
515
 
516
516
  /**
517
- * Attempts to scroll-snap to the focused child based on snapToAlignment/scrollSnapAlign.
518
- * Returns true if snap scrolling was performed, false otherwise.
517
+ * Attempts to scroll-snap to the focused child based on snapToAlignment/scrollSnapAlign
518
+ * or scrollSnapOffset. Returns true if snap scrolling was performed, false otherwise.
519
519
  */
520
520
  private boolean tryScrollSnapToChild(View focused) {
521
521
  if (mSnapToAlignment != SNAP_ALIGNMENT_ITEM) {
522
522
  return false;
523
523
  }
524
524
 
525
- kotlin.Pair<View, String> result = ReactScrollViewHelper.findScrollSnapAlign(focused, this);
525
+ kotlin.Triple<View, String, Integer> result =
526
+ ReactScrollViewHelper.findScrollSnap(focused, this);
526
527
  if (result == null) {
527
528
  return false;
528
529
  }
529
530
 
530
531
  View snapTarget = result.getFirst();
531
532
  String alignment = result.getSecond();
533
+ Integer snapOffset = result.getThird();
532
534
 
533
535
  Rect rect = new Rect();
534
536
  snapTarget.getDrawingRect(rect);
535
537
  offsetDescendantRectToMyCoords(snapTarget, rect);
536
538
 
537
- int viewportHeight = getHeight() - getPaddingTop() - getPaddingBottom();
538
539
  int maxScrollY = getMaxScrollY();
539
540
 
541
+ if (snapOffset != null) {
542
+ int targetOffset = ReactScrollViewHelper.computeScrollSnapTargetForOffset(
543
+ rect.top, snapOffset, mSnapInterval, maxScrollY);
544
+ reactSmoothScrollTo(getScrollX(), targetOffset);
545
+ return true;
546
+ }
547
+
548
+ int viewportHeight = getHeight() - getPaddingTop() - getPaddingBottom();
549
+
540
550
  Integer targetOffset = ReactScrollViewHelper.computeScrollSnapOffset(
541
551
  rect.top, rect.bottom, viewportHeight, alignment, mSnapInterval, mSnapToItemPadding, maxScrollY);
542
552
  if (targetOffset == null) {
@@ -576,27 +576,67 @@ public object ReactScrollViewHelper {
576
576
 
577
577
  /**
578
578
  * Walks up the view hierarchy from the focused view to find a ReactViewGroup with
579
- * scrollSnapAlign set. Returns a Pair of (snapTarget, alignment) or null if not found.
579
+ * either scrollSnapAlign or scrollSnapOffset set. Returns a Triple of (snapTarget,
580
+ * alignment, offsetPx) or null if neither marker was found. Exactly one of
581
+ * alignment/offsetPx is non-null on return.
582
+ *
583
+ * Walk is inner→outer, latest marker wins. On a single view declaring both,
584
+ * scrollSnapOffset wins as the more specific config.
580
585
  *
581
586
  * Shared by [ReactScrollView] and [ReactHorizontalScrollView].
582
587
  */
583
588
  @JvmStatic
584
- public fun findScrollSnapAlign(focused: View, scrollView: ViewGroup): Pair<View, String>? {
589
+ public fun findScrollSnap(focused: View, scrollView: ViewGroup): Triple<View, String?, Int?>? {
585
590
  var view: View? = focused
586
591
  var snapTarget: View? = null
587
592
  var alignment: String? = null
593
+ var offset: Int? = null
588
594
  while (view != null && view !== scrollView) {
589
595
  if (view is ReactViewGroup) {
590
- val snap = view.scrollSnapAlign
591
- if (snap != null) {
592
- alignment = snap
596
+ val o = view.scrollSnapOffset
597
+ val a = view.scrollSnapAlign
598
+ if (o != null) {
599
+ offset = o
600
+ alignment = null
601
+ snapTarget = view
602
+ } else if (a != null) {
603
+ alignment = a
604
+ offset = null
593
605
  snapTarget = view
594
606
  }
595
607
  }
596
608
  val parent = view.parent
597
609
  view = if (parent is View) parent else null
598
610
  }
599
- return if (alignment != null && snapTarget != null) Pair(snapTarget, alignment) else null
611
+ return if (snapTarget != null && (alignment != null || offset != null))
612
+ Triple(snapTarget, alignment, offset) else null
613
+ }
614
+
615
+ /**
616
+ * Computes the target scroll offset for the per-item scrollSnapOffset path:
617
+ * land the snap target's leading edge at `snapOffset` pixels from the viewport origin.
618
+ *
619
+ * Returns the clamped target offset.
620
+ *
621
+ * Shared by [ReactScrollView] and [ReactHorizontalScrollView].
622
+ *
623
+ * @param focusedStart the start coordinate of the snap target in scroll view coordinates
624
+ * @param snapOffset the per-item pixel offset from the viewport origin
625
+ * @param snapInterval the snap interval (0 if not set)
626
+ * @param maxScrollOffset the maximum scroll offset for clamping
627
+ */
628
+ @JvmStatic
629
+ public fun computeScrollSnapTargetForOffset(
630
+ focusedStart: Int,
631
+ snapOffset: Int,
632
+ snapInterval: Int,
633
+ maxScrollOffset: Int,
634
+ ): Int {
635
+ var targetOffset = focusedStart - snapOffset
636
+ if (snapInterval > 0) {
637
+ targetOffset = (Math.floor(targetOffset.toDouble() / snapInterval) * snapInterval).toInt()
638
+ }
639
+ return Math.max(0, Math.min(targetOffset, maxScrollOffset))
600
640
  }
601
641
 
602
642
  /**
@@ -437,7 +437,7 @@ constructor(private val fpsListener: FpsListener? = null) :
437
437
  // be on the wrong side. Thus we are moving it to the other side, when the list
438
438
  // is inverted.
439
439
  // See also:
440
- // - https://github.com/facebook/react-native/issues/35350
440
+ // - https://github.com/react/react-native/issues/35350
441
441
  // - https://issuetracker.google.com/issues/287304310
442
442
  if (applyFix) {
443
443
  view.verticalScrollbarPosition = View.SCROLLBAR_POSITION_LEFT
@@ -405,7 +405,7 @@ public class ReactTextView extends AppCompatTextView implements ReactCompoundVie
405
405
  mContainsImages = update.containsImages();
406
406
  // Android's TextView crashes when it tries to relayout if LayoutParams are
407
407
  // null; explicitly set the LayoutParams to prevent this crash. See:
408
- // https://github.com/facebook/react-native/pull/7011
408
+ // https://github.com/react/react-native/pull/7011
409
409
  if (getLayoutParams() == null) {
410
410
  setLayoutParams(EMPTY_LAYOUT_PARAMS);
411
411
  }
@@ -781,7 +781,7 @@ public open class ReactEditText public constructor(context: Context) : AppCompat
781
781
  /**
782
782
  * Remove spans from the SpannableStringBuilder which can be represented by TextAppearance
783
783
  * attributes on the underlying EditText. This works around instability on Samsung devices with
784
- * the presence of spans https://github.com/facebook/react-native/issues/35936 (S318090)
784
+ * the presence of spans https://github.com/react/react-native/issues/35936 (S318090)
785
785
  */
786
786
  private fun stripStyleEquivalentSpans(sb: SpannableStringBuilder) {
787
787
  stripSpansOfKind(sb, ReactAbsoluteSizeSpan::class.java) { span: ReactAbsoluteSizeSpan ->
@@ -1047,7 +1047,7 @@ public open class ReactEditText public constructor(context: Context) : AppCompat
1047
1047
  val selectionEnd = selectionEnd
1048
1048
 
1049
1049
  // Used to ensure that text is selectable inside of removeClippedSubviews
1050
- // See https://github.com/facebook/react-native/issues/6805 for original
1050
+ // See https://github.com/react/react-native/issues/6805 for original
1051
1051
  // fix that was ported to here.
1052
1052
  super.setTextIsSelectable(true)
1053
1053
 
@@ -414,7 +414,7 @@ public open class ReactTextInputManager public constructor() :
414
414
  return
415
415
  }
416
416
 
417
- // Based on https://github.com/facebook/react-native/pull/31007
417
+ // Based on https://github.com/react/react-native/pull/31007
418
418
  if (Build.VERSION.SDK_INT == Build.VERSION_CODES.P) {
419
419
  return
420
420
  }
@@ -770,7 +770,7 @@ public open class ReactTextInputManager public constructor() :
770
770
  // crash happens when focusing on a email EditText, during which a prompt will be triggered
771
771
  // but
772
772
  // the system fail to locate it properly. Here is an example post discussing about this
773
- // issue: https://github.com/facebook/react-native/issues/27204
773
+ // issue: https://github.com/react/react-native/issues/27204
774
774
  if (shouldHideCursorForEmailTextInput()) {
775
775
  view.isCursorVisible = false
776
776
  }
@@ -30,7 +30,7 @@ internal class ReactTextSelectionWatcher(private val editText: ReactEditText) :
30
30
  // forward it on if we have new values
31
31
 
32
32
  // Apparently Android might call this with an end value that is less than the start value
33
- // Lets normalize them. See https://github.com/facebook/react-native/issues/18579
33
+ // Lets normalize them. See https://github.com/react/react-native/issues/18579
34
34
  val realStart = min(start.toDouble(), end.toDouble()).toInt()
35
35
  val realEnd = max(start.toDouble(), end.toDouble()).toInt()
36
36
 
@@ -174,6 +174,7 @@ public open class ReactViewGroup public constructor(context: Context?) :
174
174
  private var onInterceptTouchEventListener: OnInterceptTouchEventListener? = null
175
175
  private var needsOffscreenAlphaCompositing = false
176
176
  public var scrollSnapAlign: String? = null
177
+ public var scrollSnapOffset: Int? = null
177
178
  private var backfaceOpacity = 0f
178
179
  private var backfaceVisible = false
179
180
  private var childrenRemovedWhileTransitioning: MutableSet<Int>? = null
@@ -195,6 +195,11 @@ public open class ReactViewManager : ReactClippingViewManager<ReactViewGroup>()
195
195
  view.scrollSnapAlign = value
196
196
  }
197
197
 
198
+ @ReactProp(name = "scrollSnapOffset", defaultFloat = Float.NaN)
199
+ public open fun setScrollSnapOffset(view: ReactViewGroup, value: Float) {
200
+ view.scrollSnapOffset = if (value.isNaN()) null else value.dpToPx().toInt()
201
+ }
202
+
198
203
  @ReactProp(name = ViewProps.BACKGROUND_IMAGE, customType = "BackgroundImage")
199
204
  public open fun setBackgroundImage(view: ReactViewGroup, backgroundImage: ReadableArray?) {
200
205
  if (ViewUtil.getUIManagerType(view) == UIManagerType.FABRIC) {
@@ -5,6 +5,8 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
+ #include <fbjni/ByteBuffer.h>
9
+
8
10
  #include "JCxxInspectorPackagerConnectionWebSocket.h"
9
11
 
10
12
  using namespace facebook::jni;
@@ -12,10 +14,35 @@ using namespace facebook::react::jsinspector_modern;
12
14
 
13
15
  namespace facebook::react::jsinspector_modern {
14
16
 
17
+ namespace {
18
+
19
+ local_ref<JByteBuffer::javaobject> getReadOnlyByteBufferFromStringView(
20
+ std::string_view sv) {
21
+ auto buffer = JByteBuffer::wrapBytes(
22
+ const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(sv.data())),
23
+ sv.size());
24
+
25
+ /**
26
+ * Return a read-only buffer that shares the underlying contents.
27
+ * This guards from accidential mutations on the Java side, since we did
28
+ * casting above.
29
+ *
30
+ * https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html#asReadOnlyBuffer--
31
+ */
32
+ static auto method =
33
+ buffer->javaClassStatic()->getMethod<JByteBuffer::javaobject()>(
34
+ "asReadOnlyBuffer");
35
+ return method(buffer);
36
+ }
37
+
38
+ } // namespace
39
+
15
40
  void JCxxInspectorPackagerConnectionWebSocket::send(std::string_view message) {
16
41
  static auto method =
17
- javaClassStatic()->getMethod<void(const std::string&)>("send");
18
- method(self(), std::string(message));
42
+ javaClassStatic()->getMethod<void(local_ref<JByteBuffer::javaobject>)>(
43
+ "send");
44
+ auto byteBuffer = getReadOnlyByteBufferFromStringView(message);
45
+ method(self(), byteBuffer);
19
46
  }
20
47
 
21
48
  void JCxxInspectorPackagerConnectionWebSocket::close() {
@@ -14,7 +14,7 @@ Pod::Spec.new do |s|
14
14
  s.author = "Meta Platforms, Inc. and its affiliates"
15
15
  s.license = package["license"]
16
16
  s.homepage = "https://reactnative.dev/"
17
- s.source = { :git => 'https://github.com/facebook/react-native.git', :tag => 'v#{version}' }
17
+ s.source = { :git => 'https://github.com/react/react-native.git', :tag => 'v#{version}' }
18
18
  s.summary = "Macros for marking APIs as deprecated"
19
19
  s.source_files = podspec_sources(["Exported/*.h", "RCTDeprecation.m"], "Exported/*.h")
20
20
  s.pod_target_xcconfig = {
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we're presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we're presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -9,7 +9,7 @@ require "json"
9
9
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "package.json")))
10
10
  version = package['version']
11
11
 
12
- source = { :git => 'https://github.com/facebook/react-native.git' }
12
+ source = { :git => 'https://github.com/react/react-native.git' }
13
13
  if version == '1000.0.0'
14
14
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
15
15
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -14,14 +14,14 @@
14
14
 
15
15
  #define REACT_NATIVE_VERSION_MAJOR 0
16
16
  #define REACT_NATIVE_VERSION_MINOR 83
17
- #define REACT_NATIVE_VERSION_PATCH 9
17
+ #define REACT_NATIVE_VERSION_PATCH 10
18
18
 
19
19
  namespace facebook::react {
20
20
 
21
21
  constexpr struct {
22
22
  int32_t Major = 0;
23
23
  int32_t Minor = 83;
24
- int32_t Patch = 9;
24
+ int32_t Patch = 10;
25
25
  std::string_view Prerelease = "0";
26
26
  } ReactNativeVersion;
27
27
 
@@ -9,7 +9,7 @@ require "json"
9
9
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "package.json")))
10
10
  version = package['version']
11
11
 
12
- source = { :git => 'https://github.com/facebook/react-native.git' }
12
+ source = { :git => 'https://github.com/react/react-native.git' }
13
13
  if version == '1000.0.0'
14
14
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
15
15
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "../../..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -143,9 +143,13 @@ int InspectorImpl::addPage(
143
143
  pageId,
144
144
  Page{pageId, description, vm, std::move(connectFunc), capabilities});
145
145
 
146
- for (const auto& listenerWeak : listeners_) {
147
- if (auto listener = listenerWeak.lock()) {
148
- listener->unstable_onHostTargetAdded();
146
+ // Strong assumption: If prefersFuseboxFrontend is set, the page added is a
147
+ // HostTarget and not a legacy Hermes runtime target.
148
+ if (capabilities.prefersFuseboxFrontend) {
149
+ for (const auto& listenerWeak : listeners_) {
150
+ if (auto listener = listenerWeak.lock()) {
151
+ listener->unstable_onHostTargetAdded();
152
+ }
149
153
  }
150
154
  }
151
155
 
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -26,12 +26,8 @@ const uint16_t TRACE_EVENT_CHUNK_SIZE = 1000;
26
26
  /**
27
27
  * The maximum number of ProfileChunk trace events
28
28
  * that will be sent in a single CDP Tracing.dataCollected message.
29
- * TODO(T219394401): Increase the size once we manage the queue on OkHTTP
30
- side
31
- * properly and avoid WebSocket disconnections when sending a message larger
32
- * than 16MB.
33
29
  */
34
- const uint16_t PROFILE_TRACE_EVENT_CHUNK_SIZE = 1;
30
+ const uint16_t PROFILE_TRACE_EVENT_CHUNK_SIZE = 10;
35
31
 
36
32
  } // namespace
37
33
 
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -9,7 +9,7 @@ require "json"
9
9
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "package.json")))
10
10
  version = package['version']
11
11
 
12
- source = { :git => 'https://github.com/facebook/react-native.git' }
12
+ source = { :git => 'https://github.com/react/react-native.git' }
13
13
  if version == '1000.0.0'
14
14
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
15
15
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -17,7 +17,7 @@ namespace facebook::react::unstable_redbox {
17
17
  * by query string stripping of URLs in JavaScriptCore stack traces
18
18
  * introduced in iOS 16.4. This is a direct port of https://www.npmjs.com/package/jsc-safe-url.
19
19
  *
20
- * See https://github.com/facebook/react-native/issues/36794 for context.
20
+ * See https://github.com/react/react-native/issues/36794 for context.
21
21
  */
22
22
 
23
23
  bool isJscSafeUrl(std::string_view url);
@@ -8,7 +8,7 @@ require "json"
8
8
  package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "package.json")))
9
9
  version = package['version']
10
10
 
11
- source = { :git => 'https://github.com/facebook/react-native.git' }
11
+ source = { :git => 'https://github.com/react/react-native.git' }
12
12
  if version == '1000.0.0'
13
13
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
14
14
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -993,7 +993,7 @@ void JavaTurboModule::configureEventEmitterCallback() {
993
993
  args[0].l = callback.release();
994
994
 
995
995
  // CallVoidMethod is replaced with CallVoidMethodA as it's unsafe on 32bit and
996
- // causes crashes https://github.com/facebook/react-native/issues/51628
996
+ // causes crashes https://github.com/react/react-native/issues/51628
997
997
  env->CallVoidMethodA(instance_.get(), cachedMethodId, args);
998
998
  FACEBOOK_JNI_THROW_PENDING_EXCEPTION();
999
999
  }