[pull] main from react:main#4490
Open
pull[bot] wants to merge 52 commits into
Open
Conversation
Summary: `textDecorationStyle` is declared on `TextStyleIOS` in the public types but `wavy` is silently dropped: Fabric's C++ enum doesn't include `Wavy`, and UIKit's `NSUnderlineStyle` has no native wavy pattern bit. Separately, `dotted` and `dashed` map to `NSUnderlineStylePatternDot` / `NSUnderlineStylePatternDash` which don't match browser geometry on iOS. This PR adds `TextDecorationStyle::Wavy` to the shared Fabric primitives / conversions (also unblocks the same value on Android, see companion PR #56768) and renders wavy / dotted / dashed decorations with custom Core Graphics paths. **Implementation:** - Wavy ranges are tagged with a custom `RCTCustomDecorationAttributeName` (storing the line kinds, stroke color, and style key) in `RCTAttributedTextUtils.mm` and painted by `RCTTextLayoutManager.mm` after `drawGlyphsForGlyphRange:`. Wavy uses an adaptation of WebKit's formula from `Source/WebCore/style/InlineTextBoxStyle.cpp` (`controlPointDistance = thickness * 1.5 + 0.5`, one cubic Bezier per wavelength, control points at the midpoint above and below the y-axis). At iOS point sizes the literal Blink amplitude renders as a very pronounced wave because Core Graphics paints in points (not device pixels), so the constants are dialed back to read as a clear-but-subtle browser-style wave at typical text sizes. - Dotted uses a custom CG path with a zero-length dash + round line caps, producing actual circular dots at `2 * thickness` spacing. - Dashed uses a custom CG path with `[2 * thickness, thickness]` intervals — short rectangular dashes with a tight gap, closer to Safari's geometry than UIKit's default. - Solid and double continue to use UIKit's native `NSUnderlineStyle` pattern bits, so this PR does not touch the long-standing iOS Arial+bold solid-underline rendering bug tracked in #53935. - The wavy drawing loop iterates `while x < x2` so the final cycle continues through the last character (including trailing punctuation that would otherwise be visually uncovered when the run width is not an integer multiple of the wavelength). Companion PRs (independent, also targeting `main`): - #56767 — fix(android): textDecorationColor on underlines + strikethroughs. Resolves #4579 (2015). - #56768 — feat(android): textDecorationStyle solid/double/dotted/dashed/wavy. Shares the `TextDecorationStyle::Wavy` enum addition; whichever lands first leaves the other with a trivial conflict to resolve. ## Changelog: [IOS] [ADDED] - `textDecorationStyle: 'wavy'` for `<Text>` (custom CoreGraphics path) [IOS] [CHANGED] - `textDecorationStyle: 'dotted'` and `'dashed'` for `<Text>` render with custom CoreGraphics paths instead of UIKit pattern bits, matching browser geometry more closely Pull Request resolved: #56769 Test Plan: See the screenshot comparisons here: https://www.internalfb.com/compare-screenshots-from-diff/D104680636 {F1990979243} ---- Side-by-side comparison on iPhone 17 sim (iOS 26.4) of a `<Text>` with `textDecorationLine="underline"` and `textDecorationStyle` cycling through `solid` / `double` / `dotted` / `dashed` / `wavy`, verified against Safari rendering of the same CSS. Trailing periods now fall under the wavy stroke. Verified with `textDecorationColor` set distinct from the foreground color. ```tsx <Text style={{ color: 'black', textDecorationLine: 'underline', textDecorationStyle: 'wavy', textDecorationColor: '#ff00aa', }}> Hello </Text> ``` Reviewed By: cipolleschi Differential Revision: D104680636 Pulled By: cortinico fbshipit-source-id: ac96e5b36530f7d243a4b85a67c576b62fe99866
Summary: Adds a temporary debug step to both jobs of the reusable npm publish workflow that requests the GitHub Actions OIDC token (npm audience) and prints its decoded claims. This makes it possible to compare the token claims against the npm Trusted Publisher configuration when the OIDC exchange fails. Only the decoded claims are printed, never the raw token. Changelog: [Internal] bypass-github-export-checks Reviewed By: cortinico, cipolleschi Differential Revision: D108108630 fbshipit-source-id: 6ae8be8c9e9e2e611b6941b336230a21f876e134
Summary: iOS I18nManager.isRTL is not wrong but often misinterpreted. This PR adds a comment to clarify what the native call does, since Apple doesn't. Undocumented behavior made me waste several hours hunting for an i18n issue that incorrectly made me think RN had a bug. It's impossible to know this code is working as intended as original commit does not state why the code exist, only that it was changed, no mentions in changelogs, and no official docs from neither RN nor from Apple explains the combined or individual behavior. ## 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 --> [iOS] [Added] - Added comment to clarify why i18nManager.isRTL may not return the expected value Pull Request resolved: #51661 Test Plan: This project demonstrates that compiling and running will give you the "wrong"/unexpected isRTL value when using Hebrew https://github.com/scarlac/rtl-test When Hebrew is added to the Xcode project under "Internationalization" then you will observe that `.isRTL` starts returning `true`. Note that Xcode has a nasty caching bug that means that removing Hebrew: 1. Will Not remove Hebrew (you need to remove it twice) 2. Will Not cause `.isRTL` to revert behavior The solution is to remove Hebrew 2x, and then to clear DerivedData (or Product -> Clean Build Folder..., or CMD+Shift+K) In addition to these issues, it's important to note that calling .forceRTL or .allowRTL are persisted across restarts. This is clearly intentional but also not clearly documented, so you cannot "clear" these states. A reinstall is necessary, or a counter-value call is necessary. The demo project does not use these calls, so it's not an issue there. Reviewed By: javache Differential Revision: D108129627 Pulled By: cortinico fbshipit-source-id: 34f5b5509f48c0f102d4234f0315c5f58e30e773
…erface (#57159) Summary: The hand-written TypeScript types declare only **12 of the 20** pointer event handlers that `ViewProps` actually exposes (per the Flow source and the generated `react-native-strict-api` types). The `PointerEvents` interface in `Libraries/Types/CoreEventTypes.d.ts` is missing: - `onPointerOver` / `onPointerOverCapture` - `onPointerOut` / `onPointerOutCapture` - `onGotPointerCapture` / `onGotPointerCaptureCapture` - `onLostPointerCapture` / `onLostPointerCaptureCapture` These are part of the W3C Pointer Events API. They are declared in the Flow source — `Libraries/Components/View/ViewPropTypes.js` (all typed `(e: PointerEvent) => void`) — and in the generated `react-native-strict-api` types, but were missing from the hand-written TypeScript types, so TypeScript users get a type error using them on any built-in component: ``` Property 'onPointerOver' does not exist on type '... ViewProps'. Did you mean 'onPointerMove'? ``` This adds the 8 missing handlers to the `PointerEvents` interface (matching the existing 12) and a type test covering them. ## Changelog: [GENERAL] [FIXED] - Add missing pointer event handler types (`onPointerOver`, `onPointerOut`, `onGotPointerCapture`, `onLostPointerCapture`, and their `*Capture` variants) to the TypeScript types Pull Request resolved: #57159 Test Plan: `yarn test-typescript` passes. Verified before/after with `tsc -p packages/react-native/types/tsconfig.json`: - **Before** (props absent): the added type test fails with `Property 'onPointerOver' does not exist on type '... ViewProps'`. - **After**: passes — `<View onPointerOver={e => e.nativeEvent.pointerId} … />` type-checks for all 8 handlers, with the event correctly inferred as `PointerEvent`. Reviewed By: huntie Differential Revision: D108114655 Pulled By: fabriziocucci fbshipit-source-id: 08d364d2e156953027c0d951ab3d895a1eeab159
Summary: X-link: #57133 `JSIndexedRAMBundle` was a deprecated legacy-architecture class (annotated `[[deprecated("This API will be removed along with the legacy architecture.")]]` and guarded by `#ifndef RCT_REMOVE_LEGACY_ARCH`) for parsing indexed RAM bundles. It was only ever instantiated by `Instance::loadRAMBundleFromString` and `Instance::loadRAMBundleFromFile`, and those two `Instance` methods have no callers anywhere in fbsource: the old Android entry point `CatalystInstanceImpl` that used to call them has been deleted, and the new architecture (`ReactInstance` / bridgeless) routes `loadScriptFromFile` through `loadJSBundleFromFile` in the new runtime, never touching the legacy `Instance`. The only remaining user was its own unit test. This removes `JSIndexedRAMBundle` and the two dead `Instance` RAM-bundle loaders that referenced it: - Delete `JSIndexedRAMBundle.cpp`, `JSIndexedRAMBundle.h`, and `JSIndexedRAMBundleTest.cpp`. - Remove `loadRAMBundleFromString` / `loadRAMBundleFromFile` from `Instance.cpp` / `Instance.h` and drop the now-unused include. - Drop `JSIndexedRAMBundle.h` from `CXXREACT_PUBLIC_HEADERS` in `cxxreact/BUCK`. - Update the committed C++ API snapshots accordingly. The broader legacy RAM-bundle machinery (`RAMBundleRegistry`, `JSModulesUnbundle`, `Instance::loadRAMBundle`, `JSIExecutor::setBundleRegistry`) is left in place; it belongs to the same `RCT_REMOVE_LEGACY_ARCH` legacy bridge and can be removed as a follow-up. Changelog: [Internal] Reviewed By: javache, mdvacca Differential Revision: D108001933 fbshipit-source-id: 4b0f12258e8caff1991847a4bb211e94fbecefa8
Summary: X-link: #57125 Fixes a crash (`java.lang.RuntimeException` via `NoSuchElementException`) in `SkewMatrixHelper.isAffine2DTransformWithSkew` and `buildAffine2DMatrix` when a transform array contains an empty map entry (no keys). Changelog: [Android][Fixed] Fix crash in SkewMatrixHelper Reviewed By: Abbondanzo Differential Revision: D107763077 fbshipit-source-id: d61819e875e2334c6d6b121aba1876ec3153c002
Summary: X-link: #57134 `telemetryTimePointToSecondsSinceEpoch()` in `ReactCommon/react/utils/Telemetry.h` was a `static inline` helper that converted a `TelemetryTimePoint` to seconds since the UNIX epoch, but it had no callers anywhere. This is a pure dead-code removal. The sibling `clockCast` helper it used is left in place (it remains part of the public API surface). Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108012910 fbshipit-source-id: 5361ef87aaae3c676b542059c0a9d6475b33de45
Summary: X-link: #57135 `ClearableSynchronizedPool` (an `internal` Kotlin class in `ReactAndroid/.../common/`) was a variant of androidx `Pools.SynchronizedPool` adding a `clear()` method, but it was never instantiated or referenced anywhere. The live event pools (`OnLayoutEvent`, `PointerEvent`, `TouchEvent`, `ScrollEvent`) use androidx `SynchronizedPool` directly. This removes the orphaned class. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108012905 fbshipit-source-id: d5972b4c47d054310c8b7803482fa4e6b7a9928e
Summary: X-link: #57136 `ReactRootView.simulateAttachForTesting()` was a package-private `VisibleForTesting` helper that set up the attach flags and dispatchers, but no test or production code ever called it. `RootViewTest` exercises `startReactApplication`/`unmountReactApplication` and the sibling `simulateCheckForKeyboardForTesting`, never this method. This removes the orphaned helper. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108012908 fbshipit-source-id: ee550f66fae07bfeb75fd59b85d5d812fea7e2c1
Summary: X-link: #57145 `HostTargetController::installPerfIssuesBinding()` was declared in `jsinspector-modern/HostTarget.h` but had no definition anywhere and no callers. (`HostTargetController` is `final`, so the method is not an override.) A declared-but-never-defined non-virtual member cannot be invoked — any call would be a link error — so this is unreachable dead code. The unrelated, live `HostTarget::installPerfIssuesBinding` (a different class) is left intact. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108012907 fbshipit-source-id: 5c7f14a7956f67e3e884a32f95aa2e50fd0f3ea6
Summary: X-link: #57143 `RAMBundleRegistry::singleBundleRegistry` was a static factory that wrapped the public `RAMBundleRegistry` constructor, but it had no callers anywhere. Objects are constructed via the public constructor directly. This removes the orphaned factory; the sibling `multipleBundlesRegistry`, the constructor, `MAIN_BUNDLE_ID`, `registerBundle`, `getModule`, and `getBundle` are all left intact. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108012903 fbshipit-source-id: 5d8f18ebce2bb19abd124dbb7c9eda60baa0f272
Summary: X-link: #57137 `RAMBundleRegistry::multipleBundlesRegistry` was a static factory wrapping the public `RAMBundleRegistry` constructor (the one taking a main bundle plus a factory callback), but it had no callers anywhere. Registries are constructed via the public constructor directly. With the sibling `singleBundleRegistry` already removed, this deletes the last orphaned static factory; the constructor and the rest of the class remain intact. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108012906 fbshipit-source-id: 7bb403ff7660317f0f5b422dca140ac69e048dac
Summary: X-link: #57142 `StartupLogger::getRunJSBundleEndTime()` was a public getter that returned the `runJSBundleEndTime` member, but it had no callers. `NativePerformance` is the only consumer of `StartupLogger` and reads the start-time getters plus `getAppStartupEndTime`, never this end-time getter. This removes the dead getter. The backing member `runJSBundleEndTime` is kept because `logStartupEvent`/`reset` still write it. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108012912 fbshipit-source-id: ac6348b8223fba8695843340e99d7e277bf4f60a
Summary: X-link: #57140 `StartupLogger::getInitReactRuntimeEndTime()` was a public getter returning the `initReactRuntimeEndTime` member, but it had no callers. `NativePerformance` (the only consumer of `StartupLogger`) never reads it. This removes the dead getter; the backing member `initReactRuntimeEndTime` is kept because `logStartupEvent`/`reset` still write it. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108012904 fbshipit-source-id: 56a6710c485a926caf82ecb1cc08e845571b2dd8
Summary: X-link: #57138 `getWarningHighlightColor` in `LogBox/UI/LogBoxStyle.js` was an exported color helper with no importers. It is a duplicate of the live `getHighlightColor` (identical `rgba(252, 176, 29, ...)` value), which is the one actually used by LogBox UI. This removes the dead duplicate. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108012913 fbshipit-source-id: dd22adcf191284eb3c81778f92a8c72be15f9d30
Summary: X-link: #57139 `RCTJSCSetOptionType` was a file-local `using` alias (`BOOL (*)(const char *)`) in `RCTPerfMonitor.mm` that was never referenced. The concrete `RCTJSCSetOption` function is called directly at its two call sites; no code ever used the function-pointer typedef. This removes the dead alias. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108012902 fbshipit-source-id: 2d8b207c6d216356a5b4eef9b71effda47db5744
Summary: X-link: #57141 `RCTImageStoreManager.h` declared `RCT_EXTERN void RCTEnableImageStoreManagerStorageQueue(BOOL enabled);`, but no definition exists anywhere in the tree and nothing calls it. A declared-but-never-defined external function is uncallable (any use would be a link error), so this is unreachable dead code. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108012909 fbshipit-source-id: 807a5dd83616bf277c17f3832a65f92bc6f856b9
Summary: Pull Request resolved: #57163 [changelog](https://github.com/facebook/flow/blob/main/Changelog.md) Changelog: [Internal] Reviewed By: panagosg7 Differential Revision: D108172771 fbshipit-source-id: 9e3bc0d869e297b3b92713783356d0af58d07b91
Summary: if you check the search results you won't find any usages of `UTFSequence` module. Also it wasn't documented. So, it can be treated as dead-code and need to be removed from RN package ```bash open https://github.com/search?q=%22UTFSequence.BOM%22&type=code open https://github.com/search?q=%22UTFSequence.BULLET%22&type=code open https://github.com/search?q=%22UTFSequence.BULLET_SP%22&type=code open https://github.com/search?q=%22UTFSequence.MIDDOT%22&type=code open https://github.com/search?q=%22UTFSequence.MIDDOT_SP%22&type=code open https://github.com/search?q=%22UTFSequence.MIDDOT_KATAKANA%22&type=code open https://github.com/search?q=%22UTFSequence.MDASH%22&type=code open https://github.com/search?q=%22UTFSequence.MDASH_SP%22&type=code open https://github.com/search?q=%22UTFSequence.NDASH%22&type=code open https://github.com/search?q=%22UTFSequence.NDASH_SP%22&type=code open https://github.com/search?q=%22UTFSequence.NEWLINE%22&type=code open https://github.com/search?q=%22UTFSequence.NBSP%22&type=code open https://github.com/search?q=%22UTFSequence.PIZZA%22&type=code open https://github.com/search?q=%22UTFSequence.TRIANGLE_LEFT%22&type=code open https://github.com/search?q=%22UTFSequence.TRIANGLE_RIGHT%22&type=code ``` In RN repo in used in one places and can be replaced with string litaral: https://github.com/facebook/react-native/blob/8bcfb3ba1c16b1ba45058798bf43ecdc9bd42d3a/packages/react-native/Libraries/LogBox/Data/parseLogBoxLog.js#L109 ## Changelog: [GENERAL] [DEPRECATED] - Mark undocumented `UTFSequence` module as deprecated X-link: #57122 Reviewed By: zeyap Differential Revision: D108005122 Pulled By: javache fbshipit-source-id: 0641b1cd90cc9c4924a4afb3779a94b58e7153d4
Summary: Chronos Job Instance ID: 1125908308267201 Sandcastle Job Instance ID: 58546795604338354 Processed xml files: android_res/com/facebook/fds/listcell/res/values/strings.xml android_res/com/facebook/fds/contextualmessage/res/values/strings.xml android_res/com/bloks/foa/cds/bottomsheet/strings/res/values/strings.xml android_res/com/facebook/fds/floatingpivotcta/res/values/strings.xml android_res/com/facebook/components/list/fb/fragment/res/values/strings.xml ../xplat/js/react-native-github/packages/react-native/ReactAndroid/src/main/res/views/uimanager/values/strings.xml ../xplat/js/react-native-github/packages/react-native/ReactAndroid/src/main/res/systeminfo/values/strings.xml android_res/com/facebook/video/components/feed/res/values/strings.xml android_res/com/facebook/runtimepermissions/res/values/strings.xml android_res/com/facebook/notifications/res/values/strings.xml android_res/com/facebook/ui/mainview/res/values/strings.xml android_res/com/facebook/navigation/communitypanel/res/values/strings.xml android_res/com/facebook/fds/pivotlink/res/values/strings.xml android_res/com/facebook/fds/subnavigationbar/res/values/strings.xml libraries/foa/ui/cds/widgets-litho/brandasset/res/values/strings.xml android_res/com/facebook/events/create/loading/res/values/strings.xml android_res/com/facebook/widget/titlebar/res/values/strings.xml android_res/com/facebook/reportaproblem/res/values/strings.xml android_res/com/facebook/fds/inputchip/res/values/strings.xml android_res/com/facebook/fds/actionchip/res/values/strings.xml android_res/com/facebook/fds/composer/res/values/strings.xml android_res/com/facebook/oxygen/preloads/integration/tosacceptance/res/values/strings.xml android_res/com/facebook/bizapp/auth/res/values/strings.xml android_res/com/facebook/bizapp/login/res/values/strings.xml android_res/com/facebook/playground/common/fblogin/res/values/strings.xml libraries/foa/ui/cds/widgets-litho/textinput/res/values/strings.xml libraries/foa/ui/cds/widgets-litho/navbar/res/values/strings.xml android_res/com/facebook/bootstrap/app/res/values/strings.xml android_res/com/facebook/secretgarden/app/res/values/strings.xml android_res/com/facebook/mig/dialog/alert/res/values/strings.xml android_res/com/facebook/presence/status/res/values/strings.xml android_res/com/facebook/fds/progressbar/res/values/strings.xml android_res/com/facebook/screencast/res/values/strings.xml android_res/com/facebook/bugreporter/core/res/values/strings.xml android_res/com/facebook/bugreporter/res/values/strings.xml libraries/foa/ui/cds/widgets-litho/searchfield/res/values/strings.xml android_res/com/facebook/analytics/view/tracking/res/values/strings.xml android_res/com/facebook/webview/res/values/strings.xml android_res/com/facebook/katana/internsettings/sandboxpicker/res/values/strings.xml libraries/bloks-core/rendeer/res/values/strings.xml libraries/bloks-debug/com/bloks/debug/res/values/strings.xml android_res/com/facebook/katana/res/values/strings.xml android_res/com/facebook/account/switcher/res/values/strings.xml android_res/com/facebook/login/res/values/strings.xml android_res/com/facebook/account/recovery/res/values/strings.xml android_res/com/facebook/account/common/res/values/strings.xml android_res/com/facebook/growth/res/values/strings.xml android_res/com/facebook/wem/res/values/strings.xml android_res/com/facebook/timeline/ui/common/res/values/strings.xml android_res/com/facebook/photos/editgallerylauncher/res/values/strings.xml android_res/com/facebook/photos/crop/res/values/strings.xml android_res/com/facebook/fb4a/base/res/values/strings.xml ../arvr/libraries/ocui/res/values/strings.xml android_res/com/oculus/auth/authenticator/meta/res/values/strings.xml android_res/com/oculus/horizon/platformplugin/res/values/strings.xml java/com/oculus/horizon/platform/res/known_signer_res/values/strings.xml android_res/com/oculus/horizon/try_before_you_buy/res/values/strings.xml android_res/com/oculus/horizon/common/res/values/strings.xml android_res/com/oculus/horizon/linkedaccounts/res/values/strings.xml android_res/com/oculus/auth/authenticator/work/res/values/strings.xml android_res/com/oculus/auth/authenticator/threadssso/res/values/strings.xml android_res/com/oculus/auth/authenticator/oculus/res/values/strings.xml android_res/com/oculus/auth/authenticator/instagramsso/res/values/strings.xml android_res/com/oculus/auth/authenticator/horizonworldsplatform/res/values/strings.xml android_res/com/oculus/auth/authenticator/facebooksso/res/values/strings.xml android_res/com/oculus/auth/authenticator/facebook/res/values/strings.xml android_res/com/oculus/demoapp/res/values/strings.xml android_res/com/facebook/wearable/sdk/watchface/res/values/strings.xml android_res/com/facebook/wearable/common/wds/switchbutton/res/values/strings.xml android_res/com/facebook/wearable/apps/weather/res/values/strings.xml android_res/com/facebook/wearable/common/watchface/complications/res/values/strings.xml android_res/com/facebook/wearable/common/watchface/res/values/strings.xml android_res/com/facebook/wearable/apps/weather/panel/res/values/strings.xml android_res/com/facebook/wearable/apps/mockappmedium/res/values/strings.xml android_res/com/instagram/ui/common/res/values/strings.xml android_res/com/instagram/actionbar/strings/res/values/strings.xml android_res/com/instagram/tabs/strings/res/values/strings.xml android_res/com/instagram/igds/newbadge/res/values/strings.xml android_res/com/instagram/avatar/strings/res/values/strings.xml android_res/com/instagram/icons/igax/res/values/strings.xml android_res/com/instagram/debug/strings/res/values/strings.xml android_res/com/instagram/language/strings/res/values/strings.xml android_res/com/instagram/util/number/strings/res/values/strings.xml android_res/com/meta/metaai/imagine/memu/permissions/res/values/strings.xml android_res/com/instagram/creation/genai/magicmod/model/strings/res/values/strings.xml android_res/com/instagram/common/timeformat/strings/res/values/strings.xml android_res/com/instagram/bugreporter/strings/res/values/strings.xml android_res/com/instagram/homecoming/feeds/inboxtabs/strings/res/values/strings.xml android_res/com/instagram/zero/banner/strings/res/values/strings.xml android_res/com/instagram/voice/voicemessagebar/strings/res/values/strings.xml android_res/com/instagram/homecoming/feeds/feedpills/strings/res/values/strings.xml android_res/com/instagram/homecoming/feeds/mergedfeeds/strings/res/values/strings.xml android_res/com/instagram/unifiedvideo/scrubber/strings/res/values/strings.xml android_res/com/instagram/ui/mediaactions/strings/res/values/strings.xml android_res/com/instagram/zero/strings/res/values/strings.xml android_res/com/instagram/ui/dialog/strings/res/values/strings.xml android_res/com/instagram/ui/text/strings/res/values/strings.xml android_res/com/instagram/ui/menu/strings/res/values/strings.xml android_res/com/instagram/igds/dialog/res/values/strings.xml android_res/com/instagram/igds/headline/strings/res/values/strings.xml allow-large-files ignore-conflict-markers opt-out-review drop-conflicts Differential Revision: D108245950 fbshipit-source-id: c26a5a75547f93955b7ec924772a3e78dadea4a7
…t-native (#57167) Summary: Pull Request resolved: #57167 Update GitHub Actions workflow files to reflect React Native's migration from `facebook/react-native` to `react/react-native`. Changes the fork-prevention guards (`github.repository == 'facebook/react-native'`) to use the new org across 17 workflow files (28 occurrences total), plus updates the `repo_owner` parameter in the issue monitoring workflow. Changelog: [Internal] Reviewed By: fabriziocucci Differential Revision: D108246445 fbshipit-source-id: 010631838a05e366da525aa765d3ea4376f9d145
…tate and updatePadding (#57181) Summary: Pull Request resolved: #57181 ## Summary Fixes `RetryableMountingLayerException: Unable to find viewState for tag N. Surface stopped: false` crashing `com.oculus.firsttimenux` from the Fabric batch-mount path. Logview link: [252c85116a7ab5c4ec93ef3c3373cf9d](https://www.internalfb.com/logview/system_vros_crashes/252c85116a7ab5c4ec93ef3c3373cf9d) ## Root cause `IntBufferBatchMountItem.execute` dispatches batched mount instructions. When a view tag is transiently missing from the registry (async race between the JS commit and native mount — surface teardown / out-of-order delivery), mount methods that call the throwing `getViewState` raise `RetryableMountingLayerException`. `MountItemDispatcher.dispatchMountItems` only retries this exception `if (item is DispatchCommandMountItem)` (comment: *"Only DispatchCommandMountItem supports retries"*) — `IntBufferBatchMountItem` is not one, so the "retryable" exception propagates uncaught and crashes the app. The RN team has been hardening each batch mount method to handle missing viewState gracefully (soft-log + early return): `addViewAt` in `D99760257` (which references this same MID and process), `updateOverflowInset` in `D104400233`; `removeViewAt`, `updateProps`, `updateLayout`, and `deleteView` were already graceful. The originally-reported `addViewAt` stack is therefore already fixed in trunk — crashes persist on release branch v201/v203 which predates `D99760257`. `updateState` (`INSTRUCTION_UPDATE_STATE`) and `updatePadding` (`INSTRUCTION_UPDATE_PADDING`) were the two remaining throwing `getViewState` callers reachable from `IntBufferBatchMountItem.execute` — unfixed siblings of the same multi-site pattern and live/contributing crash sites for the same exception. ## Fix Change `updateState` and `updatePadding` to use `getNullableViewState`; on null, log a `SURFACE_MOUNTING_MANAGER_MISSING_VIEWSTATE` soft exception and return early — identical to the established pattern in `addViewAt`, `updateOverflowInset`, `updateProps`, `updateLayout`, and `deleteView`. This is not a throw-downgrade of an invariant: `RetryableMountingLayerException` is an explicitly retryable transient signal, and this matches the canonical handling the RN team applies to every other batch mount method. The non-batch callers (`sendAccessibilityEvent`, `setJSResponder`) are intentionally left unchanged — `sendAccessibilityEvent` is already protected by its own `try/catch (RetryableMountingLayerException)` in `SendAccessibilityEventMountItem.execute`. ## Changelog: [Android] [Fixed] - Handle missing viewState gracefully in `SurfaceMountingManager.updateState` and `updatePadding` to avoid `RetryableMountingLayerException` crashes from the Fabric batch-mount path Reviewed By: javache Differential Revision: D107768754 fbshipit-source-id: 5861bcae5d598b6ffae48c32830d16323474d8bf
Summary: Pull Request resolved: #57173 - All legacy casting syntax has been converted, so we remove `casting_syntax=both` to use the default option of only allowing the new `as` casting syntax - Removed all other options that are already the default value Changelog: [Internal] Reviewed By: panagosg7 Differential Revision: D108281827 fbshipit-source-id: 0557fd0e45061c5c3c1d2f517caa3491921d153d
Summary: X-link: #57127 Changelog: [Android][Fixed] Prevent React Native containers from delaying native touches [`shouldDelayChildPressedState`](https://developer.android.com/reference/android/view/ViewGroup#shouldDelayChildPressedState%28%29) returns `true` for compatibility reasons and non-scrollable containers should override it and return `false` to prevent the press feedback from being delayed. Reviewed By: javache Differential Revision: D108003374 fbshipit-source-id: 5c9cff01a088b09d3de27396a834ee370ae740ce
Summary: if you check the search results you won't find any usages of `UTFSequence` module. Also it wasn't documented. So, it can be treated as dead-code and needs to be removed from RN package ```bash open https://github.com/search?q=%22UTFSequence.BOM%22&type=code open https://github.com/search?q=%22UTFSequence.BULLET%22&type=code open https://github.com/search?q=%22UTFSequence.BULLET_SP%22&type=code open https://github.com/search?q=%22UTFSequence.MIDDOT%22&type=code open https://github.com/search?q=%22UTFSequence.MIDDOT_SP%22&type=code open https://github.com/search?q=%22UTFSequence.MIDDOT_KATAKANA%22&type=code open https://github.com/search?q=%22UTFSequence.MDASH%22&type=code open https://github.com/search?q=%22UTFSequence.MDASH_SP%22&type=code open https://github.com/search?q=%22UTFSequence.NDASH%22&type=code open https://github.com/search?q=%22UTFSequence.NDASH_SP%22&type=code open https://github.com/search?q=%22UTFSequence.NEWLINE%22&type=code open https://github.com/search?q=%22UTFSequence.NBSP%22&type=code open https://github.com/search?q=%22UTFSequence.PIZZA%22&type=code open https://github.com/search?q=%22UTFSequence.TRIANGLE_LEFT%22&type=code open https://github.com/search?q=%22UTFSequence.TRIANGLE_RIGHT%22&type=code ``` In RN repo in used in one places and can be replaced with string litaral: https://github.com/facebook/react-native/blob/8bcfb3ba1c16b1ba45058798bf43ecdc9bd42d3a/packages/react-native/Libraries/LogBox/Data/parseLogBoxLog.js#L109 ## Changelog: [GENERAL] [DEPRECATED] - Mark undocumented `UTFSequence` module as deprecated Pull Request resolved: #57184 Test Plan: ... Reviewed By: cortinico Differential Revision: D108397866 Pulled By: javache fbshipit-source-id: 3b343fb6a33f064df47f0819c84b127b64706a97
…r shared animated backend (#57178) Summary: Pull Request resolved: #57178 ## Changelog: [Internal][Fixed] - Fix native-driven props dropped on Animated.FlatList/SectionList under shared animated backend Under the shared animated backend (`cxxNativeAnimatedEnabled` + `useSharedAnimatedBackend`), a `useNativeDriver: true` animation on `Animated.FlatList` or `Animated.SectionList` (or any class composite that wraps a host) was silently dropped — e.g. an opacity fade never committed, so the content stayed at its initial value. Root cause: `AnimatedProps.#connectShadowNode` resolves the target shadow node via `getNodeFromPublicInstance(target.instance)`. `FlatList`/`SectionList` are class components (not `forwardRef`-to-host), so the ref is the composite instance, which has no `__internalInstanceHandle`; `getNodeFromPublicInstance` returns `null` and `connectAnimatedNodeToShadowNodeFamily` is never called. The C++ shared backend commits animated props only through a connected `ShadowNodeFamily` and has no viewTag fallback when `useSharedAnimatedBackend` is enabled, so the value is dropped. `Animated.View` and `Animated.ScrollView` are unaffected because their ref is the host instance; with `cxxNativeAnimatedEnabled` alone the legacy viewTag path still commits, so this only regresses once the shared backend is on. Fix: in `#connectShadowNode`, resolve the shadow node from the host instance rather than the composite — try the instance, then `getNativeScrollRef()` (covers `FlatList`/`SectionList`), then fall back to the host tag that `#connectAnimatedView` already resolved via `findNodeHandle`, looked up natively with `findShadowNodeByTag_DEPRECATED`. The `#connectAnimatedView` viewTag path is unchanged. Reviewed By: cipolleschi, javache Differential Revision: D108155219 fbshipit-source-id: 7ba986300cf4a050d8b5d1ecd22ea200cfcf4b10
Summary: The `PointerEventsProcessor` C++ pointer-events implementation already supports pointer capture and can emit `topGotPointerCapture` and `topLostPointerCapture`. `TouchEventEmitter` has handlers for both events. Android base view config was not registering the events: - `onGotPointerCapture` / `onGotPointerCaptureCapture` - `onLostPointerCapture` / `onLostPointerCaptureCapture` This adds the missing Android registrations and adds an EventDispatching integration test covering capture and bubble dispatch for both pointer capture events. ## Changelog: [Android] [Fixed] - Register pointer capture event handlers in the Android base view config Pull Request resolved: #57176 Test Plan: Added coverage in `EventDispatching-itest.js` for `onGotPointerCapture`, `onGotPointerCaptureCapture`, `onLostPointerCapture`, and `onLostPointerCaptureCapture`. `git diff --check main...HEAD` Reviewed By: cortinico Differential Revision: D108321784 Pulled By: Abbondanzo fbshipit-source-id: ce5c6d369dae15030062457d2857ae501e02e224
Summary: Pull Request resolved: #57179 ## Changelog: [Internal] - Serve C++ Native Animated from core (non sharedbackend path) Wire the C++ implementation of Native Animated (the `AnimatedModule`) into the framework core so that, when `cxxNativeAnimatedEnabled` is enabled, it is served without per-app wiring. The flag is flipped in a separate diff. Android drives the animated render loop internally, so `DefaultTurboModules` serves `AnimatedModule` whenever `cxxNativeAnimatedEnabled` is on. iOS/macOS need the platform `RCTAnimatedModuleProvider` to drive rendering when the shared animated backend is off; with the shared backend on, `DefaultTurboModules` serves it instead. The default `RCTReactNativeFactory` delegate installs the provider, and a `React-RCTAnimatedModuleProvider` podspec is added for CocoaPods. Reviewed By: christophpurrer Differential Revision: D108197770 fbshipit-source-id: 9dcce1965b67dae96422f44a4656e030f18265a6
…7165) Summary: Promote `backgroundImage` from `experimental_backgroundImage` to a stable style prop. It has been available in experimental mode for some time and is already used in popular open-source projects such as NativeWind, Unstyles, Tamagui, React Strict DOM, and others, with no reported issues so far. `backgroundImage` currently supports `linear-gradient` and `radial-gradient`. `url()` support already has a PR up ([PRs](#54995)), it should not be a blocker imo though as gradient is also a big unlock. ## Changelog: [GENERAL][CHANGED] - Remove `experimental_` prefix from `backgroundImage` <!-- 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: #57165 Test Plan: Tested background image screen on RNTester. Reviewed By: javache Differential Revision: D108301578 Pulled By: jorge-cab fbshipit-source-id: 558d1d8943b3cd56557584eaf5e4bda112154298
Summary: Pull Request resolved: #57191 On Android, when a `TextInput`'s `multiline` prop changes from `false` to `true` and back to `false`, the placeholder stayed rendered across multiple lines instead of returning to a single line. `ReactEditText.setInputType` only forced the view out of single-line mode when `multiline` was enabled; it never restored single-line mode when `multiline` was disabled. `TextView.setInputType` re-applies its single-line layout (max lines, horizontal scrolling) only when its internal single-line flag actually changes, and because we toggle that flag off whenever multiline is on, it can be stale so the reset is skipped. On top of that, under the new architecture the view is not re-measured when only the input type changes while the measured size is unchanged. The placeholder is then rebuilt at draw time at the view's physical width and stays wrapped. This change restores single-line mode when `multiline` is turned off (skipping secure-text fields so their password transformation method is preserved) and forces a re-measure on the multiline-to-single-line transition, so the placeholder is laid out on a single line again. Changelog: [Android][Fixed] - Fix `TextInput` placeholder staying on multiple lines after `multiline` is toggled from `true` back to `false` Reviewed By: javache Differential Revision: D108370869 fbshipit-source-id: 3a234723b37aff941cdfc9bbfa9290d033ca65f5
Summary: Pull Request resolved: #57182 Guard against possibly deallocated RCTCallableJSModules. Changelog: [Internal] Reviewed By: fkgozali, javache Differential Revision: D108361186 fbshipit-source-id: 33f325742571b473ee12736afd80aff2bb717665
Summary: Pull Request resolved: #57192 Changelog: [Internal] Reviewed By: panagosg7 Differential Revision: D108435552 fbshipit-source-id: b9228cb948590d4981e0ad0b798354b611751bec
Summary: Pull Request resolved: #57205 ## Changelog: [Internal][Fixed] - Fix EXC_BAD_ACCESS / KERN_INVALID_ADDRESS in C++ Animated when `useSharedAnimatedBackend()` flips across a reused runtime C++ Animated chose between the legacy and shared-`AnimationBackend` code paths by reading `ReactNativeFeatureFlags::useSharedAnimatedBackend()` live, in many places. That flag is a process-global singleton (`ReactNativeFeatureFlags::accessor_`). On some app the global is reset and re-applied on every user switch (`FBReactModule setUpReactNativeFeatureFlags` -> `dangerouslyReset()`/`override()`), and the previous user's runtime is kept alive and reused. The shared `AnimationBackend` is attached only once, when an instance's `Scheduler` is constructed, gated on the flag at that moment. On a multi-account device the global flag could therefore read true on a reused instance whose backend was never attached, so `getOrCreate` took the shared path and dereferenced a null backend. It also let JS and C++ disagree, since JS caches the flag per runtime while C++ followed the mutated global. Fix: make the per-instance decision once and use it everywhere instead of the live flag. - `NativeAnimatedNodesManagerProvider::getOrCreate` selects the path by whether the shared `AnimationBackend` actually exists for this instance (`unstable_getAnimationBackend().lock() != nullptr`). - `NativeAnimatedNodesManager` stores a `const bool useSharedAnimatedBackend_`, latched in its constructor (true for the shared-backend ctor, false for the legacy ctor), and exposes it via `useSharedAnimatedBackend()`. All internal reads now use the member. - `PropsAnimatedNode` reads the decision through `manager_->useSharedAnimatedBackend()`. The attach side (`Scheduler`) is intentionally unchanged: it remains the single construction-time read that latches the per-instance decision the rest of the code now follows. This keeps JS and C++ consistent across global flag flips and removes the null dereference. Reviewed By: sbuggay Differential Revision: D108428720 fbshipit-source-id: dff283cd3671866395d1b07b6c9c72e504aecea2
…es (#57212) Summary: Pull Request resolved: #57212 ## Changelog: [General][Fixed] Fix asyncArrayBufferBorrowNativeBackedTest unconditional skip on Hermes On runtimes that don't implement `tryGetMutableBuffer` (e.g. Hermes / Android-32bit), `asyncArrayBufferBorrowNativeBackedTest` always called `GTEST_SKIP()`, which surfaced as a perpetually-skipped test in CI. Replace the skip with `EXPECT_JSI_THROW(AsyncArrayBuffer::borrow(...))`. On runtimes without `tryGetMutableBuffer`, `borrow` is documented to throw because there is no native `MutableBuffer` to hand back, so this is the meaningful behavior to assert. On runtimes that do implement `tryGetMutableBuffer`, the existing zero-copy assertions are unchanged. ___ Reviewed By: shwanton Differential Revision: D108657073 fbshipit-source-id: 992520104d9d9e4ece56b8522cdb6143319379a3
Summary: - Walk nested style arrays directly into one result object instead of recursively allocating intermediate flattened objects. - Preserve existing behavior for object styles, falsy entries, and later-style override order. - Add focused unit coverage for array inputs that must still allocate merged result objects. ## Benchmark proof External reproducible benchmark app: https://github.com/tarikfp/rn-style-flatten-benchmark Latest `yarn bench:compare` from the benchmark repo compares React Native `main` at `066c0d8bd8` against this branch at `81b5bc26b6`: | scenario | before median ms | after median ms | change | | --- | ---: | ---: | ---: | | nested single style array | 294.79 | 98.73 | 66.5% faster | | nested merged style array | 278.54 | 122.06 | 56.2% faster | This is not a blanket claim that every React Native screen becomes 50%+ faster. It is targeted to the `flattenStyle` path when composed components pass nested style arrays. ## Validation - `yarn test` in benchmark app repo - `yarn lint` in benchmark app repo - `yarn workspace style-flatten-benchmark-app tsc --noEmit` - `yarn bench:compare` - `yarn test packages/react-native/Libraries/StyleSheet/__tests__/flattenStyle-test.js --runInBand` in the React Native checkout - iOS simulator build/install for the benchmark app Draft while broader upstream validation is gathered. ## Affected areas `flattenStyle` is not only the public `StyleSheet.flatten` helper. Core React Native components call it when they need to read or normalize style props before passing work further down: - `Text` uses it in `packages/react-native/Libraries/Text/Text.js:188` before normalizing text style values such as numeric `fontWeight` and text selection-related props. - `Image` uses it on both platforms: `Image.ios.js:141` reads `objectFit`, `resizeMode`, and `tintColor`; `Image.android.js:310` reads `objectFit` and `resizeMode` before building native props. - `ImageBackground` uses it in `packages/react-native/Libraries/Image/ImageBackground.js:72` before splitting size-related style values between the wrapper view and inner image. - `TextInput` uses it in `packages/react-native/Libraries/Components/TextInput/TextInput.js:655` while preserving the original style when possible, but still flattening to normalize text style overrides. - `TouchableOpacity` uses it in `packages/react-native/Libraries/Components/Touchable/TouchableOpacity.js:260` and `:364` to read opacity from `style` when setting and updating its animated opacity. - `ScrollView` uses it in `packages/react-native/Libraries/Components/ScrollView/ScrollView.js:1663` for development-time layout warnings and in `:1850` when splitting outer and inner layout props around refresh controls. - `Animated.ScrollView` uses the same split path in `packages/react-native/Libraries/Animated/components/AnimatedScrollView.js:94`. - Animated props use it in `packages/react-native/Libraries/Animated/nodes/AnimatedProps.js:62` and `:157`, and the newer memo hook uses it in `packages/react-native/src/private/animated/createAnimatedPropsMemoHook.js:125`, so nested style arrays also matter for animated style props. - Fabric public instances use it in `packages/react-native/Libraries/ReactNative/ReactFabricPublicInstance/ReactNativeAttributePayload.js:186` and `:195` before diffing array style props. - Developer tooling also goes through it: the element inspector uses it in `ElementProperties.js:43` and `ElementBox.js:34`, and React DevTools receives it as the React Native style resolver from `setUpReactDevTools.js:74`. That is why the benchmark focuses on nested style arrays instead of claiming every render gets faster. The change helps when those call sites receive styles composed like `style={[base, condition && extra, [override]]}`. ## Changelog: [GENERAL] [CHANGED] - Make `flattenStyle` avoid extra intermediate objects when flattening nested style arrays. Pull Request resolved: #57203 Test Plan: - Ran the focused React Native unit test: `yarn test packages/react-native/Libraries/StyleSheet/__tests__/flattenStyle-test.js --runInBand`. - Ran the external benchmark app checks: `yarn test`, `yarn lint`, and `yarn workspace style-flatten-benchmark-app tsc --noEmit`. - Ran `yarn bench:compare` in the benchmark app repo. The latest saved result compares React Native `main` at `066c0d8bd8` with this branch at `81b5bc26b6` and shows the nested style-array cases improving from `294.79 ms` to `98.73 ms` and from `278.54 ms` to `122.06 ms`. - Built and installed the benchmark app on iOS simulators to compare a `main` build and this branch side by side. Reviewed By: javache Differential Revision: D108616011 Pulled By: Abbondanzo fbshipit-source-id: f1540a274b6919c43d137d6587ea4d11be258796
Summary: Pull Request resolved: #57213 `StateData` is the placeholder data type for shadow nodes that have no state. It declared `getMapBuffer()` but never defined it, which breaks the build under clang-22. `ConcreteState<DataT>::getMapBuffer()` calls `getData().getMapBuffer()` only when the `StateDataWithMapBuffer` concept is satisfied, and otherwise returns `MapBufferBuilder::EMPTY()`. Because `StateData` declared `getMapBuffer()`, it satisfied the concept, so `ConcreteState<StateData>::getMapBuffer()` referenced the undefined `StateData::getMapBuffer()`. Whether a class template's virtual members are implicitly instantiated is unspecified ([temp.inst]/11); clang-22 instantiates this override, turning the missing definition into an undefined-symbol link error. Remove `getMapBuffer()` from `StateData` so the concept is no longer satisfied and the `EMPTY()` fallback is used — the same way `getJNIReference()` is already handled for this placeholder type. `getDynamic()` stays, since `ConcreteState` calls it unconditionally. Changelog: [Internal] Reviewed By: javache Differential Revision: D95506209 fbshipit-source-id: 71e767bb19dce5b6097d49654b3701896a783f5b
) Summary: Pull Request resolved: #57214 The ReactCxxPlatform `NetworkingModule` delivered response bodies to JS verbatim regardless of the requested `responseType`. For binary response types (`responseType` `arraybuffer`, which the JS `XMLHttpRequest` layer maps to the native `base64` type), JS calls `base64.toByteArray()` on the delivered string. Sending the raw bytes therefore caused the payload to be mis-decoded and corrupted — e.g. `JSON.parse` failures on responses fetched as `arraybuffer`. Encode the body with base64 for `base64` responses, matching the existing Android (`NetworkingModule.kt` via `Base64.encodeToString(..., NO_WRAP)`) and iOS (`RCTNetworking.mm` via `base64EncodedStringWithOptions:0`) implementations. The encoding reuses the shared `react/utils` `base64Encode` helper already used by `jsinspector-modern`. All other response types are delivered unchanged. The per-`responseType` decision lives in a file-local (anonymous-namespace) `encodeResponseBody` helper in `NetworkingModule.cpp`, so it adds no surface to the public C++ API. Changelog: [General][Fixed] - Base64-encode binary (arraybuffer/blob) response bodies in the C++ NetworkingModule so they are not corrupted when delivered to JS Reviewed By: zeyap Differential Revision: D108440201 fbshipit-source-id: 38467877ff99ce7fe4d55739662faeb15b7e0440
…#57207) Summary: Pull Request resolved: #57207 Under the EventTarget-based event dispatch path, an error thrown by an event handler (e.g. `onPress`, `onScroll`) was deferred to a new task via `setTimeout(0)` in `reportListenerError`. This diverged from the legacy plugin path, which collected the first listener error and rethrew it synchronously at the end of the dispatch (React's `runEventsInBatch` + `rethrowCaughtError`). As a result, handler errors escaped the synchronous dispatch flow — they were no longer catchable by React error boundaries or the native event call, and instead surfaced as deferred, uncaught global errors. This restores the legacy contract for native event dispatch: - `dispatchTrustedEvent` gains an opt-in `rethrowListenerErrors` argument. `dispatch()` threads a per-dispatch error holder through `invoke`/`invokeListeners`; when the flag is set it records the first listener error and rethrows it synchronously after the event has been fully cleaned up. - The renderer's native event dispatch (`dispatchNativeEvent`) opts in, so listener errors propagate synchronously again. The responder lifecycle `rethrowCaughtError()` is moved into a `finally` so a pending responder error can never leak into a later dispatch if the normal dispatch throws. - The public `dispatchEvent` API and other `EventTarget` consumers (e.g. `XMLHttpRequest`) are unchanged: they keep the DOM contract of reporting listener errors to the global error handler without throwing. - Re-enabled the previously skipped event-dispatch error-handling integration tests so they run in both dispatch modes. Changelog: [Internal] Reviewed By: javache Differential Revision: D108622141 fbshipit-source-id: 941500d12e217da6c0be1cb48e4dcae5537666c9
Summary: build_android is currently timing out - this should unblock it for now till we find a different solution. ## Changelog: [INTERNAL] - Pull Request resolved: #57216 Test Plan: CI Reviewed By: huntie Differential Revision: D108744449 Pulled By: cortinico fbshipit-source-id: 4b14252889c3d9ebcb4ad2135839233e103355d7
….withResolvers` (#57215) Summary: New methods `Promise.try` and `Promise.withResolvers` were added to the Hermes V1 branch, see: facebook/hermes#2020 I tested them on the latest RN 0.86.0, and they are working: ```tsx console.log({ 'ReactNativeVersion.getVersionString()':ReactNativeVersion.getVersionString(), 'Promise.try': Promise.try, 'Promise.withResolvers': Promise.withResolvers, }); //{ // "Promise.try": [Function anonymous], // "Promise.withResolvers": [Function anonymous], // "ReactNativeVersion.getVersionString()": "0.86.0" // } ``` - `es2024.promise` - includes `Promise.withResolvers` - `esnext.promise` - includes `Promise.try` ## Changelog: [GENERAL] [ADDED] - Add `Promise.try` + `Promise.withResolvers` typescript types Pull Request resolved: #57215 Test Plan: ``` edit `node_modules/react-native/typescript-config/tsconfig.json` add `es2024.promise` `esnext.promise` try to use new methods in ts files // no error expected ``` Reviewed By: robhogan Differential Revision: D108745447 Pulled By: fabriziocucci fbshipit-source-id: dfebe404ab45bc4cb9071692d2f13c42b2816e51
Summary: Pull Request resolved: #57221 changelog: [internal] Reviewed By: javache Differential Revision: D108605640 fbshipit-source-id: 2668aa853715cfb9ebdbe67cbaf45c092a0cb706
Summary: Pull Request resolved: #57229 Remove the deprecated `PublicScrollViewInstance` and `PublicModalInstance` type aliases, replacing all remaining usages with the canonical `ScrollViewInstance` and `ModalInstance` types. NOTE: Existing equivalent types are **left alone** in the manual `.d.ts` sources (current TS API), as this is covered by the existing breaking migration notes for ref types under the Strict API. **Changes** - Delete `PublicScrollViewInstance` alias (ScrollView.js) - Delete `PublicModalInstance` alias (Modal.js) - Update `IntersectionObserverExplicitRootScroll.js` rn-tester example Changelog: [General][Removed] - **Strict TypeScript API**: Remove deprecated `PublicScrollViewInstance` and `PublicModalInstance` types. Use `ScrollViewInstance` and `ModalInstance` instead. Reviewed By: cipolleschi Differential Revision: D107268481 fbshipit-source-id: fbcd42378bf13919d5b14d5472f3c5ff4ffbbc9d
…t-out (#57220) Summary: Pull Request resolved: #57220 Flip the React Native feature flag `fixDifferentiatorParentTagForUnflattenCase` default to `true` so the differentiator `parentTag` fix is on by default across all platforms Changelog: [Internal] Wire fbios + fb4a to MobileConfig params so we can opt out server-side if needed. Because the MC defaults are `true`, the feature activates for all FB-app users on land; setting the param to `false` server-side is the kill switch. Reviewed By: zeyap Differential Revision: D108613362 fbshipit-source-id: 6ffa21774582d5b8d83192fc65a964142b87b88e
) Summary: Pull Request resolved: #57223 Adds a `gjpqy` example to the Text > lineHeight RNTester section that exercises `fontSize: 24, lineHeight: 24`. Pure example addition for the upcoming `CustomLineHeightSpan` descender-clipping fix, providing the surface for a jest-e2e screenshot regression test. Changelog: [Internal] Reviewed By: cortinico Differential Revision: D108409230 fbshipit-source-id: acd97a92e6970e29b1a04090d14976336cdc4b37
…57224) Summary: Pull Request resolved: #57224 The `enableDifferentiatorMutationVectorPreallocation` flag gated a mutation-vector pre-allocation optimization in the `Differentiator`. It was never ramped and is being removed. The flag defaulted to `false`, so this restores the pre-flag behavior by deleting the gated `reserve(...)` calls (an allocation hint with no effect on diffing results) and keeping the default `mutations.reserve(256)`. Removes the flag definition from `ReactNativeFeatureFlags.config.js`, the gated call sites in `Differentiator.cpp`, and the regenerated feature-flag files (via `yarn featureflags --update`). Changelog: [Internal] Reviewed By: javache Differential Revision: D108411519 fbshipit-source-id: 73844c54627545a111ad2bd83fa09171d87c3396
Summary: Pull Request resolved: #57225 The `hideOffscreenVirtualViewsOnIOS` flag gated hiding of offscreen `VirtualView`s on iOS (setting `self.hidden`) in `RCTVirtualViewComponentView`. It was never ramped and is being removed. The flag defaulted to `false`, so the gated branches never set `hidden`; deleting them restores the pre-flag behavior. The now-unused `ReactNativeFeatureFlags.h` import is also removed. Removes the flag definition from `ReactNativeFeatureFlags.config.js`, the gated call sites in `RCTVirtualViewComponentView.mm`, and the regenerated feature-flag files (via `yarn featureflags --update`). Changelog: [Internal] Reviewed By: javache Differential Revision: D108411518 fbshipit-source-id: 50c5e6558b00c281bf143f780f6a029c9c876a18
Summary: Pull Request resolved: #57228 The flag gated a more memory-efficient view registry implementation in `SurfaceMountingManager` (`MutableIntObjectMap` with a `ReadWriteLock` instead of `ConcurrentHashMap`). Removing the gate, keeping the optimized path, and inlining the helper methods that previously dispatched between the two implementations. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D108415790 fbshipit-source-id: b21cbb1923cf7d15e375df8d3c3c51d187eecee3
Summary: Pull Request resolved: #57204 ## Changelog: [General] [Changed] - Flip cxxNativeAnimatedEnabled featureflag default to true Reviewed By: javache Differential Revision: D108323433 fbshipit-source-id: 7f8157013bd7369ef520348db8b3f2eaf19a5e35
…57211) Summary: Pull Request resolved: #57211 ## Changelog: [General] [Added] - remove `useNativeDriver` under featureflag animatedForceNativeDriver When `animatedForceNativeDriver` is enabled, it forces `useNativeDriver` to `true` for all Animated animations and events, overriding the config (explicit `false` set by user will be no-op). Has no effect unless the shared animated backend is enabled, which is required to support native driver for all props. Also using this flag to gate the js animation logic that could be cleaned up when this path is fully working. Reviewed By: javache Differential Revision: D108193641 fbshipit-source-id: fa2c7332742435309fc00831d9644ca2cf2f6ab9
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )