Skip to content

feat: merge 0.85-merge into 0.84-merge - #3033

Open
Saad Najmi (Saadnajmi) wants to merge 595 commits into
microsoft:0.84-mergefrom
Saadnajmi:0.85-merge
Open

Saad Najmi (Saadnajmi) wants to merge 595 commits into
microsoft:0.84-mergefrom
Saadnajmi:0.85-merge

Conversation

@Saadnajmi

@Saadnajmi Saad Najmi (Saadnajmi) commented Jul 17, 2026

Copy link
Copy Markdown
Collaborator

Current release stack

Depends on #3030; follow the 0.84 release checkpoint. #3034 is the 0.85 release; #3058 continues mainline.

Validation and backups

The branch-specific repaired source passed hardened immutable installation, constraints, and its complete release-helper selection. The selected 18-head packet records 1,406 passing helper tests. Exact source-tree equivalence is used for rewritten endpoints where applicable; the two changed linear RC checkpoints were tested separately.

Native/API evidence retains its recorded scope. The SwiftPM and RNTester repairs have six focused native build passes. Public stable versions and runtime/API contents were preserved except for the independently reviewed SwiftPM destination repair where applicable.

Public-registry lock correction passed all 18 hosted generation, hardened immutable, constraints, and metadata-audit jobs in run 35769816507. Only equivalent executable-path spelling changes are permitted; dependency versions, checksums, and ranges are unchanged. The previous functional test results remain applicable to this metadata-only correction. Fresh GitHub CI and review remain required. Previous heads are preserved on the same repository under backup/pre-ci-repair-20260922/<original-branch> and backup/pre-public-registry-20260922/<original-branch>; local complete-history bundles were verified as well.

The 0.87 PR sequence is one first-parent path: #3037#3104#3105#3106#3100#3101#3107. The redundant #3102/#3103 reviews are consolidated into #3105.

This section supersedes earlier stack order, source identity, and validation-status notes below.


Summary

Merge the exact React Native 0.85 fork point, b5c815c1ca794ae5d1c0cb8b23e94418b7a4b140, into Microsoft 0.84-merge at 2777fb703e8416d44eff7f5b5d29b498040a8883.

The recreated mechanical merge is 49d78710e7a97fbbd0280ccd956d5e9d0e35afe1, with those exact first and second parents. The Facebook 0.85-stable tip 2049278a5a76fbebf27b2b86f58ce865b673ba14 is intentionally excluded (59 commits after the fork point).

This branch should remain based on 0.84-merge until #3030 lands, then be retargeted to main.

Conflict resolution

The initial merge produced 83 conflicted paths / 290 conflict hunks / 249 terms / 7 deletion conflicts. Every path is represented exactly once below and every hunk is represented in the external per-hunk-resolution-ledger.json.

Area Upstream change macOS decision
Workspaces/Jest Extracted @react-native/jest-preset and updated the 0.85 dependency graph. Added strict pnpm linkage, RNM module mapping, macos haste resolution, and AccessibilityInfo parity.
Public JS/events Modernized Flow and event declarations. Preserved drag, auxiliary-click, double-click, keyboard, accessibility, and RNM virtualized-list APIs without duplicate declarations.
Apple components Updated UIKit, lifecycle, VirtualView, text/input/image, and availability behavior. Combined with RCTUIKit/AppKit, fixed image orientation and display-link ownership, and made iOS/visionOS/macOS builds pass.
Legacy interop Moved implementation under platform/ios. Retained the macOS coordinator while compiling the new descriptor and exactly one coordinator implementation per platform.
SwiftPM/CocoaPods Added 0.85 sources and platform targets. Preserved source swapping and duplicate-source avoidance; regenerated RNTester CocoaPods metadata.
Hermes Defaulted to Hermes V1. Preserved RNM version mapping/source fallback and pinned the matching compiler 250829098.0.6.
Generated output Updated lockfiles, API declarations, and snapshots. Regenerated each in separate reversible commits after semantic integration.
Diff-tag compliance Fork-specific code follows the canonical inline-diff convention. Audited 101 scoped paths and corrected missing/malformed single-line, block, guard, and file-level markers without editing the format guide.

Layered commits

Commit Purpose
49d78710 Mechanical two-parent conflict resolution
aa440a62 Workspace/package integration
9c8feac5 Jest/macOS platform resolution
96966e2f iOS prebuild and Hermes integration
38543525 Public type/event integration
6e8bc144 Apple platform integration
109e8dab Regenerated yarn.lock
2b4fb687 Regenerated RNTester Podfile.lock
37fc2849 Regenerated API and test snapshots
982851e8 Superseded docs attempt, fully reverted in the final tree
2741f447 Restored the format guide and audited/corrected 0.85 macOS diff tags
404aa453 Empty no-op audit marker created after guide restoration; retained transparently under the additive/no-force policy
dcd3d603 Aligned two multiline hover guards with upstream 0.85

Validation

All final gates passed from a fresh exported Git checkout:

  • immutable Yarn install and constraints
  • generated API/types and snapshot determinism
  • 282 Jest suites / 5,631 passing tests / 1,826 snapshots
  • Flow, ESLint, Prettier, TypeScript, generated TypeScript
  • iOS prebuild parser and syntax checks
  • Bundler and CocoaPods (87 Podfile dependencies / 86 pods)
  • both Swift package dumps
  • RNTester macOS, iOS simulator, and visionOS simulator builds
  • DAG topology, unique Change IDs, object connectivity, stable-tip exclusion, conflict-marker scan, and clean final checkout
  • canonical guide byte identity; 101-path diff-tag inventory; zero block-pair, preprocessor-pattern, or macOS-only-file marker issues
  • post-dcd3d603 focused rerun: exact upstream guard-alignment audit, CocoaPods, and RNTester macOS, iOS simulator, and visionOS simulator builds; all 10 gates passed and the exported checkout returned clean

Diff-tag gate and independent review

The executor treated compliance with docsite/docs/contributing/diffs-with-upstream.md as blocking and saved both the 101-path classification and validation logs. Justified exceptions are: 33 JSON/generated artifacts that cannot carry comments, 5 resolved deletions, 5 paths now equal to upstream, and 1 whitespace-only path.

Independent judge requirement: re-audit the actual diff tags rather than trusting the executor summary. Fail this execution for any untagged or mistagged retained/new fork difference, stale tag around removed behavior, changed macOS-only file without a file-level [macOS] marker, or upstream conditional that was restructured when a minimal additive clause would suffice.

Evidence: external diff-tag-audit-inventory.tsv, validation/diff-tag-audit.log, validation/diff-tag-final-checks.log, validation/judge-cleanup-summary.tsv, and judge-cleanup-validation.md. The audit records APPROVED_UPSTREAM_ALIGNMENTS=2 and NON_COMMENT_DIFFS=0.

The 0.85 feature/divergence analysis is preserved externally in diffs-with-upstream-audit.md. The repository guide is byte-identical to 37fc2849 and has no net PR diff.

Complete conflicted-path inventory

83 paths
  • .github/actions/setup-xcode/action.yml
  • .gitignore
  • package.json
  • packages/assets/package.json
  • packages/babel-plugin-codegen/package.json
  • packages/community-cli-plugin/package.json
  • packages/core-cli-utils/package.json
  • packages/debugger-frontend/package.json
  • packages/debugger-shell/package.json
  • packages/dev-middleware/package.json
  • packages/eslint-config-react-native/package.json
  • packages/eslint-plugin-react-native/package.json
  • packages/eslint-plugin-specs/package.json
  • packages/gradle-plugin/package.json
  • packages/metro-config/package.json
  • packages/new-app-screen/package.json
  • packages/normalize-color/package.json
  • packages/polyfills/package.json
  • packages/react-native/Libraries/AppDelegate/RCTDefaultReactNativeFactoryDelegate.mm
  • packages/react-native/Libraries/AppDelegate/RCTRootViewFactory.mm
  • packages/react-native/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js
  • packages/react-native/Libraries/Components/TextInput/TextInput.flow.js
  • packages/react-native/Libraries/Components/Touchable/Touchable.js
  • packages/react-native/Libraries/Components/View/ReactNativeViewAttributes.js
  • packages/react-native/Libraries/Components/View/ViewPropTypes.js
  • packages/react-native/Libraries/Image/RCTImageUtils.mm
  • packages/react-native/Libraries/LogBox/Data/parseLogBoxLog.js
  • packages/react-native/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js
  • packages/react-native/Libraries/LogBox/UI/LogBoxInspectorStackFrame.js
  • packages/react-native/Libraries/Text/Text.js
  • packages/react-native/Libraries/Text/TextInput/Multiline/RCTUITextView.mm
  • packages/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mm
  • packages/react-native/Libraries/Text/TextProps.js
  • packages/react-native/Libraries/Types/CoreEventTypes.js
  • packages/react-native/Package.swift
  • packages/react-native/React/Base/RCTUtils.mm
  • packages/react-native/React/CoreModules/RCTClipboard.mm
  • packages/react-native/React/CoreModules/RCTDeviceInfo.mm
  • packages/react-native/React/CoreModules/RCTKeyboardObserver.mm
  • packages/react-native/React/CoreModules/RCTPerfMonitor.mm
  • packages/react-native/React/CoreModules/RCTRedBox.mm
  • packages/react-native/React/Fabric/Mounting/ComponentViews/InputAccessory/RCTInputAccessoryComponentView.mm
  • packages/react-native/React/Fabric/Mounting/ComponentViews/Modal/RCTFabricModalHostViewController.mm
  • packages/react-native/React/Fabric/Mounting/ComponentViews/Modal/RCTModalHostViewComponentView.mm
  • packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm
  • packages/react-native/React/Fabric/Mounting/ComponentViews/Text/RCTParagraphComponentView.mm
  • packages/react-native/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm
  • packages/react-native/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputUtils.mm
  • packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm
  • packages/react-native/React/Fabric/Mounting/ComponentViews/VirtualView/RCTVirtualViewComponentView.mm
  • packages/react-native/React/Fabric/Mounting/ComponentViews/VirtualViewExperimental/RCTVirtualViewExperimentalComponentView.h
  • packages/react-native/React/Fabric/Mounting/ComponentViews/VirtualViewExperimental/RCTVirtualViewExperimentalComponentView.mm
  • packages/react-native/React/Modules/RCTLayoutAnimation.m
  • packages/react-native/React/Modules/RCTUIManager.mm
  • packages/react-native/React/Views/RCTComponentData.mm
  • packages/react-native/React/Views/RCTView.m
  • packages/react-native/ReactApple/RCTSwiftUIWrapper/RCTSwiftUIWrapper.podspec
  • packages/react-native/ReactCommon/React-FabricComponents.podspec
  • packages/react-native/ReactCommon/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.h
  • packages/react-native/ReactCommon/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.mm
  • packages/react-native/ReactCommon/react/renderer/components/view/BaseTouch.h
  • packages/react-native/ReactNativeApi.d.ts
  • packages/react-native/jest/mocks/AccessibilityInfo.js
  • packages/react-native/jest-preset.js
  • packages/react-native/package.json
  • packages/react-native/scripts/ios-prebuild/headers.js
  • packages/react-native/scripts/ios-prebuild/hermes.js
  • packages/react-native/scripts/ios-prebuild/xcframework.js
  • packages/react-native/sdks/hermes-engine/hermes-engine.podspec
  • packages/react-native-babel-preset/package.json
  • packages/react-native-babel-transformer/package.json
  • packages/react-native-codegen/package.json
  • packages/react-native-compatibility-check/package.json
  • packages/react-native-popup-menu-android/package.json
  • packages/rn-tester/Gemfile
  • packages/rn-tester/js/types/RNTesterTypes.js
  • packages/rn-tester/package.json
  • packages/typescript-config/package.json
  • packages/virtualized-lists/Lists/__tests__/__snapshots__/VirtualizedList-test.js.snap
  • packages/virtualized-lists/package.json
  • private/react-native-bots/package.json
  • private/react-native-codegen-typescript-test/package.json
  • yarn.lock

Novel conflict classes

  • Jujutsu working-copy snapshot/layer-boundary hazard
  • Hermes V1 inversion plus fork version mapping
  • platform replacement with retained macOS implementation
  • generated output folded into a mechanical snapshot
  • path-dependent CocoaPods spec checksums
  • strict pnpm linkage for a new upstream workspace
  • public type/event convergence and deduplication
  • Apple availability differences across macOS/iOS/visionOS

Final CI follow-up

This branch receives only these independently reviewed follow-up paths:

  • .github/scripts/__tests__/resolve-hermes-test.js
  • packages/react-native/ReactCommon/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.mm
  • packages/react-native/ReactCommon/react/renderer/components/legacyviewmanagerinterop/platform/ios/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.mm
  • packages/react-native/ReactNativeApi.d.ts
  • packages/react-native/scripts/ios-prebuild/__tests__/hermes-test.js

The complete 16-head batch passed 92 recorded validation commands, including branch-specific API revalidation/generated TypeScript, full formatting checks, and combined targeted suites where applicable. Native changes are limited to the reviewed #3033 destination guards (also present in stable 0.85) and #3104's sidecar-copy correction (already present in its descendants). Exact source equivalence preserves earlier native results elsewhere. The public-registry lockfiles and package manifests remain byte-identical.

Previous heads are backed up at backup/pre-ci-followup-20260922/<original-branch> on their source repository. Fresh current-head CI remains required. The one-first-parent 0.87 sequence is preserved.

Alex Hunt (huntie) and others added 30 commits February 12, 2026 09:38
Summary:
Pull Request resolved: react#55536

Changelog: [Internal]

Reviewed By: vzaidman

Differential Revision: D92831007

fbshipit-source-id: 60089442334ca5be6046bfd7f16c816d57e62408
Summary:
Pull Request resolved: react#55537

Changelog:
[General] [Added] - Create featureflag viewTransitionEnabled

This diff adds a new React Native feature flag `viewTransitionEnabled` to gate the View Transition API feature.

The View Transition API enables animated transitions between views, providing a smooth visual experience when navigating between screens or updating UI elements. This flag allows the feature to be gradually rolled out and tested before full enablement.

The flag is added across all platform layers:
- JavaScript (ReactNativeFeatureFlags.js, NativeReactNativeFeatureFlags.js)
- Android Kotlin (ReactNativeFeatureFlags.kt, provider, accessor, defaults)
- C++/JNI (ReactNativeFeatureFlags.cpp/h, JReactNativeFeatureFlagsCxxInterop)
- Feature flag config (ReactNativeFeatureFlags.config.js)

Default value is `false` to ensure the feature is opt-in during experimentation.

Reviewed By: NickGerleman

Differential Revision: D92713074

fbshipit-source-id: cd9e567df3135f99c8a931fffab655f16883cf94
Summary:
[Android][Fixed] - Fix null pointer crash in FabricUIManagerBinding::driveCxxAnimations by adding null check for scheduler

Pull Request resolved: react#55529

Crash failures during e2e: https://www.internalfb.com/intern/test/562949977559616
logview: https://fburl.com/logview/65na7gyr

Reason: null dereference
Pull Request resolved: react#55529

Crash failures during e2e: https://www.internalfb.com/intern/test/562949977559616
logview: https://fburl.com/logview/65na7gyr

Reason: null dereference

Reviewed By: javache

Differential Revision: D92986523

fbshipit-source-id: 2a193cdc93a44a59fedfb7974bb694546a2000f6
Summary:
Pull Request resolved: react#55501

The BaseVMFocusChangeListener inner class does not reference any members
of its outer class BaseViewManager. Making it static improves memory
efficiency by avoiding the implicit reference to the outer class instance.

Also removed the unused type parameter <V extends View> and changed the
method parameters from T to View since only View interface methods are used.

changelog: [internal] internal

Reviewed By: cortinico

Differential Revision: D92020879

fbshipit-source-id: a26378ed6f9f5dfcc64c49aaf734559e1e7be09e
…5502)

Summary:
Pull Request resolved: react#55502

This change adds missing Override annotations to three methods in LayoutShadowNode that override methods from the parent class:
- setFlex(float)
- setFlexGrow(float)
- setFlexShrink(float)

These methods call super.setFlex/setFlexGrow/setFlexShrink, indicating they override parent methods and should have Override annotations for code clarity and compiler checking.

changelog: [internal] internal

Reviewed By: alanleedev

Differential Revision: D92021000

fbshipit-source-id: 28a4d0676c18d99dddb173066964cd8c5ea321ac
…ct#55503)

Summary:
Pull Request resolved: react#55503

Remove unused code that was triggering lint warnings:
1. Remove `walkUpUntilNativeKindIsParent` private method that was never invoked
2. Remove `parent` variable in `applyLayoutBase` that was never accessed

Both were leftover from NativeKind removal.

changelog: [internal] internal

Reviewed By: alanleedev

Differential Revision: D92021031

fbshipit-source-id: 7549efd01ddf167df4a130c255ccf1c8d663e1d2
…55504)

Summary:
Pull Request resolved: react#55504

Replace `TextUtils.join(", ", features)` with the idiomatic Kotlin
`features.joinToString(", ")`. This fixes the HasBetterKotlinAlternativeMethod
lint warning and removes the now-unused TextUtils import.

changelog: [internal] internal

Reviewed By: alanleedev

Differential Revision: D92021387

fbshipit-source-id: 38510d3c36ccaf899826f604ed4dd1e843ebe039
…AttributeProps (react#55505)

Summary:
Pull Request resolved: react#55505

Replace `TextUtils.join(", ", features)` with Kotlin's idiomatic `features.joinToString(", ")` to fix the HasBetterKotlinAlternativeMethod lint warning. Also removed the now-unused `TextUtils` import while keeping the `TextUtils.TruncateAt` import that is still in use.

changelog: [internal] internal

Reviewed By: alanleedev

Differential Revision: D92021465

fbshipit-source-id: 3cb9e286f9f46f82817b0257dde73230ba2298d6
…t#55491)

Summary:
Pull Request resolved: react#55491

Fixes crash in `ShadowNode::cloneMultipleRecursive` which tried to access a missing root's family from the `childrenCount` map. The main issue is that in some cases there is no path between the given families to update and the root shadow node. The solution is to check after building the `childrenCount` map if it contains the root family and return `nullptr` otherwise. This behavior is closer to the `getAncestors` method which returns an empty array if there is no ancestor-descendant relationship. Due to this change, an additional check in `AnimationBackendCommitHook` is also required.

## Changelog:
[General][Fixed] - Fixed crash in `cloneMultiple` when families have no path to root

Reviewed By: zeyap

Differential Revision: D92838809

fbshipit-source-id: a87de2c171e4f0f71e566806f5c012ab0bac69fd
…react#55534)

Summary:
Pull Request resolved: react#55534

Replace react_native_assert calls with real bounds checks in RawPropsKeyMap::at() and RawPropsKey::render() to prevent SIGILL/SIGTRAP crashes. In at(), an invalid length now returns kRawPropsValueIndexEmpty instead of trapping. In render(), an overlong prop name is clamped to kPropNameLengthHardCap - 1 instead of asserting.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D93094839

fbshipit-source-id: 29250d06cb93e84507000551a7a60a09f2df8288
Summary:
Pull Request resolved: react#55542

Adds tests demonstrating that all target versions of Hermes (Legacy Hermes, Static Hermes stable, Static Hermes trunk) support multi-session debugging when integrated into React Native's CDP backend.

Changelog: [Internal]

Reviewed By: hoxyq

Differential Revision: D90888853

fbshipit-source-id: 7ea1be837bde6d71ae2bca2b1487e00c62a44928
…ypes) to latest minors (react#55543)

Summary:
Pull Request resolved: react#55543

@public

This diff updates several Babel packages to their latest versions:
- `babel/code-frame`: 7.29.0
- `babel/generator`: 7.29.1
- `babel/parser`: 7.29.0
- `babel/template`: 7.28.6
- `babel/traverse`: 7.29.0
- `babel/types`: 7.29.0

Not bumping `core` or `runtime` here because they're a bit more involved, and I'm mainly interested in `traverse`. The packages here are the closure of traverse's dependency graph.

Changelog: [Internal]

Reviewed By: yungsters

Differential Revision: D92983519

fbshipit-source-id: 9f2e71fb5d453606c697d52539f0056b7a29bc45
Summary:
Pull Request resolved: react#55470

LogBox errors and warnings can affect performance trace measurements by triggering UI updates during profiling. This change adds a mechanism to suppress LogBox messages when CDP performance tracing is active. It clears the logbox when tracing starts and drops messages during tracing

The implementation consists of:

1. **Native observer infrastructure**
(`RuntimeTarget.cpp/h`, `RuntimeTargetPerformanceTracerObserver.cpp/h`): `RuntimeTarget` subscribes to the `PerformanceTracer` singleton's state changes and forwards them into JavaScript. It uses helper functions in                                     `RuntimeTargetPerformanceTracerObserver` to install a `__PERFORMANCE_TRACER_OBSERVER__` object on the JavaScript global (a global because it needs to exist before the module system initializes), which tracks tracing state and notifies subscribers via `onTracingStateChange`.

2. **JavaScript observer** (`PerformanceTracerObserver.js`): Provides a clean API to check tracing status (`isTracing()`) and subscribe to state changes. Gracefully handles environments where native support isn't available.

3. **LogBox integration** (`LogBoxData.js`): Subscribes to the performance tracer observer and:
   - Clears all LogBox messages when tracing starts
   - Skips logging new errors and exceptions while tracing is active

This ensures trace measurements are not impacted by LogBox UI rendering during profiling sessions.

Changelog: [GENERAL] [CHANGED] - Suppress LogBox warnings and errors during CDP performance tracing

Reviewed By: hoxyq

Differential Revision: D92527815

fbshipit-source-id: 975e042766194d9702be2c9e222fd452bb99d841
Summary:
Similiar to how a specific port can be set also allow for setting a specific ip for the dev server.

This allows for easy configuration to aid in generating [reproducible builds](https://izzyondroid.org/docs/reproducibleBuilds/).

## Changelog:

<!-- Help reviewers and the release process by writing your own changelog entry.

Pick one each for the category and type tags:

[ANDROID] [ADDED] - Allow specifying dev server ip via gradle property

For more details, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests
-->

[ANDROID] [ADDED] - Allow specifying dev server ip via gradle property

Pull Request resolved: react#55531

Test Plan:
1) Add `reactNativeDevServerIp=localhost` to `gradle.properties`
2) Generate an APK
3) Analyze the APK and check that the value of the string resource type `react_native_dev_server_ip` matches the value set in `gradle.properties`.

Reviewed By: cortinico

Differential Revision: D93143296

Pulled By: CalixTang

fbshipit-source-id: d0be23e9495f0ba1a6034dc31b6e725fd94a6a02
Summary:
Pull Request resolved: react#55546

Changelog: [Internal]

It looks like we have completely misunderstood the semantic of `clipChildren`.

Looking at the Android [source code](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/core/java/android/view/ViewGroup.java;l=4607?q=setClipToPadding&ss=android%2Fplatform%2Fsuperproject&fbclid=IwY2xjawP8LExleHRuA2FlbQIxMQBzcnRjBmFwcF9pZAEwAAEeQkZx96WcTaA0mIUVGXeFAxH_aLVBMR0an0N8jeKCYX4E-j9HW0eLnzZcSJI_aem__yWzHP0_x-bPxCQS1nN19w), it seems that `setClipChildren(true)` on a ViewGroup X means clipping **each child** to the **child's own bounds**, not the parent's bound.

Which means also [this](https://www.internalfb.com/code/aosp-vendor-meta-coresdk/[oculus-14.0%3Af0b9166acbb68da2e1e9f7622ba1b7fcee672ebc]/api-src/volumetricwindow/java/horizonos/view/interaction/providers/ViewInteractionNodeProvider.java?lines=502) line in HzOS is based on the same incorrect assumption.

Ultimately, RN should not be populating `clipChildren` when `overflow: hidden` is set.

Reviewed By: javache

Differential Revision: D93237429

fbshipit-source-id: 0c3b18c829ef3880f8cc931263792c50aafa1333
Summary:
Pull Request resolved: react#55547

Changelog: [Internal]

It looks like we have completely misunderstood the semantic of `clipChildren`.

Looking at the Android [source code](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/core/java/android/view/ViewGroup.java;l=4607?q=setClipToPadding&ss=android%2Fplatform%2Fsuperproject&fbclid=IwY2xjawP8LExleHRuA2FlbQIxMQBzcnRjBmFwcF9pZAEwAAEeQkZx96WcTaA0mIUVGXeFAxH_aLVBMR0an0N8jeKCYX4E-j9HW0eLnzZcSJI_aem__yWzHP0_x-bPxCQS1nN19w), it seems that `setClipChildren(true)` on a ViewGroup X means clipping **each child** to the **child's own bounds**, not the parent's bound.

Which means also [this](https://www.internalfb.com/code/aosp-vendor-meta-coresdk/[oculus-14.0%3Af0b9166acbb68da2e1e9f7622ba1b7fcee672ebc]/api-src/volumetricwindow/java/horizonos/view/interaction/providers/ViewInteractionNodeProvider.java?lines=502) line in HzOS is based on the same incorrect assumption.

Ultimately, RN should not be populating `clipChildren` when `overflow: hidden` is set.

Reviewed By: Abbondanzo

Differential Revision: D93238810

fbshipit-source-id: aff74b1f339fa707bcec1667580ce710a49f93dd
Summary:
Pull Request resolved: react#55551

Changelog: [Internal] -  Migrated 8 files in
`xplat/js/react-native-github/packages/rn-tester/` from the manual `useRef(new Animated.Value(x))` pattern to the `useAnimatedValue(x)` hook.

Reviewed By: fabriziocucci

Differential Revision: D93258352

fbshipit-source-id: 778a2edbd3e168284c5e6b313bd3aa0102d0523f
Summary:
Pull Request resolved: react#55434

This is used by `Image`, to render a different component when under a `TextAncestorContext`, but the underlying component is remapped by Fabric to instead be interpreted as `Image`. We can delete the code JS side safely, since it will use the existing registered View manager, Fabric will already redirect to. We can also then delete the redirection in Fabric, since the component is no longer ever used.

See `componentNameByReactViewName.cpp`, where this is also removed.

Changelog: [Internal]

Reviewed By: mdvacca, javache, cortinico

Differential Revision: D92481981

fbshipit-source-id: c33897efee124eaabed5447266389f34709650e0
Summary:
Pull Request resolved: react#55539

Move `useAnimatedValueXY` and `useAnimatedColor` hooks into react-native-github so they can be used by OSS alongside the existing `useAnimatedValue` hook which can only take number value.

## Changelog:

[General] [Added] - upstream useAnimatedColor and useAnimatedValueXY

Reviewed By: fabriziocucci

Differential Revision: D93125807

fbshipit-source-id: 74fb3925e8d495cddce7b28bdf852995854f85bb
…ing (react#55527)

Summary:
Pull Request resolved: react#55527

On API 25 (Nougat), the `DST_OUT` + `EVEN_ODD` inverse path technique in `clipWithAntiAliasing()` doesn't render correctly — it erases all image content instead of just the area outside the rounded rect.

The bug manifests specifically with ReactImageView (Fresco-backed) but not plain ImageView. ReactImageView's Fresco hierarchy configures `RoundingParams.RoundingMethod.BITMAP_ONLY`, which causes the drawable chain to draw through a `BitmapShader`-based paint. This shader-based drawing interacts badly with the `EVEN_ODD` fill + `DST_OUT` compositing inside a hardware-accelerated `saveLayer` on API 24's Skia renderer.

The fix replaces the `EVEN_ODD` + `DST_OUT` technique with a nested `saveLayer` using `DST_IN` compositing, following the same pattern used by Facebook's Keyframes library (`AbstractLayer.applyClip`). The mask shape is drawn into a separate layer; when restored with `DST_IN`, content is preserved only where the mask is opaque. A `drawColor(CLEAR)` call after `saveLayer` ensures the layer starts fully transparent — without this, on API 24, the layer may retain parent content, causing `DST_IN` to see non-zero alpha everywhere and clip nothing.

Changelog: [Android][Fixed] - Fix image content disappearing on API 24 (Nougat) when antialiased border radius clipping is applied

Reviewed By: NickGerleman

Differential Revision: D92980234

fbshipit-source-id: ea6d05d8f06346371eab1c406538e91bbd78d0ae
…tency (react#54833)

Summary:
Pull Request resolved: react#54833

Changelog: [General][Changed] - Refactor how shadow tree revisions are promoted as latest for JS consistency

Changes `LazyShadowTreeRevisionConsistencyManager::updateCurrentRevision` to pull the latest commited revision for a given surface id instead of accepting the new revision as a parameter.

This way, the new revision is read from the same place for every update, which opens up the way to implement commit branching. This change will allow to always read from the JS tree revision, if it exists.

Reviewed By: rubennorte

Differential Revision: D88151490

fbshipit-source-id: 05b9c5e0bf87c7984513bc853a173ad25d4ff592
Summary:
Pull Request resolved: react#54834

Changelog: [Internal]

Adds a feature flag for the Fabric commit branching mechanism.

Reviewed By: mdvacca

Differential Revision: D88151491

fbshipit-source-id: d3c9b8579da205b2b222f8851a28a930f95b0f15
Summary:
Pull Request resolved: react#54835

Changelog: [General][Changed] - Changed how React changes are commited to the Shadow Tree (behind a feature flag)

Introduces two branches for the Shadow Tree commits - React always commits to the JS revision, while other sources should commit to the main revision. Commits to the JS revision schedule a "merge" commit at the end of the event loop pass to upstream the React changes to the main revision.

"Merge" means taking the JS revision and promoting it to become the new main, losing changes that happened between fork and merge. Preservation of these changes is the responsibility of the party that created them, and they should be reapplied using a commit hook.

The main synchronization points here are:
- react revision promotion/promoted revision merge
  - During merge, the promoted revision is read and reset (UI thread), while promotion itself updated the promoted revision (JS thread)
- react commit/promoted revision merge
  - In case the promoted revision being merged is the same as the current React revision, the latter needs to be reset (UI thread), so that during the next JS commit it forks from the "main" branch (JS thread).
- react commit/react revision promotion
  - Both access the `currentReactRevision`, in case of a main thread render, those might happen to run concurrently on JS/UI thread

Reviewed By: javache, rubennorte

Differential Revision: D88151489

fbshipit-source-id: c70898ad25fbe5362c991be237c3fd0c1cf6ddcf
Summary:
Pull Request resolved: react#54837

Changelog: [General][Changed] - The JS revision merge now is scheduled on the main thread

Changes the Shadow Tree branching to schedule JS revision merge on the main thread instead of running it immediately at the end of the event loop. This will prevent shadow tree exhaustion when committing to the main branch, since all commits there will be happening on the same thread.

Reviewed By: javache, rubennorte

Differential Revision: D88736123

fbshipit-source-id: da9fc04bc80bd76749768fd3bfdbaa6a9c9ac368
…e root nodes on the React branch (react#54836)

Summary:
Pull Request resolved: react#54836

Changelog: [General][Added] Added a synchronization mechanism for the layout information between the React branch and the main branch of the ShadowTree

Since layout constraints and layout context are being kept in the props of the `RootShadowNode`, it was possible for the JS revision merge to lose an update if it was being commited concurrently.

Reviewed By: rubennorte

Differential Revision: D88839901

fbshipit-source-id: f81d96dacf60b4e5da29da32ada468c967a2c9df
Summary:
Pull Request resolved: react#55474

This diff adds two examples for the purpose of showcasing the layout-updating capabilities of the Shared Animation Backend.

# Changelog

[General][Added] - Animation Backend examples in RNTester

Reviewed By: zeyap

Differential Revision: D92714034

fbshipit-source-id: ca5c86e15d9a54a6db7d278fb46bb47aad012198
Summary:
Pull Request resolved: react#55449

Further workflow optimisation after D92417918. Aims to improve speed of CI signals and reduce costs by excluding Android and iOS specific jobs when a PR contains changes exclusively within native code to one platform.

Changelog: [Internal]

Reviewed By: NickGerleman

Differential Revision: D92512983

fbshipit-source-id: feb67ce140014352219ae2b5720fc819ec5e1c11
Summary:
This reapplies the same changes from react#55453 to further jobs that were missing it.
This should unblock nightlies that are currently failing.

## Changelog:

[INTERNAL] -

Pull Request resolved: react#55564

Test Plan: CI

Reviewed By: cipolleschi

Differential Revision: D93408173

Pulled By: cortinico

fbshipit-source-id: 11823daeb8ef95fb5b9b8942f23f33353b6d6b6b
Summary:
Pull Request resolved: react#55554

Everything in `initView` is already initialized implicitly, so should only be called during recycling, where we are also missing `selectionColor`.

Changelog: [internal]

Reviewed By: cortinico

Differential Revision: D93327082

fbshipit-source-id: e70dc46618161104be29b4f904f9c038f83c4394
Summary:
Pull Request resolved: react#55561

[changelog](https://github.com/facebook/flow/blob/main/Changelog.md)
Changelog: [Internal]

Reviewed By: cortinico

Differential Revision: D93387946

fbshipit-source-id: 837475519440dc370e4d4f38abb2d22c935a9353
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Preserve validated per-branch source and corrected stack dependencies.
Preserve package versions and the linear stack; change only equivalent executable-path metadata.
Preserve package versions and the linear stack; change only equivalent executable-path metadata.
Preserve package versions and the linear stack; change only equivalent executable-path metadata.
Apply the independently reviewed branch-specific CI follow-up while preserving public-registry locks and the linear stack.
Apply the independently reviewed branch-specific CI follow-up while preserving public-registry locks and the linear stack.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.