Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53996
## Summary
This diff makes changes to the `NativeAnimatedNodesManager` and `AnimationBackend` to initialize the backend closer to the `UIManager`.
## Changelog:
[GENERAL] [CHANGED] - initialize the backend in NativeAnimatedNodesManagerProvider
Reviewed By: sammy-SC
Differential Revision: D81138133
fbshipit-source-id: 5be0c8d5f5e3593bcd8111bbd1d0e90502a53a0d
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53994
# Summary
This diff introduces the Shared Animation Backend - a class that can be used by animation frameworks to schedule and run animation updates.
## Changelog:
[GENERAL] [ADDED] - AnimationBackend-itest.js AnimationBackend BUCK/CmakeLists
[GENERAL] [ADDED] - useSharedAnimationBackend feature flag
[GENERAL] [CHANGED] - make AnimatedNodesManager use the backend behind the flag
Reviewed By: zeyap, sammy-SC
Differential Revision: D80809364
fbshipit-source-id: dbfe273362410cdf2f9fc37d78adac7faf4cd118
Summary:
Following the [RFC](https://github.com/react-native-community/discussions-and-proposals/pull/925), this PR adds new `RCTDevMenu` configuration and extends `RCTReactNativeFactory` API for passing it to the particular `RCTHost`. The `RCTDevMenuConfiguration` includes:
- isDevMenuEnabled,
- isShakeGestureEnabled,
- areKeyboardShortcutsEnabled
## Changelog:
[IOS][ADDED] - Add new configuration for `RCTDevMenu`
<!-- Help reviewers and the release process by writing your own changelog entry.
Pick one each for the category and type tags:
[ANDROID|GENERAL|IOS|INTERNAL] [BREAKING|ADDED|CHANGED|DEPRECATED|REMOVED|FIXED|SECURITY] - Message
For more details, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests
Pull Request resolved: https://github.com/facebook/react-native/pull/53505
Test Plan:
Tested with different configurations on `RCTDevMenuConfiguration`:
<details>
<summary>Click to view code</summary>
```objc
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.reactNativeFactory = [[RCTReactNativeFactory alloc] initWithDelegate:self];
#if USE_OSS_CODEGEN
self.dependencyProvider = [RCTAppDependencyProvider new];
#endif
RCTDevMenuConfiguration *devMenuConfiguration = [[RCTDevMenuConfiguration alloc] initWithDevMenuEnabled:true shakeGestureEnabled:false keyboardShortcutsEnabled:false];
[self.reactNativeFactory setDevMenuConfiguration:devMenuConfiguration];
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
[self.reactNativeFactory startReactNativeWithModuleName:@"RNTesterApp"
inWindow:self.window
initialProperties:[self prepareInitialProps]
launchOptions:launchOptions];
[[UNUserNotificationCenter currentNotificationCenter] setDelegate:self];
return YES;
}
```
</details>
Run helloworld:
<img src="https://github.com/user-attachments/assets/16c35176-6fbe-498c-96fd-a0fe988a5e3c" alt="hello-world-screenshot" width="300">
Reviewed By: cipolleschi
Differential Revision: D81684275
Pulled By: coado
fbshipit-source-id: 500e170c93df25949de433970442d20c442be7f2
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53998
As the previous few diffs, JSI `isArray` API should follow
`Array.isArray` from the JS spec.
The current implementation does not consider Proxy objects, only Array
exotic objects.
Changelog: [Internal]
Reviewed By: lavenzg
Differential Revision: D83391784
fbshipit-source-id: 6db8e5a48458a1aa57006fb0747f62ec78efa675
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53991
As part of D83474751 to migrate Store from arvr to xplat we discovered that ktx images are not setup correctly in xplat. Adding support for it in flow and jest
Changelog: [Internal]
Reviewed By: javache
Differential Revision: D83562581
fbshipit-source-id: 8c7205417dc24ca2d48a2e2fa1ca7dea40504c18
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53984
Changelog: [ANDROID][CHANGED] - Request layout on configuration change only when the font scale has changed
Wraps call to `requestLayout` in a condition to only run layout when the font scale has changed to prevent it from executing in response to other configuration changes.
Reviewed By: Abbondanzo
Differential Revision: D83546632
fbshipit-source-id: 41a5199dd2ef72b8f6257637c1d35d4a790ea006
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53982
This diffs adds specific `toDynamic` conversions for props defined as arrays holding primitive types. This fixes the serialization of `std::vector<Float>` that was failing to correctly convert to a `folly::dynamic` type when using Props 2.0.
Changelog: [Internal]
Reviewed By: Abbondanzo
Differential Revision: D83520605
fbshipit-source-id: 80a6ce2b3a265601f945ff3b76840c04e46aacdc
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53979
This reverts a previous change that modified how focus behavior is handled in JavaScript. That change caused hierarchy rows to no longer be focusable, either manually or programmatically as they were before, which in turn broke arrow key navigation in entity lists. Reverting the change restores the expected focus behavior and re-enables proper arrow key functionality within entity lists.
Changelog: [Internal]
Differential Revision: D83390685
fbshipit-source-id: 165567eceedce5d0a2e664a9ef3070d5a2bf9b67
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53978
Inconsistency between the previous and old version of `processTransform` - if frameSize is 0, the transform was being ignored, which is not correct when considering a fixed transform origin and a rotation animation for example. Instead, always apply the transform origin if it's set.
Changelog: [Android][Fixed] Fixed representation of transforms when view is originally zero-sized
Reviewed By: mdvacca
Differential Revision: D83469083
fbshipit-source-id: e9ae1500f64c700708edb00b2d5871e3f224fb07
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53968
This diff reverts D82781491
(The context such as a Sandcastle job, Task, SEV, etc. was not provided.)
Depends on D82781491
Changelog: [internal]
Reviewed By: SamChou19815
Differential Revision: D83442434
fbshipit-source-id: bd570564ee22d57bd7a3ca7f6990230de3e5ac4e
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53845
Adding a feature flag controlling the outset ratio set on the culling context frame. This feature flag value will add an outset on the width and height calculated by multiplying these with the provided ratio value. This will offset each side of the frame, maintaining the center of the frame at the same location.
This outset ratio helps mitigate async scroll blanking and focus handling on host platforms.
Changelog: [Internal]
Reviewed By: mdvacca
Differential Revision: D82684027
fbshipit-source-id: 3d1aaf680c5896fd4bb992b272b650ab2c097905
Summary:
# What
Moving Store from `arvr/js` to `xplat/js`.
This will enable Store to use xplat modern infra. Being on arvr/js legacy infra has created many problems [over the years](https://fb.workplace.com/groups/storecore/posts/2344707442611890/?comment_id=2345657702516864). Examples:
**2025**: https://fb.workplace.com/groups/storecore/permalink/2344707442611890/
**2024**: https://fb.workplace.com/groups/oculusjs/permalink/3366314690341563/
**2023**: https://fb.workplace.com/groups/xplatreact.engineering/permalink/730125568732098/
# How
## Previous Diff
* Remove usage of the legacy `react-router-3`. We don't want to carry this as a dependency to xplat/js.
## This Diff
This diff is the combination of several diffs (created to facilitate reviewing):
1. - D82581768 - Just move files from arvr/js/apps/Store to xplat/js/RKJSModules/public/HzStoreVR (Except for the index file and some mockUtils)
2. - D82581767 - Setup getConfig.js to generate a single BUCK for HzStoreVR and remove circular dependencies
3. - D82581769 - Fix location/import of assets
4. - D82581766 - Fix relay imports that were not using Haste
5. - D82664586 - Remove usage of old url module
6. - D83156829 - Fix buck: run js1 build buckfiles and build_and_run.sh
7. - D82844768 - Make arvr/js tests run with xplat Store
8. - D83005059 - Fix Flow errors
9. - D83259512 - Delete duplicated test files to make flow happy
10. - D83005098 - Fix Relay config for new Store VR location in xplat
11. - D83005073 - Enable React Forget on new HzStoreVR directory
12. - D83345573 - Fix arc lint -a
13. - D83403188 - Fix relay prefetch queries
## Next diffs
* Migrate tests to xplat jest config (renaming from *-rntest.js to *-test.js)
* Migrate other source code like arvr/js/libraries/store
## Open Source PR
For the change to RN open source .flowconfig to add .ktx image support: https://github.com/facebook/react-native/pull/53964
Changelog: [Internal]
Reviewed By: Tom910, mullender
Differential Revision: D82781491
fbshipit-source-id: 5ce6433916e5b144965e8906005e2e26fdcfcc95
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53945
ReactVirtualTextViewManager is an internal legacy architecture class that's unused, we are deleting it
changelog: [internal] internal
Reviewed By: alanleedev
Differential Revision: D83186611
fbshipit-source-id: 323c77077ab91ffec35af8e4c12da4bdf13fa233
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53944
YogaNodePool is an internal API used only by LegacyArchitecture of React Native Android, which is unused
This diff deletes YogaNodePool from the codebase
changelog: [internal] internal
Reviewed By: alanleedev, cortinico
Differential Revision: D83184441
fbshipit-source-id: 7c358985d9f19b38c28cca7fb0acf9322e97d87c
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53958
Adds a dev menu option to enable/disable the overlay, in case devs want to screenshot/record without disabling it at buildtime.
Changelog: [Internal]
Reviewed By: huntie
Differential Revision: D83293591
fbshipit-source-id: 3564b83a279db296d1cd22a8e8a83876cc705dbd
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53957
There are cases where the overlay can get enabled multiple times, creating more than one view. This change no-ops enabling if the overlay is already enabled and just uses enable/disable for showing/hiding the view.
{F1982272836}
Changelog: [Internal]
Reviewed By: hoxyq
Differential Revision: D83275253
fbshipit-source-id: 4b468171a582e134071875f718c66d1659d67782
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53961
Changelog: [Internal]
Fixed a bug in TaskDispatchThread. To understand bug, let me show an example. The task is scheduled to run after several seconds. It reaches loopCv_.wait_until() and waits there. There are 2 bad scenario:
1. wait_until spuriously wakes up and async task runs even before its scheduled time
2. new task is added with runSync(). New task gets added to the queue and loopCv_ is notified. Async task will run before its scheduled time and even worse queue_.pop() will remove sync task. Therefore runSync will be blocked for forever.
To fix this bug, we need to add `continue` after wait_until().
Also I added new test to prevent this bug in future.
Reviewed By: rshest
Differential Revision: D83345047
fbshipit-source-id: 37962613a123a123c0e110426ae782effe5a81c1
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53867
`react-native/metro-babel-transformer` implements `getCacheKey` for Metro, but does not vary the cache key on changes to `react-native/babel-preset`, one of its dependencies, leading to false positive cache hits (changes not being reflected).
This is particularly a problem in development, although it potentially also leads to issues in the unusual case that `react-native/babel-preset` is updated via npm, but no other package is.
This adds a `getCacheKey` to `react-native/babel-preset` and incorporates it into `react-native/metro-babel-transformer`'s `getCacheKey`. It's based on `package.json#version` in production and a hash of package contents in development (`version.endsWith('-main')`).
Changelog:
[General][Fixed] Invalidate transform cache when `react-native/babel-preset` is updated
Reviewed By: huntie
Differential Revision: D82893894
fbshipit-source-id: 9bbc034eaf68ee0e5b3078fb2fe8f30caa7f11c9
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53959
These data-types are super common in React Native, and the anonymous inner classes add significantly to the GC workload we see. For ReadableMap this means we can save 6 additional object allocations for each LazySynchronizedImpl and the lambda that's passed in to it. On synthetic benchmarks this seems to improve core operations around ~10%.
Changelog: [Internal]
Reviewed By: lenaic
Differential Revision: D83245864
fbshipit-source-id: 69b314a1f52a32375b5e1f591555f50bfbc31843
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53953
For TurboModule registration, we register custom / app-specific TurboModules before core TurboModules to ensure that app-specific module overrides are preferred over core / default behaviors.
This provides a similar behavior for Fabric component descriptor registration.
## Changelog
[Internal]
Reviewed By: alanleedev
Differential Revision: D83273376
fbshipit-source-id: fd0fb5f10d2bc29839ae554f0e3cfc18d7957848
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53952
In React Native Android, you can technically override core components like ScrollView to add additional props and behaviors, but doing so in the new architecture requires ensuring that these props are tracked in the C++ props object.
This change unseals ScrollViewProps so they can be overridden in (rather rare and generally unsupported) cases where you need to customize ScrollView behaviors for a specific app.
## Changelog
[Internal]
Reviewed By: Abbondanzo
Differential Revision: D83268457
fbshipit-source-id: d1d895e9f060dcf94bf82538a33bf5f2fbb135d7
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53792
This validation infra served us well, but it's no longer needed.
All the legacy architecture classes have been identified and deprecated. And in the next major release, we will simply remove them.
Changelog: [Internal]
Reviewed By: cipolleschi
Differential Revision: D82470292
fbshipit-source-id: 44b58e63b7aca4fa22ac6b891275417bf1add8d1
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53823
Let's just use the same flag to compile out everything. I don't think we'll need the utility of separate flags.
Reviewed By: fkgozali
Differential Revision: D82476933
fbshipit-source-id: 1b5fbfad7d54e0af7db5459772b3e7a8472c1eb1
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53943
Changelog: [Internal]
Thread join should happen only during TaskDispatchThread dtor, otherwise if quit is called on the same thread (thread_), then thread_ will get detached, which can lead to use of already deleted fields (queue_, running_) of TaskDispatchThread.
But we also need to make sure that on quit() call, loop is getting stopped, otherwise in loop, already running task will use already deleted fields of captured object. If quit() is called as task on thread_, then there is no need to wait for future because loop will organically end since running_ is false.
Reviewed By: rshest
Differential Revision: D83044012
fbshipit-source-id: a2da97a89093c47c64b693e3c9e5d6f7297c038e
Summary:
Fixes https://github.com/facebook/react-native/issues/53893
The size should be of type string (large or default) . Typescript says number
## Changelog:
<!-- Help reviewers and the release process by writing your own changelog entry.
Pick one each for the category and type tags:
[ANDROID|GENERAL|IOS|INTERNAL] [BREAKING|ADDED|CHANGED|DEPRECATED|REMOVED|FIXED|SECURITY] - Message
For more details, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests
-->
[GENERAL][FIXED] Fixed Types in Refresh control
Pull Request resolved: https://github.com/facebook/react-native/pull/53907
Test Plan: N/A
Reviewed By: javache
Differential Revision: D83161286
Pulled By: arushikesarwani94
fbshipit-source-id: 4e557bc3780f297551b913c5c763c369cf3e374c
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53937
Changelog: [General][Fixed] only remove the Fast Refresh "Refreshing..." toast when all bundles being loaded finished loading.
Reviewed By: huntie
Differential Revision: D83246895
fbshipit-source-id: f02fac9fe16b307ae4b36f09bc88f5261c590b15
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53936
Align with other mount items and make it easier to identify in memory traces.
Changelog: [Internal]
Reviewed By: lenaic
Differential Revision: D83241794
fbshipit-source-id: 9df1523e265e560c15f93bad8cd91a651bc5a4e2