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
@@ -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")
@@ -477,7 +477,7 @@ void ObjCInteropTurboModule::setInvocationArg(
477
477
  // Handle the special case where there is an argument and it must be nil
478
478
  // Without this check, the JS side will receive an object.
479
479
  // See: discussion at
480
- // https://github.com/facebook/react-native/pull/49250#issuecomment-2668465893
480
+ // https://github.com/react/react-native/pull/49250#issuecomment-2668465893
481
481
  if (arg == [NSNull null]) {
482
482
  return;
483
483
  }
@@ -695,7 +695,7 @@ void ObjCTurboModule::setInvocationArg(
695
695
  SEL methodArgConversionSelector = getMethodArgConversionSelector(methodNameNSString, i);
696
696
 
697
697
  // Message dispatch logic from old infra (link:
698
- // https://github.com/facebook/react-native/commit/6783694158057662fd7b11fc123c339b2b21bfe6#diff-263fc157dfce55895cdc16495b55d190R350)
698
+ // https://github.com/react/react-native/commit/6783694158057662fd7b11fc123c339b2b21bfe6#diff-263fc157dfce55895cdc16495b55d190R350)
699
699
  RCTManagedPointer *(*convert)(id, SEL, id) = (__typeof__(convert))objc_msgSend;
700
700
  RCTManagedPointer *box = convert([RCTCxxConvert class], methodArgConversionSelector, objCArg);
701
701
 
@@ -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")
@@ -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")
@@ -11,6 +11,6 @@
11
11
  namespace facebook::react::animated {
12
12
  // Indicates that the animated node identifier is not defined.
13
13
  // It is safe to use 0 because JavaScript starts assigning identifiers from 1.
14
- // https://github.com/facebook/react-native/blob/main/packages/react-native/src/private/animated/NativeAnimatedHelper.js#L35
14
+ // https://github.com/react/react-native/blob/main/packages/react-native/src/private/animated/NativeAnimatedHelper.js#L35
15
15
  constexpr static Tag undefinedAnimatedNodeIdentifier = 0;
16
16
  } // namespace facebook::react::animated
@@ -455,6 +455,12 @@ BaseViewProps::BaseViewProps(
455
455
  "scrollSnapAlign",
456
456
  sourceProps.scrollSnapAlign,
457
457
  {}))
458
+ ,scrollSnapOffset(ReactNativeFeatureFlags::enableCppPropsIteratorSetter() ? sourceProps.scrollSnapOffset : convertRawProp(
459
+ context,
460
+ rawProps,
461
+ "scrollSnapOffset",
462
+ sourceProps.scrollSnapOffset,
463
+ {}))
458
464
  #endif
459
465
  {}
460
466
 
@@ -528,6 +534,7 @@ void BaseViewProps::setProp(
528
534
  RAW_SET_PROP_SWITCH_CASE_BASIC(trapFocusLeft);
529
535
  RAW_SET_PROP_SWITCH_CASE_BASIC(trapFocusRight);
530
536
  RAW_SET_PROP_SWITCH_CASE_BASIC(scrollSnapAlign);
537
+ RAW_SET_PROP_SWITCH_CASE_BASIC(scrollSnapOffset);
531
538
  #endif
532
539
  // events field
533
540
  VIEW_EVENT_CASE(PointerEnter);
@@ -126,6 +126,7 @@ class BaseViewProps : public YogaStylableProps, public AccessibilityProps {
126
126
 
127
127
  #if TARGET_OS_TV
128
128
  std::optional<std::string> scrollSnapAlign;
129
+ std::optional<int> scrollSnapOffset;
129
130
  #endif
130
131
 
131
132
  #pragma mark - Convenience Methods
@@ -108,6 +108,15 @@ HostPlatformViewProps::HostPlatformViewProps(
108
108
  "scrollSnapAlign",
109
109
  sourceProps.scrollSnapAlign,
110
110
  {})),
111
+ scrollSnapOffset(
112
+ ReactNativeFeatureFlags::enableCppPropsIteratorSetter()
113
+ ? sourceProps.scrollSnapOffset
114
+ : convertRawProp(
115
+ context,
116
+ rawProps,
117
+ "scrollSnapOffset",
118
+ sourceProps.scrollSnapOffset,
119
+ {})),
111
120
  needsOffscreenAlphaCompositing(
112
121
  ReactNativeFeatureFlags::enableCppPropsIteratorSetter()
113
122
  ? sourceProps.needsOffscreenAlphaCompositing
@@ -211,6 +220,7 @@ void HostPlatformViewProps::setProp(
211
220
  RAW_SET_PROP_SWITCH_CASE_BASIC(focusable);
212
221
  RAW_SET_PROP_SWITCH_CASE_BASIC(hasTVPreferredFocus);
213
222
  RAW_SET_PROP_SWITCH_CASE_BASIC(scrollSnapAlign);
223
+ RAW_SET_PROP_SWITCH_CASE_BASIC(scrollSnapOffset);
214
224
  RAW_SET_PROP_SWITCH_CASE_BASIC(needsOffscreenAlphaCompositing);
215
225
  RAW_SET_PROP_SWITCH_CASE_BASIC(renderToHardwareTextureAndroid);
216
226
  RAW_SET_PROP_SWITCH_CASE_BASIC(screenReaderFocusable);
@@ -1123,6 +1133,14 @@ folly::dynamic HostPlatformViewProps::getDiffProps(
1123
1133
  }
1124
1134
  }
1125
1135
 
1136
+ if (scrollSnapOffset != oldProps->scrollSnapOffset) {
1137
+ if (scrollSnapOffset.has_value()) {
1138
+ result["scrollSnapOffset"] = scrollSnapOffset.value();
1139
+ } else {
1140
+ result["scrollSnapOffset"] = folly::dynamic(nullptr);
1141
+ }
1142
+ }
1143
+
1126
1144
  return result;
1127
1145
  }
1128
1146
 
@@ -48,6 +48,7 @@ class HostPlatformViewProps : public BaseViewProps {
48
48
  bool trapFocusLeft{false};
49
49
  bool trapFocusRight{false};
50
50
  std::optional<std::string> scrollSnapAlign{};
51
+ std::optional<int> scrollSnapOffset{};
51
52
 
52
53
  bool needsOffscreenAlphaCompositing{false};
53
54
  bool renderToHardwareTextureAndroid{false};
@@ -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")
@@ -52,7 +52,7 @@ CullingContext CullingContext::adjustCullingContextIfNeeded(
52
52
  // In RTL, content offset is flipped horizontally.
53
53
  // We need to flip the culling context frame to match.
54
54
  // See:
55
- // https://github.com/facebook/react-native/blob/c2f39cfdd87c32b9a59efe8a788b8a03f02b0ea0/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm#L579
55
+ // https://github.com/react/react-native/blob/c2f39cfdd87c32b9a59efe8a788b8a03f02b0ea0/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm#L579
56
56
  auto stateData = scrollViewShadowNode->getStateData();
57
57
  cullingContext.frame.origin.x =
58
58
  stateData.contentBoundingRect.size.width -
@@ -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")
@@ -6,7 +6,7 @@
6
6
  package = JSON.parse(File.read(File.expand_path('../../package.json', __dir__)))
7
7
  version = package['version']
8
8
 
9
- source = { :git => ENV['INSTALL_YOGA_FROM_LOCATION'] || 'https://github.com/facebook/react-native.git' }
9
+ source = { :git => ENV['INSTALL_YOGA_FROM_LOCATION'] || 'https://github.com/react/react-native.git' }
10
10
  if version == '1000.0.0'
11
11
  # This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
12
12
  source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
@@ -61,6 +61,6 @@ Pod::Spec.new do |spec|
61
61
  # Fabric must be able to access private headers (which should not be included in the umbrella header)
62
62
  all_header_files = 'yoga/**/*.h'
63
63
  all_header_files = File.join('ReactCommon/yoga', all_header_files) if ENV['INSTALL_YOGA_WITHOUT_PATH_OPTION']
64
- spec.private_header_files = Dir.glob(all_header_files) - Dir.glob(public_header_files)
64
+ spec.private_header_files = Dir.glob(all_header_files).sort - Dir.glob(public_header_files).sort
65
65
  spec.preserve_paths = [all_header_files]
66
66
  end
@@ -553,6 +553,8 @@ bool layoutAbsoluteDescendants(
553
553
  containingNodeAvailableInnerHeight) ||
554
554
  hasNewLayout;
555
555
 
556
+ cleanupContentsNodesRecursively(
557
+ child, /* didPerformLayout */ hasNewLayout);
556
558
  if (hasNewLayout) {
557
559
  child->setHasNewLayout(hasNewLayout);
558
560
  }
@@ -480,7 +480,9 @@ static void zeroOutLayoutRecursively(yoga::Node* const node) {
480
480
  }
481
481
  }
482
482
 
483
- static void cleanupContentsNodesRecursively(yoga::Node* const node) {
483
+ void cleanupContentsNodesRecursively(
484
+ yoga::Node* const node,
485
+ bool didPerformLayout) {
484
486
  if (node->hasContentsChildren()) [[unlikely]] {
485
487
  node->cloneContentsChildrenIfNeeded();
486
488
  for (auto child : node->getChildren()) {
@@ -488,11 +490,13 @@ static void cleanupContentsNodesRecursively(yoga::Node* const node) {
488
490
  child->getLayout() = {};
489
491
  child->setLayoutDimension(0, Dimension::Width);
490
492
  child->setLayoutDimension(0, Dimension::Height);
491
- child->setHasNewLayout(true);
493
+ if (didPerformLayout) {
494
+ child->setHasNewLayout(true);
495
+ }
492
496
  child->setDirty(false);
493
497
  child->cloneChildrenIfNeeded();
494
498
 
495
- cleanupContentsNodesRecursively(child);
499
+ cleanupContentsNodesRecursively(child, didPerformLayout);
496
500
  }
497
501
  }
498
502
  }
@@ -1317,7 +1321,7 @@ static void calculateLayoutImpl(
1317
1321
 
1318
1322
  // Clean and update all display: contents nodes with a direct path to the
1319
1323
  // current node as they will not be traversed
1320
- cleanupContentsNodesRecursively(node);
1324
+ cleanupContentsNodesRecursively(node, performLayout);
1321
1325
  return;
1322
1326
  }
1323
1327
 
@@ -1335,7 +1339,7 @@ static void calculateLayoutImpl(
1335
1339
 
1336
1340
  // Clean and update all display: contents nodes with a direct path to the
1337
1341
  // current node as they will not be traversed
1338
- cleanupContentsNodesRecursively(node);
1342
+ cleanupContentsNodesRecursively(node, performLayout);
1339
1343
  return;
1340
1344
  }
1341
1345
 
@@ -1353,7 +1357,7 @@ static void calculateLayoutImpl(
1353
1357
  ownerHeight)) {
1354
1358
  // Clean and update all display: contents nodes with a direct path to the
1355
1359
  // current node as they will not be traversed
1356
- cleanupContentsNodesRecursively(node);
1360
+ cleanupContentsNodesRecursively(node, /* didPerformLayout */ false);
1357
1361
  return;
1358
1362
  }
1359
1363
 
@@ -1365,7 +1369,7 @@ static void calculateLayoutImpl(
1365
1369
 
1366
1370
  // Clean and update all display: contents nodes with a direct path to the
1367
1371
  // current node as they will not be traversed
1368
- cleanupContentsNodesRecursively(node);
1372
+ cleanupContentsNodesRecursively(node, performLayout);
1369
1373
 
1370
1374
  // STEP 1: CALCULATE VALUES FOR REMAINDER OF ALGORITHM
1371
1375
  const FlexDirection mainAxis =
@@ -35,4 +35,6 @@ bool calculateLayoutInternal(
35
35
  uint32_t depth,
36
36
  uint32_t generationCount);
37
37
 
38
+ void cleanupContentsNodesRecursively(yoga::Node* node, bool didPerformLayout);
39
+
38
40
  } // namespace facebook::yoga
@@ -392,7 +392,12 @@ void Node::cloneChildrenIfNeeded() {
392
392
  child = resolveRef(config_->cloneNode(child, this, i));
393
393
  child->setOwner(this);
394
394
 
395
- if (child->hasContentsChildren()) [[unlikely]] {
395
+ if (child->style().display() == Display::Contents) [[unlikely]] {
396
+ // The contents node's children are treated as children of the
397
+ // contents node's parent for layout purposes, so they need
398
+ // to be cloned as well.
399
+ child->cloneChildrenIfNeeded();
400
+ } else if (child->hasContentsChildren()) [[unlikely]] {
396
401
  child->cloneContentsChildrenIfNeeded();
397
402
  }
398
403
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-tvos",
3
- "version": "0.83.9-0",
3
+ "version": "0.83.10-0",
4
4
  "description": "A framework for building native apps using React",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -22,7 +22,7 @@
22
22
  "app-framework",
23
23
  "mobile-development"
24
24
  ],
25
- "bugs": "https://github.com/facebook/react-native/issues",
25
+ "bugs": "https://github.com/react/react-native/issues",
26
26
  "engines": {
27
27
  "node": ">= 20.19.4"
28
28
  },
@@ -165,12 +165,12 @@
165
165
  },
166
166
  "dependencies": {
167
167
  "@jest/create-cache-key-function": "^29.7.0",
168
- "@react-native/assets-registry": "0.83.9",
169
- "@react-native/codegen": "0.83.9",
170
- "@react-native/community-cli-plugin": "0.83.9",
171
- "@react-native/gradle-plugin": "0.83.9",
172
- "@react-native/js-polyfills": "0.83.9",
173
- "@react-native/normalize-colors": "0.83.9",
168
+ "@react-native/assets-registry": "0.83.10",
169
+ "@react-native/codegen": "0.83.10",
170
+ "@react-native/community-cli-plugin": "0.83.10",
171
+ "@react-native/gradle-plugin": "0.83.10",
172
+ "@react-native/js-polyfills": "0.83.10",
173
+ "@react-native/normalize-colors": "0.83.10",
174
174
  "abort-controller": "^3.0.0",
175
175
  "anser": "^1.4.9",
176
176
  "ansi-regex": "^5.0.0",
@@ -198,7 +198,7 @@
198
198
  "whatwg-fetch": "^3.0.0",
199
199
  "ws": "^7.5.10",
200
200
  "yargs": "^17.6.2",
201
- "@react-native-tvos/virtualized-lists": "0.83.9-0"
201
+ "@react-native-tvos/virtualized-lists": "0.83.10-0"
202
202
  },
203
203
  "codegenConfig": {
204
204
  "libraries": [
@@ -402,18 +402,36 @@ class ReactNativeCoreUtils
402
402
  download_rncore_tarball(react_native_path, tarball_url, version, configuration, dsyms)
403
403
  end
404
404
 
405
+ def self.shared_cache_dir()
406
+ return File.join(Dir.home, "Library", "Caches", "ReactNative")
407
+ end
408
+
405
409
  def self.download_rncore_tarball(react_native_path, tarball_url, version, configuration, dsyms = false)
406
- destination_path = configuration == nil ?
407
- "#{artifacts_dir()}/reactnative-core-#{version}#{dsyms ? "-dSYM" : ""}.tar.gz" :
408
- "#{artifacts_dir()}/reactnative-core-#{version}#{dsyms ? "-dSYM" : ""}-#{configuration}.tar.gz"
410
+ filename = configuration == nil ?
411
+ "reactnative-core-#{version}#{dsyms ? "-dSYM" : ""}.tar.gz" :
412
+ "reactnative-core-#{version}#{dsyms ? "-dSYM" : ""}-#{configuration}.tar.gz"
413
+ destination_path = "#{artifacts_dir()}/#{filename}"
414
+
415
+ if File.exist?(destination_path)
416
+ rncore_log("Tarball #{filename} already exists in Pods. Skipping download.")
417
+ return destination_path
418
+ end
409
419
 
410
- unless File.exist?(destination_path)
420
+ `mkdir -p "#{artifacts_dir()}"`
421
+
422
+ cached_path = File.join(shared_cache_dir(), filename)
423
+ if File.exist?(cached_path)
424
+ rncore_log("Cache hit: copying #{filename} from shared cache (#{shared_cache_dir()})")
425
+ FileUtils.cp(cached_path, destination_path)
426
+ else
427
+ rncore_log("Cache miss: downloading #{filename} from #{tarball_url}")
411
428
  # Download to a temporary file first so we don't cache incomplete downloads.
412
- rncore_log("Downloading ReactNativeCore-prebuilt #{dsyms ? "dSYMs " : ""}#{configuration ? configuration.to_s : ""} tarball from #{tarball_url} to #{Pathname.new(destination_path).relative_path_from(Pathname.pwd).to_s}")
413
429
  tmp_file = "#{artifacts_dir()}/reactnative-core.download"
414
- `mkdir -p "#{artifacts_dir()}" && curl "#{tarball_url}" -Lo "#{tmp_file}" && mv "#{tmp_file}" "#{destination_path}"`
415
- else
416
- rncore_log("Using downloaded ReactNativeCore-prebuilt #{dsyms ? "dSYMs " : ""}#{configuration ? configuration.to_s : ""} tarball at #{Pathname.new(destination_path).relative_path_from(Pathname.pwd).to_s}")
430
+ `curl "#{tarball_url}" -Lo "#{tmp_file}" && mv "#{tmp_file}" "#{destination_path}"`
431
+ # Save to shared cache for future use
432
+ `mkdir -p "#{shared_cache_dir()}"`
433
+ FileUtils.cp(destination_path, cached_path)
434
+ rncore_log("Saved #{filename} to shared cache (#{shared_cache_dir()})")
417
435
  end
418
436
 
419
437
  return destination_path