react-native 0.83.0-nightly-20250912-a7dc5051d → 0.83.0-nightly-20250914-09a7e0a0f
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/Components/Switch/Switch.js +1 -1
- package/Libraries/Core/ReactNativeVersion.js +1 -1
- package/Libraries/Image/RCTImageBlurUtils.mm +2 -1
- package/Libraries/Image/RCTImageUtils.mm +2 -1
- package/Libraries/Lists/SectionList.d.ts +5 -1
- package/Libraries/NativeAnimation/RCTAnimationUtils.mm +8 -2
- package/React/Base/RCTVersion.m +1 -1
- package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/ComponentDescriptors.cpp +0 -1
- package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/ComponentDescriptors.h +0 -1
- package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/ShadowNodes.cpp +0 -1
- package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/ShadowNodes.h +0 -11
- package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/States.h +0 -2
- package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTEnhancedScrollView.mm +2 -1
- package/React/Views/RCTBorderDrawing.m +3 -1
- package/React/Views/ScrollView/RCTScrollView.m +2 -1
- package/ReactAndroid/gradle.properties +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContextBaseJavaModule.kt +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.kt +1 -0
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorOverlayManager.kt +17 -1
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorOverlayView.kt +3 -6
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +11 -6
- package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/AndroidInfoModule.kt +1 -10
- package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
- package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
- package/ReactCommon/react/renderer/animated/AnimatedModule.cpp +1 -1
- package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.cpp +32 -2
- package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.h +8 -0
- package/ReactCommon/react/renderer/animated/tests/AnimationTestsBase.h +1 -0
- package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHermesInstance.mm +1 -1
- package/package.json +8 -8
- package/scripts/codegen/generate-artifacts-executor/generateReactCodegenPodspec.js +5 -0
- package/sdks/hermesc/osx-bin/hermes +0 -0
- package/sdks/hermesc/osx-bin/hermesc +0 -0
- package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
- package/src/private/specs_DEPRECATED/components/SwitchNativeComponent.js +1 -0
|
@@ -29,7 +29,7 @@ export default class ReactNativeVersion {
|
|
|
29
29
|
static major: number = 0;
|
|
30
30
|
static minor: number = 83;
|
|
31
31
|
static patch: number = 0;
|
|
32
|
-
static prerelease: string | null = 'nightly-
|
|
32
|
+
static prerelease: string | null = 'nightly-20250914-09a7e0a0f';
|
|
33
33
|
|
|
34
34
|
static getVersionString(): string {
|
|
35
35
|
return `${this.major}.${this.minor}.${this.patch}${this.prerelease != null ? `-${this.prerelease}` : ''}`;
|
|
@@ -30,7 +30,8 @@ UIImage *RCTBlurredImageWithRadius(UIImage *inputImage, CGFloat radius)
|
|
|
30
30
|
}].CGImage;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
vImage_Buffer buffer1
|
|
33
|
+
vImage_Buffer buffer1;
|
|
34
|
+
vImage_Buffer buffer2;
|
|
34
35
|
buffer1.width = buffer2.width = CGImageGetWidth(imageRef);
|
|
35
36
|
buffer1.height = buffer2.height = CGImageGetHeight(imageRef);
|
|
36
37
|
buffer1.rowBytes = buffer2.rowBytes = CGImageGetBytesPerRow(imageRef);
|
|
@@ -212,7 +212,8 @@ BOOL RCTUpscalingRequired(
|
|
|
212
212
|
sourceSize.height *= scale;
|
|
213
213
|
|
|
214
214
|
// Calculate aspect ratios if needed (don't bother if resizeMode == stretch)
|
|
215
|
-
CGFloat aspect = 0.0
|
|
215
|
+
CGFloat aspect = 0.0;
|
|
216
|
+
CGFloat targetAspect = 0.0;
|
|
216
217
|
if (resizeMode != RCTResizeModeStretch) {
|
|
217
218
|
aspect = sourceSize.width / sourceSize.height;
|
|
218
219
|
targetAspect = destSize.width / destSize.height;
|
|
@@ -35,7 +35,11 @@ export interface SectionBase<ItemT, SectionT = DefaultSectionT> {
|
|
|
35
35
|
|
|
36
36
|
renderItem?: SectionListRenderItem<ItemT, SectionT> | undefined;
|
|
37
37
|
|
|
38
|
-
ItemSeparatorComponent?:
|
|
38
|
+
ItemSeparatorComponent?:
|
|
39
|
+
| React.ComponentType<any>
|
|
40
|
+
| React.ReactElement
|
|
41
|
+
| null
|
|
42
|
+
| undefined;
|
|
39
43
|
|
|
40
44
|
keyExtractor?: ((item: ItemT, index: number) => string) | undefined;
|
|
41
45
|
}
|
|
@@ -90,9 +90,15 @@ uint32_t RCTInterpolateColorInRange(CGFloat value, NSArray<NSNumber *> *inputRan
|
|
|
90
90
|
CGFloat inputMin = inputRange[rangeIndex].doubleValue;
|
|
91
91
|
CGFloat inputMax = inputRange[rangeIndex + 1].doubleValue;
|
|
92
92
|
|
|
93
|
-
CGFloat redMin
|
|
93
|
+
CGFloat redMin;
|
|
94
|
+
CGFloat greenMin;
|
|
95
|
+
CGFloat blueMin;
|
|
96
|
+
CGFloat alphaMin;
|
|
94
97
|
[outputRange[rangeIndex] getRed:&redMin green:&greenMin blue:&blueMin alpha:&alphaMin];
|
|
95
|
-
CGFloat redMax
|
|
98
|
+
CGFloat redMax;
|
|
99
|
+
CGFloat greenMax;
|
|
100
|
+
CGFloat blueMax;
|
|
101
|
+
CGFloat alphaMax;
|
|
96
102
|
[outputRange[rangeIndex + 1] getRed:&redMax green:&greenMax blue:&blueMax alpha:&alphaMax];
|
|
97
103
|
|
|
98
104
|
return RCTColorFromComponents(
|
package/React/Base/RCTVersion.m
CHANGED
|
@@ -24,7 +24,7 @@ NSDictionary* RCTGetReactNativeVersion(void)
|
|
|
24
24
|
RCTVersionMajor: @(0),
|
|
25
25
|
RCTVersionMinor: @(83),
|
|
26
26
|
RCTVersionPatch: @(0),
|
|
27
|
-
RCTVersionPrerelease: @"nightly-
|
|
27
|
+
RCTVersionPrerelease: @"nightly-20250914-09a7e0a0f",
|
|
28
28
|
};
|
|
29
29
|
});
|
|
30
30
|
return __rnVersion;
|
package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/ComponentDescriptors.cpp
CHANGED
|
@@ -21,7 +21,6 @@ registry->add(concreteComponentDescriptorProvider<AndroidDrawerLayoutComponentDe
|
|
|
21
21
|
registry->add(concreteComponentDescriptorProvider<AndroidSwipeRefreshLayoutComponentDescriptor>());
|
|
22
22
|
registry->add(concreteComponentDescriptorProvider<DebuggingOverlayComponentDescriptor>());
|
|
23
23
|
registry->add(concreteComponentDescriptorProvider<PullToRefreshViewComponentDescriptor>());
|
|
24
|
-
registry->add(concreteComponentDescriptorProvider<SwitchComponentDescriptor>());
|
|
25
24
|
registry->add(concreteComponentDescriptorProvider<UnimplementedNativeViewComponentDescriptor>());
|
|
26
25
|
}
|
|
27
26
|
|
package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/ComponentDescriptors.h
CHANGED
|
@@ -21,7 +21,6 @@ using AndroidDrawerLayoutComponentDescriptor = ConcreteComponentDescriptor<Andro
|
|
|
21
21
|
using AndroidSwipeRefreshLayoutComponentDescriptor = ConcreteComponentDescriptor<AndroidSwipeRefreshLayoutShadowNode>;
|
|
22
22
|
using DebuggingOverlayComponentDescriptor = ConcreteComponentDescriptor<DebuggingOverlayShadowNode>;
|
|
23
23
|
using PullToRefreshViewComponentDescriptor = ConcreteComponentDescriptor<PullToRefreshViewShadowNode>;
|
|
24
|
-
using SwitchComponentDescriptor = ConcreteComponentDescriptor<SwitchShadowNode>;
|
|
25
24
|
using UnimplementedNativeViewComponentDescriptor = ConcreteComponentDescriptor<UnimplementedNativeViewShadowNode>;
|
|
26
25
|
|
|
27
26
|
void FBReactNativeSpec_registerComponentDescriptorsFromCodegen(
|
|
@@ -17,7 +17,6 @@ extern const char AndroidDrawerLayoutComponentName[] = "AndroidDrawerLayout";
|
|
|
17
17
|
extern const char AndroidSwipeRefreshLayoutComponentName[] = "AndroidSwipeRefreshLayout";
|
|
18
18
|
extern const char DebuggingOverlayComponentName[] = "DebuggingOverlay";
|
|
19
19
|
extern const char PullToRefreshViewComponentName[] = "PullToRefreshView";
|
|
20
|
-
extern const char SwitchComponentName[] = "Switch";
|
|
21
20
|
extern const char UnimplementedNativeViewComponentName[] = "UnimplementedNativeView";
|
|
22
21
|
|
|
23
22
|
} // namespace facebook::react
|
|
@@ -73,17 +73,6 @@ using PullToRefreshViewShadowNode = ConcreteViewShadowNode<
|
|
|
73
73
|
PullToRefreshViewEventEmitter,
|
|
74
74
|
PullToRefreshViewState>;
|
|
75
75
|
|
|
76
|
-
JSI_EXPORT extern const char SwitchComponentName[];
|
|
77
|
-
|
|
78
|
-
/*
|
|
79
|
-
* `ShadowNode` for <Switch> component.
|
|
80
|
-
*/
|
|
81
|
-
using SwitchShadowNode = ConcreteViewShadowNode<
|
|
82
|
-
SwitchComponentName,
|
|
83
|
-
SwitchProps,
|
|
84
|
-
SwitchEventEmitter,
|
|
85
|
-
SwitchState>;
|
|
86
|
-
|
|
87
76
|
JSI_EXPORT extern const char UnimplementedNativeViewComponentName[];
|
|
88
77
|
|
|
89
78
|
/*
|
|
@@ -80,7 +80,9 @@ static void RCTPathAddEllipticArc(
|
|
|
80
80
|
CGFloat endAngle,
|
|
81
81
|
BOOL clockwise)
|
|
82
82
|
{
|
|
83
|
-
CGFloat xScale = 1
|
|
83
|
+
CGFloat xScale = 1;
|
|
84
|
+
CGFloat yScale = 1;
|
|
85
|
+
CGFloat radius = 0;
|
|
84
86
|
if (size.width != 0) {
|
|
85
87
|
xScale = 1;
|
|
86
88
|
yScale = size.height / size.width;
|
|
@@ -679,7 +679,8 @@ RCT_SCROLL_EVENT_HANDLER(scrollViewDidScrollToTop, onScrollToTop)
|
|
|
679
679
|
return;
|
|
680
680
|
}
|
|
681
681
|
|
|
682
|
-
CGFloat top = 0
|
|
682
|
+
CGFloat top = 0;
|
|
683
|
+
CGFloat left = 0;
|
|
683
684
|
if (contentSize.width < boundsSize.width) {
|
|
684
685
|
left = (boundsSize.width - contentSize.width) * 0.5f;
|
|
685
686
|
}
|
|
@@ -25,7 +25,7 @@ public abstract class ReactContextBaseJavaModule : BaseJavaModule {
|
|
|
25
25
|
* this method whenever you actually need the Activity and make sure to check for `null`.
|
|
26
26
|
*/
|
|
27
27
|
@Deprecated(
|
|
28
|
-
"Deprecated in 0.80.0. Use getReactApplicationContext.getCurrentActivity() instead.",
|
|
28
|
+
"Deprecated in 0.80.0. Use getReactApplicationContext().getCurrentActivity() instead.",
|
|
29
29
|
ReplaceWith("reactApplicationContext.currentActivity"),
|
|
30
30
|
)
|
|
31
31
|
protected fun getCurrentActivity(): Activity? {
|
|
@@ -15,10 +15,12 @@ import javax.inject.Provider
|
|
|
15
15
|
internal class PerfMonitorOverlayManager(
|
|
16
16
|
private val devHelper: PerfMonitorDevHelper,
|
|
17
17
|
private val contextProvider: Provider<Context?>,
|
|
18
|
+
private val onRequestOpenDevTools: () -> Unit,
|
|
18
19
|
) : PerfMonitorUpdateListener {
|
|
19
20
|
private var enabled: Boolean = false
|
|
20
21
|
private var initialized: Boolean = false
|
|
21
22
|
private var view: PerfMonitorOverlayView? = null
|
|
23
|
+
private var tracingState: TracingState = TracingState.ENABLEDINCDPMODE
|
|
22
24
|
|
|
23
25
|
private fun init() {
|
|
24
26
|
if (initialized || !enabled) {
|
|
@@ -27,7 +29,7 @@ internal class PerfMonitorOverlayManager(
|
|
|
27
29
|
|
|
28
30
|
UiThreadUtil.runOnUiThread {
|
|
29
31
|
val context = contextProvider.get() ?: return@runOnUiThread
|
|
30
|
-
view = PerfMonitorOverlayView(context)
|
|
32
|
+
view = PerfMonitorOverlayView(context, ::handleRecordingButtonPress)
|
|
31
33
|
|
|
32
34
|
// Start background tracing
|
|
33
35
|
devHelper.inspectorTarget?.resumeBackgroundTrace()
|
|
@@ -59,6 +61,20 @@ internal class PerfMonitorOverlayManager(
|
|
|
59
61
|
}
|
|
60
62
|
|
|
61
63
|
override fun onRecordingStateChanged(state: TracingState) {
|
|
64
|
+
tracingState = state
|
|
62
65
|
view?.updateRecordingState(state)
|
|
63
66
|
}
|
|
67
|
+
|
|
68
|
+
private fun handleRecordingButtonPress() {
|
|
69
|
+
when (tracingState) {
|
|
70
|
+
TracingState.ENABLEDINBACKGROUNDMODE -> {
|
|
71
|
+
devHelper.inspectorTarget?.pauseAndAnalyzeBackgroundTrace()
|
|
72
|
+
onRequestOpenDevTools()
|
|
73
|
+
}
|
|
74
|
+
TracingState.DISABLED -> {
|
|
75
|
+
devHelper.inspectorTarget?.resumeBackgroundTrace()
|
|
76
|
+
}
|
|
77
|
+
TracingState.ENABLEDINCDPMODE -> Unit
|
|
78
|
+
}
|
|
79
|
+
}
|
|
64
80
|
}
|
|
@@ -27,6 +27,7 @@ import com.facebook.react.uimanager.PixelUtil
|
|
|
27
27
|
|
|
28
28
|
internal class PerfMonitorOverlayView(
|
|
29
29
|
private val context: Context,
|
|
30
|
+
private val onButtonPress: () -> Unit,
|
|
30
31
|
) {
|
|
31
32
|
private val dialog: Dialog
|
|
32
33
|
private lateinit var statusLabel: TextView
|
|
@@ -101,6 +102,7 @@ internal class PerfMonitorOverlayView(
|
|
|
101
102
|
textContainer.addView(tooltipLabel)
|
|
102
103
|
|
|
103
104
|
val containerLayout = createInnerLayout()
|
|
105
|
+
containerLayout.setOnClickListener { onButtonPress() }
|
|
104
106
|
containerLayout.addView(statusIndicator)
|
|
105
107
|
containerLayout.addView(textContainer)
|
|
106
108
|
|
|
@@ -108,12 +110,7 @@ internal class PerfMonitorOverlayView(
|
|
|
108
110
|
createAnchoredDialog(dpToPx(12f), dpToPx(12f)).apply { setContentView(containerLayout) }
|
|
109
111
|
dialog.window?.apply {
|
|
110
112
|
attributes =
|
|
111
|
-
attributes?.apply {
|
|
112
|
-
flags =
|
|
113
|
-
flags or
|
|
114
|
-
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE or
|
|
115
|
-
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
|
|
116
|
-
}
|
|
113
|
+
attributes?.apply { flags = flags or WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE }
|
|
117
114
|
}
|
|
118
115
|
|
|
119
116
|
return dialog
|
|
@@ -99,7 +99,6 @@ import java.util.HashMap;
|
|
|
99
99
|
import java.util.HashSet;
|
|
100
100
|
import java.util.List;
|
|
101
101
|
import java.util.Map;
|
|
102
|
-
import java.util.Objects;
|
|
103
102
|
import java.util.Queue;
|
|
104
103
|
import java.util.Set;
|
|
105
104
|
import java.util.concurrent.CopyOnWriteArrayList;
|
|
@@ -738,11 +737,17 @@ public class FabricUIManager
|
|
|
738
737
|
* vertical insets.
|
|
739
738
|
*/
|
|
740
739
|
private long getEncodedScreenSizeWithoutVerticalInsets(int surfaceId) {
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
740
|
+
ThemedReactContext context =
|
|
741
|
+
mMountingManager
|
|
742
|
+
.getSurfaceManagerEnforced(surfaceId, "getEncodedScreenSizeWithoutVerticalInsets")
|
|
743
|
+
.getContext();
|
|
744
|
+
if (context == null) {
|
|
745
|
+
FLog.w(TAG, "Couldn't get context from SurfaceMountingManager for surfaceId %d", surfaceId);
|
|
746
|
+
return 0;
|
|
747
|
+
} else {
|
|
748
|
+
return DisplayMetricsHolder.getEncodedScreenSizeWithoutVerticalInsets(
|
|
749
|
+
context.getCurrentActivity());
|
|
750
|
+
}
|
|
746
751
|
}
|
|
747
752
|
|
|
748
753
|
@Override
|
package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/AndroidInfoModule.kt
CHANGED
|
@@ -55,7 +55,7 @@ public class AndroidInfoModule(reactContext: ReactApplicationContext) :
|
|
|
55
55
|
constants["ServerHost"] =
|
|
56
56
|
AndroidInfoHelpers.getServerHost(reactApplicationContext.applicationContext)
|
|
57
57
|
}
|
|
58
|
-
constants["isTesting"] = "true" == System.getProperty(IS_TESTING)
|
|
58
|
+
constants["isTesting"] = "true" == System.getProperty(IS_TESTING)
|
|
59
59
|
val isDisableAnimations = System.getProperty(IS_DISABLE_ANIMATIONS)
|
|
60
60
|
if (isDisableAnimations != null) {
|
|
61
61
|
constants["isDisableAnimations"] = "true" == isDisableAnimations
|
|
@@ -71,15 +71,6 @@ public class AndroidInfoModule(reactContext: ReactApplicationContext) :
|
|
|
71
71
|
|
|
72
72
|
override fun invalidate() {}
|
|
73
73
|
|
|
74
|
-
private fun isRunningScreenshotTest(): Boolean {
|
|
75
|
-
return try {
|
|
76
|
-
Class.forName("com.facebook.testing.react.screenshots.ReactAppScreenshotTestActivity")
|
|
77
|
-
true
|
|
78
|
-
} catch (ignored: ClassNotFoundException) {
|
|
79
|
-
false
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
74
|
public companion object {
|
|
84
75
|
public const val NAME: String = NativePlatformConstantsAndroidSpec.NAME
|
|
85
76
|
private const val IS_TESTING = "IS_TESTING"
|
|
@@ -22,7 +22,7 @@ constexpr struct {
|
|
|
22
22
|
int32_t Major = 0;
|
|
23
23
|
int32_t Minor = 83;
|
|
24
24
|
int32_t Patch = 0;
|
|
25
|
-
std::string_view Prerelease = "nightly-
|
|
25
|
+
std::string_view Prerelease = "nightly-20250914-09a7e0a0f";
|
|
26
26
|
} ReactNativeVersion;
|
|
27
27
|
|
|
28
28
|
} // namespace facebook::react
|
|
@@ -51,7 +51,7 @@ void AnimatedModule::createAnimatedNode(
|
|
|
51
51
|
if (auto it = configDynamic.find("disableBatchingForNativeCreate");
|
|
52
52
|
it != configDynamic.items().end() && it->second == true) {
|
|
53
53
|
if (nodesManager_) {
|
|
54
|
-
nodesManager_->
|
|
54
|
+
nodesManager_->createAnimatedNodeAsync(tag, configDynamic);
|
|
55
55
|
}
|
|
56
56
|
} else {
|
|
57
57
|
operations_.emplace_back(
|
|
@@ -64,6 +64,8 @@ void mergeObjects(folly::dynamic& out, const folly::dynamic& objectToMerge) {
|
|
|
64
64
|
|
|
65
65
|
} // namespace
|
|
66
66
|
|
|
67
|
+
thread_local bool NativeAnimatedNodesManager::isOnRenderThread_{false};
|
|
68
|
+
|
|
67
69
|
NativeAnimatedNodesManager::NativeAnimatedNodesManager(
|
|
68
70
|
DirectManipulationCallback&& directManipulationCallback,
|
|
69
71
|
FabricCommitCallback&& fabricCommitCallback,
|
|
@@ -155,9 +157,28 @@ std::unique_ptr<AnimatedNode> NativeAnimatedNodesManager::animatedNode(
|
|
|
155
157
|
}
|
|
156
158
|
}
|
|
157
159
|
|
|
160
|
+
void NativeAnimatedNodesManager::createAnimatedNodeAsync(
|
|
161
|
+
Tag tag,
|
|
162
|
+
const folly::dynamic& config) noexcept {
|
|
163
|
+
if (isOnRenderThread_) {
|
|
164
|
+
LOG(ERROR)
|
|
165
|
+
<< "createAnimatedNodeAsync should not be called on render thread";
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
auto node = animatedNode(tag, config);
|
|
169
|
+
if (node) {
|
|
170
|
+
std::lock_guard<std::mutex> lock(animatedNodesCreatedAsyncMutex_);
|
|
171
|
+
animatedNodesCreatedAsync_.emplace(tag, std::move(node));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
158
175
|
void NativeAnimatedNodesManager::createAnimatedNode(
|
|
159
176
|
Tag tag,
|
|
160
177
|
const folly::dynamic& config) noexcept {
|
|
178
|
+
if (!isOnRenderThread_) {
|
|
179
|
+
LOG(ERROR) << "createAnimatedNode should only be called on render thread";
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
161
182
|
auto node = animatedNode(tag, config);
|
|
162
183
|
if (node) {
|
|
163
184
|
std::lock_guard<std::mutex> lock(connectedAnimatedNodesMutex_);
|
|
@@ -410,8 +431,6 @@ void NativeAnimatedNodesManager::removeAnimatedEventFromView(
|
|
|
410
431
|
}
|
|
411
432
|
}
|
|
412
433
|
|
|
413
|
-
static thread_local bool isOnRenderThread_{false};
|
|
414
|
-
|
|
415
434
|
void NativeAnimatedNodesManager::handleAnimatedEvent(
|
|
416
435
|
Tag viewTag,
|
|
417
436
|
const std::string& eventName,
|
|
@@ -849,6 +868,17 @@ void NativeAnimatedNodesManager::onRender() {
|
|
|
849
868
|
|
|
850
869
|
isOnRenderThread_ = true;
|
|
851
870
|
|
|
871
|
+
{
|
|
872
|
+
// Flush async created animated nodes
|
|
873
|
+
std::lock_guard<std::mutex> lock(animatedNodesCreatedAsyncMutex_);
|
|
874
|
+
std::lock_guard<std::mutex> lockCreateAsync(connectedAnimatedNodesMutex_);
|
|
875
|
+
for (auto& [tag, node] : animatedNodesCreatedAsync_) {
|
|
876
|
+
animatedNodes_.insert({tag, std::move(node)});
|
|
877
|
+
updatedNodeTags_.insert(tag);
|
|
878
|
+
}
|
|
879
|
+
animatedNodesCreatedAsync_.clear();
|
|
880
|
+
}
|
|
881
|
+
|
|
852
882
|
// Run operations scheduled from AnimatedModule
|
|
853
883
|
std::vector<UiTask> operations;
|
|
854
884
|
{
|
|
@@ -80,6 +80,9 @@ class NativeAnimatedNodesManager {
|
|
|
80
80
|
|
|
81
81
|
#pragma mark - Graph
|
|
82
82
|
|
|
83
|
+
// Called from JS thread
|
|
84
|
+
void createAnimatedNodeAsync(Tag tag, const folly::dynamic& config) noexcept;
|
|
85
|
+
|
|
83
86
|
void createAnimatedNode(Tag tag, const folly::dynamic& config) noexcept;
|
|
84
87
|
|
|
85
88
|
void connectAnimatedNodes(Tag parentTag, Tag childTag) noexcept;
|
|
@@ -203,6 +206,11 @@ class NativeAnimatedNodesManager {
|
|
|
203
206
|
Tag tag,
|
|
204
207
|
const folly::dynamic& config) noexcept;
|
|
205
208
|
|
|
209
|
+
static thread_local bool isOnRenderThread_;
|
|
210
|
+
|
|
211
|
+
std::mutex animatedNodesCreatedAsyncMutex_;
|
|
212
|
+
std::unordered_map<Tag, std::unique_ptr<AnimatedNode>>
|
|
213
|
+
animatedNodesCreatedAsync_;
|
|
206
214
|
std::unordered_map<Tag, std::unique_ptr<AnimatedNode>> animatedNodes_;
|
|
207
215
|
std::unordered_map<Tag, Tag> connectedAnimatedNodes_;
|
|
208
216
|
std::unordered_map<int, std::unique_ptr<AnimationDriver>> activeAnimations_;
|
|
@@ -26,7 +26,7 @@ RCTHermesInstance::RCTHermesInstance(CrashManagerProvider crashManagerProvider,
|
|
|
26
26
|
std::unique_ptr<JSRuntime> RCTHermesInstance::createJSRuntime(
|
|
27
27
|
std::shared_ptr<MessageQueueThread> msgQueueThread) noexcept
|
|
28
28
|
{
|
|
29
|
-
return
|
|
29
|
+
return facebook::react::HermesInstance::createJSRuntime(
|
|
30
30
|
_crashManagerProvider ? _crashManagerProvider() : nullptr, std::move(msgQueueThread), _allocInOldGenBeforeTTI);
|
|
31
31
|
}
|
|
32
32
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native",
|
|
3
|
-
"version": "0.83.0-nightly-
|
|
3
|
+
"version": "0.83.0-nightly-20250914-09a7e0a0f",
|
|
4
4
|
"description": "A framework for building native apps using React",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -159,13 +159,13 @@
|
|
|
159
159
|
},
|
|
160
160
|
"dependencies": {
|
|
161
161
|
"@jest/create-cache-key-function": "^29.7.0",
|
|
162
|
-
"@react-native/assets-registry": "0.83.0-nightly-
|
|
163
|
-
"@react-native/codegen": "0.83.0-nightly-
|
|
164
|
-
"@react-native/community-cli-plugin": "0.83.0-nightly-
|
|
165
|
-
"@react-native/gradle-plugin": "0.83.0-nightly-
|
|
166
|
-
"@react-native/js-polyfills": "0.83.0-nightly-
|
|
167
|
-
"@react-native/normalize-colors": "0.83.0-nightly-
|
|
168
|
-
"@react-native/virtualized-lists": "0.83.0-nightly-
|
|
162
|
+
"@react-native/assets-registry": "0.83.0-nightly-20250914-09a7e0a0f",
|
|
163
|
+
"@react-native/codegen": "0.83.0-nightly-20250914-09a7e0a0f",
|
|
164
|
+
"@react-native/community-cli-plugin": "0.83.0-nightly-20250914-09a7e0a0f",
|
|
165
|
+
"@react-native/gradle-plugin": "0.83.0-nightly-20250914-09a7e0a0f",
|
|
166
|
+
"@react-native/js-polyfills": "0.83.0-nightly-20250914-09a7e0a0f",
|
|
167
|
+
"@react-native/normalize-colors": "0.83.0-nightly-20250914-09a7e0a0f",
|
|
168
|
+
"@react-native/virtualized-lists": "0.83.0-nightly-20250914-09a7e0a0f",
|
|
169
169
|
"abort-controller": "^3.0.0",
|
|
170
170
|
"anser": "^1.4.9",
|
|
171
171
|
"ansi-regex": "^5.0.0",
|
|
@@ -59,6 +59,11 @@ function getInputFiles(appPath /*: string */, appPkgJson /*: $FlowFixMe */) {
|
|
|
59
59
|
!projectPath.includes('/Pods/') && // exclude Pods/Pods.xcodeproj
|
|
60
60
|
!projectPath.includes('/node_modules/'), // exclude all the xcodeproj in node_modules of libraries
|
|
61
61
|
)[0];
|
|
62
|
+
if (!xcodeproj) {
|
|
63
|
+
throw new Error(
|
|
64
|
+
`Cannot find .xcodeproj file inside ${appPath}. This is required to determine codegen spec paths relative to native project.`,
|
|
65
|
+
);
|
|
66
|
+
}
|
|
62
67
|
const jsFiles = '-name "Native*.js" -or -name "*NativeComponent.js"';
|
|
63
68
|
const tsFiles = '-name "Native*.ts" -or -name "*NativeComponent.ts"';
|
|
64
69
|
const findCommand = `find ${path.join(appPath, jsSrcsDir)} -type f -not -path "*/__mocks__/*" -and \\( ${jsFiles} -or ${tsFiles} \\)`;
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -58,4 +58,5 @@ export const Commands: NativeCommands = codegenNativeCommands<NativeCommands>({
|
|
|
58
58
|
export default (codegenNativeComponent<SwitchNativeProps>('Switch', {
|
|
59
59
|
paperComponentName: 'RCTSwitch',
|
|
60
60
|
excludedPlatforms: ['android'],
|
|
61
|
+
interfaceOnly: true,
|
|
61
62
|
}): ComponentType);
|