react-native 0.84.0-nightly-20251113-6ddba300b → 0.84.0-nightly-20251115-e08abbcb9

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 (52) hide show
  1. package/Libraries/Core/ReactNativeVersion.js +1 -1
  2. package/React/Base/RCTBundleManager.h +2 -2
  3. package/React/Base/RCTBundleManager.m +14 -1
  4. package/React/Base/RCTVersion.m +1 -1
  5. package/React/CoreModules/RCTDevSettings.h +36 -1
  6. package/React/CoreModules/RCTDevSettings.mm +45 -9
  7. package/React/DevSupport/RCTPackagerConnection.h +4 -2
  8. package/React/DevSupport/RCTPackagerConnection.mm +30 -33
  9. package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +16 -0
  10. package/ReactAndroid/api/ReactAndroid.api +1 -0
  11. package/ReactAndroid/build.gradle.kts +2 -0
  12. package/ReactAndroid/gradle.properties +1 -1
  13. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +13 -1
  14. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +21 -1
  15. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +5 -1
  16. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +6 -2
  17. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +23 -1
  18. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Canary_Android.kt +3 -1
  19. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +5 -1
  20. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkEventUtil.kt +23 -0
  21. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
  22. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BackgroundStyleApplicator.kt +84 -2
  23. package/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.kt +12 -9
  24. package/ReactAndroid/src/main/jni/CMakeLists.txt +5 -0
  25. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +29 -1
  26. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +7 -1
  27. package/ReactAndroid/src/main/res/views/uimanager/values-ne/strings.xml +1 -0
  28. package/ReactCommon/React-Fabric.podspec +8 -2
  29. package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
  30. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +9 -1
  31. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +11 -1
  32. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +110 -74
  33. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +6 -2
  34. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +10 -2
  35. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +19 -1
  36. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSCanary.h +5 -1
  37. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +3 -1
  38. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm +2 -2
  39. package/ReactCommon/react/nativemodule/defaults/CMakeLists.txt +1 -0
  40. package/ReactCommon/react/nativemodule/defaults/DefaultTurboModules.cpp +7 -0
  41. package/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec +5 -1
  42. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +11 -1
  43. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +5 -1
  44. package/ReactCommon/react/nativemodule/intersectionobserver/NativeIntersectionObserver.h +4 -0
  45. package/ReactCommon/react/nativemodule/intersectionobserver/React-intersectionobservernativemodule.podspec +66 -0
  46. package/ReactCommon/react/renderer/core/ShadowNode.cpp +4 -10
  47. package/ReactCommon/react/renderer/core/tests/ShadowNodeTest.cpp +32 -0
  48. package/package.json +8 -8
  49. package/scripts/react_native_pods.rb +1 -0
  50. package/src/private/featureflags/ReactNativeFeatureFlags.js +13 -3
  51. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +3 -1
  52. package/src/private/setup/setUpDefaultReactNativeEnvironment.js +6 -0
@@ -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<<5b6fe2be27173e01396fb45f219cf8b8>>
7
+ * @generated SignedSource<<fb735bdc4e4085fd415f21894340dd75>>
8
8
  */
9
9
 
10
10
  /**
@@ -46,6 +46,7 @@ class ReactNativeFeatureFlagsAccessor {
46
46
  bool disableViewPreallocationAndroid();
47
47
  bool enableAccessibilityOrder();
48
48
  bool enableAccumulatedUpdatesInRawPropsAndroid();
49
+ bool enableAndroidAntialiasedBorderRadiusClipping();
49
50
  bool enableAndroidLinearText();
50
51
  bool enableAndroidTextMeasurementOptimizations();
51
52
  bool enableBridgelessArchitecture();
@@ -67,6 +68,7 @@ class ReactNativeFeatureFlagsAccessor {
67
68
  bool enableImmediateUpdateModeForContentOffsetChanges();
68
69
  bool enableImperativeFocus();
69
70
  bool enableInteropViewManagerClassLookUpOptimizationIOS();
71
+ bool enableIntersectionObserverByDefault();
70
72
  bool enableKeyEvents();
71
73
  bool enableLayoutAnimationsOnAndroid();
72
74
  bool enableLayoutAnimationsOnIOS();
@@ -130,7 +132,7 @@ class ReactNativeFeatureFlagsAccessor {
130
132
  std::unique_ptr<ReactNativeFeatureFlagsProvider> currentProvider_;
131
133
  bool wasOverridden_;
132
134
 
133
- std::array<std::atomic<const char*>, 87> accessedFeatureFlags_;
135
+ std::array<std::atomic<const char*>, 89> accessedFeatureFlags_;
134
136
 
135
137
  std::atomic<std::optional<bool>> commonTestFlag_;
136
138
  std::atomic<std::optional<bool>> cdpInteractionMetricsEnabled_;
@@ -146,6 +148,7 @@ class ReactNativeFeatureFlagsAccessor {
146
148
  std::atomic<std::optional<bool>> disableViewPreallocationAndroid_;
147
149
  std::atomic<std::optional<bool>> enableAccessibilityOrder_;
148
150
  std::atomic<std::optional<bool>> enableAccumulatedUpdatesInRawPropsAndroid_;
151
+ std::atomic<std::optional<bool>> enableAndroidAntialiasedBorderRadiusClipping_;
149
152
  std::atomic<std::optional<bool>> enableAndroidLinearText_;
150
153
  std::atomic<std::optional<bool>> enableAndroidTextMeasurementOptimizations_;
151
154
  std::atomic<std::optional<bool>> enableBridgelessArchitecture_;
@@ -167,6 +170,7 @@ class ReactNativeFeatureFlagsAccessor {
167
170
  std::atomic<std::optional<bool>> enableImmediateUpdateModeForContentOffsetChanges_;
168
171
  std::atomic<std::optional<bool>> enableImperativeFocus_;
169
172
  std::atomic<std::optional<bool>> enableInteropViewManagerClassLookUpOptimizationIOS_;
173
+ std::atomic<std::optional<bool>> enableIntersectionObserverByDefault_;
170
174
  std::atomic<std::optional<bool>> enableKeyEvents_;
171
175
  std::atomic<std::optional<bool>> enableLayoutAnimationsOnAndroid_;
172
176
  std::atomic<std::optional<bool>> enableLayoutAnimationsOnIOS_;
@@ -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<<bce5d52ac8a180d1750bb64dd21c1bd3>>
7
+ * @generated SignedSource<<e5affd56757a5b815ac0a16305d1a82d>>
8
8
  */
9
9
 
10
10
  /**
@@ -83,6 +83,10 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider {
83
83
  return false;
84
84
  }
85
85
 
86
+ bool enableAndroidAntialiasedBorderRadiusClipping() override {
87
+ return false;
88
+ }
89
+
86
90
  bool enableAndroidLinearText() override {
87
91
  return false;
88
92
  }
@@ -167,6 +171,10 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider {
167
171
  return false;
168
172
  }
169
173
 
174
+ bool enableIntersectionObserverByDefault() override {
175
+ return false;
176
+ }
177
+
170
178
  bool enableKeyEvents() override {
171
179
  return false;
172
180
  }
@@ -300,7 +308,7 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider {
300
308
  }
301
309
 
302
310
  bool shouldSetEnabledBasedOnAccessibilityState() override {
303
- return false;
311
+ return true;
304
312
  }
305
313
 
306
314
  bool shouldTriggerResponderTransferOnScrollAndroid() override {
@@ -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<<b89ea8b8456bc8d19b35220e492d41fb>>
7
+ * @generated SignedSource<<c345dba878d470a42fcff41aac490083>>
8
8
  */
9
9
 
10
10
  /**
@@ -171,6 +171,15 @@ class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDef
171
171
  return ReactNativeFeatureFlagsDefaults::enableAccumulatedUpdatesInRawPropsAndroid();
172
172
  }
173
173
 
174
+ bool enableAndroidAntialiasedBorderRadiusClipping() override {
175
+ auto value = values_["enableAndroidAntialiasedBorderRadiusClipping"];
176
+ if (!value.isNull()) {
177
+ return value.getBool();
178
+ }
179
+
180
+ return ReactNativeFeatureFlagsDefaults::enableAndroidAntialiasedBorderRadiusClipping();
181
+ }
182
+
174
183
  bool enableAndroidLinearText() override {
175
184
  auto value = values_["enableAndroidLinearText"];
176
185
  if (!value.isNull()) {
@@ -360,6 +369,15 @@ class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDef
360
369
  return ReactNativeFeatureFlagsDefaults::enableInteropViewManagerClassLookUpOptimizationIOS();
361
370
  }
362
371
 
372
+ bool enableIntersectionObserverByDefault() override {
373
+ auto value = values_["enableIntersectionObserverByDefault"];
374
+ if (!value.isNull()) {
375
+ return value.getBool();
376
+ }
377
+
378
+ return ReactNativeFeatureFlagsDefaults::enableIntersectionObserverByDefault();
379
+ }
380
+
363
381
  bool enableKeyEvents() override {
364
382
  auto value = values_["enableKeyEvents"];
365
383
  if (!value.isNull()) {
@@ -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<<db8626cf78a3ed226bbbe6bf20cc03a2>>
7
+ * @generated SignedSource<<1b2061068e0d6c9ca362ceddd97862da>>
8
8
  */
9
9
 
10
10
  /**
@@ -35,6 +35,10 @@ class ReactNativeFeatureFlagsOverridesOSSCanary : public ReactNativeFeatureFlags
35
35
  return true;
36
36
  }
37
37
 
38
+ bool enableIntersectionObserverByDefault() override {
39
+ return true;
40
+ }
41
+
38
42
  bool useNativeViewConfigsInBridgelessMode() override {
39
43
  return true;
40
44
  }
@@ -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<<1d083d5e542fcc38160fd4b177df4931>>
7
+ * @generated SignedSource<<3e8df9a7ff492fee6b5755c1691e150c>>
8
8
  */
9
9
 
10
10
  /**
@@ -39,6 +39,7 @@ class ReactNativeFeatureFlagsProvider {
39
39
  virtual bool disableViewPreallocationAndroid() = 0;
40
40
  virtual bool enableAccessibilityOrder() = 0;
41
41
  virtual bool enableAccumulatedUpdatesInRawPropsAndroid() = 0;
42
+ virtual bool enableAndroidAntialiasedBorderRadiusClipping() = 0;
42
43
  virtual bool enableAndroidLinearText() = 0;
43
44
  virtual bool enableAndroidTextMeasurementOptimizations() = 0;
44
45
  virtual bool enableBridgelessArchitecture() = 0;
@@ -60,6 +61,7 @@ class ReactNativeFeatureFlagsProvider {
60
61
  virtual bool enableImmediateUpdateModeForContentOffsetChanges() = 0;
61
62
  virtual bool enableImperativeFocus() = 0;
62
63
  virtual bool enableInteropViewManagerClassLookUpOptimizationIOS() = 0;
64
+ virtual bool enableIntersectionObserverByDefault() = 0;
63
65
  virtual bool enableKeyEvents() = 0;
64
66
  virtual bool enableLayoutAnimationsOnAndroid() = 0;
65
67
  virtual bool enableLayoutAnimationsOnIOS() = 0;
@@ -694,7 +694,7 @@ typedef struct {
694
694
  } else if (_bridgeProxy) {
695
695
  [(id)module setValue:_bridgeProxy forKey:@"bridge"];
696
696
  }
697
- } @catch (NSException *exception) {
697
+ } @catch (NSException *) {
698
698
  RCTLogError(
699
699
  @"%@ has no setter or ivar for its bridge, which is not "
700
700
  "permitted. You must either @synthesize the bridge property, "
@@ -742,7 +742,7 @@ typedef struct {
742
742
 
743
743
  @try {
744
744
  [(id)module setValue:methodQueue forKey:@"methodQueue"];
745
- } @catch (NSException *exception) {
745
+ } @catch (NSException *) {
746
746
  RCTLogError(
747
747
  @"%@ has no setter or ivar for its methodQueue, which is not "
748
748
  "permitted. You must either @synthesize the methodQueue property, "
@@ -21,6 +21,7 @@ target_link_libraries(react_nativemodule_defaults
21
21
  react_nativemodule_featureflags
22
22
  react_nativemodule_microtasks
23
23
  react_nativemodule_idlecallbacks
24
+ react_nativemodule_intersectionobserver
24
25
  react_nativemodule_webperformance
25
26
  )
26
27
  target_compile_reactnative_options(react_nativemodule_defaults PRIVATE)
@@ -10,6 +10,7 @@
10
10
  #include <react/nativemodule/dom/NativeDOM.h>
11
11
  #include <react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h>
12
12
  #include <react/nativemodule/idlecallbacks/NativeIdleCallbacks.h>
13
+ #include <react/nativemodule/intersectionobserver/NativeIntersectionObserver.h>
13
14
  #include <react/nativemodule/microtasks/NativeMicrotasks.h>
14
15
  #include <react/nativemodule/webperformance/NativePerformance.h>
15
16
 
@@ -44,6 +45,12 @@ namespace facebook::react {
44
45
  }
45
46
  }
46
47
 
48
+ if (ReactNativeFeatureFlags::enableIntersectionObserverByDefault()) {
49
+ if (name == NativeIntersectionObserver::kModuleName) {
50
+ return std::make_shared<NativeIntersectionObserver>(jsInvoker);
51
+ }
52
+ }
53
+
47
54
  #ifdef REACT_NATIVE_DEBUGGER_ENABLED_DEVONLY
48
55
  if (name == DevToolsRuntimeSettingsModule::kModuleName) {
49
56
  return std::make_shared<DevToolsRuntimeSettingsModule>(jsInvoker);
@@ -16,7 +16,9 @@ else
16
16
  source[:tag] = "v#{version}"
17
17
  end
18
18
 
19
- header_search_paths = []
19
+ header_search_paths = [
20
+ "\"$(PODS_ROOT)/Headers/Private/Yoga\"",
21
+ ]
20
22
 
21
23
  if ENV['USE_FRAMEWORKS']
22
24
  header_search_paths << "\"$(PODS_TARGET_SRCROOT)/../../..\"" # this is needed to allow the defaultsnativemodule to access its own files
@@ -40,6 +42,7 @@ Pod::Spec.new do |s|
40
42
 
41
43
  resolve_use_frameworks(s, header_mappings_dir: "../..", module_name: "React_defaultsnativemodule")
42
44
 
45
+ s.dependency "Yoga"
43
46
  s.dependency "React-jsi"
44
47
  s.dependency "React-jsiexecutor"
45
48
  depend_on_js_engine(s)
@@ -49,6 +52,7 @@ Pod::Spec.new do |s|
49
52
  s.dependency "React-domnativemodule"
50
53
  s.dependency "React-microtasksnativemodule"
51
54
  s.dependency "React-idlecallbacksnativemodule"
55
+ s.dependency "React-intersectionobservernativemodule"
52
56
  s.dependency "React-webperformancenativemodule"
53
57
  add_dependency(s, "React-RCTFBReactNativeSpec")
54
58
  add_dependency(s, "React-featureflags")
@@ -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<<131ac718d90f03a63bbfcfdcc9d85ed7>>
7
+ * @generated SignedSource<<0cdf0b920d8c8a083781028ff0490bf3>>
8
8
  */
9
9
 
10
10
  /**
@@ -114,6 +114,11 @@ bool NativeReactNativeFeatureFlags::enableAccumulatedUpdatesInRawPropsAndroid(
114
114
  return ReactNativeFeatureFlags::enableAccumulatedUpdatesInRawPropsAndroid();
115
115
  }
116
116
 
117
+ bool NativeReactNativeFeatureFlags::enableAndroidAntialiasedBorderRadiusClipping(
118
+ jsi::Runtime& /*runtime*/) {
119
+ return ReactNativeFeatureFlags::enableAndroidAntialiasedBorderRadiusClipping();
120
+ }
121
+
117
122
  bool NativeReactNativeFeatureFlags::enableAndroidLinearText(
118
123
  jsi::Runtime& /*runtime*/) {
119
124
  return ReactNativeFeatureFlags::enableAndroidLinearText();
@@ -219,6 +224,11 @@ bool NativeReactNativeFeatureFlags::enableInteropViewManagerClassLookUpOptimizat
219
224
  return ReactNativeFeatureFlags::enableInteropViewManagerClassLookUpOptimizationIOS();
220
225
  }
221
226
 
227
+ bool NativeReactNativeFeatureFlags::enableIntersectionObserverByDefault(
228
+ jsi::Runtime& /*runtime*/) {
229
+ return ReactNativeFeatureFlags::enableIntersectionObserverByDefault();
230
+ }
231
+
222
232
  bool NativeReactNativeFeatureFlags::enableKeyEvents(
223
233
  jsi::Runtime& /*runtime*/) {
224
234
  return ReactNativeFeatureFlags::enableKeyEvents();
@@ -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<<38054c031fa946345d83e7a7220edd33>>
7
+ * @generated SignedSource<<dc1786ebed10af9cf4343d88b6336960>>
8
8
  */
9
9
 
10
10
  /**
@@ -64,6 +64,8 @@ class NativeReactNativeFeatureFlags
64
64
 
65
65
  bool enableAccumulatedUpdatesInRawPropsAndroid(jsi::Runtime& runtime);
66
66
 
67
+ bool enableAndroidAntialiasedBorderRadiusClipping(jsi::Runtime& runtime);
68
+
67
69
  bool enableAndroidLinearText(jsi::Runtime& runtime);
68
70
 
69
71
  bool enableAndroidTextMeasurementOptimizations(jsi::Runtime& runtime);
@@ -106,6 +108,8 @@ class NativeReactNativeFeatureFlags
106
108
 
107
109
  bool enableInteropViewManagerClassLookUpOptimizationIOS(jsi::Runtime& runtime);
108
110
 
111
+ bool enableIntersectionObserverByDefault(jsi::Runtime& runtime);
112
+
109
113
  bool enableKeyEvents(jsi::Runtime& runtime);
110
114
 
111
115
  bool enableLayoutAnimationsOnAndroid(jsi::Runtime& runtime);
@@ -7,7 +7,11 @@
7
7
 
8
8
  #pragma once
9
9
 
10
+ #if __has_include("FBReactNativeSpecJSI.h") // CocoaPod headers on Apple
11
+ #include "FBReactNativeSpecJSI.h"
12
+ #else
10
13
  #include <FBReactNativeSpec/FBReactNativeSpecJSI.h>
14
+ #endif
11
15
  #include <react/renderer/bridging/bridging.h>
12
16
  #include <react/renderer/observers/intersection/IntersectionObserverManager.h>
13
17
  #include <optional>
@@ -0,0 +1,66 @@
1
+ # Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ #
3
+ # This source code is licensed under the MIT license found in the
4
+ # LICENSE file in the root directory of this source tree.
5
+
6
+ require "json"
7
+
8
+ package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "..", "package.json")))
9
+ version = package['version']
10
+
11
+ source = { :git => 'https://github.com/facebook/react-native.git' }
12
+ if version == '1000.0.0'
13
+ # This is an unpublished version, use the latest commit hash of the react-native repo, which we're presumably in.
14
+ source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
15
+ else
16
+ source[:tag] = "v#{version}"
17
+ end
18
+
19
+ header_search_paths = [
20
+ "\"$(PODS_ROOT)/Headers/Private/Yoga\"",
21
+ ]
22
+
23
+ if ENV['USE_FRAMEWORKS']
24
+ header_search_paths << "\"$(PODS_TARGET_SRCROOT)/../../..\"" # this is needed to allow the module access its own files
25
+ end
26
+
27
+ Pod::Spec.new do |s|
28
+ s.name = "React-intersectionobservernativemodule"
29
+ s.version = version
30
+ s.summary = "React Native intersection observer native module"
31
+ s.homepage = "https://reactnative.dev/"
32
+ s.license = package["license"]
33
+ s.author = "Meta Platforms, Inc. and its affiliates"
34
+ s.platforms = min_supported_versions
35
+ s.source = source
36
+ s.source_files = podspec_sources("*.{cpp,h}", "*.h")
37
+ s.header_dir = "react/nativemodule/intersectionobserver"
38
+ s.pod_target_xcconfig = { "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(),
39
+ "HEADER_SEARCH_PATHS" => header_search_paths.join(' '),
40
+ "OTHER_CFLAGS" => "$(inherited)",
41
+ "DEFINES_MODULE" => "YES" }
42
+
43
+ if ENV['USE_FRAMEWORKS']
44
+ s.module_name = "intersectionobservernativemodule"
45
+ s.header_mappings_dir = "../.."
46
+ end
47
+
48
+ s.dependency "Yoga"
49
+ s.dependency "React-jsi"
50
+ s.dependency "React-jsiexecutor"
51
+ s.dependency "React-cxxreact"
52
+
53
+ depend_on_js_engine(s)
54
+ add_rn_third_party_dependencies(s)
55
+ add_rncore_dependency(s)
56
+
57
+ s.dependency "ReactCommon/turbomodule/core"
58
+
59
+ s.dependency "React-Fabric"
60
+ s.dependency "React-Fabric/bridging"
61
+ s.dependency "React-runtimescheduler"
62
+ add_dependency(s, "React-RCTFBReactNativeSpec")
63
+ add_dependency(s, "React-runtimeexecutor", :additional_framework_paths => ["platform/ios"])
64
+ add_dependency(s, "React-graphics", :additional_framework_paths => ["react/renderer/graphics/platform/ios"])
65
+
66
+ end
@@ -412,7 +412,6 @@ namespace {
412
412
 
413
413
  std::shared_ptr<ShadowNode> cloneMultipleRecursive(
414
414
  const ShadowNode& shadowNode,
415
- const std::unordered_set<const ShadowNodeFamily*>& familiesToUpdate,
416
415
  const std::unordered_map<const ShadowNodeFamily*, int>& childrenCount,
417
416
  const std::function<std::shared_ptr<
418
417
  ShadowNode>(const ShadowNode&, const ShadowNodeFragment&)>& callback) {
@@ -430,16 +429,12 @@ std::shared_ptr<ShadowNode> cloneMultipleRecursive(
430
429
  std::make_shared<std::vector<std::shared_ptr<const ShadowNode>>>(
431
430
  children);
432
431
  }
433
- (*newChildren)[i] = cloneMultipleRecursive(
434
- *children[i], familiesToUpdate, childrenCount, callback);
432
+ (*newChildren)[i] =
433
+ cloneMultipleRecursive(*children[i], childrenCount, callback);
435
434
  }
436
435
  }
437
436
 
438
- ShadowNodeFragment fragment{.children = newChildren};
439
- if (familiesToUpdate.contains(family)) {
440
- return callback(shadowNode, fragment);
441
- }
442
- return shadowNode.clone(fragment);
437
+ return callback(shadowNode, {.children = newChildren});
443
438
  }
444
439
 
445
440
  } // namespace
@@ -479,8 +474,7 @@ std::shared_ptr<ShadowNode> ShadowNode::cloneMultiple(
479
474
  return nullptr;
480
475
  }
481
476
 
482
- return cloneMultipleRecursive(
483
- *this, familiesToUpdate, childrenCount, callback);
477
+ return cloneMultipleRecursive(*this, childrenCount, callback);
484
478
  }
485
479
 
486
480
  #pragma mark - DebugStringConvertible
@@ -342,3 +342,35 @@ TEST_F(ShadowNodeTest, cloneMultiple) {
342
342
  EXPECT_EQ(newNodeABA->getTag(), nodeABA_->getTag());
343
343
  EXPECT_EQ(newNodeABA.get(), nodeABA_.get());
344
344
  }
345
+
346
+ TEST_F(ShadowNodeTest, cloneMultipleWithSingleFamily) {
347
+ auto newProps = std::make_shared<const TestProps>();
348
+ auto newRoot = nodeA_->cloneMultiple(
349
+ {&nodeAB_->getFamily()},
350
+ [&](const ShadowNode& oldShadowNode, const ShadowNodeFragment& fragment) {
351
+ return oldShadowNode.clone({
352
+ .props = newProps,
353
+ .children = fragment.children,
354
+ .state = fragment.state,
355
+ });
356
+ });
357
+
358
+ EXPECT_EQ(newRoot->getTag(), nodeA_->getTag());
359
+ // The callback is called for each cloned node, so the root props are also
360
+ // updated
361
+ EXPECT_EQ(newRoot->getProps(), newProps);
362
+
363
+ auto newNodeAA = newRoot->getChildren()[0];
364
+ EXPECT_EQ(newNodeAA->getTag(), nodeAA_->getTag());
365
+ EXPECT_EQ(newNodeAA->getProps(), nodeAA_->getProps());
366
+ // AA was cloned when its parent was cloned as it was shared
367
+ EXPECT_NE(newNodeAA.get(), nodeAA_.get());
368
+
369
+ auto newNodeAB = newRoot->getChildren()[1];
370
+ EXPECT_EQ(newNodeAB->getTag(), nodeAB_->getTag());
371
+ EXPECT_EQ(newNodeAB->getProps(), newProps);
372
+
373
+ auto newNodeABA = newNodeAB->getChildren()[0];
374
+ EXPECT_EQ(newNodeABA->getTag(), nodeABA_->getTag());
375
+ EXPECT_EQ(newNodeABA.get(), nodeABA_.get());
376
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native",
3
- "version": "0.84.0-nightly-20251113-6ddba300b",
3
+ "version": "0.84.0-nightly-20251115-e08abbcb9",
4
4
  "description": "A framework for building native apps using React",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -160,13 +160,13 @@
160
160
  },
161
161
  "dependencies": {
162
162
  "@jest/create-cache-key-function": "^29.7.0",
163
- "@react-native/assets-registry": "0.84.0-nightly-20251113-6ddba300b",
164
- "@react-native/codegen": "0.84.0-nightly-20251113-6ddba300b",
165
- "@react-native/community-cli-plugin": "0.84.0-nightly-20251113-6ddba300b",
166
- "@react-native/gradle-plugin": "0.84.0-nightly-20251113-6ddba300b",
167
- "@react-native/js-polyfills": "0.84.0-nightly-20251113-6ddba300b",
168
- "@react-native/normalize-colors": "0.84.0-nightly-20251113-6ddba300b",
169
- "@react-native/virtualized-lists": "0.84.0-nightly-20251113-6ddba300b",
163
+ "@react-native/assets-registry": "0.84.0-nightly-20251115-e08abbcb9",
164
+ "@react-native/codegen": "0.84.0-nightly-20251115-e08abbcb9",
165
+ "@react-native/community-cli-plugin": "0.84.0-nightly-20251115-e08abbcb9",
166
+ "@react-native/gradle-plugin": "0.84.0-nightly-20251115-e08abbcb9",
167
+ "@react-native/js-polyfills": "0.84.0-nightly-20251115-e08abbcb9",
168
+ "@react-native/normalize-colors": "0.84.0-nightly-20251115-e08abbcb9",
169
+ "@react-native/virtualized-lists": "0.84.0-nightly-20251115-e08abbcb9",
170
170
  "abort-controller": "^3.0.0",
171
171
  "anser": "^1.4.9",
172
172
  "ansi-regex": "^5.0.0",
@@ -143,6 +143,7 @@ def use_react_native! (
143
143
  pod 'React-featureflagsnativemodule', :path => "#{prefix}/ReactCommon/react/nativemodule/featureflags"
144
144
  pod 'React-microtasksnativemodule', :path => "#{prefix}/ReactCommon/react/nativemodule/microtasks"
145
145
  pod 'React-idlecallbacksnativemodule', :path => "#{prefix}/ReactCommon/react/nativemodule/idlecallbacks"
146
+ pod 'React-intersectionobservernativemodule', :path => "#{prefix}/ReactCommon/react/nativemodule/intersectionobserver"
146
147
  pod 'React-webperformancenativemodule', :path => "#{prefix}/ReactCommon/react/nativemodule/webperformance"
147
148
  pod 'React-domnativemodule', :path => "#{prefix}/ReactCommon/react/nativemodule/dom"
148
149
  pod 'React-defaultsnativemodule', :path => "#{prefix}/ReactCommon/react/nativemodule/defaults"
@@ -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<<11de61ca7deceb1931bf078b9125e97a>>
7
+ * @generated SignedSource<<d9337b8c6a6d759ce9bd2ff95f2ba2e2>>
8
8
  * @flow strict
9
9
  * @noformat
10
10
  */
@@ -65,6 +65,7 @@ export type ReactNativeFeatureFlags = $ReadOnly<{
65
65
  disableViewPreallocationAndroid: Getter<boolean>,
66
66
  enableAccessibilityOrder: Getter<boolean>,
67
67
  enableAccumulatedUpdatesInRawPropsAndroid: Getter<boolean>,
68
+ enableAndroidAntialiasedBorderRadiusClipping: Getter<boolean>,
68
69
  enableAndroidLinearText: Getter<boolean>,
69
70
  enableAndroidTextMeasurementOptimizations: Getter<boolean>,
70
71
  enableBridgelessArchitecture: Getter<boolean>,
@@ -86,6 +87,7 @@ export type ReactNativeFeatureFlags = $ReadOnly<{
86
87
  enableImmediateUpdateModeForContentOffsetChanges: Getter<boolean>,
87
88
  enableImperativeFocus: Getter<boolean>,
88
89
  enableInteropViewManagerClassLookUpOptimizationIOS: Getter<boolean>,
90
+ enableIntersectionObserverByDefault: Getter<boolean>,
89
91
  enableKeyEvents: Getter<boolean>,
90
92
  enableLayoutAnimationsOnAndroid: Getter<boolean>,
91
93
  enableLayoutAnimationsOnIOS: Getter<boolean>,
@@ -203,7 +205,7 @@ export const shouldUseAnimatedObjectForTransform: Getter<boolean> = createJavaSc
203
205
  /**
204
206
  * Set accessibilityRole to "link" for pressable Text components by default.
205
207
  */
206
- export const shouldUseLinkRoleForPressableText: Getter<boolean> = createJavaScriptFlagGetter('shouldUseLinkRoleForPressableText', false);
208
+ export const shouldUseLinkRoleForPressableText: Getter<boolean> = createJavaScriptFlagGetter('shouldUseLinkRoleForPressableText', true);
207
209
 
208
210
  /**
209
211
  * removeClippedSubviews prop will be used as the default in FlatList on iOS to match Android
@@ -280,6 +282,10 @@ export const enableAccessibilityOrder: Getter<boolean> = createNativeFlagGetter(
280
282
  * When enabled, Android will accumulate updates in rawProps to reduce the number of mounting instructions for cascading re-renders.
281
283
  */
282
284
  export const enableAccumulatedUpdatesInRawPropsAndroid: Getter<boolean> = createNativeFlagGetter('enableAccumulatedUpdatesInRawPropsAndroid', false);
285
+ /**
286
+ * Enable antialiased border radius clipping for Android API 28 and below using manual masking with Porter-Duff compositing
287
+ */
288
+ export const enableAndroidAntialiasedBorderRadiusClipping: Getter<boolean> = createNativeFlagGetter('enableAndroidAntialiasedBorderRadiusClipping', false);
283
289
  /**
284
290
  * Enables linear text rendering on Android wherever subpixel text rendering is enabled
285
291
  */
@@ -364,6 +370,10 @@ export const enableImperativeFocus: Getter<boolean> = createNativeFlagGetter('en
364
370
  * This is to fix the issue with interop view manager where component descriptor lookup is causing ViewManager to preload.
365
371
  */
366
372
  export const enableInteropViewManagerClassLookUpOptimizationIOS: Getter<boolean> = createNativeFlagGetter('enableInteropViewManagerClassLookUpOptimizationIOS', false);
373
+ /**
374
+ * Enables the IntersectionObserver Web API in React Native.
375
+ */
376
+ export const enableIntersectionObserverByDefault: Getter<boolean> = createNativeFlagGetter('enableIntersectionObserverByDefault', false);
367
377
  /**
368
378
  * Enables key up/down/press events to be sent to JS from components
369
379
  */
@@ -499,7 +509,7 @@ export const shouldPressibilityUseW3CPointerEventsForHover: Getter<boolean> = cr
499
509
  /**
500
510
  * Fix BaseViewManager to properly set view.setEnabled() based on accessibilityState.disabled.
501
511
  */
502
- export const shouldSetEnabledBasedOnAccessibilityState: Getter<boolean> = createNativeFlagGetter('shouldSetEnabledBasedOnAccessibilityState', false);
512
+ export const shouldSetEnabledBasedOnAccessibilityState: Getter<boolean> = createNativeFlagGetter('shouldSetEnabledBasedOnAccessibilityState', true);
503
513
  /**
504
514
  * Do not emit touchcancel from Android ScrollView, instead native topScroll event will trigger responder transfer and terminate in RN renderer.
505
515
  */
@@ -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<<bddc4ce972a5fd24b18de9e47708209e>>
7
+ * @generated SignedSource<<0de9df853ee6af976b4e15f55e6b9b26>>
8
8
  * @flow strict
9
9
  * @noformat
10
10
  */
@@ -39,6 +39,7 @@ export interface Spec extends TurboModule {
39
39
  +disableViewPreallocationAndroid?: () => boolean;
40
40
  +enableAccessibilityOrder?: () => boolean;
41
41
  +enableAccumulatedUpdatesInRawPropsAndroid?: () => boolean;
42
+ +enableAndroidAntialiasedBorderRadiusClipping?: () => boolean;
42
43
  +enableAndroidLinearText?: () => boolean;
43
44
  +enableAndroidTextMeasurementOptimizations?: () => boolean;
44
45
  +enableBridgelessArchitecture?: () => boolean;
@@ -60,6 +61,7 @@ export interface Spec extends TurboModule {
60
61
  +enableImmediateUpdateModeForContentOffsetChanges?: () => boolean;
61
62
  +enableImperativeFocus?: () => boolean;
62
63
  +enableInteropViewManagerClassLookUpOptimizationIOS?: () => boolean;
64
+ +enableIntersectionObserverByDefault?: () => boolean;
63
65
  +enableKeyEvents?: () => boolean;
64
66
  +enableLayoutAnimationsOnAndroid?: () => boolean;
65
67
  +enableLayoutAnimationsOnIOS?: () => boolean;
@@ -41,4 +41,10 @@ export default function setUpDefaltReactNativeEnvironment(
41
41
  }
42
42
 
43
43
  require('../../../Libraries/ReactNative/AppRegistry');
44
+
45
+ if (
46
+ require('../../../src/private/featureflags/ReactNativeFeatureFlags').enableIntersectionObserverByDefault()
47
+ ) {
48
+ require('./setUpIntersectionObserver').default();
49
+ }
44
50
  }