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.
- package/Libraries/Core/ReactNativeVersion.js +1 -1
- package/React/Base/RCTBundleManager.h +2 -2
- package/React/Base/RCTBundleManager.m +14 -1
- package/React/Base/RCTVersion.m +1 -1
- package/React/CoreModules/RCTDevSettings.h +36 -1
- package/React/CoreModules/RCTDevSettings.mm +45 -9
- package/React/DevSupport/RCTPackagerConnection.h +4 -2
- package/React/DevSupport/RCTPackagerConnection.mm +30 -33
- package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +16 -0
- package/ReactAndroid/api/ReactAndroid.api +1 -0
- package/ReactAndroid/build.gradle.kts +2 -0
- package/ReactAndroid/gradle.properties +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +13 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +21 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +5 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +6 -2
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +23 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Canary_Android.kt +3 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +5 -1
- package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkEventUtil.kt +23 -0
- package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BackgroundStyleApplicator.kt +84 -2
- package/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.kt +12 -9
- package/ReactAndroid/src/main/jni/CMakeLists.txt +5 -0
- package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +29 -1
- package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +7 -1
- package/ReactAndroid/src/main/res/views/uimanager/values-ne/strings.xml +1 -0
- package/ReactCommon/React-Fabric.podspec +8 -2
- package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +9 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +11 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +110 -74
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +6 -2
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +10 -2
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +19 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSCanary.h +5 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +3 -1
- package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm +2 -2
- package/ReactCommon/react/nativemodule/defaults/CMakeLists.txt +1 -0
- package/ReactCommon/react/nativemodule/defaults/DefaultTurboModules.cpp +7 -0
- package/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec +5 -1
- package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +11 -1
- package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +5 -1
- package/ReactCommon/react/nativemodule/intersectionobserver/NativeIntersectionObserver.h +4 -0
- package/ReactCommon/react/nativemodule/intersectionobserver/React-intersectionobservernativemodule.podspec +66 -0
- package/ReactCommon/react/renderer/core/ShadowNode.cpp +4 -10
- package/ReactCommon/react/renderer/core/tests/ShadowNodeTest.cpp +32 -0
- package/package.json +8 -8
- package/scripts/react_native_pods.rb +1 -0
- package/src/private/featureflags/ReactNativeFeatureFlags.js +13 -3
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +3 -1
- 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<<
|
|
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*>,
|
|
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<<
|
|
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
|
|
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<<
|
|
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<<
|
|
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<<
|
|
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;
|
package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm
CHANGED
|
@@ -694,7 +694,7 @@ typedef struct {
|
|
|
694
694
|
} else if (_bridgeProxy) {
|
|
695
695
|
[(id)module setValue:_bridgeProxy forKey:@"bridge"];
|
|
696
696
|
}
|
|
697
|
-
} @catch (NSException *
|
|
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 *
|
|
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<<
|
|
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<<
|
|
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] =
|
|
434
|
-
*children[i],
|
|
432
|
+
(*newChildren)[i] =
|
|
433
|
+
cloneMultipleRecursive(*children[i], childrenCount, callback);
|
|
435
434
|
}
|
|
436
435
|
}
|
|
437
436
|
|
|
438
|
-
|
|
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-
|
|
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-
|
|
164
|
-
"@react-native/codegen": "0.84.0-nightly-
|
|
165
|
-
"@react-native/community-cli-plugin": "0.84.0-nightly-
|
|
166
|
-
"@react-native/gradle-plugin": "0.84.0-nightly-
|
|
167
|
-
"@react-native/js-polyfills": "0.84.0-nightly-
|
|
168
|
-
"@react-native/normalize-colors": "0.84.0-nightly-
|
|
169
|
-
"@react-native/virtualized-lists": "0.84.0-nightly-
|
|
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<<
|
|
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',
|
|
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',
|
|
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<<
|
|
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
|
}
|