Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41623
`static` fields require additional code to ensure the field is only ever initialized once. We already have a static "default props" field in the shadow node, so let's reuse that as much as possible.
Changelog: [Internal]
Reviewed By: rshest
Differential Revision: D51547638
fbshipit-source-id: e4957ffb0f9352847b8cd8dc3a010dcfac8be699
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41628
# Changelog:
Even though `onClick` is used on Android (e.g. via Pressability), the fact of having the handler registered didn't get through to the C++ side on New Architecture, because of being filtered out via the corresponding static view config.
As the result, there was no way to know on C++ side whether the corresponding event handler is registered for the view or not. Dynamic updates to the prop also wouldn't correctly propagate to C++, which may be a problem if a view gets e.g. the handler dynamically added.
Reviewed By: javache
Differential Revision: D51551255
fbshipit-source-id: 0783f5a27c7250f83fb357173bbe5be6213277e5
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41613
Changelog: [Internal]
We were keeping ref in the AppContainer's state before migrating these components to functions.
We actually need a real ref here, so we can use `useImperativeHandle` on it later. These refs will be passed as an argument for DebuggingRegistry subscription, whichi will call them on all necessary AppContainers to highlight required components.
Reviewed By: javache
Differential Revision: D51536772
fbshipit-source-id: d49035874ce3c9b1acf08d5ab666886f68e6f40e
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41562
Changelog: [Internal]
We will use this native component as a single layer for drawing debugging information: both for trace updates and inspected components from React DevTools.
Reviewed By: javache
Differential Revision: D51470789
fbshipit-source-id: 6c4633d2b70c2c2635a2bbfcd7adf1c727b73585
Summary:
Several deprecation warning messages related to components that were removed from `react-native` were outdated.
Some repositories have been moved, some packages were renamed/re-published under new names. A couple **never existed** (`react-native-community/segmented-checkbox` and `react-native-community/react-native-image-picker`).
This updates all messages to include links to the latest repositories and references to npm packages.
Because `react-native-community/art` is deprecated I've also slightly amended the message with the suggestion from its [repo readme](https://github.com/react-native-art/art#deprecated---this-package-is-deprecated-if-you-need-a-similar-package-please-consider-using-react-native-svg).
## Changelog:
[GENERAL] [FIXED] - Update pkg/repo names in deprecation messages
Pull Request resolved: https://github.com/facebook/react-native/pull/41618
Test Plan: No code change, just documentation/text.
Reviewed By: cipolleschi
Differential Revision: D51546345
Pulled By: cortinico
fbshipit-source-id: 5d7176a70d94c8b1e8111f4d84fba89eacde456a
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41621
Currently, if you have a dependency that is alphabetically smaller than `app`, it's evaluation will happen before `app`.
This means that the namespace auto-discovery and the JVM toolchain configuration won't be working and the project will fail to buid.
This fixes it by introducing a root-project Gradle Plugin that takes care of enforcing the evaluation order on the `app` project.
Fixes#41620
Changelog:
[Android] [Fixed] - Fix projects being broken on dependencies starting with `a..`
Reviewed By: huntie
Differential Revision: D51547294
fbshipit-source-id: 65df7149548b7087dd8928e556fb803b3baf7b79
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41557
The `configFileDir` CLI argument is used to help to find paths to the 3rd party dependencies of the app. Since we only care about dependencies listed in the root `package.json`, we can use `node` resolution instead of having to construct paths manually. In that case `configFileDir` becomes redundant.
Changelog: [iOS][Breaking] - Delete configFileDir CLI argument.
Reviewed By: cipolleschi
Differential Revision: D51303793
fbshipit-source-id: 46cb61197ddf51515af634c8fc6b85a8d218c51e
Summary:
This PR addresses the problem raised in the https://github.com/facebook/react-native/issues/41004 issue.
The current logic is that `selectionColor` on iOS sets the color of the selection, handles, and cursor. On Android it looks similar, while it doesn't change the color of the handles if the API level is higher than 27. In addition, on Android there was an option to set the color of the cursor by `cursorColor` prop, but it didn't work if the `selectionCursor` was set.
## 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] [ADDED] - Make same behavior of the `selectionColor` prop on Android as iOS
[ANDROID] [ADDED] - Introduced `selectionHandleColor` as a separate prop
[ANDROID] [CHANGED] - Allowing `cursorColor` and `selectionHandleColor` to override `selectionColor` on Android
Pull Request resolved: https://github.com/facebook/react-native/pull/41092
Test Plan:
Manual tests in rn-tester:
### `selectionColor` same as iOS, sets selection, handles and cursor color
_There is a way to set only "rectangle" color by setting other props as null_

### `selectionHandleColor`

### `cursorColor`

Reviewed By: NickGerleman
Differential Revision: D51253298
Pulled By: javache
fbshipit-source-id: 290284aa38c6ba0aa6998b937258788ce6376431
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41609
Aggregate edges will no longer be exposed. Inline debugStringConvertibleItem string printing for it.
Previously included in D50998164
Changelog:
[Internal]
Reviewed By: joevilches
Differential Revision: D51510790
fbshipit-source-id: aaabaa4fdd899bd9c602b9a5ab5dd35265c7269b
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41611
Aggregate edges will no longer be exposed. Inline the convertRawProp parsing functions for it.
This is a little bit more code, but subjectively easier to reason about.
Previously included in D50998164
Changelog:
[Internal]
Reviewed By: joevilches
Differential Revision: D51510562
fbshipit-source-id: 30440e19422a3a3fb49a754b5ecd8279ce1521a2
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41612
We never use the position edges for Yoga style. We should not keep extra props, and instead just parse directly into the Yoga style.
Previously included in D50998164
Changelog: [Internal]
Reviewed By: joevilches
Differential Revision: D51508217
fbshipit-source-id: ff28cf7168446068b10901fbba258414b561f07f
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41614
Fixes https://github.com/facebook/react-native/issues/41545
SafeAreaView works by adding padding in order to shift content out of the safe area. This may change the layout dimensions of the SafeAreaView, in turn effecting its safe area insets.
This can cause layout results to change, which in turn changes the inset value. Because of this, there is a tolerance, where safe area inset changes do not trigger a new update.
Yoga is instructed to round layout dimensions to the closest physical pixel, so a very small difference in layout may result being off by about a pixel. Right now the tolerance is exactly one physical pixel, and if there is FP error here, we may not pass the test, and start oscillating with different layout values.
After changing affected ShadowNode order to always be root-first, the first call to set the frame of the `SafeAreaView` happens when a non-zero-sized RootView is present, which I think may lead to a safe area inset update communicated that wasn't before? Or other cosmic butterflies. Layout rounds to one physical pixel in difference, and our tolerance is `0.00001` dips off (not helped that 1/3 screen scale cannot be represented as decimal, even without FP error).
This adds a small tolerance beyond just the pixel boundary, matching the logic in Fabric, which seems to resolve the issue.
Changelog:
[iOS][Fixed] - FP Tolerance in iOS Paper SafeAreaView debouncing
Reviewed By: philIip
Differential Revision: D51539091
fbshipit-source-id: 88bddc38c7cd8d93feef5f12da64b124af22f46d
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41599
Changelog: [iOS][Breaking]
this is not used in our framework, delete. feel free to fork this implementation if you are using it or interested in using it
Reviewed By: cipolleschi
Differential Revision: D51516680
fbshipit-source-id: 4ca23a5b78bf18a84ea0ab4fe16419db7aea03d9
Summary:
Adding `initialize()` to FabricUIManager just as was done by JSIModule
Without this change switching to UIManagerProvider would cause the UI to be Frozen and the events not correctly registered.
Pull Request resolved: https://github.com/facebook/react-native/pull/41594
Reviewed By: javache
Differential Revision: D51456979
fbshipit-source-id: 8d97533340a88ec6bb2bf0f257b6acfaa59da471
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41466
## Context
In open source, all apps use the same turbomodulemanager delegate (i.e: the default delegate).
This diff introduces the buck infra that makes the oss default delegate work for meta apps.
Concretely, we are going to make React Native use the same delegate for **all** Meta apps.
Each Meta app will:
1. At build time, generate a unique TMProvider map
2. At app init time, initialize the default delegate with the TMProvider map.
## Implementation
**Step #1:** At build time, generate a unique TMProvider map
**Insight:** Buck genrules can accept, as input, the output of a buck query.
So, here's how we get this done:
1. Buck query (i.e: input to Genrule): Given the app's deps, query all the schemas in the app.
2. Genrule: Read the schemas to generate the TMProvider map. The TMProvider map will also contain **all** the app's C++ module codegen.
Concretely:
1. This diff introduces a macro: rn_codegen_appmodules(deps).
2. rn_codegen_appmodules(deps) generates appmodules.so, which contains the TMProvider map.
**Step #2:** At app init time, initialize the default delegate with the TMProvider map.
This is how we'll initialize the DefaultTurboModuleManagerDelegate:
1. DefaultTurboModuleManagerDelegate will load appmodules.so during init.
2. When loaded, appmodules.so will assign the code-generated TMProvider map to DefaultTurboModuleManagerDelegate.
## Impact
This should allow us to:
1. Get one step closer to getting rid of the `js1 build turbomodule-manager-delegates --target <app>` script
3. Remove the TurboModuleManagerDelegate from React Native's public API. (Because we use one delegate for all React Native apps in Meta and OSS)
Changelog: [Internal]
Reviewed By: mdvacca
Differential Revision: D50988397
fbshipit-source-id: 0ca5dec14e2dae89ec97f5d39a182c7937c5c7bf
Summary:
Bitfield enums are not sequential, so use of these functions on these enums would be invalid.
I looked at whether we could trivially move `bitCount` to template based on `ordinalCount`. `bitCount` must be constexpr, since we use it directly as a bit-field size constant. `log2` and `ceil` to be constexpr, which isn't here until C++ 26.
Reviewed By: javache
Differential Revision: D51518899
fbshipit-source-id: 256f15bbed517be6f90bf43baa43ce96e9259a71
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41555
This diff splits `generateNativeCodegenFiles` into two simpler steps: `generateSchemaInfos` and `generateCode`. `SchemaInfo` is a (library, schema) pair, it is convenient for further transformations.
Changelog: [Internal]
Reviewed By: cipolleschi
Differential Revision: D51204077
fbshipit-source-id: 8a1f585a79a2a0241b544a8a131b59250d803e2e
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41554
This diff removes inefficiency where we first write schema to disk in `combine-js-to-schema.js`, and then read it from disk in `generate-specs-cli-executor.js`. With this change we can just pass it as an argument.
Changelog: [Internal]
Reviewed By: cipolleschi
Differential Revision: D51161162
fbshipit-source-id: 35d14ca3e53e4bf999520c635c66909c20081096
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41534
This diff deletes calls to `node` from `generate-artifacts-executor.js`, and replaces them with normal `requires` of JS sources.
This is a squashed version of (D51116291 ... D51158799).
The following sequence of changes has been made:
1. Require and directly invoke `generate-specs-cli-executor` instead of using `node`.
2. Use `codegen-util` to get `RNCodegen` in `generate-provider-cli.js`.
3. Use `RNCodegen` directly instead of using `node`.
4. Move all implementation code from `combine-js-to-schema-cli.js` to `combine-js-to-schema.js`.
5. Decouple building the codegen from getting the codegen CLI.
6. Use `combine-js-to-schema` directly instead of using `node`.
7. Delete unit test that was testing node invocation.
8. Delete `nodeBinary` argument form `generate-codegen-artifacts.js` and its callsites.
Changelog: [Internal]
Reviewed By: cipolleschi
Differential Revision: D51158845
fbshipit-source-id: 5e039801c8045a42349f7cb6ca28e2df24634589
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41603
changelog: [internal]
`ShadowNode::IdentityTrait` was already a thing. Let's make it available in ConcreteComponentDescriptor.
Reviewed By: rshest
Differential Revision: D51471666
fbshipit-source-id: 7919a9b7238d766ee3913a5ab239bf254fab0996
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41589
This is a cleanup diffs that removes some of the usages of RCT_NEW_ARCH_ENABLED.
Now that we are shipping all the pods, there is no need to conditionally compile-out part of the codebase depending on whether the new architecture is running or not.
This change will not alter the behavior of the app.
## Changelog:
[iOS][Breaking] - Remove some usages of RCT_NEW_ARCH_ENABLED. The change should be transparent BUT some **Swift** libraries might get broken by this change.
Reviewed By: dmytrorykun
Differential Revision: D51498730
fbshipit-source-id: c83416480eea1f7bbc55f72c31e7b69ad0e9e01a
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41588
This change always installs all the Pods for both architecture.
This unify the behavior between iOS and Android.
## Changelog:
[Internal] - Always install all the pods
## Facebook:
The inly four pods that are changed when flipping between the new and the old arch with RNTester are:
- MyNativeView
- NativeCxxModuleExample
- React-RCTAppDelegate
- ScreenshotManager
The only change there is the RCt_NEW_ARCH_ENABLED flag being set or not in those pods
Reviewed By: dmytrorykun
Differential Revision: D51494498
fbshipit-source-id: 4cafdef4a4c2b86381067373aed27ed18524e4be
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41579
This change remove a flag that is unused.
## Changelog
[Internal] - Remove unused Flag
Reviewed By: dmytrorykun
Differential Revision: D51493765
fbshipit-source-id: f8cbce991d80d4f51363cdd4f379e6b214b2b2df
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41561
The RN_FABRIC_ENABLED has been deprecated and superseded by the RCT_NEW_ARCH_ENABLED for a while now.
This change removes it, from the codebase as now we always have the Fabric pod available to the codebase.
## Changelog
[Internal] - Remove RN_FABRIC_ENABLED flag
Reviewed By: dmytrorykun
Differential Revision: D51468332
fbshipit-source-id: 6b2fc554e6bf5ac748b9e45d7c14f9ba9b57820c
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41595
Instead of having to select between Enable/Hide the Element Inspector String, let's just use "Toggle".
Changelog:
[Internal] [Changed] - Update Element Inspector string to "Toggle"
Reviewed By: cipolleschi
Differential Revision: D51503403
fbshipit-source-id: 2ad24df8324eb789b0016fe7ac5d439cba6f5952
Summary:
This diff is reverting D51346658
D51346658: [RN][Android] Handle all incoming Inspector messages on main thread, downgrade some errors to logs by motiz88 has been identified to be causing the following test failure:
Tests affected:
- [xplat/endtoend/jest-e2e/apps/facebook_xplat/ReactNativeTTRCTester/__tests__/ReactNativeTTRCTester-storeOrNetworkWithoutCachedContent-android-e2e.js](https://www.internalfb.com/intern/test/281475019301167/)
Here's the Multisect link:
https://www.internalfb.com/multisect/3539088
Here are the tasks that are relevant to this breakage:
We're generating a revert to back out the changes in this diff, please note the backout may land if someone accepts it.
If you believe this diff has been generated in error you may Commandeer and Abandon it.
bypass-github-export-checks
Changelog: [Internal]
Reviewed By: motiz88
Differential Revision: D51512872
fbshipit-source-id: 8bc8e12b651f91a6f74243a0a85fca7fd1953bdb
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41598
This code merges native, Android provided theme text input padding, with Yoga style. We are removing operations on all edges as aggregate, so this replaces that.
This was previously part of D50998164
Changelog: [Internal]
Reviewed By: javache
Differential Revision: D51503493
fbshipit-source-id: c6e2f3183a05861745fdd8f044d12e3dd8205804
Summary:
X-link: https://github.com/facebook/yoga/pull/1475
Pull Request resolved: https://github.com/facebook/react-native/pull/41568
Removes cases where we rely on comparing composite of Yoga edges, since we are removing that internal API (public API is already one at a time). Extracted from D50998164, with more sound facility for looping through edges.
Changelog: [Internal]
Reviewed By: javache
Differential Revision: D51478403
fbshipit-source-id: 162170b91345ff86db44a49a04a2345f0fbd0911
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41590
Causing a small leak while we wait for the surface to be fully destroyed.
Changelog: [Internal]
Reviewed By: fabriziocucci
Differential Revision: D51499256
fbshipit-source-id: 8f9e65898dcb9e0261502028874378ec9cc0f3fc
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41582
# Changelog:
This will allow to have custom `ImageManager` implementations on new platforms.
Reviewed By: christophpurrer
Differential Revision: D51495143
fbshipit-source-id: bbd03bdad1b87fd53e70a886f1fdc74f371987c8
Summary:
Changelog: [Internal]
* Updates `InspectorPackagerConnection.java`, `DevServerHelper.java` and `DevSupportManagerBase.java` to perform all connection management and message dispatching for the inspector socket on the main thread. This is in support of a new CDP implementation in React Native that will strictly assume it's called on the main thread (thus avoiding the need for explicit locking in many places).
* Downgrades JSON parsing errors and duplicate connection errors from exceptions to logs, matching the [iOS implementation](https://github.com/facebook/react-native/blob/main/packages/react-native/React/Inspector/RCTInspectorPackagerConnection.m).
Reviewed By: javache
Differential Revision: D51346658
fbshipit-source-id: 3d0d5588a824c1b28da5499ef9d040998a941288
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41581
# Changelog:
There was nothing platform-specific in `ImageRequest` implementation, defined on iOS, so might as well share across platforms.
Reviewed By: christophpurrer
Differential Revision: D51495144
fbshipit-source-id: ef15c5c8c6b07c1a87ca83eb15b5997ba703fbcc
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41567
Sometimes `createNode` calls into is throwing `std::out_of_range_error` or `std::length_error` in response to both vector and string operations.
Instead of propagating `std::logic_error`, which indicates a defect in native code, terminate, so we can get an actionable native stack trace.
`createNode` and `cloneNode` also both ocasionally see `bad_alloc`, but this is not usually an instance of a defect at the allocation-site, and throwing would be more graceful.
Changelog:
[Internal]
Reviewed By: javache
Differential Revision: D51463600
fbshipit-source-id: 870cbf3538d8ccbc01ded2868781a63ba12a941c
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41548
`JSEngineInstance` is a misnomer - this interface actually creates `jsi::Runtime`s and doesn't represent an "instance of a JS engine". This diff renames it to `JSRuntimeFactory`.
Changelog: [Internal]
Reviewed By: huntie, arushikesarwani94
Differential Revision: D51447882
fbshipit-source-id: e118fe5c202607500a62d8e15afec088c4946969
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41577
# Changelog:
[Internal]-
The change is equivalent in terms of API, however this makes it work nicer with C++ codegen and easier to use with a pure C++ implementation of the native module.
Reviewed By: GijsWeterings
Differential Revision: D51493466
fbshipit-source-id: bf9105670ae56a191ab2e6c8cfb794c2fecd4809
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41533
This diff removes `configFilename` and `configKey` arguments from iOS codegen CLI. Now we always expect them to be `package.json` and `codegenConfig` respectively.
## Motivation
The existing implementation expects every library to have its codegen config in a file with `configFilename` name. `configFilename` is passed as a single CLI argument and applied to every app dependency. I.e. if `configFilename = codegen.config.json` then we expect to find this file in *every* third-party library. That is weird expectation. This customisation option is unsound. Same with `configKey`. It is much simpler to just stick with convention that `configFilename = "package.json"` and `configKey = "codegenConfig"`.
Changelog: [General][Breaking] - Delete `configFilename` and `configKey` arguments from iOS codegen CLI. Now we always expect them to be `package.json` and `codegenConfig` respectively.
Reviewed By: cipolleschi
Differential Revision: D51256486
fbshipit-source-id: fe190b514be7c4e489c7be01294958cf3254602a
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41531
This diff converts in-out `libraries` argument of codegen library lookup functions to a normal return value. This makes these functions simpler to reason about, and simplifies subsequent refactors.
Changelog: [Internal]
Reviewed By: cipolleschi
Differential Revision: D51111416
fbshipit-source-id: 12b5dda4d326e3f1c866c16f7bcd17080be54b58
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41503
Changelog: [Internal]
Updates RCTInspectorPackagerConnection to dispatch all messages on the main thread (which is SocketRocket's default behaviour). This is in support of a new CDP implementation in React Native that will strictly assume it's called on the main thread (thus avoiding the need for explicit locking in many places).
Reviewed By: javache
Differential Revision: D51346659
fbshipit-source-id: c529b0aea97f7732cea58a4dc66993c5c8259958
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41570
## Changelog:
[Internal] -
This fixes a subtle problem whereas an update to `Image.source` (or `Image.src`) prop on JS side may not end up getting propagated to the C++ side, with New Architecture.
As the result, this can lead to some weird corner cases, whereas e.g. layout doesn't update after the image's size changes.
Differential Revision: D51479305
fbshipit-source-id: 72afb7dfd0ba32f96af4f9a6564b3b8121a597c7