From 06bbfc04ad7e08af961b4870e016e5b2bc487f8f Mon Sep 17 00:00:00 2001 From: Anukrati Agrawal Date: Thu, 4 Jun 2026 12:06:33 -0700 Subject: [PATCH 1/6] Integrate RN 0.85.0-nightly-20260128-36f07a1b2 (with conflicts) --- package.json | 2 +- .../react-native-win32-tester/overrides.json | 4 +- .../react-native-win32-tester/package.json | 6 +- .../components/RNTesterExampleFilter.win32.js | 10 +- .../react-native-win32/.flowconfig | 2 +- .../react-native-win32/overrides.json | 32 +- .../react-native-win32/package.json | 20 +- .../AccessibilityInfo.win32.js | 52 +- .../Libraries/Components/Button.win32.js | 2 +- .../ProgressBarAndroid/ProgressBarAndroid.js | 2 +- .../TextInput/TextInput.flow.win32.js | 9 +- .../Components/Touchable/Touchable.win32.js | 8 +- .../View/ViewAccessibility.win32.js | 2 +- .../Libraries/Network/RCTNetworking.win32.js | 2 +- .../Renderer/shims/ReactNativeTypes.win32.js | 4 +- .../src-win/Libraries/Text/Text.win32.js | 1044 ++++++++++++----- .../Libraries/Types/CoreEventTypes.win32.js | 10 +- .../Libraries/Utilities/useMergeRefs.js | 4 +- .../react-native-win32/src-win/index.win32.js | 3 + .../src-win/index.win32.js.flow | 7 +- .../animated/NativeAnimatedHelper.win32.js | 2 +- .../automation-channel/package.json | 2 +- .../@react-native-windows/cli/package.json | 2 +- .../perf-testing/package.json | 2 +- .../tester/overrides.json | 8 +- .../@react-native-windows/tester/package.json | 8 +- .../js/examples/Image/ImageExample.windows.js | 4 +- .../js/examples/Text/TextExample.windows.js | 16 + .../Text/TextSharedExamples.windows.js | 6 + .../@react-native/monorepo/overrides.json | 4 +- packages/@react-native/monorepo/package.json | 18 +- .../js/MyNativeViewNativeComponent.js | 20 +- .../IntersectionObserverClippingParent.js | 2 +- .../IntersectionObserverClippingRoot.js | 2 +- .../IntersectionObserverExplicitRoot.js | 2 +- .../TextInput/TextInputSharedExamples.js | 15 +- .../js/utils/RNTesterNavigationReducer.js | 2 +- packages/@react-native/tester/overrides.json | 32 +- packages/@react-native/tester/package.json | 24 +- .../babel-react-native-config/package.json | 4 +- .../@rnw-scripts/eslint-config/package.json | 2 +- .../@rnw-scripts/integrate-rn/package.json | 2 +- .../metro-dev-config/package.json | 4 +- packages/e2e-test-app-fabric/package.json | 4 +- packages/playground/package.json | 4 +- .../react-native-windows-init/package.json | 2 +- packages/sample-app-fabric/package.json | 4 +- packages/sample-custom-component/package.json | 4 +- vnext/.flowconfig | 2 +- .../jsinspector-modern/NetworkIOAgent.cpp | 15 +- .../jsinspector-modern/NetworkIOAgent.h | 13 + .../react/renderer/uimanager/UIManager.cpp | 24 +- vnext/overrides.json | 46 +- vnext/package.json | 22 +- .../AccessibilityInfo.windows.js | 52 +- .../Libraries/Components/Button.windows.js | 2 +- .../RefreshControl/RefreshControl.windows.js | 2 +- .../ScrollView/ScrollView.windows.js | 14 +- .../ScrollViewNativeComponent.windows.js | 1 + .../TextInput/TextInput.flow.windows.js | 9 +- .../Components/Touchable/Touchable.windows.js | 8 +- .../View/ViewAccessibility.windows.js | 2 +- .../src-win/Libraries/Modal/Modal.windows.js | 2 +- .../Network/RCTNetworking.windows.js | 2 +- .../shims/ReactNativeTypes.windows.js | 4 +- vnext/src-win/Libraries/Text/Text.windows.js | 1040 +++++++++++----- .../Libraries/Types/CoreEventTypes.windows.js | 6 +- vnext/src-win/index.windows.js | 3 + vnext/src-win/index.windows.js.flow | 7 +- vnext/src-win/jest/setup.js | 1 + .../ReactNativeFeatureFlagsBase.js | 4 +- .../RCTModalHostViewNativeComponent.js | 2 +- yarn.lock | 302 ++--- 73 files changed, 2063 insertions(+), 948 deletions(-) diff --git a/package.json b/package.json index 8593871a5ea..0f6d48faa79 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "prettier": "^3.6.2", "prettier-plugin-hermes-parser": "0.21.1", "react": "19.2.3", - "react-native": "0.85.0-nightly-20260114-f15985f4f", + "react-native": "0.85.0-nightly-20260128-36f07a1b2", "react-native-platform-override": "0.0.0-canary.1017", "typescript": "5.0.4" }, diff --git a/packages/@office-iss/react-native-win32-tester/overrides.json b/packages/@office-iss/react-native-win32-tester/overrides.json index 4741976cf06..ef61879127c 100644 --- a/packages/@office-iss/react-native-win32-tester/overrides.json +++ b/packages/@office-iss/react-native-win32-tester/overrides.json @@ -5,7 +5,7 @@ "excludePatterns": [ "src/js/examples-win32/**" ], - "baseVersion": "0.85.0-nightly-20260114-f15985f4f", + "baseVersion": "0.85.0-nightly-20260128-36f07a1b2", "overrides": [ { "type": "patch", @@ -17,7 +17,7 @@ "type": "patch", "file": "src/js/components/RNTesterExampleFilter.win32.js", "baseFile": "packages/rn-tester/js/components/RNTesterExampleFilter.js", - "baseHash": "142194524dd3dfc8d28f2b77fb26cd819ce0236c" + "baseHash": "6766d57ee45d36991c8c2ec6ef20f6602bc924f9" }, { "type": "platform", diff --git a/packages/@office-iss/react-native-win32-tester/package.json b/packages/@office-iss/react-native-win32-tester/package.json index 05c57fdc805..a05cfc359ed 100644 --- a/packages/@office-iss/react-native-win32-tester/package.json +++ b/packages/@office-iss/react-native-win32-tester/package.json @@ -11,7 +11,7 @@ "validate-overrides": "react-native-platform-override validate" }, "dependencies": { - "@react-native/tester": "0.85.0-nightly-20260114-f15985f4f", + "@react-native/tester": "0.85.0-nightly-20260128-36f07a1b2", "@typescript-eslint/eslint-plugin": "^8.36.0", "@typescript-eslint/parser": "^8.36.0", "flow-enums-runtime": "^0.0.6" @@ -19,7 +19,7 @@ "peerDependencies": { "@office-iss/react-native-win32": "^0.0.0-canary.311", "react": "19.2.3", - "react-native": "0.85.0-nightly-20260114-f15985f4f" + "react-native": "0.85.0-nightly-20260128-36f07a1b2" }, "devDependencies": { "@office-iss/react-native-win32": "^0.0.0-canary.311", @@ -32,7 +32,7 @@ "just-scripts": "^1.3.3", "prettier": "^3.6.2", "react": "19.2.3", - "react-native": "0.85.0-nightly-20260114-f15985f4f", + "react-native": "0.85.0-nightly-20260128-36f07a1b2", "react-native-platform-override": "0.0.0-canary.1022", "typescript": "5.0.4" }, diff --git a/packages/@office-iss/react-native-win32-tester/src/js/components/RNTesterExampleFilter.win32.js b/packages/@office-iss/react-native-win32-tester/src/js/components/RNTesterExampleFilter.win32.js index 11116df5f15..c452968011b 100644 --- a/packages/@office-iss/react-native-win32-tester/src/js/components/RNTesterExampleFilter.win32.js +++ b/packages/@office-iss/react-native-win32-tester/src/js/components/RNTesterExampleFilter.win32.js @@ -29,8 +29,16 @@ type Props = { disableSearch?: boolean, testID?: string, hideFilterPills?: boolean, +<<<<<<< Upstream + page: 'examples_page' | 'components_page', + sections: ReadonlyArray>, +||||||| base + page: 'examples_page' | 'components_page', + sections: $ReadOnlyArray>, +======= page: 'examples_page' | 'components_page' | 'bookmarks_page', sections: $ReadOnlyArray>, +>>>>>>> Override ... }; @@ -81,7 +89,7 @@ class RNTesterExampleFilter extends React.Component, State> { } _renderFilteredSections( - filteredSections: $ReadOnlyArray<{ + filteredSections: ReadonlyArray<{ data: Array, key: string, title: string, diff --git a/packages/@office-iss/react-native-win32/.flowconfig b/packages/@office-iss/react-native-win32/.flowconfig index a98df672e58..95612478e14 100644 --- a/packages/@office-iss/react-native-win32/.flowconfig +++ b/packages/@office-iss/react-native-win32/.flowconfig @@ -175,4 +175,4 @@ untyped-import untyped-type-import [version] -^0.296.1 +^0.298.0 diff --git a/packages/@office-iss/react-native-win32/overrides.json b/packages/@office-iss/react-native-win32/overrides.json index 3b27e2e4531..002cb289f3f 100644 --- a/packages/@office-iss/react-native-win32/overrides.json +++ b/packages/@office-iss/react-native-win32/overrides.json @@ -7,25 +7,25 @@ "**/__snapshots__/**", "src-win/rntypes/**" ], - "baseVersion": "0.85.0-nightly-20260114-f15985f4f", + "baseVersion": "0.85.0-nightly-20260128-36f07a1b2", "overrides": [ { "type": "derived", "file": ".flowconfig", "baseFile": ".flowconfig", - "baseHash": "3e63114f0431abfd021daff6285787377f3f464f" + "baseHash": "66b23b57dc30a5834c9ee619d0381828b103a341" }, { "type": "derived", "file": "src-win/index.win32.js", "baseFile": "packages/react-native/index.js", - "baseHash": "43b61164095fb1f33793316908d5f974e7c46651" + "baseHash": "9007cd545c708aefc4ab3b9fb7418a210a6e879c" }, { "type": "derived", "file": "src-win/index.win32.js.flow", "baseFile": "packages/react-native/index.js.flow", - "baseHash": "da9cb1941e2b3d395d157e64a56b71a26396f2bf" + "baseHash": "62783de689e8711d7ea287966283974956d797d5" }, { "type": "platform", @@ -47,7 +47,7 @@ "type": "derived", "file": "src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js", "baseFile": "packages/react-native/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js", - "baseHash": "c0c7037e52d48caae88cffaac7f60d4dd1c32b3e" + "baseHash": "ee6f102be5d4b456d16900499a01abd0ca1ce1ba" }, { "type": "copy", @@ -66,7 +66,7 @@ "type": "derived", "file": "src-win/Libraries/Components/Button.win32.js", "baseFile": "packages/react-native/Libraries/Components/Button.js", - "baseHash": "86868c251bb5f5f62af9562cd6513ca1d5ee172d" + "baseHash": "c3f8d0874549590ba8d2d020fd1c13d604d74be9" }, { "type": "platform", @@ -98,7 +98,7 @@ "type": "copy", "file": "src-win/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js", "baseFile": "packages/react-native/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js", - "baseHash": "85efdbe556a087175fb9328f8d6e8d1f2cf29447" + "baseHash": "5eb51a48b73b5c1ccc24fe34fd91c67c01b969d4" }, { "type": "copy", @@ -114,7 +114,7 @@ "type": "derived", "file": "src-win/Libraries/Components/TextInput/TextInput.flow.win32.js", "baseFile": "packages/react-native/Libraries/Components/TextInput/TextInput.flow.js", - "baseHash": "6ea370fcabb5bb0db9682ed28ed832d971937caa" + "baseHash": "89dae9a6774a2fd24d7468702a616752e314d727" }, { "type": "derived", @@ -147,7 +147,7 @@ "type": "patch", "file": "src-win/Libraries/Components/Touchable/Touchable.win32.js", "baseFile": "packages/react-native/Libraries/Components/Touchable/Touchable.js", - "baseHash": "c71e7df7fbdeb6b2c1e9766e95725a56643fa28d" + "baseHash": "a9e38223753e718c5410a8ca9973064e699c1ab4" }, { "type": "derived", @@ -195,7 +195,7 @@ "type": "derived", "file": "src-win/Libraries/Components/View/ViewAccessibility.win32.js", "baseFile": "packages/react-native/Libraries/Components/View/ViewAccessibility.js", - "baseHash": "a4e4e6f4bf2df4685da8fa72a0dc63aee8c4b5db" + "baseHash": "7f8b076ccf47b528c604d2b1086754c351689b2e" }, { "type": "derived", @@ -341,7 +341,7 @@ "type": "copy", "file": "src-win/Libraries/Network/RCTNetworking.win32.js", "baseFile": "packages/react-native/Libraries/Network/RCTNetworking.ios.js", - "baseHash": "6cc93d00e1b6f541d08102cdc5363184f7ed6025", + "baseHash": "475b803e357811f6989d8d116bb040cfb1735b7c", "issue": 4318 }, { @@ -400,7 +400,7 @@ "type": "patch", "file": "src-win/Libraries/Renderer/shims/ReactNativeTypes.win32.js", "baseFile": "packages/react-native/Libraries/Renderer/shims/ReactNativeTypes.js", - "baseHash": "41da351b1e8d090e5ecf0859738218a5dcd4c08f", + "baseHash": "333afc05f5a42a5321196f5f7a14d14c8fd5dd0f", "issue": 0 }, { @@ -431,7 +431,7 @@ "type": "derived", "file": "src-win/Libraries/Text/Text.win32.js", "baseFile": "packages/react-native/Libraries/Text/Text.js", - "baseHash": "74cfb0cdb33d310206989381bccd0e00a7900078" + "baseHash": "618b750401e9066b212477f3c5d5484e4d181e32" }, { "type": "derived", @@ -450,7 +450,7 @@ "type": "patch", "file": "src-win/Libraries/Types/CoreEventTypes.win32.js", "baseFile": "packages/react-native/Libraries/Types/CoreEventTypes.js", - "baseHash": "f28ed059b210c9552fde4b43521980ba02f18c33", + "baseHash": "a171d222c66e809419656decb12be33185f35952", "issue": 6240 }, { @@ -497,13 +497,13 @@ "type": "copy", "file": "src-win/Libraries/Utilities/useMergeRefs.js", "baseFile": "packages/react-native/Libraries/Utilities/useMergeRefs.js", - "baseHash": "4ab145e150c82f4f82547122896e02f45103d1a1" + "baseHash": "a4f8be3b9ee884407be60acd32755eea5490ac45" }, { "type": "patch", "file": "src-win/src/private/animated/NativeAnimatedHelper.win32.js", "baseFile": "packages/react-native/src/private/animated/NativeAnimatedHelper.js", - "baseHash": "8d8ffd25d13e27e78900e3e90a686df9e2339159", + "baseHash": "b2f5d15fcf7b7b26fbd49e0196037fbb8175bb17", "issue": 11041 }, { diff --git a/packages/@office-iss/react-native-win32/package.json b/packages/@office-iss/react-native-win32/package.json index 3d813b21aaa..2ae6a15717b 100644 --- a/packages/@office-iss/react-native-win32/package.json +++ b/packages/@office-iss/react-native-win32/package.json @@ -30,13 +30,13 @@ "@react-native-community/cli-platform-android": "20.0.0", "@react-native-community/cli-platform-ios": "20.0.0", "@react-native/assets": "1.0.0", - "@react-native/assets-registry": "0.85.0-nightly-20260114-f15985f4f", - "@react-native/codegen": "0.85.0-nightly-20260114-f15985f4f", - "@react-native/community-cli-plugin": "0.85.0-nightly-20260114-f15985f4f", - "@react-native/gradle-plugin": "0.85.0-nightly-20260114-f15985f4f", - "@react-native/js-polyfills": "0.85.0-nightly-20260114-f15985f4f", - "@react-native/normalize-colors": "0.85.0-nightly-20260114-f15985f4f", - "@react-native/virtualized-lists": "0.85.0-nightly-20260114-f15985f4f", + "@react-native/assets-registry": "0.85.0-nightly-20260128-36f07a1b2", + "@react-native/codegen": "0.85.0-nightly-20260128-36f07a1b2", + "@react-native/community-cli-plugin": "0.85.0-nightly-20260128-36f07a1b2", + "@react-native/gradle-plugin": "0.85.0-nightly-20260128-36f07a1b2", + "@react-native/js-polyfills": "0.85.0-nightly-20260128-36f07a1b2", + "@react-native/normalize-colors": "0.85.0-nightly-20260128-36f07a1b2", + "@react-native/virtualized-lists": "0.85.0-nightly-20260128-36f07a1b2", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", @@ -75,7 +75,7 @@ "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", "@babel/preset-env": "^7.25.3", - "@react-native/metro-config": "0.85.0-nightly-20260114-f15985f4f", + "@react-native/metro-config": "0.85.0-nightly-20260128-36f07a1b2", "@rnw-scripts/babel-react-native-config": "0.0.0", "@rnw-scripts/eslint-config": "1.2.38", "@rnw-scripts/jest-out-of-tree-snapshot-resolver": "^1.1.42", @@ -92,14 +92,14 @@ "just-scripts": "^1.3.3", "prettier": "^3.6.2", "react": "19.2.3", - "react-native": "0.85.0-nightly-20260114-f15985f4f", + "react-native": "0.85.0-nightly-20260128-36f07a1b2", "react-native-platform-override": "0.0.0-canary.1022", "typescript": "5.0.4" }, "peerDependencies": { "@types/react": "^19.2.3", "react": "^19.2.3", - "react-native": "0.85.0-nightly-20260114-f15985f4f" + "react-native": "0.85.0-nightly-20260128-36f07a1b2" }, "beachball": { "defaultNpmTag": "canary", diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js b/packages/@office-iss/react-native-win32/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js index d6c48a728f9..2f5c25ec1dc 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js @@ -51,6 +51,55 @@ type AccessibilityEventTypes = | 'windowStateChange'; // Mapping of public event names to platform-specific event names. +<<<<<<< Upstream +const EventNames: Map = + Platform.OS === 'android' + ? new Map([ + ['change', 'touchExplorationDidChange'], + ['reduceMotionChanged', 'reduceMotionDidChange'], + ['highTextContrastChanged', 'highTextContrastDidChange'], + ['screenReaderChanged', 'touchExplorationDidChange'], + ['accessibilityServiceChanged', 'accessibilityServiceDidChange'], + ['invertColorsChanged', 'invertColorDidChange'], + ['grayscaleChanged', 'grayscaleModeDidChange'], + ]) + : new Map([ + ['announcementFinished', 'announcementFinished'], + ['boldTextChanged', 'boldTextChanged'], + ['change', 'screenReaderChanged'], + ['grayscaleChanged', 'grayscaleChanged'], + ['invertColorsChanged', 'invertColorsChanged'], + ['reduceMotionChanged', 'reduceMotionChanged'], + ['reduceTransparencyChanged', 'reduceTransparencyChanged'], + ['screenReaderChanged', 'screenReaderChanged'], + ['darkerSystemColorsChanged', 'darkerSystemColorsChanged'], + ]); +||||||| base +const EventNames: Map< + $Keys, + string, +> = Platform.OS === 'android' + ? new Map([ + ['change', 'touchExplorationDidChange'], + ['reduceMotionChanged', 'reduceMotionDidChange'], + ['highTextContrastChanged', 'highTextContrastDidChange'], + ['screenReaderChanged', 'touchExplorationDidChange'], + ['accessibilityServiceChanged', 'accessibilityServiceDidChange'], + ['invertColorsChanged', 'invertColorDidChange'], + ['grayscaleChanged', 'grayscaleModeDidChange'], + ]) + : new Map([ + ['announcementFinished', 'announcementFinished'], + ['boldTextChanged', 'boldTextChanged'], + ['change', 'screenReaderChanged'], + ['grayscaleChanged', 'grayscaleChanged'], + ['invertColorsChanged', 'invertColorsChanged'], + ['reduceMotionChanged', 'reduceMotionChanged'], + ['reduceTransparencyChanged', 'reduceTransparencyChanged'], + ['screenReaderChanged', 'screenReaderChanged'], + ['darkerSystemColorsChanged', 'darkerSystemColorsChanged'], + ]); +======= const EventNames: Map< $Keys, string, @@ -81,6 +130,7 @@ const EventNames: Map< ['screenReaderChanged', 'screenReaderChanged'], ['darkerSystemColorsChanged', 'darkerSystemColorsChanged'], ]); +>>>>>>> Override /** * Sometimes it's useful to know whether or not the device has a screen reader @@ -450,7 +500,7 @@ const AccessibilityInfo = { * * See https://reactnative.dev/docs/accessibilityinfo#addeventlistener */ - addEventListener>( + addEventListener( eventName: K, // $FlowFixMe[incompatible-type] - Flow bug with unions and generics (T128099423) handler: (...AccessibilityEventDefinitions[K]) => void, diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/Components/Button.win32.js b/packages/@office-iss/react-native-win32/src-win/Libraries/Components/Button.win32.js index 622418c8343..102868806b2 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/Components/Button.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/Components/Button.win32.js @@ -148,7 +148,7 @@ export type ButtonProps = Readonly<{ * Accessibility props. */ accessible?: ?boolean, - accessibilityActions?: ?$ReadOnlyArray, + accessibilityActions?: ?ReadonlyArray, onAccessibilityAction?: ?(event: AccessibilityActionEvent) => unknown, accessibilityState?: ?AccessibilityState, diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js b/packages/@office-iss/react-native-win32/src-win/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js index 7d51999f5e6..447327cb669 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js @@ -21,7 +21,7 @@ export type {ProgressBarAndroidProps}; // of ProgressBarAndroidProps. TS's Omit does not distribute over unions, so // we define our own version which does. This does not affect Flow. // $FlowExpectedError[unclear-type] -type Omit = T extends any ? Pick, K>> : T; +type Omit = T extends any ? Pick> : T; /** * ProgressBarAndroid has been extracted from react-native core and will be removed in a future release. diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/Components/TextInput/TextInput.flow.win32.js b/packages/@office-iss/react-native-win32/src-win/Libraries/Components/TextInput/TextInput.flow.win32.js index 72028efc19a..f51acca3a34 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/Components/TextInput/TextInput.flow.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/Components/TextInput/TextInput.flow.win32.js @@ -29,6 +29,7 @@ type TextInputChangeEventData = Readonly<{ eventCount: number, target: number, text: string, + selection?: Selection, }>; export type TextInputChangeEvent = @@ -306,7 +307,7 @@ export type TextInputIOSProps = Readonly<{ */ dataDetectorTypes?: | ?DataDetectorTypesType - | $ReadOnlyArray, + | ReadonlyArray, /** * If `true`, the keyboard disables the return key when there is no text and @@ -557,6 +558,11 @@ type TextInputBaseProps = Readonly<{ * * @see https://developer.android.com/reference/android/content/ClipData for more information on MIME types */ +<<<<<<< Upstream + experimental_acceptDragAndDropTypes?: ?ReadonlyArray, +||||||| base + experimental_acceptDragAndDropTypes?: ?$ReadOnlyArray, +======= experimental_acceptDragAndDropTypes?: ?$ReadOnlyArray, /** * String to be read by screenreaders to indicate an error state. The acceptable parameters @@ -565,6 +571,7 @@ type TextInputBaseProps = Readonly<{ */ accessibilityErrorMessage?: ?Stringish, accessibilityInvalid?: ?boolean, +>>>>>>> Override /** * Can tell `TextInput` to automatically capitalize certain characters. diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/Components/Touchable/Touchable.win32.js b/packages/@office-iss/react-native-win32/src-win/Libraries/Components/Touchable/Touchable.win32.js index 4e4b6e272f0..be1c2acaa62 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/Components/Touchable/Touchable.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/Components/Touchable/Touchable.win32.js @@ -25,10 +25,16 @@ import Position from './Position'; import * as React from 'react'; const extractSingleTouch = (nativeEvent: { +<<<<<<< Upstream + +changedTouches: ReadonlyArray, +||||||| base + +changedTouches: $ReadOnlyArray, +======= +changedTouches: $ReadOnlyArray, +altKey: ?boolean, +button: ?number, +ctrlKey: ?boolean, +>>>>>>> Override +force?: number, +identifier: number, +locationX: number, @@ -39,7 +45,7 @@ const extractSingleTouch = (nativeEvent: { +shiftKey: ?boolean, +target: ?number, +timestamp: number, - +touches: $ReadOnlyArray, + +touches: ReadonlyArray, }) => { const touches = nativeEvent.touches; const changedTouches = nativeEvent.changedTouches; diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/Components/View/ViewAccessibility.win32.js b/packages/@office-iss/react-native-win32/src-win/Libraries/Components/View/ViewAccessibility.win32.js index 04765d5484c..257edbc07a7 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/Components/View/ViewAccessibility.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/Components/View/ViewAccessibility.win32.js @@ -400,7 +400,7 @@ export type AccessibilityProps = Readonly<{ * Provides an array of custom actions available for accessibility. * */ - accessibilityActions?: ?$ReadOnlyArray, + accessibilityActions?: ?ReadonlyArray, /** * alias for accessibilityState diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/Network/RCTNetworking.win32.js b/packages/@office-iss/react-native-win32/src-win/Libraries/Network/RCTNetworking.win32.js index 454ce4b9176..ec4720f9f46 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/Network/RCTNetworking.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/Network/RCTNetworking.win32.js @@ -18,7 +18,7 @@ import {type RCTNetworkingEventDefinitions} from './RCTNetworkingEventDefinition import {type NativeResponseType} from './XMLHttpRequest'; const RCTNetworking = { - addListener>( + addListener( eventType: K, listener: (...RCTNetworkingEventDefinitions[K]) => unknown, context?: unknown, diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/Renderer/shims/ReactNativeTypes.win32.js b/packages/@office-iss/react-native-win32/src-win/Libraries/Renderer/shims/ReactNativeTypes.win32.js index 3226d4b538b..ee6ae134cac 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/Renderer/shims/ReactNativeTypes.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/Renderer/shims/ReactNativeTypes.win32.js @@ -7,9 +7,7 @@ * @noformat * @nolint * @flow strict - * @generated SignedSource<<989e6e2e860dc2af7ba983849111bda8>> - * - * This file was sync'd from the facebook/react repository. + * @generated SignedSource<> */ import type { diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/Text/Text.win32.js b/packages/@office-iss/react-native-win32/src-win/Libraries/Text/Text.win32.js index 0a00d4416c1..7e7e07f7dd8 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/Text/Text.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/Text/Text.win32.js @@ -14,7 +14,6 @@ import type {GestureResponderEvent} from '../Types/CoreEventTypes'; import type {NativeTextProps} from './TextNativeComponent'; import type {PressRetentionOffset, TextProps} from './TextProps'; -import * as ReactNativeFeatureFlags from '../../src/private/featureflags/ReactNativeFeatureFlags'; import * as PressabilityDebug from '../Pressability/PressabilityDebug'; import usePressability from '../Pressability/usePressability'; import flattenStyle from '../StyleSheet/flattenStyle'; @@ -36,6 +35,72 @@ type TextForwardRef = React.ElementRef< * * @see https://reactnative.dev/docs/text */ +<<<<<<< Upstream +const TextImpl: component( + ref?: React.RefSetter, + ...props: TextProps +) = ({ + ref: forwardedRef, + accessible, + accessibilityLabel, + accessibilityRole, + accessibilityState, + allowFontScaling, + 'aria-busy': ariaBusy, + 'aria-checked': ariaChecked, + 'aria-disabled': ariaDisabled, + 'aria-expanded': ariaExpanded, + 'aria-hidden': ariaHidden, + 'aria-label': ariaLabel, + 'aria-selected': ariaSelected, + children, + ellipsizeMode, + disabled, + id, + nativeID, + numberOfLines, + onLongPress, + onPress, + onPressIn, + onPressOut, + onResponderGrant, + onResponderMove, + onResponderRelease, + onResponderTerminate, + onResponderTerminationRequest, + onStartShouldSetResponder, + pressRetentionOffset, + role, + selectable, + selectionColor, + suppressHighlighting, + style, + ...restProps +}: { + ref?: React.RefSetter, + ...TextProps, +}) => { + const processedProps = restProps as { + ...NativeTextProps, + }; + const _accessibilityLabel = ariaLabel ?? accessibilityLabel; + let _accessibilityState: ?TextProps['accessibilityState'] = + accessibilityState; + if ( + ariaBusy != null || + ariaChecked != null || + ariaDisabled != null || + ariaExpanded != null || + ariaSelected != null + ) { + if (_accessibilityState != null) { + _accessibilityState = { + busy: ariaBusy ?? _accessibilityState.busy, + checked: ariaChecked ?? _accessibilityState.checked, + disabled: ariaDisabled ?? _accessibilityState.disabled, + expanded: ariaExpanded ?? _accessibilityState.expanded, + selected: ariaSelected ?? _accessibilityState.selected, +||||||| base let _TextImpl; if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { const TextImplNoDefaultProps: component( @@ -55,22 +120,6 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { 'aria-hidden': ariaHidden, 'aria-label': ariaLabel, 'aria-selected': ariaSelected, - // #[ Win32 - 'aria-level': ariaLevel, - 'aria-multiselectable': ariaMultiselectable, - 'aria-posinset': ariaPosinset, - 'aria-required': ariaRequired, - 'aria-setsize': ariaSetsize, - 'aria-controls': ariaControls, - 'aria-describedby': ariaDescribedBy, - 'aria-description': ariaDescription, - accessibilityLevel, - accessibilityPositionInSet, - accessibilitySetSize, - accessibilityControls, - accessibilityDescribedBy, - accessibilityDescription, - // #] Win32 children, ellipsizeMode, disabled, @@ -102,18 +151,6 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { ...NativeTextProps, }; const _accessibilityLabel = ariaLabel ?? accessibilityLabel; - // #Win32 [ - const _accessibilityControls = ariaControls ?? accessibilityControls; - const _accessibilityDescribedBy = - ariaDescribedBy ?? accessibilityDescribedBy; - const _accessibilityDescription = - ariaDescription ?? accessibilityDescription; - const _accessibilityLevel = ariaLevel ?? accessibilityLevel; - const _accessibilityPositionInSet = - ariaPosinset ?? accessibilityPositionInSet; - const _accessibilitySetSize = ariaSetsize ?? accessibilitySetSize; - // ] #Win32 - let _accessibilityState: ?TextProps['accessibilityState'] = accessibilityState; if ( @@ -129,11 +166,6 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { checked: ariaChecked ?? _accessibilityState.checked, disabled: ariaDisabled ?? _accessibilityState.disabled, expanded: ariaExpanded ?? _accessibilityState.expanded, - // #Win32 [ - multiselectable: - ariaMultiselectable ?? accessibilityState?.multiselectable, - required: ariaRequired ?? accessibilityState?.required, - // ] #Win32 selected: ariaSelected ?? _accessibilityState.selected, }; } else { @@ -142,10 +174,6 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { checked: ariaChecked, disabled: ariaDisabled, expanded: ariaExpanded, - // #Win32 [ - multiselectable: ariaMultiselectable, - required: ariaRequired, - // ] #Win32 selected: ariaSelected, }; } @@ -179,7 +207,7 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { accessible == null ? onPress != null || onLongPress != null : accessible, - default: accessible !== false, // [Windows #13996 - default value is accessible !== false] + default: accessible, }); const isPressable = @@ -281,30 +309,6 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { processedProps.role = _role; } - // [Windows accessibility properties - if (_accessibilityControls !== undefined) { - processedProps.accessibilityControls = _accessibilityControls; - } - - if (_accessibilityDescribedBy !== undefined) { - processedProps.accessibilityDescribedBy = _accessibilityDescribedBy; - } - - if (_accessibilityDescription !== undefined) { - processedProps.accessibilityDescription = _accessibilityDescription; - } - - if (_accessibilityLevel !== undefined) { - processedProps.accessibilityLevel = _accessibilityLevel; - } - if (_accessibilityPositionInSet !== undefined) { - processedProps.accessibilityPositionInSet = _accessibilityPositionInSet; - } - if (_accessibilitySetSize !== undefined) { - processedProps.accessibilitySetSize = _accessibilitySetSize; - } - // ] - let textPressabilityProps: ?TextPressabilityProps; if (isPressable) { textPressabilityProps = { @@ -320,82 +324,15 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { onStartShouldSetResponder, pressRetentionOffset, suppressHighlighting, - }; - } - - const hasTextAncestor = useContext(TextAncestorContext); - if (hasTextAncestor) { - processedProps.disabled = disabled; - processedProps.children = children; - if (isPressable) { - return ( - - ); - } - return ; - } - - let nativeText = null; - - processedProps.accessible = _accessible; - processedProps.allowFontScaling = allowFontScaling !== false; - processedProps.disabled = _disabled; - processedProps.ellipsizeMode = ellipsizeMode ?? 'tail'; - processedProps.children = children; - - if (isPressable) { - nativeText = ( - - ); - } else { - nativeText = ; - } - - if (children == null) { - return nativeText; - } - - // If the children do not contain a JSX element it would not be possible to have a - // nested `Text` component so we can skip adding the `TextAncestorContext` context wrapper - // which has a performance overhead. Since we do this for performance reasons we need - // to keep the check simple to avoid regressing overall perf. For this reason the - // `children.length` constant is set to `3`, this should be a reasonable tradeoff - // to capture the majority of `Text` uses but also not make this check too expensive. - if (Array.isArray(children) && children.length <= 3) { - let hasNonTextChild = false; - for (let child of children) { - if (child != null && typeof child === 'object') { - hasNonTextChild = true; - break; - } - } - if (!hasNonTextChild) { - return nativeText; - } - } else if (typeof children !== 'object') { - return nativeText; - } - - return {nativeText}; - }; - _TextImpl = TextImplNoDefaultProps; -} else { - const TextImplLegacy: component( +======= +let _TextImpl; +if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { + const TextImplNoDefaultProps: component( ref?: React.RefSetter, ...props: TextProps ) = ({ ref: forwardedRef, accessible, - accessibilityElementsHidden, - importantForAccessibility, accessibilityLabel, accessibilityRole, accessibilityState, @@ -407,15 +344,15 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { 'aria-hidden': ariaHidden, 'aria-label': ariaLabel, 'aria-selected': ariaSelected, - //#[ Win32 - 'aria-controls': ariaControls, - 'aria-describedby': ariaDescribedBy, - 'aria-description': ariaDescription, + // #[ Win32 'aria-level': ariaLevel, 'aria-multiselectable': ariaMultiselectable, 'aria-posinset': ariaPosinset, 'aria-required': ariaRequired, 'aria-setsize': ariaSetsize, + 'aria-controls': ariaControls, + 'aria-describedby': ariaDescribedBy, + 'aria-description': ariaDescription, accessibilityLevel, accessibilityPositionInSet, accessibilitySetSize, @@ -450,8 +387,11 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { ref?: React.RefSetter, ...TextProps, }) => { + const processedProps = restProps as { + ...NativeTextProps, + }; const _accessibilityLabel = ariaLabel ?? accessibilityLabel; - //#[ Win32 + // #Win32 [ const _accessibilityControls = ariaControls ?? accessibilityControls; const _accessibilityDescribedBy = ariaDescribedBy ?? accessibilityDescribedBy; @@ -461,7 +401,7 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { const _accessibilityPositionInSet = ariaPosinset ?? accessibilityPositionInSet; const _accessibilitySetSize = ariaSetsize ?? accessibilitySetSize; - //#] Win32 + // ] #Win32 let _accessibilityState: ?TextProps['accessibilityState'] = accessibilityState; @@ -478,11 +418,11 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { checked: ariaChecked ?? _accessibilityState.checked, disabled: ariaDisabled ?? _accessibilityState.disabled, expanded: ariaExpanded ?? _accessibilityState.expanded, - //#[Win32 + // #Win32 [ multiselectable: ariaMultiselectable ?? accessibilityState?.multiselectable, required: ariaRequired ?? accessibilityState?.required, - // #] Win32 + // ] #Win32 selected: ariaSelected ?? _accessibilityState.selected, }; } else { @@ -491,10 +431,10 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { checked: ariaChecked, disabled: ariaDisabled, expanded: ariaExpanded, - // #[ Win32 + // #Win32 [ multiselectable: ariaMultiselectable, required: ariaRequired, - // #]win32 + // ] #Win32 selected: ariaSelected, }; } @@ -503,13 +443,34 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { const _accessibilityStateDisabled = _accessibilityState?.disabled; const _disabled = disabled ?? _accessibilityStateDisabled; - let _accessibilityElementsHidden = - ariaHidden ?? accessibilityElementsHidden; - let _importantForAccessibility = importantForAccessibility; - if (ariaHidden === true) { - _importantForAccessibility = 'no-hide-descendants'; + // If the disabled prop and accessibilityState.disabled are out of sync but not both in + // falsy states we need to update the accessibilityState object to use the disabled prop. + if ( + _accessibilityState != null && + _disabled !== _accessibilityStateDisabled && + ((_disabled != null && _disabled !== false) || + (_accessibilityStateDisabled != null && + _accessibilityStateDisabled !== false)) + ) { + _accessibilityState.disabled = _disabled; + } + + if (ariaHidden !== undefined) { + processedProps.accessibilityElementsHidden = ariaHidden; + if (ariaHidden === true) { + processedProps.importantForAccessibility = 'no-hide-descendants'; + } } + const _accessible = Platform.select({ + ios: accessible !== false, + android: + accessible == null + ? onPress != null || onLongPress != null + : accessible, + default: accessible !== false, // [Windows #13996 - default value is accessible !== false] + }); + const isPressable = (onPress != null || onLongPress != null || @@ -557,7 +518,7 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { overrides = overrides || ({}: {...TextStyleInternal}); overrides.fontWeight = // $FlowFixMe[incompatible-type] - (processedStyle.fontWeight.toString(): TextStyleInternal['fontWeight']); + (String(processedStyle.fontWeight): TextStyleInternal['fontWeight']); } if (processedStyle.userSelect != null) { @@ -581,202 +542,655 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { const _nativeID = id ?? nativeID; - const hasTextAncestor = useContext(TextAncestorContext); - if (hasTextAncestor) { - if (isPressable) { - return ( - - ); - } - - return ( - - {children} - - ); + if (_accessibilityLabel !== undefined) { + processedProps.accessibilityLabel = _accessibilityLabel; } - - // If the disabled prop and accessibilityState.disabled are out of sync but not both in - // falsy states we need to update the accessibilityState object to use the disabled prop. + if (_accessibilityRole !== undefined) { + processedProps.accessibilityRole = _accessibilityRole; + } + if (_accessibilityState !== undefined) { + processedProps.accessibilityState = _accessibilityState; + } + if (_nativeID !== undefined) { + processedProps.nativeID = _nativeID; + } + if (_numberOfLines !== undefined) { + processedProps.numberOfLines = _numberOfLines; + } + if (_selectable !== undefined) { + processedProps.selectable = _selectable; + } + if (_style !== undefined) { + processedProps.style = _style; + } + if (_selectionColor !== undefined) { + processedProps.selectionColor = _selectionColor; + } + if (_role !== undefined) { + processedProps.role = _role; + } + + // [Windows accessibility properties + if (_accessibilityControls !== undefined) { + processedProps.accessibilityControls = _accessibilityControls; + } + + if (_accessibilityDescribedBy !== undefined) { + processedProps.accessibilityDescribedBy = _accessibilityDescribedBy; + } + + if (_accessibilityDescription !== undefined) { + processedProps.accessibilityDescription = _accessibilityDescription; + } + + if (_accessibilityLevel !== undefined) { + processedProps.accessibilityLevel = _accessibilityLevel; + } + if (_accessibilityPositionInSet !== undefined) { + processedProps.accessibilityPositionInSet = _accessibilityPositionInSet; + } + if (_accessibilitySetSize !== undefined) { + processedProps.accessibilitySetSize = _accessibilitySetSize; + } + // ] + + let textPressabilityProps: ?TextPressabilityProps; + if (isPressable) { + textPressabilityProps = { + onLongPress, + onPress, + onPressIn, + onPressOut, + onResponderGrant, + onResponderMove, + onResponderRelease, + onResponderTerminate, + onResponderTerminationRequest, + onStartShouldSetResponder, + pressRetentionOffset, + suppressHighlighting, +>>>>>>> Override + }; + } else { + _accessibilityState = { + busy: ariaBusy, + checked: ariaChecked, + disabled: ariaDisabled, + expanded: ariaExpanded, + selected: ariaSelected, + }; + } +<<<<<<< Upstream + } + + const _accessibilityStateDisabled = _accessibilityState?.disabled; + const _disabled = disabled ?? _accessibilityStateDisabled; + + // If the disabled prop and accessibilityState.disabled are out of sync but not both in + // falsy states we need to update the accessibilityState object to use the disabled prop. + if ( + _disabled !== _accessibilityStateDisabled && + ((_disabled != null && _disabled !== false) || + (_accessibilityStateDisabled != null && + _accessibilityStateDisabled !== false)) + ) { + if (_accessibilityState == null) { + _accessibilityState = {disabled}; + } else { + _accessibilityState.disabled = _disabled; +||||||| base + + return {nativeText}; + }; + _TextImpl = TextImplNoDefaultProps; +} else { + const TextImplLegacy: component( + ref?: React.RefSetter, + ...props: TextProps + ) = ({ + ref: forwardedRef, + accessible, + accessibilityElementsHidden, + importantForAccessibility, + accessibilityLabel, + accessibilityRole, + accessibilityState, + allowFontScaling, + 'aria-busy': ariaBusy, + 'aria-checked': ariaChecked, + 'aria-disabled': ariaDisabled, + 'aria-expanded': ariaExpanded, + 'aria-hidden': ariaHidden, + 'aria-label': ariaLabel, + 'aria-selected': ariaSelected, + children, + ellipsizeMode, + disabled, + id, + nativeID, + numberOfLines, + onLongPress, + onPress, + onPressIn, + onPressOut, + onResponderGrant, + onResponderMove, + onResponderRelease, + onResponderTerminate, + onResponderTerminationRequest, + onStartShouldSetResponder, + pressRetentionOffset, + role, + selectable, + selectionColor, + suppressHighlighting, + style, + ...restProps + }: { + ref?: React.RefSetter, + ...TextProps, + }) => { + const _accessibilityLabel = ariaLabel ?? accessibilityLabel; + + let _accessibilityState: ?TextProps['accessibilityState'] = + accessibilityState; if ( - _disabled !== _accessibilityStateDisabled && - ((_disabled != null && _disabled !== false) || - (_accessibilityStateDisabled != null && - _accessibilityStateDisabled !== false)) + ariaBusy != null || + ariaChecked != null || + ariaDisabled != null || + ariaExpanded != null || + ariaSelected != null + ) { + if (_accessibilityState != null) { + _accessibilityState = { + busy: ariaBusy ?? _accessibilityState.busy, + checked: ariaChecked ?? _accessibilityState.checked, + disabled: ariaDisabled ?? _accessibilityState.disabled, + expanded: ariaExpanded ?? _accessibilityState.expanded, + selected: ariaSelected ?? _accessibilityState.selected, + }; + } else { + _accessibilityState = { + busy: ariaBusy, + checked: ariaChecked, + disabled: ariaDisabled, + expanded: ariaExpanded, + selected: ariaSelected, + }; + } +======= + + return {nativeText}; + }; + _TextImpl = TextImplNoDefaultProps; +} else { + const TextImplLegacy: component( + ref?: React.RefSetter, + ...props: TextProps + ) = ({ + ref: forwardedRef, + accessible, + accessibilityElementsHidden, + importantForAccessibility, + accessibilityLabel, + accessibilityRole, + accessibilityState, + allowFontScaling, + 'aria-busy': ariaBusy, + 'aria-checked': ariaChecked, + 'aria-disabled': ariaDisabled, + 'aria-expanded': ariaExpanded, + 'aria-hidden': ariaHidden, + 'aria-label': ariaLabel, + 'aria-selected': ariaSelected, + //#[ Win32 + 'aria-controls': ariaControls, + 'aria-describedby': ariaDescribedBy, + 'aria-description': ariaDescription, + 'aria-level': ariaLevel, + 'aria-multiselectable': ariaMultiselectable, + 'aria-posinset': ariaPosinset, + 'aria-required': ariaRequired, + 'aria-setsize': ariaSetsize, + accessibilityLevel, + accessibilityPositionInSet, + accessibilitySetSize, + accessibilityControls, + accessibilityDescribedBy, + accessibilityDescription, + // #] Win32 + children, + ellipsizeMode, + disabled, + id, + nativeID, + numberOfLines, + onLongPress, + onPress, + onPressIn, + onPressOut, + onResponderGrant, + onResponderMove, + onResponderRelease, + onResponderTerminate, + onResponderTerminationRequest, + onStartShouldSetResponder, + pressRetentionOffset, + role, + selectable, + selectionColor, + suppressHighlighting, + style, + ...restProps + }: { + ref?: React.RefSetter, + ...TextProps, + }) => { + const _accessibilityLabel = ariaLabel ?? accessibilityLabel; + //#[ Win32 + const _accessibilityControls = ariaControls ?? accessibilityControls; + const _accessibilityDescribedBy = + ariaDescribedBy ?? accessibilityDescribedBy; + const _accessibilityDescription = + ariaDescription ?? accessibilityDescription; + const _accessibilityLevel = ariaLevel ?? accessibilityLevel; + const _accessibilityPositionInSet = + ariaPosinset ?? accessibilityPositionInSet; + const _accessibilitySetSize = ariaSetsize ?? accessibilitySetSize; + //#] Win32 + + let _accessibilityState: ?TextProps['accessibilityState'] = + accessibilityState; + if ( + ariaBusy != null || + ariaChecked != null || + ariaDisabled != null || + ariaExpanded != null || + ariaSelected != null ) { - _accessibilityState = {..._accessibilityState, disabled: _disabled}; + if (_accessibilityState != null) { + _accessibilityState = { + busy: ariaBusy ?? _accessibilityState.busy, + checked: ariaChecked ?? _accessibilityState.checked, + disabled: ariaDisabled ?? _accessibilityState.disabled, + expanded: ariaExpanded ?? _accessibilityState.expanded, + //#[Win32 + multiselectable: + ariaMultiselectable ?? accessibilityState?.multiselectable, + required: ariaRequired ?? accessibilityState?.required, + // #] Win32 + selected: ariaSelected ?? _accessibilityState.selected, + }; + } else { + _accessibilityState = { + busy: ariaBusy, + checked: ariaChecked, + disabled: ariaDisabled, + expanded: ariaExpanded, + // #[ Win32 + multiselectable: ariaMultiselectable, + required: ariaRequired, + // #]win32 + selected: ariaSelected, + }; + } +>>>>>>> Override } + } - const _accessible = Platform.select({ - ios: accessible !== false, - android: - accessible == null - ? onPress != null || onLongPress != null - : accessible, - default: accessible !== false, // [Windows #13996 - default value is accessible !== false] - }); + if (ariaHidden !== undefined) { + processedProps.accessibilityElementsHidden = ariaHidden; + if (ariaHidden === true) { + processedProps.importantForAccessibility = 'no-hide-descendants'; + } + } - let nativeText = null; - if (isPressable) { - nativeText = ( - = 0)) { + if (__DEV__) { + console.error( + `'numberOfLines' in must be a non-negative number, received: ${_numberOfLines}. The value will be set to 0.`, + ); + } + _numberOfLines = 0; + } + + let _selectable = selectable; + + let processedStyle = flattenStyle(_style); + if (processedStyle != null) { + let overrides: ?{...TextStyleInternal} = null; + if (typeof processedStyle.fontWeight === 'number') { + overrides = overrides || ({}: {...TextStyleInternal}); + overrides.fontWeight = + // $FlowFixMe[incompatible-type] + (String(processedStyle.fontWeight): TextStyleInternal['fontWeight']); + } + +<<<<<<< Upstream + if (processedStyle.userSelect != null) { + _selectable = userSelectToSelectableMap[processedStyle.userSelect]; + overrides = overrides || ({}: {...TextStyleInternal}); + overrides.userSelect = undefined; +||||||| base + const _nativeID = id ?? nativeID; + + const hasTextAncestor = useContext(TextAncestorContext); + if (hasTextAncestor) { + if (isPressable) { + return ( + + ); + } + + return ( + + selectable={_selectable} + selectionColor={_selectionColor} + style={_style} + disabled={disabled} + role={_role}> + {children} + ); - } else { - nativeText = ( - + ); + } + + return ( + {children} - + ); +>>>>>>> Override } - if (children == null) { - return nativeText; + if (processedStyle.verticalAlign != null) { + overrides = overrides || ({}: {...TextStyleInternal}); + overrides.textAlignVertical = + verticalAlignToTextAlignVerticalMap[processedStyle.verticalAlign]; + overrides.verticalAlign = undefined; } - // If the children do not contain a JSX element it would not be possible to have a - // nested `Text` component so we can skip adding the `TextAncestorContext` context wrapper - // which has a performance overhead. Since we do this for performance reasons we need - // to keep the check simple to avoid regressing overall perf. For this reason the - // `children.length` constant is set to `3`, this should be a reasonable tradeoff - // to capture the majority of `Text` uses but also not make this check too expensive. - if (Array.isArray(children) && children.length <= 3) { - let hasNonTextChild = false; - for (let child of children) { - if (child != null && typeof child === 'object') { - hasNonTextChild = true; - break; - } - } - if (!hasNonTextChild) { - return nativeText; +<<<<<<< Upstream + if (overrides != null) { + // $FlowFixMe[incompatible-type] + _style = [_style, overrides]; + } + } + + const _nativeID = id ?? nativeID; + + if (_accessibilityLabel !== undefined) { + processedProps.accessibilityLabel = _accessibilityLabel; + } + if (_accessibilityRole !== undefined) { + processedProps.accessibilityRole = _accessibilityRole; + } + if (_accessibilityState !== undefined) { + processedProps.accessibilityState = _accessibilityState; + } + if (_nativeID !== undefined) { + processedProps.nativeID = _nativeID; + } + if (_numberOfLines !== undefined) { + processedProps.numberOfLines = _numberOfLines; + } + if (_selectable !== undefined) { + processedProps.selectable = _selectable; + } + if (_style !== undefined) { + processedProps.style = _style; + } + if (_selectionColor !== undefined) { + processedProps.selectionColor = _selectionColor; + } + if (_role !== undefined) { + processedProps.role = _role; + } + + let textPressabilityProps: ?TextPressabilityProps; + if (isPressable) { + textPressabilityProps = { + onLongPress, + onPress, + onPressIn, + onPressOut, + onResponderGrant, + onResponderMove, + onResponderRelease, + onResponderTerminate, + onResponderTerminationRequest, + onStartShouldSetResponder, + pressRetentionOffset, + suppressHighlighting, + }; + } +||||||| base + const _accessible = Platform.select({ + ios: accessible !== false, + android: + accessible == null + ? onPress != null || onLongPress != null + : accessible, + default: accessible, + }); +======= + const _accessible = Platform.select({ + ios: accessible !== false, + android: + accessible == null + ? onPress != null || onLongPress != null + : accessible, + default: accessible !== false, // [Windows #13996 - default value is accessible !== false] + }); +>>>>>>> Override + + const hasTextAncestor = useContext(TextAncestorContext); + if (hasTextAncestor) { + processedProps.disabled = disabled; + processedProps.children = children; + if (isPressable) { + return ( + + ); + } + return ; + } + + let nativeText = null; + + processedProps.accessible = _accessible; + processedProps.allowFontScaling = allowFontScaling !== false; + processedProps.disabled = _disabled; + processedProps.ellipsizeMode = ellipsizeMode ?? 'tail'; + processedProps.children = children; + + if (isPressable) { + nativeText = ( + + ); + } else { + nativeText = ; + } + + if (children == null) { + return nativeText; + } + + // If the children do not contain a JSX element it would not be possible to have a + // nested `Text` component so we can skip adding the `TextAncestorContext` context wrapper + // which has a performance overhead. Since we do this for performance reasons we need + // to keep the check simple to avoid regressing overall perf. For this reason the + // `children.length` constant is set to `3`, this should be a reasonable tradeoff + // to capture the majority of `Text` uses but also not make this check too expensive. + if (Array.isArray(children) && children.length <= 3) { + let hasNonTextChild = false; + for (let child of children) { + if (child != null && typeof child === 'object') { + hasNonTextChild = true; + break; } - } else if (typeof children !== 'object') { + } + if (!hasNonTextChild) { return nativeText; } + } else if (typeof children !== 'object') { + return nativeText; + } - return {nativeText}; - }; - _TextImpl = TextImplLegacy; -} - -const TextImpl: component( - ref?: React.RefSetter, - ...props: TextProps -) = _TextImpl; + return {nativeText}; +}; TextImpl.displayName = 'Text'; diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/Types/CoreEventTypes.win32.js b/packages/@office-iss/react-native-win32/src-win/Libraries/Types/CoreEventTypes.win32.js index 6d89b3865dd..3fa0ed87cb9 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/Types/CoreEventTypes.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/Types/CoreEventTypes.win32.js @@ -37,7 +37,7 @@ export type ResponderSyntheticEvent = Readonly<{ indexOfSingleActiveTouch: number, mostRecentTimeStamp: number, numberActiveTouches: number, - touchBank: $ReadOnlyArray< + touchBank: ReadonlyArray< Readonly<{ touchActive: boolean, startPageX: number, @@ -237,10 +237,16 @@ export type NativeTouchEvent = Readonly<{ /** * Array of all touch events that have changed since the last event */ +<<<<<<< Upstream + changedTouches: ReadonlyArray, +||||||| base + changedTouches: $ReadOnlyArray, +======= changedTouches: $ReadOnlyArray, ctrlKey: ?boolean, // TODO(macOS) +>>>>>>> Override /** * 3D Touch reported force * @platform ios @@ -282,7 +288,7 @@ export type NativeTouchEvent = Readonly<{ /** * Array of all current touches on the screen */ - touches: $ReadOnlyArray, + touches: ReadonlyArray, }>; export type GestureResponderEvent = ResponderSyntheticEvent; diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/Utilities/useMergeRefs.js b/packages/@office-iss/react-native-win32/src-win/Libraries/Utilities/useMergeRefs.js index 5e6f2957878..3f76a0b3392 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/Utilities/useMergeRefs.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/Utilities/useMergeRefs.js @@ -22,11 +22,11 @@ import {useCallback} from 'react'; * lead to problems with the given refs being invoked more times than desired. */ export default function useMergeRefs( - ...refs: $ReadOnlyArray> + ...refs: ReadonlyArray> ): React.RefSetter { const refEffect = useCallback( (current: Instance) => { - const cleanups: $ReadOnlyArray void)> = refs.map(ref => { + const cleanups: ReadonlyArray void)> = refs.map(ref => { if (ref == null) { return undefined; } else { diff --git a/packages/@office-iss/react-native-win32/src-win/index.win32.js b/packages/@office-iss/react-native-win32/src-win/index.win32.js index ff17b4b86d4..373668ae2ab 100644 --- a/packages/@office-iss/react-native-win32/src-win/index.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/index.win32.js @@ -42,6 +42,9 @@ module.exports = { return require('./Libraries/Components/DrawerAndroid/DrawerLayoutAndroid') .default; }, + get EventEmitter() { + return require('./Libraries/vendor/emitter/EventEmitter').default; + }, get FlatList() { return require('./Libraries/Lists/FlatList').default; }, diff --git a/packages/@office-iss/react-native-win32/src-win/index.win32.js.flow b/packages/@office-iss/react-native-win32/src-win/index.win32.js.flow index 68a26452966..2b78dddcb35 100644 --- a/packages/@office-iss/react-native-win32/src-win/index.win32.js.flow +++ b/packages/@office-iss/react-native-win32/src-win/index.win32.js.flow @@ -324,7 +324,6 @@ export * as NativeComponentRegistry from './Libraries/NativeComponent/NativeComp export {default as NativeDialogManagerAndroid} from './Libraries/NativeModules/specs/NativeDialogManagerAndroid'; export type { - EventSubscription, EmitterSubscription, NativeEventSubscription, } from './Libraries/EventEmitter/NativeEventEmitter'; @@ -467,6 +466,12 @@ export type { PublicTextInstance, } from './Libraries/ReactPrivate/ReactNativePrivateInterface'; +export type { + EventSubscription, + IEventEmitter, +} from './Libraries/vendor/emitter/EventEmitter'; +export {default as EventEmitter} from './Libraries/vendor/emitter/EventEmitter'; + export { default as unstable_VirtualView, VirtualViewMode, diff --git a/packages/@office-iss/react-native-win32/src-win/src/private/animated/NativeAnimatedHelper.win32.js b/packages/@office-iss/react-native-win32/src-win/src/private/animated/NativeAnimatedHelper.win32.js index c74f94eedd5..06e51ad1239 100644 --- a/packages/@office-iss/react-native-win32/src-win/src/private/animated/NativeAnimatedHelper.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/src/private/animated/NativeAnimatedHelper.win32.js @@ -103,7 +103,7 @@ function createNativeOperations(): NonNullable { methodNames.push('connectAnimatedNodeToShadowNodeFamily'); } const nativeOperations: { - [Values]: (...$ReadOnlyArray) => void, + [Values]: (...ReadonlyArray) => void, } = {}; if (isSingleOpBatching) { for (let ii = 0, length = methodNames.length; ii < length; ii++) { diff --git a/packages/@react-native-windows/automation-channel/package.json b/packages/@react-native-windows/automation-channel/package.json index e4378807575..4ccd533aeae 100644 --- a/packages/@react-native-windows/automation-channel/package.json +++ b/packages/@react-native-windows/automation-channel/package.json @@ -33,7 +33,7 @@ "just-scripts": "^1.3.2", "prettier": "^3.6.2", "react": "19.2.3", - "react-native": "0.85.0-nightly-20260114-f15985f4f", + "react-native": "0.85.0-nightly-20260128-36f07a1b2", "react-native-windows": "^0.0.0-canary.1056", "typescript": "5.0.4" }, diff --git a/packages/@react-native-windows/cli/package.json b/packages/@react-native-windows/cli/package.json index f128b68986c..353312980ee 100644 --- a/packages/@react-native-windows/cli/package.json +++ b/packages/@react-native-windows/cli/package.json @@ -66,7 +66,7 @@ "jest": "^29.7.0", "prettier": "^3.6.2", "react": "19.2.3", - "react-native": "0.85.0-nightly-20260114-f15985f4f", + "react-native": "0.85.0-nightly-20260128-36f07a1b2", "typescript": "5.0.4" }, "peerDependencies": { diff --git a/packages/@react-native-windows/perf-testing/package.json b/packages/@react-native-windows/perf-testing/package.json index 826f9755f80..d0a3b6f826b 100644 --- a/packages/@react-native-windows/perf-testing/package.json +++ b/packages/@react-native-windows/perf-testing/package.json @@ -36,7 +36,7 @@ "peerDependencies": { "jest": ">=29.0.3", "react": ">=18.0.0", - "react-native": "0.85.0-nightly-20260114-f15985f4f", + "react-native": "0.85.0-nightly-20260128-36f07a1b2", "react-test-renderer": ">=18.0.0" }, "peerDependenciesMeta": { diff --git a/packages/@react-native-windows/tester/overrides.json b/packages/@react-native-windows/tester/overrides.json index 645ad8067aa..b85f27e401a 100644 --- a/packages/@react-native-windows/tester/overrides.json +++ b/packages/@react-native-windows/tester/overrides.json @@ -5,7 +5,7 @@ "excludePatterns": [ "src/js/examples-win/**" ], - "baseVersion": "0.85.0-nightly-20260114-f15985f4f", + "baseVersion": "0.85.0-nightly-20260128-36f07a1b2", "overrides": [ { "type": "copy", @@ -85,7 +85,7 @@ "type": "patch", "file": "src/js/examples/Image/ImageExample.windows.js", "baseFile": "packages/rn-tester/js/examples/Image/ImageExample.js", - "baseHash": "3fc18bff48bbe9506ebe9d200828143b3b79a391", + "baseHash": "c8ce9454827962d202cda42bd6bcd0aaceb8cf74", "issue": 12869 }, { @@ -111,13 +111,13 @@ "type": "derived", "file": "src/js/examples/Text/TextExample.windows.js", "baseFile": "packages/rn-tester/js/examples/Text/TextExample.android.js", - "baseHash": "bcf37a6cfe71ae8d9034349c8f61f8fac2c8c2b6" + "baseHash": "ea9a9fec30ff987396c4be119eb4b38492a37e65" }, { "type": "patch", "file": "src/js/examples/Text/TextSharedExamples.windows.js", "baseFile": "packages/rn-tester/js/examples/Text/TextSharedExamples.js", - "baseHash": "276177eac14554bc145ccd4125a97ad2b24ea9f3", + "baseHash": "66789820f73a9ea8f6044df08cef5726112cc8cd", "issue": 15125 }, { diff --git a/packages/@react-native-windows/tester/package.json b/packages/@react-native-windows/tester/package.json index 41e503d9a6d..a87745bac8b 100644 --- a/packages/@react-native-windows/tester/package.json +++ b/packages/@react-native-windows/tester/package.json @@ -19,7 +19,7 @@ "peerDependencies": { "@react-native-picker/picker": "2.11.0", "react": "19.2.3", - "react-native": "0.85.0-nightly-20260114-f15985f4f", + "react-native": "0.85.0-nightly-20260128-36f07a1b2", "react-native-windows": "^0.0.0-canary.1056", "react-native-xaml": "^0.0.80" }, @@ -32,8 +32,8 @@ } }, "devDependencies": { - "@react-native/new-app-screen": "0.85.0-nightly-20260114-f15985f4f", - "@react-native/tester": "0.85.0-nightly-20260114-f15985f4f", + "@react-native/new-app-screen": "0.85.0-nightly-20260128-36f07a1b2", + "@react-native/tester": "0.85.0-nightly-20260128-36f07a1b2", "@rnw-scripts/babel-react-native-config": "0.0.0", "@rnw-scripts/eslint-config": "1.2.38", "@rnw-scripts/just-task": "2.3.58", @@ -43,7 +43,7 @@ "just-scripts": "^1.3.3", "prettier": "^3.6.2", "react": "19.2.3", - "react-native": "0.85.0-nightly-20260114-f15985f4f", + "react-native": "0.85.0-nightly-20260128-36f07a1b2", "react-native-platform-override": "0.0.0-canary.1022", "react-native-windows": "^0.0.0-canary.1056", "typescript": "5.0.4" diff --git a/packages/@react-native-windows/tester/src/js/examples/Image/ImageExample.windows.js b/packages/@react-native-windows/tester/src/js/examples/Image/ImageExample.windows.js index 90c93e475fe..6b316e9e981 100644 --- a/packages/@react-native-windows/tester/src/js/examples/Image/ImageExample.windows.js +++ b/packages/@react-native-windows/tester/src/js/examples/Image/ImageExample.windows.js @@ -95,7 +95,7 @@ const NetworkImageCallbackExample = ({ source, prefetchedSource, }: NetworkImageCallbackExampleProps): React.Node => { - const [events, setEvents] = useState<$ReadOnlyArray>([]); + const [events, setEvents] = useState>([]); const [startLoadPrefetched, setStartLoadPrefetched] = useState(false); const [mountTime, setMountTime] = useState(Date.now()); @@ -212,7 +212,7 @@ const NetworkImageCallbackExample = ({ type NetworkImageExampleState = { error: ?string, loading: boolean, - progress: $ReadOnlyArray, + progress: ReadonlyArray, }; class NetworkImageExample extends React.Component< diff --git a/packages/@react-native-windows/tester/src/js/examples/Text/TextExample.windows.js b/packages/@react-native-windows/tester/src/js/examples/Text/TextExample.windows.js index c0b9f31cc31..b8031dc2c23 100644 --- a/packages/@react-native-windows/tester/src/js/examples/Text/TextExample.windows.js +++ b/packages/@react-native-windows/tester/src/js/examples/Text/TextExample.windows.js @@ -393,7 +393,23 @@ function FontVariantsExample(props: {}): React.Node { 1111{'\n'} 2222{'\n'} +<<<<<<< Upstream + + Non-Stylistic & and $ + + + Stylistic & and $ + + +||||||| base + +======= +>>>>>>> Override ); } diff --git a/packages/@react-native-windows/tester/src/js/examples/Text/TextSharedExamples.windows.js b/packages/@react-native-windows/tester/src/js/examples/Text/TextSharedExamples.windows.js index be25dedad5b..342cb212fce 100644 --- a/packages/@react-native-windows/tester/src/js/examples/Text/TextSharedExamples.windows.js +++ b/packages/@react-native-windows/tester/src/js/examples/Text/TextSharedExamples.windows.js @@ -275,6 +275,11 @@ const examples = [ description: 'Shows the a11y behavior of Text with role="link"', render: TextWithLinkRoleExample, }, +<<<<<<< Upstream +] as ReadonlyArray; +||||||| base +] as $ReadOnlyArray; +======= // Windows: Only include TextInlineViewsExample in Fabric mode (bridgeless) // Paper mode doesn't support Views nested in Text ...(global.RN$Bridgeless === true @@ -293,3 +298,4 @@ const examples = [ ]; export default examples; +>>>>>>> Override diff --git a/packages/@react-native/monorepo/overrides.json b/packages/@react-native/monorepo/overrides.json index 8dcbb9b1205..ac0750292df 100644 --- a/packages/@react-native/monorepo/overrides.json +++ b/packages/@react-native/monorepo/overrides.json @@ -1,11 +1,11 @@ { - "baseVersion": "0.85.0-nightly-20260114-f15985f4f", + "baseVersion": "0.85.0-nightly-20260128-36f07a1b2", "overrides": [ { "type": "patch", "file": "package.json", "baseFile": "package.json", - "baseHash": "0631acd5a8c37dae02d71cd7ba5ac0125c89fa31" + "baseHash": "f1c98cbb9622bb734c0c04941badd65a1200fe5a" } ] } \ No newline at end of file diff --git a/packages/@react-native/monorepo/package.json b/packages/@react-native/monorepo/package.json index 9c838639545..d1d52e878ba 100644 --- a/packages/@react-native/monorepo/package.json +++ b/packages/@react-native/monorepo/package.json @@ -51,8 +51,16 @@ "@jest/create-cache-key-function": "^29.7.0", "@microsoft/api-extractor": "^7.52.2", "@octokit/rest": "^22.0.0", - "@react-native/metro-babel-transformer": "0.85.0-nightly-20260114-f15985f4f", - "@react-native/metro-config": "0.85.0-nightly-20260114-f15985f4f", +<<<<<<< Upstream + "@react-native/metro-babel-transformer": "0.85.0-main", + "@react-native/metro-config": "0.85.0-main", +||||||| base + "@react-native/metro-babel-transformer": "0.84.0-main", + "@react-native/metro-config": "0.84.0-main", +======= + "@react-native/metro-babel-transformer": "0.85.0-nightly-20260128-36f07a1b2", + "@react-native/metro-config": "0.85.0-nightly-20260128-36f07a1b2", +>>>>>>> Override "@tsconfig/node22": "22.0.2", "@types/react": "^19.2.3", "@typescript-eslint/parser": "^8.36.0", @@ -73,13 +81,13 @@ "eslint-plugin-ft-flow": "^2.0.1", "eslint-plugin-jest": "^29.0.1", "eslint-plugin-jsx-a11y": "^6.6.0", - "eslint-plugin-react": "^7.30.1", + "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-native": "^5.0.0", "eslint-plugin-redundant-undefined": "^0.4.0", "eslint-plugin-relay": "^1.8.3", "fb-dotslash": "0.5.8", "flow-api-translator": "0.33.3", - "flow-bin": "^0.296.1", + "flow-bin": "^0.298.0", "hermes-eslint": "0.33.3", "hermes-transform": "0.33.3", "ini": "^5.0.0", @@ -100,7 +108,7 @@ "node-fetch": "^2.2.0", "nullthrows": "^1.1.1", "prettier": "3.6.2", - "prettier-plugin-hermes-parser": "0.32.0", + "prettier-plugin-hermes-parser": "0.33.2", "react": "19.2.3", "react-test-renderer": "19.2.3", "rimraf": "^3.0.2", diff --git a/packages/@react-native/tester/NativeComponentExample/js/MyNativeViewNativeComponent.js b/packages/@react-native/tester/NativeComponentExample/js/MyNativeViewNativeComponent.js index 8487b4e2bc0..093b8d80af7 100644 --- a/packages/@react-native/tester/NativeComponentExample/js/MyNativeViewNativeComponent.js +++ b/packages/@react-native/tester/NativeComponentExample/js/MyNativeViewNativeComponent.js @@ -14,14 +14,14 @@ import * as React from 'react'; import {codegenNativeCommands, codegenNativeComponent} from 'react-native'; type Event = Readonly<{ - values: $ReadOnlyArray, - boolValues: $ReadOnlyArray, - floats: $ReadOnlyArray, - doubles: $ReadOnlyArray, - yesNos: $ReadOnlyArray<'yep' | 'nope'>, - strings: $ReadOnlyArray, - latLons: $ReadOnlyArray<{lat: CodegenTypes.Double, lon: CodegenTypes.Double}>, - multiArrays: $ReadOnlyArray<$ReadOnlyArray>, + values: ReadonlyArray, + boolValues: ReadonlyArray, + floats: ReadonlyArray, + doubles: ReadonlyArray, + yesNos: ReadonlyArray<'yep' | 'nope'>, + strings: ReadonlyArray, + latLons: ReadonlyArray<{lat: CodegenTypes.Double, lon: CodegenTypes.Double}>, + multiArrays: ReadonlyArray>, }>; type LegacyStyleEvent = Readonly<{ @@ -31,7 +31,7 @@ type LegacyStyleEvent = Readonly<{ type NativeProps = Readonly<{ ...ViewProps, opacity?: CodegenTypes.Float, - values: $ReadOnlyArray, + values: ReadonlyArray, // Events onIntArrayChanged?: ?CodegenTypes.BubblingEventHandler, @@ -51,7 +51,7 @@ interface NativeCommands { +callNativeMethodToAddOverlays: ( viewRef: React.ElementRef, - overlayColors: $ReadOnlyArray, + overlayColors: ReadonlyArray, ) => void; +callNativeMethodToRemoveOverlays: ( diff --git a/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverClippingParent.js b/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverClippingParent.js index ce4f3e12bcd..09ba32a1f19 100644 --- a/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverClippingParent.js +++ b/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverClippingParent.js @@ -72,7 +72,7 @@ function IntersectionObserverCustomClippingRootExample(): React.Node { const [rootMarginValue, setRootMarginValue] = useState('0px'); const onObserve = useCallback( - (entries: $ReadOnlyArray) => { + (entries: ReadonlyArray) => { entries.forEach(entry => { setIntersectionEntry(entry); }); diff --git a/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverClippingRoot.js b/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverClippingRoot.js index 3bf9c3af192..02c832aeb24 100644 --- a/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverClippingRoot.js +++ b/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverClippingRoot.js @@ -77,7 +77,7 @@ function IntersectionObserverClippingRootExample(): React.Node { }, [rootMarginInput]); const onObserve = useCallback( - (entries: $ReadOnlyArray) => { + (entries: ReadonlyArray) => { entries.forEach(entry => { setIntersectionEntry(entry); }); diff --git a/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverExplicitRoot.js b/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverExplicitRoot.js index f569b586523..3bddaaa610c 100644 --- a/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverExplicitRoot.js +++ b/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverExplicitRoot.js @@ -75,7 +75,7 @@ function IntersectionObserverExplicitRootExample(): React.Node { [position], ); const onObserve = useCallback( - (entries: $ReadOnlyArray) => { + (entries: ReadonlyArray) => { entries.forEach(entry => { setIntersectionRatio(entry.intersectionRatio); }); diff --git a/packages/@react-native/tester/js/examples/TextInput/TextInputSharedExamples.js b/packages/@react-native/tester/js/examples/TextInput/TextInputSharedExamples.js index 5ebc81ad1e2..324c13e3171 100644 --- a/packages/@react-native/tester/js/examples/TextInput/TextInputSharedExamples.js +++ b/packages/@react-native/tester/js/examples/TextInput/TextInputSharedExamples.js @@ -393,7 +393,14 @@ class TextEventsExample extends React.Component<{...}, $FlowFixMe> { onFocus={() => this.updateText('onFocus')} onBlur={() => this.updateText('onBlur')} onChange={event => - this.updateText('onChange text: ' + event.nativeEvent.text) + this.updateText( + 'onChange text: ' + + event.nativeEvent.text + + ', selection: ' + + (event.nativeEvent.selection != null + ? JSON.stringify(event.nativeEvent.selection) + : 'undefined'), + ) } onContentSizeChange={event => this.updateText( @@ -748,9 +755,9 @@ const TextStylesExample = memo(() => { }); type TextStylesContainerProps = { - examples: $ReadOnlyArray<{ + examples: ReadonlyArray<{ name: string, - textStyles: $ReadOnlyArray, + textStyles: ReadonlyArray, multiline?: boolean, }>, }; @@ -793,7 +800,7 @@ function TextStylesContainer({examples}: TextStylesContainerProps) { type StyledTextInputProps = { name: string, - textStyles: $ReadOnlyArray, + textStyles: ReadonlyArray, styleOffset: number, }; diff --git a/packages/@react-native/tester/js/utils/RNTesterNavigationReducer.js b/packages/@react-native/tester/js/utils/RNTesterNavigationReducer.js index a952455b82f..df7080288e8 100644 --- a/packages/@react-native/tester/js/utils/RNTesterNavigationReducer.js +++ b/packages/@react-native/tester/js/utils/RNTesterNavigationReducer.js @@ -55,7 +55,7 @@ const getUpdatedRecentlyUsed = ({ export const RNTesterNavigationReducer = ( state: RNTesterNavigationState, - action: {type: $Keys, data?: any}, + action: {type: keyof typeof RNTesterNavigationActionsType, data?: any}, ): RNTesterNavigationState => { const { data: { diff --git a/packages/@react-native/tester/overrides.json b/packages/@react-native/tester/overrides.json index 08c4d60ef31..3088ff9403d 100644 --- a/packages/@react-native/tester/overrides.json +++ b/packages/@react-native/tester/overrides.json @@ -1,5 +1,5 @@ { - "baseVersion": "0.85.0-nightly-20260114-f15985f4f", + "baseVersion": "0.85.0-nightly-20260128-36f07a1b2", "overrides": [ { "type": "copy", @@ -12,7 +12,7 @@ "type": "copy", "directory": "js/components", "baseDirectory": "packages/rn-tester/js/components", - "baseHash": "27e5502f255969e9673a33ef148376599cdd89aa", + "baseHash": "7146ccc87cc1717af98926b22b98abb9e6d6fad0", "issue": 4054 }, { @@ -145,7 +145,7 @@ "type": "copy", "directory": "js/examples/Experimental", "baseDirectory": "packages/rn-tester/js/examples/Experimental", - "baseHash": "a38a123969846516bcbfe4296faf29dac21323e9", + "baseHash": "62842257c1fcc1631c3da4ea26d409df19d32ea4", "issue": 4054 }, { @@ -166,7 +166,7 @@ "type": "copy", "directory": "js/examples/Image", "baseDirectory": "packages/rn-tester/js/examples/Image", - "baseHash": "fbc5250b75d3bf4354d68862a1b83e69cb1f8e03", + "baseHash": "a45944f905e495fb1faeee03f9eef8c6565296d1", "issue": 4054 }, { @@ -187,21 +187,21 @@ "type": "copy", "file": "js/examples/IntersectionObserver/IntersectionObserverClippingParent.js", "baseFile": "packages/rn-tester/js/examples/IntersectionObserver/IntersectionObserverClippingParent.js", - "baseHash": "c50b11c459c2765dc673b3bf00abcf47a7102941", + "baseHash": "957315ad808886e486f18c0bdc79b97ec6a94faa", "issue": 4054 }, { "type": "copy", "file": "js/examples/IntersectionObserver/IntersectionObserverClippingRoot.js", "baseFile": "packages/rn-tester/js/examples/IntersectionObserver/IntersectionObserverClippingRoot.js", - "baseHash": "8f29a603b37b8d160ddf4b0bef35a09144a5cd00", + "baseHash": "c378bf70f31da56b111a186259bd2bf2ea3ad879", "issue": 4054 }, { "type": "copy", "file": "js/examples/IntersectionObserver/IntersectionObserverExplicitRoot.js", "baseFile": "packages/rn-tester/js/examples/IntersectionObserver/IntersectionObserverExplicitRoot.js", - "baseHash": "f37841cbd7012643cb85970976e8b57a8ee48b68", + "baseHash": "72802b474256b249af36343e015040c691319553", "issue": 4054 }, { @@ -334,7 +334,7 @@ "type": "copy", "directory": "js/examples/Performance", "baseDirectory": "packages/rn-tester/js/examples/Performance", - "baseHash": "cb99357f53c7f0d09d3562faee2dfcb7db2ea4e1" + "baseHash": "9fd5ab235654a781d25dff55cd28366db9132053" }, { "type": "copy", @@ -396,7 +396,7 @@ "type": "copy", "directory": "js/examples/RefreshControl", "baseDirectory": "packages/rn-tester/js/examples/RefreshControl", - "baseHash": "3b5a3a8eb3b415fbf91038e92d623788d38d3f09", + "baseHash": "781e6c4fbdc1fe5f618476c1cb16cc411cdca786", "issue": 4054 }, { @@ -424,7 +424,7 @@ "type": "copy", "directory": "js/examples/ScrollView", "baseDirectory": "packages/rn-tester/js/examples/ScrollView", - "baseHash": "363a47cce6463accf6beef87f07dd080088801e1", + "baseHash": "97015cbbdb838c78dfb2f0bf9a7509bfea4b31c8", "issue": 4054 }, { @@ -480,7 +480,7 @@ "type": "copy", "directory": "js/examples/Text", "baseDirectory": "packages/rn-tester/js/examples/Text", - "baseHash": "20d8327eb59a094bf19502343460823327b222e0", + "baseHash": "0e16875ccf63c259b076c6a5b6c8f2f4b4949a96", "issue": 4054 }, { @@ -522,7 +522,7 @@ "type": "copy", "file": "js/examples/TextInput/TextInputSharedExamples.js", "baseFile": "packages/rn-tester/js/examples/TextInput/TextInputSharedExamples.js", - "baseHash": "326c4f65d2c61578d8bd1589b51c9b5d0ec55e10", + "baseHash": "cbe35008a352f65e23beddcaebc319147dc6b6fc", "issue": 14291 }, { @@ -626,7 +626,7 @@ "type": "copy", "directory": "js/types", "baseDirectory": "packages/rn-tester/js/types", - "baseHash": "b79ddd3aca7843e2193edf9375aa480e01cc4c8d", + "baseHash": "4bf00d2f79d60f5d296804b461cca3242fad9648", "issue": 4054 }, { @@ -668,7 +668,7 @@ "type": "copy", "file": "js/utils/RNTesterNavigationReducer.js", "baseFile": "packages/rn-tester/js/utils/RNTesterNavigationReducer.js", - "baseHash": "0eb1fcb680e43a38cf929a6a4a60b3c50286e238", + "baseHash": "ce42b41f19686add12ac21bb608bcd52e1f97e5b", "issue": 4054 }, { @@ -696,7 +696,7 @@ "type": "copy", "file": "NativeComponentExample/js/MyNativeViewNativeComponent.js", "baseFile": "packages/rn-tester/NativeComponentExample/js/MyNativeViewNativeComponent.js", - "baseHash": "9911277e1decdb44463ccc5751a17e8a1c15dd86", + "baseHash": "7c811f32320d228eff8cabdd76fa8c07484ab3d9", "issue": 4054 }, { @@ -717,7 +717,7 @@ "type": "patch", "file": "package.json", "baseFile": "packages/rn-tester/package.json", - "baseHash": "e7e82fe7462b49dc0e839245c6bdeb8fcca7ef67", + "baseHash": "94b8a92c13f2b1a3fa497686ad71d9489a619e8f", "issue": 13228 }, { diff --git a/packages/@react-native/tester/package.json b/packages/@react-native/tester/package.json index 30ffb774785..84cf0b3d8a6 100644 --- a/packages/@react-native/tester/package.json +++ b/packages/@react-native/tester/package.json @@ -1,6 +1,12 @@ { "name": "@react-native/tester", - "version": "0.85.0-nightly-20260114-f15985f4f", +<<<<<<< Upstream + "version": "0.85.0-main", +||||||| base + "version": "0.84.0-main", +======= + "version": "0.85.0-nightly-20260128-36f07a1b2", +>>>>>>> Override "private": true, "description": "React Native tester app.", "license": "MIT", @@ -10,7 +16,7 @@ "directory": "packages/rn-tester" }, "engines": { - "node": ">= 20.19.4" + "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" }, "scripts": { "start": "npx @react-native-community/cli start", @@ -25,8 +31,16 @@ "e2e-test-ios": "./scripts/maestro-test-ios.sh" }, "dependencies": { - "@react-native/new-app-screen": "0.85.0-nightly-20260114-f15985f4f", - "@react-native/popup-menu-android": "0.85.0-nightly-20260114-f15985f4f", +<<<<<<< Upstream + "@react-native/new-app-screen": "0.85.0-main", + "@react-native/popup-menu-android": "0.85.0-main", +||||||| base + "@react-native/new-app-screen": "0.84.0-main", + "@react-native/popup-menu-android": "0.84.0-main", +======= + "@react-native/new-app-screen": "0.85.0-nightly-20260128-36f07a1b2", + "@react-native/popup-menu-android": "0.85.0-nightly-20260128-36f07a1b2", +>>>>>>> Override "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "nullthrows": "^1.1.1" @@ -62,7 +76,7 @@ "commander": "^12.0.0", "listr2": "^6.4.1", "react": "19.2.3", - "react-native": "0.85.0-nightly-20260114-f15985f4f", + "react-native": "0.85.0-nightly-20260128-36f07a1b2", "rxjs": "npm:@react-native-community/rxjs@6.5.4-custom" } } diff --git a/packages/@rnw-scripts/babel-react-native-config/package.json b/packages/@rnw-scripts/babel-react-native-config/package.json index 8b2ae0741e8..92c5d1c9274 100644 --- a/packages/@rnw-scripts/babel-react-native-config/package.json +++ b/packages/@rnw-scripts/babel-react-native-config/package.json @@ -11,12 +11,12 @@ }, "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.85.0-nightly-20260114-f15985f4f", + "@react-native/babel-preset": "0.85.0-nightly-20260128-36f07a1b2", "babel-plugin-transform-flow-enums": "^0.0.2" }, "devDependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.85.0-nightly-20260114-f15985f4f", + "@react-native/babel-preset": "0.85.0-nightly-20260128-36f07a1b2", "eslint": "^8.19.0", "prettier": "^3.6.2" }, diff --git a/packages/@rnw-scripts/eslint-config/package.json b/packages/@rnw-scripts/eslint-config/package.json index e8862dff53c..f92e1f9999b 100644 --- a/packages/@rnw-scripts/eslint-config/package.json +++ b/packages/@rnw-scripts/eslint-config/package.json @@ -13,7 +13,7 @@ "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", "@microsoft/eslint-plugin-sdl": "^0.2.0", - "@react-native/eslint-config": "0.85.0-nightly-20260114-f15985f4f", + "@react-native/eslint-config": "0.85.0-nightly-20260128-36f07a1b2", "eslint-config-prettier": "^8.5.0", "eslint-plugin-ft-flow": "^2.0.1", "hermes-eslint": "0.23.1" diff --git a/packages/@rnw-scripts/integrate-rn/package.json b/packages/@rnw-scripts/integrate-rn/package.json index 036d7f8b4b9..6a65d2fca9a 100644 --- a/packages/@rnw-scripts/integrate-rn/package.json +++ b/packages/@rnw-scripts/integrate-rn/package.json @@ -52,7 +52,7 @@ "jest": "^29.7.0", "prettier": "^3.6.2", "react": "19.2.3", - "react-native": "0.85.0-nightly-20260114-f15985f4f", + "react-native": "0.85.0-nightly-20260128-36f07a1b2", "typescript": "5.0.4" }, "files": [ diff --git a/packages/@rnw-scripts/metro-dev-config/package.json b/packages/@rnw-scripts/metro-dev-config/package.json index ddf6592914a..65b4c054197 100644 --- a/packages/@rnw-scripts/metro-dev-config/package.json +++ b/packages/@rnw-scripts/metro-dev-config/package.json @@ -17,7 +17,7 @@ "lint:fix": "rnw-scripts lint:fix" }, "dependencies": { - "@react-native/metro-config": "0.85.0-nightly-20260114-f15985f4f", + "@react-native/metro-config": "0.85.0-nightly-20260128-36f07a1b2", "@rnx-kit/metro-config": "^2.2.3", "@rnx-kit/metro-plugin-duplicates-checker": "^3.0.2", "@rnx-kit/metro-serializer": "^2.0.3", @@ -30,7 +30,7 @@ "eslint": "^8.19.0", "prettier": "^3.6.2", "react": "19.2.3", - "react-native": "0.85.0-nightly-20260114-f15985f4f", + "react-native": "0.85.0-nightly-20260128-36f07a1b2", "typescript": "5.0.4" }, "peerDependencies": { diff --git a/packages/e2e-test-app-fabric/package.json b/packages/e2e-test-app-fabric/package.json index 5659cf23f70..f2ded32408a 100644 --- a/packages/e2e-test-app-fabric/package.json +++ b/packages/e2e-test-app-fabric/package.json @@ -31,7 +31,7 @@ "@typescript-eslint/eslint-plugin": "^8.36.0", "@typescript-eslint/parser": "^8.36.0", "react": "^19.2.3", - "react-native": "0.85.0-nightly-20260114-f15985f4f", + "react-native": "0.85.0-nightly-20260128-36f07a1b2", "react-native-windows": "^0.0.0-canary.1056" }, "devDependencies": { @@ -45,7 +45,7 @@ "@react-native-windows/automation-commands": "0.0.0-canary.1057", "@react-native-windows/fs": "^0.0.0-canary.72", "@react-native-windows/perf-testing": "0.0.0-canary.1038", - "@react-native/metro-config": "0.85.0-nightly-20260114-f15985f4f", + "@react-native/metro-config": "0.85.0-nightly-20260128-36f07a1b2", "@rnw-scripts/babel-node-config": "2.3.3", "@rnw-scripts/babel-react-native-config": "0.0.0", "@rnw-scripts/eslint-config": "1.2.38", diff --git a/packages/playground/package.json b/packages/playground/package.json index 8e6bc734b59..b450aa96955 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -15,14 +15,14 @@ "@typescript-eslint/eslint-plugin": "^8.36.0", "@typescript-eslint/parser": "^8.36.0", "react": "^19.2.3", - "react-native": "0.85.0-nightly-20260114-f15985f4f", + "react-native": "0.85.0-nightly-20260128-36f07a1b2", "react-native-windows": "^0.0.0-canary.1056" }, "devDependencies": { "@babel/core": "^7.25.2", "@babel/runtime": "^7.20.0", "@react-native-community/cli": "20.0.0", - "@react-native/metro-config": "0.85.0-nightly-20260114-f15985f4f", + "@react-native/metro-config": "0.85.0-nightly-20260128-36f07a1b2", "@rnw-scripts/babel-react-native-config": "0.0.0", "@rnw-scripts/eslint-config": "1.2.38", "@rnw-scripts/just-task": "2.3.58", diff --git a/packages/react-native-windows-init/package.json b/packages/react-native-windows-init/package.json index 173fec28acc..93d4128942b 100644 --- a/packages/react-native-windows-init/package.json +++ b/packages/react-native-windows-init/package.json @@ -53,7 +53,7 @@ "jest": "^29.7.0", "prettier": "^3.6.2", "react": "19.2.3", - "react-native": "0.85.0-nightly-20260114-f15985f4f", + "react-native": "0.85.0-nightly-20260128-36f07a1b2", "typescript": "5.0.4" }, "files": [ diff --git a/packages/sample-app-fabric/package.json b/packages/sample-app-fabric/package.json index 2658b9ac8c4..eb032c4f9d0 100644 --- a/packages/sample-app-fabric/package.json +++ b/packages/sample-app-fabric/package.json @@ -17,7 +17,7 @@ "@typescript-eslint/eslint-plugin": "^8.36.0", "@typescript-eslint/parser": "^8.36.0", "react": "^19.2.3", - "react-native": "0.85.0-nightly-20260114-f15985f4f", + "react-native": "0.85.0-nightly-20260128-36f07a1b2", "react-native-windows": "^0.0.0-canary.1056" }, "devDependencies": { @@ -28,7 +28,7 @@ "@babel/runtime": "^7.20.0", "@jest/globals": "^29.7.0", "@react-native-community/cli": "20.0.0", - "@react-native/metro-config": "0.85.0-nightly-20260114-f15985f4f", + "@react-native/metro-config": "0.85.0-nightly-20260128-36f07a1b2", "@rnw-scripts/babel-node-config": "2.3.3", "@rnw-scripts/babel-react-native-config": "0.0.0", "@rnw-scripts/eslint-config": "1.2.38", diff --git a/packages/sample-custom-component/package.json b/packages/sample-custom-component/package.json index 0c2f400a353..2214b03285f 100644 --- a/packages/sample-custom-component/package.json +++ b/packages/sample-custom-component/package.json @@ -23,7 +23,7 @@ "@types/react": "^19.2.3", "minimatch": "^10.0.3", "react": "^19.2.3", - "react-native": "0.85.0-nightly-20260114-f15985f4f", + "react-native": "0.85.0-nightly-20260128-36f07a1b2", "react-native-windows": "^0.0.0-canary.1056" }, "devDependencies": { @@ -33,7 +33,7 @@ "@babel/preset-typescript": "^7.8.3", "@babel/runtime": "^7.20.0", "@react-native-community/cli": "20.0.0", - "@react-native/metro-config": "0.85.0-nightly-20260114-f15985f4f", + "@react-native/metro-config": "0.85.0-nightly-20260128-36f07a1b2", "@rnw-scripts/babel-node-config": "2.3.3", "@rnw-scripts/babel-react-native-config": "0.0.0", "@rnw-scripts/eslint-config": "1.2.38", diff --git a/vnext/.flowconfig b/vnext/.flowconfig index adf01ddf35e..5996ea24967 100644 --- a/vnext/.flowconfig +++ b/vnext/.flowconfig @@ -173,4 +173,4 @@ untyped-import untyped-type-import [version] -^0.296.1 +^0.298.0 diff --git a/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.cpp b/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.cpp index 9fc24c1e77e..09b8331a703 100644 --- a/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.cpp +++ b/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.cpp @@ -262,6 +262,13 @@ class Stream : public NetworkRequestListener, }; // } // namespace [Windows #13587] +NetworkIOAgent::~NetworkIOAgent() { + if (networkAgentId_) { + NetworkHandler::getInstance().disableAgent(*networkAgentId_); + networkAgentId_ = std::nullopt; + } +} + bool NetworkIOAgent::handleRequest( const cdp::PreparsedRequest& req, LoadNetworkResourceDelegate& delegate) { @@ -281,15 +288,17 @@ bool NetworkIOAgent::handleRequest( // @cdp Network.enable support is experimental. if (req.method == "Network.enable") { - networkHandler.setFrontendChannel(frontendChannel_); - networkHandler.enable(); + networkAgentId_ = networkHandler.enableAgent(frontendChannel_); // NOTE: Domain enable/disable responses are sent by HostAgent. return false; } // @cdp Network.disable support is experimental. if (req.method == "Network.disable") { - networkHandler.disable(); + if (networkAgentId_) { + networkHandler.disableAgent(*networkAgentId_); + networkAgentId_ = std::nullopt; + } // NOTE: Domain enable/disable responses are sent by HostAgent. return false; } diff --git a/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.h b/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.h index 297d7d13401..ea6862fc6bb 100644 --- a/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.h +++ b/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.h @@ -211,6 +211,13 @@ class NetworkIOAgent { { } + ~NetworkIOAgent(); + + NetworkIOAgent(const NetworkIOAgent &) = delete; + NetworkIOAgent &operator=(const NetworkIOAgent &) = delete; + NetworkIOAgent(NetworkIOAgent &&) = delete; + NetworkIOAgent &operator=(NetworkIOAgent &&) = delete; + /** * Handle a CDP request. The response will be sent over the provided * \c FrontendChannel synchronously or asynchronously. @@ -247,6 +254,12 @@ class NetworkIOAgent { */ unsigned long nextStreamId_{0}; + /** + * If non-nullopt, indicates that this agent has enabled the Network domain + * via NetworkHandler, storing the agent ID for cleanup. + */ + std::optional networkAgentId_; + /** * Begin loading an HTTP resource, delegating platform-specific * implementation, responding to the frontend on headers received or on error. diff --git a/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/uimanager/UIManager.cpp b/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/uimanager/UIManager.cpp index 45c0ae7f881..ed1cd3a4ea1 100644 --- a/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/uimanager/UIManager.cpp +++ b/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/uimanager/UIManager.cpp @@ -210,11 +210,9 @@ void UIManager::completeSurface( // after we commit a specific one. lazyShadowTreeRevisionConsistencyManager_->updateCurrentRevision( surfaceId, shadowTree.getCurrentRevision().rootShadowNode); - + if (ReactNativeFeatureFlags::useSharedAnimatedBackend()) { - if (auto animationBackend = animationBackend_.lock()) { - animationBackend->clearRegistry(surfaceId); - } + animationBackend_->clearRegistry(surfaceId); } } }); @@ -442,8 +440,8 @@ void UIManager::setNativeProps_DEPRECATED( if (family.nativeProps_DEPRECATED) { // Values in `rawProps` patch (take precedence over) // `nativeProps_DEPRECATED`. For example, if both `nativeProps_DEPRECATED` - // and `rawProps` contain key 'A'. Value from `rawProps` overrides what was - // previously in `nativeProps_DEPRECATED`. + // and `rawProps` contain key 'A'. Value from `rawProps` overrides what + // was previously in `nativeProps_DEPRECATED`. family.nativeProps_DEPRECATED = std::make_unique(mergeDynamicProps( *family.nativeProps_DEPRECATED, @@ -534,9 +532,9 @@ std::shared_ptr UIManager::findShadowNodeByTag_DEPRECATED( // pointer to a root node because of the possible data race. // To work around this, we ask for a commit and immediately cancel it // returning `nullptr` instead of a new shadow tree. - // We don't want to add a way to access a stored pointer to a root node - // because this `findShadowNodeByTag` is deprecated. It is only added - // to make migration to the new architecture easier. + // We don't want to add a way to access a stored pointer to a root + // node because this `findShadowNodeByTag` is deprecated. It is only + // added to make migration to the new architecture easier. shadowTree.tryCommit( [&](const RootShadowNode& oldRootShadowNode) { rootShadowNode = &oldRootShadowNode; @@ -692,7 +690,7 @@ void UIManager::setNativeAnimatedDelegate( } void UIManager::unstable_setAnimationBackend( - std::weak_ptr animationBackend) { + std::shared_ptr animationBackend) { animationBackend_ = animationBackend; } @@ -709,8 +707,10 @@ void UIManager::animationTick() const { }); } - if (auto nativeAnimatedDelegate = nativeAnimatedDelegate_.lock()) { - nativeAnimatedDelegate->runAnimationFrame(); + if (!ReactNativeFeatureFlags::useSharedAnimatedBackend()) { + if (auto nativeAnimatedDelegate = nativeAnimatedDelegate_.lock()) { + nativeAnimatedDelegate->runAnimationFrame(); + } } } diff --git a/vnext/overrides.json b/vnext/overrides.json index 4d3e420d543..2ee24d36223 100644 --- a/vnext/overrides.json +++ b/vnext/overrides.json @@ -8,13 +8,13 @@ "**/__snapshots__/**", "src-win/rntypes/**" ], - "baseVersion": "0.85.0-nightly-20260114-f15985f4f", + "baseVersion": "0.85.0-nightly-20260128-36f07a1b2", "overrides": [ { "type": "derived", "file": ".flowconfig", "baseFile": ".flowconfig", - "baseHash": "3e63114f0431abfd021daff6285787377f3f464f" + "baseHash": "66b23b57dc30a5834c9ee619d0381828b103a341" }, { "type": "derived", @@ -84,14 +84,14 @@ "type": "patch", "file": "ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.cpp", "baseFile": "packages/react-native/ReactCommon/jsinspector-modern/NetworkIOAgent.cpp", - "baseHash": "4bd7c8481ea6e3cae81bdbc81536c71a928fd761", + "baseHash": "fc90bdc60cc964118c6b7affde52b4645ee35053", "issue": 13587 }, { "type": "patch", "file": "ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.h", "baseFile": "packages/react-native/ReactCommon/jsinspector-modern/NetworkIOAgent.h", - "baseHash": "e7689c2a5bf0d15c219280d586cd7c64833d91dd", + "baseHash": "d761568053877cd077ce1e55cd0ddb86ecafc408", "issue": 13587 }, { @@ -205,7 +205,7 @@ "type": "derived", "file": "ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/uimanager/UIManager.cpp", "baseFile": "packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp", - "baseHash": "a3631f83c2779dbcd7494c8bebc95652cc121b81" + "baseHash": "5d44547f4fa03a1745e05f2dff84fa2101dea24a" }, { "type": "derived", @@ -224,13 +224,13 @@ "type": "derived", "file": "src-win/index.windows.js", "baseFile": "packages/react-native/index.js", - "baseHash": "43b61164095fb1f33793316908d5f974e7c46651" + "baseHash": "9007cd545c708aefc4ab3b9fb7418a210a6e879c" }, { "type": "derived", "file": "src-win/index.windows.js.flow", "baseFile": "packages/react-native/index.js.flow", - "baseHash": "da9cb1941e2b3d395d157e64a56b71a26396f2bf" + "baseHash": "62783de689e8711d7ea287966283974956d797d5" }, { "type": "platform", @@ -276,7 +276,7 @@ "type": "copy", "file": "src-win/jest/setup.js", "baseFile": "packages/react-native/jest/setup.js", - "baseHash": "e07439e411da31c953736731ab474e0401028b1f", + "baseHash": "f0a153e2fecbfa912ae0997e0bc98ea8a1791a52", "issue": 14929 }, { @@ -305,7 +305,7 @@ "type": "patch", "file": "src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js", "baseFile": "packages/react-native/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js", - "baseHash": "c0c7037e52d48caae88cffaac7f60d4dd1c32b3e", + "baseHash": "ee6f102be5d4b456d16900499a01abd0ca1ce1ba", "issue": 4578 }, { @@ -326,7 +326,7 @@ "type": "derived", "file": "src-win/Libraries/Components/Button.windows.js", "baseFile": "packages/react-native/Libraries/Components/Button.js", - "baseHash": "86868c251bb5f5f62af9562cd6513ca1d5ee172d" + "baseHash": "c3f8d0874549590ba8d2d020fd1c13d604d74be9" }, { "type": "platform", @@ -388,19 +388,19 @@ "type": "patch", "file": "src-win/Libraries/Components/RefreshControl/RefreshControl.windows.js", "baseFile": "packages/react-native/Libraries/Components/RefreshControl/RefreshControl.js", - "baseHash": "87b657cbbe3414f08d6e4e58aecd49b411ffeecf" + "baseHash": "bcfa44b41ccdacc834418012f2fa8accd10d6466" }, { "type": "derived", "file": "src-win/Libraries/Components/ScrollView/ScrollView.windows.js", "baseFile": "packages/react-native/Libraries/Components/ScrollView/ScrollView.js", - "baseHash": "3957b2081d1765002a230618b13e66d0754db94a" + "baseHash": "4b7d2e86ea939ebf05d9b7f14e7726497d931e78" }, { "type": "derived", "file": "src-win/Libraries/Components/ScrollView/ScrollViewNativeComponent.windows.js", "baseFile": "packages/react-native/Libraries/Components/ScrollView/ScrollViewNativeComponent.js", - "baseHash": "f05a7fe84d3aa369e9436d20e1f5f7adda994465" + "baseHash": "38ed3e7b639acde756c4b585b320e0c148cd0e6a" }, { "type": "derived", @@ -412,7 +412,7 @@ "type": "derived", "file": "src-win/Libraries/Components/TextInput/TextInput.flow.windows.js", "baseFile": "packages/react-native/Libraries/Components/TextInput/TextInput.flow.js", - "baseHash": "6ea370fcabb5bb0db9682ed28ed832d971937caa" + "baseHash": "89dae9a6774a2fd24d7468702a616752e314d727" }, { "type": "patch", @@ -436,7 +436,7 @@ "type": "patch", "file": "src-win/Libraries/Components/Touchable/Touchable.windows.js", "baseFile": "packages/react-native/Libraries/Components/Touchable/Touchable.js", - "baseHash": "c71e7df7fbdeb6b2c1e9766e95725a56643fa28d" + "baseHash": "a9e38223753e718c5410a8ca9973064e699c1ab4" }, { "type": "derived", @@ -491,7 +491,7 @@ "type": "patch", "file": "src-win/Libraries/Components/View/ViewAccessibility.windows.js", "baseFile": "packages/react-native/Libraries/Components/View/ViewAccessibility.js", - "baseHash": "a4e4e6f4bf2df4685da8fa72a0dc63aee8c4b5db" + "baseHash": "7f8b076ccf47b528c604d2b1086754c351689b2e" }, { "type": "derived", @@ -570,7 +570,7 @@ "type": "derived", "file": "src-win/Libraries/Modal/Modal.windows.js", "baseFile": "packages/react-native/Libraries/Modal/Modal.js", - "baseHash": "91e94f6894391a6dfb66e11bb436b3bffc55953f" + "baseHash": "98988591447c5d2d67875d2ffe0858909a0a1d74" }, { "type": "derived", @@ -594,7 +594,7 @@ "type": "copy", "file": "src-win/Libraries/Network/RCTNetworking.windows.js", "baseFile": "packages/react-native/Libraries/Network/RCTNetworking.ios.js", - "baseHash": "6cc93d00e1b6f541d08102cdc5363184f7ed6025" + "baseHash": "475b803e357811f6989d8d116bb040cfb1735b7c" }, { "type": "platform", @@ -624,7 +624,7 @@ "type": "patch", "file": "src-win/Libraries/Renderer/shims/ReactNativeTypes.windows.js", "baseFile": "packages/react-native/Libraries/Renderer/shims/ReactNativeTypes.js", - "baseHash": "41da351b1e8d090e5ecf0859738218a5dcd4c08f", + "baseHash": "333afc05f5a42a5321196f5f7a14d14c8fd5dd0f", "issue": 4578 }, { @@ -641,7 +641,7 @@ "type": "derived", "file": "src-win/Libraries/Text/Text.windows.js", "baseFile": "packages/react-native/Libraries/Text/Text.js", - "baseHash": "74cfb0cdb33d310206989381bccd0e00a7900078" + "baseHash": "618b750401e9066b212477f3c5d5484e4d181e32" }, { "type": "derived", @@ -653,7 +653,7 @@ "type": "patch", "file": "src-win/Libraries/Types/CoreEventTypes.windows.js", "baseFile": "packages/react-native/Libraries/Types/CoreEventTypes.js", - "baseHash": "f28ed059b210c9552fde4b43521980ba02f18c33" + "baseHash": "a171d222c66e809419656decb12be33185f35952" }, { "type": "copy", @@ -691,13 +691,13 @@ "type": "patch", "file": "src-win/src/private/featureflags/ReactNativeFeatureFlagsBase.js", "baseFile": "packages/react-native/src/private/featureflags/ReactNativeFeatureFlagsBase.js", - "baseHash": "942394bbc4aeba209aa9d1f06127648e9ea34764" + "baseHash": "4292895849232605a17d10b0cc1c167126bf6f3e" }, { "type": "patch", "file": "src-win/src/private/specs_DEPRECATED/components/RCTModalHostViewNativeComponent.js", "baseFile": "packages/react-native/src/private/specs_DEPRECATED/components/RCTModalHostViewNativeComponent.js", - "baseHash": "9580ccd45ec45dfad95d22f6608559e98dfe0eab" + "baseHash": "76fceaf292d4c0d533cca4428e13cf3896b46845" }, { "type": "patch", diff --git a/vnext/package.json b/vnext/package.json index 0bc795ef855..bedf7c2cb85 100644 --- a/vnext/package.json +++ b/vnext/package.json @@ -28,14 +28,14 @@ "@react-native-community/cli-platform-ios": "20.0.0", "@react-native-windows/cli": "0.0.0-canary.291", "@react-native/assets": "1.0.0", - "@react-native/assets-registry": "0.85.0-nightly-20260114-f15985f4f", - "@react-native/codegen": "0.85.0-nightly-20260114-f15985f4f", - "@react-native/community-cli-plugin": "0.85.0-nightly-20260114-f15985f4f", - "@react-native/gradle-plugin": "0.85.0-nightly-20260114-f15985f4f", - "@react-native/js-polyfills": "0.85.0-nightly-20260114-f15985f4f", - "@react-native/new-app-screen": "0.85.0-nightly-20260114-f15985f4f", - "@react-native/normalize-colors": "0.85.0-nightly-20260114-f15985f4f", - "@react-native/virtualized-lists": "0.85.0-nightly-20260114-f15985f4f", + "@react-native/assets-registry": "0.85.0-nightly-20260128-36f07a1b2", + "@react-native/codegen": "0.85.0-nightly-20260128-36f07a1b2", + "@react-native/community-cli-plugin": "0.85.0-nightly-20260128-36f07a1b2", + "@react-native/gradle-plugin": "0.85.0-nightly-20260128-36f07a1b2", + "@react-native/js-polyfills": "0.85.0-nightly-20260128-36f07a1b2", + "@react-native/new-app-screen": "0.85.0-nightly-20260128-36f07a1b2", + "@react-native/normalize-colors": "0.85.0-nightly-20260128-36f07a1b2", + "@react-native/virtualized-lists": "0.85.0-nightly-20260128-36f07a1b2", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", @@ -74,7 +74,7 @@ "@babel/preset-env": "^7.25.3", "@react-native-windows/codegen": "0.0.0-canary.133", "@react-native-windows/find-dotnet-tools": "0.0.0-canary.2", - "@react-native/metro-config": "0.85.0-nightly-20260114-f15985f4f", + "@react-native/metro-config": "0.85.0-nightly-20260128-36f07a1b2", "@rnw-scripts/babel-react-native-config": "0.0.0", "@rnw-scripts/eslint-config": "1.2.38", "@rnw-scripts/jest-out-of-tree-snapshot-resolver": "^1.1.42", @@ -89,7 +89,7 @@ "just-scripts": "^1.3.3", "prettier": "^3.6.2", "react": "19.2.3", - "react-native": "0.85.0-nightly-20260114-f15985f4f", + "react-native": "0.85.0-nightly-20260128-36f07a1b2", "react-native-platform-override": "0.0.0-canary.1022", "react-refresh": "^0.14.0", "typescript": "5.0.4" @@ -97,7 +97,7 @@ "peerDependencies": { "@types/react": "^19.2.3", "react": "^19.2.3", - "react-native": "0.85.0-nightly-20260114-f15985f4f" + "react-native": "0.85.0-nightly-20260128-36f07a1b2" }, "beachball": { "defaultNpmTag": "canary", diff --git a/vnext/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js b/vnext/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js index 3e65ae23fee..29384c334a0 100644 --- a/vnext/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js +++ b/vnext/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js @@ -50,6 +50,55 @@ type AccessibilityEventTypes = | 'windowStateChange'; // Mapping of public event names to platform-specific event names. +<<<<<<< Upstream +const EventNames: Map = + Platform.OS === 'android' + ? new Map([ + ['change', 'touchExplorationDidChange'], + ['reduceMotionChanged', 'reduceMotionDidChange'], + ['highTextContrastChanged', 'highTextContrastDidChange'], + ['screenReaderChanged', 'touchExplorationDidChange'], + ['accessibilityServiceChanged', 'accessibilityServiceDidChange'], + ['invertColorsChanged', 'invertColorDidChange'], + ['grayscaleChanged', 'grayscaleModeDidChange'], + ]) + : new Map([ + ['announcementFinished', 'announcementFinished'], + ['boldTextChanged', 'boldTextChanged'], + ['change', 'screenReaderChanged'], + ['grayscaleChanged', 'grayscaleChanged'], + ['invertColorsChanged', 'invertColorsChanged'], + ['reduceMotionChanged', 'reduceMotionChanged'], + ['reduceTransparencyChanged', 'reduceTransparencyChanged'], + ['screenReaderChanged', 'screenReaderChanged'], + ['darkerSystemColorsChanged', 'darkerSystemColorsChanged'], + ]); +||||||| base +const EventNames: Map< + $Keys, + string, +> = Platform.OS === 'android' + ? new Map([ + ['change', 'touchExplorationDidChange'], + ['reduceMotionChanged', 'reduceMotionDidChange'], + ['highTextContrastChanged', 'highTextContrastDidChange'], + ['screenReaderChanged', 'touchExplorationDidChange'], + ['accessibilityServiceChanged', 'accessibilityServiceDidChange'], + ['invertColorsChanged', 'invertColorDidChange'], + ['grayscaleChanged', 'grayscaleModeDidChange'], + ]) + : new Map([ + ['announcementFinished', 'announcementFinished'], + ['boldTextChanged', 'boldTextChanged'], + ['change', 'screenReaderChanged'], + ['grayscaleChanged', 'grayscaleChanged'], + ['invertColorsChanged', 'invertColorsChanged'], + ['reduceMotionChanged', 'reduceMotionChanged'], + ['reduceTransparencyChanged', 'reduceTransparencyChanged'], + ['screenReaderChanged', 'screenReaderChanged'], + ['darkerSystemColorsChanged', 'darkerSystemColorsChanged'], + ]); +======= const EventNames: Map< $Keys, string, @@ -80,6 +129,7 @@ const EventNames: Map< ['screenReaderChanged', 'screenReaderChanged'], ['darkerSystemColorsChanged', 'darkerSystemColorsChanged'], ]); +>>>>>>> Override /** * Sometimes it's useful to know whether or not the device has a screen reader @@ -437,7 +487,7 @@ const AccessibilityInfo = { * * See https://reactnative.dev/docs/accessibilityinfo#addeventlistener */ - addEventListener>( + addEventListener( eventName: K, // $FlowFixMe[incompatible-type] - Flow bug with unions and generics (T128099423) handler: (...AccessibilityEventDefinitions[K]) => void, diff --git a/vnext/src-win/Libraries/Components/Button.windows.js b/vnext/src-win/Libraries/Components/Button.windows.js index f4b19360bbd..f73673b3d7d 100644 --- a/vnext/src-win/Libraries/Components/Button.windows.js +++ b/vnext/src-win/Libraries/Components/Button.windows.js @@ -152,7 +152,7 @@ export type ButtonProps = Readonly<{ * Accessibility props. */ accessible?: ?boolean, - accessibilityActions?: ?$ReadOnlyArray, + accessibilityActions?: ?ReadonlyArray, onAccessibilityAction?: ?(event: AccessibilityActionEvent) => unknown, onAccessibilityTap?: ?() => void, // Windows accessibilityState?: ?AccessibilityState, diff --git a/vnext/src-win/Libraries/Components/RefreshControl/RefreshControl.windows.js b/vnext/src-win/Libraries/Components/RefreshControl/RefreshControl.windows.js index ac5c033be9f..f5876193548 100644 --- a/vnext/src-win/Libraries/Components/RefreshControl/RefreshControl.windows.js +++ b/vnext/src-win/Libraries/Components/RefreshControl/RefreshControl.windows.js @@ -44,7 +44,7 @@ export type RefreshControlPropsAndroid = Readonly<{ /** * The colors (at least one) that will be used to draw the refresh indicator. */ - colors?: ?$ReadOnlyArray, + colors?: ?ReadonlyArray, /** * The background color of the refresh indicator. */ diff --git a/vnext/src-win/Libraries/Components/ScrollView/ScrollView.windows.js b/vnext/src-win/Libraries/Components/ScrollView/ScrollView.windows.js index af20adabc5f..c145f8c2618 100644 --- a/vnext/src-win/Libraries/Components/ScrollView/ScrollView.windows.js +++ b/vnext/src-win/Libraries/Components/ScrollView/ScrollView.windows.js @@ -388,6 +388,14 @@ export type ScrollViewPropsAndroid = Readonly<{ * @platform android */ fadingEdgeLength?: ?number | {start: number, end: number}, + /** + * When false, the ScrollView will not automatically scroll to a focused child when + * the child requests focus. This can be useful when you want to control the scroll + * position programmatically. The default value is true. + * + * @platform android + */ + scrollsChildToFocus?: ?boolean, }>; type StickyHeaderComponentType = component( @@ -591,7 +599,7 @@ type ScrollViewBaseProps = Readonly<{ * top of the scroll view. This property is not supported in conjunction * with `horizontal={true}`. */ - stickyHeaderIndices?: ?$ReadOnlyArray, + stickyHeaderIndices?: ?ReadonlyArray, /** * A React Component that will be used to render sticky headers. * To be used together with `stickyHeaderIndices` or with `SectionList`, defaults to `ScrollViewStickyHeader`. @@ -625,7 +633,7 @@ type ScrollViewBaseProps = Readonly<{ * * Overrides less configurable `pagingEnabled` and `snapToInterval` props. */ - snapToOffsets?: ?$ReadOnlyArray, + snapToOffsets?: ?ReadonlyArray, /** * Use in conjunction with `snapToOffsets`. By default, the beginning * of the list counts as a snap offset. Set `snapToStart` to false to disable @@ -1853,6 +1861,8 @@ class ScrollView extends React.Component { {style: StyleSheet.compose(baseStyle, outer)}, diff --git a/vnext/src-win/Libraries/Components/ScrollView/ScrollViewNativeComponent.windows.js b/vnext/src-win/Libraries/Components/ScrollView/ScrollViewNativeComponent.windows.js index 5f2c3ac60c9..0286c3249d7 100644 --- a/vnext/src-win/Libraries/Components/ScrollView/ScrollViewNativeComponent.windows.js +++ b/vnext/src-win/Libraries/Components/ScrollView/ScrollViewNativeComponent.windows.js @@ -88,6 +88,7 @@ export const __INTERNAL_VIEW_CONFIG: PartialViewConfig = }, pointerEvents: true, isInvertedVirtualizedList: true, + scrollsChildToFocus: true, }, } : { diff --git a/vnext/src-win/Libraries/Components/TextInput/TextInput.flow.windows.js b/vnext/src-win/Libraries/Components/TextInput/TextInput.flow.windows.js index 386e67e466b..ee52b791601 100644 --- a/vnext/src-win/Libraries/Components/TextInput/TextInput.flow.windows.js +++ b/vnext/src-win/Libraries/Components/TextInput/TextInput.flow.windows.js @@ -34,6 +34,7 @@ type TextInputChangeEventData = Readonly<{ eventCount: number, target: number, text: string, + selection?: Selection, }>; export type TextInputChangeEvent = @@ -311,7 +312,7 @@ export type TextInputIOSProps = Readonly<{ */ dataDetectorTypes?: | ?DataDetectorTypesType - | $ReadOnlyArray, + | ReadonlyArray, /** * If `true`, the keyboard disables the return key when there is no text and @@ -595,6 +596,11 @@ type TextInputBaseProps = Readonly<{ * * @see https://developer.android.com/reference/android/content/ClipData for more information on MIME types */ +<<<<<<< Upstream + experimental_acceptDragAndDropTypes?: ?ReadonlyArray, +||||||| base + experimental_acceptDragAndDropTypes?: ?$ReadOnlyArray, +======= experimental_acceptDragAndDropTypes?: ?$ReadOnlyArray, /** * String to be read by screenreaders to indicate an error state. The acceptable parameters @@ -603,6 +609,7 @@ type TextInputBaseProps = Readonly<{ */ accessibilityErrorMessage?: ?Stringish, accessibilityInvalid?: ?boolean, +>>>>>>> Override /** * Can tell `TextInput` to automatically capitalize certain characters. diff --git a/vnext/src-win/Libraries/Components/Touchable/Touchable.windows.js b/vnext/src-win/Libraries/Components/Touchable/Touchable.windows.js index 0d125cab2fd..6cfca7a99d4 100644 --- a/vnext/src-win/Libraries/Components/Touchable/Touchable.windows.js +++ b/vnext/src-win/Libraries/Components/Touchable/Touchable.windows.js @@ -25,10 +25,16 @@ import Position from './Position'; import * as React from 'react'; const extractSingleTouch = (nativeEvent: { +<<<<<<< Upstream + +changedTouches: ReadonlyArray, +||||||| base + +changedTouches: $ReadOnlyArray, +======= +altKey: ?boolean, +button: ?number, +changedTouches: $ReadOnlyArray, +ctrlKey: ?boolean, +>>>>>>> Override +force?: number, +identifier: number, +locationX: number, @@ -39,7 +45,7 @@ const extractSingleTouch = (nativeEvent: { +shiftKey: ?boolean, +target: ?number, +timestamp: number, - +touches: $ReadOnlyArray, + +touches: ReadonlyArray, }) => { const touches = nativeEvent.touches; const changedTouches = nativeEvent.changedTouches; diff --git a/vnext/src-win/Libraries/Components/View/ViewAccessibility.windows.js b/vnext/src-win/Libraries/Components/View/ViewAccessibility.windows.js index 8ec1b079b38..b01c4ec62a4 100644 --- a/vnext/src-win/Libraries/Components/View/ViewAccessibility.windows.js +++ b/vnext/src-win/Libraries/Components/View/ViewAccessibility.windows.js @@ -439,7 +439,7 @@ export type AccessibilityProps = Readonly<{ * Provides an array of custom actions available for accessibility. * */ - accessibilityActions?: ?$ReadOnlyArray, + accessibilityActions?: ?ReadonlyArray, /** * alias for accessibilityState diff --git a/vnext/src-win/Libraries/Modal/Modal.windows.js b/vnext/src-win/Libraries/Modal/Modal.windows.js index d02116df78b..ea740a104f9 100644 --- a/vnext/src-win/Libraries/Modal/Modal.windows.js +++ b/vnext/src-win/Libraries/Modal/Modal.windows.js @@ -122,7 +122,7 @@ export type ModalPropsIOS = { * The `supportedOrientations` prop allows the modal to be rotated to any of the specified orientations. * On iOS, the modal is still restricted by what's specified in your app's Info.plist's UISupportedInterfaceOrientations field. */ - supportedOrientations?: ?$ReadOnlyArray< + supportedOrientations?: ?ReadonlyArray< | 'portrait' | 'portrait-upside-down' | 'landscape' diff --git a/vnext/src-win/Libraries/Network/RCTNetworking.windows.js b/vnext/src-win/Libraries/Network/RCTNetworking.windows.js index 454ce4b9176..ec4720f9f46 100644 --- a/vnext/src-win/Libraries/Network/RCTNetworking.windows.js +++ b/vnext/src-win/Libraries/Network/RCTNetworking.windows.js @@ -18,7 +18,7 @@ import {type RCTNetworkingEventDefinitions} from './RCTNetworkingEventDefinition import {type NativeResponseType} from './XMLHttpRequest'; const RCTNetworking = { - addListener>( + addListener( eventType: K, listener: (...RCTNetworkingEventDefinitions[K]) => unknown, context?: unknown, diff --git a/vnext/src-win/Libraries/Renderer/shims/ReactNativeTypes.windows.js b/vnext/src-win/Libraries/Renderer/shims/ReactNativeTypes.windows.js index 3226d4b538b..ee6ae134cac 100644 --- a/vnext/src-win/Libraries/Renderer/shims/ReactNativeTypes.windows.js +++ b/vnext/src-win/Libraries/Renderer/shims/ReactNativeTypes.windows.js @@ -7,9 +7,7 @@ * @noformat * @nolint * @flow strict - * @generated SignedSource<<989e6e2e860dc2af7ba983849111bda8>> - * - * This file was sync'd from the facebook/react repository. + * @generated SignedSource<> */ import type { diff --git a/vnext/src-win/Libraries/Text/Text.windows.js b/vnext/src-win/Libraries/Text/Text.windows.js index a6adcc535b5..edf45fed9d6 100644 --- a/vnext/src-win/Libraries/Text/Text.windows.js +++ b/vnext/src-win/Libraries/Text/Text.windows.js @@ -14,7 +14,6 @@ import type {GestureResponderEvent} from '../Types/CoreEventTypes'; import type {NativeTextProps} from './TextNativeComponent'; import type {PressRetentionOffset, TextProps} from './TextProps'; -import * as ReactNativeFeatureFlags from '../../src/private/featureflags/ReactNativeFeatureFlags'; import * as PressabilityDebug from '../Pressability/PressabilityDebug'; import usePressability from '../Pressability/usePressability'; import flattenStyle from '../StyleSheet/flattenStyle'; @@ -39,6 +38,72 @@ type TextForwardRef = React.ElementRef< * * @see https://reactnative.dev/docs/text */ +<<<<<<< Upstream +const TextImpl: component( + ref?: React.RefSetter, + ...props: TextProps +) = ({ + ref: forwardedRef, + accessible, + accessibilityLabel, + accessibilityRole, + accessibilityState, + allowFontScaling, + 'aria-busy': ariaBusy, + 'aria-checked': ariaChecked, + 'aria-disabled': ariaDisabled, + 'aria-expanded': ariaExpanded, + 'aria-hidden': ariaHidden, + 'aria-label': ariaLabel, + 'aria-selected': ariaSelected, + children, + ellipsizeMode, + disabled, + id, + nativeID, + numberOfLines, + onLongPress, + onPress, + onPressIn, + onPressOut, + onResponderGrant, + onResponderMove, + onResponderRelease, + onResponderTerminate, + onResponderTerminationRequest, + onStartShouldSetResponder, + pressRetentionOffset, + role, + selectable, + selectionColor, + suppressHighlighting, + style, + ...restProps +}: { + ref?: React.RefSetter, + ...TextProps, +}) => { + const processedProps = restProps as { + ...NativeTextProps, + }; + const _accessibilityLabel = ariaLabel ?? accessibilityLabel; + let _accessibilityState: ?TextProps['accessibilityState'] = + accessibilityState; + if ( + ariaBusy != null || + ariaChecked != null || + ariaDisabled != null || + ariaExpanded != null || + ariaSelected != null + ) { + if (_accessibilityState != null) { + _accessibilityState = { + busy: ariaBusy ?? _accessibilityState.busy, + checked: ariaChecked ?? _accessibilityState.checked, + disabled: ariaDisabled ?? _accessibilityState.disabled, + expanded: ariaExpanded ?? _accessibilityState.expanded, + selected: ariaSelected ?? _accessibilityState.selected, +||||||| base let _TextImpl; if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { const TextImplNoDefaultProps: component( @@ -57,17 +122,6 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { 'aria-expanded': ariaExpanded, 'aria-hidden': ariaHidden, 'aria-label': ariaLabel, - // #[Windows properties - 'aria-multiselectable': ariaMultiselectable, - 'aria-required': ariaRequired, - 'aria-level': ariaLevel, - 'aria-posinset': ariaPosinset, - 'aria-setsize': ariaSetsize, - 'aria-readonly': ariaReadOnly, - accessibilityLevel, - accessibilityPosInSet, - accessibilitySetSize, - // #]Windows properties 'aria-selected': ariaSelected, children, ellipsizeMode, @@ -100,12 +154,6 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { ...NativeTextProps, }; const _accessibilityLabel = ariaLabel ?? accessibilityLabel; - // #[Windows - const _accessibilityLevel = ariaLevel ?? accessibilityLevel; - const _accessibilityPosInSet = ariaPosinset ?? accessibilityPosInSet; - const _accessibilitySetSize = ariaSetsize ?? accessibilitySetSize; - // #]Windows - let _accessibilityState: ?TextProps['accessibilityState'] = accessibilityState; if ( @@ -113,12 +161,7 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { ariaChecked != null || ariaDisabled != null || ariaExpanded != null || - ariaSelected != null || - // #[Windows properties - ariaReadOnly != null || - ariaMultiselectable != null || - ariaRequired != null - // #]Windows properties + ariaSelected != null ) { if (_accessibilityState != null) { _accessibilityState = { @@ -127,12 +170,6 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { disabled: ariaDisabled ?? _accessibilityState.disabled, expanded: ariaExpanded ?? _accessibilityState.expanded, selected: ariaSelected ?? _accessibilityState.selected, - // #[Windows - readOnly: ariaReadOnly ?? _accessibilityState.readOnly, - multiselectable: - ariaMultiselectable ?? _accessibilityState.multiselectable, - required: ariaRequired ?? _accessibilityState.required, - // #]Windows }; } else { _accessibilityState = { @@ -141,11 +178,6 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { disabled: ariaDisabled, expanded: ariaExpanded, selected: ariaSelected, - // #[Windows - readOnly: ariaReadOnly, - multiselectable: ariaMultiselectable, - required: ariaRequired, - // #]Windows }; } } @@ -178,7 +210,7 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { accessible == null ? onPress != null || onLongPress != null : accessible, - default: accessible !== false, // [Windows #13996 - default value is accessible !== false] + default: accessible, }); const isPressable = @@ -280,18 +312,6 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { processedProps.role = _role; } - // [Windows accessibility properties - if (ariaLevel !== undefined) { - processedProps.accessibilityLevel = ariaLevel; - } - if (ariaPosinset !== undefined) { - processedProps.accessibilityPosInSet = ariaPosinset; - } - if (ariaSetsize !== undefined) { - processedProps.accessibilitySetSize = ariaSetsize; - } - // ] - let textPressabilityProps: ?TextPressabilityProps; if (isPressable) { textPressabilityProps = { @@ -307,82 +327,15 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { onStartShouldSetResponder, pressRetentionOffset, suppressHighlighting, - }; - } - - const hasTextAncestor = useContext(TextAncestorContext); - if (hasTextAncestor) { - processedProps.disabled = disabled; - processedProps.children = children; - if (isPressable) { - return ( - - ); - } - return ; - } - - let nativeText = null; - - processedProps.accessible = _accessible; - processedProps.allowFontScaling = allowFontScaling !== false; - processedProps.disabled = _disabled; - processedProps.ellipsizeMode = ellipsizeMode ?? 'tail'; - processedProps.children = children; - - if (isPressable) { - nativeText = ( - - ); - } else { - nativeText = ; - } - - if (children == null) { - return nativeText; - } - - // If the children do not contain a JSX element it would not be possible to have a - // nested `Text` component so we can skip adding the `TextAncestorContext` context wrapper - // which has a performance overhead. Since we do this for performance reasons we need - // to keep the check simple to avoid regressing overall perf. For this reason the - // `children.length` constant is set to `3`, this should be a reasonable tradeoff - // to capture the majority of `Text` uses but also not make this check too expensive. - if (Array.isArray(children) && children.length <= 3) { - let hasNonTextChild = false; - for (let child of children) { - if (child != null && typeof child === 'object') { - hasNonTextChild = true; - break; - } - } - if (!hasNonTextChild) { - return nativeText; - } - } else if (typeof children !== 'object') { - return nativeText; - } - - return {nativeText}; - }; - _TextImpl = TextImplNoDefaultProps; -} else { - const TextImplLegacy: component( +======= +let _TextImpl; +if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { + const TextImplNoDefaultProps: component( ref?: React.RefSetter, ...props: TextProps ) = ({ ref: forwardedRef, accessible, - accessibilityElementsHidden, - importantForAccessibility, accessibilityLabel, accessibilityRole, accessibilityState, @@ -393,17 +346,17 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { 'aria-expanded': ariaExpanded, 'aria-hidden': ariaHidden, 'aria-label': ariaLabel, - // #[Windows - 'aria-multiselectable': ariaMultiselectable, // Windows - 'aria-required': ariaRequired, // Windows - 'aria-level': ariaLevel, // Windows - 'aria-posinset': ariaPosinset, // Windows - 'aria-setsize': ariaSetsize, // Windows - 'aria-readonly': ariaReadOnly, //Windows - accessibilityLevel, // Windows - accessibilityPosInSet, // Windows - accessibilitySetSize, // Windows - // #]Windows + // #[Windows properties + 'aria-multiselectable': ariaMultiselectable, + 'aria-required': ariaRequired, + 'aria-level': ariaLevel, + 'aria-posinset': ariaPosinset, + 'aria-setsize': ariaSetsize, + 'aria-readonly': ariaReadOnly, + accessibilityLevel, + accessibilityPosInSet, + accessibilitySetSize, + // #]Windows properties 'aria-selected': ariaSelected, children, ellipsizeMode, @@ -432,12 +385,15 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { ref?: React.RefSetter, ...TextProps, }) => { + const processedProps = restProps as { + ...NativeTextProps, + }; const _accessibilityLabel = ariaLabel ?? accessibilityLabel; - // [# Windows + // #[Windows const _accessibilityLevel = ariaLevel ?? accessibilityLevel; const _accessibilityPosInSet = ariaPosinset ?? accessibilityPosInSet; const _accessibilitySetSize = ariaSetsize ?? accessibilitySetSize; - // ]# Windows + // #]Windows let _accessibilityState: ?TextProps['accessibilityState'] = accessibilityState; @@ -447,11 +403,11 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { ariaDisabled != null || ariaExpanded != null || ariaSelected != null || - // #[Windows - ariaReadOnly != null || // Windows - ariaMultiselectable != null || // Windows - ariaRequired != null // Windows - // #]Windows + // #[Windows properties + ariaReadOnly != null || + ariaMultiselectable != null || + ariaRequired != null + // #]Windows properties ) { if (_accessibilityState != null) { _accessibilityState = { @@ -461,10 +417,10 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { expanded: ariaExpanded ?? _accessibilityState.expanded, selected: ariaSelected ?? _accessibilityState.selected, // #[Windows - readOnly: ariaReadOnly ?? _accessibilityState.readOnly, // Windows + readOnly: ariaReadOnly ?? _accessibilityState.readOnly, multiselectable: - ariaMultiselectable ?? _accessibilityState.multiselectable, // Windows - required: ariaRequired ?? _accessibilityState.required, // Windows + ariaMultiselectable ?? _accessibilityState.multiselectable, + required: ariaRequired ?? _accessibilityState.required, // #]Windows }; } else { @@ -475,9 +431,9 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { expanded: ariaExpanded, selected: ariaSelected, // #[Windows - readOnly: ariaReadOnly, // Windows - multiselectable: ariaMultiselectable, // Windows - required: ariaRequired, // Windows + readOnly: ariaReadOnly, + multiselectable: ariaMultiselectable, + required: ariaRequired, // #]Windows }; } @@ -486,13 +442,34 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { const _accessibilityStateDisabled = _accessibilityState?.disabled; const _disabled = disabled ?? _accessibilityStateDisabled; - let _accessibilityElementsHidden = - ariaHidden ?? accessibilityElementsHidden; - let _importantForAccessibility = importantForAccessibility; - if (ariaHidden === true) { - _importantForAccessibility = 'no-hide-descendants'; + // If the disabled prop and accessibilityState.disabled are out of sync but not both in + // falsy states we need to update the accessibilityState object to use the disabled prop. + if ( + _accessibilityState != null && + _disabled !== _accessibilityStateDisabled && + ((_disabled != null && _disabled !== false) || + (_accessibilityStateDisabled != null && + _accessibilityStateDisabled !== false)) + ) { + _accessibilityState.disabled = _disabled; + } + + if (ariaHidden !== undefined) { + processedProps.accessibilityElementsHidden = ariaHidden; + if (ariaHidden === true) { + processedProps.importantForAccessibility = 'no-hide-descendants'; + } } + const _accessible = Platform.select({ + ios: accessible !== false, + android: + accessible == null + ? onPress != null || onLongPress != null + : accessible, + default: accessible !== false, // [Windows #13996 - default value is accessible !== false] + }); + const isPressable = (onPress != null || onLongPress != null || @@ -540,7 +517,7 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { overrides = overrides || ({}: {...TextStyleInternal}); overrides.fontWeight = // $FlowFixMe[incompatible-type] - (processedStyle.fontWeight.toString(): TextStyleInternal['fontWeight']); + (String(processedStyle.fontWeight): TextStyleInternal['fontWeight']); } if (processedStyle.userSelect != null) { @@ -564,84 +541,556 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { const _nativeID = id ?? nativeID; - const hasTextAncestor = useContext(TextAncestorContext); - if (hasTextAncestor) { - if (isPressable) { - return ( - - ); - } - - return ( - - {children} - - ); + if (_accessibilityLabel !== undefined) { + processedProps.accessibilityLabel = _accessibilityLabel; + } + if (_accessibilityRole !== undefined) { + processedProps.accessibilityRole = _accessibilityRole; + } + if (_accessibilityState !== undefined) { + processedProps.accessibilityState = _accessibilityState; + } + if (_nativeID !== undefined) { + processedProps.nativeID = _nativeID; + } + if (_numberOfLines !== undefined) { + processedProps.numberOfLines = _numberOfLines; + } + if (_selectable !== undefined) { + processedProps.selectable = _selectable; + } + if (_style !== undefined) { + processedProps.style = _style; + } + if (_selectionColor !== undefined) { + processedProps.selectionColor = _selectionColor; + } + if (_role !== undefined) { + processedProps.role = _role; } - // If the disabled prop and accessibilityState.disabled are out of sync but not both in - // falsy states we need to update the accessibilityState object to use the disabled prop. + // [Windows accessibility properties + if (ariaLevel !== undefined) { + processedProps.accessibilityLevel = ariaLevel; + } + if (ariaPosinset !== undefined) { + processedProps.accessibilityPosInSet = ariaPosinset; + } + if (ariaSetsize !== undefined) { + processedProps.accessibilitySetSize = ariaSetsize; + } + // ] + + let textPressabilityProps: ?TextPressabilityProps; + if (isPressable) { + textPressabilityProps = { + onLongPress, + onPress, + onPressIn, + onPressOut, + onResponderGrant, + onResponderMove, + onResponderRelease, + onResponderTerminate, + onResponderTerminationRequest, + onStartShouldSetResponder, + pressRetentionOffset, + suppressHighlighting, +>>>>>>> Override + }; + } else { + _accessibilityState = { + busy: ariaBusy, + checked: ariaChecked, + disabled: ariaDisabled, + expanded: ariaExpanded, + selected: ariaSelected, + }; + } +<<<<<<< Upstream + } + + const _accessibilityStateDisabled = _accessibilityState?.disabled; + const _disabled = disabled ?? _accessibilityStateDisabled; + + // If the disabled prop and accessibilityState.disabled are out of sync but not both in + // falsy states we need to update the accessibilityState object to use the disabled prop. + if ( + _disabled !== _accessibilityStateDisabled && + ((_disabled != null && _disabled !== false) || + (_accessibilityStateDisabled != null && + _accessibilityStateDisabled !== false)) + ) { + if (_accessibilityState == null) { + _accessibilityState = {disabled}; + } else { + _accessibilityState.disabled = _disabled; +||||||| base + + return {nativeText}; + }; + _TextImpl = TextImplNoDefaultProps; +} else { + const TextImplLegacy: component( + ref?: React.RefSetter, + ...props: TextProps + ) = ({ + ref: forwardedRef, + accessible, + accessibilityElementsHidden, + importantForAccessibility, + accessibilityLabel, + accessibilityRole, + accessibilityState, + allowFontScaling, + 'aria-busy': ariaBusy, + 'aria-checked': ariaChecked, + 'aria-disabled': ariaDisabled, + 'aria-expanded': ariaExpanded, + 'aria-hidden': ariaHidden, + 'aria-label': ariaLabel, + 'aria-selected': ariaSelected, + children, + ellipsizeMode, + disabled, + id, + nativeID, + numberOfLines, + onLongPress, + onPress, + onPressIn, + onPressOut, + onResponderGrant, + onResponderMove, + onResponderRelease, + onResponderTerminate, + onResponderTerminationRequest, + onStartShouldSetResponder, + pressRetentionOffset, + role, + selectable, + selectionColor, + suppressHighlighting, + style, + ...restProps + }: { + ref?: React.RefSetter, + ...TextProps, + }) => { + const _accessibilityLabel = ariaLabel ?? accessibilityLabel; + + let _accessibilityState: ?TextProps['accessibilityState'] = + accessibilityState; if ( - _disabled !== _accessibilityStateDisabled && - ((_disabled != null && _disabled !== false) || - (_accessibilityStateDisabled != null && - _accessibilityStateDisabled !== false)) + ariaBusy != null || + ariaChecked != null || + ariaDisabled != null || + ariaExpanded != null || + ariaSelected != null + ) { + if (_accessibilityState != null) { + _accessibilityState = { + busy: ariaBusy ?? _accessibilityState.busy, + checked: ariaChecked ?? _accessibilityState.checked, + disabled: ariaDisabled ?? _accessibilityState.disabled, + expanded: ariaExpanded ?? _accessibilityState.expanded, + selected: ariaSelected ?? _accessibilityState.selected, + }; + } else { + _accessibilityState = { + busy: ariaBusy, + checked: ariaChecked, + disabled: ariaDisabled, + expanded: ariaExpanded, + selected: ariaSelected, + }; + } +======= + + return {nativeText}; + }; + _TextImpl = TextImplNoDefaultProps; +} else { + const TextImplLegacy: component( + ref?: React.RefSetter, + ...props: TextProps + ) = ({ + ref: forwardedRef, + accessible, + accessibilityElementsHidden, + importantForAccessibility, + accessibilityLabel, + accessibilityRole, + accessibilityState, + allowFontScaling, + 'aria-busy': ariaBusy, + 'aria-checked': ariaChecked, + 'aria-disabled': ariaDisabled, + 'aria-expanded': ariaExpanded, + 'aria-hidden': ariaHidden, + 'aria-label': ariaLabel, + // #[Windows + 'aria-multiselectable': ariaMultiselectable, // Windows + 'aria-required': ariaRequired, // Windows + 'aria-level': ariaLevel, // Windows + 'aria-posinset': ariaPosinset, // Windows + 'aria-setsize': ariaSetsize, // Windows + 'aria-readonly': ariaReadOnly, //Windows + accessibilityLevel, // Windows + accessibilityPosInSet, // Windows + accessibilitySetSize, // Windows + // #]Windows + 'aria-selected': ariaSelected, + children, + ellipsizeMode, + disabled, + id, + nativeID, + numberOfLines, + onLongPress, + onPress, + onPressIn, + onPressOut, + onResponderGrant, + onResponderMove, + onResponderRelease, + onResponderTerminate, + onResponderTerminationRequest, + onStartShouldSetResponder, + pressRetentionOffset, + role, + selectable, + selectionColor, + suppressHighlighting, + style, + ...restProps + }: { + ref?: React.RefSetter, + ...TextProps, + }) => { + const _accessibilityLabel = ariaLabel ?? accessibilityLabel; + // [# Windows + const _accessibilityLevel = ariaLevel ?? accessibilityLevel; + const _accessibilityPosInSet = ariaPosinset ?? accessibilityPosInSet; + const _accessibilitySetSize = ariaSetsize ?? accessibilitySetSize; + // ]# Windows + + let _accessibilityState: ?TextProps['accessibilityState'] = + accessibilityState; + if ( + ariaBusy != null || + ariaChecked != null || + ariaDisabled != null || + ariaExpanded != null || + ariaSelected != null || + // #[Windows + ariaReadOnly != null || // Windows + ariaMultiselectable != null || // Windows + ariaRequired != null // Windows + // #]Windows ) { - _accessibilityState = {..._accessibilityState, disabled: _disabled}; + if (_accessibilityState != null) { + _accessibilityState = { + busy: ariaBusy ?? _accessibilityState.busy, + checked: ariaChecked ?? _accessibilityState.checked, + disabled: ariaDisabled ?? _accessibilityState.disabled, + expanded: ariaExpanded ?? _accessibilityState.expanded, + selected: ariaSelected ?? _accessibilityState.selected, + // #[Windows + readOnly: ariaReadOnly ?? _accessibilityState.readOnly, // Windows + multiselectable: + ariaMultiselectable ?? _accessibilityState.multiselectable, // Windows + required: ariaRequired ?? _accessibilityState.required, // Windows + // #]Windows + }; + } else { + _accessibilityState = { + busy: ariaBusy, + checked: ariaChecked, + disabled: ariaDisabled, + expanded: ariaExpanded, + selected: ariaSelected, + // #[Windows + readOnly: ariaReadOnly, // Windows + multiselectable: ariaMultiselectable, // Windows + required: ariaRequired, // Windows + // #]Windows + }; + } +>>>>>>> Override + } + } + + if (ariaHidden !== undefined) { + processedProps.accessibilityElementsHidden = ariaHidden; + if (ariaHidden === true) { + processedProps.importantForAccessibility = 'no-hide-descendants'; + } + } + + const _accessible = Platform.select({ + ios: accessible !== false, + android: + accessible == null ? onPress != null || onLongPress != null : accessible, + default: accessible, + }); + + const isPressable = + (onPress != null || + onLongPress != null || + onStartShouldSetResponder != null) && + _disabled !== true; + + const shouldUseLinkRole = + isPressable && accessibilityRole == null && role == null; + + const _accessibilityRole = + accessibilityRole ?? (shouldUseLinkRole ? 'link' : undefined); + + const _role = shouldUseLinkRole ? undefined : role; + + // TODO: Move this processing to the view configuration. + const _selectionColor = + selectionColor != null ? processColor(selectionColor) : undefined; + + let _style = style; + if (__DEV__) { + if (PressabilityDebug.isEnabled() && onPress != null) { + _style = [style, {color: 'magenta'}]; + } + } + + let _numberOfLines = numberOfLines; + if (_numberOfLines != null && !(_numberOfLines >= 0)) { + if (__DEV__) { + console.error( + `'numberOfLines' in must be a non-negative number, received: ${_numberOfLines}. The value will be set to 0.`, + ); } + _numberOfLines = 0; + } + + let _selectable = selectable; + + let processedStyle = flattenStyle(_style); + if (processedStyle != null) { + let overrides: ?{...TextStyleInternal} = null; + if (typeof processedStyle.fontWeight === 'number') { + overrides = overrides || ({}: {...TextStyleInternal}); + overrides.fontWeight = + // $FlowFixMe[incompatible-type] + (String(processedStyle.fontWeight): TextStyleInternal['fontWeight']); + } + +<<<<<<< Upstream + if (processedStyle.userSelect != null) { + _selectable = userSelectToSelectableMap[processedStyle.userSelect]; + overrides = overrides || ({}: {...TextStyleInternal}); + overrides.userSelect = undefined; +||||||| base + const _nativeID = id ?? nativeID; + + const hasTextAncestor = useContext(TextAncestorContext); + if (hasTextAncestor) { + if (isPressable) { + return ( + + ); + } + + return ( + + {children} + + ); +======= + const _nativeID = id ?? nativeID; + const hasTextAncestor = useContext(TextAncestorContext); + if (hasTextAncestor) { + if (isPressable) { + return ( + + ); + } + + return ( + + {children} + + ); +>>>>>>> Override + } + + if (processedStyle.verticalAlign != null) { + overrides = overrides || ({}: {...TextStyleInternal}); + overrides.textAlignVertical = + verticalAlignToTextAlignVerticalMap[processedStyle.verticalAlign]; + overrides.verticalAlign = undefined; + } + +<<<<<<< Upstream + if (overrides != null) { + // $FlowFixMe[incompatible-type] + _style = [_style, overrides]; + } + } + + const _nativeID = id ?? nativeID; + + if (_accessibilityLabel !== undefined) { + processedProps.accessibilityLabel = _accessibilityLabel; + } + if (_accessibilityRole !== undefined) { + processedProps.accessibilityRole = _accessibilityRole; + } + if (_accessibilityState !== undefined) { + processedProps.accessibilityState = _accessibilityState; + } + if (_nativeID !== undefined) { + processedProps.nativeID = _nativeID; + } + if (_numberOfLines !== undefined) { + processedProps.numberOfLines = _numberOfLines; + } + if (_selectable !== undefined) { + processedProps.selectable = _selectable; + } + if (_style !== undefined) { + processedProps.style = _style; + } + if (_selectionColor !== undefined) { + processedProps.selectionColor = _selectionColor; + } + if (_role !== undefined) { + processedProps.role = _role; + } + + let textPressabilityProps: ?TextPressabilityProps; + if (isPressable) { + textPressabilityProps = { + onLongPress, + onPress, + onPressIn, + onPressOut, + onResponderGrant, + onResponderMove, + onResponderRelease, + onResponderTerminate, + onResponderTerminationRequest, + onStartShouldSetResponder, + pressRetentionOffset, + suppressHighlighting, + }; + } +||||||| base + const _accessible = Platform.select({ + ios: accessible !== false, + android: + accessible == null + ? onPress != null || onLongPress != null + : accessible, + default: accessible, + }); +======= const _accessible = Platform.select({ ios: accessible !== false, android: @@ -650,47 +1099,46 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { : accessible, default: accessible !== false, // [Windows #13996 - default value is accessible !== false] }); +>>>>>>> Override - let nativeText = null; + const hasTextAncestor = useContext(TextAncestorContext); + if (hasTextAncestor) { + processedProps.disabled = disabled; + processedProps.children = children; if (isPressable) { - nativeText = ( - ); +<<<<<<< Upstream +||||||| base + } else { + nativeText = ( + + {children} + + ); +======= } else { nativeText = ( ); +>>>>>>> Override } - - if (children == null) { - return nativeText; - } - - // If the children do not contain a JSX element it would not be possible to have a - // nested `Text` component so we can skip adding the `TextAncestorContext` context wrapper - // which has a performance overhead. Since we do this for performance reasons we need - // to keep the check simple to avoid regressing overall perf. For this reason the - // `children.length` constant is set to `3`, this should be a reasonable tradeoff - // to capture the majority of `Text` uses but also not make this check too expensive. - if (Array.isArray(children) && children.length <= 3) { - let hasNonTextChild = false; - for (let child of children) { - if (child != null && typeof child === 'object') { - hasNonTextChild = true; - break; - } + return ; + } + + let nativeText = null; + + processedProps.accessible = _accessible; + processedProps.allowFontScaling = allowFontScaling !== false; + processedProps.disabled = _disabled; + processedProps.ellipsizeMode = ellipsizeMode ?? 'tail'; + processedProps.children = children; + + if (isPressable) { + nativeText = ( + + ); + } else { + nativeText = ; + } + + if (children == null) { + return nativeText; + } + + // If the children do not contain a JSX element it would not be possible to have a + // nested `Text` component so we can skip adding the `TextAncestorContext` context wrapper + // which has a performance overhead. Since we do this for performance reasons we need + // to keep the check simple to avoid regressing overall perf. For this reason the + // `children.length` constant is set to `3`, this should be a reasonable tradeoff + // to capture the majority of `Text` uses but also not make this check too expensive. + if (Array.isArray(children) && children.length <= 3) { + let hasNonTextChild = false; + for (let child of children) { + if (child != null && typeof child === 'object') { + hasNonTextChild = true; + break; } - if (!hasNonTextChild) { - return nativeText; - } - } else if (typeof children !== 'object') { + } + if (!hasNonTextChild) { return nativeText; } + } else if (typeof children !== 'object') { + return nativeText; + } - return {nativeText}; - }; - _TextImpl = TextImplLegacy; -} - -const TextImpl: component( - ref?: React.RefSetter, - ...props: TextProps -) = _TextImpl; + return {nativeText}; +}; TextImpl.displayName = 'Text'; diff --git a/vnext/src-win/Libraries/Types/CoreEventTypes.windows.js b/vnext/src-win/Libraries/Types/CoreEventTypes.windows.js index 5482f35e9d3..cab86771af9 100644 --- a/vnext/src-win/Libraries/Types/CoreEventTypes.windows.js +++ b/vnext/src-win/Libraries/Types/CoreEventTypes.windows.js @@ -37,7 +37,7 @@ export type ResponderSyntheticEvent = Readonly<{ indexOfSingleActiveTouch: number, mostRecentTimeStamp: number, numberActiveTouches: number, - touchBank: $ReadOnlyArray< + touchBank: ReadonlyArray< Readonly<{ touchActive: boolean, startPageX: number, @@ -236,7 +236,7 @@ export type NativeTouchEvent = Readonly<{ /** * Array of all touch events that have changed since the last event */ - changedTouches: $ReadOnlyArray, + changedTouches: ReadonlyArray, /** * 3D Touch reported force * @platform ios @@ -276,7 +276,7 @@ export type NativeTouchEvent = Readonly<{ /** * Array of all current touches on the screen */ - touches: $ReadOnlyArray, + touches: ReadonlyArray, }>; export type GestureResponderEvent = ResponderSyntheticEvent; diff --git a/vnext/src-win/index.windows.js b/vnext/src-win/index.windows.js index 7c036a82925..575beee4983 100644 --- a/vnext/src-win/index.windows.js +++ b/vnext/src-win/index.windows.js @@ -42,6 +42,9 @@ module.exports = { return require('./Libraries/Components/DrawerAndroid/DrawerLayoutAndroid') .default; }, + get EventEmitter() { + return require('./Libraries/vendor/emitter/EventEmitter').default; + }, get FlatList() { return require('./Libraries/Lists/FlatList').default; }, diff --git a/vnext/src-win/index.windows.js.flow b/vnext/src-win/index.windows.js.flow index 1e439e0be24..5504f879c58 100644 --- a/vnext/src-win/index.windows.js.flow +++ b/vnext/src-win/index.windows.js.flow @@ -320,7 +320,6 @@ export * as NativeComponentRegistry from './Libraries/NativeComponent/NativeComp export {default as NativeDialogManagerAndroid} from './Libraries/NativeModules/specs/NativeDialogManagerAndroid'; export type { - EventSubscription, EmitterSubscription, NativeEventSubscription, } from './Libraries/EventEmitter/NativeEventEmitter'; @@ -463,6 +462,12 @@ export type { PublicTextInstance, } from './Libraries/ReactPrivate/ReactNativePrivateInterface'; +export type { + EventSubscription, + IEventEmitter, +} from './Libraries/vendor/emitter/EventEmitter'; +export {default as EventEmitter} from './Libraries/vendor/emitter/EventEmitter'; + export { default as unstable_VirtualView, VirtualViewMode, diff --git a/vnext/src-win/jest/setup.js b/vnext/src-win/jest/setup.js index e22fe06d5c7..988b156af35 100644 --- a/vnext/src-win/jest/setup.js +++ b/vnext/src-win/jest/setup.js @@ -135,6 +135,7 @@ mock( // $FlowFixMe[incompatible-type] - `./mocks/UIManager` is incomplete. mock('m#../Libraries/ReactNative/UIManager', 'm#./mocks/UIManager'); mock('m#../Libraries/Text/Text', 'm#./mocks/Text'); +// $FlowFixMe[react-rule-hook-incompatible] mock('m#../Libraries/Utilities/useColorScheme', 'm#./mocks/useColorScheme'); // $FlowFixMe[incompatible-type] mock('m#../Libraries/Vibration/Vibration', 'm#./mocks/Vibration'); diff --git a/vnext/src-win/src/private/featureflags/ReactNativeFeatureFlagsBase.js b/vnext/src-win/src/private/featureflags/ReactNativeFeatureFlagsBase.js index 68443c4ad2f..d9bd49bb742 100644 --- a/vnext/src-win/src/private/featureflags/ReactNativeFeatureFlagsBase.js +++ b/vnext/src-win/src/private/featureflags/ReactNativeFeatureFlagsBase.js @@ -52,7 +52,7 @@ function createGetter( } export function createJavaScriptFlagGetter< - K: $Keys, + K: keyof ReactNativeFeatureFlagsJsOnly, >( configName: K, defaultValue: ReturnType, @@ -69,7 +69,7 @@ export function createJavaScriptFlagGetter< type NativeFeatureFlags = NonNullable; -export function createNativeFlagGetter>( +export function createNativeFlagGetter( configName: K, defaultValue: ReturnType>, skipUnavailableNativeModuleError: boolean = false, diff --git a/vnext/src-win/src/private/specs_DEPRECATED/components/RCTModalHostViewNativeComponent.js b/vnext/src-win/src/private/specs_DEPRECATED/components/RCTModalHostViewNativeComponent.js index b8fb6976a77..1c3a270e817 100644 --- a/vnext/src-win/src/private/specs_DEPRECATED/components/RCTModalHostViewNativeComponent.js +++ b/vnext/src-win/src/private/specs_DEPRECATED/components/RCTModalHostViewNativeComponent.js @@ -124,7 +124,7 @@ type RCTModalHostViewNativeProps = Readonly<{| * See https://reactnative.dev/docs/modal#supportedorientations */ supportedOrientations?: WithDefault< - $ReadOnlyArray< + ReadonlyArray< | 'portrait' | 'portrait-upside-down' | 'landscape' diff --git a/yarn.lock b/yarn.lock index 50f41d87627..45f3c614e80 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3533,7 +3533,7 @@ __metadata: resolution: "@office-iss/react-native-win32-tester@workspace:packages/@office-iss/react-native-win32-tester" dependencies: "@office-iss/react-native-win32": "npm:^0.0.0-canary.311" - "@react-native/tester": "npm:0.85.0-nightly-20260114-f15985f4f" + "@react-native/tester": "npm:0.85.0-nightly-20260128-36f07a1b2" "@rnw-scripts/babel-react-native-config": "npm:0.0.0" "@rnw-scripts/eslint-config": "npm:1.2.38" "@rnw-scripts/just-task": "npm:2.3.58" @@ -3546,13 +3546,13 @@ __metadata: just-scripts: "npm:^1.3.3" prettier: "npm:^3.6.2" react: "npm:19.2.3" - react-native: "npm:0.85.0-nightly-20260114-f15985f4f" + react-native: "npm:0.85.0-nightly-20260128-36f07a1b2" react-native-platform-override: "npm:0.0.0-canary.1022" typescript: "npm:5.0.4" peerDependencies: "@office-iss/react-native-win32": ^0.0.0-canary.311 react: 19.2.3 - react-native: 0.85.0-nightly-20260114-f15985f4f + react-native: 0.85.0-nightly-20260128-36f07a1b2 languageName: unknown linkType: soft @@ -3569,14 +3569,14 @@ __metadata: "@react-native-community/cli-platform-android": "npm:20.0.0" "@react-native-community/cli-platform-ios": "npm:20.0.0" "@react-native/assets": "npm:1.0.0" - "@react-native/assets-registry": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/codegen": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/community-cli-plugin": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/gradle-plugin": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/js-polyfills": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/metro-config": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/normalize-colors": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/virtualized-lists": "npm:0.85.0-nightly-20260114-f15985f4f" + "@react-native/assets-registry": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/codegen": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/community-cli-plugin": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/gradle-plugin": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/js-polyfills": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/metro-config": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/normalize-colors": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/virtualized-lists": "npm:0.85.0-nightly-20260128-36f07a1b2" "@rnw-scripts/babel-react-native-config": "npm:0.0.0" "@rnw-scripts/eslint-config": "npm:1.2.38" "@rnw-scripts/jest-out-of-tree-snapshot-resolver": "npm:^1.1.42" @@ -3617,7 +3617,7 @@ __metadata: react: "npm:19.2.3" react-clone-referenced-element: "npm:^1.0.1" react-devtools-core: "npm:^6.1.5" - react-native: "npm:0.85.0-nightly-20260114-f15985f4f" + react-native: "npm:0.85.0-nightly-20260128-36f07a1b2" react-native-platform-override: "npm:0.0.0-canary.1022" react-refresh: "npm:^0.14.0" regenerator-runtime: "npm:^0.13.2" @@ -3632,7 +3632,7 @@ __metadata: peerDependencies: "@types/react": ^19.2.3 react: ^19.2.3 - react-native: 0.85.0-nightly-20260114-f15985f4f + react-native: 0.85.0-nightly-20260128-36f07a1b2 languageName: unknown linkType: soft @@ -3991,7 +3991,7 @@ __metadata: minimatch: "npm:^10.0.3" prettier: "npm:^3.6.2" react: "npm:19.2.3" - react-native: "npm:0.85.0-nightly-20260114-f15985f4f" + react-native: "npm:0.85.0-nightly-20260128-36f07a1b2" react-native-windows: "npm:^0.0.0-canary.1056" typescript: "npm:5.0.4" languageName: unknown @@ -4091,7 +4091,7 @@ __metadata: prettier: "npm:^3.6.2" prompts: "npm:^2.4.1" react: "npm:19.2.3" - react-native: "npm:0.85.0-nightly-20260114-f15985f4f" + react-native: "npm:0.85.0-nightly-20260128-36f07a1b2" semver: "npm:^7.3.2" shelljs: "npm:^0.8.4" typescript: "npm:5.0.4" @@ -4235,7 +4235,7 @@ __metadata: peerDependencies: jest: ">=29.0.3" react: ">=18.0.0" - react-native: 0.85.0-nightly-20260114-f15985f4f + react-native: 0.85.0-nightly-20260128-36f07a1b2 react-test-renderer: ">=18.0.0" peerDependenciesMeta: react-test-renderer: @@ -4282,8 +4282,8 @@ __metadata: version: 0.0.0-use.local resolution: "@react-native-windows/tester@workspace:packages/@react-native-windows/tester" dependencies: - "@react-native/new-app-screen": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/tester": "npm:0.85.0-nightly-20260114-f15985f4f" + "@react-native/new-app-screen": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/tester": "npm:0.85.0-nightly-20260128-36f07a1b2" "@rnw-scripts/babel-react-native-config": "npm:0.0.0" "@rnw-scripts/eslint-config": "npm:1.2.38" "@rnw-scripts/just-task": "npm:2.3.58" @@ -4297,14 +4297,14 @@ __metadata: just-scripts: "npm:^1.3.3" prettier: "npm:^3.6.2" react: "npm:19.2.3" - react-native: "npm:0.85.0-nightly-20260114-f15985f4f" + react-native: "npm:0.85.0-nightly-20260128-36f07a1b2" react-native-platform-override: "npm:0.0.0-canary.1022" react-native-windows: "npm:^0.0.0-canary.1056" typescript: "npm:5.0.4" peerDependencies: "@react-native-picker/picker": 2.11.0 react: 19.2.3 - react-native: 0.85.0-nightly-20260114-f15985f4f + react-native: 0.85.0-nightly-20260128-36f07a1b2 react-native-windows: ^0.0.0-canary.1056 react-native-xaml: ^0.0.80 peerDependenciesMeta: @@ -4315,10 +4315,10 @@ __metadata: languageName: unknown linkType: soft -"@react-native/assets-registry@npm:0.85.0-nightly-20260114-f15985f4f": - version: 0.85.0-nightly-20260114-f15985f4f - resolution: "@react-native/assets-registry@npm:0.85.0-nightly-20260114-f15985f4f" - checksum: 10c0/46e66c648290a6da93884cfb96541e977a47ae3a587d948a275b8f17f345eb4fca136c5c975884d2b67582fc5a8faf4d14592aa9471f91f22d4c4eae2bf630d3 +"@react-native/assets-registry@npm:0.85.0-nightly-20260128-36f07a1b2": + version: 0.85.0-nightly-20260128-36f07a1b2 + resolution: "@react-native/assets-registry@npm:0.85.0-nightly-20260128-36f07a1b2" + checksum: 10c0/068496511887cc888796b476f7517acab867b278ee0def3715f07e26254b5af2f7d0b64e722844c9230c712905778938c068aa508c9593d60f8d6bfb210be26f languageName: node linkType: hard @@ -4329,19 +4329,19 @@ __metadata: languageName: node linkType: hard -"@react-native/babel-plugin-codegen@npm:0.85.0-nightly-20260114-f15985f4f": - version: 0.85.0-nightly-20260114-f15985f4f - resolution: "@react-native/babel-plugin-codegen@npm:0.85.0-nightly-20260114-f15985f4f" +"@react-native/babel-plugin-codegen@npm:0.85.0-nightly-20260128-36f07a1b2": + version: 0.85.0-nightly-20260128-36f07a1b2 + resolution: "@react-native/babel-plugin-codegen@npm:0.85.0-nightly-20260128-36f07a1b2" dependencies: "@babel/traverse": "npm:^7.25.3" - "@react-native/codegen": "npm:0.85.0-nightly-20260114-f15985f4f" - checksum: 10c0/2825863f1da51a0d33f3d6a766217ad73c5a07227ace37d6cfb863313e85d14c081e77ab866c7b32daa8ef5c7e21c3f08c0e23e223ca60000b666f28b963c291 + "@react-native/codegen": "npm:0.85.0-nightly-20260128-36f07a1b2" + checksum: 10c0/7029d4c3a0959a14af15d513b920604260bb8c73b09325526958e7768e5770214f1aaf527db78267fee9978e1bddb80f614d5e8e6159c30df885f56df4421285 languageName: node linkType: hard -"@react-native/babel-preset@npm:0.85.0-nightly-20260114-f15985f4f": - version: 0.85.0-nightly-20260114-f15985f4f - resolution: "@react-native/babel-preset@npm:0.85.0-nightly-20260114-f15985f4f" +"@react-native/babel-preset@npm:0.85.0-nightly-20260128-36f07a1b2": + version: 0.85.0-nightly-20260128-36f07a1b2 + resolution: "@react-native/babel-preset@npm:0.85.0-nightly-20260128-36f07a1b2" dependencies: "@babel/core": "npm:^7.25.2" "@babel/plugin-proposal-export-default-from": "npm:^7.24.7" @@ -4372,19 +4372,19 @@ __metadata: "@babel/plugin-transform-runtime": "npm:^7.24.7" "@babel/plugin-transform-typescript": "npm:^7.25.2" "@babel/plugin-transform-unicode-regex": "npm:^7.24.7" - "@react-native/babel-plugin-codegen": "npm:0.85.0-nightly-20260114-f15985f4f" + "@react-native/babel-plugin-codegen": "npm:0.85.0-nightly-20260128-36f07a1b2" babel-plugin-syntax-hermes-parser: "npm:0.33.3" babel-plugin-transform-flow-enums: "npm:^0.0.2" react-refresh: "npm:^0.14.0" peerDependencies: "@babel/core": "*" - checksum: 10c0/aab4c4d91ac2b955f755a2ec00e301f0b2341103ccba28c80fd1e90663ad2240eb084a85f1faf3116df2b0307ef454cc0c4fd1c68215bfce0391588b118bb67a + checksum: 10c0/0fa8738c4ec3fe0a42aec0935aec2912c808ea350a07a90297bb9b9b4f4cec8ee15ab4e465d86501c51986ed6b45657355d259b5dd43a4c2ad18b378320a49fc languageName: node linkType: hard -"@react-native/codegen@npm:0.85.0-nightly-20260114-f15985f4f": - version: 0.85.0-nightly-20260114-f15985f4f - resolution: "@react-native/codegen@npm:0.85.0-nightly-20260114-f15985f4f" +"@react-native/codegen@npm:0.85.0-nightly-20260128-36f07a1b2": + version: 0.85.0-nightly-20260128-36f07a1b2 + resolution: "@react-native/codegen@npm:0.85.0-nightly-20260128-36f07a1b2" dependencies: "@babel/core": "npm:^7.25.2" "@babel/parser": "npm:^7.25.3" @@ -4395,15 +4395,15 @@ __metadata: yargs: "npm:^17.6.2" peerDependencies: "@babel/core": "*" - checksum: 10c0/277d2e8742f5ebe23582a6d116456f99927b670b2fde6b9519c172deec7cadd5ed91b6e361b1472c4525725c6ff8b045454f83d0c6b0081852b9eabfbef7a4c3 + checksum: 10c0/2c4710eb698a6cc756d552b285e30e4cd2289a42dbe0675ed8454654b1820aae66077651db6728a37fda8d1e5e62d1951bd2cc4845dd248d78789e82bcabfb6e languageName: node linkType: hard -"@react-native/community-cli-plugin@npm:0.85.0-nightly-20260114-f15985f4f": - version: 0.85.0-nightly-20260114-f15985f4f - resolution: "@react-native/community-cli-plugin@npm:0.85.0-nightly-20260114-f15985f4f" +"@react-native/community-cli-plugin@npm:0.85.0-nightly-20260128-36f07a1b2": + version: 0.85.0-nightly-20260128-36f07a1b2 + resolution: "@react-native/community-cli-plugin@npm:0.85.0-nightly-20260128-36f07a1b2" dependencies: - "@react-native/dev-middleware": "npm:0.85.0-nightly-20260114-f15985f4f" + "@react-native/dev-middleware": "npm:0.85.0-nightly-20260128-36f07a1b2" debug: "npm:^4.4.0" invariant: "npm:^2.2.4" metro: "npm:^0.83.3" @@ -4418,35 +4418,35 @@ __metadata: optional: true "@react-native/metro-config": optional: true - checksum: 10c0/72b13999d9923bf8daae41350fbee77ced60e5cdcb75683ecf4589e32c075b15921639d9aed658ff396fea2a6b9217552dcc44aef7f726e5daf4d21c884e053a + checksum: 10c0/3820bf75a9970dc2ebfab6b5c6ac2cb506f7f40fe6a1ae5348504debfbb684c19b9af7d3b4add93a60fd8d696b6381b0c92d24d1b8db9cfef109e3e415b5722d languageName: node linkType: hard -"@react-native/debugger-frontend@npm:0.85.0-nightly-20260114-f15985f4f": - version: 0.85.0-nightly-20260114-f15985f4f - resolution: "@react-native/debugger-frontend@npm:0.85.0-nightly-20260114-f15985f4f" - checksum: 10c0/a19d91425638fc25f101cdcb63e2e6473f009bf02c87d838a147bd8bbdffcaea98e08265c295df878d420cda79446acd9939f9ef979399b110624bedb36d57ea +"@react-native/debugger-frontend@npm:0.85.0-nightly-20260128-36f07a1b2": + version: 0.85.0-nightly-20260128-36f07a1b2 + resolution: "@react-native/debugger-frontend@npm:0.85.0-nightly-20260128-36f07a1b2" + checksum: 10c0/6f4940450e9cb770a427673f2630379b35392299a53bf799c2c04981f4109fba5df3ffd1044611aa57e3b060bed7cb2df1e812de215a838ab591086cb6f597ff languageName: node linkType: hard -"@react-native/debugger-shell@npm:0.85.0-nightly-20260114-f15985f4f": - version: 0.85.0-nightly-20260114-f15985f4f - resolution: "@react-native/debugger-shell@npm:0.85.0-nightly-20260114-f15985f4f" +"@react-native/debugger-shell@npm:0.85.0-nightly-20260128-36f07a1b2": + version: 0.85.0-nightly-20260128-36f07a1b2 + resolution: "@react-native/debugger-shell@npm:0.85.0-nightly-20260128-36f07a1b2" dependencies: cross-spawn: "npm:^7.0.6" debug: "npm:^4.4.0" fb-dotslash: "npm:0.5.8" - checksum: 10c0/65d302ab51ef2056ecc248c8e37fe60a8d3b4862eb1fb42f5fbb450d040009a905a76a315df789fcbb2b79e03e034b097ab3edbdf2bf85664d69feda2924efdf + checksum: 10c0/e12a38617adee1f310e5f057aa8aedbfb447bc213ba40fcf0f73fd452103dd2233335b146a66c06ad0cac9f4672602cdae3fa7b269ad2911fdd20b414474f04e languageName: node linkType: hard -"@react-native/dev-middleware@npm:0.85.0-nightly-20260114-f15985f4f": - version: 0.85.0-nightly-20260114-f15985f4f - resolution: "@react-native/dev-middleware@npm:0.85.0-nightly-20260114-f15985f4f" +"@react-native/dev-middleware@npm:0.85.0-nightly-20260128-36f07a1b2": + version: 0.85.0-nightly-20260128-36f07a1b2 + resolution: "@react-native/dev-middleware@npm:0.85.0-nightly-20260128-36f07a1b2" dependencies: "@isaacs/ttlcache": "npm:^1.4.1" - "@react-native/debugger-frontend": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/debugger-shell": "npm:0.85.0-nightly-20260114-f15985f4f" + "@react-native/debugger-frontend": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/debugger-shell": "npm:0.85.0-nightly-20260128-36f07a1b2" chrome-launcher: "npm:^0.15.2" chromium-edge-launcher: "npm:^0.3.0" connect: "npm:^3.6.5" @@ -4456,77 +4456,77 @@ __metadata: open: "npm:^7.0.3" serve-static: "npm:^1.16.2" ws: "npm:^7.5.10" - checksum: 10c0/d2c243776c999c03066c5542d28dab7957d12a91471cdb5d84f5168a6edcbe8989a89c17e0ff7eeddc23b961500329235b3a27df247bdb789e7bff954250885b + checksum: 10c0/bfb123bb898950972838d606870923eb0b581c156c66d1609ae2d9ea7677d1b2b67530a053f847e0d23ca76eb5952d2f9f22b9fbc42a3b70c4172f0d410334ee languageName: node linkType: hard -"@react-native/eslint-config@npm:0.85.0-nightly-20260114-f15985f4f": - version: 0.85.0-nightly-20260114-f15985f4f - resolution: "@react-native/eslint-config@npm:0.85.0-nightly-20260114-f15985f4f" +"@react-native/eslint-config@npm:0.85.0-nightly-20260128-36f07a1b2": + version: 0.85.0-nightly-20260128-36f07a1b2 + resolution: "@react-native/eslint-config@npm:0.85.0-nightly-20260128-36f07a1b2" dependencies: "@babel/core": "npm:^7.25.2" "@babel/eslint-parser": "npm:^7.25.1" - "@react-native/eslint-plugin": "npm:0.85.0-nightly-20260114-f15985f4f" + "@react-native/eslint-plugin": "npm:0.85.0-nightly-20260128-36f07a1b2" "@typescript-eslint/eslint-plugin": "npm:^8.36.0" "@typescript-eslint/parser": "npm:^8.36.0" eslint-config-prettier: "npm:^8.5.0" eslint-plugin-eslint-comments: "npm:^3.2.0" eslint-plugin-ft-flow: "npm:^2.0.1" eslint-plugin-jest: "npm:^29.0.1" - eslint-plugin-react: "npm:^7.30.1" + eslint-plugin-react: "npm:^7.37.5" eslint-plugin-react-hooks: "npm:^7.0.1" eslint-plugin-react-native: "npm:^5.0.0" peerDependencies: eslint: ^8.0.0 || ^9.0.0 prettier: ">=2" - checksum: 10c0/fd54903811a973bd49065949285f2467dff4f3a6dff7f9c131c0df00ff2a7abb6e67722ba1cd46689b1db9fe5acc13b2b6e2bd1e26ad030f476d652549968488 + checksum: 10c0/0977a841e2b7429453a3806917166e37d6cae8fc4bc69e041816255c21ea66b89cc3e3ec0c7e3a33c16ffd6ec4c76440de7b3fc89ea96e6cbf64b2c9b426448c languageName: node linkType: hard -"@react-native/eslint-plugin@npm:0.85.0-nightly-20260114-f15985f4f": - version: 0.85.0-nightly-20260114-f15985f4f - resolution: "@react-native/eslint-plugin@npm:0.85.0-nightly-20260114-f15985f4f" - checksum: 10c0/1e1c4ffe1adcf81e623d1d073d793a3334cd3a67bf13059d15446e1970b7cb21f592cebb7f21432b3e4755ce5cfaa582ef14b75d0e98082cfb41deb8da93e856 +"@react-native/eslint-plugin@npm:0.85.0-nightly-20260128-36f07a1b2": + version: 0.85.0-nightly-20260128-36f07a1b2 + resolution: "@react-native/eslint-plugin@npm:0.85.0-nightly-20260128-36f07a1b2" + checksum: 10c0/cf1a2bad87bf04c3d60170e2e49d22afb6eb9b6abb24b6289b871780a8b2b3848a9d5243d065270c4ad73103d8a84d5729d0c38477c6233b2179799c834dc13b languageName: node linkType: hard -"@react-native/gradle-plugin@npm:0.85.0-nightly-20260114-f15985f4f": - version: 0.85.0-nightly-20260114-f15985f4f - resolution: "@react-native/gradle-plugin@npm:0.85.0-nightly-20260114-f15985f4f" - checksum: 10c0/f7701ecad9d1bc87e2a83555e7bed9a3201f066fef4a4aa5e3ece9895ac3c51a2a62bb28ff75999b6c502a960fb626090015a44305f0d45e314547bfec6bfdc8 +"@react-native/gradle-plugin@npm:0.85.0-nightly-20260128-36f07a1b2": + version: 0.85.0-nightly-20260128-36f07a1b2 + resolution: "@react-native/gradle-plugin@npm:0.85.0-nightly-20260128-36f07a1b2" + checksum: 10c0/e3acf257f41573e73b8945f11c470130c264cd998dc1bad26d22aae5577bbd7bdb954352a9edf90ec07616d8d8d4d5450d711fcf69a4d51896b5fb503aa4c776 languageName: node linkType: hard -"@react-native/js-polyfills@npm:0.85.0-nightly-20260114-f15985f4f": - version: 0.85.0-nightly-20260114-f15985f4f - resolution: "@react-native/js-polyfills@npm:0.85.0-nightly-20260114-f15985f4f" - checksum: 10c0/cdfd03b357113caf1aca5fc12a3514854a8c0427a22a2354119050f018d08851ae6c5dbb91535073c1f7d3a2da1c31d0b3016d0f29b0ffc9c3f04489bd2b1d1b +"@react-native/js-polyfills@npm:0.85.0-nightly-20260128-36f07a1b2": + version: 0.85.0-nightly-20260128-36f07a1b2 + resolution: "@react-native/js-polyfills@npm:0.85.0-nightly-20260128-36f07a1b2" + checksum: 10c0/31b37e7bf676dcf8ad59882795ec5b1c2830c41ca1e89b0e67588b68bf2c6138a1f7f9a8844339bcc4611ed2b6ae5a94a60d84a36e3029ae813676a41ef5f73c languageName: node linkType: hard -"@react-native/metro-babel-transformer@npm:0.85.0-nightly-20260114-f15985f4f": - version: 0.85.0-nightly-20260114-f15985f4f - resolution: "@react-native/metro-babel-transformer@npm:0.85.0-nightly-20260114-f15985f4f" +"@react-native/metro-babel-transformer@npm:0.85.0-nightly-20260128-36f07a1b2": + version: 0.85.0-nightly-20260128-36f07a1b2 + resolution: "@react-native/metro-babel-transformer@npm:0.85.0-nightly-20260128-36f07a1b2" dependencies: "@babel/core": "npm:^7.25.2" - "@react-native/babel-preset": "npm:0.85.0-nightly-20260114-f15985f4f" + "@react-native/babel-preset": "npm:0.85.0-nightly-20260128-36f07a1b2" hermes-parser: "npm:0.33.3" nullthrows: "npm:^1.1.1" peerDependencies: "@babel/core": "*" - checksum: 10c0/247b28c706085ee114e414fef895a4afc7a16c4a217e45deb12509e9586447d3b8daad026dd3a4bcee8276e4e6e3d4d4fe19dd76f0501d4ff4e59a2bb414ba9e + checksum: 10c0/598f74d4cbd34149841f88b4a196f33f07df56d3a8ca7c82ed842178f57130ae1dbd1e484773f9e2158679d42fe252f2a3991f70640c344dbaecb6136a1da77e languageName: node linkType: hard -"@react-native/metro-config@npm:0.85.0-nightly-20260114-f15985f4f": - version: 0.85.0-nightly-20260114-f15985f4f - resolution: "@react-native/metro-config@npm:0.85.0-nightly-20260114-f15985f4f" +"@react-native/metro-config@npm:0.85.0-nightly-20260128-36f07a1b2": + version: 0.85.0-nightly-20260128-36f07a1b2 + resolution: "@react-native/metro-config@npm:0.85.0-nightly-20260128-36f07a1b2" dependencies: - "@react-native/js-polyfills": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/metro-babel-transformer": "npm:0.85.0-nightly-20260114-f15985f4f" + "@react-native/js-polyfills": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/metro-babel-transformer": "npm:0.85.0-nightly-20260128-36f07a1b2" metro-config: "npm:^0.83.3" metro-runtime: "npm:^0.83.3" - checksum: 10c0/8ac802f7bb9d566979c7e5e4dad783d3b8caf60a87fc9619bd786bbe733e3306cfcf5e22839d8a9057fd2a3ad9abd7eec39746eb526b2b7d4042b182934450a1 + checksum: 10c0/ba4e5d230055973ae0c4adbec57f43fdb3128043f0b9c77964a142b17fad2b681fadf9c960d9f5227dbf7535b8d23426ad244df0119600a2e63ad7c7584902b9 languageName: node linkType: hard @@ -4546,8 +4546,8 @@ __metadata: "@jest/create-cache-key-function": "npm:^29.7.0" "@microsoft/api-extractor": "npm:^7.52.2" "@octokit/rest": "npm:^22.0.0" - "@react-native/metro-babel-transformer": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/metro-config": "npm:0.85.0-nightly-20260114-f15985f4f" + "@react-native/metro-babel-transformer": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/metro-config": "npm:0.85.0-nightly-20260128-36f07a1b2" "@tsconfig/node22": "npm:22.0.2" "@types/react": "npm:^19.2.3" "@typescript-eslint/parser": "npm:^8.36.0" @@ -4624,9 +4624,9 @@ __metadata: languageName: node linkType: hard -"@react-native/new-app-screen@npm:0.85.0-nightly-20260114-f15985f4f": - version: 0.85.0-nightly-20260114-f15985f4f - resolution: "@react-native/new-app-screen@npm:0.85.0-nightly-20260114-f15985f4f" +"@react-native/new-app-screen@npm:0.85.0-nightly-20260128-36f07a1b2": + version: 0.85.0-nightly-20260128-36f07a1b2 + resolution: "@react-native/new-app-screen@npm:0.85.0-nightly-20260128-36f07a1b2" peerDependencies: "@types/react": ^19.1.0 react: "*" @@ -4634,20 +4634,20 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/31c40d23b9c2fd158a894c87f3636f8da6976a6782613a0cbd49556f4e6a4630707ca3136b963550edb4875b6f7f9dd5cd702d3bdd9cca57e1abea855fa6aa41 + checksum: 10c0/7bf976028df8053ae201e9c2d5b868b41fed686710da311e09d142053770af96b2e2274bab07f37f2768877d13b01a72e11b48fe685fba8c7bccf07d827e3e70 languageName: node linkType: hard -"@react-native/normalize-colors@npm:0.85.0-nightly-20260114-f15985f4f": - version: 0.85.0-nightly-20260114-f15985f4f - resolution: "@react-native/normalize-colors@npm:0.85.0-nightly-20260114-f15985f4f" - checksum: 10c0/ac63c26da1f5a496c71c9b2477ee6e6a0f059331205c095816cf88f6d932ccb4124c98fcf20003f5da7b1fe143ab6db54b2c3bf16ccd16be1ed506cac36e5284 +"@react-native/normalize-colors@npm:0.85.0-nightly-20260128-36f07a1b2": + version: 0.85.0-nightly-20260128-36f07a1b2 + resolution: "@react-native/normalize-colors@npm:0.85.0-nightly-20260128-36f07a1b2" + checksum: 10c0/c9ff3a176242622ca055b74a2a131f94e6a7842f4a14d787394aa73f30afaf584177f48d66288c766d7028b71ebfdb9a8508864aef0337e227a3a8ff39e6a690 languageName: node linkType: hard -"@react-native/popup-menu-android@npm:0.85.0-nightly-20260114-f15985f4f": - version: 0.85.0-nightly-20260114-f15985f4f - resolution: "@react-native/popup-menu-android@npm:0.85.0-nightly-20260114-f15985f4f" +"@react-native/popup-menu-android@npm:0.85.0-nightly-20260128-36f07a1b2": + version: 0.85.0-nightly-20260128-36f07a1b2 + resolution: "@react-native/popup-menu-android@npm:0.85.0-nightly-20260128-36f07a1b2" dependencies: nullthrows: "npm:^1.1.1" peerDependencies: @@ -4657,26 +4657,26 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/35c3d3463f13352ef561335c3b158039ca82117b6b20d43865d8e93cc86011ff3ab0a2f7c3de5fb2112449965329329037c1ca2296e5d1bab10604d3533aafc5 + checksum: 10c0/9fa16e7f7fdaba289b0a7d67a0330d15590c9084b49188998951faec995222518b35ada67a14184d652bcf84b9feda77accbdba61d19ca256dc0ef00bc685484 languageName: node linkType: hard -"@react-native/tester@npm:0.85.0-nightly-20260114-f15985f4f, @react-native/tester@workspace:packages/@react-native/tester": +"@react-native/tester@npm:0.85.0-nightly-20260128-36f07a1b2, @react-native/tester@workspace:packages/@react-native/tester": version: 0.0.0-use.local resolution: "@react-native/tester@workspace:packages/@react-native/tester" dependencies: "@react-native-community/cli": "npm:20.0.0" "@react-native-community/cli-platform-android": "npm:20.0.0" "@react-native-community/cli-platform-ios": "npm:20.0.0" - "@react-native/new-app-screen": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/popup-menu-android": "npm:0.85.0-nightly-20260114-f15985f4f" + "@react-native/new-app-screen": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/popup-menu-android": "npm:0.85.0-nightly-20260128-36f07a1b2" commander: "npm:^12.0.0" flow-enums-runtime: "npm:^0.0.6" invariant: "npm:^2.2.4" listr2: "npm:^6.4.1" nullthrows: "npm:^1.1.1" react: "npm:19.2.3" - react-native: "npm:0.85.0-nightly-20260114-f15985f4f" + react-native: "npm:0.85.0-nightly-20260128-36f07a1b2" rxjs: "npm:@react-native-community/rxjs@6.5.4-custom" peerDependencies: react: 19.2.3 @@ -4684,9 +4684,9 @@ __metadata: languageName: unknown linkType: soft -"@react-native/virtualized-lists@npm:0.85.0-nightly-20260114-f15985f4f": - version: 0.85.0-nightly-20260114-f15985f4f - resolution: "@react-native/virtualized-lists@npm:0.85.0-nightly-20260114-f15985f4f" +"@react-native/virtualized-lists@npm:0.85.0-nightly-20260128-36f07a1b2": + version: 0.85.0-nightly-20260128-36f07a1b2 + resolution: "@react-native/virtualized-lists@npm:0.85.0-nightly-20260128-36f07a1b2" dependencies: invariant: "npm:^2.2.4" nullthrows: "npm:^1.1.1" @@ -4697,7 +4697,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/a88ae93e708f972c013cb22a41c4c074e933f22c7168d50a64b9ec217e146fba7888ccfb90c218b7f04d152ebd7cadbffbfef0e5c03b9ac2eee8e5802ce4f56f + checksum: 10c0/6055178970cc506d155906fd45ee1f7c86e1dc23ad7b804790ef5af35603234c1c789e54c7dacbd54177aadea6b3c19aa9dbc8110e276f12e9b31215eeae93e6 languageName: node linkType: hard @@ -4727,7 +4727,7 @@ __metadata: resolution: "@rnw-scripts/babel-react-native-config@workspace:packages/@rnw-scripts/babel-react-native-config" dependencies: "@babel/core": "npm:^7.25.2" - "@react-native/babel-preset": "npm:0.85.0-nightly-20260114-f15985f4f" + "@react-native/babel-preset": "npm:0.85.0-nightly-20260128-36f07a1b2" babel-plugin-transform-flow-enums: "npm:^0.0.2" eslint: "npm:^8.19.0" prettier: "npm:^3.6.2" @@ -4865,7 +4865,7 @@ __metadata: "@react-native-windows/fs": "npm:^0.0.0-canary.72" "@react-native-windows/perf-testing": "npm:0.0.0-canary.1038" "@react-native-windows/tester": "npm:0.0.1" - "@react-native/metro-config": "npm:0.85.0-nightly-20260114-f15985f4f" + "@react-native/metro-config": "npm:0.85.0-nightly-20260128-36f07a1b2" "@rnw-scripts/babel-node-config": "npm:2.3.3" "@rnw-scripts/babel-react-native-config": "npm:0.0.0" "@rnw-scripts/eslint-config": "npm:1.2.38" @@ -4886,7 +4886,7 @@ __metadata: jest-image-snapshot: "npm:^6.5.2" prettier: "npm:^3.6.2" react: "npm:^19.2.3" - react-native: "npm:0.85.0-nightly-20260114-f15985f4f" + react-native: "npm:0.85.0-nightly-20260128-36f07a1b2" react-native-windows: "npm:^0.0.0-canary.1056" react-test-renderer: "npm:19.1.0" sanitize-filename: "npm:^1.6.3" @@ -4902,7 +4902,7 @@ __metadata: "@babel/eslint-parser": "npm:^7.25.1" "@jest/globals": "npm:^29.7.0" "@microsoft/eslint-plugin-sdl": "npm:^0.2.0" - "@react-native/eslint-config": "npm:0.85.0-nightly-20260114-f15985f4f" + "@react-native/eslint-config": "npm:0.85.0-nightly-20260128-36f07a1b2" eslint: "npm:^8.19.0" eslint-config-prettier: "npm:^8.5.0" eslint-plugin-ft-flow: "npm:^2.0.1" @@ -5005,7 +5005,7 @@ __metadata: ora: "npm:^3.4.0" prettier: "npm:^3.6.2" react: "npm:19.2.3" - react-native: "npm:0.85.0-nightly-20260114-f15985f4f" + react-native: "npm:0.85.0-nightly-20260128-36f07a1b2" react-native-platform-override: "npm:0.0.0-canary.1022" semver: "npm:^7.6.3" source-map-support: "npm:^0.5.19" @@ -5126,7 +5126,7 @@ __metadata: version: 0.0.0-use.local resolution: "@rnw-scripts/metro-dev-config@workspace:packages/@rnw-scripts/metro-dev-config" dependencies: - "@react-native/metro-config": "npm:0.85.0-nightly-20260114-f15985f4f" + "@react-native/metro-config": "npm:0.85.0-nightly-20260128-36f07a1b2" "@rnw-scripts/eslint-config": "npm:1.2.38" "@rnw-scripts/just-task": "npm:2.3.58" "@rnx-kit/metro-config": "npm:^2.2.3" @@ -5137,7 +5137,7 @@ __metadata: eslint: "npm:^8.19.0" prettier: "npm:^3.6.2" react: "npm:19.2.3" - react-native: "npm:0.85.0-nightly-20260114-f15985f4f" + react-native: "npm:0.85.0-nightly-20260128-36f07a1b2" typescript: "npm:5.0.4" peerDependencies: react: 19.2.3 @@ -5154,7 +5154,7 @@ __metadata: "@react-native-community/cli": "npm:20.0.0" "@react-native-picker/picker": "npm:2.11.0" "@react-native-windows/tester": "npm:0.0.1" - "@react-native/metro-config": "npm:0.85.0-nightly-20260114-f15985f4f" + "@react-native/metro-config": "npm:0.85.0-nightly-20260128-36f07a1b2" "@rnw-scripts/babel-react-native-config": "npm:0.0.0" "@rnw-scripts/eslint-config": "npm:1.2.38" "@rnw-scripts/just-task": "npm:2.3.58" @@ -5170,7 +5170,7 @@ __metadata: just-scripts: "npm:^1.3.3" prettier: "npm:^3.6.2" react: "npm:^19.2.3" - react-native: "npm:0.85.0-nightly-20260114-f15985f4f" + react-native: "npm:0.85.0-nightly-20260128-36f07a1b2" react-native-windows: "npm:^0.0.0-canary.1056" react-test-renderer: "npm:19.1.0" typescript: "npm:5.0.4" @@ -5238,7 +5238,7 @@ __metadata: "@babel/runtime": "npm:^7.20.0" "@jest/globals": "npm:^29.7.0" "@react-native-community/cli": "npm:20.0.0" - "@react-native/metro-config": "npm:0.85.0-nightly-20260114-f15985f4f" + "@react-native/metro-config": "npm:0.85.0-nightly-20260128-36f07a1b2" "@react-native/new-app-screen": "npm:0.82.0-nightly-20250821-0ef21bf8a" "@rnw-scripts/babel-node-config": "npm:2.3.3" "@rnw-scripts/babel-react-native-config": "npm:0.0.0" @@ -5257,7 +5257,7 @@ __metadata: just-scripts: "npm:^1.3.3" prettier: "npm:^3.6.2" react: "npm:^19.2.3" - react-native: "npm:0.85.0-nightly-20260114-f15985f4f" + react-native: "npm:0.85.0-nightly-20260128-36f07a1b2" react-native-windows: "npm:^0.0.0-canary.1056" react-test-renderer: "npm:19.1.0" typescript: "npm:5.0.4" @@ -5274,7 +5274,7 @@ __metadata: "@babel/preset-typescript": "npm:^7.8.3" "@babel/runtime": "npm:^7.20.0" "@react-native-community/cli": "npm:20.0.0" - "@react-native/metro-config": "npm:0.85.0-nightly-20260114-f15985f4f" + "@react-native/metro-config": "npm:0.85.0-nightly-20260128-36f07a1b2" "@rnw-scripts/babel-node-config": "npm:2.3.3" "@rnw-scripts/babel-react-native-config": "npm:0.0.0" "@rnw-scripts/eslint-config": "npm:1.2.38" @@ -5292,7 +5292,7 @@ __metadata: minimatch: "npm:^10.0.3" prettier: "npm:^3.6.2" react: "npm:^19.2.3" - react-native: "npm:0.85.0-nightly-20260114-f15985f4f" + react-native: "npm:0.85.0-nightly-20260128-36f07a1b2" react-native-windows: "npm:^0.0.0-canary.1056" typescript: "npm:5.0.4" languageName: unknown @@ -9866,7 +9866,7 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react@npm:^7.30.1": +"eslint-plugin-react@npm:^7.30.1, eslint-plugin-react@npm:^7.37.5": version: 7.37.5 resolution: "eslint-plugin-react@npm:7.37.5" dependencies: @@ -11314,10 +11314,10 @@ __metadata: languageName: node linkType: hard -"hermes-compiler@npm:250829098.0.5": - version: 250829098.0.5 - resolution: "hermes-compiler@npm:250829098.0.5" - checksum: 10c0/92f4fe78cae79ce9e4f9796c6ac74e128aca4b6192f90c66064ed36ef9a0487a9041ff96b82933837eb251a8b437fb893abb6a3cb7282d312b64bded1f8005ec +"hermes-compiler@npm:250829098.0.6": + version: 250829098.0.6 + resolution: "hermes-compiler@npm:250829098.0.6" + checksum: 10c0/ca565183f28fb6ee079ba1232ab005be8a2af49ac0db45e912b23a90cc44e8202a1f808a059d6c1601bcc9b976caac356639dc59d7eb5897cb2ecb1ef3661a23 languageName: node linkType: hard @@ -16433,7 +16433,7 @@ __metadata: prettier: "npm:^3.6.2" prompts: "npm:^2.4.1" react: "npm:19.2.3" - react-native: "npm:0.85.0-nightly-20260114-f15985f4f" + react-native: "npm:0.85.0-nightly-20260128-36f07a1b2" semver: "npm:^7.3.2" source-map-support: "npm:^0.5.19" typescript: "npm:5.0.4" @@ -16466,7 +16466,7 @@ __metadata: prettier: "npm:^3.6.2" prettier-plugin-hermes-parser: "npm:0.21.1" react: "npm:19.2.3" - react-native: "npm:0.85.0-nightly-20260114-f15985f4f" + react-native: "npm:0.85.0-nightly-20260128-36f07a1b2" react-native-platform-override: "npm:0.0.0-canary.1017" typescript: "npm:5.0.4" languageName: unknown @@ -16487,15 +16487,15 @@ __metadata: "@react-native-windows/codegen": "npm:0.0.0-canary.133" "@react-native-windows/find-dotnet-tools": "npm:0.0.0-canary.2" "@react-native/assets": "npm:1.0.0" - "@react-native/assets-registry": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/codegen": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/community-cli-plugin": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/gradle-plugin": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/js-polyfills": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/metro-config": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/new-app-screen": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/normalize-colors": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/virtualized-lists": "npm:0.85.0-nightly-20260114-f15985f4f" + "@react-native/assets-registry": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/codegen": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/community-cli-plugin": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/gradle-plugin": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/js-polyfills": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/metro-config": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/new-app-screen": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/normalize-colors": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/virtualized-lists": "npm:0.85.0-nightly-20260128-36f07a1b2" "@rnw-scripts/babel-react-native-config": "npm:0.0.0" "@rnw-scripts/eslint-config": "npm:1.2.38" "@rnw-scripts/jest-out-of-tree-snapshot-resolver": "npm:^1.1.42" @@ -16532,7 +16532,7 @@ __metadata: promise: "npm:^8.3.0" react: "npm:19.2.3" react-devtools-core: "npm:^6.1.5" - react-native: "npm:0.85.0-nightly-20260114-f15985f4f" + react-native: "npm:0.85.0-nightly-20260128-36f07a1b2" react-native-platform-override: "npm:0.0.0-canary.1022" react-refresh: "npm:^0.14.0" regenerator-runtime: "npm:^0.13.2" @@ -16548,22 +16548,22 @@ __metadata: peerDependencies: "@types/react": ^19.2.3 react: ^19.2.3 - react-native: 0.85.0-nightly-20260114-f15985f4f + react-native: 0.85.0-nightly-20260128-36f07a1b2 languageName: unknown linkType: soft -"react-native@npm:0.85.0-nightly-20260114-f15985f4f": - version: 0.85.0-nightly-20260114-f15985f4f - resolution: "react-native@npm:0.85.0-nightly-20260114-f15985f4f" +"react-native@npm:0.85.0-nightly-20260128-36f07a1b2": + version: 0.85.0-nightly-20260128-36f07a1b2 + resolution: "react-native@npm:0.85.0-nightly-20260128-36f07a1b2" dependencies: "@jest/create-cache-key-function": "npm:^29.7.0" - "@react-native/assets-registry": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/codegen": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/community-cli-plugin": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/gradle-plugin": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/js-polyfills": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/normalize-colors": "npm:0.85.0-nightly-20260114-f15985f4f" - "@react-native/virtualized-lists": "npm:0.85.0-nightly-20260114-f15985f4f" + "@react-native/assets-registry": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/codegen": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/community-cli-plugin": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/gradle-plugin": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/js-polyfills": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/normalize-colors": "npm:0.85.0-nightly-20260128-36f07a1b2" + "@react-native/virtualized-lists": "npm:0.85.0-nightly-20260128-36f07a1b2" abort-controller: "npm:^3.0.0" anser: "npm:^1.4.9" ansi-regex: "npm:^5.0.0" @@ -16572,7 +16572,7 @@ __metadata: base64-js: "npm:^1.5.1" commander: "npm:^12.0.0" flow-enums-runtime: "npm:^0.0.6" - hermes-compiler: "npm:250829098.0.5" + hermes-compiler: "npm:250829098.0.6" invariant: "npm:^2.2.4" jest-environment-node: "npm:^29.7.0" memoize-one: "npm:^5.0.0" @@ -16599,7 +16599,7 @@ __metadata: optional: true bin: react-native: cli.js - checksum: 10c0/f75bf547c1501d079d47da5858ae98e0216e75a3df59426a8b818d855a231b39136cb4515221e9adb65bf84064d76fa87095e96775ac43cc806d4a5c7e3c82c7 + checksum: 10c0/5228de9fcc435dbbf2058424f1abae5be290083eb5a291e4d8e8a02b52514ffe31a7afc10c93eed64e30230a4228034736e0501c7c81590dd0954ba14f8ccafc languageName: node linkType: hard From 6e912707d0f1a43cbfa28a4a21262db2c4cdc666 Mon Sep 17 00:00:00 2001 From: Anukrati Agrawal Date: Thu, 4 Jun 2026 14:23:22 -0700 Subject: [PATCH 2/6] Resolve all merge conflicts from nightly integration Resolved 14 files with conflicts from the RN 0.85.0-nightly-20260128 integration: packages/ (10 files): - monorepo/package.json, tester/package.json: kept nightly versions - AccessibilityInfo.win32.js: upstream keyof + Win32 platform branch - TextInput.flow.win32.js: upstream ReadonlyArray + Win32 accessibility props - Touchable.win32.js: upstream ReadonlyArray + Win32 keyboard/mouse props - CoreEventTypes.win32.js: upstream ReadonlyArray + Win32 ctrlKey - RNTesterExampleFilter.win32.js: upstream ReadonlyArray + Win32 bookmarks - TextExample.windows.js: upstream FiraCode examples + Windows view close - TextSharedExamples.windows.js: kept RNW override pattern - Text.win32.js: major refactor - removed legacy TextImplLegacy branch, removed ReactNativeFeatureFlags checks, adopted processedProps pattern, preserved all Win32 accessibility additions vnext/ (4 files): - AccessibilityInfo.windows.js: upstream keyof + Windows platform branch - TextInput.flow.windows.js: upstream ReadonlyArray + Windows props - Touchable.windows.js: upstream ReadonlyArray + Windows touch props - Text.windows.js: same major refactor as win32 variant with Windows accessibility props (aria-level, aria-readonly, etc.) All files pass node --check and Metro bundle succeeds. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../components/RNTesterExampleFilter.win32.js | 10 +- .../AccessibilityInfo.win32.js | 86 +- .../TextInput/TextInput.flow.win32.js | 6 - .../Components/Touchable/Touchable.win32.js | 6 - .../src-win/Libraries/Text/Text.win32.js | 934 ++--------------- .../Libraries/Types/CoreEventTypes.win32.js | 7 +- .../js/examples/Text/TextExample.windows.js | 6 - .../Text/TextSharedExamples.windows.js | 6 - packages/@react-native/monorepo/package.json | 8 - packages/@react-native/tester/overrides.json | 8 + packages/@react-native/tester/package.json | 14 - .../AccessibilityInfo.windows.js | 86 +- .../TextInput/TextInput.flow.windows.js | 6 - .../Components/Touchable/Touchable.windows.js | 8 +- vnext/src-win/Libraries/Text/Text.windows.js | 945 +----------------- 15 files changed, 154 insertions(+), 1982 deletions(-) diff --git a/packages/@office-iss/react-native-win32-tester/src/js/components/RNTesterExampleFilter.win32.js b/packages/@office-iss/react-native-win32-tester/src/js/components/RNTesterExampleFilter.win32.js index c452968011b..5f610df10fe 100644 --- a/packages/@office-iss/react-native-win32-tester/src/js/components/RNTesterExampleFilter.win32.js +++ b/packages/@office-iss/react-native-win32-tester/src/js/components/RNTesterExampleFilter.win32.js @@ -29,16 +29,8 @@ type Props = { disableSearch?: boolean, testID?: string, hideFilterPills?: boolean, -<<<<<<< Upstream - page: 'examples_page' | 'components_page', - sections: ReadonlyArray>, -||||||| base - page: 'examples_page' | 'components_page', - sections: $ReadOnlyArray>, -======= page: 'examples_page' | 'components_page' | 'bookmarks_page', - sections: $ReadOnlyArray>, ->>>>>>> Override + sections: ReadonlyArray>, ... }; diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js b/packages/@office-iss/react-native-win32/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js index 2f5c25ec1dc..7404dacc8a5 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js @@ -51,7 +51,6 @@ type AccessibilityEventTypes = | 'windowStateChange'; // Mapping of public event names to platform-specific event names. -<<<<<<< Upstream const EventNames: Map = Platform.OS === 'android' ? new Map([ @@ -63,74 +62,23 @@ const EventNames: Map = ['invertColorsChanged', 'invertColorDidChange'], ['grayscaleChanged', 'grayscaleModeDidChange'], ]) - : new Map([ - ['announcementFinished', 'announcementFinished'], - ['boldTextChanged', 'boldTextChanged'], - ['change', 'screenReaderChanged'], - ['grayscaleChanged', 'grayscaleChanged'], - ['invertColorsChanged', 'invertColorsChanged'], - ['reduceMotionChanged', 'reduceMotionChanged'], - ['reduceTransparencyChanged', 'reduceTransparencyChanged'], - ['screenReaderChanged', 'screenReaderChanged'], - ['darkerSystemColorsChanged', 'darkerSystemColorsChanged'], - ]); -||||||| base -const EventNames: Map< - $Keys, - string, -> = Platform.OS === 'android' - ? new Map([ - ['change', 'touchExplorationDidChange'], - ['reduceMotionChanged', 'reduceMotionDidChange'], - ['highTextContrastChanged', 'highTextContrastDidChange'], - ['screenReaderChanged', 'touchExplorationDidChange'], - ['accessibilityServiceChanged', 'accessibilityServiceDidChange'], - ['invertColorsChanged', 'invertColorDidChange'], - ['grayscaleChanged', 'grayscaleModeDidChange'], - ]) - : new Map([ - ['announcementFinished', 'announcementFinished'], - ['boldTextChanged', 'boldTextChanged'], - ['change', 'screenReaderChanged'], - ['grayscaleChanged', 'grayscaleChanged'], - ['invertColorsChanged', 'invertColorsChanged'], - ['reduceMotionChanged', 'reduceMotionChanged'], - ['reduceTransparencyChanged', 'reduceTransparencyChanged'], - ['screenReaderChanged', 'screenReaderChanged'], - ['darkerSystemColorsChanged', 'darkerSystemColorsChanged'], - ]); -======= -const EventNames: Map< - $Keys, - string, -> = Platform.OS === 'android' - ? new Map([ - ['change', 'touchExplorationDidChange'], - ['reduceMotionChanged', 'reduceMotionDidChange'], - ['highTextContrastChanged', 'highTextContrastDidChange'], - ['screenReaderChanged', 'touchExplorationDidChange'], - ['accessibilityServiceChanged', 'accessibilityServiceDidChange'], - ['invertColorsChanged', 'invertColorDidChange'], - ['grayscaleChanged', 'grayscaleModeDidChange'], - ]) - : Platform.OS === 'win32' - ? new Map([ - ['change', 'TOUCH_EXPLORATION_EVENT'], - ['reduceMotionChanged', 'REDUCE_MOTION_EVENT'], - ['screenReaderChanged', 'TOUCH_EXPLORATION_EVENT'], - ]) - : new Map([ - ['announcementFinished', 'announcementFinished'], - ['boldTextChanged', 'boldTextChanged'], - ['change', 'screenReaderChanged'], - ['grayscaleChanged', 'grayscaleChanged'], - ['invertColorsChanged', 'invertColorsChanged'], - ['reduceMotionChanged', 'reduceMotionChanged'], - ['reduceTransparencyChanged', 'reduceTransparencyChanged'], - ['screenReaderChanged', 'screenReaderChanged'], - ['darkerSystemColorsChanged', 'darkerSystemColorsChanged'], - ]); ->>>>>>> Override + : Platform.OS === 'win32' + ? new Map([ + ['change', 'TOUCH_EXPLORATION_EVENT'], + ['reduceMotionChanged', 'REDUCE_MOTION_EVENT'], + ['screenReaderChanged', 'TOUCH_EXPLORATION_EVENT'], + ]) + : new Map([ + ['announcementFinished', 'announcementFinished'], + ['boldTextChanged', 'boldTextChanged'], + ['change', 'screenReaderChanged'], + ['grayscaleChanged', 'grayscaleChanged'], + ['invertColorsChanged', 'invertColorsChanged'], + ['reduceMotionChanged', 'reduceMotionChanged'], + ['reduceTransparencyChanged', 'reduceTransparencyChanged'], + ['screenReaderChanged', 'screenReaderChanged'], + ['darkerSystemColorsChanged', 'darkerSystemColorsChanged'], + ]); /** * Sometimes it's useful to know whether or not the device has a screen reader diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/Components/TextInput/TextInput.flow.win32.js b/packages/@office-iss/react-native-win32/src-win/Libraries/Components/TextInput/TextInput.flow.win32.js index f51acca3a34..4371c962451 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/Components/TextInput/TextInput.flow.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/Components/TextInput/TextInput.flow.win32.js @@ -558,12 +558,7 @@ type TextInputBaseProps = Readonly<{ * * @see https://developer.android.com/reference/android/content/ClipData for more information on MIME types */ -<<<<<<< Upstream experimental_acceptDragAndDropTypes?: ?ReadonlyArray, -||||||| base - experimental_acceptDragAndDropTypes?: ?$ReadOnlyArray, -======= - experimental_acceptDragAndDropTypes?: ?$ReadOnlyArray, /** * String to be read by screenreaders to indicate an error state. The acceptable parameters * of accessibilityErrorMessage is a string. Setting accessibilityInvalid to true activates @@ -571,7 +566,6 @@ type TextInputBaseProps = Readonly<{ */ accessibilityErrorMessage?: ?Stringish, accessibilityInvalid?: ?boolean, ->>>>>>> Override /** * Can tell `TextInput` to automatically capitalize certain characters. diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/Components/Touchable/Touchable.win32.js b/packages/@office-iss/react-native-win32/src-win/Libraries/Components/Touchable/Touchable.win32.js index be1c2acaa62..bc98fdafdab 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/Components/Touchable/Touchable.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/Components/Touchable/Touchable.win32.js @@ -25,16 +25,10 @@ import Position from './Position'; import * as React from 'react'; const extractSingleTouch = (nativeEvent: { -<<<<<<< Upstream +changedTouches: ReadonlyArray, -||||||| base - +changedTouches: $ReadOnlyArray, -======= - +changedTouches: $ReadOnlyArray, +altKey: ?boolean, +button: ?number, +ctrlKey: ?boolean, ->>>>>>> Override +force?: number, +identifier: number, +locationX: number, diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/Text/Text.win32.js b/packages/@office-iss/react-native-win32/src-win/Libraries/Text/Text.win32.js index 7e7e07f7dd8..bf9cdbf3748 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/Text/Text.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/Text/Text.win32.js @@ -35,7 +35,6 @@ type TextForwardRef = React.ElementRef< * * @see https://reactnative.dev/docs/text */ -<<<<<<< Upstream const TextImpl: component( ref?: React.RefSetter, ...props: TextProps @@ -53,6 +52,22 @@ const TextImpl: component( 'aria-hidden': ariaHidden, 'aria-label': ariaLabel, 'aria-selected': ariaSelected, + // #[ Win32 + 'aria-level': ariaLevel, + 'aria-multiselectable': ariaMultiselectable, + 'aria-posinset': ariaPosinset, + 'aria-required': ariaRequired, + 'aria-setsize': ariaSetsize, + 'aria-controls': ariaControls, + 'aria-describedby': ariaDescribedBy, + 'aria-description': ariaDescription, + accessibilityLevel, + accessibilityPositionInSet, + accessibilitySetSize, + accessibilityControls, + accessibilityDescribedBy, + accessibilityDescription, + // #] Win32 children, ellipsizeMode, disabled, @@ -84,6 +99,18 @@ const TextImpl: component( ...NativeTextProps, }; const _accessibilityLabel = ariaLabel ?? accessibilityLabel; + // #Win32 [ + const _accessibilityControls = ariaControls ?? accessibilityControls; + const _accessibilityDescribedBy = + ariaDescribedBy ?? accessibilityDescribedBy; + const _accessibilityDescription = + ariaDescription ?? accessibilityDescription; + const _accessibilityLevel = ariaLevel ?? accessibilityLevel; + const _accessibilityPositionInSet = + ariaPosinset ?? accessibilityPositionInSet; + const _accessibilitySetSize = ariaSetsize ?? accessibilitySetSize; + // ] #Win32 + let _accessibilityState: ?TextProps['accessibilityState'] = accessibilityState; if ( @@ -99,517 +126,12 @@ const TextImpl: component( checked: ariaChecked ?? _accessibilityState.checked, disabled: ariaDisabled ?? _accessibilityState.disabled, expanded: ariaExpanded ?? _accessibilityState.expanded, + // #Win32 [ + multiselectable: + ariaMultiselectable ?? accessibilityState?.multiselectable, + required: ariaRequired ?? accessibilityState?.required, + // ] #Win32 selected: ariaSelected ?? _accessibilityState.selected, -||||||| base -let _TextImpl; -if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { - const TextImplNoDefaultProps: component( - ref?: React.RefSetter, - ...props: TextProps - ) = ({ - ref: forwardedRef, - accessible, - accessibilityLabel, - accessibilityRole, - accessibilityState, - allowFontScaling, - 'aria-busy': ariaBusy, - 'aria-checked': ariaChecked, - 'aria-disabled': ariaDisabled, - 'aria-expanded': ariaExpanded, - 'aria-hidden': ariaHidden, - 'aria-label': ariaLabel, - 'aria-selected': ariaSelected, - children, - ellipsizeMode, - disabled, - id, - nativeID, - numberOfLines, - onLongPress, - onPress, - onPressIn, - onPressOut, - onResponderGrant, - onResponderMove, - onResponderRelease, - onResponderTerminate, - onResponderTerminationRequest, - onStartShouldSetResponder, - pressRetentionOffset, - role, - selectable, - selectionColor, - suppressHighlighting, - style, - ...restProps - }: { - ref?: React.RefSetter, - ...TextProps, - }) => { - const processedProps = restProps as { - ...NativeTextProps, - }; - const _accessibilityLabel = ariaLabel ?? accessibilityLabel; - let _accessibilityState: ?TextProps['accessibilityState'] = - accessibilityState; - if ( - ariaBusy != null || - ariaChecked != null || - ariaDisabled != null || - ariaExpanded != null || - ariaSelected != null - ) { - if (_accessibilityState != null) { - _accessibilityState = { - busy: ariaBusy ?? _accessibilityState.busy, - checked: ariaChecked ?? _accessibilityState.checked, - disabled: ariaDisabled ?? _accessibilityState.disabled, - expanded: ariaExpanded ?? _accessibilityState.expanded, - selected: ariaSelected ?? _accessibilityState.selected, - }; - } else { - _accessibilityState = { - busy: ariaBusy, - checked: ariaChecked, - disabled: ariaDisabled, - expanded: ariaExpanded, - selected: ariaSelected, - }; - } - } - - const _accessibilityStateDisabled = _accessibilityState?.disabled; - const _disabled = disabled ?? _accessibilityStateDisabled; - - // If the disabled prop and accessibilityState.disabled are out of sync but not both in - // falsy states we need to update the accessibilityState object to use the disabled prop. - if ( - _accessibilityState != null && - _disabled !== _accessibilityStateDisabled && - ((_disabled != null && _disabled !== false) || - (_accessibilityStateDisabled != null && - _accessibilityStateDisabled !== false)) - ) { - _accessibilityState.disabled = _disabled; - } - - if (ariaHidden !== undefined) { - processedProps.accessibilityElementsHidden = ariaHidden; - if (ariaHidden === true) { - processedProps.importantForAccessibility = 'no-hide-descendants'; - } - } - - const _accessible = Platform.select({ - ios: accessible !== false, - android: - accessible == null - ? onPress != null || onLongPress != null - : accessible, - default: accessible, - }); - - const isPressable = - (onPress != null || - onLongPress != null || - onStartShouldSetResponder != null) && - _disabled !== true; - - const shouldUseLinkRole = - ReactNativeFeatureFlags.shouldUseLinkRoleForPressableText() && - isPressable && - accessibilityRole == null && - role == null; - - const _accessibilityRole = - accessibilityRole ?? (shouldUseLinkRole ? 'link' : undefined); - - const _role = shouldUseLinkRole ? undefined : role; - - // TODO: Move this processing to the view configuration. - const _selectionColor = - selectionColor != null ? processColor(selectionColor) : undefined; - - let _style = style; - if (__DEV__) { - if (PressabilityDebug.isEnabled() && onPress != null) { - _style = [style, {color: 'magenta'}]; - } - } - - let _numberOfLines = numberOfLines; - if (_numberOfLines != null && !(_numberOfLines >= 0)) { - if (__DEV__) { - console.error( - `'numberOfLines' in must be a non-negative number, received: ${_numberOfLines}. The value will be set to 0.`, - ); - } - _numberOfLines = 0; - } - - let _selectable = selectable; - - let processedStyle = flattenStyle(_style); - if (processedStyle != null) { - let overrides: ?{...TextStyleInternal} = null; - if (typeof processedStyle.fontWeight === 'number') { - overrides = overrides || ({}: {...TextStyleInternal}); - overrides.fontWeight = - // $FlowFixMe[incompatible-type] - (String(processedStyle.fontWeight): TextStyleInternal['fontWeight']); - } - - if (processedStyle.userSelect != null) { - _selectable = userSelectToSelectableMap[processedStyle.userSelect]; - overrides = overrides || ({}: {...TextStyleInternal}); - overrides.userSelect = undefined; - } - - if (processedStyle.verticalAlign != null) { - overrides = overrides || ({}: {...TextStyleInternal}); - overrides.textAlignVertical = - verticalAlignToTextAlignVerticalMap[processedStyle.verticalAlign]; - overrides.verticalAlign = undefined; - } - - if (overrides != null) { - // $FlowFixMe[incompatible-type] - _style = [_style, overrides]; - } - } - - const _nativeID = id ?? nativeID; - - if (_accessibilityLabel !== undefined) { - processedProps.accessibilityLabel = _accessibilityLabel; - } - if (_accessibilityRole !== undefined) { - processedProps.accessibilityRole = _accessibilityRole; - } - if (_accessibilityState !== undefined) { - processedProps.accessibilityState = _accessibilityState; - } - if (_nativeID !== undefined) { - processedProps.nativeID = _nativeID; - } - if (_numberOfLines !== undefined) { - processedProps.numberOfLines = _numberOfLines; - } - if (_selectable !== undefined) { - processedProps.selectable = _selectable; - } - if (_style !== undefined) { - processedProps.style = _style; - } - if (_selectionColor !== undefined) { - processedProps.selectionColor = _selectionColor; - } - if (_role !== undefined) { - processedProps.role = _role; - } - - let textPressabilityProps: ?TextPressabilityProps; - if (isPressable) { - textPressabilityProps = { - onLongPress, - onPress, - onPressIn, - onPressOut, - onResponderGrant, - onResponderMove, - onResponderRelease, - onResponderTerminate, - onResponderTerminationRequest, - onStartShouldSetResponder, - pressRetentionOffset, - suppressHighlighting, -======= -let _TextImpl; -if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { - const TextImplNoDefaultProps: component( - ref?: React.RefSetter, - ...props: TextProps - ) = ({ - ref: forwardedRef, - accessible, - accessibilityLabel, - accessibilityRole, - accessibilityState, - allowFontScaling, - 'aria-busy': ariaBusy, - 'aria-checked': ariaChecked, - 'aria-disabled': ariaDisabled, - 'aria-expanded': ariaExpanded, - 'aria-hidden': ariaHidden, - 'aria-label': ariaLabel, - 'aria-selected': ariaSelected, - // #[ Win32 - 'aria-level': ariaLevel, - 'aria-multiselectable': ariaMultiselectable, - 'aria-posinset': ariaPosinset, - 'aria-required': ariaRequired, - 'aria-setsize': ariaSetsize, - 'aria-controls': ariaControls, - 'aria-describedby': ariaDescribedBy, - 'aria-description': ariaDescription, - accessibilityLevel, - accessibilityPositionInSet, - accessibilitySetSize, - accessibilityControls, - accessibilityDescribedBy, - accessibilityDescription, - // #] Win32 - children, - ellipsizeMode, - disabled, - id, - nativeID, - numberOfLines, - onLongPress, - onPress, - onPressIn, - onPressOut, - onResponderGrant, - onResponderMove, - onResponderRelease, - onResponderTerminate, - onResponderTerminationRequest, - onStartShouldSetResponder, - pressRetentionOffset, - role, - selectable, - selectionColor, - suppressHighlighting, - style, - ...restProps - }: { - ref?: React.RefSetter, - ...TextProps, - }) => { - const processedProps = restProps as { - ...NativeTextProps, - }; - const _accessibilityLabel = ariaLabel ?? accessibilityLabel; - // #Win32 [ - const _accessibilityControls = ariaControls ?? accessibilityControls; - const _accessibilityDescribedBy = - ariaDescribedBy ?? accessibilityDescribedBy; - const _accessibilityDescription = - ariaDescription ?? accessibilityDescription; - const _accessibilityLevel = ariaLevel ?? accessibilityLevel; - const _accessibilityPositionInSet = - ariaPosinset ?? accessibilityPositionInSet; - const _accessibilitySetSize = ariaSetsize ?? accessibilitySetSize; - // ] #Win32 - - let _accessibilityState: ?TextProps['accessibilityState'] = - accessibilityState; - if ( - ariaBusy != null || - ariaChecked != null || - ariaDisabled != null || - ariaExpanded != null || - ariaSelected != null - ) { - if (_accessibilityState != null) { - _accessibilityState = { - busy: ariaBusy ?? _accessibilityState.busy, - checked: ariaChecked ?? _accessibilityState.checked, - disabled: ariaDisabled ?? _accessibilityState.disabled, - expanded: ariaExpanded ?? _accessibilityState.expanded, - // #Win32 [ - multiselectable: - ariaMultiselectable ?? accessibilityState?.multiselectable, - required: ariaRequired ?? accessibilityState?.required, - // ] #Win32 - selected: ariaSelected ?? _accessibilityState.selected, - }; - } else { - _accessibilityState = { - busy: ariaBusy, - checked: ariaChecked, - disabled: ariaDisabled, - expanded: ariaExpanded, - // #Win32 [ - multiselectable: ariaMultiselectable, - required: ariaRequired, - // ] #Win32 - selected: ariaSelected, - }; - } - } - - const _accessibilityStateDisabled = _accessibilityState?.disabled; - const _disabled = disabled ?? _accessibilityStateDisabled; - - // If the disabled prop and accessibilityState.disabled are out of sync but not both in - // falsy states we need to update the accessibilityState object to use the disabled prop. - if ( - _accessibilityState != null && - _disabled !== _accessibilityStateDisabled && - ((_disabled != null && _disabled !== false) || - (_accessibilityStateDisabled != null && - _accessibilityStateDisabled !== false)) - ) { - _accessibilityState.disabled = _disabled; - } - - if (ariaHidden !== undefined) { - processedProps.accessibilityElementsHidden = ariaHidden; - if (ariaHidden === true) { - processedProps.importantForAccessibility = 'no-hide-descendants'; - } - } - - const _accessible = Platform.select({ - ios: accessible !== false, - android: - accessible == null - ? onPress != null || onLongPress != null - : accessible, - default: accessible !== false, // [Windows #13996 - default value is accessible !== false] - }); - - const isPressable = - (onPress != null || - onLongPress != null || - onStartShouldSetResponder != null) && - _disabled !== true; - - const shouldUseLinkRole = - ReactNativeFeatureFlags.shouldUseLinkRoleForPressableText() && - isPressable && - accessibilityRole == null && - role == null; - - const _accessibilityRole = - accessibilityRole ?? (shouldUseLinkRole ? 'link' : undefined); - - const _role = shouldUseLinkRole ? undefined : role; - - // TODO: Move this processing to the view configuration. - const _selectionColor = - selectionColor != null ? processColor(selectionColor) : undefined; - - let _style = style; - if (__DEV__) { - if (PressabilityDebug.isEnabled() && onPress != null) { - _style = [style, {color: 'magenta'}]; - } - } - - let _numberOfLines = numberOfLines; - if (_numberOfLines != null && !(_numberOfLines >= 0)) { - if (__DEV__) { - console.error( - `'numberOfLines' in must be a non-negative number, received: ${_numberOfLines}. The value will be set to 0.`, - ); - } - _numberOfLines = 0; - } - - let _selectable = selectable; - - let processedStyle = flattenStyle(_style); - if (processedStyle != null) { - let overrides: ?{...TextStyleInternal} = null; - if (typeof processedStyle.fontWeight === 'number') { - overrides = overrides || ({}: {...TextStyleInternal}); - overrides.fontWeight = - // $FlowFixMe[incompatible-type] - (String(processedStyle.fontWeight): TextStyleInternal['fontWeight']); - } - - if (processedStyle.userSelect != null) { - _selectable = userSelectToSelectableMap[processedStyle.userSelect]; - overrides = overrides || ({}: {...TextStyleInternal}); - overrides.userSelect = undefined; - } - - if (processedStyle.verticalAlign != null) { - overrides = overrides || ({}: {...TextStyleInternal}); - overrides.textAlignVertical = - verticalAlignToTextAlignVerticalMap[processedStyle.verticalAlign]; - overrides.verticalAlign = undefined; - } - - if (overrides != null) { - // $FlowFixMe[incompatible-type] - _style = [_style, overrides]; - } - } - - const _nativeID = id ?? nativeID; - - if (_accessibilityLabel !== undefined) { - processedProps.accessibilityLabel = _accessibilityLabel; - } - if (_accessibilityRole !== undefined) { - processedProps.accessibilityRole = _accessibilityRole; - } - if (_accessibilityState !== undefined) { - processedProps.accessibilityState = _accessibilityState; - } - if (_nativeID !== undefined) { - processedProps.nativeID = _nativeID; - } - if (_numberOfLines !== undefined) { - processedProps.numberOfLines = _numberOfLines; - } - if (_selectable !== undefined) { - processedProps.selectable = _selectable; - } - if (_style !== undefined) { - processedProps.style = _style; - } - if (_selectionColor !== undefined) { - processedProps.selectionColor = _selectionColor; - } - if (_role !== undefined) { - processedProps.role = _role; - } - - // [Windows accessibility properties - if (_accessibilityControls !== undefined) { - processedProps.accessibilityControls = _accessibilityControls; - } - - if (_accessibilityDescribedBy !== undefined) { - processedProps.accessibilityDescribedBy = _accessibilityDescribedBy; - } - - if (_accessibilityDescription !== undefined) { - processedProps.accessibilityDescription = _accessibilityDescription; - } - - if (_accessibilityLevel !== undefined) { - processedProps.accessibilityLevel = _accessibilityLevel; - } - if (_accessibilityPositionInSet !== undefined) { - processedProps.accessibilityPositionInSet = _accessibilityPositionInSet; - } - if (_accessibilitySetSize !== undefined) { - processedProps.accessibilitySetSize = _accessibilitySetSize; - } - // ] - - let textPressabilityProps: ?TextPressabilityProps; - if (isPressable) { - textPressabilityProps = { - onLongPress, - onPress, - onPressIn, - onPressOut, - onResponderGrant, - onResponderMove, - onResponderRelease, - onResponderTerminate, - onResponderTerminationRequest, - onStartShouldSetResponder, - pressRetentionOffset, - suppressHighlighting, ->>>>>>> Override }; } else { _accessibilityState = { @@ -617,10 +139,13 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { checked: ariaChecked, disabled: ariaDisabled, expanded: ariaExpanded, + // #[ Win32 + multiselectable: ariaMultiselectable, + required: ariaRequired, + // #] Win32 selected: ariaSelected, }; } -<<<<<<< Upstream } const _accessibilityStateDisabled = _accessibilityState?.disabled; @@ -638,203 +163,6 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { _accessibilityState = {disabled}; } else { _accessibilityState.disabled = _disabled; -||||||| base - - return {nativeText}; - }; - _TextImpl = TextImplNoDefaultProps; -} else { - const TextImplLegacy: component( - ref?: React.RefSetter, - ...props: TextProps - ) = ({ - ref: forwardedRef, - accessible, - accessibilityElementsHidden, - importantForAccessibility, - accessibilityLabel, - accessibilityRole, - accessibilityState, - allowFontScaling, - 'aria-busy': ariaBusy, - 'aria-checked': ariaChecked, - 'aria-disabled': ariaDisabled, - 'aria-expanded': ariaExpanded, - 'aria-hidden': ariaHidden, - 'aria-label': ariaLabel, - 'aria-selected': ariaSelected, - children, - ellipsizeMode, - disabled, - id, - nativeID, - numberOfLines, - onLongPress, - onPress, - onPressIn, - onPressOut, - onResponderGrant, - onResponderMove, - onResponderRelease, - onResponderTerminate, - onResponderTerminationRequest, - onStartShouldSetResponder, - pressRetentionOffset, - role, - selectable, - selectionColor, - suppressHighlighting, - style, - ...restProps - }: { - ref?: React.RefSetter, - ...TextProps, - }) => { - const _accessibilityLabel = ariaLabel ?? accessibilityLabel; - - let _accessibilityState: ?TextProps['accessibilityState'] = - accessibilityState; - if ( - ariaBusy != null || - ariaChecked != null || - ariaDisabled != null || - ariaExpanded != null || - ariaSelected != null - ) { - if (_accessibilityState != null) { - _accessibilityState = { - busy: ariaBusy ?? _accessibilityState.busy, - checked: ariaChecked ?? _accessibilityState.checked, - disabled: ariaDisabled ?? _accessibilityState.disabled, - expanded: ariaExpanded ?? _accessibilityState.expanded, - selected: ariaSelected ?? _accessibilityState.selected, - }; - } else { - _accessibilityState = { - busy: ariaBusy, - checked: ariaChecked, - disabled: ariaDisabled, - expanded: ariaExpanded, - selected: ariaSelected, - }; - } -======= - - return {nativeText}; - }; - _TextImpl = TextImplNoDefaultProps; -} else { - const TextImplLegacy: component( - ref?: React.RefSetter, - ...props: TextProps - ) = ({ - ref: forwardedRef, - accessible, - accessibilityElementsHidden, - importantForAccessibility, - accessibilityLabel, - accessibilityRole, - accessibilityState, - allowFontScaling, - 'aria-busy': ariaBusy, - 'aria-checked': ariaChecked, - 'aria-disabled': ariaDisabled, - 'aria-expanded': ariaExpanded, - 'aria-hidden': ariaHidden, - 'aria-label': ariaLabel, - 'aria-selected': ariaSelected, - //#[ Win32 - 'aria-controls': ariaControls, - 'aria-describedby': ariaDescribedBy, - 'aria-description': ariaDescription, - 'aria-level': ariaLevel, - 'aria-multiselectable': ariaMultiselectable, - 'aria-posinset': ariaPosinset, - 'aria-required': ariaRequired, - 'aria-setsize': ariaSetsize, - accessibilityLevel, - accessibilityPositionInSet, - accessibilitySetSize, - accessibilityControls, - accessibilityDescribedBy, - accessibilityDescription, - // #] Win32 - children, - ellipsizeMode, - disabled, - id, - nativeID, - numberOfLines, - onLongPress, - onPress, - onPressIn, - onPressOut, - onResponderGrant, - onResponderMove, - onResponderRelease, - onResponderTerminate, - onResponderTerminationRequest, - onStartShouldSetResponder, - pressRetentionOffset, - role, - selectable, - selectionColor, - suppressHighlighting, - style, - ...restProps - }: { - ref?: React.RefSetter, - ...TextProps, - }) => { - const _accessibilityLabel = ariaLabel ?? accessibilityLabel; - //#[ Win32 - const _accessibilityControls = ariaControls ?? accessibilityControls; - const _accessibilityDescribedBy = - ariaDescribedBy ?? accessibilityDescribedBy; - const _accessibilityDescription = - ariaDescription ?? accessibilityDescription; - const _accessibilityLevel = ariaLevel ?? accessibilityLevel; - const _accessibilityPositionInSet = - ariaPosinset ?? accessibilityPositionInSet; - const _accessibilitySetSize = ariaSetsize ?? accessibilitySetSize; - //#] Win32 - - let _accessibilityState: ?TextProps['accessibilityState'] = - accessibilityState; - if ( - ariaBusy != null || - ariaChecked != null || - ariaDisabled != null || - ariaExpanded != null || - ariaSelected != null - ) { - if (_accessibilityState != null) { - _accessibilityState = { - busy: ariaBusy ?? _accessibilityState.busy, - checked: ariaChecked ?? _accessibilityState.checked, - disabled: ariaDisabled ?? _accessibilityState.disabled, - expanded: ariaExpanded ?? _accessibilityState.expanded, - //#[Win32 - multiselectable: - ariaMultiselectable ?? accessibilityState?.multiselectable, - required: ariaRequired ?? accessibilityState?.required, - // #] Win32 - selected: ariaSelected ?? _accessibilityState.selected, - }; - } else { - _accessibilityState = { - busy: ariaBusy, - checked: ariaChecked, - disabled: ariaDisabled, - expanded: ariaExpanded, - // #[ Win32 - multiselectable: ariaMultiselectable, - required: ariaRequired, - // #]win32 - selected: ariaSelected, - }; - } ->>>>>>> Override } } @@ -849,7 +177,7 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { ios: accessible !== false, android: accessible == null ? onPress != null || onLongPress != null : accessible, - default: accessible, + default: accessible !== false, // [Windows #13996 - default value is accessible !== false] }); const isPressable = @@ -899,152 +227,10 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { (String(processedStyle.fontWeight): TextStyleInternal['fontWeight']); } -<<<<<<< Upstream if (processedStyle.userSelect != null) { _selectable = userSelectToSelectableMap[processedStyle.userSelect]; overrides = overrides || ({}: {...TextStyleInternal}); overrides.userSelect = undefined; -||||||| base - const _nativeID = id ?? nativeID; - - const hasTextAncestor = useContext(TextAncestorContext); - if (hasTextAncestor) { - if (isPressable) { - return ( - - ); - } - - return ( - - {children} - - ); -======= - const _nativeID = id ?? nativeID; - - const hasTextAncestor = useContext(TextAncestorContext); - if (hasTextAncestor) { - if (isPressable) { - return ( - - ); - } - - return ( - - {children} - - ); ->>>>>>> Override } if (processedStyle.verticalAlign != null) { @@ -1054,7 +240,6 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { overrides.verticalAlign = undefined; } -<<<<<<< Upstream if (overrides != null) { // $FlowFixMe[incompatible-type] _style = [_style, overrides]; @@ -1091,6 +276,30 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { processedProps.role = _role; } + // [Windows accessibility properties + if (_accessibilityControls !== undefined) { + processedProps.accessibilityControls = _accessibilityControls; + } + + if (_accessibilityDescribedBy !== undefined) { + processedProps.accessibilityDescribedBy = _accessibilityDescribedBy; + } + + if (_accessibilityDescription !== undefined) { + processedProps.accessibilityDescription = _accessibilityDescription; + } + + if (_accessibilityLevel !== undefined) { + processedProps.accessibilityLevel = _accessibilityLevel; + } + if (_accessibilityPositionInSet !== undefined) { + processedProps.accessibilityPositionInSet = _accessibilityPositionInSet; + } + if (_accessibilitySetSize !== undefined) { + processedProps.accessibilitySetSize = _accessibilitySetSize; + } + // ] + let textPressabilityProps: ?TextPressabilityProps; if (isPressable) { textPressabilityProps = { @@ -1108,25 +317,6 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { suppressHighlighting, }; } -||||||| base - const _accessible = Platform.select({ - ios: accessible !== false, - android: - accessible == null - ? onPress != null || onLongPress != null - : accessible, - default: accessible, - }); -======= - const _accessible = Platform.select({ - ios: accessible !== false, - android: - accessible == null - ? onPress != null || onLongPress != null - : accessible, - default: accessible !== false, // [Windows #13996 - default value is accessible !== false] - }); ->>>>>>> Override const hasTextAncestor = useContext(TextAncestorContext); if (hasTextAncestor) { diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/Types/CoreEventTypes.win32.js b/packages/@office-iss/react-native-win32/src-win/Libraries/Types/CoreEventTypes.win32.js index 3fa0ed87cb9..8d8a71e0be0 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/Types/CoreEventTypes.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/Types/CoreEventTypes.win32.js @@ -237,16 +237,11 @@ export type NativeTouchEvent = Readonly<{ /** * Array of all touch events that have changed since the last event */ -<<<<<<< Upstream changedTouches: ReadonlyArray, -||||||| base - changedTouches: $ReadOnlyArray, -======= - changedTouches: $ReadOnlyArray, ctrlKey: ?boolean, // TODO(macOS) ->>>>>>> Override + /** * 3D Touch reported force * @platform ios diff --git a/packages/@react-native-windows/tester/src/js/examples/Text/TextExample.windows.js b/packages/@react-native-windows/tester/src/js/examples/Text/TextExample.windows.js index b8031dc2c23..464a9a165c7 100644 --- a/packages/@react-native-windows/tester/src/js/examples/Text/TextExample.windows.js +++ b/packages/@react-native-windows/tester/src/js/examples/Text/TextExample.windows.js @@ -393,7 +393,6 @@ function FontVariantsExample(props: {}): React.Node { 1111{'\n'} 2222{'\n'} -<<<<<<< Upstream Non-Stylistic & and $ @@ -404,12 +403,7 @@ function FontVariantsExample(props: {}): React.Node { }}> Stylistic & and $ - -||||||| base - -======= ->>>>>>> Override ); } diff --git a/packages/@react-native-windows/tester/src/js/examples/Text/TextSharedExamples.windows.js b/packages/@react-native-windows/tester/src/js/examples/Text/TextSharedExamples.windows.js index 342cb212fce..be25dedad5b 100644 --- a/packages/@react-native-windows/tester/src/js/examples/Text/TextSharedExamples.windows.js +++ b/packages/@react-native-windows/tester/src/js/examples/Text/TextSharedExamples.windows.js @@ -275,11 +275,6 @@ const examples = [ description: 'Shows the a11y behavior of Text with role="link"', render: TextWithLinkRoleExample, }, -<<<<<<< Upstream -] as ReadonlyArray; -||||||| base -] as $ReadOnlyArray; -======= // Windows: Only include TextInlineViewsExample in Fabric mode (bridgeless) // Paper mode doesn't support Views nested in Text ...(global.RN$Bridgeless === true @@ -298,4 +293,3 @@ const examples = [ ]; export default examples; ->>>>>>> Override diff --git a/packages/@react-native/monorepo/package.json b/packages/@react-native/monorepo/package.json index d1d52e878ba..45dcfba909d 100644 --- a/packages/@react-native/monorepo/package.json +++ b/packages/@react-native/monorepo/package.json @@ -51,16 +51,8 @@ "@jest/create-cache-key-function": "^29.7.0", "@microsoft/api-extractor": "^7.52.2", "@octokit/rest": "^22.0.0", -<<<<<<< Upstream - "@react-native/metro-babel-transformer": "0.85.0-main", - "@react-native/metro-config": "0.85.0-main", -||||||| base - "@react-native/metro-babel-transformer": "0.84.0-main", - "@react-native/metro-config": "0.84.0-main", -======= "@react-native/metro-babel-transformer": "0.85.0-nightly-20260128-36f07a1b2", "@react-native/metro-config": "0.85.0-nightly-20260128-36f07a1b2", ->>>>>>> Override "@tsconfig/node22": "22.0.2", "@types/react": "^19.2.3", "@typescript-eslint/parser": "^8.36.0", diff --git a/packages/@react-native/tester/overrides.json b/packages/@react-native/tester/overrides.json index 3088ff9403d..02cbf3d6d30 100644 --- a/packages/@react-native/tester/overrides.json +++ b/packages/@react-native/tester/overrides.json @@ -12,6 +12,7 @@ "type": "copy", "directory": "js/components", "baseDirectory": "packages/rn-tester/js/components", + "baseVersion": "0.85.0-nightly-20260114-f15985f4f", "baseHash": "7146ccc87cc1717af98926b22b98abb9e6d6fad0", "issue": 4054 }, @@ -145,6 +146,7 @@ "type": "copy", "directory": "js/examples/Experimental", "baseDirectory": "packages/rn-tester/js/examples/Experimental", + "baseVersion": "0.85.0-nightly-20260114-f15985f4f", "baseHash": "62842257c1fcc1631c3da4ea26d409df19d32ea4", "issue": 4054 }, @@ -166,6 +168,7 @@ "type": "copy", "directory": "js/examples/Image", "baseDirectory": "packages/rn-tester/js/examples/Image", + "baseVersion": "0.85.0-nightly-20260114-f15985f4f", "baseHash": "a45944f905e495fb1faeee03f9eef8c6565296d1", "issue": 4054 }, @@ -334,6 +337,7 @@ "type": "copy", "directory": "js/examples/Performance", "baseDirectory": "packages/rn-tester/js/examples/Performance", + "baseVersion": "0.85.0-nightly-20260114-f15985f4f", "baseHash": "9fd5ab235654a781d25dff55cd28366db9132053" }, { @@ -396,6 +400,7 @@ "type": "copy", "directory": "js/examples/RefreshControl", "baseDirectory": "packages/rn-tester/js/examples/RefreshControl", + "baseVersion": "0.85.0-nightly-20260114-f15985f4f", "baseHash": "781e6c4fbdc1fe5f618476c1cb16cc411cdca786", "issue": 4054 }, @@ -424,6 +429,7 @@ "type": "copy", "directory": "js/examples/ScrollView", "baseDirectory": "packages/rn-tester/js/examples/ScrollView", + "baseVersion": "0.85.0-nightly-20260114-f15985f4f", "baseHash": "97015cbbdb838c78dfb2f0bf9a7509bfea4b31c8", "issue": 4054 }, @@ -480,6 +486,7 @@ "type": "copy", "directory": "js/examples/Text", "baseDirectory": "packages/rn-tester/js/examples/Text", + "baseVersion": "0.85.0-nightly-20260114-f15985f4f", "baseHash": "0e16875ccf63c259b076c6a5b6c8f2f4b4949a96", "issue": 4054 }, @@ -626,6 +633,7 @@ "type": "copy", "directory": "js/types", "baseDirectory": "packages/rn-tester/js/types", + "baseVersion": "0.85.0-nightly-20260114-f15985f4f", "baseHash": "4bf00d2f79d60f5d296804b461cca3242fad9648", "issue": 4054 }, diff --git a/packages/@react-native/tester/package.json b/packages/@react-native/tester/package.json index 84cf0b3d8a6..3f53ecf4e62 100644 --- a/packages/@react-native/tester/package.json +++ b/packages/@react-native/tester/package.json @@ -1,12 +1,6 @@ { "name": "@react-native/tester", -<<<<<<< Upstream - "version": "0.85.0-main", -||||||| base - "version": "0.84.0-main", -======= "version": "0.85.0-nightly-20260128-36f07a1b2", ->>>>>>> Override "private": true, "description": "React Native tester app.", "license": "MIT", @@ -31,16 +25,8 @@ "e2e-test-ios": "./scripts/maestro-test-ios.sh" }, "dependencies": { -<<<<<<< Upstream - "@react-native/new-app-screen": "0.85.0-main", - "@react-native/popup-menu-android": "0.85.0-main", -||||||| base - "@react-native/new-app-screen": "0.84.0-main", - "@react-native/popup-menu-android": "0.84.0-main", -======= "@react-native/new-app-screen": "0.85.0-nightly-20260128-36f07a1b2", "@react-native/popup-menu-android": "0.85.0-nightly-20260128-36f07a1b2", ->>>>>>> Override "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "nullthrows": "^1.1.1" diff --git a/vnext/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js b/vnext/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js index 29384c334a0..ce52d4159c5 100644 --- a/vnext/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js +++ b/vnext/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js @@ -50,7 +50,6 @@ type AccessibilityEventTypes = | 'windowStateChange'; // Mapping of public event names to platform-specific event names. -<<<<<<< Upstream const EventNames: Map = Platform.OS === 'android' ? new Map([ @@ -62,74 +61,23 @@ const EventNames: Map = ['invertColorsChanged', 'invertColorDidChange'], ['grayscaleChanged', 'grayscaleModeDidChange'], ]) - : new Map([ - ['announcementFinished', 'announcementFinished'], - ['boldTextChanged', 'boldTextChanged'], - ['change', 'screenReaderChanged'], - ['grayscaleChanged', 'grayscaleChanged'], - ['invertColorsChanged', 'invertColorsChanged'], - ['reduceMotionChanged', 'reduceMotionChanged'], - ['reduceTransparencyChanged', 'reduceTransparencyChanged'], - ['screenReaderChanged', 'screenReaderChanged'], - ['darkerSystemColorsChanged', 'darkerSystemColorsChanged'], - ]); -||||||| base -const EventNames: Map< - $Keys, - string, -> = Platform.OS === 'android' - ? new Map([ - ['change', 'touchExplorationDidChange'], - ['reduceMotionChanged', 'reduceMotionDidChange'], - ['highTextContrastChanged', 'highTextContrastDidChange'], - ['screenReaderChanged', 'touchExplorationDidChange'], - ['accessibilityServiceChanged', 'accessibilityServiceDidChange'], - ['invertColorsChanged', 'invertColorDidChange'], - ['grayscaleChanged', 'grayscaleModeDidChange'], - ]) - : new Map([ - ['announcementFinished', 'announcementFinished'], - ['boldTextChanged', 'boldTextChanged'], - ['change', 'screenReaderChanged'], - ['grayscaleChanged', 'grayscaleChanged'], - ['invertColorsChanged', 'invertColorsChanged'], - ['reduceMotionChanged', 'reduceMotionChanged'], - ['reduceTransparencyChanged', 'reduceTransparencyChanged'], - ['screenReaderChanged', 'screenReaderChanged'], - ['darkerSystemColorsChanged', 'darkerSystemColorsChanged'], - ]); -======= -const EventNames: Map< - $Keys, - string, -> = Platform.OS === 'android' - ? new Map([ - ['change', 'touchExplorationDidChange'], - ['reduceMotionChanged', 'reduceMotionDidChange'], - ['highTextContrastChanged', 'highTextContrastDidChange'], - ['screenReaderChanged', 'touchExplorationDidChange'], - ['accessibilityServiceChanged', 'accessibilityServiceDidChange'], - ['invertColorsChanged', 'invertColorDidChange'], - ['grayscaleChanged', 'grayscaleModeDidChange'], - ]) - : Platform.OS === 'windows' - ? new Map([ - ['change', 'TOUCH_EXPLORATION_EVENT'], - ['reduceMotionChanged', 'REDUCE_MOTION_EVENT'], - ['screenReaderChanged', 'TOUCH_EXPLORATION_EVENT'], - ]) - : new Map([ - ['announcementFinished', 'announcementFinished'], - ['boldTextChanged', 'boldTextChanged'], - ['change', 'screenReaderChanged'], - ['grayscaleChanged', 'grayscaleChanged'], - ['invertColorsChanged', 'invertColorsChanged'], - ['reduceMotionChanged', 'reduceMotionChanged'], - ['reduceTransparencyChanged', 'reduceTransparencyChanged'], - ['screenReaderChanged', 'screenReaderChanged'], - ['darkerSystemColorsChanged', 'darkerSystemColorsChanged'], - ]); ->>>>>>> Override + : Platform.OS === 'windows' + ? new Map([ + ['change', 'TOUCH_EXPLORATION_EVENT'], + ['reduceMotionChanged', 'REDUCE_MOTION_EVENT'], + ['screenReaderChanged', 'TOUCH_EXPLORATION_EVENT'], + ]) + : new Map([ + ['announcementFinished', 'announcementFinished'], + ['boldTextChanged', 'boldTextChanged'], + ['change', 'screenReaderChanged'], + ['grayscaleChanged', 'grayscaleChanged'], + ['invertColorsChanged', 'invertColorsChanged'], + ['reduceMotionChanged', 'reduceMotionChanged'], + ['reduceTransparencyChanged', 'reduceTransparencyChanged'], + ['screenReaderChanged', 'screenReaderChanged'], + ['darkerSystemColorsChanged', 'darkerSystemColorsChanged'], + ]); /** * Sometimes it's useful to know whether or not the device has a screen reader diff --git a/vnext/src-win/Libraries/Components/TextInput/TextInput.flow.windows.js b/vnext/src-win/Libraries/Components/TextInput/TextInput.flow.windows.js index ee52b791601..286c3f26421 100644 --- a/vnext/src-win/Libraries/Components/TextInput/TextInput.flow.windows.js +++ b/vnext/src-win/Libraries/Components/TextInput/TextInput.flow.windows.js @@ -596,12 +596,7 @@ type TextInputBaseProps = Readonly<{ * * @see https://developer.android.com/reference/android/content/ClipData for more information on MIME types */ -<<<<<<< Upstream experimental_acceptDragAndDropTypes?: ?ReadonlyArray, -||||||| base - experimental_acceptDragAndDropTypes?: ?$ReadOnlyArray, -======= - experimental_acceptDragAndDropTypes?: ?$ReadOnlyArray, /** * String to be read by screenreaders to indicate an error state. The acceptable parameters * of accessibilityErrorMessage is a string. Setting accessibilityInvalid to true activates @@ -609,7 +604,6 @@ type TextInputBaseProps = Readonly<{ */ accessibilityErrorMessage?: ?Stringish, accessibilityInvalid?: ?boolean, ->>>>>>> Override /** * Can tell `TextInput` to automatically capitalize certain characters. diff --git a/vnext/src-win/Libraries/Components/Touchable/Touchable.windows.js b/vnext/src-win/Libraries/Components/Touchable/Touchable.windows.js index 6cfca7a99d4..a0dbcadb3dc 100644 --- a/vnext/src-win/Libraries/Components/Touchable/Touchable.windows.js +++ b/vnext/src-win/Libraries/Components/Touchable/Touchable.windows.js @@ -25,16 +25,10 @@ import Position from './Position'; import * as React from 'react'; const extractSingleTouch = (nativeEvent: { -<<<<<<< Upstream - +changedTouches: ReadonlyArray, -||||||| base - +changedTouches: $ReadOnlyArray, -======= +altKey: ?boolean, +button: ?number, - +changedTouches: $ReadOnlyArray, + +changedTouches: ReadonlyArray, +ctrlKey: ?boolean, ->>>>>>> Override +force?: number, +identifier: number, +locationX: number, diff --git a/vnext/src-win/Libraries/Text/Text.windows.js b/vnext/src-win/Libraries/Text/Text.windows.js index edf45fed9d6..274135803d8 100644 --- a/vnext/src-win/Libraries/Text/Text.windows.js +++ b/vnext/src-win/Libraries/Text/Text.windows.js @@ -38,7 +38,6 @@ type TextForwardRef = React.ElementRef< * * @see https://reactnative.dev/docs/text */ -<<<<<<< Upstream const TextImpl: component( ref?: React.RefSetter, ...props: TextProps @@ -55,6 +54,17 @@ const TextImpl: component( 'aria-expanded': ariaExpanded, 'aria-hidden': ariaHidden, 'aria-label': ariaLabel, + // #[Windows properties + 'aria-multiselectable': ariaMultiselectable, + 'aria-required': ariaRequired, + 'aria-level': ariaLevel, + 'aria-posinset': ariaPosinset, + 'aria-setsize': ariaSetsize, + 'aria-readonly': ariaReadOnly, + accessibilityLevel, + accessibilityPosInSet, + accessibilitySetSize, + // #]Windows properties 'aria-selected': ariaSelected, children, ellipsizeMode, @@ -87,6 +97,12 @@ const TextImpl: component( ...NativeTextProps, }; const _accessibilityLabel = ariaLabel ?? accessibilityLabel; + // #[Windows + const _accessibilityLevel = ariaLevel ?? accessibilityLevel; + const _accessibilityPosInSet = ariaPosinset ?? accessibilityPosInSet; + const _accessibilitySetSize = ariaSetsize ?? accessibilitySetSize; + // #]Windows + let _accessibilityState: ?TextProps['accessibilityState'] = accessibilityState; if ( @@ -94,7 +110,12 @@ const TextImpl: component( ariaChecked != null || ariaDisabled != null || ariaExpanded != null || - ariaSelected != null + ariaSelected != null || + // #[Windows properties + ariaReadOnly != null || + ariaMultiselectable != null || + ariaRequired != null + // #]Windows properties ) { if (_accessibilityState != null) { _accessibilityState = { @@ -103,500 +124,12 @@ const TextImpl: component( disabled: ariaDisabled ?? _accessibilityState.disabled, expanded: ariaExpanded ?? _accessibilityState.expanded, selected: ariaSelected ?? _accessibilityState.selected, -||||||| base -let _TextImpl; -if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { - const TextImplNoDefaultProps: component( - ref?: React.RefSetter, - ...props: TextProps - ) = ({ - ref: forwardedRef, - accessible, - accessibilityLabel, - accessibilityRole, - accessibilityState, - allowFontScaling, - 'aria-busy': ariaBusy, - 'aria-checked': ariaChecked, - 'aria-disabled': ariaDisabled, - 'aria-expanded': ariaExpanded, - 'aria-hidden': ariaHidden, - 'aria-label': ariaLabel, - 'aria-selected': ariaSelected, - children, - ellipsizeMode, - disabled, - id, - nativeID, - numberOfLines, - onLongPress, - onPress, - onPressIn, - onPressOut, - onResponderGrant, - onResponderMove, - onResponderRelease, - onResponderTerminate, - onResponderTerminationRequest, - onStartShouldSetResponder, - pressRetentionOffset, - role, - selectable, - selectionColor, - suppressHighlighting, - style, - ...restProps - }: { - ref?: React.RefSetter, - ...TextProps, - }) => { - const processedProps = restProps as { - ...NativeTextProps, - }; - const _accessibilityLabel = ariaLabel ?? accessibilityLabel; - let _accessibilityState: ?TextProps['accessibilityState'] = - accessibilityState; - if ( - ariaBusy != null || - ariaChecked != null || - ariaDisabled != null || - ariaExpanded != null || - ariaSelected != null - ) { - if (_accessibilityState != null) { - _accessibilityState = { - busy: ariaBusy ?? _accessibilityState.busy, - checked: ariaChecked ?? _accessibilityState.checked, - disabled: ariaDisabled ?? _accessibilityState.disabled, - expanded: ariaExpanded ?? _accessibilityState.expanded, - selected: ariaSelected ?? _accessibilityState.selected, - }; - } else { - _accessibilityState = { - busy: ariaBusy, - checked: ariaChecked, - disabled: ariaDisabled, - expanded: ariaExpanded, - selected: ariaSelected, - }; - } - } - - const _accessibilityStateDisabled = _accessibilityState?.disabled; - const _disabled = disabled ?? _accessibilityStateDisabled; - - // If the disabled prop and accessibilityState.disabled are out of sync but not both in - // falsy states we need to update the accessibilityState object to use the disabled prop. - if ( - _accessibilityState != null && - _disabled !== _accessibilityStateDisabled && - ((_disabled != null && _disabled !== false) || - (_accessibilityStateDisabled != null && - _accessibilityStateDisabled !== false)) - ) { - _accessibilityState.disabled = _disabled; - } - - if (ariaHidden !== undefined) { - processedProps.accessibilityElementsHidden = ariaHidden; - if (ariaHidden === true) { - processedProps.importantForAccessibility = 'no-hide-descendants'; - } - } - - const _accessible = Platform.select({ - ios: accessible !== false, - android: - accessible == null - ? onPress != null || onLongPress != null - : accessible, - default: accessible, - }); - - const isPressable = - (onPress != null || - onLongPress != null || - onStartShouldSetResponder != null) && - _disabled !== true; - - const shouldUseLinkRole = - ReactNativeFeatureFlags.shouldUseLinkRoleForPressableText() && - isPressable && - accessibilityRole == null && - role == null; - - const _accessibilityRole = - accessibilityRole ?? (shouldUseLinkRole ? 'link' : undefined); - - const _role = shouldUseLinkRole ? undefined : role; - - // TODO: Move this processing to the view configuration. - const _selectionColor = - selectionColor != null ? processColor(selectionColor) : undefined; - - let _style = style; - if (__DEV__) { - if (PressabilityDebug.isEnabled() && onPress != null) { - _style = [style, {color: 'magenta'}]; - } - } - - let _numberOfLines = numberOfLines; - if (_numberOfLines != null && !(_numberOfLines >= 0)) { - if (__DEV__) { - console.error( - `'numberOfLines' in must be a non-negative number, received: ${_numberOfLines}. The value will be set to 0.`, - ); - } - _numberOfLines = 0; - } - - let _selectable = selectable; - - let processedStyle = flattenStyle(_style); - if (processedStyle != null) { - let overrides: ?{...TextStyleInternal} = null; - if (typeof processedStyle.fontWeight === 'number') { - overrides = overrides || ({}: {...TextStyleInternal}); - overrides.fontWeight = - // $FlowFixMe[incompatible-type] - (String(processedStyle.fontWeight): TextStyleInternal['fontWeight']); - } - - if (processedStyle.userSelect != null) { - _selectable = userSelectToSelectableMap[processedStyle.userSelect]; - overrides = overrides || ({}: {...TextStyleInternal}); - overrides.userSelect = undefined; - } - - if (processedStyle.verticalAlign != null) { - overrides = overrides || ({}: {...TextStyleInternal}); - overrides.textAlignVertical = - verticalAlignToTextAlignVerticalMap[processedStyle.verticalAlign]; - overrides.verticalAlign = undefined; - } - - if (overrides != null) { - // $FlowFixMe[incompatible-type] - _style = [_style, overrides]; - } - } - - const _nativeID = id ?? nativeID; - - if (_accessibilityLabel !== undefined) { - processedProps.accessibilityLabel = _accessibilityLabel; - } - if (_accessibilityRole !== undefined) { - processedProps.accessibilityRole = _accessibilityRole; - } - if (_accessibilityState !== undefined) { - processedProps.accessibilityState = _accessibilityState; - } - if (_nativeID !== undefined) { - processedProps.nativeID = _nativeID; - } - if (_numberOfLines !== undefined) { - processedProps.numberOfLines = _numberOfLines; - } - if (_selectable !== undefined) { - processedProps.selectable = _selectable; - } - if (_style !== undefined) { - processedProps.style = _style; - } - if (_selectionColor !== undefined) { - processedProps.selectionColor = _selectionColor; - } - if (_role !== undefined) { - processedProps.role = _role; - } - - let textPressabilityProps: ?TextPressabilityProps; - if (isPressable) { - textPressabilityProps = { - onLongPress, - onPress, - onPressIn, - onPressOut, - onResponderGrant, - onResponderMove, - onResponderRelease, - onResponderTerminate, - onResponderTerminationRequest, - onStartShouldSetResponder, - pressRetentionOffset, - suppressHighlighting, -======= -let _TextImpl; -if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { - const TextImplNoDefaultProps: component( - ref?: React.RefSetter, - ...props: TextProps - ) = ({ - ref: forwardedRef, - accessible, - accessibilityLabel, - accessibilityRole, - accessibilityState, - allowFontScaling, - 'aria-busy': ariaBusy, - 'aria-checked': ariaChecked, - 'aria-disabled': ariaDisabled, - 'aria-expanded': ariaExpanded, - 'aria-hidden': ariaHidden, - 'aria-label': ariaLabel, - // #[Windows properties - 'aria-multiselectable': ariaMultiselectable, - 'aria-required': ariaRequired, - 'aria-level': ariaLevel, - 'aria-posinset': ariaPosinset, - 'aria-setsize': ariaSetsize, - 'aria-readonly': ariaReadOnly, - accessibilityLevel, - accessibilityPosInSet, - accessibilitySetSize, - // #]Windows properties - 'aria-selected': ariaSelected, - children, - ellipsizeMode, - disabled, - id, - nativeID, - numberOfLines, - onLongPress, - onPress, - onPressIn, - onPressOut, - onResponderGrant, - onResponderMove, - onResponderRelease, - onResponderTerminate, - onResponderTerminationRequest, - onStartShouldSetResponder, - pressRetentionOffset, - role, - selectable, - selectionColor, - suppressHighlighting, - style, - ...restProps - }: { - ref?: React.RefSetter, - ...TextProps, - }) => { - const processedProps = restProps as { - ...NativeTextProps, - }; - const _accessibilityLabel = ariaLabel ?? accessibilityLabel; - // #[Windows - const _accessibilityLevel = ariaLevel ?? accessibilityLevel; - const _accessibilityPosInSet = ariaPosinset ?? accessibilityPosInSet; - const _accessibilitySetSize = ariaSetsize ?? accessibilitySetSize; - // #]Windows - - let _accessibilityState: ?TextProps['accessibilityState'] = - accessibilityState; - if ( - ariaBusy != null || - ariaChecked != null || - ariaDisabled != null || - ariaExpanded != null || - ariaSelected != null || - // #[Windows properties - ariaReadOnly != null || - ariaMultiselectable != null || - ariaRequired != null - // #]Windows properties - ) { - if (_accessibilityState != null) { - _accessibilityState = { - busy: ariaBusy ?? _accessibilityState.busy, - checked: ariaChecked ?? _accessibilityState.checked, - disabled: ariaDisabled ?? _accessibilityState.disabled, - expanded: ariaExpanded ?? _accessibilityState.expanded, - selected: ariaSelected ?? _accessibilityState.selected, - // #[Windows - readOnly: ariaReadOnly ?? _accessibilityState.readOnly, - multiselectable: - ariaMultiselectable ?? _accessibilityState.multiselectable, - required: ariaRequired ?? _accessibilityState.required, - // #]Windows - }; - } else { - _accessibilityState = { - busy: ariaBusy, - checked: ariaChecked, - disabled: ariaDisabled, - expanded: ariaExpanded, - selected: ariaSelected, - // #[Windows - readOnly: ariaReadOnly, - multiselectable: ariaMultiselectable, - required: ariaRequired, - // #]Windows - }; - } - } - - const _accessibilityStateDisabled = _accessibilityState?.disabled; - const _disabled = disabled ?? _accessibilityStateDisabled; - - // If the disabled prop and accessibilityState.disabled are out of sync but not both in - // falsy states we need to update the accessibilityState object to use the disabled prop. - if ( - _accessibilityState != null && - _disabled !== _accessibilityStateDisabled && - ((_disabled != null && _disabled !== false) || - (_accessibilityStateDisabled != null && - _accessibilityStateDisabled !== false)) - ) { - _accessibilityState.disabled = _disabled; - } - - if (ariaHidden !== undefined) { - processedProps.accessibilityElementsHidden = ariaHidden; - if (ariaHidden === true) { - processedProps.importantForAccessibility = 'no-hide-descendants'; - } - } - - const _accessible = Platform.select({ - ios: accessible !== false, - android: - accessible == null - ? onPress != null || onLongPress != null - : accessible, - default: accessible !== false, // [Windows #13996 - default value is accessible !== false] - }); - - const isPressable = - (onPress != null || - onLongPress != null || - onStartShouldSetResponder != null) && - _disabled !== true; - - const shouldUseLinkRole = - ReactNativeFeatureFlags.shouldUseLinkRoleForPressableText() && - isPressable && - accessibilityRole == null && - role == null; - - const _accessibilityRole = - accessibilityRole ?? (shouldUseLinkRole ? 'link' : undefined); - - const _role = shouldUseLinkRole ? undefined : role; - - // TODO: Move this processing to the view configuration. - const _selectionColor = - selectionColor != null ? processColor(selectionColor) : undefined; - - let _style = style; - if (__DEV__) { - if (PressabilityDebug.isEnabled() && onPress != null) { - _style = [style, {color: 'magenta'}]; - } - } - - let _numberOfLines = numberOfLines; - if (_numberOfLines != null && !(_numberOfLines >= 0)) { - if (__DEV__) { - console.error( - `'numberOfLines' in must be a non-negative number, received: ${_numberOfLines}. The value will be set to 0.`, - ); - } - _numberOfLines = 0; - } - - let _selectable = selectable; - - let processedStyle = flattenStyle(_style); - if (processedStyle != null) { - let overrides: ?{...TextStyleInternal} = null; - if (typeof processedStyle.fontWeight === 'number') { - overrides = overrides || ({}: {...TextStyleInternal}); - overrides.fontWeight = - // $FlowFixMe[incompatible-type] - (String(processedStyle.fontWeight): TextStyleInternal['fontWeight']); - } - - if (processedStyle.userSelect != null) { - _selectable = userSelectToSelectableMap[processedStyle.userSelect]; - overrides = overrides || ({}: {...TextStyleInternal}); - overrides.userSelect = undefined; - } - - if (processedStyle.verticalAlign != null) { - overrides = overrides || ({}: {...TextStyleInternal}); - overrides.textAlignVertical = - verticalAlignToTextAlignVerticalMap[processedStyle.verticalAlign]; - overrides.verticalAlign = undefined; - } - - if (overrides != null) { - // $FlowFixMe[incompatible-type] - _style = [_style, overrides]; - } - } - - const _nativeID = id ?? nativeID; - - if (_accessibilityLabel !== undefined) { - processedProps.accessibilityLabel = _accessibilityLabel; - } - if (_accessibilityRole !== undefined) { - processedProps.accessibilityRole = _accessibilityRole; - } - if (_accessibilityState !== undefined) { - processedProps.accessibilityState = _accessibilityState; - } - if (_nativeID !== undefined) { - processedProps.nativeID = _nativeID; - } - if (_numberOfLines !== undefined) { - processedProps.numberOfLines = _numberOfLines; - } - if (_selectable !== undefined) { - processedProps.selectable = _selectable; - } - if (_style !== undefined) { - processedProps.style = _style; - } - if (_selectionColor !== undefined) { - processedProps.selectionColor = _selectionColor; - } - if (_role !== undefined) { - processedProps.role = _role; - } - - // [Windows accessibility properties - if (ariaLevel !== undefined) { - processedProps.accessibilityLevel = ariaLevel; - } - if (ariaPosinset !== undefined) { - processedProps.accessibilityPosInSet = ariaPosinset; - } - if (ariaSetsize !== undefined) { - processedProps.accessibilitySetSize = ariaSetsize; - } - // ] - - let textPressabilityProps: ?TextPressabilityProps; - if (isPressable) { - textPressabilityProps = { - onLongPress, - onPress, - onPressIn, - onPressOut, - onResponderGrant, - onResponderMove, - onResponderRelease, - onResponderTerminate, - onResponderTerminationRequest, - onStartShouldSetResponder, - pressRetentionOffset, - suppressHighlighting, ->>>>>>> Override + // #[Windows + readOnly: ariaReadOnly ?? _accessibilityState.readOnly, + multiselectable: + ariaMultiselectable ?? _accessibilityState.multiselectable, + required: ariaRequired ?? _accessibilityState.required, + // #]Windows }; } else { _accessibilityState = { @@ -605,9 +138,13 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { disabled: ariaDisabled, expanded: ariaExpanded, selected: ariaSelected, + // #[Windows + readOnly: ariaReadOnly, + multiselectable: ariaMultiselectable, + required: ariaRequired, + // #]Windows }; } -<<<<<<< Upstream } const _accessibilityStateDisabled = _accessibilityState?.disabled; @@ -625,199 +162,6 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { _accessibilityState = {disabled}; } else { _accessibilityState.disabled = _disabled; -||||||| base - - return {nativeText}; - }; - _TextImpl = TextImplNoDefaultProps; -} else { - const TextImplLegacy: component( - ref?: React.RefSetter, - ...props: TextProps - ) = ({ - ref: forwardedRef, - accessible, - accessibilityElementsHidden, - importantForAccessibility, - accessibilityLabel, - accessibilityRole, - accessibilityState, - allowFontScaling, - 'aria-busy': ariaBusy, - 'aria-checked': ariaChecked, - 'aria-disabled': ariaDisabled, - 'aria-expanded': ariaExpanded, - 'aria-hidden': ariaHidden, - 'aria-label': ariaLabel, - 'aria-selected': ariaSelected, - children, - ellipsizeMode, - disabled, - id, - nativeID, - numberOfLines, - onLongPress, - onPress, - onPressIn, - onPressOut, - onResponderGrant, - onResponderMove, - onResponderRelease, - onResponderTerminate, - onResponderTerminationRequest, - onStartShouldSetResponder, - pressRetentionOffset, - role, - selectable, - selectionColor, - suppressHighlighting, - style, - ...restProps - }: { - ref?: React.RefSetter, - ...TextProps, - }) => { - const _accessibilityLabel = ariaLabel ?? accessibilityLabel; - - let _accessibilityState: ?TextProps['accessibilityState'] = - accessibilityState; - if ( - ariaBusy != null || - ariaChecked != null || - ariaDisabled != null || - ariaExpanded != null || - ariaSelected != null - ) { - if (_accessibilityState != null) { - _accessibilityState = { - busy: ariaBusy ?? _accessibilityState.busy, - checked: ariaChecked ?? _accessibilityState.checked, - disabled: ariaDisabled ?? _accessibilityState.disabled, - expanded: ariaExpanded ?? _accessibilityState.expanded, - selected: ariaSelected ?? _accessibilityState.selected, - }; - } else { - _accessibilityState = { - busy: ariaBusy, - checked: ariaChecked, - disabled: ariaDisabled, - expanded: ariaExpanded, - selected: ariaSelected, - }; - } -======= - - return {nativeText}; - }; - _TextImpl = TextImplNoDefaultProps; -} else { - const TextImplLegacy: component( - ref?: React.RefSetter, - ...props: TextProps - ) = ({ - ref: forwardedRef, - accessible, - accessibilityElementsHidden, - importantForAccessibility, - accessibilityLabel, - accessibilityRole, - accessibilityState, - allowFontScaling, - 'aria-busy': ariaBusy, - 'aria-checked': ariaChecked, - 'aria-disabled': ariaDisabled, - 'aria-expanded': ariaExpanded, - 'aria-hidden': ariaHidden, - 'aria-label': ariaLabel, - // #[Windows - 'aria-multiselectable': ariaMultiselectable, // Windows - 'aria-required': ariaRequired, // Windows - 'aria-level': ariaLevel, // Windows - 'aria-posinset': ariaPosinset, // Windows - 'aria-setsize': ariaSetsize, // Windows - 'aria-readonly': ariaReadOnly, //Windows - accessibilityLevel, // Windows - accessibilityPosInSet, // Windows - accessibilitySetSize, // Windows - // #]Windows - 'aria-selected': ariaSelected, - children, - ellipsizeMode, - disabled, - id, - nativeID, - numberOfLines, - onLongPress, - onPress, - onPressIn, - onPressOut, - onResponderGrant, - onResponderMove, - onResponderRelease, - onResponderTerminate, - onResponderTerminationRequest, - onStartShouldSetResponder, - pressRetentionOffset, - role, - selectable, - selectionColor, - suppressHighlighting, - style, - ...restProps - }: { - ref?: React.RefSetter, - ...TextProps, - }) => { - const _accessibilityLabel = ariaLabel ?? accessibilityLabel; - // [# Windows - const _accessibilityLevel = ariaLevel ?? accessibilityLevel; - const _accessibilityPosInSet = ariaPosinset ?? accessibilityPosInSet; - const _accessibilitySetSize = ariaSetsize ?? accessibilitySetSize; - // ]# Windows - - let _accessibilityState: ?TextProps['accessibilityState'] = - accessibilityState; - if ( - ariaBusy != null || - ariaChecked != null || - ariaDisabled != null || - ariaExpanded != null || - ariaSelected != null || - // #[Windows - ariaReadOnly != null || // Windows - ariaMultiselectable != null || // Windows - ariaRequired != null // Windows - // #]Windows - ) { - if (_accessibilityState != null) { - _accessibilityState = { - busy: ariaBusy ?? _accessibilityState.busy, - checked: ariaChecked ?? _accessibilityState.checked, - disabled: ariaDisabled ?? _accessibilityState.disabled, - expanded: ariaExpanded ?? _accessibilityState.expanded, - selected: ariaSelected ?? _accessibilityState.selected, - // #[Windows - readOnly: ariaReadOnly ?? _accessibilityState.readOnly, // Windows - multiselectable: - ariaMultiselectable ?? _accessibilityState.multiselectable, // Windows - required: ariaRequired ?? _accessibilityState.required, // Windows - // #]Windows - }; - } else { - _accessibilityState = { - busy: ariaBusy, - checked: ariaChecked, - disabled: ariaDisabled, - expanded: ariaExpanded, - selected: ariaSelected, - // #[Windows - readOnly: ariaReadOnly, // Windows - multiselectable: ariaMultiselectable, // Windows - required: ariaRequired, // Windows - // #]Windows - }; - } ->>>>>>> Override } } @@ -832,7 +176,7 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { ios: accessible !== false, android: accessible == null ? onPress != null || onLongPress != null : accessible, - default: accessible, + default: accessible !== false, // [Windows #13996 - default value is accessible !== false] }); const isPressable = @@ -882,142 +226,10 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { (String(processedStyle.fontWeight): TextStyleInternal['fontWeight']); } -<<<<<<< Upstream if (processedStyle.userSelect != null) { _selectable = userSelectToSelectableMap[processedStyle.userSelect]; overrides = overrides || ({}: {...TextStyleInternal}); overrides.userSelect = undefined; -||||||| base - const _nativeID = id ?? nativeID; - - const hasTextAncestor = useContext(TextAncestorContext); - if (hasTextAncestor) { - if (isPressable) { - return ( - - ); - } - - return ( - - {children} - - ); -======= - const _nativeID = id ?? nativeID; - - const hasTextAncestor = useContext(TextAncestorContext); - if (hasTextAncestor) { - if (isPressable) { - return ( - - ); - } - - return ( - - {children} - - ); ->>>>>>> Override } if (processedStyle.verticalAlign != null) { @@ -1027,7 +239,6 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { overrides.verticalAlign = undefined; } -<<<<<<< Upstream if (overrides != null) { // $FlowFixMe[incompatible-type] _style = [_style, overrides]; @@ -1064,6 +275,18 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { processedProps.role = _role; } + // [Windows accessibility properties + if (_accessibilityLevel !== undefined) { + processedProps.accessibilityLevel = _accessibilityLevel; + } + if (_accessibilityPosInSet !== undefined) { + processedProps.accessibilityPosInSet = _accessibilityPosInSet; + } + if (_accessibilitySetSize !== undefined) { + processedProps.accessibilitySetSize = _accessibilitySetSize; + } + // ] + let textPressabilityProps: ?TextPressabilityProps; if (isPressable) { textPressabilityProps = { @@ -1081,25 +304,6 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { suppressHighlighting, }; } -||||||| base - const _accessible = Platform.select({ - ios: accessible !== false, - android: - accessible == null - ? onPress != null || onLongPress != null - : accessible, - default: accessible, - }); -======= - const _accessible = Platform.select({ - ios: accessible !== false, - android: - accessible == null - ? onPress != null || onLongPress != null - : accessible, - default: accessible !== false, // [Windows #13996 - default value is accessible !== false] - }); ->>>>>>> Override const hasTextAncestor = useContext(TextAncestorContext); if (hasTextAncestor) { @@ -1113,61 +317,6 @@ if (ReactNativeFeatureFlags.reduceDefaultPropsInText()) { textPressabilityProps={textPressabilityProps ?? {}} /> ); -<<<<<<< Upstream -||||||| base - } else { - nativeText = ( - - {children} - - ); -======= - } else { - nativeText = ( - - {children} - - ); ->>>>>>> Override } return ; } From cb9f14b78b7fb7d273b8d95cd4ebf495103e29f1 Mon Sep 17 00:00:00 2001 From: Anukrati Agrawal Date: Thu, 4 Jun 2026 14:52:44 -0700 Subject: [PATCH 3/6] Fix C++ compile errors from nightly integration - ReactCommon.vcxproj: Suppress C4267 warning in upstream MapBuffer.cpp (size_t to int32_t conversion, warnings-as-errors) - ImageComponentView.cpp: Adapt to upstream API change where addObserver/removeObserver now take shared_ptr instead of raw reference Linker errors (AnimationBackend) remain to be addressed in next iteration. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Fabric/Composition/ImageComponentView.cpp | 4 ++-- vnext/ReactCommon/ReactCommon.vcxproj | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.cpp b/vnext/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.cpp index b1fbb6a8596..6688675615d 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.cpp +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.cpp @@ -189,14 +189,14 @@ void ImageComponentView::setStateAndResubscribeImageResponseObserver( facebook::react::ImageShadowNode::ConcreteState::Shared const &state) noexcept { if (m_state) { auto &observerCoordinator = m_state->getData().getImageRequest().getObserverCoordinator(); - observerCoordinator.removeObserver(*m_imageResponseObserver); + observerCoordinator.removeObserver(m_imageResponseObserver); } m_state = state; if (m_state) { auto &observerCoordinator = m_state->getData().getImageRequest().getObserverCoordinator(); - observerCoordinator.addObserver(*m_imageResponseObserver); + observerCoordinator.addObserver(m_imageResponseObserver); } } diff --git a/vnext/ReactCommon/ReactCommon.vcxproj b/vnext/ReactCommon/ReactCommon.vcxproj index f7b18472c64..04826c3b393 100644 --- a/vnext/ReactCommon/ReactCommon.vcxproj +++ b/vnext/ReactCommon/ReactCommon.vcxproj @@ -178,7 +178,7 @@ - + From a84020e1f00dd0cc486c9316ab645f42c3c6396f Mon Sep 17 00:00:00 2001 From: Anukrati Agrawal Date: Thu, 4 Jun 2026 15:47:16 -0700 Subject: [PATCH 4/6] Fix AnimationBackend linker errors from nightly integration Add new upstream animationbackend module source files to ReactCommon.vcxproj: - AnimatedPropSerializer.cpp - AnimatedPropsRegistry.cpp - AnimationBackend.cpp - AnimationBackendCommitHook.cpp Create Windows-patched AnimatedPropSerializer.cpp in TEMP_UntilReactCommonUpdate to handle platform Color struct (not int32_t on Windows) with colorToInt32() helper. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- vnext/ReactCommon/ReactCommon.vcxproj | 4 + .../AnimatedPropSerializer.cpp | 728 ++++++++++++++++++ 2 files changed, 732 insertions(+) create mode 100644 vnext/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/animationbackend/AnimatedPropSerializer.cpp diff --git a/vnext/ReactCommon/ReactCommon.vcxproj b/vnext/ReactCommon/ReactCommon.vcxproj index 04826c3b393..087b729624d 100644 --- a/vnext/ReactCommon/ReactCommon.vcxproj +++ b/vnext/ReactCommon/ReactCommon.vcxproj @@ -185,6 +185,10 @@ + + + + diff --git a/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/animationbackend/AnimatedPropSerializer.cpp b/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/animationbackend/AnimatedPropSerializer.cpp new file mode 100644 index 00000000000..e67040337e7 --- /dev/null +++ b/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/animationbackend/AnimatedPropSerializer.cpp @@ -0,0 +1,728 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include +#include "AnimatedPropsSerializer.h" +#include + +namespace facebook::react { + +namespace { + +// [Windows] Helper to convert platform Color to int32_t ARGB format +// On other platforms Color is already int32_t, but on Windows it's a struct. +inline int32_t colorToInt32(const Color& color) { + auto c = color.AsWindowsColor(); + return static_cast((c.A << 24) | (c.R << 16) | (c.G << 8) | c.B); +} + + +void packBorderRadiusCorner( + folly::dynamic& dyn, + const std::string& propName, + const std::optional& cornerValue) { + if (cornerValue.has_value()) { + dyn.insert(propName, cornerValue.value().value); + } +} + +void packBorderRadii( + folly::dynamic& dyn, + const AnimatedPropBase& animatedProp) { + const auto& borderRadii = get(animatedProp); + + packBorderRadiusCorner(dyn, "borderTopRightRadius", borderRadii.topRight); + packBorderRadiusCorner(dyn, "borderTopLeftRadius", borderRadii.topLeft); + packBorderRadiusCorner( + dyn, "borderBottomRightRadius", borderRadii.bottomRight); + packBorderRadiusCorner(dyn, "borderBottomLeftRadius", borderRadii.bottomLeft); + packBorderRadiusCorner(dyn, "borderTopStartRadius", borderRadii.topStart); + packBorderRadiusCorner(dyn, "borderTopEndRadius", borderRadii.topEnd); + packBorderRadiusCorner( + dyn, "borderBottomStartRadius", borderRadii.bottomStart); + packBorderRadiusCorner(dyn, "borderBottomEndRadius", borderRadii.bottomEnd); + packBorderRadiusCorner(dyn, "borderStartStartRadius", borderRadii.startStart); + packBorderRadiusCorner(dyn, "borderStartEndRadius", borderRadii.startEnd); + packBorderRadiusCorner(dyn, "borderEndStartRadius", borderRadii.endStart); + packBorderRadiusCorner(dyn, "borderEndEndRadius", borderRadii.endEnd); + + if (borderRadii.all.has_value()) { + dyn.insert("borderRadius", borderRadii.all.value().value); + } +} + +void packOpacity(folly::dynamic& dyn, const AnimatedPropBase& animatedProp) { + dyn.insert("opacity", get(animatedProp)); +} + +void packTransform(folly::dynamic& dyn, const AnimatedPropBase& animatedProp) { + const auto transform = get(animatedProp); + const auto matrixArray = folly::dynamic::array( + transform.matrix[0], + transform.matrix[1], + transform.matrix[2], + transform.matrix[3], + transform.matrix[4], + transform.matrix[5], + transform.matrix[6], + transform.matrix[7], + transform.matrix[8], + transform.matrix[9], + transform.matrix[10], + transform.matrix[11], + transform.matrix[12], + transform.matrix[13], + transform.matrix[14], + transform.matrix[15]); + dyn.insert( + "transform", + folly::dynamic::array(folly::dynamic::object("matrix", matrixArray))); +} + +std::string unitTypeToString(UnitType unit) { + switch (unit) { + case UnitType::Undefined: + return "undefined"; + case UnitType::Point: + return "point"; + case UnitType::Percent: + return "percent"; + default: + throw std::runtime_error("Unknown unit type"); + } +} + +void packTransformOrigin( + folly::dynamic& dyn, + const AnimatedPropBase& animatedProp) { + const auto& transformOrigin = get(animatedProp); + auto originArray = folly::dynamic::array(); + for (const auto& xyValue : transformOrigin.xy) { + folly::dynamic valueObj = folly::dynamic::object(); + valueObj["value"] = xyValue.value; + valueObj["unit"] = unitTypeToString(xyValue.unit); + originArray.push_back(valueObj); + } + originArray.push_back(transformOrigin.z); + dyn.insert("transformOrigin", originArray); +} + +void packBackgroundColor( + folly::dynamic& dyn, + const AnimatedPropBase& animatedProp) { + const auto& backgroundColor = get(animatedProp); + dyn.insert("backgroundColor", colorToInt32(*backgroundColor)); +} + +void packShadowColor( + folly::dynamic& dyn, + const AnimatedPropBase& animatedProp) { + const auto& shadowColor = get(animatedProp); + dyn.insert("shadowColor", colorToInt32(*shadowColor)); +} + +void packShadowOffset( + folly::dynamic& dyn, + const AnimatedPropBase& animatedProp) { + const auto& shadowOffset = get(animatedProp); + dyn.insert( + "shadowOffset", + folly::dynamic::object("width", shadowOffset.width)( + "height", shadowOffset.height)); +} + +void packShadowOpacity( + folly::dynamic& dyn, + const AnimatedPropBase& animatedProp) { + dyn.insert("shadowOpacity", get(animatedProp)); +} + +void packShadowRadius( + folly::dynamic& dyn, + const AnimatedPropBase& animatedProp) { + dyn.insert("shadowRadius", get(animatedProp)); +} + +void packBorderColorEdge( + folly::dynamic& dyn, + const std::string& propName, + const std::optional& colorValue) { + if (colorValue.has_value() && colorValue.value()) { + dyn.insert(propName, colorToInt32(*colorValue.value())); + } +} + +void packBorderColor( + folly::dynamic& dyn, + const AnimatedPropBase& animatedProp) { + const auto& borderColors = get(animatedProp); + + packBorderColorEdge(dyn, "borderLeftColor", borderColors.left); + packBorderColorEdge(dyn, "borderTopColor", borderColors.top); + packBorderColorEdge(dyn, "borderRightColor", borderColors.right); + packBorderColorEdge(dyn, "borderBottomColor", borderColors.bottom); + packBorderColorEdge(dyn, "borderStartColor", borderColors.start); + packBorderColorEdge(dyn, "borderEndColor", borderColors.end); + + if (borderColors.all.has_value() && borderColors.all.value()) { + dyn.insert("borderColor", colorToInt32(*borderColors.all.value())); + } +} + +void packFilter(folly::dynamic& dyn, const AnimatedPropBase& animatedProp) { + const auto& filters = get>(animatedProp); + auto filterArray = folly::dynamic::array(); + for (const auto& f : filters) { + folly::dynamic filterObj = folly::dynamic::object(); + std::string typeKey = toString(f.type); + if (std::holds_alternative(f.parameters)) { + filterObj[typeKey] = std::get(f.parameters); + } else if (std::holds_alternative(f.parameters)) { + const auto& dropShadowParams = std::get(f.parameters); + folly::dynamic shadowObj = folly::dynamic::object(); + shadowObj["offsetX"] = dropShadowParams.offsetX; + shadowObj["offsetY"] = dropShadowParams.offsetY; + shadowObj["standardDeviation"] = dropShadowParams.standardDeviation; + shadowObj["color"] = colorToInt32(*dropShadowParams.color); + filterObj[typeKey] = shadowObj; + } + filterArray.push_back(filterObj); + } + dyn.insert("filter", filterArray); +} + +void packOutlineColor( + folly::dynamic& dyn, + const AnimatedPropBase& animatedProp) { + const auto& outlineColor = get(animatedProp); + dyn.insert("outlineColor", colorToInt32(*outlineColor)); +} + +void packOutlineOffset( + folly::dynamic& dyn, + const AnimatedPropBase& animatedProp) { + dyn.insert("outlineOffset", get(animatedProp)); +} + +void packOutlineStyle( + folly::dynamic& dyn, + const AnimatedPropBase& animatedProp) { + const auto& outlineStyle = get(animatedProp); + std::string styleStr; + switch (outlineStyle) { + case OutlineStyle::Solid: + styleStr = "solid"; + break; + case OutlineStyle::Dotted: + styleStr = "dotted"; + break; + case OutlineStyle::Dashed: + styleStr = "dashed"; + break; + default: + throw std::runtime_error("Unknown outline style"); + } + dyn.insert("outlineStyle", styleStr); +} + +void packOutlineWidth( + folly::dynamic& dyn, + const AnimatedPropBase& animatedProp) { + dyn.insert("outlineWidth", get(animatedProp)); +} + +void packBorderCurveEdge( + folly::dynamic& dyn, + const std::string& propName, + const std::optional& curveValue) { + if (curveValue.has_value()) { + std::string curveStr; + switch (curveValue.value()) { + case BorderCurve::Circular: + curveStr = "circular"; + break; + case BorderCurve::Continuous: + curveStr = "continuous"; + break; + default: + throw std::runtime_error("Unknown border curve"); + } + dyn.insert(propName, curveStr); + } +} + +void packBorderCurves( + folly::dynamic& dyn, + const AnimatedPropBase& animatedProp) { + const auto& borderCurves = get(animatedProp); + + packBorderCurveEdge(dyn, "borderTopLeftCurve", borderCurves.topLeft); + packBorderCurveEdge(dyn, "borderTopRightCurve", borderCurves.topRight); + packBorderCurveEdge(dyn, "borderBottomLeftCurve", borderCurves.bottomLeft); + packBorderCurveEdge(dyn, "borderBottomRightCurve", borderCurves.bottomRight); + + if (borderCurves.all.has_value()) { + std::string curveStr; + switch (borderCurves.all.value()) { + case BorderCurve::Circular: + curveStr = "circular"; + break; + case BorderCurve::Continuous: + curveStr = "continuous"; + break; + default: + throw std::runtime_error("Unknown border curve"); + } + dyn.insert("borderCurve", curveStr); + } +} + +std::string borderStyleToString(BorderStyle style) { + switch (style) { + case BorderStyle::Solid: + return "solid"; + case BorderStyle::Dotted: + return "dotted"; + case BorderStyle::Dashed: + return "dashed"; + default: + throw std::runtime_error("Unknown border style"); + } +} + +void packBorderStyleEdge( + folly::dynamic& dyn, + const std::string& propName, + const std::optional& styleValue) { + if (styleValue.has_value()) { + dyn.insert(propName, borderStyleToString(styleValue.value())); + } +} + +void packBorderStyles( + folly::dynamic& dyn, + const AnimatedPropBase& animatedProp) { + const auto& borderStyles = get(animatedProp); + + packBorderStyleEdge(dyn, "borderLeftStyle", borderStyles.left); + packBorderStyleEdge(dyn, "borderTopStyle", borderStyles.top); + packBorderStyleEdge(dyn, "borderRightStyle", borderStyles.right); + packBorderStyleEdge(dyn, "borderBottomStyle", borderStyles.bottom); + packBorderStyleEdge(dyn, "borderStartStyle", borderStyles.start); + packBorderStyleEdge(dyn, "borderEndStyle", borderStyles.end); + + if (borderStyles.all.has_value()) { + dyn.insert("borderStyle", borderStyleToString(borderStyles.all.value())); + } +} + +void packPointerEvents( + folly::dynamic& dyn, + const AnimatedPropBase& animatedProp) { + const auto& pointerEvents = get(animatedProp); + std::string pointerEventsStr; + switch (pointerEvents) { + case PointerEventsMode::Auto: + pointerEventsStr = "auto"; + break; + case PointerEventsMode::None: + pointerEventsStr = "none"; + break; + case PointerEventsMode::BoxNone: + pointerEventsStr = "box-none"; + break; + case PointerEventsMode::BoxOnly: + pointerEventsStr = "box-only"; + break; + default: + throw std::runtime_error("Unknown pointer events mode"); + } + dyn.insert("pointerEvents", pointerEventsStr); +} + +void packIsolation(folly::dynamic& dyn, const AnimatedPropBase& animatedProp) { + const auto& isolation = get(animatedProp); + std::string isolationStr; + switch (isolation) { + case Isolation::Auto: + isolationStr = "auto"; + break; + case Isolation::Isolate: + isolationStr = "isolate"; + break; + default: + throw std::runtime_error("Unknown isolation mode"); + } + dyn.insert("isolation", isolationStr); +} + +void packCursor(folly::dynamic& dyn, const AnimatedPropBase& animatedProp) { + const auto& cursor = get(animatedProp); + std::string cursorStr; + switch (cursor) { + case Cursor::Auto: + cursorStr = "auto"; + break; + case Cursor::Alias: + cursorStr = "alias"; + break; + case Cursor::AllScroll: + cursorStr = "all-scroll"; + break; + case Cursor::Cell: + cursorStr = "cell"; + break; + case Cursor::ColResize: + cursorStr = "col-resize"; + break; + case Cursor::ContextMenu: + cursorStr = "context-menu"; + break; + case Cursor::Copy: + cursorStr = "copy"; + break; + case Cursor::Crosshair: + cursorStr = "crosshair"; + break; + case Cursor::Default: + cursorStr = "default"; + break; + case Cursor::EResize: + cursorStr = "e-resize"; + break; + case Cursor::EWResize: + cursorStr = "ew-resize"; + break; + case Cursor::Grab: + cursorStr = "grab"; + break; + case Cursor::Grabbing: + cursorStr = "grabbing"; + break; + case Cursor::Help: + cursorStr = "help"; + break; + case Cursor::Move: + cursorStr = "move"; + break; + case Cursor::NResize: + cursorStr = "n-resize"; + break; + case Cursor::NEResize: + cursorStr = "ne-resize"; + break; + case Cursor::NESWResize: + cursorStr = "nesw-resize"; + break; + case Cursor::NSResize: + cursorStr = "ns-resize"; + break; + case Cursor::NWResize: + cursorStr = "nw-resize"; + break; + case Cursor::NWSEResize: + cursorStr = "nwse-resize"; + break; + case Cursor::NoDrop: + cursorStr = "no-drop"; + break; + case Cursor::None: + cursorStr = "none"; + break; + case Cursor::NotAllowed: + cursorStr = "not-allowed"; + break; + case Cursor::Pointer: + cursorStr = "pointer"; + break; + case Cursor::Progress: + cursorStr = "progress"; + break; + case Cursor::RowResize: + cursorStr = "row-resize"; + break; + case Cursor::SResize: + cursorStr = "s-resize"; + break; + case Cursor::SEResize: + cursorStr = "se-resize"; + break; + case Cursor::SWResize: + cursorStr = "sw-resize"; + break; + case Cursor::Text: + cursorStr = "text"; + break; + case Cursor::Url: + cursorStr = "url"; + break; + case Cursor::WResize: + cursorStr = "w-resize"; + break; + case Cursor::Wait: + cursorStr = "wait"; + break; + case Cursor::ZoomIn: + cursorStr = "zoom-in"; + break; + case Cursor::ZoomOut: + cursorStr = "zoom-out"; + break; + default: + throw std::runtime_error("Unknown cursor type"); + } + dyn.insert("cursor", cursorStr); +} + +void packBoxShadow(folly::dynamic& dyn, const AnimatedPropBase& animatedProp) { + const auto& boxShadows = get>(animatedProp); + auto shadowArray = folly::dynamic::array(); + for (const auto& shadow : boxShadows) { + folly::dynamic shadowObj = folly::dynamic::object(); + shadowObj["offsetX"] = shadow.offsetX; + shadowObj["offsetY"] = shadow.offsetY; + shadowObj["blurRadius"] = shadow.blurRadius; + shadowObj["spreadDistance"] = shadow.spreadDistance; + shadowObj["inset"] = shadow.inset; + if (shadow.color) { + shadowObj["color"] = colorToInt32(*shadow.color); + } + shadowArray.push_back(shadowObj); + } + dyn.insert("boxShadow", shadowArray); +} + +void packMixBlendMode( + folly::dynamic& dyn, + const AnimatedPropBase& animatedProp) { + const auto& mixBlendMode = get(animatedProp); + std::string blendModeStr; + switch (mixBlendMode) { + case BlendMode::Normal: + blendModeStr = "normal"; + break; + case BlendMode::Multiply: + blendModeStr = "multiply"; + break; + case BlendMode::Screen: + blendModeStr = "screen"; + break; + case BlendMode::Overlay: + blendModeStr = "overlay"; + break; + case BlendMode::Darken: + blendModeStr = "darken"; + break; + case BlendMode::Lighten: + blendModeStr = "lighten"; + break; + case BlendMode::ColorDodge: + blendModeStr = "color-dodge"; + break; + case BlendMode::ColorBurn: + blendModeStr = "color-burn"; + break; + case BlendMode::HardLight: + blendModeStr = "hard-light"; + break; + case BlendMode::SoftLight: + blendModeStr = "soft-light"; + break; + case BlendMode::Difference: + blendModeStr = "difference"; + break; + case BlendMode::Exclusion: + blendModeStr = "exclusion"; + break; + case BlendMode::Hue: + blendModeStr = "hue"; + break; + case BlendMode::Saturation: + blendModeStr = "saturation"; + break; + case BlendMode::Color: + blendModeStr = "color"; + break; + case BlendMode::Luminosity: + blendModeStr = "luminosity"; + break; + default: + throw std::runtime_error("Unknown blend mode"); + } + dyn.insert("mixBlendMode", blendModeStr); +} + +void packBackfaceVisibility( + folly::dynamic& dyn, + const AnimatedPropBase& animatedProp) { + const auto& backfaceVisibility = get(animatedProp); + std::string visibilityStr; + switch (backfaceVisibility) { + case BackfaceVisibility::Auto: + visibilityStr = "auto"; + break; + case BackfaceVisibility::Visible: + visibilityStr = "visible"; + break; + case BackfaceVisibility::Hidden: + visibilityStr = "hidden"; + break; + default: + throw std::runtime_error("Unknown backface visibility"); + } + dyn.insert("backfaceVisibility", visibilityStr); +} + +void packAnimatedProp( + folly::dynamic& dyn, + const std::unique_ptr& animatedProp) { + switch (animatedProp->propName) { + case OPACITY: + packOpacity(dyn, *animatedProp); + break; + + case TRANSFORM: + packTransform(dyn, *animatedProp); + break; + + case TRANSFORM_ORIGIN: + packTransformOrigin(dyn, *animatedProp); + break; + + case BACKGROUND_COLOR: + packBackgroundColor(dyn, *animatedProp); + break; + + case BORDER_RADII: + packBorderRadii(dyn, *animatedProp); + break; + + case SHADOW_COLOR: + packShadowColor(dyn, *animatedProp); + break; + + case SHADOW_OFFSET: + packShadowOffset(dyn, *animatedProp); + break; + + case SHADOW_OPACITY: + packShadowOpacity(dyn, *animatedProp); + break; + + case SHADOW_RADIUS: + packShadowRadius(dyn, *animatedProp); + break; + + case BORDER_COLOR: + packBorderColor(dyn, *animatedProp); + break; + + case FILTER: + packFilter(dyn, *animatedProp); + break; + + case OUTLINE_COLOR: + packOutlineColor(dyn, *animatedProp); + break; + + case OUTLINE_OFFSET: + packOutlineOffset(dyn, *animatedProp); + break; + + case OUTLINE_STYLE: + packOutlineStyle(dyn, *animatedProp); + break; + + case OUTLINE_WIDTH: + packOutlineWidth(dyn, *animatedProp); + break; + + case BORDER_CURVES: + packBorderCurves(dyn, *animatedProp); + break; + + case BORDER_STYLES: + packBorderStyles(dyn, *animatedProp); + break; + + case POINTER_EVENTS: + packPointerEvents(dyn, *animatedProp); + break; + + case ISOLATION: + packIsolation(dyn, *animatedProp); + break; + + case CURSOR: + packCursor(dyn, *animatedProp); + break; + + case BOX_SHADOW: + packBoxShadow(dyn, *animatedProp); + break; + + case MIX_BLEND_MODE: + packMixBlendMode(dyn, *animatedProp); + break; + + case BACKFACE_VISIBILITY: + packBackfaceVisibility(dyn, *animatedProp); + break; + + case WIDTH: + case HEIGHT: + case FLEX: + case PADDING: + case MARGIN: + case POSITION: + case BORDER_WIDTH: + case ALIGN_CONTENT: + case ALIGN_ITEMS: + case ALIGN_SELF: + case ASPECT_RATIO: + case BOX_SIZING: + case DISPLAY: + case FLEX_BASIS: + case FLEX_DIRECTION: + case ROW_GAP: + case COLUMN_GAP: + case FLEX_GROW: + case FLEX_SHRINK: + case FLEX_WRAP: + case JUSTIFY_CONTENT: + case MAX_HEIGHT: + case MAX_WIDTH: + case MIN_HEIGHT: + case MIN_WIDTH: + case STYLE_OVERFLOW: + case POSITION_TYPE: + case Z_INDEX: + case DIRECTION: + throw std::runtime_error("Tried to synchronously update layout props"); + default: + throw std::runtime_error("Unknown animated prop"); + } +} + +} // namespace + +namespace animationbackend { + +folly::dynamic packAnimatedProps(const AnimatedProps& animatedProps) { + auto dyn = animatedProps.rawProps ? animatedProps.rawProps->toDynamic() + : folly::dynamic::object(); + + for (auto& animatedProp : animatedProps.props) { + packAnimatedProp(dyn, animatedProp); + } + + return dyn; +} + +} // namespace animationbackend + +} // namespace facebook::react From f1c0bf0b092d07c4b0449b6418e858548be97058 Mon Sep 17 00:00:00 2001 From: Anukrati Agrawal Date: Thu, 4 Jun 2026 15:53:16 -0700 Subject: [PATCH 5/6] Change files --- ...-native-win32-a9e23f9c-3200-4e7b-a927-c1524d5f3be2.json | 7 +++++++ ...ation-channel-de51f219-371f-459d-9dd7-365fb91cfbc0.json | 7 +++++++ ...e-windows-cli-b5d209e0-f9dc-4cfc-8dfa-d25841689ae1.json | 7 +++++++ ...-perf-testing-c7b38639-cd88-4506-84a4-1c9e0367f703.json | 7 +++++++ ...ative-windows-0e30cb57-509c-4f17-b53d-85afe42a7aed.json | 7 +++++++ ...-windows-init-45c7b878-1e1d-4199-8d6b-1f38e4c2c557.json | 7 +++++++ 6 files changed, 42 insertions(+) create mode 100644 change/@office-iss-react-native-win32-a9e23f9c-3200-4e7b-a927-c1524d5f3be2.json create mode 100644 change/@react-native-windows-automation-channel-de51f219-371f-459d-9dd7-365fb91cfbc0.json create mode 100644 change/@react-native-windows-cli-b5d209e0-f9dc-4cfc-8dfa-d25841689ae1.json create mode 100644 change/@react-native-windows-perf-testing-c7b38639-cd88-4506-84a4-1c9e0367f703.json create mode 100644 change/react-native-windows-0e30cb57-509c-4f17-b53d-85afe42a7aed.json create mode 100644 change/react-native-windows-init-45c7b878-1e1d-4199-8d6b-1f38e4c2c557.json diff --git a/change/@office-iss-react-native-win32-a9e23f9c-3200-4e7b-a927-c1524d5f3be2.json b/change/@office-iss-react-native-win32-a9e23f9c-3200-4e7b-a927-c1524d5f3be2.json new file mode 100644 index 00000000000..10992742cf9 --- /dev/null +++ b/change/@office-iss-react-native-win32-a9e23f9c-3200-4e7b-a927-c1524d5f3be2.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Integrate RN 0.85.0-nightly-20260128-36f07a1b2", + "packageName": "@office-iss/react-native-win32", + "email": "email not defined", + "dependentChangeType": "patch" +} diff --git a/change/@react-native-windows-automation-channel-de51f219-371f-459d-9dd7-365fb91cfbc0.json b/change/@react-native-windows-automation-channel-de51f219-371f-459d-9dd7-365fb91cfbc0.json new file mode 100644 index 00000000000..f7f096d84f0 --- /dev/null +++ b/change/@react-native-windows-automation-channel-de51f219-371f-459d-9dd7-365fb91cfbc0.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Integrate RN 0.85.0-nightly-20260128-36f07a1b2", + "packageName": "@react-native-windows/automation-channel", + "email": "email not defined", + "dependentChangeType": "patch" +} diff --git a/change/@react-native-windows-cli-b5d209e0-f9dc-4cfc-8dfa-d25841689ae1.json b/change/@react-native-windows-cli-b5d209e0-f9dc-4cfc-8dfa-d25841689ae1.json new file mode 100644 index 00000000000..6bd0ef0ec0f --- /dev/null +++ b/change/@react-native-windows-cli-b5d209e0-f9dc-4cfc-8dfa-d25841689ae1.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Integrate RN 0.85.0-nightly-20260128-36f07a1b2", + "packageName": "@react-native-windows/cli", + "email": "email not defined", + "dependentChangeType": "patch" +} diff --git a/change/@react-native-windows-perf-testing-c7b38639-cd88-4506-84a4-1c9e0367f703.json b/change/@react-native-windows-perf-testing-c7b38639-cd88-4506-84a4-1c9e0367f703.json new file mode 100644 index 00000000000..bcdff5e2d99 --- /dev/null +++ b/change/@react-native-windows-perf-testing-c7b38639-cd88-4506-84a4-1c9e0367f703.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Integrate RN 0.85.0-nightly-20260128-36f07a1b2", + "packageName": "@react-native-windows/perf-testing", + "email": "email not defined", + "dependentChangeType": "patch" +} diff --git a/change/react-native-windows-0e30cb57-509c-4f17-b53d-85afe42a7aed.json b/change/react-native-windows-0e30cb57-509c-4f17-b53d-85afe42a7aed.json new file mode 100644 index 00000000000..fe1d10dfd5f --- /dev/null +++ b/change/react-native-windows-0e30cb57-509c-4f17-b53d-85afe42a7aed.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Integrate RN 0.85.0-nightly-20260128-36f07a1b2", + "packageName": "react-native-windows", + "email": "email not defined", + "dependentChangeType": "patch" +} diff --git a/change/react-native-windows-init-45c7b878-1e1d-4199-8d6b-1f38e4c2c557.json b/change/react-native-windows-init-45c7b878-1e1d-4199-8d6b-1f38e4c2c557.json new file mode 100644 index 00000000000..8003b4455b9 --- /dev/null +++ b/change/react-native-windows-init-45c7b878-1e1d-4199-8d6b-1f38e4c2c557.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Integrate RN 0.85.0-nightly-20260128-36f07a1b2", + "packageName": "react-native-windows-init", + "email": "email not defined", + "dependentChangeType": "patch" +} From e5e1488241f64f91392654373fd8d271f6d4b108 Mon Sep 17 00:00:00 2001 From: Anukrati Agrawal Date: Thu, 4 Jun 2026 15:53:34 -0700 Subject: [PATCH 6/6] Update yarn.lock and add change files Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- yarn.lock | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 45f3c614e80..c52ae009cef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4568,13 +4568,13 @@ __metadata: eslint-plugin-ft-flow: "npm:^2.0.1" eslint-plugin-jest: "npm:^29.0.1" eslint-plugin-jsx-a11y: "npm:^6.6.0" - eslint-plugin-react: "npm:^7.30.1" + eslint-plugin-react: "npm:^7.37.5" eslint-plugin-react-native: "npm:^5.0.0" eslint-plugin-redundant-undefined: "npm:^0.4.0" eslint-plugin-relay: "npm:^1.8.3" fb-dotslash: "npm:0.5.8" flow-api-translator: "npm:0.33.3" - flow-bin: "npm:^0.296.1" + flow-bin: "npm:^0.298.0" hermes-eslint: "npm:0.33.3" hermes-transform: "npm:0.33.3" ini: "npm:^5.0.0" @@ -4595,7 +4595,7 @@ __metadata: node-fetch: "npm:^2.2.0" nullthrows: "npm:^1.1.1" prettier: "npm:3.6.2" - prettier-plugin-hermes-parser: "npm:0.32.0" + prettier-plugin-hermes-parser: "npm:0.33.2" react: "npm:19.2.3" react-test-renderer: "npm:19.2.3" rimraf: "npm:^3.0.2" @@ -9866,7 +9866,7 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react@npm:^7.30.1, eslint-plugin-react@npm:^7.37.5": +"eslint-plugin-react@npm:^7.37.5": version: 7.37.5 resolution: "eslint-plugin-react@npm:7.37.5" dependencies: @@ -10592,6 +10592,15 @@ __metadata: languageName: node linkType: hard +"flow-bin@npm:^0.298.0": + version: 0.298.0 + resolution: "flow-bin@npm:0.298.0" + bin: + flow: cli.js + checksum: 10c0/2713410a5e17e16b33d05c3d26f5bebf02fe543e4aa3a00360eb64279c68051f77268a6df8f03530aade48626c2537f525046d83d4d0df49127b4a21b6c4ed34 + languageName: node + linkType: hard + "flow-enums-runtime@npm:^0.0.6": version: 0.0.6 resolution: "flow-enums-runtime@npm:0.0.6" @@ -16042,12 +16051,12 @@ __metadata: languageName: node linkType: hard -"prettier-plugin-hermes-parser@npm:0.32.0": - version: 0.32.0 - resolution: "prettier-plugin-hermes-parser@npm:0.32.0" +"prettier-plugin-hermes-parser@npm:0.33.2": + version: 0.33.2 + resolution: "prettier-plugin-hermes-parser@npm:0.33.2" peerDependencies: prettier: ^3.0.0 - checksum: 10c0/f1384e91a14775b78cc2bcb89ad6a2eb090accbc7282edf109dd998444c1de5b30ac88f11503a26c61631e6d81737c9836875e036f796d8680b7257d3a06bab0 + checksum: 10c0/c2b1fcf415633e94090f4bdc6b065e9fb7aa02899f5333032852214e12c571923a603829c0462289db78b29683a1e97f03c9d05e25b0cec8d4477a382882a4b7 languageName: node linkType: hard