react-native 0.84.0-nightly-20251113-6ddba300b → 0.84.0-nightly-20251114-dd6805dec

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 (43) hide show
  1. package/Libraries/Core/ReactNativeVersion.js +1 -1
  2. package/React/Base/RCTVersion.m +1 -1
  3. package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +8 -0
  4. package/ReactAndroid/build.gradle.kts +2 -0
  5. package/ReactAndroid/gradle.properties +1 -1
  6. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +7 -1
  7. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +11 -1
  8. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +3 -1
  9. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +4 -2
  10. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +12 -1
  11. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Canary_Android.kt +3 -1
  12. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +3 -1
  13. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkEventUtil.kt +23 -0
  14. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
  15. package/ReactAndroid/src/main/jni/CMakeLists.txt +5 -0
  16. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +15 -1
  17. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +4 -1
  18. package/ReactAndroid/src/main/res/views/uimanager/values-ne/strings.xml +1 -0
  19. package/ReactCommon/React-Fabric.podspec +8 -2
  20. package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
  21. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +5 -1
  22. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +6 -1
  23. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +71 -53
  24. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +4 -2
  25. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +6 -2
  26. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +10 -1
  27. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSCanary.h +5 -1
  28. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +2 -1
  29. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm +2 -2
  30. package/ReactCommon/react/nativemodule/defaults/CMakeLists.txt +1 -0
  31. package/ReactCommon/react/nativemodule/defaults/DefaultTurboModules.cpp +7 -0
  32. package/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec +5 -1
  33. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +6 -1
  34. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +3 -1
  35. package/ReactCommon/react/nativemodule/intersectionobserver/NativeIntersectionObserver.h +4 -0
  36. package/ReactCommon/react/nativemodule/intersectionobserver/React-intersectionobservernativemodule.podspec +66 -0
  37. package/ReactCommon/react/renderer/core/ShadowNode.cpp +4 -10
  38. package/ReactCommon/react/renderer/core/tests/ShadowNodeTest.cpp +32 -0
  39. package/package.json +8 -8
  40. package/scripts/react_native_pods.rb +1 -0
  41. package/src/private/featureflags/ReactNativeFeatureFlags.js +8 -3
  42. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +2 -1
  43. package/src/private/setup/setUpDefaultReactNativeEnvironment.js +6 -0
@@ -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<<3235f8d2413da4e9f10c7d8ff78bfeb8>>
8
8
  */
9
9
 
10
10
  /**
@@ -219,6 +219,11 @@ bool NativeReactNativeFeatureFlags::enableInteropViewManagerClassLookUpOptimizat
219
219
  return ReactNativeFeatureFlags::enableInteropViewManagerClassLookUpOptimizationIOS();
220
220
  }
221
221
 
222
+ bool NativeReactNativeFeatureFlags::enableIntersectionObserverByDefault(
223
+ jsi::Runtime& /*runtime*/) {
224
+ return ReactNativeFeatureFlags::enableIntersectionObserverByDefault();
225
+ }
226
+
222
227
  bool NativeReactNativeFeatureFlags::enableKeyEvents(
223
228
  jsi::Runtime& /*runtime*/) {
224
229
  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<<9a7d4159c54f9ccc3e0d3cc461b66b7e>>
8
8
  */
9
9
 
10
10
  /**
@@ -106,6 +106,8 @@ class NativeReactNativeFeatureFlags
106
106
 
107
107
  bool enableInteropViewManagerClassLookUpOptimizationIOS(jsi::Runtime& runtime);
108
108
 
109
+ bool enableIntersectionObserverByDefault(jsi::Runtime& runtime);
110
+
109
111
  bool enableKeyEvents(jsi::Runtime& runtime);
110
112
 
111
113
  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-20251114-dd6805dec",
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-20251114-dd6805dec",
164
+ "@react-native/codegen": "0.84.0-nightly-20251114-dd6805dec",
165
+ "@react-native/community-cli-plugin": "0.84.0-nightly-20251114-dd6805dec",
166
+ "@react-native/gradle-plugin": "0.84.0-nightly-20251114-dd6805dec",
167
+ "@react-native/js-polyfills": "0.84.0-nightly-20251114-dd6805dec",
168
+ "@react-native/normalize-colors": "0.84.0-nightly-20251114-dd6805dec",
169
+ "@react-native/virtualized-lists": "0.84.0-nightly-20251114-dd6805dec",
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<<312e7dcaaaf8bade0acf80d15e8eedee>>
8
8
  * @flow strict
9
9
  * @noformat
10
10
  */
@@ -86,6 +86,7 @@ export type ReactNativeFeatureFlags = $ReadOnly<{
86
86
  enableImmediateUpdateModeForContentOffsetChanges: Getter<boolean>,
87
87
  enableImperativeFocus: Getter<boolean>,
88
88
  enableInteropViewManagerClassLookUpOptimizationIOS: Getter<boolean>,
89
+ enableIntersectionObserverByDefault: Getter<boolean>,
89
90
  enableKeyEvents: Getter<boolean>,
90
91
  enableLayoutAnimationsOnAndroid: Getter<boolean>,
91
92
  enableLayoutAnimationsOnIOS: Getter<boolean>,
@@ -203,7 +204,7 @@ export const shouldUseAnimatedObjectForTransform: Getter<boolean> = createJavaSc
203
204
  /**
204
205
  * Set accessibilityRole to "link" for pressable Text components by default.
205
206
  */
206
- export const shouldUseLinkRoleForPressableText: Getter<boolean> = createJavaScriptFlagGetter('shouldUseLinkRoleForPressableText', false);
207
+ export const shouldUseLinkRoleForPressableText: Getter<boolean> = createJavaScriptFlagGetter('shouldUseLinkRoleForPressableText', true);
207
208
 
208
209
  /**
209
210
  * removeClippedSubviews prop will be used as the default in FlatList on iOS to match Android
@@ -364,6 +365,10 @@ export const enableImperativeFocus: Getter<boolean> = createNativeFlagGetter('en
364
365
  * This is to fix the issue with interop view manager where component descriptor lookup is causing ViewManager to preload.
365
366
  */
366
367
  export const enableInteropViewManagerClassLookUpOptimizationIOS: Getter<boolean> = createNativeFlagGetter('enableInteropViewManagerClassLookUpOptimizationIOS', false);
368
+ /**
369
+ * Enables the IntersectionObserver Web API in React Native.
370
+ */
371
+ export const enableIntersectionObserverByDefault: Getter<boolean> = createNativeFlagGetter('enableIntersectionObserverByDefault', false);
367
372
  /**
368
373
  * Enables key up/down/press events to be sent to JS from components
369
374
  */
@@ -499,7 +504,7 @@ export const shouldPressibilityUseW3CPointerEventsForHover: Getter<boolean> = cr
499
504
  /**
500
505
  * Fix BaseViewManager to properly set view.setEnabled() based on accessibilityState.disabled.
501
506
  */
502
- export const shouldSetEnabledBasedOnAccessibilityState: Getter<boolean> = createNativeFlagGetter('shouldSetEnabledBasedOnAccessibilityState', false);
507
+ export const shouldSetEnabledBasedOnAccessibilityState: Getter<boolean> = createNativeFlagGetter('shouldSetEnabledBasedOnAccessibilityState', true);
503
508
  /**
504
509
  * Do not emit touchcancel from Android ScrollView, instead native topScroll event will trigger responder transfer and terminate in RN renderer.
505
510
  */
@@ -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<<d5e09e0d1f62767dcc810d3295e1b724>>
8
8
  * @flow strict
9
9
  * @noformat
10
10
  */
@@ -60,6 +60,7 @@ export interface Spec extends TurboModule {
60
60
  +enableImmediateUpdateModeForContentOffsetChanges?: () => boolean;
61
61
  +enableImperativeFocus?: () => boolean;
62
62
  +enableInteropViewManagerClassLookUpOptimizationIOS?: () => boolean;
63
+ +enableIntersectionObserverByDefault?: () => boolean;
63
64
  +enableKeyEvents?: () => boolean;
64
65
  +enableLayoutAnimationsOnAndroid?: () => boolean;
65
66
  +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
  }