Skip to content

chore(0.81): backport fixes (#2878, #2879, #2880)#2884

Merged
Saadnajmi merged 8 commits intomicrosoft:0.81-stablefrom
Saadnajmi:0.81/backport-2878-2879-2880
Apr 3, 2026
Merged

chore(0.81): backport fixes (#2878, #2879, #2880)#2884
Saadnajmi merged 8 commits intomicrosoft:0.81-stablefrom
Saadnajmi:0.81/backport-2878-2879-2880

Conversation

@Saadnajmi
Copy link
Copy Markdown
Collaborator

Summary

Backport of 3 fixes from main to 0.81-stable:

Each fix is a separate commit for easy rebasing when upstream PRs are updated.

Conflict resolutions

Test plan

  • Verify default text color respects dark/light mode
  • Verify Text in ScrollView renders correctly on first load
  • Verify legacy validKeysDown/validKeysUp props still work in Fabric

🤖 Generated with Claude Code

Saadnajmi and others added 3 commits April 2, 2026 11:38
…icrosoft#2880)

## Summary

- Add a `layoutSubviews` override in `RCTScrollViewComponentView` on
macOS that resets the `_containerView` (documentView) frame to
`_contentSize` after AppKit's autoresizing corrupts it
- This fixes massive horizontal and vertical overflow when Text is
nested inside a ScrollView on the first render

## Root Cause

On macOS, the `_containerView` serves as the `NSScrollView`'s
`documentView`, whose frame **directly determines the scrollable content
area** (unlike iOS where `UIScrollView.contentSize` is a separate
property).

React's layout system explicitly manages `_containerView.frame` via
`updateState:` to match the content bounding rect. However,
`autoresizingMask` caused AppKit to **also** resize the container
whenever the `NSClipView` resized (e.g., during initial `tile` after
mounting). This added the clip view's size delta to the container's
dimensions, inflating it well beyond the correct content size.

The `layoutSubviews` override runs after AppKit's layout pass (which
triggers autoresizing), so it reliably corrects the frame back to the
React-managed `_contentSize`.

The issue self-corrects on window resize because the size change
triggers a React re-layout that overwrites the corrupted frame with
fresh measurements.

## Test plan

| Before (bug) | After (fix) |
|---|---|
| <img
src="https://github.com/user-attachments/assets/6a63357e-6dd3-4f69-b134-2d0f78c5b995"
/> | <img
src="https://github.com/user-attachments/assets/5678e2ad-bc40-4987-aaa3-5854c809649e"
/> |





Fixes microsoft#2857

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…Up` (microsoft#2879)

Cherry-pick of open PR microsoft#2879.
Adds a JS shim that transforms legacy validKeysDown/validKeysUp props
into the new onKeyDown/onKeyUp handler format for backward compatibility.
@Saadnajmi Saadnajmi requested a review from a team as a code owner April 2, 2026 18:41
@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Apr 2, 2026

⚠️ No Changeset found

Latest commit: def5c3e

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

Saadnajmi and others added 4 commits April 2, 2026 15:51
- Remove verbose comments after [macOS diff tags
- Replace effectiveProps pattern with spread destructuring
- Use legacyKeyOverrides with direct prop fallbacks in handlers

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@Saadnajmi Saadnajmi enabled auto-merge (squash) April 3, 2026 14:49
@Saadnajmi Saadnajmi merged commit 933d19d into microsoft:0.81-stable Apr 3, 2026
13 of 14 checks passed
@Saadnajmi Saadnajmi deleted the 0.81/backport-2878-2879-2880 branch April 3, 2026 15:33
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.

2 participants