From a6f732d311cd458a60c79f65834b71aa69919f6c Mon Sep 17 00:00:00 2001 From: Anukrati Agrawal Date: Mon, 29 Jun 2026 09:57:06 -0700 Subject: [PATCH 1/4] Integrate RN 0.85.0-nightly-20260224-42cd0f041 --- package.json | 2 +- .../react-native-win32-tester/overrides.json | 4 +- .../react-native-win32-tester/package.json | 6 +- .../src/js/utils/RNTesterList.win32.js | 6 + .../react-native-win32/.flowconfig | 2 +- .../react-native-win32/overrides.json | 20 +- .../react-native-win32/package.json | 20 +- .../Components/TextInput/TextInput.win32.js | 12 +- .../UI/LogBoxInspectorCodeFrame.win32.js | 15 +- .../UI/LogBoxInspectorReactFrames.win32.js | 41 +- .../LogBoxInspectorSourceMapStatus.win32.js | 26 +- .../UI/LogBoxInspectorStackFrame.win32.js | 18 +- .../src-win/Libraries/Text/Text.win32.js | 15 + .../react-native-win32/src-win/index.win32.js | 6 + .../src-win/index.win32.js.flow | 2 + .../automation-channel/package.json | 2 +- .../@react-native-windows/cli/package.json | 2 +- .../perf-testing/package.json | 2 +- .../tester/overrides.json | 12 +- .../@react-native-windows/tester/package.json | 8 +- .../FlatList/FlatList-multiColumn.windows.js | 2 +- .../FlatList/FlatList-nested.windows.js | 21 +- .../FlatList-stickyHeaders.windows.js | 2 +- .../js/examples/Image/ImageExample.windows.js | 11 + .../src/js/utils/RNTesterList.windows.js | 6 + .../@react-native/monorepo/overrides.json | 4 +- packages/@react-native/monorepo/package.json | 8 +- .../IntersectionObserverBenchmark.js | 2 +- .../IntersectionObserverClippingParent.js | 2 +- .../IntersectionObserverClippingRoot.js | 2 +- .../IntersectionObserverExplicitRoot.js | 2 +- .../IntersectionObserverExplicitRootScroll.js | 2 +- .../IntersectionObserverMDNExample.js | 2 +- .../IntersectionObserverRootThreshold.js | 2 +- .../tester/js/utils/RNTesterList.android.js | 6 + .../tester/js/utils/RNTesterList.ios.js | 5 + packages/@react-native/tester/overrides.json | 40 +- packages/@react-native/tester/package.json | 8 +- .../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 +- .../components/text/ParagraphShadowNode.cpp | 20 +- .../react/renderer/uimanager/UIManager.cpp | 41 +- vnext/overrides.json | 25 +- vnext/package.json | 22 +- .../Components/Pressable/Pressable.d.ts | 5 + .../Components/TextInput/TextInput.windows.js | 12 +- .../UI/LogBoxInspectorCodeFrame.windows.js | 15 +- .../UI/LogBoxInspectorReactFrames.windows.js | 41 +- .../UI/LogBoxInspectorStackFrame.windows.js | 18 +- vnext/src-win/Libraries/Text/Text.windows.js | 15 + vnext/src-win/index.windows.js | 6 + vnext/src-win/index.windows.js.flow | 2 + yarn.lock | 538 +++++++++--------- 61 files changed, 658 insertions(+), 482 deletions(-) diff --git a/package.json b/package.json index b46ca0ee403..4b007a56b6e 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-20260210-4535df4f6", + "react-native": "0.85.0-nightly-20260224-42cd0f041", "react-native-platform-override": "workspace:*", "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 815159b3865..9797f80d6cf 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-20260210-4535df4f6", + "baseVersion": "0.85.0-nightly-20260224-42cd0f041", "overrides": [ { "type": "patch", @@ -42,7 +42,7 @@ "type": "derived", "file": "src/js/utils/RNTesterList.win32.js", "baseFile": "packages/rn-tester/js/utils/RNTesterList.android.js", - "baseHash": "21f111f08b53ae5d60a7c03044ae64d867d93dbb" + "baseHash": "d0b6e7eccdc020d76d263b3e88becfb565b4671d" } ] } \ No newline at end of file diff --git a/packages/@office-iss/react-native-win32-tester/package.json b/packages/@office-iss/react-native-win32-tester/package.json index f26ab62387c..c1c828f1ceb 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-20260210-4535df4f6", + "@react-native/tester": "0.85.0-nightly-20260224-42cd0f041", "@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-20260210-4535df4f6" + "react-native": "0.85.0-nightly-20260224-42cd0f041" }, "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-20260210-4535df4f6", + "react-native": "0.85.0-nightly-20260224-42cd0f041", "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/utils/RNTesterList.win32.js b/packages/@office-iss/react-native-win32-tester/src/js/utils/RNTesterList.win32.js index d9c5c9608d4..c40b7223a32 100644 --- a/packages/@office-iss/react-native-win32-tester/src/js/utils/RNTesterList.win32.js +++ b/packages/@office-iss/react-native-win32-tester/src/js/utils/RNTesterList.win32.js @@ -186,6 +186,12 @@ const APIs: Array = ([ category: 'UI', module: require('../examples/Animated/AnimatedIndex').default, }, + { + key: 'AnimationBackendIndex', + category: 'UI', + module: require('../examples/AnimationBackend/AnimationBackendIndex') + .default, + }, { key: 'Animation - GratuitousAnimation', category: 'UI', diff --git a/packages/@office-iss/react-native-win32/.flowconfig b/packages/@office-iss/react-native-win32/.flowconfig index d8883742d42..bebfe7005b6 100644 --- a/packages/@office-iss/react-native-win32/.flowconfig +++ b/packages/@office-iss/react-native-win32/.flowconfig @@ -172,4 +172,4 @@ untyped-import untyped-type-import [version] -^0.299.0 +^0.302.0 diff --git a/packages/@office-iss/react-native-win32/overrides.json b/packages/@office-iss/react-native-win32/overrides.json index 5bd0e81565d..b6a6054ff90 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-20260210-4535df4f6", + "baseVersion": "0.85.0-nightly-20260224-42cd0f041", "overrides": [ { "type": "derived", "file": ".flowconfig", "baseFile": ".flowconfig", - "baseHash": "4fee2cd64a351324f27b4ce4a99586f7e47d5dc3" + "baseHash": "baf585dd3e43f5433a04cb6b912333a0dd68b16b" }, { "type": "derived", "file": "src-win/index.win32.js", "baseFile": "packages/react-native/index.js", - "baseHash": "9007cd545c708aefc4ab3b9fb7418a210a6e879c" + "baseHash": "36c619cbe063dcd12ab4003886209d00e80ab249" }, { "type": "derived", "file": "src-win/index.win32.js.flow", "baseFile": "packages/react-native/index.js.flow", - "baseHash": "62783de689e8711d7ea287966283974956d797d5" + "baseHash": "d1e1f6a15bd8659d03fb763a86a4de0c855f05c1" }, { "type": "platform", @@ -120,7 +120,7 @@ "type": "derived", "file": "src-win/Libraries/Components/TextInput/TextInput.win32.js", "baseFile": "packages/react-native/Libraries/Components/TextInput/TextInput.js", - "baseHash": "dd89cd7044a790007febaeb8ef6c40e4c9cbdf41" + "baseHash": "cedca6e0b5e98b29759cc1ca806313ffa7937eb2" }, { "type": "patch", @@ -296,7 +296,7 @@ "type": "derived", "file": "src-win/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.win32.js", "baseFile": "packages/react-native/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js", - "baseHash": "c53eedb18ebef127f2306a42708b032ce03307c5" + "baseHash": "a40c0f275fe317de0aece23c7c26e923545c7ece" }, { "type": "patch", @@ -309,19 +309,19 @@ "type": "derived", "file": "src-win/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js", "baseFile": "packages/react-native/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js", - "baseHash": "b495dafadab54ad429e4bf9be28d4e7ae405df56" + "baseHash": "12bd90c6572e19e7c23c0cc702d179f04dc8d7bc" }, { "type": "derived", "file": "src-win/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.win32.js", "baseFile": "packages/react-native/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js", - "baseHash": "cebcc81fbc845286a04ffa5c1585155b058fd0b0" + "baseHash": "245082e81b6274f96a8da37d1e9a21fcd0ff0e18" }, { "type": "derived", "file": "src-win/Libraries/LogBox/UI/LogBoxInspectorStackFrame.win32.js", "baseFile": "packages/react-native/Libraries/LogBox/UI/LogBoxInspectorStackFrame.js", - "baseHash": "b498a05f1276dca29f4e44d0eb5fd80bcc8a4222", + "baseHash": "95e584184ae16ef23a57f7ebc3fba6b5c54a5268", "issue": 5885 }, { @@ -431,7 +431,7 @@ "type": "derived", "file": "src-win/Libraries/Text/Text.win32.js", "baseFile": "packages/react-native/Libraries/Text/Text.js", - "baseHash": "618b750401e9066b212477f3c5d5484e4d181e32" + "baseHash": "14e1085587ef8b8a506594599c1aea8cf40ef140" }, { "type": "derived", diff --git a/packages/@office-iss/react-native-win32/package.json b/packages/@office-iss/react-native-win32/package.json index 7bd4a1ab742..3675ca79dca 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-20260210-4535df4f6", - "@react-native/codegen": "0.85.0-nightly-20260210-4535df4f6", - "@react-native/community-cli-plugin": "0.85.0-nightly-20260210-4535df4f6", - "@react-native/gradle-plugin": "0.85.0-nightly-20260210-4535df4f6", - "@react-native/js-polyfills": "0.85.0-nightly-20260210-4535df4f6", - "@react-native/normalize-colors": "0.85.0-nightly-20260210-4535df4f6", - "@react-native/virtualized-lists": "0.85.0-nightly-20260210-4535df4f6", + "@react-native/assets-registry": "0.85.0-nightly-20260224-42cd0f041", + "@react-native/codegen": "0.85.0-nightly-20260224-42cd0f041", + "@react-native/community-cli-plugin": "0.85.0-nightly-20260224-42cd0f041", + "@react-native/gradle-plugin": "0.85.0-nightly-20260224-42cd0f041", + "@react-native/js-polyfills": "0.85.0-nightly-20260224-42cd0f041", + "@react-native/normalize-colors": "0.85.0-nightly-20260224-42cd0f041", + "@react-native/virtualized-lists": "0.85.0-nightly-20260224-42cd0f041", "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-20260210-4535df4f6", + "@react-native/metro-config": "0.85.0-nightly-20260224-42cd0f041", "@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-20260210-4535df4f6", + "react-native": "0.85.0-nightly-20260224-42cd0f041", "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-20260210-4535df4f6" + "react-native": "0.85.0-nightly-20260224-42cd0f041" }, "beachball": { "defaultNpmTag": "canary", diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/Components/TextInput/TextInput.win32.js b/packages/@office-iss/react-native-win32/src-win/Libraries/Components/TextInput/TextInput.win32.js index 66e292e6944..d9df6db577b 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/Components/TextInput/TextInput.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/Components/TextInput/TextInput.win32.js @@ -489,14 +489,24 @@ function InternalTextInput(props: TextInputProps): React.Node { getNativeRef(): ?TextInputInstance { return inputRef.current; }, - // TODO: Fix this returning true on null === null, when no input is focused isFocused(): boolean { +<<<<<<< Upstream + const currentlyFocusedInput = + TextInputState.currentlyFocusedInput(); + return ( + currentlyFocusedInput != null && + currentlyFocusedInput === inputRef.current + ); +||||||| base + return TextInputState.currentlyFocusedInput() === inputRef.current; +======= const currentlyFocusedInput = TextInputState.currentlyFocusedInput(); return ( currentlyFocusedInput !== null && currentlyFocusedInput === inputRef.current ); +>>>>>>> Override }, setSelection(start: number, end: number): void { if (inputRef.current != null) { diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.win32.js b/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.win32.js index d2052fb25ab..5439c098f88 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.win32.js @@ -23,12 +23,7 @@ import LogBoxInspectorSection from './LogBoxInspectorSection'; import * as LogBoxStyle from './LogBoxStyle'; import * as React from 'react'; -type Props = Readonly<{ - componentCodeFrame: ?CodeFrame, - codeFrame: ?CodeFrame, -}>; - -function CodeFrameDisplay({codeFrame}: {codeFrame: CodeFrame}): React.Node { +component CodeFrameDisplay(codeFrame: CodeFrame) { function getFileName() { // $FlowFixMe[incompatible-use] const matches = /[^/]*$/.exec(codeFrame.fileName); @@ -77,8 +72,10 @@ function CodeFrameDisplay({codeFrame}: {codeFrame: CodeFrame}): React.Node { ); } -function LogBoxInspectorCodeFrame(props: Props): React.Node { - const {codeFrame, componentCodeFrame} = props; +component LogBoxInspectorCodeFrame( + componentCodeFrame: ?CodeFrame, + codeFrame: ?CodeFrame, +) { let sources = []; if (codeFrame != null) { sources.push(codeFrame); @@ -103,7 +100,7 @@ function LogBoxInspectorCodeFrame(props: Props): React.Node { ); } -function AppInfo() { +component AppInfo() { const appInfo = LogBoxData.getAppInfo(); if (appInfo == null) { return null; diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js b/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js index 8a152f778cc..b2a455cf9ef 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js @@ -21,10 +21,6 @@ import * as LogBoxStyle from './LogBoxStyle'; import * as React from 'react'; import {useState} from 'react'; -type Props = Readonly<{ - log: LogBoxLog, -}>; - const BEFORE_SLASH_RE = /^(.*)[\\/]/; // Taken from React https://github.com/facebook/react/blob/206d61f72214e8ae5b935f0bf8628491cb7f0797/packages/react-devtools-shared/src/backend/describeComponentFrame.js#L27-L41 @@ -49,29 +45,30 @@ function getPrettyFileName(path: string) { return fileName; } -function LogBoxInspectorReactFrames(props: Props): React.Node { + +component LogBoxInspectorReactFrames(log: LogBoxLog) { const [collapsed, setCollapsed] = useState(true); if ( - props.log.getAvailableComponentStack() == null || - props.log.getAvailableComponentStack().length < 1 + log.getAvailableComponentStack() == null || + log.getAvailableComponentStack().length < 1 ) { return null; } function getStackList() { if (collapsed) { - return props.log.getAvailableComponentStack().slice(0, 3); + return log.getAvailableComponentStack().slice(0, 3); } else { - return props.log.getAvailableComponentStack(); + return log.getAvailableComponentStack(); } } function getCollapseMessage() { - if (props.log.getAvailableComponentStack().length <= 3) { + if (log.getAvailableComponentStack().length <= 3) { return; } - const count = props.log.getAvailableComponentStack().length - 3; + const count = log.getAvailableComponentStack().length - 3; if (collapsed) { return `See ${count} more components`; } else { @@ -164,22 +161,44 @@ const componentStyles = StyleSheet.create({ paddingRight: 10, }, frameName: { +<<<<<<< Upstream + fontFamily: Platform.select({ + android: 'monospace', + ios: 'Menlo', + macos: 'Menlo', + windows: 'Consolas', + }), +||||||| base + fontFamily: Platform.select({android: 'monospace', ios: 'Menlo'}), +======= fontFamily: Platform.select({ android: 'monospace', ios: 'Menlo', win32: 'Consolas', // Win32 }), +>>>>>>> Override color: LogBoxStyle.getTextColor(1), fontSize: 14, includeFontPadding: false, lineHeight: 18, }, bracket: { +<<<<<<< Upstream + fontFamily: Platform.select({ + android: 'monospace', + ios: 'Menlo', + macos: 'Menlo', + windows: 'Consolas', + }), +||||||| base + fontFamily: Platform.select({android: 'monospace', ios: 'Menlo'}), +======= fontFamily: Platform.select({ android: 'monospace', ios: 'Menlo', win32: 'Consolas', // Win32 }), +>>>>>>> Override color: LogBoxStyle.getTextColor(0.4), fontSize: 14, fontWeight: '500', diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.win32.js b/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.win32.js index a82f088eb67..ee785aacadb 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.win32.js @@ -19,21 +19,29 @@ import * as LogBoxStyle from './LogBoxStyle'; import * as React from 'react'; import {useEffect, useState} from 'react'; -type Props = Readonly<{ +component LogBoxInspectorSourceMapStatus( onPress?: ?(event: GestureResponderEvent) => void, status: 'COMPLETE' | 'FAILED' | 'NONE' | 'PENDING', +<<<<<<< Upstream +) { +||||||| base +}>; + +function LogBoxInspectorSourceMapStatus(props: Props): React.Node { +======= }>; function LogBoxInspectorSourceMapStatus(props: Props): React.Node { // [Win32] Dont use Animated /* +>>>>>>> Override const [state, setState] = useState({ animation: null, rotate: null, }); useEffect(() => { - if (props.status === 'PENDING') { + if (status === 'PENDING') { if (state.animation == null) { const animated = new Animated.Value(0); const animation = Animated.loop( @@ -69,12 +77,12 @@ function LogBoxInspectorSourceMapStatus(props: Props): React.Node { state.animation.stop(); } }; - }, [props.status, state.animation]); + }, [status, state.animation]); let image; */ let color; - switch (props.status) { + switch (status) { case 'FAILED': // image = require('./LogBoxImages/alert-triangle.png'); // [win32] Dont use LogBox images color = LogBoxStyle.getErrorColor(1); @@ -87,7 +95,13 @@ function LogBoxInspectorSourceMapStatus(props: Props): React.Node { return null; // [Win32] } +<<<<<<< Upstream + if (status === 'COMPLETE' || image == null) { +||||||| base + if (props.status === 'COMPLETE' || image == null) { +======= if (props.status === 'COMPLETE' /* [Win32] || image == null */) { +>>>>>>> Override return null; } @@ -98,7 +112,7 @@ function LogBoxInspectorSourceMapStatus(props: Props): React.Node { pressed: LogBoxStyle.getBackgroundColor(1), }} hitSlop={{bottom: 8, left: 8, right: 8, top: 8}} - onPress={props.onPress} + onPress={onPress} style={styles.root}> {/* [Win32] Avoid Animated usage void, -}>; - -function LogBoxInspectorStackFrame(props: Props): React.Node { - const {frame, onPress} = props; +) { const column = frame.column != null && parseInt(frame.column, 10); const location = getFileName(frame.file) + @@ -90,11 +87,22 @@ const styles = StyleSheet.create({ includeFontPadding: false, lineHeight: 18, fontWeight: '400', +<<<<<<< Upstream + fontFamily: Platform.select({ + android: 'monospace', + ios: 'Menlo', + macos: 'Menlo', + windows: 'Consolas', + }), +||||||| base + fontFamily: Platform.select({android: 'monospace', ios: 'Menlo'}), +======= fontFamily: Platform.select({ android: 'monospace', ios: 'Menlo', win32: 'Consolas', }), +>>>>>>> Override }, location: { color: LogBoxStyle.getTextColor(0.8), 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 bf9cdbf3748..0f9c7e0fadf 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,10 +14,12 @@ 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'; import processColor from '../StyleSheet/processColor'; +import StyleSheet from '../StyleSheet/StyleSheet'; import Platform from '../Utilities/Platform'; import TextAncestorContext from './TextAncestorContext'; import {NativeText, NativeVirtualText} from './TextNativeComponent'; @@ -246,6 +248,10 @@ const TextImpl: component( } } + if (ReactNativeFeatureFlags.defaultTextToOverflowHidden()) { + _style = [styles.default, _style]; + } + const _nativeID = id ?? nativeID; if (_accessibilityLabel !== undefined) { @@ -602,4 +608,13 @@ const verticalAlignToTextAlignVerticalMap = { middle: 'center', } as const; +const styles = StyleSheet.create({ + // Native components have historically acted like overflow: 'hidden'. We set + // this, as part of the default style, to let client differentiate with + // overflow: 'visible'. + default: { + overflow: 'hidden', + }, +}); + export default TextImpl; 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 373668ae2ab..c2fcdec1c14 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 @@ -344,6 +344,12 @@ module.exports = { get useAnimatedValue() { return require('./Libraries/Animated/useAnimatedValue').default; }, + get useAnimatedValueXY() { + return require('./Libraries/Animated/useAnimatedValueXY').default; + }, + get useAnimatedColor() { + return require('./Libraries/Animated/useAnimatedColor').default; + }, get useColorScheme() { return require('./Libraries/Utilities/useColorScheme').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 2b78dddcb35..1e79e3c15f6 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 @@ -411,6 +411,8 @@ export * as TurboModuleRegistry from './Libraries/TurboModule/TurboModuleRegistr export {default as UIManager} from './Libraries/ReactNative/UIManager'; export {unstable_batchedUpdates} from './Libraries/ReactNative/RendererProxy'; export {default as useAnimatedValue} from './Libraries/Animated/useAnimatedValue'; +export {default as useAnimatedValueXY} from './Libraries/Animated/useAnimatedValueXY'; +export {default as useAnimatedColor} from './Libraries/Animated/useAnimatedColor'; export type { PressabilityConfig, EventHandlers as PressabilityEventHandlers, diff --git a/packages/@react-native-windows/automation-channel/package.json b/packages/@react-native-windows/automation-channel/package.json index ce11c513681..3a63dd1f36b 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-20260210-4535df4f6", + "react-native": "0.85.0-nightly-20260224-42cd0f041", "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 6b342aae612..1e59860688b 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-20260210-4535df4f6", + "react-native": "0.85.0-nightly-20260224-42cd0f041", "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 2327da02805..23649188ba3 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-20260210-4535df4f6", + "react-native": "0.85.0-nightly-20260224-42cd0f041", "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 c602e8b5618..fe6a9da0de5 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-20260210-4535df4f6", + "baseVersion": "0.85.0-nightly-20260224-42cd0f041", "overrides": [ { "type": "copy", @@ -57,21 +57,21 @@ "type": "copy", "file": "src/js/examples/FlatList/FlatList-multiColumn.windows.js", "baseFile": "packages/rn-tester/js/examples/FlatList/FlatList-multiColumn.js", - "baseHash": "9d960f7a85d0b5b40e2b5a511c05364f7d952c53", + "baseHash": "13f7c3f3ddfc847cadbafa7c4137b1150f87e053", "issue": 12869 }, { "type": "patch", "file": "src/js/examples/FlatList/FlatList-nested.windows.js", "baseFile": "packages/rn-tester/js/examples/FlatList/FlatList-nested.js", - "baseHash": "58f95a964352c4ee884af4b027010fb54e4c1e39", + "baseHash": "45f9ec2ee31f7d7d1fada2709bc2ac6b54564bdf", "issue": 12869 }, { "type": "patch", "file": "src/js/examples/FlatList/FlatList-stickyHeaders.windows.js", "baseFile": "packages/rn-tester/js/examples/FlatList/FlatList-stickyHeaders.js", - "baseHash": "cfa86dc07ee3a2f17e589939a4fef982ff2c1b72" + "baseHash": "1b4aa52a4c1779607b5bd74c475dd23db152900c" }, { "type": "platform", @@ -85,7 +85,7 @@ "type": "patch", "file": "src/js/examples/Image/ImageExample.windows.js", "baseFile": "packages/rn-tester/js/examples/Image/ImageExample.js", - "baseHash": "c8ce9454827962d202cda42bd6bcd0aaceb8cf74", + "baseHash": "b119f46dbe33a567e7649f7197874d5b066403aa", "issue": 12869 }, { @@ -156,7 +156,7 @@ "type": "derived", "file": "src/js/utils/RNTesterList.windows.js", "baseFile": "packages/rn-tester/js/utils/RNTesterList.android.js", - "baseHash": "21f111f08b53ae5d60a7c03044ae64d867d93dbb" + "baseHash": "d0b6e7eccdc020d76d263b3e88becfb565b4671d" } ] } \ No newline at end of file diff --git a/packages/@react-native-windows/tester/package.json b/packages/@react-native-windows/tester/package.json index 7b252dc57f0..281a4a7d861 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-20260210-4535df4f6", + "react-native": "0.85.0-nightly-20260224-42cd0f041", "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-20260210-4535df4f6", - "@react-native/tester": "0.85.0-nightly-20260210-4535df4f6", + "@react-native/new-app-screen": "0.85.0-nightly-20260224-42cd0f041", + "@react-native/tester": "0.85.0-nightly-20260224-42cd0f041", "@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-20260210-4535df4f6", + "react-native": "0.85.0-nightly-20260224-42cd0f041", "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/FlatList/FlatList-multiColumn.windows.js b/packages/@react-native-windows/tester/src/js/examples/FlatList/FlatList-multiColumn.windows.js index 5900e5d8cde..a0b043de57f 100644 --- a/packages/@react-native-windows/tester/src/js/examples/FlatList/FlatList-multiColumn.windows.js +++ b/packages/@react-native-windows/tester/src/js/examples/FlatList/FlatList-multiColumn.windows.js @@ -31,7 +31,7 @@ import * as React from 'react'; import {useCallback, useState} from 'react'; import {Alert, FlatList, StyleSheet, View} from 'react-native'; -function MultiColumnExample(): React.Node { +component MultiColumnExample() { const [data, setData] = useState(genNewerItems(1000)); const [filterText, setFilterText] = useState(''); const [fixedHeight, setFixedHeight] = useState(true); diff --git a/packages/@react-native-windows/tester/src/js/examples/FlatList/FlatList-nested.windows.js b/packages/@react-native-windows/tester/src/js/examples/FlatList/FlatList-nested.windows.js index 2e1b31d2513..38c4456841f 100644 --- a/packages/@react-native-windows/tester/src/js/examples/FlatList/FlatList-nested.windows.js +++ b/packages/@react-native-windows/tester/src/js/examples/FlatList/FlatList-nested.windows.js @@ -76,7 +76,7 @@ function reducer(state: ItemsState, action: ItemsAction): ItemsState { return state; } -function NestedListExample(): React.Node { +component NestedListExample() { const [outer, dispatchOuter] = useReducer(reducer, initialItemsState); const [inner, dispatchInner] = useReducer(reducer, initialItemsState); const sortedInnerViewableItems = useMemo( @@ -154,18 +154,12 @@ function NestedListExample(): React.Node { ); } -function OuterItemRenderer({ - index, - item, - dispatchOuter, - dispatchInner, -}: { +component OuterItemRenderer( index: number, item: OuterItem, dispatchOuter: ItemsAction => void, dispatchInner: ItemsAction => void, - ... -}) { +) { useEffect(() => { dispatchOuter({ type: 'add-rendered', @@ -264,14 +258,7 @@ function OuterItemRenderer({ } } -function InnerItemRenderer({ - item, - dispatchInner, -}: { - item: number, - dispatchInner: ItemsAction => void, - ... -}) { +component InnerItemRenderer(item: number, dispatchInner: ItemsAction => void) { useEffect(() => { dispatchInner({ type: 'add-rendered', diff --git a/packages/@react-native-windows/tester/src/js/examples/FlatList/FlatList-stickyHeaders.windows.js b/packages/@react-native-windows/tester/src/js/examples/FlatList/FlatList-stickyHeaders.windows.js index 1f5dea3c947..a9c540675ed 100644 --- a/packages/@react-native-windows/tester/src/js/examples/FlatList/FlatList-stickyHeaders.windows.js +++ b/packages/@react-native-windows/tester/src/js/examples/FlatList/FlatList-stickyHeaders.windows.js @@ -38,7 +38,7 @@ const Item = ({item, separators}: ListRenderItemInfo) => { ); }; -export function FlatList_stickyHeaders(): React.Node { +export component FlatList_stickyHeaders() { return ( component', render: function (): React.Node { return ( +<<<<<<< Upstream + + +||||||| base + + +======= +>>>>>>> Override React ); diff --git a/packages/@react-native-windows/tester/src/js/utils/RNTesterList.windows.js b/packages/@react-native-windows/tester/src/js/utils/RNTesterList.windows.js index 3920bbf971b..0ee902c6dd5 100644 --- a/packages/@react-native-windows/tester/src/js/utils/RNTesterList.windows.js +++ b/packages/@react-native-windows/tester/src/js/utils/RNTesterList.windows.js @@ -261,6 +261,12 @@ const APIs: Array = ([ category: 'UI', module: require('../examples/Animated/AnimatedIndex').default, }, + { + key: 'AnimationBackendIndex', + category: 'UI', + module: require('../examples/AnimationBackend/AnimationBackendIndex') + .default, + }, { key: 'Animation - GratuitousAnimation', category: 'UI', diff --git a/packages/@react-native/monorepo/overrides.json b/packages/@react-native/monorepo/overrides.json index badb3209376..c313219fd44 100644 --- a/packages/@react-native/monorepo/overrides.json +++ b/packages/@react-native/monorepo/overrides.json @@ -1,11 +1,11 @@ { - "baseVersion": "0.85.0-nightly-20260210-4535df4f6", + "baseVersion": "0.85.0-nightly-20260224-42cd0f041", "overrides": [ { "type": "patch", "file": "package.json", "baseFile": "package.json", - "baseHash": "c4f1e868709a59b29acf4bcb030ab28720299f5c" + "baseHash": "835950d539e5c3124098baa7ee2cf4891b4f95f5" } ] } \ No newline at end of file diff --git a/packages/@react-native/monorepo/package.json b/packages/@react-native/monorepo/package.json index f799bddd778..110da6a1b1e 100644 --- a/packages/@react-native/monorepo/package.json +++ b/packages/@react-native/monorepo/package.json @@ -41,7 +41,7 @@ "devDependencies": { "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", - "@babel/generator": "^7.25.0", + "@babel/generator": "^7.29.1", "@babel/plugin-syntax-typescript": "^7.25.4", "@babel/plugin-transform-regenerator": "^7.24.7", "@babel/preset-env": "^7.25.3", @@ -51,8 +51,8 @@ "@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-20260210-4535df4f6", - "@react-native/metro-config": "0.85.0-nightly-20260210-4535df4f6", + "@react-native/metro-babel-transformer": "0.85.0-nightly-20260224-42cd0f041", + "@react-native/metro-config": "0.85.0-nightly-20260224-42cd0f041", "@tsconfig/node22": "22.0.2", "@types/react": "^19.2.3", "@typescript-eslint/parser": "^8.36.0", @@ -79,7 +79,7 @@ "eslint-plugin-relay": "^1.8.3", "fb-dotslash": "0.5.8", "flow-api-translator": "0.33.3", - "flow-bin": "^0.299.0", + "flow-bin": "^0.302.0", "hermes-eslint": "0.33.3", "hermes-transform": "0.33.3", "ini": "^5.0.0", diff --git a/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverBenchmark.js b/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverBenchmark.js index 660d0f096f3..499a1347e78 100644 --- a/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverBenchmark.js +++ b/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverBenchmark.js @@ -35,7 +35,7 @@ export function render(): React.Node { const ROWS = 100; const COLUMNS = 5; -function IntersectionObserverBenchark(): React.Node { +component IntersectionObserverBenchark() { const [isObserving, setObserving] = useState(false); return ( diff --git a/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverClippingParent.js b/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverClippingParent.js index 09ba32a1f19..a0b8381bf5b 100644 --- a/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverClippingParent.js +++ b/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverClippingParent.js @@ -63,7 +63,7 @@ function roundRect(rect: unknown): ?{ }; } -function IntersectionObserverCustomClippingRootExample(): React.Node { +component IntersectionObserverCustomClippingRootExample() { const rootRef = useRef(null); const targetRef = useRef(null); const [intersectionEntry, setIntersectionEntry] = diff --git a/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverClippingRoot.js b/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverClippingRoot.js index 02c832aeb24..1c15987e00f 100644 --- a/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverClippingRoot.js +++ b/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverClippingRoot.js @@ -63,7 +63,7 @@ function roundRect(rect: unknown): ?{ /** * Showcase clipping when the root has overflow: hidden */ -function IntersectionObserverClippingRootExample(): React.Node { +component IntersectionObserverClippingRootExample() { const rootRef = useRef(null); const targetRef = useRef(null); const [intersectionEntry, setIntersectionEntry] = diff --git a/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverExplicitRoot.js b/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverExplicitRoot.js index 3bddaaa610c..2e10509f7e8 100644 --- a/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverExplicitRoot.js +++ b/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverExplicitRoot.js @@ -45,7 +45,7 @@ export function render(): React.Node { /** * Showcase threshold of two overlapping elements */ -function IntersectionObserverExplicitRootExample(): React.Node { +component IntersectionObserverExplicitRootExample() { const theme = useContext(RNTesterThemeContext); const rootRef = useRef(null); const targetRef = useRef(null); diff --git a/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverExplicitRootScroll.js b/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverExplicitRootScroll.js index dd6c381569b..2dfdea9f879 100644 --- a/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverExplicitRootScroll.js +++ b/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverExplicitRootScroll.js @@ -37,7 +37,7 @@ export function render(): React.Node { /** * Showcase threshold of two overlapping elements */ -function IntersectionObserverExplicitRootScrollExample(): React.Node { +component IntersectionObserverExplicitRootScrollExample() { const theme = useContext(RNTesterThemeContext); const [observationRoot, setObservationRoot] = useState(null); diff --git a/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverMDNExample.js b/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverMDNExample.js index 69858a0dfa7..5673c516830 100644 --- a/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverMDNExample.js +++ b/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverMDNExample.js @@ -35,7 +35,7 @@ export function render(): React.Node { /** * Similar to the example in MDN: https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API */ -function IntersectionObserverMDNExample(): React.Node { +component IntersectionObserverMDNExample() { const theme = useContext(RNTesterThemeContext); const [showMargin, setShowMargin] = useState(true); diff --git a/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverRootThreshold.js b/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverRootThreshold.js index 393d05aa443..ddf98f0751a 100644 --- a/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverRootThreshold.js +++ b/packages/@react-native/tester/js/examples/IntersectionObserver/IntersectionObserverRootThreshold.js @@ -36,7 +36,7 @@ export function render(): React.Node { /** * Similar to the example in MDN: https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API */ -function IntersectionObserverRootThreshold(): React.Node { +component IntersectionObserverRootThreshold() { const theme = useContext(RNTesterThemeContext); const [showMargin, setShowMargin] = useState(true); diff --git a/packages/@react-native/tester/js/utils/RNTesterList.android.js b/packages/@react-native/tester/js/utils/RNTesterList.android.js index 51001fbbb11..c0abd94423f 100644 --- a/packages/@react-native/tester/js/utils/RNTesterList.android.js +++ b/packages/@react-native/tester/js/utils/RNTesterList.android.js @@ -174,6 +174,12 @@ const APIs: Array = ([ category: 'UI', module: require('../examples/Animated/AnimatedIndex').default, }, + { + key: 'AnimationBackendIndex', + category: 'UI', + module: require('../examples/AnimationBackend/AnimationBackendIndex') + .default, + }, { key: 'Animation - GratuitousAnimation', category: 'UI', diff --git a/packages/@react-native/tester/js/utils/RNTesterList.ios.js b/packages/@react-native/tester/js/utils/RNTesterList.ios.js index 342c7e028e1..b69af517a43 100644 --- a/packages/@react-native/tester/js/utils/RNTesterList.ios.js +++ b/packages/@react-native/tester/js/utils/RNTesterList.ios.js @@ -180,6 +180,11 @@ const APIs: Array = ([ key: 'AnimatedIndex', module: require('../examples/Animated/AnimatedIndex').default, }, + { + key: 'AnimationBackendIndex', + module: require('../examples/AnimationBackend/AnimationBackendIndex') + .default, + }, { key: 'AnExApp', module: require('../examples/AnimatedGratuitousApp/AnExApp'), diff --git a/packages/@react-native/tester/overrides.json b/packages/@react-native/tester/overrides.json index 36805671552..d2577daba6a 100644 --- a/packages/@react-native/tester/overrides.json +++ b/packages/@react-native/tester/overrides.json @@ -1,5 +1,5 @@ { - "baseVersion": "0.85.0-nightly-20260210-4535df4f6", + "baseVersion": "0.85.0-nightly-20260224-42cd0f041", "overrides": [ { "type": "copy", @@ -47,14 +47,14 @@ "type": "copy", "directory": "js/examples/Animated", "baseDirectory": "packages/rn-tester/js/examples/Animated", - "baseHash": "2f8e321c0aad89e827b1b7e8f655a807e69107bf", + "baseHash": "acc7a874b67503484a247ebf8f0a1fc738e420f7", "issue": 4054 }, { "type": "copy", "directory": "js/examples/AnimatedGratuitousApp", "baseDirectory": "packages/rn-tester/js/examples/AnimatedGratuitousApp", - "baseHash": "569a8a61a02457ae7fff5a036f3257e44bd318b3", + "baseHash": "71ea06b945d36ebbd2cc6441131c8f064b90f032", "issue": 4054 }, { @@ -145,28 +145,28 @@ "type": "copy", "directory": "js/examples/Experimental", "baseDirectory": "packages/rn-tester/js/examples/Experimental", - "baseHash": "62842257c1fcc1631c3da4ea26d409df19d32ea4", + "baseHash": "15c7341691cb52e024593aaa90f4c26c5faad7a9", "issue": 4054 }, { "type": "copy", "directory": "js/examples/Filter", "baseDirectory": "packages/rn-tester/js/examples/Filter", - "baseHash": "461aa63f2d276c8f056d410509a12ca362c6dc1b", + "baseHash": "6b4161c9df6517cc185d20e33a1c9f39391a82f6", "issue": 4054 }, { "type": "copy", "directory": "js/examples/FlatList", "baseDirectory": "packages/rn-tester/js/examples/FlatList", - "baseHash": "b1f42d26c0f053ff75f922e23868dd50c578948e", + "baseHash": "752e08cf741859bbb8dedd2167c5ea33879d6df4", "issue": 4054 }, { "type": "copy", "directory": "js/examples/Image", "baseDirectory": "packages/rn-tester/js/examples/Image", - "baseHash": "a45944f905e495fb1faeee03f9eef8c6565296d1", + "baseHash": "ef91fd1f837dc2f279e52bd2d5f596281405110c", "issue": 4054 }, { @@ -180,35 +180,35 @@ "type": "copy", "file": "js/examples/IntersectionObserver/IntersectionObserverBenchmark.js", "baseFile": "packages/rn-tester/js/examples/IntersectionObserver/IntersectionObserverBenchmark.js", - "baseHash": "4f8616fdd362d180c7ef049c1dcb1ed57cbeef1d", + "baseHash": "1be5e21c2ba30cf0d49e308232fc15080fc6fc67", "issue": 4054 }, { "type": "copy", "file": "js/examples/IntersectionObserver/IntersectionObserverClippingParent.js", "baseFile": "packages/rn-tester/js/examples/IntersectionObserver/IntersectionObserverClippingParent.js", - "baseHash": "957315ad808886e486f18c0bdc79b97ec6a94faa", + "baseHash": "ef8e727227067db79a4d17ba1ce25a9a00aba406", "issue": 4054 }, { "type": "copy", "file": "js/examples/IntersectionObserver/IntersectionObserverClippingRoot.js", "baseFile": "packages/rn-tester/js/examples/IntersectionObserver/IntersectionObserverClippingRoot.js", - "baseHash": "c378bf70f31da56b111a186259bd2bf2ea3ad879", + "baseHash": "103323c87b1cf98f3e7d5aec60536eea6489c44f", "issue": 4054 }, { "type": "copy", "file": "js/examples/IntersectionObserver/IntersectionObserverExplicitRoot.js", "baseFile": "packages/rn-tester/js/examples/IntersectionObserver/IntersectionObserverExplicitRoot.js", - "baseHash": "72802b474256b249af36343e015040c691319553", + "baseHash": "2b35cf09e67f4a613eaf144f2749d8468a90b1a2", "issue": 4054 }, { "type": "copy", "file": "js/examples/IntersectionObserver/IntersectionObserverExplicitRootScroll.js", "baseFile": "packages/rn-tester/js/examples/IntersectionObserver/IntersectionObserverExplicitRootScroll.js", - "baseHash": "000c27cad081d7fbaa4c7a6dc407611bd123ca23", + "baseHash": "4508414aa574979ac7287d6525af5507129cc3a8", "issue": 4054 }, { @@ -222,14 +222,14 @@ "type": "copy", "file": "js/examples/IntersectionObserver/IntersectionObserverMDNExample.js", "baseFile": "packages/rn-tester/js/examples/IntersectionObserver/IntersectionObserverMDNExample.js", - "baseHash": "04302cafcde285acdb8a2dfe141d3cc84d1d3044", + "baseHash": "6598e7f7f1d1de0e0d593eaf0db571ddd4c17bf5", "issue": 4054 }, { "type": "copy", "file": "js/examples/IntersectionObserver/IntersectionObserverRootThreshold.js", "baseFile": "packages/rn-tester/js/examples/IntersectionObserver/IntersectionObserverRootThreshold.js", - "baseHash": "3e96b84a2f6350f47370adb699960f0ae2a55f3f", + "baseHash": "a851a0ec5c5aa432463cff114add20a91cbbd703", "issue": 4054 }, { @@ -424,14 +424,14 @@ "type": "copy", "directory": "js/examples/ScrollView", "baseDirectory": "packages/rn-tester/js/examples/ScrollView", - "baseHash": "97015cbbdb838c78dfb2f0bf9a7509bfea4b31c8", + "baseHash": "13c0707b7f7c21689197cf2c382b271e49935bae", "issue": 4054 }, { "type": "copy", "directory": "js/examples/SectionList", "baseDirectory": "packages/rn-tester/js/examples/SectionList", - "baseHash": "6f76feed906a8af0b49ee02e676f8383cdcc6018", + "baseHash": "fde4e3ff07f704344589cbd3b3c476fb3f361061", "issue": 4054 }, { @@ -480,7 +480,7 @@ "type": "copy", "directory": "js/examples/Text", "baseDirectory": "packages/rn-tester/js/examples/Text", - "baseHash": "0e16875ccf63c259b076c6a5b6c8f2f4b4949a96", + "baseHash": "b59010ecb3c85866dd3eafb4f56d03a2d0738cea", "issue": 4054 }, { @@ -550,7 +550,7 @@ "type": "copy", "directory": "js/examples/Transform", "baseDirectory": "packages/rn-tester/js/examples/Transform", - "baseHash": "060bc5e542a7a4bcd5bb5fd20096c103b5c3c9a5", + "baseHash": "31489a9e1c811289f20dcbcc0a9d0fae098318ec", "issue": 4054 }, { @@ -640,14 +640,14 @@ "type": "copy", "file": "js/utils/RNTesterList.android.js", "baseFile": "packages/rn-tester/js/utils/RNTesterList.android.js", - "baseHash": "21f111f08b53ae5d60a7c03044ae64d867d93dbb", + "baseHash": "d0b6e7eccdc020d76d263b3e88becfb565b4671d", "issue": 13228 }, { "type": "copy", "file": "js/utils/RNTesterList.ios.js", "baseFile": "packages/rn-tester/js/utils/RNTesterList.ios.js", - "baseHash": "0fceba04a75a75dadb3ba8959388ae4493aabd9c", + "baseHash": "99ea8ccf7a0e141f60bb5e66d65c0db77769d060", "issue": 13228 }, { diff --git a/packages/@react-native/tester/package.json b/packages/@react-native/tester/package.json index b3cbc02bb2e..026dffdc0c4 100644 --- a/packages/@react-native/tester/package.json +++ b/packages/@react-native/tester/package.json @@ -1,6 +1,6 @@ { "name": "@react-native/tester", - "version": "0.85.0-nightly-20260210-4535df4f6", + "version": "0.85.0-nightly-20260224-42cd0f041", "private": true, "description": "React Native tester app.", "license": "MIT", @@ -25,8 +25,8 @@ "e2e-test-ios": "./scripts/maestro-test-ios.sh" }, "dependencies": { - "@react-native/new-app-screen": "0.85.0-nightly-20260210-4535df4f6", - "@react-native/popup-menu-android": "0.85.0-nightly-20260210-4535df4f6", + "@react-native/new-app-screen": "0.85.0-nightly-20260224-42cd0f041", + "@react-native/popup-menu-android": "0.85.0-nightly-20260224-42cd0f041", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "nullthrows": "^1.1.1" @@ -62,7 +62,7 @@ "commander": "^12.0.0", "listr2": "^6.4.1", "react": "19.2.3", - "react-native": "0.85.0-nightly-20260210-4535df4f6", + "react-native": "0.85.0-nightly-20260224-42cd0f041", "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 2bcadcf467e..8fa0d0a988c 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-20260210-4535df4f6", + "@react-native/babel-preset": "0.85.0-nightly-20260224-42cd0f041", "babel-plugin-transform-flow-enums": "^0.0.2" }, "devDependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.85.0-nightly-20260210-4535df4f6", + "@react-native/babel-preset": "0.85.0-nightly-20260224-42cd0f041", "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 8b259442be5..cb512950064 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-20260210-4535df4f6", + "@react-native/eslint-config": "0.85.0-nightly-20260224-42cd0f041", "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 f5372a4f1e3..d4d55f62c22 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-20260210-4535df4f6", + "react-native": "0.85.0-nightly-20260224-42cd0f041", "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 d7c8fdb5dd3..49a920cef58 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-20260210-4535df4f6", + "@react-native/metro-config": "0.85.0-nightly-20260224-42cd0f041", "@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-20260210-4535df4f6", + "react-native": "0.85.0-nightly-20260224-42cd0f041", "typescript": "5.0.4" }, "peerDependencies": { diff --git a/packages/e2e-test-app-fabric/package.json b/packages/e2e-test-app-fabric/package.json index 4e3150321ec..8f097ada8a1 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-20260210-4535df4f6", + "react-native": "0.85.0-nightly-20260224-42cd0f041", "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-20260210-4535df4f6", + "@react-native/metro-config": "0.85.0-nightly-20260224-42cd0f041", "@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 c8fc8666225..78baf7ebf69 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-20260210-4535df4f6", + "react-native": "0.85.0-nightly-20260224-42cd0f041", "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-20260210-4535df4f6", + "@react-native/metro-config": "0.85.0-nightly-20260224-42cd0f041", "@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 6d585c91561..fd0d2019c88 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-20260210-4535df4f6", + "react-native": "0.85.0-nightly-20260224-42cd0f041", "typescript": "5.0.4" }, "files": [ diff --git a/packages/sample-app-fabric/package.json b/packages/sample-app-fabric/package.json index 19fd087e660..95a814a5f82 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-20260210-4535df4f6", + "react-native": "0.85.0-nightly-20260224-42cd0f041", "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-20260210-4535df4f6", + "@react-native/metro-config": "0.85.0-nightly-20260224-42cd0f041", "@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 74c86fe7544..a9b83da833f 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-20260210-4535df4f6", + "react-native": "0.85.0-nightly-20260224-42cd0f041", "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-20260210-4535df4f6", + "@react-native/metro-config": "0.85.0-nightly-20260224-42cd0f041", "@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 1a3acf12e89..93c63fbd5f0 100644 --- a/vnext/.flowconfig +++ b/vnext/.flowconfig @@ -170,4 +170,4 @@ untyped-import untyped-type-import [version] -^0.299.0 +^0.302.0 diff --git a/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/text/ParagraphShadowNode.cpp b/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/text/ParagraphShadowNode.cpp index e6010322f22..992b49c6f49 100644 --- a/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/text/ParagraphShadowNode.cpp +++ b/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/text/ParagraphShadowNode.cpp @@ -145,7 +145,7 @@ void ParagraphShadowNode::setTextLayoutManager( template void ParagraphShadowNode::updateStateIfNeeded( const Content& content, - const MeasuredPreparedLayout& layout) { + const MeasuredPreparedTextLayout& layout) { ensureUnsealed(); auto& state = static_cast(getStateData()); @@ -183,10 +183,10 @@ void ParagraphShadowNode::updateStateIfNeeded(const Content& content) { textLayoutManager_}); } -MeasuredPreparedLayout* ParagraphShadowNode::findUsableLayout() { - MeasuredPreparedLayout* ret = nullptr; +MeasuredPreparedTextLayout* ParagraphShadowNode::findUsableLayout() { + MeasuredPreparedTextLayout* ret = nullptr; - if constexpr (TextLayoutManagerExtended::supportsPreparedLayout()) { + if constexpr (TextLayoutManagerExtended::supportsPreparedTextLayout()) { // We consider the layout to be reusable, if our content measurement, // combined with padding/border (not snapped) exactly corresponds to the // measurement of the node, before layout rounding. We may not find a @@ -223,7 +223,7 @@ Size ParagraphShadowNode::rawContentSize() { Size ParagraphShadowNode::measureContent( const LayoutContext& layoutContext, const LayoutConstraints& layoutConstraints) const { - if constexpr (TextLayoutManagerExtended::supportsPreparedLayout()) { + if constexpr (TextLayoutManagerExtended::supportsPreparedTextLayout()) { for (const auto& layout : measuredLayouts_) { if (layout.layoutConstraints == layoutConstraints) { return layout.measurement.size; @@ -239,7 +239,7 @@ Size ParagraphShadowNode::measureContent( .surfaceId = getSurfaceId(), }; - if constexpr (TextLayoutManagerExtended::supportsPreparedLayout()) { + if constexpr (TextLayoutManagerExtended::supportsPreparedTextLayout()) { if (ReactNativeFeatureFlags::enablePreparedTextLayout()) { TextLayoutManagerExtended tme(*textLayoutManager_); @@ -252,12 +252,12 @@ Size ParagraphShadowNode::measureContent( preparedLayout, textLayoutContext, layoutConstraints); measuredLayouts_.push_back( - MeasuredPreparedLayout{ + MeasuredPreparedTextLayout{ .layoutConstraints = layoutConstraints, .measurement = measurement, - // PreparedLayout is not trivially copyable on all platforms + // PreparedTextLayout is not trivially copyable on all platforms // NOLINTNEXTLINE(performance-move-const-arg) - .preparedLayout = std::move(preparedLayout)}); + .preparedTextLayout = std::move(preparedLayout)}); assert_valid_size(measurement.size, layoutConstraints); return measurement.size; } @@ -317,7 +317,7 @@ void ParagraphShadowNode::layout(LayoutContext layoutContext) { auto measuredLayout = findUsableLayout(); if constexpr ( - TextLayoutManagerExtended::supportsPreparedLayout() && + TextLayoutManagerExtended::supportsPreparedTextLayout() && std::is_constructible_v< ParagraphState, decltype(content.attributedString), diff --git a/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/uimanager/UIManager.cpp b/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/uimanager/UIManager.cpp index ed1cd3a4ea1..ffe57e9b401 100644 --- a/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/uimanager/UIManager.cpp +++ b/vnext/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/uimanager/UIManager.cpp @@ -193,8 +193,10 @@ void UIManager::completeSurface( ShadowTree::CommitOptions commitOptions) { TraceSection s("UIManager::completeSurface", "surfaceId", surfaceId); + ShadowTree::CommitStatus result; + shadowTreeRegistry_.visit(surfaceId, [&](const ShadowTree& shadowTree) { - auto result = shadowTree.commit( + result = shadowTree.commit( [&](const RootShadowNode& oldRootShadowNode) { return std::make_shared( oldRootShadowNode, @@ -204,18 +206,17 @@ void UIManager::completeSurface( }); }, commitOptions); + }); - if (result == ShadowTree::CommitStatus::Succeeded) { - // It's safe to update the visible revision of the shadow tree immediately - // after we commit a specific one. - lazyShadowTreeRevisionConsistencyManager_->updateCurrentRevision( - surfaceId, shadowTree.getCurrentRevision().rootShadowNode); + if (result == ShadowTree::CommitStatus::Succeeded) { + // It's safe to update the visible revision of the shadow tree immediately + // after we commit a specific one. + lazyShadowTreeRevisionConsistencyManager_->updateCurrentRevision(surfaceId); - if (ReactNativeFeatureFlags::useSharedAnimatedBackend()) { - animationBackend_->clearRegistry(surfaceId); - } + if (ReactNativeFeatureFlags::useSharedAnimatedBackend()) { + animationBackend_->clearRegistry(surfaceId); } - }); + } } void UIManager::setIsJSResponder( @@ -648,6 +649,20 @@ void UIManager::shadowTreeDidFinishTransaction( } } +void UIManager::shadowTreeDidFinishReactCommit( + const ShadowTree& shadowTree) const { + if (delegate_ != nullptr) { + delegate_->uiManagerDidFinishReactCommit(shadowTree); + } +} + +void UIManager::shadowTreeDidPromoteReactRevision( + const ShadowTree& shadowTree) const { + if (delegate_ != nullptr) { + delegate_->uiManagerDidPromoteReactRevision(shadowTree); + } +} + void UIManager::reportMount(SurfaceId surfaceId) const { TraceSection s("UIManager::reportMount"); @@ -722,6 +737,12 @@ void UIManager::synchronouslyUpdateViewOnUIThread( } } +#pragma mark ContextContainer + +std::shared_ptr UIManager::getContextContainer() const { + return contextContainer_; +} + #pragma mark - Add & Remove event listener void UIManager::addEventListener( diff --git a/vnext/overrides.json b/vnext/overrides.json index 5639ab46f09..e8beafa2454 100644 --- a/vnext/overrides.json +++ b/vnext/overrides.json @@ -8,13 +8,13 @@ "**/__snapshots__/**", "src-win/rntypes/**" ], - "baseVersion": "0.85.0-nightly-20260210-4535df4f6", + "baseVersion": "0.85.0-nightly-20260224-42cd0f041", "overrides": [ { "type": "derived", "file": ".flowconfig", "baseFile": ".flowconfig", - "baseHash": "4fee2cd64a351324f27b4ce4a99586f7e47d5dc3" + "baseHash": "baf585dd3e43f5433a04cb6b912333a0dd68b16b" }, { "type": "derived", @@ -167,7 +167,7 @@ "type": "patch", "file": "ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/text/ParagraphShadowNode.cpp", "baseFile": "packages/react-native/ReactCommon/react/renderer/components/text/ParagraphShadowNode.cpp", - "baseHash": "dd357c5df2214908bb4220d22d31ab1477f2b1e4", + "baseHash": "97a2c24a3d253c6d5c34dc79345b0915ab527e48", "issue": 15132 }, { @@ -219,7 +219,7 @@ "type": "derived", "file": "ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/uimanager/UIManager.cpp", "baseFile": "packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp", - "baseHash": "5d44547f4fa03a1745e05f2dff84fa2101dea24a" + "baseHash": "7c26d68e45890168703bb560351ac74d09e7d125" }, { "type": "derived", @@ -238,13 +238,13 @@ "type": "derived", "file": "src-win/index.windows.js", "baseFile": "packages/react-native/index.js", - "baseHash": "9007cd545c708aefc4ab3b9fb7418a210a6e879c" + "baseHash": "36c619cbe063dcd12ab4003886209d00e80ab249" }, { "type": "derived", "file": "src-win/index.windows.js.flow", "baseFile": "packages/react-native/index.js.flow", - "baseHash": "62783de689e8711d7ea287966283974956d797d5" + "baseHash": "d1e1f6a15bd8659d03fb763a86a4de0c855f05c1" }, { "type": "platform", @@ -290,6 +290,7 @@ "type": "copy", "file": "src-win/jest/setup.js", "baseFile": "packages/react-native/jest/setup.js", + "baseVersion": "0.85.0-nightly-20260210-4535df4f6", "baseHash": "f0a153e2fecbfa912ae0997e0bc98ea8a1791a52", "issue": 14929 }, @@ -390,7 +391,7 @@ "type": "derived", "file": "src-win/Libraries/Components/Pressable/Pressable.d.ts", "baseFile": "packages/react-native/Libraries/Components/Pressable/Pressable.d.ts", - "baseHash": "d4dd8fc82436617bfeca9807be274aa5416d748c" + "baseHash": "eca0d20e6e8df0297268c683a5c0f939fc075fc5" }, { "type": "patch", @@ -432,7 +433,7 @@ "type": "patch", "file": "src-win/Libraries/Components/TextInput/TextInput.windows.js", "baseFile": "packages/react-native/Libraries/Components/TextInput/TextInput.js", - "baseHash": "dd89cd7044a790007febaeb8ef6c40e4c9cbdf41" + "baseHash": "cedca6e0b5e98b29759cc1ca806313ffa7937eb2" }, { "type": "patch", @@ -554,7 +555,7 @@ "type": "derived", "file": "src-win/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.windows.js", "baseFile": "packages/react-native/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js", - "baseHash": "c53eedb18ebef127f2306a42708b032ce03307c5" + "baseHash": "a40c0f275fe317de0aece23c7c26e923545c7ece" }, { "type": "derived", @@ -566,13 +567,13 @@ "type": "derived", "file": "src-win/Libraries/LogBox/UI/LogBoxInspectorReactFrames.windows.js", "baseFile": "packages/react-native/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js", - "baseHash": "b495dafadab54ad429e4bf9be28d4e7ae405df56" + "baseHash": "12bd90c6572e19e7c23c0cc702d179f04dc8d7bc" }, { "type": "derived", "file": "src-win/Libraries/LogBox/UI/LogBoxInspectorStackFrame.windows.js", "baseFile": "packages/react-native/Libraries/LogBox/UI/LogBoxInspectorStackFrame.js", - "baseHash": "b498a05f1276dca29f4e44d0eb5fd80bcc8a4222" + "baseHash": "95e584184ae16ef23a57f7ebc3fba6b5c54a5268" }, { "type": "patch", @@ -655,7 +656,7 @@ "type": "derived", "file": "src-win/Libraries/Text/Text.windows.js", "baseFile": "packages/react-native/Libraries/Text/Text.js", - "baseHash": "618b750401e9066b212477f3c5d5484e4d181e32" + "baseHash": "14e1085587ef8b8a506594599c1aea8cf40ef140" }, { "type": "derived", diff --git a/vnext/package.json b/vnext/package.json index f8e0d6121d8..93c8cdb6b74 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-20260210-4535df4f6", - "@react-native/codegen": "0.85.0-nightly-20260210-4535df4f6", - "@react-native/community-cli-plugin": "0.85.0-nightly-20260210-4535df4f6", - "@react-native/gradle-plugin": "0.85.0-nightly-20260210-4535df4f6", - "@react-native/js-polyfills": "0.85.0-nightly-20260210-4535df4f6", - "@react-native/new-app-screen": "0.85.0-nightly-20260210-4535df4f6", - "@react-native/normalize-colors": "0.85.0-nightly-20260210-4535df4f6", - "@react-native/virtualized-lists": "0.85.0-nightly-20260210-4535df4f6", + "@react-native/assets-registry": "0.85.0-nightly-20260224-42cd0f041", + "@react-native/codegen": "0.85.0-nightly-20260224-42cd0f041", + "@react-native/community-cli-plugin": "0.85.0-nightly-20260224-42cd0f041", + "@react-native/gradle-plugin": "0.85.0-nightly-20260224-42cd0f041", + "@react-native/js-polyfills": "0.85.0-nightly-20260224-42cd0f041", + "@react-native/new-app-screen": "0.85.0-nightly-20260224-42cd0f041", + "@react-native/normalize-colors": "0.85.0-nightly-20260224-42cd0f041", + "@react-native/virtualized-lists": "0.85.0-nightly-20260224-42cd0f041", "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-20260210-4535df4f6", + "@react-native/metro-config": "0.85.0-nightly-20260224-42cd0f041", "@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-20260210-4535df4f6", + "react-native": "0.85.0-nightly-20260224-42cd0f041", "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-20260210-4535df4f6" + "react-native": "0.85.0-nightly-20260224-42cd0f041" }, "beachball": { "defaultNpmTag": "canary", diff --git a/vnext/src-win/Libraries/Components/Pressable/Pressable.d.ts b/vnext/src-win/Libraries/Components/Pressable/Pressable.d.ts index 334ba2c9816..4803d4939b7 100644 --- a/vnext/src-win/Libraries/Components/Pressable/Pressable.d.ts +++ b/vnext/src-win/Libraries/Components/Pressable/Pressable.d.ts @@ -55,6 +55,11 @@ export interface PressableProps */ onPressIn?: null | ((event: GestureResponderEvent) => void) | undefined; + /** + * Called when the press location moves. + */ + onPressMove?: null | ((event: GestureResponderEvent) => void) | undefined; + /** * Called when a touch is released before `onPress`. */ diff --git a/vnext/src-win/Libraries/Components/TextInput/TextInput.windows.js b/vnext/src-win/Libraries/Components/TextInput/TextInput.windows.js index 6663209cd1b..1169add0905 100644 --- a/vnext/src-win/Libraries/Components/TextInput/TextInput.windows.js +++ b/vnext/src-win/Libraries/Components/TextInput/TextInput.windows.js @@ -500,14 +500,24 @@ function InternalTextInput(props: TextInputProps): React.Node { getNativeRef(): ?TextInputInstance { return inputRef.current; }, - // TODO: Fix this returning true on null === null, when no input is focused isFocused(): boolean { +<<<<<<< Upstream + const currentlyFocusedInput = + TextInputState.currentlyFocusedInput(); + return ( + currentlyFocusedInput != null && + currentlyFocusedInput === inputRef.current + ); +||||||| base + return TextInputState.currentlyFocusedInput() === inputRef.current; +======= const currentlyFocusedInput = TextInputState.currentlyFocusedInput(); return ( currentlyFocusedInput !== null && currentlyFocusedInput === inputRef.current ); +>>>>>>> Override }, setSelection(start: number, end: number): void { if (inputRef.current != null) { diff --git a/vnext/src-win/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.windows.js b/vnext/src-win/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.windows.js index cd715dc410e..bb03ac79b4c 100644 --- a/vnext/src-win/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.windows.js +++ b/vnext/src-win/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.windows.js @@ -23,12 +23,7 @@ import LogBoxInspectorSection from './LogBoxInspectorSection'; import * as LogBoxStyle from './LogBoxStyle'; import * as React from 'react'; -type Props = Readonly<{ - componentCodeFrame: ?CodeFrame, - codeFrame: ?CodeFrame, -}>; - -function CodeFrameDisplay({codeFrame}: {codeFrame: CodeFrame}): React.Node { +component CodeFrameDisplay(codeFrame: CodeFrame) { function getFileName() { // $FlowFixMe[incompatible-use] const matches = /[^/]*$/.exec(codeFrame.fileName); @@ -77,8 +72,10 @@ function CodeFrameDisplay({codeFrame}: {codeFrame: CodeFrame}): React.Node { ); } -function LogBoxInspectorCodeFrame(props: Props): React.Node { - const {codeFrame, componentCodeFrame} = props; +component LogBoxInspectorCodeFrame( + componentCodeFrame: ?CodeFrame, + codeFrame: ?CodeFrame, +) { let sources = []; if (codeFrame != null) { sources.push(codeFrame); @@ -103,7 +100,7 @@ function LogBoxInspectorCodeFrame(props: Props): React.Node { ); } -function AppInfo() { +component AppInfo() { const appInfo = LogBoxData.getAppInfo(); if (appInfo == null) { return null; diff --git a/vnext/src-win/Libraries/LogBox/UI/LogBoxInspectorReactFrames.windows.js b/vnext/src-win/Libraries/LogBox/UI/LogBoxInspectorReactFrames.windows.js index 7f09c1260da..81b2f6d7ad1 100644 --- a/vnext/src-win/Libraries/LogBox/UI/LogBoxInspectorReactFrames.windows.js +++ b/vnext/src-win/Libraries/LogBox/UI/LogBoxInspectorReactFrames.windows.js @@ -21,10 +21,6 @@ import * as LogBoxStyle from './LogBoxStyle'; import * as React from 'react'; import {useState} from 'react'; -type Props = Readonly<{ - log: LogBoxLog, -}>; - const BEFORE_SLASH_RE = /^(.*)[\\/]/; // Taken from React https://github.com/facebook/react/blob/206d61f72214e8ae5b935f0bf8628491cb7f0797/packages/react-devtools-shared/src/backend/describeComponentFrame.js#L27-L41 @@ -49,29 +45,30 @@ function getPrettyFileName(path: string) { return fileName; } -function LogBoxInspectorReactFrames(props: Props): React.Node { + +component LogBoxInspectorReactFrames(log: LogBoxLog) { const [collapsed, setCollapsed] = useState(true); if ( - props.log.getAvailableComponentStack() == null || - props.log.getAvailableComponentStack().length < 1 + log.getAvailableComponentStack() == null || + log.getAvailableComponentStack().length < 1 ) { return null; } function getStackList() { if (collapsed) { - return props.log.getAvailableComponentStack().slice(0, 3); + return log.getAvailableComponentStack().slice(0, 3); } else { - return props.log.getAvailableComponentStack(); + return log.getAvailableComponentStack(); } } function getCollapseMessage() { - if (props.log.getAvailableComponentStack().length <= 3) { + if (log.getAvailableComponentStack().length <= 3) { return; } - const count = props.log.getAvailableComponentStack().length - 3; + const count = log.getAvailableComponentStack().length - 3; if (collapsed) { return `See ${count} more components`; } else { @@ -164,22 +161,44 @@ const componentStyles = StyleSheet.create({ paddingRight: 10, }, frameName: { +<<<<<<< Upstream + fontFamily: Platform.select({ + android: 'monospace', + ios: 'Menlo', + macos: 'Menlo', + windows: 'Consolas', + }), +||||||| base + fontFamily: Platform.select({android: 'monospace', ios: 'Menlo'}), +======= fontFamily: Platform.select({ android: 'monospace', ios: 'Menlo', windows: 'Consolas', }), +>>>>>>> Override color: LogBoxStyle.getTextColor(1), fontSize: 14, includeFontPadding: false, lineHeight: 18, }, bracket: { +<<<<<<< Upstream + fontFamily: Platform.select({ + android: 'monospace', + ios: 'Menlo', + macos: 'Menlo', + windows: 'Consolas', + }), +||||||| base + fontFamily: Platform.select({android: 'monospace', ios: 'Menlo'}), +======= fontFamily: Platform.select({ android: 'monospace', ios: 'Menlo', windows: 'Consolas', }), +>>>>>>> Override color: LogBoxStyle.getTextColor(0.4), fontSize: 14, fontWeight: '500', diff --git a/vnext/src-win/Libraries/LogBox/UI/LogBoxInspectorStackFrame.windows.js b/vnext/src-win/Libraries/LogBox/UI/LogBoxInspectorStackFrame.windows.js index 502838b7559..29754117900 100644 --- a/vnext/src-win/Libraries/LogBox/UI/LogBoxInspectorStackFrame.windows.js +++ b/vnext/src-win/Libraries/LogBox/UI/LogBoxInspectorStackFrame.windows.js @@ -19,13 +19,10 @@ import LogBoxButton from './LogBoxButton'; import * as LogBoxStyle from './LogBoxStyle'; import * as React from 'react'; -type Props = Readonly<{ +component LogBoxInspectorStackFrame( frame: StackFrame, onPress?: ?(event: GestureResponderEvent) => void, -}>; - -function LogBoxInspectorStackFrame(props: Props): React.Node { - const {frame, onPress} = props; +) { const column = frame.column != null && parseInt(frame.column, 10); const location = getFileName(frame.file) + @@ -90,11 +87,22 @@ const styles = StyleSheet.create({ includeFontPadding: false, lineHeight: 18, fontWeight: '400', +<<<<<<< Upstream + fontFamily: Platform.select({ + android: 'monospace', + ios: 'Menlo', + macos: 'Menlo', + windows: 'Consolas', + }), +||||||| base + fontFamily: Platform.select({android: 'monospace', ios: 'Menlo'}), +======= fontFamily: Platform.select({ android: 'monospace', ios: 'Menlo', windows: 'Consolas', }), +>>>>>>> Override }, location: { color: LogBoxStyle.getTextColor(0.8), diff --git a/vnext/src-win/Libraries/Text/Text.windows.js b/vnext/src-win/Libraries/Text/Text.windows.js index 274135803d8..845e3d9677e 100644 --- a/vnext/src-win/Libraries/Text/Text.windows.js +++ b/vnext/src-win/Libraries/Text/Text.windows.js @@ -14,10 +14,12 @@ 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'; import processColor from '../StyleSheet/processColor'; +import StyleSheet from '../StyleSheet/StyleSheet'; import Platform from '../Utilities/Platform'; import TextAncestorContext from './TextAncestorContext'; import {NativeText, NativeVirtualText} from './TextNativeComponent'; @@ -245,6 +247,10 @@ const TextImpl: component( } } + if (ReactNativeFeatureFlags.defaultTextToOverflowHidden()) { + _style = [styles.default, _style]; + } + const _nativeID = id ?? nativeID; if (_accessibilityLabel !== undefined) { @@ -589,4 +595,13 @@ const verticalAlignToTextAlignVerticalMap = { middle: 'center', } as const; +const styles = StyleSheet.create({ + // Native components have historically acted like overflow: 'hidden'. We set + // this, as part of the default style, to let client differentiate with + // overflow: 'visible'. + default: { + overflow: 'hidden', + }, +}); + export default TextImpl; diff --git a/vnext/src-win/index.windows.js b/vnext/src-win/index.windows.js index 575beee4983..d69a61eccd4 100644 --- a/vnext/src-win/index.windows.js +++ b/vnext/src-win/index.windows.js @@ -341,6 +341,12 @@ module.exports = { get useAnimatedValue() { return require('./Libraries/Animated/useAnimatedValue').default; }, + get useAnimatedValueXY() { + return require('./Libraries/Animated/useAnimatedValueXY').default; + }, + get useAnimatedColor() { + return require('./Libraries/Animated/useAnimatedColor').default; + }, get useColorScheme() { return require('./Libraries/Utilities/useColorScheme').default; }, diff --git a/vnext/src-win/index.windows.js.flow b/vnext/src-win/index.windows.js.flow index 5504f879c58..e61f6cc9717 100644 --- a/vnext/src-win/index.windows.js.flow +++ b/vnext/src-win/index.windows.js.flow @@ -407,6 +407,8 @@ export * as TurboModuleRegistry from './Libraries/TurboModule/TurboModuleRegistr export {default as UIManager} from './Libraries/ReactNative/UIManager'; export {unstable_batchedUpdates} from './Libraries/ReactNative/RendererProxy'; export {default as useAnimatedValue} from './Libraries/Animated/useAnimatedValue'; +export {default as useAnimatedValueXY} from './Libraries/Animated/useAnimatedValueXY'; +export {default as useAnimatedColor} from './Libraries/Animated/useAnimatedColor'; export type { PressabilityConfig, EventHandlers as PressabilityEventHandlers, diff --git a/yarn.lock b/yarn.lock index 062e95fb109..cb98726a18f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -468,7 +468,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.4, @babel/parser@npm:^7.25.3, @babel/parser@npm:^7.28.6, @babel/parser@npm:^7.29.0": +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.4, @babel/parser@npm:^7.28.6, @babel/parser@npm:^7.29.0": version: 7.29.2 resolution: "@babel/parser@npm:7.29.2" dependencies: @@ -1961,7 +1961,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.25.3, @babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.28.5, @babel/traverse@npm:^7.28.6, @babel/traverse@npm:^7.29.0": +"@babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.28.5, @babel/traverse@npm:^7.28.6, @babel/traverse@npm:^7.29.0": version: 7.29.0 resolution: "@babel/traverse@npm:7.29.0" dependencies: @@ -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-20260210-4535df4f6" + "@react-native/tester": "npm:0.85.0-nightly-20260224-42cd0f041" "@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-20260210-4535df4f6" + react-native: "npm:0.85.0-nightly-20260224-42cd0f041" 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-20260210-4535df4f6 + react-native: 0.85.0-nightly-20260224-42cd0f041 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-20260210-4535df4f6" - "@react-native/codegen": "npm:0.85.0-nightly-20260210-4535df4f6" - "@react-native/community-cli-plugin": "npm:0.85.0-nightly-20260210-4535df4f6" - "@react-native/gradle-plugin": "npm:0.85.0-nightly-20260210-4535df4f6" - "@react-native/js-polyfills": "npm:0.85.0-nightly-20260210-4535df4f6" - "@react-native/metro-config": "npm:0.85.0-nightly-20260210-4535df4f6" - "@react-native/normalize-colors": "npm:0.85.0-nightly-20260210-4535df4f6" - "@react-native/virtualized-lists": "npm:0.85.0-nightly-20260210-4535df4f6" + "@react-native/assets-registry": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/codegen": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/community-cli-plugin": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/gradle-plugin": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/js-polyfills": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/metro-config": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/normalize-colors": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/virtualized-lists": "npm:0.85.0-nightly-20260224-42cd0f041" "@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-20260210-4535df4f6" + react-native: "npm:0.85.0-nightly-20260224-42cd0f041" 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-20260210-4535df4f6 + react-native: 0.85.0-nightly-20260224-42cd0f041 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-20260210-4535df4f6" + react-native: "npm:0.85.0-nightly-20260224-42cd0f041" 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-20260210-4535df4f6" + react-native: "npm:0.85.0-nightly-20260224-42cd0f041" 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-20260210-4535df4f6 + react-native: 0.85.0-nightly-20260224-42cd0f041 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-20260210-4535df4f6" - "@react-native/tester": "npm:0.85.0-nightly-20260210-4535df4f6" + "@react-native/new-app-screen": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/tester": "npm:0.85.0-nightly-20260224-42cd0f041" "@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-20260210-4535df4f6" + react-native: "npm:0.85.0-nightly-20260224-42cd0f041" 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-20260210-4535df4f6 + react-native: 0.85.0-nightly-20260224-42cd0f041 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-20260210-4535df4f6": - version: 0.85.0-nightly-20260210-4535df4f6 - resolution: "@react-native/assets-registry@npm:0.85.0-nightly-20260210-4535df4f6" - checksum: 10c0/77e3bad7c3e42ef0b5509fb7b0898f48ac3dc14bf7bbd186be6857bc9ae7770c4d101c9d5f1dbf59ca52ecb82d6de67dc28edc7ba1c1a32e8d5333ca0c0988d9 +"@react-native/assets-registry@npm:0.85.0-nightly-20260224-42cd0f041": + version: 0.85.0-nightly-20260224-42cd0f041 + resolution: "@react-native/assets-registry@npm:0.85.0-nightly-20260224-42cd0f041" + checksum: 10c0/4b02cc1ae507fdb06923f57337efbd2b42f6c7f65f66c531b497a5b465b8bc856accf84185bbce6b6a2732219471aaae9d9d5cf4be1e2a9288b414ecf9f7ac02 languageName: node linkType: hard @@ -4329,19 +4329,19 @@ __metadata: languageName: node linkType: hard -"@react-native/babel-plugin-codegen@npm:0.85.0-nightly-20260210-4535df4f6": - version: 0.85.0-nightly-20260210-4535df4f6 - resolution: "@react-native/babel-plugin-codegen@npm:0.85.0-nightly-20260210-4535df4f6" +"@react-native/babel-plugin-codegen@npm:0.85.0-nightly-20260224-42cd0f041": + version: 0.85.0-nightly-20260224-42cd0f041 + resolution: "@react-native/babel-plugin-codegen@npm:0.85.0-nightly-20260224-42cd0f041" dependencies: - "@babel/traverse": "npm:^7.25.3" - "@react-native/codegen": "npm:0.85.0-nightly-20260210-4535df4f6" - checksum: 10c0/7980d172953da42e86832dea5f3280b20eb95f5e916d45376cfe5dfd4598cc7d7df2ad7e73e87b476a938d167498263f9bf4c8018ff6fc0affeba9492722411b + "@babel/traverse": "npm:^7.29.0" + "@react-native/codegen": "npm:0.85.0-nightly-20260224-42cd0f041" + checksum: 10c0/8188959a4ca2224a9d5a02bbfe6dd3a270853730a5d7604d98846812ad31447c8eb1dbcc311013371e7345853a8d10a3da2da723cf221c498aff4bca2cf7b627 languageName: node linkType: hard -"@react-native/babel-preset@npm:0.85.0-nightly-20260210-4535df4f6": - version: 0.85.0-nightly-20260210-4535df4f6 - resolution: "@react-native/babel-preset@npm:0.85.0-nightly-20260210-4535df4f6" +"@react-native/babel-preset@npm:0.85.0-nightly-20260224-42cd0f041": + version: 0.85.0-nightly-20260224-42cd0f041 + resolution: "@react-native/babel-preset@npm:0.85.0-nightly-20260224-42cd0f041" dependencies: "@babel/core": "npm:^7.25.2" "@babel/plugin-proposal-export-default-from": "npm:^7.24.7" @@ -4372,22 +4372,22 @@ __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-20260210-4535df4f6" + "@react-native/babel-plugin-codegen": "npm:0.85.0-nightly-20260224-42cd0f041" 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/7f93ce6554c7dde7763623b9a94ba12342c923719b2f329b072a462c6af5b3fcb3ecbf857c2a571e67042fc697572dd96e6a17c01024dc8b0343d6363d7feeed + checksum: 10c0/20167b817989f7b3fd67e578b386e2cbce9a4ce8d6240525863984c23a59512542bc25782f17c5bda8b456f904e98c6bc06316cb5a2c5a0b40feb5276517474d languageName: node linkType: hard -"@react-native/codegen@npm:0.85.0-nightly-20260210-4535df4f6": - version: 0.85.0-nightly-20260210-4535df4f6 - resolution: "@react-native/codegen@npm:0.85.0-nightly-20260210-4535df4f6" +"@react-native/codegen@npm:0.85.0-nightly-20260224-42cd0f041": + version: 0.85.0-nightly-20260224-42cd0f041 + resolution: "@react-native/codegen@npm:0.85.0-nightly-20260224-42cd0f041" dependencies: "@babel/core": "npm:^7.25.2" - "@babel/parser": "npm:^7.25.3" + "@babel/parser": "npm:^7.29.0" hermes-parser: "npm:0.33.3" invariant: "npm:^2.2.4" nullthrows: "npm:^1.1.1" @@ -4395,58 +4395,58 @@ __metadata: yargs: "npm:^17.6.2" peerDependencies: "@babel/core": "*" - checksum: 10c0/587a67794db3c2edc507c9b7a2934ffaedaeff1998c168e74445f860568545a45db160a9a59df2bf66ebc4101d9006007d600da20a0630144c9bd3309a621b43 + checksum: 10c0/a983349a80565fa580c9c7e7a1504e3eaa8dc3fc733b3c18008b178e2fcae9e9401e296e3c97a2346363c15f273d2984647cad5201831e91e7b018e0a73b8ee4 languageName: node linkType: hard -"@react-native/community-cli-plugin@npm:0.85.0-nightly-20260210-4535df4f6": - version: 0.85.0-nightly-20260210-4535df4f6 - resolution: "@react-native/community-cli-plugin@npm:0.85.0-nightly-20260210-4535df4f6" +"@react-native/community-cli-plugin@npm:0.85.0-nightly-20260224-42cd0f041": + version: 0.85.0-nightly-20260224-42cd0f041 + resolution: "@react-native/community-cli-plugin@npm:0.85.0-nightly-20260224-42cd0f041" dependencies: - "@react-native/dev-middleware": "npm:0.85.0-nightly-20260210-4535df4f6" + "@react-native/dev-middleware": "npm:0.85.0-nightly-20260224-42cd0f041" debug: "npm:^4.4.0" invariant: "npm:^2.2.4" - metro: "npm:^0.83.3" - metro-config: "npm:^0.83.3" - metro-core: "npm:^0.83.3" + metro: "npm:^0.84.0" + metro-config: "npm:^0.84.0" + metro-core: "npm:^0.84.0" semver: "npm:^7.1.3" peerDependencies: "@react-native-community/cli": "*" - "@react-native/metro-config": "*" + "@react-native/metro-config": 0.85.0-nightly-20260224-42cd0f041 peerDependenciesMeta: "@react-native-community/cli": optional: true "@react-native/metro-config": optional: true - checksum: 10c0/876151d3ea742caf3bb98cfce024040e806b1f911634c2e61c5abb69c337a00acb158bda432fb899d02a20ec5afb3676ed67deb11805138c90074c67e383a2b5 + checksum: 10c0/d58059a19fe794cbd099110f9cecbdd45738d38770b72bf8ebffb915be0b2b7fc45d3234f17f8448be7b5f5b8e48ebaf04beb1c8fb31e7bd9bda392b25e7146b languageName: node linkType: hard -"@react-native/debugger-frontend@npm:0.85.0-nightly-20260210-4535df4f6": - version: 0.85.0-nightly-20260210-4535df4f6 - resolution: "@react-native/debugger-frontend@npm:0.85.0-nightly-20260210-4535df4f6" - checksum: 10c0/97340edd3a77696da0d6a648a4418b3f1bbc31a67a89fecffd03ef40adc63441af75f642fd19485385fc177d9ceafb2b7c078c35a81ada84a9cfba5f9d8ea3ea +"@react-native/debugger-frontend@npm:0.85.0-nightly-20260224-42cd0f041": + version: 0.85.0-nightly-20260224-42cd0f041 + resolution: "@react-native/debugger-frontend@npm:0.85.0-nightly-20260224-42cd0f041" + checksum: 10c0/42fd0a9eb5b56652a74bd30463620f8f1c168d8b602394f64deab7bf295459e693b891a5b75d353b4bfd7a3b364323bc8a49b45cc30d36dac7136d2fb3ec2e6b languageName: node linkType: hard -"@react-native/debugger-shell@npm:0.85.0-nightly-20260210-4535df4f6": - version: 0.85.0-nightly-20260210-4535df4f6 - resolution: "@react-native/debugger-shell@npm:0.85.0-nightly-20260210-4535df4f6" +"@react-native/debugger-shell@npm:0.85.0-nightly-20260224-42cd0f041": + version: 0.85.0-nightly-20260224-42cd0f041 + resolution: "@react-native/debugger-shell@npm:0.85.0-nightly-20260224-42cd0f041" dependencies: cross-spawn: "npm:^7.0.6" debug: "npm:^4.4.0" fb-dotslash: "npm:0.5.8" - checksum: 10c0/4bdf7369a9fad37f9c55cbe27db11dee5c25531db152dfca9cfc22eb5bff4c803a798f2d4d91dc5f93d89c8103cc17c01278bbc07772bfa62730071d12777d3c + checksum: 10c0/d380a2c664c1f05bbdcf3230c26ebb738a2285848092559eb72d9795b2aefc2cd2bcbf093bc61fd6155d503ee7c5166f55a2181f9383a94de5c66aa36b21e97f languageName: node linkType: hard -"@react-native/dev-middleware@npm:0.85.0-nightly-20260210-4535df4f6": - version: 0.85.0-nightly-20260210-4535df4f6 - resolution: "@react-native/dev-middleware@npm:0.85.0-nightly-20260210-4535df4f6" +"@react-native/dev-middleware@npm:0.85.0-nightly-20260224-42cd0f041": + version: 0.85.0-nightly-20260224-42cd0f041 + resolution: "@react-native/dev-middleware@npm:0.85.0-nightly-20260224-42cd0f041" dependencies: "@isaacs/ttlcache": "npm:^1.4.1" - "@react-native/debugger-frontend": "npm:0.85.0-nightly-20260210-4535df4f6" - "@react-native/debugger-shell": "npm:0.85.0-nightly-20260210-4535df4f6" + "@react-native/debugger-frontend": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/debugger-shell": "npm:0.85.0-nightly-20260224-42cd0f041" chrome-launcher: "npm:^0.15.2" chromium-edge-launcher: "npm:^0.3.0" connect: "npm:^3.6.5" @@ -4456,17 +4456,17 @@ __metadata: open: "npm:^7.0.3" serve-static: "npm:^1.16.2" ws: "npm:^7.5.10" - checksum: 10c0/10d08a28c7b870d6c86a6983a438d06b3053906268a82fdb6e59e58fa14a36057d10adaea663bdd20b5fa3d34ee8452b241672d4283887410f0e78064d005b11 + checksum: 10c0/c2c5702b37b99f9147059c150e1e87f938f87239d26624fde794907522277324e9d3aaeda4b2965a6485b4f10f83e5947977fb8dad27bb97e253897a1752d6bd languageName: node linkType: hard -"@react-native/eslint-config@npm:0.85.0-nightly-20260210-4535df4f6": - version: 0.85.0-nightly-20260210-4535df4f6 - resolution: "@react-native/eslint-config@npm:0.85.0-nightly-20260210-4535df4f6" +"@react-native/eslint-config@npm:0.85.0-nightly-20260224-42cd0f041": + version: 0.85.0-nightly-20260224-42cd0f041 + resolution: "@react-native/eslint-config@npm:0.85.0-nightly-20260224-42cd0f041" dependencies: "@babel/core": "npm:^7.25.2" "@babel/eslint-parser": "npm:^7.25.1" - "@react-native/eslint-plugin": "npm:0.85.0-nightly-20260210-4535df4f6" + "@react-native/eslint-plugin": "npm:0.85.0-nightly-20260224-42cd0f041" "@typescript-eslint/eslint-plugin": "npm:^8.36.0" "@typescript-eslint/parser": "npm:^8.36.0" eslint-config-prettier: "npm:^8.5.0" @@ -4479,54 +4479,54 @@ __metadata: peerDependencies: eslint: ^8.0.0 || ^9.0.0 prettier: ">=2" - checksum: 10c0/0a4c0abe62706070cbf8fd72cae038504b4aa2f136446ec18833aa118e3826d9c031f01789ecde52ff42bbc8021f69c42d5107475428b56c9e55eeade353cbcc + checksum: 10c0/9834341f030bc28132af75fafe36b343c1334361aded9392e9947dba3c1ac148c810480917bf94790b2d89e640f74cc8132211790292864ba003cd45d744fda1 languageName: node linkType: hard -"@react-native/eslint-plugin@npm:0.85.0-nightly-20260210-4535df4f6": - version: 0.85.0-nightly-20260210-4535df4f6 - resolution: "@react-native/eslint-plugin@npm:0.85.0-nightly-20260210-4535df4f6" - checksum: 10c0/8345c1a22a743ef9c2ca0fc898b77e24a297e71a8e826d2f862c907d53f19b2a8aedc2d3c8b1442ac486903b8b8f411e643f1322c98fcf7b6e9ed7e15af72579 +"@react-native/eslint-plugin@npm:0.85.0-nightly-20260224-42cd0f041": + version: 0.85.0-nightly-20260224-42cd0f041 + resolution: "@react-native/eslint-plugin@npm:0.85.0-nightly-20260224-42cd0f041" + checksum: 10c0/0f7f6e6c58a7f93045936f15a64dc0384f62326f89911a59378bf38140c3ecfa5a304016a5f1507e8dcdecb9605864bb3384ec168bf3d67a2bb27aa02d01f838 languageName: node linkType: hard -"@react-native/gradle-plugin@npm:0.85.0-nightly-20260210-4535df4f6": - version: 0.85.0-nightly-20260210-4535df4f6 - resolution: "@react-native/gradle-plugin@npm:0.85.0-nightly-20260210-4535df4f6" - checksum: 10c0/86a4b0e587d504e535205881ca118f09280272a7dfe60f78759cbbcb5952992b715da75c36743b21238b12afc78536d01c3c68bf0064d8267fde11509b3705b3 +"@react-native/gradle-plugin@npm:0.85.0-nightly-20260224-42cd0f041": + version: 0.85.0-nightly-20260224-42cd0f041 + resolution: "@react-native/gradle-plugin@npm:0.85.0-nightly-20260224-42cd0f041" + checksum: 10c0/e968f294613863845924d4027a0a7a5ac1f9fa96987b0db2d9153a72e8a9f29fe5a1cd9be5ae7a1145ff282635ff47da78b7270e609d3fe3a0350f40efa7336d languageName: node linkType: hard -"@react-native/js-polyfills@npm:0.85.0-nightly-20260210-4535df4f6": - version: 0.85.0-nightly-20260210-4535df4f6 - resolution: "@react-native/js-polyfills@npm:0.85.0-nightly-20260210-4535df4f6" - checksum: 10c0/d78449fca561fd59afd21c43b18eaf73f5f8da1112eb430007b0802702e853d9858291ee74963c9ad04fd761583f07733c1d26cb5830ef322439c586bd6a7cb6 +"@react-native/js-polyfills@npm:0.85.0-nightly-20260224-42cd0f041": + version: 0.85.0-nightly-20260224-42cd0f041 + resolution: "@react-native/js-polyfills@npm:0.85.0-nightly-20260224-42cd0f041" + checksum: 10c0/28adfedd90a0835503e4402acbd8cfb973bc157490943912ad7bd1947c817a55b5960d60bf09b457c6cc0ba571989e18c385fc0a4c39be18e4cb0d074ed8def0 languageName: node linkType: hard -"@react-native/metro-babel-transformer@npm:0.85.0-nightly-20260210-4535df4f6": - version: 0.85.0-nightly-20260210-4535df4f6 - resolution: "@react-native/metro-babel-transformer@npm:0.85.0-nightly-20260210-4535df4f6" +"@react-native/metro-babel-transformer@npm:0.85.0-nightly-20260224-42cd0f041": + version: 0.85.0-nightly-20260224-42cd0f041 + resolution: "@react-native/metro-babel-transformer@npm:0.85.0-nightly-20260224-42cd0f041" dependencies: "@babel/core": "npm:^7.25.2" - "@react-native/babel-preset": "npm:0.85.0-nightly-20260210-4535df4f6" + "@react-native/babel-preset": "npm:0.85.0-nightly-20260224-42cd0f041" hermes-parser: "npm:0.33.3" nullthrows: "npm:^1.1.1" peerDependencies: "@babel/core": "*" - checksum: 10c0/f5bf20add9e3aac5d0a9e7aad93c9469cbef19133ecd3914ca8416290e72a0cc76e29a56e1fdefb570a99ee4cfa818469196c930c93593612ca30589db4adf9a + checksum: 10c0/7775179188fbb8194d1fa8f1931b206171e1f987589808decb2f5de1048d90df83ad42a8d18496c4a0646c315db37df65e827657c965b61d65ecb4ec22ae470f languageName: node linkType: hard -"@react-native/metro-config@npm:0.85.0-nightly-20260210-4535df4f6": - version: 0.85.0-nightly-20260210-4535df4f6 - resolution: "@react-native/metro-config@npm:0.85.0-nightly-20260210-4535df4f6" +"@react-native/metro-config@npm:0.85.0-nightly-20260224-42cd0f041": + version: 0.85.0-nightly-20260224-42cd0f041 + resolution: "@react-native/metro-config@npm:0.85.0-nightly-20260224-42cd0f041" dependencies: - "@react-native/js-polyfills": "npm:0.85.0-nightly-20260210-4535df4f6" - "@react-native/metro-babel-transformer": "npm:0.85.0-nightly-20260210-4535df4f6" - metro-config: "npm:^0.83.3" - metro-runtime: "npm:^0.83.3" - checksum: 10c0/2c865e48a54b11ff03acab8fcf67727e880ea7012e352171f1d43d9ba4866cb729e88fb1add41f9ab29045d091b21f9800f9890f3f6b5370a7c3ceedde51e5c7 + "@react-native/js-polyfills": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/metro-babel-transformer": "npm:0.85.0-nightly-20260224-42cd0f041" + metro-config: "npm:^0.84.0" + metro-runtime: "npm:^0.84.0" + checksum: 10c0/3f86af33cdc1626d42a039e505a4d418b577b69f60a29a29b5cc7421bceb3e73fb25a4488faf6f7e757b43afc882f3fd6d90fa2ecffd652785cfd1f00d0e28ea 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-20260210-4535df4f6" - "@react-native/metro-config": "npm:0.85.0-nightly-20260210-4535df4f6" + "@react-native/metro-babel-transformer": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/metro-config": "npm:0.85.0-nightly-20260224-42cd0f041" "@tsconfig/node22": "npm:22.0.2" "@types/react": "npm:^19.2.3" "@typescript-eslint/parser": "npm:^8.36.0" @@ -4624,59 +4624,59 @@ __metadata: languageName: node linkType: hard -"@react-native/new-app-screen@npm:0.85.0-nightly-20260210-4535df4f6": - version: 0.85.0-nightly-20260210-4535df4f6 - resolution: "@react-native/new-app-screen@npm:0.85.0-nightly-20260210-4535df4f6" +"@react-native/new-app-screen@npm:0.85.0-nightly-20260224-42cd0f041": + version: 0.85.0-nightly-20260224-42cd0f041 + resolution: "@react-native/new-app-screen@npm:0.85.0-nightly-20260224-42cd0f041" peerDependencies: "@types/react": ^19.1.0 react: "*" - react-native: "*" + react-native: 0.85.0-nightly-20260224-42cd0f041 peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/683f7f86d9468f455b41719d6e4b91ab0d2d955aec823e553c4f8101094d1c7bce984e5bb39089f91c4f5787becb559b9b6f9dce562a87b7bfe496ddea8a9166 + checksum: 10c0/700a6348f46a4ffccf491ca904cfdf315ffc62bb807ac9c22adfa763c1b5e1e54db6f3480440e61fc47cccd6b0ac53f6a8e7e8c37026bbee9cbc251b38aabdfd languageName: node linkType: hard -"@react-native/normalize-colors@npm:0.85.0-nightly-20260210-4535df4f6": - version: 0.85.0-nightly-20260210-4535df4f6 - resolution: "@react-native/normalize-colors@npm:0.85.0-nightly-20260210-4535df4f6" - checksum: 10c0/af7f8b47c676ab6e4144f25b11122b5210d13130c5686b2e2b626e89d9f2b99bfe47f6e639d29d5cf38b39670cee05462a7bacb20198f49d0da4a3e3ada80558 +"@react-native/normalize-colors@npm:0.85.0-nightly-20260224-42cd0f041": + version: 0.85.0-nightly-20260224-42cd0f041 + resolution: "@react-native/normalize-colors@npm:0.85.0-nightly-20260224-42cd0f041" + checksum: 10c0/a124c59a58821035927bb25e44e233a61b38b0eaff62f77b209c8ffdfdb9169dde832e6928d3f4022daae9a398436800ede963bd8bf9ce3916b49e027a510653 languageName: node linkType: hard -"@react-native/popup-menu-android@npm:0.85.0-nightly-20260210-4535df4f6": - version: 0.85.0-nightly-20260210-4535df4f6 - resolution: "@react-native/popup-menu-android@npm:0.85.0-nightly-20260210-4535df4f6" +"@react-native/popup-menu-android@npm:0.85.0-nightly-20260224-42cd0f041": + version: 0.85.0-nightly-20260224-42cd0f041 + resolution: "@react-native/popup-menu-android@npm:0.85.0-nightly-20260224-42cd0f041" dependencies: nullthrows: "npm:^1.1.1" peerDependencies: "@types/react": ^19.1.0 react: "*" - react-native: "*" + react-native: 0.85.0-nightly-20260224-42cd0f041 peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/a45a0be7e7a278cd905061e278055b208de61694d1a0e1af5228c21e806e98b59421799f42ecc8d4274f74f30c085d731f4a2b208c7a201318336fd47b20c3ff + checksum: 10c0/a5a170f273e8e95c5aa82058270daa23b80fdd2b1656e431d56a72ba94e1f565bafc1b1f954868bf216579d5c5c25b923069be2cb7f811716694f03f800e5f85 languageName: node linkType: hard -"@react-native/tester@npm:0.85.0-nightly-20260210-4535df4f6, @react-native/tester@workspace:packages/@react-native/tester": +"@react-native/tester@npm:0.85.0-nightly-20260224-42cd0f041, @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-20260210-4535df4f6" - "@react-native/popup-menu-android": "npm:0.85.0-nightly-20260210-4535df4f6" + "@react-native/new-app-screen": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/popup-menu-android": "npm:0.85.0-nightly-20260224-42cd0f041" 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-20260210-4535df4f6" + react-native: "npm:0.85.0-nightly-20260224-42cd0f041" rxjs: "npm:@react-native-community/rxjs@6.5.4-custom" peerDependencies: react: 19.2.3 @@ -4684,20 +4684,20 @@ __metadata: languageName: unknown linkType: soft -"@react-native/virtualized-lists@npm:0.85.0-nightly-20260210-4535df4f6": - version: 0.85.0-nightly-20260210-4535df4f6 - resolution: "@react-native/virtualized-lists@npm:0.85.0-nightly-20260210-4535df4f6" +"@react-native/virtualized-lists@npm:0.85.0-nightly-20260224-42cd0f041": + version: 0.85.0-nightly-20260224-42cd0f041 + resolution: "@react-native/virtualized-lists@npm:0.85.0-nightly-20260224-42cd0f041" dependencies: invariant: "npm:^2.2.4" nullthrows: "npm:^1.1.1" peerDependencies: "@types/react": ^19.2.0 react: "*" - react-native: "*" + react-native: 0.85.0-nightly-20260224-42cd0f041 peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/1c2366d0a44faddb9004e1a93e299660a84a1c43504da5ba1dc7680556417804f49bd09e7295150c8be7afdfb4e9c0521e2352841c2a61b9d6469f497631c020 + checksum: 10c0/292449ba5d26a7289c13c5f6de11ef7079a7c19c47f94a7f86c62675e88b5e259d7807e1744c6713b98458ac9f584c62db1d7b1f761667fdf8a82cabd7cd6e1a 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-20260210-4535df4f6" + "@react-native/babel-preset": "npm:0.85.0-nightly-20260224-42cd0f041" 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-20260210-4535df4f6" + "@react-native/metro-config": "npm:0.85.0-nightly-20260224-42cd0f041" "@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-20260210-4535df4f6" + react-native: "npm:0.85.0-nightly-20260224-42cd0f041" 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-20260210-4535df4f6" + "@react-native/eslint-config": "npm:0.85.0-nightly-20260224-42cd0f041" 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-20260210-4535df4f6" + react-native: "npm:0.85.0-nightly-20260224-42cd0f041" 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-20260210-4535df4f6" + "@react-native/metro-config": "npm:0.85.0-nightly-20260224-42cd0f041" "@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-20260210-4535df4f6" + react-native: "npm:0.85.0-nightly-20260224-42cd0f041" 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-20260210-4535df4f6" + "@react-native/metro-config": "npm:0.85.0-nightly-20260224-42cd0f041" "@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-20260210-4535df4f6" + react-native: "npm:0.85.0-nightly-20260224-42cd0f041" 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-20260210-4535df4f6" + "@react-native/metro-config": "npm:0.85.0-nightly-20260224-42cd0f041" "@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-20260210-4535df4f6" + react-native: "npm:0.85.0-nightly-20260224-42cd0f041" 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-20260210-4535df4f6" + "@react-native/metro-config": "npm:0.85.0-nightly-20260224-42cd0f041" "@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-20260210-4535df4f6" + react-native: "npm:0.85.0-nightly-20260224-42cd0f041" react-native-windows: "npm:^0.0.0-canary.1056" typescript: "npm:5.0.4" languageName: unknown @@ -13966,69 +13966,70 @@ __metadata: languageName: node linkType: hard -"metro-babel-transformer@npm:0.83.5": - version: 0.83.5 - resolution: "metro-babel-transformer@npm:0.83.5" +"metro-babel-transformer@npm:0.84.4": + version: 0.84.4 + resolution: "metro-babel-transformer@npm:0.84.4" dependencies: "@babel/core": "npm:^7.25.2" flow-enums-runtime: "npm:^0.0.6" - hermes-parser: "npm:0.33.3" + hermes-parser: "npm:0.35.0" + metro-cache-key: "npm:0.84.4" nullthrows: "npm:^1.1.1" - checksum: 10c0/b1448241d5d7a77eeca758226bde5fc44da9f2e63f4e67037c289fe006c0f047b84fc3e77be61ba14ea605b0890232813ab75b1915faad21796b9bb873458506 + checksum: 10c0/d1ac996666334bc1cfe9d399cbf4cd747b675f6f8f758c2317eebcc52bd76046ed864ddb7b270efeb8cf337940a61fb03912e5c859b7cbc54687c2f5c41a9d2a languageName: node linkType: hard -"metro-cache-key@npm:0.83.5": - version: 0.83.5 - resolution: "metro-cache-key@npm:0.83.5" +"metro-cache-key@npm:0.84.4": + version: 0.84.4 + resolution: "metro-cache-key@npm:0.84.4" dependencies: flow-enums-runtime: "npm:^0.0.6" - checksum: 10c0/eda804592ec589b6be3659f0567df549dea21ba7773e0fed72db567e6e6ce2dcf56c34616cf204ce1b28261eed756f4f91ae4a187e3285282912f00f09892c6b + checksum: 10c0/a82ab6367f11886d960cc8fa1f3aa54f6529fe30c16059c141c3e789084c50838fdd7e1a5528534cd9c11a74c63aa5c6a7461dbfa50e8c449b6141eaf2fd05e0 languageName: node linkType: hard -"metro-cache@npm:0.83.5": - version: 0.83.5 - resolution: "metro-cache@npm:0.83.5" +"metro-cache@npm:0.84.4": + version: 0.84.4 + resolution: "metro-cache@npm:0.84.4" dependencies: exponential-backoff: "npm:^3.1.1" flow-enums-runtime: "npm:^0.0.6" https-proxy-agent: "npm:^7.0.5" - metro-core: "npm:0.83.5" - checksum: 10c0/0f261c234c63a4480398b72250bd97325532a3e8e401a41927f96f48e9e707f1dc36070a90fb293568855b32aa70af26636d255f4bff8aecb9a42bbf30412667 + metro-core: "npm:0.84.4" + checksum: 10c0/3bf7f3a1f85b4f1af05f4b2c71c78e56fd3262d967ee43f02e9ff6820254063af33a70b6549e3dc5e993a6a0b9df92e9279632ad9a8b1cde2577342f93df45eb languageName: node linkType: hard -"metro-config@npm:0.83.5, metro-config@npm:^0.83.3": - version: 0.83.5 - resolution: "metro-config@npm:0.83.5" +"metro-config@npm:0.84.4, metro-config@npm:^0.84.0": + version: 0.84.4 + resolution: "metro-config@npm:0.84.4" dependencies: connect: "npm:^3.6.5" flow-enums-runtime: "npm:^0.0.6" jest-validate: "npm:^29.7.0" - metro: "npm:0.83.5" - metro-cache: "npm:0.83.5" - metro-core: "npm:0.83.5" - metro-runtime: "npm:0.83.5" + metro: "npm:0.84.4" + metro-cache: "npm:0.84.4" + metro-core: "npm:0.84.4" + metro-runtime: "npm:0.84.4" yaml: "npm:^2.6.1" - checksum: 10c0/ce025d0cba7ec8be51d64d4b34126aec8db19fbc87f52c8cb0393c6286506e0527eb1564522e42c4a9007826fa0d20034a817a5431102bce41ae94b8d5a3e996 + checksum: 10c0/f8aaf7d8cff9b486353b62f4746b0a70f99749bd4061f5ae847524aaedcd9c5a34bf176cbbe12fb33e771e8ed3c1496654b2578fa5ba8b9e4f856f0589744d98 languageName: node linkType: hard -"metro-core@npm:0.83.5, metro-core@npm:^0.83.3": - version: 0.83.5 - resolution: "metro-core@npm:0.83.5" +"metro-core@npm:0.84.4, metro-core@npm:^0.84.0": + version: 0.84.4 + resolution: "metro-core@npm:0.84.4" dependencies: flow-enums-runtime: "npm:^0.0.6" lodash.throttle: "npm:^4.1.1" - metro-resolver: "npm:0.83.5" - checksum: 10c0/b3b7e6a65216b8cbff866455570159f20d1e06201b54a6cf8fa7892c0ca0adcfb8c11f23fd59f845b8d30153a59b3471b7174968a7862c66f042b7c032ee93bc + metro-resolver: "npm:0.84.4" + checksum: 10c0/19d859de16b5e082c9c31bed981c579a4e6d31a626c7829b725df9ae0ffb755d0ef7809ba9f8adf22d3921f5ffdd931ed77b21b95ca2ea17895f0c99b3cab831 languageName: node linkType: hard -"metro-file-map@npm:0.83.5": - version: 0.83.5 - resolution: "metro-file-map@npm:0.83.5" +"metro-file-map@npm:0.84.4": + version: 0.84.4 + resolution: "metro-file-map@npm:0.84.4" dependencies: debug: "npm:^4.4.0" fb-watchman: "npm:^2.0.0" @@ -14039,7 +14040,7 @@ __metadata: micromatch: "npm:^4.0.4" nullthrows: "npm:^1.1.1" walker: "npm:^1.0.7" - checksum: 10c0/2380b6682298154fd8d37db84f90f22ae4b6d139ebc96fe9ad27f78628aa7f836c0f574dd9247f20a0c8ee11c059b206ff92064aa8d9cb37418b5c3c3129e170 + checksum: 10c0/09ca829570d1d6dc5beb0534da8a7f2bfcae5415b0974fd5f58b4a05da95dbafdd47f7dc8dedeb11b6562ee9a92c4d918466d02a05cda6e1eaf2c400cbbe6fb4 languageName: node linkType: hard @@ -14052,32 +14053,32 @@ __metadata: languageName: node linkType: hard -"metro-minify-terser@npm:0.83.5": - version: 0.83.5 - resolution: "metro-minify-terser@npm:0.83.5" +"metro-minify-terser@npm:0.84.4": + version: 0.84.4 + resolution: "metro-minify-terser@npm:0.84.4" dependencies: flow-enums-runtime: "npm:^0.0.6" terser: "npm:^5.15.0" - checksum: 10c0/c6b90154b778533affc0077a32df3a91d4a4fc6b94ad1d73abb126a4114c094b4e7558085c03097832b7f8ecdbe42eb9394e16fbd82216d83b0a254105441528 + checksum: 10c0/c9b36c2adb8254c38bdedad9da8bf2b7fae7f45cbd883e590430a5fc9cad808af24dd08a9420925e15733dab886528ad553e3eeb3faffc53d3ad80e7e03e5f6d languageName: node linkType: hard -"metro-resolver@npm:0.83.5": - version: 0.83.5 - resolution: "metro-resolver@npm:0.83.5" +"metro-resolver@npm:0.84.4": + version: 0.84.4 + resolution: "metro-resolver@npm:0.84.4" dependencies: flow-enums-runtime: "npm:^0.0.6" - checksum: 10c0/8aaa38f43bc9e2e7302b849d96396d836c1e37b6e7d70ba53ea34925921f9effdd5a37b062cabb30ee991395f032f92d07bc45c619fed94e7f54ffa04e0241b8 + checksum: 10c0/468334270598222e15cbee32af51a3b5e1f4fa6869794955b95d1134b28a58594e8e3879e841ccf00bbb5cd86c689a4481714d6c6a464931987d5333d2c55f80 languageName: node linkType: hard -"metro-runtime@npm:0.83.5": - version: 0.83.5 - resolution: "metro-runtime@npm:0.83.5" +"metro-runtime@npm:0.84.4, metro-runtime@npm:^0.84.0": + version: 0.84.4 + resolution: "metro-runtime@npm:0.84.4" dependencies: "@babel/runtime": "npm:^7.25.0" flow-enums-runtime: "npm:^0.0.6" - checksum: 10c0/8fadb1216aaa25cb0ff59f9dd440debcd227d1dbb9554d196b0c2f87729efb0be7667ab8a8e957de9aada47c1243d427984732d89795d93d2b5dd677481f4edb + checksum: 10c0/e2b2e819027940c6bbd081e5650238d52b6c6d78561cd486b8c10cd1e7fce0213c66fa7f885e37ad5377fcd5726b1c9e473fba6de13938cdf2c966e82968c05f languageName: node linkType: hard @@ -14091,75 +14092,75 @@ __metadata: languageName: node linkType: hard -"metro-source-map@npm:0.83.5": - version: 0.83.5 - resolution: "metro-source-map@npm:0.83.5" +"metro-source-map@npm:0.83.7, metro-source-map@npm:^0.83.3": + version: 0.83.7 + resolution: "metro-source-map@npm:0.83.7" dependencies: "@babel/traverse": "npm:^7.29.0" "@babel/types": "npm:^7.29.0" flow-enums-runtime: "npm:^0.0.6" invariant: "npm:^2.2.4" - metro-symbolicate: "npm:0.83.5" + metro-symbolicate: "npm:0.83.7" nullthrows: "npm:^1.1.1" - ob1: "npm:0.83.5" + ob1: "npm:0.83.7" source-map: "npm:^0.5.6" vlq: "npm:^1.0.0" - checksum: 10c0/39716006322f41f63aad15edeb4a705f876fc2cf5d9077583f63e1ec014a9d7083185bd9cd17083fbea0d453daa1708785217eeeff3058bbf34ee86ed7047121 + checksum: 10c0/6c424f6258a2128bb4ae6e7591fb7ed1f79b042978397c24a1e35d8bdfcd8960655b3cdd0c4d8ff90f3055ce5b00eca5cb61b327720e7029b3f334fd8ae1776d languageName: node linkType: hard -"metro-source-map@npm:0.83.7, metro-source-map@npm:^0.83.3": - version: 0.83.7 - resolution: "metro-source-map@npm:0.83.7" +"metro-source-map@npm:0.84.4, metro-source-map@npm:^0.84.0": + version: 0.84.4 + resolution: "metro-source-map@npm:0.84.4" dependencies: "@babel/traverse": "npm:^7.29.0" "@babel/types": "npm:^7.29.0" flow-enums-runtime: "npm:^0.0.6" invariant: "npm:^2.2.4" - metro-symbolicate: "npm:0.83.7" + metro-symbolicate: "npm:0.84.4" nullthrows: "npm:^1.1.1" - ob1: "npm:0.83.7" + ob1: "npm:0.84.4" source-map: "npm:^0.5.6" vlq: "npm:^1.0.0" - checksum: 10c0/6c424f6258a2128bb4ae6e7591fb7ed1f79b042978397c24a1e35d8bdfcd8960655b3cdd0c4d8ff90f3055ce5b00eca5cb61b327720e7029b3f334fd8ae1776d + checksum: 10c0/39df4524022e07aa4b4d09dd874a9509eb9e2e1e491e80a35099020347ab6be2407851b026452296aad314b0eb7ecf14f9b6bab96bd7c31d47d8b1eb30279aaf languageName: node linkType: hard -"metro-symbolicate@npm:0.83.5": - version: 0.83.5 - resolution: "metro-symbolicate@npm:0.83.5" +"metro-symbolicate@npm:0.83.7": + version: 0.83.7 + resolution: "metro-symbolicate@npm:0.83.7" dependencies: flow-enums-runtime: "npm:^0.0.6" invariant: "npm:^2.2.4" - metro-source-map: "npm:0.83.5" + metro-source-map: "npm:0.83.7" nullthrows: "npm:^1.1.1" source-map: "npm:^0.5.6" vlq: "npm:^1.0.0" bin: metro-symbolicate: src/index.js - checksum: 10c0/b4347222cc2f0ddbb6a7d79876aa1ee136ad7bbab450b2127c4f60b8700371afcbcfe66073bf4376cc4eae034c448431a0bf957df9c52efc3a5a9dc558a53099 + checksum: 10c0/4968a89d9bdd040e0cb6328852f14a8555e912875a1661e639566879e548fbfb849134b8f55076f875c062d202c713be1c9f47b4e68c627a4f8b367d7e208213 languageName: node linkType: hard -"metro-symbolicate@npm:0.83.7": - version: 0.83.7 - resolution: "metro-symbolicate@npm:0.83.7" +"metro-symbolicate@npm:0.84.4": + version: 0.84.4 + resolution: "metro-symbolicate@npm:0.84.4" dependencies: flow-enums-runtime: "npm:^0.0.6" invariant: "npm:^2.2.4" - metro-source-map: "npm:0.83.7" + metro-source-map: "npm:0.84.4" nullthrows: "npm:^1.1.1" source-map: "npm:^0.5.6" vlq: "npm:^1.0.0" bin: metro-symbolicate: src/index.js - checksum: 10c0/4968a89d9bdd040e0cb6328852f14a8555e912875a1661e639566879e548fbfb849134b8f55076f875c062d202c713be1c9f47b4e68c627a4f8b367d7e208213 + checksum: 10c0/416a9ef694150a8ec708187743b74ab67e0b4fec39c64610b3771b584830117670a62acb9aa824f84a44efbb1cfec07aaf943d1aaf349d977eecf7c72bd8c0bf languageName: node linkType: hard -"metro-transform-plugins@npm:0.83.5": - version: 0.83.5 - resolution: "metro-transform-plugins@npm:0.83.5" +"metro-transform-plugins@npm:0.84.4": + version: 0.84.4 + resolution: "metro-transform-plugins@npm:0.84.4" dependencies: "@babel/core": "npm:^7.25.2" "@babel/generator": "npm:^7.29.1" @@ -14167,7 +14168,7 @@ __metadata: "@babel/traverse": "npm:^7.29.0" flow-enums-runtime: "npm:^0.0.6" nullthrows: "npm:^1.1.1" - checksum: 10c0/930dd7d16eeed1910d0571b1a494bc9b71aa3d7cb178aa58744dbb3ef52f4db5fa35c5a691de3fece65a5ba0793298cddfd249d97018f9cab2a45a4e14e963a8 + checksum: 10c0/7edb0c0d3655e9f5f5fb8bd8221ec297394b8730c959a3245ea81e50da8177ad7782f21696201a0dcb922281efd919e9548d5b819d8338e52d4b130f06333123 languageName: node linkType: hard @@ -14185,30 +14186,30 @@ __metadata: languageName: node linkType: hard -"metro-transform-worker@npm:0.83.5": - version: 0.83.5 - resolution: "metro-transform-worker@npm:0.83.5" +"metro-transform-worker@npm:0.84.4": + version: 0.84.4 + resolution: "metro-transform-worker@npm:0.84.4" dependencies: "@babel/core": "npm:^7.25.2" "@babel/generator": "npm:^7.29.1" "@babel/parser": "npm:^7.29.0" "@babel/types": "npm:^7.29.0" flow-enums-runtime: "npm:^0.0.6" - metro: "npm:0.83.5" - metro-babel-transformer: "npm:0.83.5" - metro-cache: "npm:0.83.5" - metro-cache-key: "npm:0.83.5" - metro-minify-terser: "npm:0.83.5" - metro-source-map: "npm:0.83.5" - metro-transform-plugins: "npm:0.83.5" + metro: "npm:0.84.4" + metro-babel-transformer: "npm:0.84.4" + metro-cache: "npm:0.84.4" + metro-cache-key: "npm:0.84.4" + metro-minify-terser: "npm:0.84.4" + metro-source-map: "npm:0.84.4" + metro-transform-plugins: "npm:0.84.4" nullthrows: "npm:^1.1.1" - checksum: 10c0/aef57bbdc0cffc85f6fd713e3e8dad4cac6d8bf11e8c87b0a26a56dd1f7d677cd6844c7dfe18af58c88a54730b68c4562def2e7c227aba4cae0c8376e85938ba + checksum: 10c0/95924f9bcaf6df931bba2783f440d8fab29909bdde8cecdcc3bc7603e7de71e51728a34288f045694b616c94216d1fc683493b8a470e074c9c8a7f220aa9f9b5 languageName: node linkType: hard -"metro@npm:0.83.5, metro@npm:^0.83.3": - version: 0.83.5 - resolution: "metro@npm:0.83.5" +"metro@npm:0.84.4, metro@npm:^0.84.0": + version: 0.84.4 + resolution: "metro@npm:0.84.4" dependencies: "@babel/code-frame": "npm:^7.29.0" "@babel/core": "npm:^7.25.2" @@ -14218,31 +14219,30 @@ __metadata: "@babel/traverse": "npm:^7.29.0" "@babel/types": "npm:^7.29.0" accepts: "npm:^2.0.0" - chalk: "npm:^4.0.0" ci-info: "npm:^2.0.0" connect: "npm:^3.6.5" debug: "npm:^4.4.0" error-stack-parser: "npm:^2.0.6" flow-enums-runtime: "npm:^0.0.6" graceful-fs: "npm:^4.2.4" - hermes-parser: "npm:0.33.3" + hermes-parser: "npm:0.35.0" image-size: "npm:^1.0.2" invariant: "npm:^2.2.4" jest-worker: "npm:^29.7.0" jsc-safe-url: "npm:^0.2.2" lodash.throttle: "npm:^4.1.1" - metro-babel-transformer: "npm:0.83.5" - metro-cache: "npm:0.83.5" - metro-cache-key: "npm:0.83.5" - metro-config: "npm:0.83.5" - metro-core: "npm:0.83.5" - metro-file-map: "npm:0.83.5" - metro-resolver: "npm:0.83.5" - metro-runtime: "npm:0.83.5" - metro-source-map: "npm:0.83.5" - metro-symbolicate: "npm:0.83.5" - metro-transform-plugins: "npm:0.83.5" - metro-transform-worker: "npm:0.83.5" + metro-babel-transformer: "npm:0.84.4" + metro-cache: "npm:0.84.4" + metro-cache-key: "npm:0.84.4" + metro-config: "npm:0.84.4" + metro-core: "npm:0.84.4" + metro-file-map: "npm:0.84.4" + metro-resolver: "npm:0.84.4" + metro-runtime: "npm:0.84.4" + metro-source-map: "npm:0.84.4" + metro-symbolicate: "npm:0.84.4" + metro-transform-plugins: "npm:0.84.4" + metro-transform-worker: "npm:0.84.4" mime-types: "npm:^3.0.1" nullthrows: "npm:^1.1.1" serialize-error: "npm:^2.1.0" @@ -14252,7 +14252,7 @@ __metadata: yargs: "npm:^17.6.2" bin: metro: src/cli.js - checksum: 10c0/5a774451aa1c182ed49eab795fbc00e39c6a96153e280fa8a103e35d3fb353ebd90a8c50da99d7b3a5b0aa07ce1fc9035daa87633a4d79a2b7e37c20a666da5b + checksum: 10c0/ff92915119db29cd855274f3789d391cba83c50cb92e22d1e9b8c729e7f6d39495e32540a22ca4c6591eea6a847ade49fcfa5faab01b2300227e3f1fc7df359c languageName: node linkType: hard @@ -15170,21 +15170,21 @@ __metadata: languageName: node linkType: hard -"ob1@npm:0.83.5": - version: 0.83.5 - resolution: "ob1@npm:0.83.5" +"ob1@npm:0.83.7": + version: 0.83.7 + resolution: "ob1@npm:0.83.7" dependencies: flow-enums-runtime: "npm:^0.0.6" - checksum: 10c0/5fdb1db1ed50ac01fdac85411c6080fed65f9fe6a34c3e4bd8749c69b155a79776b20d6bf09aec927b6259b3b5a1dfead4854704ef13a9fd6773007d599bec4d + checksum: 10c0/b009d7a79b7ccf8db520acdc713a544a1ec379ae804438328080715c66944aa871551b8d7b1cf7cfb89cbe53bbab29f3345097c455259d7b7fe76b0891860187 languageName: node linkType: hard -"ob1@npm:0.83.7": - version: 0.83.7 - resolution: "ob1@npm:0.83.7" +"ob1@npm:0.84.4": + version: 0.84.4 + resolution: "ob1@npm:0.84.4" dependencies: flow-enums-runtime: "npm:^0.0.6" - checksum: 10c0/b009d7a79b7ccf8db520acdc713a544a1ec379ae804438328080715c66944aa871551b8d7b1cf7cfb89cbe53bbab29f3345097c455259d7b7fe76b0891860187 + checksum: 10c0/8bf3a3bdc2b27f1b1b60569c31ff2d9d829025f9a1ce7388b5e810242e48672c8d6b24e5972d6e30aef4d84f6894d12b13d0c6c418460d031da1972b96920bba languageName: node linkType: hard @@ -16402,7 +16402,7 @@ __metadata: prettier: "npm:^3.6.2" prompts: "npm:^2.4.1" react: "npm:19.2.3" - react-native: "npm:0.85.0-nightly-20260210-4535df4f6" + react-native: "npm:0.85.0-nightly-20260224-42cd0f041" semver: "npm:^7.3.2" source-map-support: "npm:^0.5.19" typescript: "npm:5.0.4" @@ -16435,7 +16435,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-20260210-4535df4f6" + react-native: "npm:0.85.0-nightly-20260224-42cd0f041" react-native-platform-override: "workspace:*" typescript: "npm:5.0.4" languageName: unknown @@ -16456,15 +16456,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-20260210-4535df4f6" - "@react-native/codegen": "npm:0.85.0-nightly-20260210-4535df4f6" - "@react-native/community-cli-plugin": "npm:0.85.0-nightly-20260210-4535df4f6" - "@react-native/gradle-plugin": "npm:0.85.0-nightly-20260210-4535df4f6" - "@react-native/js-polyfills": "npm:0.85.0-nightly-20260210-4535df4f6" - "@react-native/metro-config": "npm:0.85.0-nightly-20260210-4535df4f6" - "@react-native/new-app-screen": "npm:0.85.0-nightly-20260210-4535df4f6" - "@react-native/normalize-colors": "npm:0.85.0-nightly-20260210-4535df4f6" - "@react-native/virtualized-lists": "npm:0.85.0-nightly-20260210-4535df4f6" + "@react-native/assets-registry": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/codegen": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/community-cli-plugin": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/gradle-plugin": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/js-polyfills": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/metro-config": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/new-app-screen": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/normalize-colors": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/virtualized-lists": "npm:0.85.0-nightly-20260224-42cd0f041" "@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" @@ -16501,7 +16501,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-20260210-4535df4f6" + react-native: "npm:0.85.0-nightly-20260224-42cd0f041" react-native-platform-override: "npm:0.0.0-canary.1022" react-refresh: "npm:^0.14.0" regenerator-runtime: "npm:^0.13.2" @@ -16517,36 +16517,33 @@ __metadata: peerDependencies: "@types/react": ^19.2.3 react: ^19.2.3 - react-native: 0.85.0-nightly-20260210-4535df4f6 + react-native: 0.85.0-nightly-20260224-42cd0f041 languageName: unknown linkType: soft -"react-native@npm:0.85.0-nightly-20260210-4535df4f6": - version: 0.85.0-nightly-20260210-4535df4f6 - resolution: "react-native@npm:0.85.0-nightly-20260210-4535df4f6" - dependencies: - "@jest/create-cache-key-function": "npm:^29.7.0" - "@react-native/assets-registry": "npm:0.85.0-nightly-20260210-4535df4f6" - "@react-native/codegen": "npm:0.85.0-nightly-20260210-4535df4f6" - "@react-native/community-cli-plugin": "npm:0.85.0-nightly-20260210-4535df4f6" - "@react-native/gradle-plugin": "npm:0.85.0-nightly-20260210-4535df4f6" - "@react-native/js-polyfills": "npm:0.85.0-nightly-20260210-4535df4f6" - "@react-native/normalize-colors": "npm:0.85.0-nightly-20260210-4535df4f6" - "@react-native/virtualized-lists": "npm:0.85.0-nightly-20260210-4535df4f6" +"react-native@npm:0.85.0-nightly-20260224-42cd0f041": + version: 0.85.0-nightly-20260224-42cd0f041 + resolution: "react-native@npm:0.85.0-nightly-20260224-42cd0f041" + dependencies: + "@react-native/assets-registry": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/codegen": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/community-cli-plugin": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/gradle-plugin": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/js-polyfills": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/normalize-colors": "npm:0.85.0-nightly-20260224-42cd0f041" + "@react-native/virtualized-lists": "npm:0.85.0-nightly-20260224-42cd0f041" abort-controller: "npm:^3.0.0" anser: "npm:^1.4.9" ansi-regex: "npm:^5.0.0" - babel-jest: "npm:^29.7.0" babel-plugin-syntax-hermes-parser: "npm:0.33.3" base64-js: "npm:^1.5.1" commander: "npm:^12.0.0" flow-enums-runtime: "npm:^0.0.6" hermes-compiler: "npm:250829098.0.8" invariant: "npm:^2.2.4" - jest-environment-node: "npm:^29.7.0" memoize-one: "npm:^5.0.0" - metro-runtime: "npm:^0.83.3" - metro-source-map: "npm:^0.83.3" + metro-runtime: "npm:^0.84.0" + metro-source-map: "npm:^0.84.0" nullthrows: "npm:^1.1.1" pretty-format: "npm:^29.7.0" promise: "npm:^8.3.0" @@ -16561,14 +16558,17 @@ __metadata: ws: "npm:^7.5.10" yargs: "npm:^17.6.2" peerDependencies: + "@react-native/jest-preset": 0.85.0-nightly-20260224-42cd0f041 "@types/react": ^19.1.1 react: ^19.2.3 peerDependenciesMeta: + "@react-native/jest-preset": + optional: true "@types/react": optional: true bin: react-native: cli.js - checksum: 10c0/7c8b31c38515f58c245eb3f4ab4770ff741548da492857173bcdbd5b2e12b5bc0aaf2814eb6121293c3fbe61756c7d52cb29a0629fd471ca66ee8ddd59d20c5c + checksum: 10c0/b672a71641995095dc4a8c56fa36f210de5d9878eda2340d711f9c1091277ea6700cfd2bf2a66751594cc9d726ca7dcf3703682735e00928f9b4d7e6f89e8984 languageName: node linkType: hard From 8654483353d311ae8a42a564d54c11a001ffc781 Mon Sep 17 00:00:00 2001 From: Anukrati Agrawal Date: Mon, 29 Jun 2026 10:53:32 -0700 Subject: [PATCH 2/4] Integrate RN 0.85.0-nightly-20260224-42cd0f041 Update react-native and @react-native/* packages from 0.85.0-nightly-20260128-36f07a1b2 to 0.85.0-nightly-20260224-42cd0f041. Upgrade platform overrides and resolve merge conflicts. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Components/TextInput/TextInput.win32.js | 11 -- .../UI/LogBoxInspectorReactFrames.win32.js | 20 --- .../LogBoxInspectorSourceMapStatus.win32.js | 18 +-- .../UI/LogBoxInspectorStackFrame.win32.js | 10 -- .../js/examples/Image/ImageExample.windows.js | 16 +- .../examples/Animated/ColorStylesExample.js | 4 +- .../js/examples/Animated/CombineExample.js | 4 +- .../ComposeAnimationsWithEasingExample.js | 2 +- .../js/examples/Animated/ComposingExample.js | 13 +- .../Animated/ContinuousInteractionsExample.js | 2 +- .../js/examples/Animated/EasingExample.js | 23 +-- .../js/examples/Animated/FadeInViewExample.js | 10 +- .../js/examples/Animated/LoopingExample.js | 10 +- .../js/examples/Animated/MovingBoxExample.js | 22 +-- .../js/examples/Animated/PanGestureExample.js | 20 +-- .../Animated/PressabilityWithNativeDrivers.js | 8 +- .../Animated/RotatingImagesExample.js | 4 +- .../Animated/TransformBounceExample.js | 4 +- .../Animated/TransformStylesExample.js | 10 +- .../examples/AnimatedGratuitousApp/AnExSet.js | 13 +- .../AnimatedGratuitousApp/AnExTilt.js | 15 +- .../CompatibilityAnimatedPointerMove.js | 8 +- .../PlatformTest/RNTesterPlatformTest.js | 15 +- .../PointerEventAccessibility.js | 2 +- .../js/examples/Filter/FilterExample.js | 12 +- .../FlatList/FlatList-contentInset.js | 2 +- .../js/examples/FlatList/FlatList-inverted.js | 2 +- ...FlatList-maintainVisibleContentPosition.js | 2 +- .../examples/FlatList/FlatList-multiColumn.js | 2 +- .../js/examples/FlatList/FlatList-nested.js | 21 +-- .../FlatList/FlatList-onEndReached.js | 2 +- .../FlatList/FlatList-onStartReached.js | 2 +- .../FlatList/FlatList-stickyHeaders.js | 2 +- .../FlatList/FlatList-withSeparators.js | 2 +- .../tester/js/examples/Image/ImageExample.js | 5 +- .../ScrollViewIndicatorInsetsIOSExample.js | 2 +- .../ScrollViewKeyboardInsetsIOSExample.js | 2 +- .../ScrollViewPressableStickyHeaderExample.js | 2 +- .../SectionList/SectionList-contentInset.js | 2 +- .../SectionList/SectionList-inverted.js | 2 +- .../SectionList/SectionList-onEndReached.js | 2 +- .../SectionList/SectionList-scrollable.js | 2 +- .../SectionList-stickyHeadersEnabled.js | 2 +- .../SectionList/SectionList-withSeparators.js | 2 +- .../Text/TextAdjustsDynamicLayoutExample.js | 2 +- .../js/examples/Transform/TransformExample.js | 13 +- .../Fabric/FabricUIManagerModule.cpp | 12 ++ .../Fabric/FabricUIManagerModule.h | 1 + .../ReactHost/ReactHost.cpp | 1 - vnext/Shared/Shared.vcxitems | 2 + vnext/overrides.json | 12 +- .../Components/TextInput/TextInput.windows.js | 11 -- .../UI/LogBoxInspectorReactFrames.windows.js | 20 --- .../UI/LogBoxInspectorStackFrame.windows.js | 10 -- vnext/src-win/jest/setup.js | 141 ------------------ yarn.lock | 13 +- 56 files changed, 151 insertions(+), 423 deletions(-) delete mode 100644 vnext/src-win/jest/setup.js diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/Components/TextInput/TextInput.win32.js b/packages/@office-iss/react-native-win32/src-win/Libraries/Components/TextInput/TextInput.win32.js index d9df6db577b..a61603350b8 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/Components/TextInput/TextInput.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/Components/TextInput/TextInput.win32.js @@ -490,23 +490,12 @@ function InternalTextInput(props: TextInputProps): React.Node { return inputRef.current; }, isFocused(): boolean { -<<<<<<< Upstream const currentlyFocusedInput = TextInputState.currentlyFocusedInput(); return ( currentlyFocusedInput != null && currentlyFocusedInput === inputRef.current ); -||||||| base - return TextInputState.currentlyFocusedInput() === inputRef.current; -======= - const currentlyFocusedInput = - TextInputState.currentlyFocusedInput(); - return ( - currentlyFocusedInput !== null && - currentlyFocusedInput === inputRef.current - ); ->>>>>>> Override }, setSelection(start: number, end: number): void { if (inputRef.current != null) { diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js b/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js index b2a455cf9ef..29e860b6e88 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js @@ -161,44 +161,24 @@ const componentStyles = StyleSheet.create({ paddingRight: 10, }, frameName: { -<<<<<<< Upstream fontFamily: Platform.select({ android: 'monospace', ios: 'Menlo', macos: 'Menlo', - windows: 'Consolas', - }), -||||||| base - fontFamily: Platform.select({android: 'monospace', ios: 'Menlo'}), -======= - fontFamily: Platform.select({ - android: 'monospace', - ios: 'Menlo', win32: 'Consolas', // Win32 }), ->>>>>>> Override color: LogBoxStyle.getTextColor(1), fontSize: 14, includeFontPadding: false, lineHeight: 18, }, bracket: { -<<<<<<< Upstream fontFamily: Platform.select({ android: 'monospace', ios: 'Menlo', macos: 'Menlo', - windows: 'Consolas', - }), -||||||| base - fontFamily: Platform.select({android: 'monospace', ios: 'Menlo'}), -======= - fontFamily: Platform.select({ - android: 'monospace', - ios: 'Menlo', win32: 'Consolas', // Win32 }), ->>>>>>> Override color: LogBoxStyle.getTextColor(0.4), fontSize: 14, fontWeight: '500', diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.win32.js b/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.win32.js index ee785aacadb..42dbd7d7af9 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.win32.js @@ -22,19 +22,9 @@ import {useEffect, useState} from 'react'; component LogBoxInspectorSourceMapStatus( onPress?: ?(event: GestureResponderEvent) => void, status: 'COMPLETE' | 'FAILED' | 'NONE' | 'PENDING', -<<<<<<< Upstream ) { -||||||| base -}>; - -function LogBoxInspectorSourceMapStatus(props: Props): React.Node { -======= -}>; - -function LogBoxInspectorSourceMapStatus(props: Props): React.Node { // [Win32] Dont use Animated /* ->>>>>>> Override const [state, setState] = useState({ animation: null, rotate: null, @@ -95,13 +85,7 @@ function LogBoxInspectorSourceMapStatus(props: Props): React.Node { return null; // [Win32] } -<<<<<<< Upstream - if (status === 'COMPLETE' || image == null) { -||||||| base - if (props.status === 'COMPLETE' || image == null) { -======= - if (props.status === 'COMPLETE' /* [Win32] || image == null */) { ->>>>>>> Override + if (status === 'COMPLETE' /* [Win32] || image == null */) { return null; } diff --git a/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorStackFrame.win32.js b/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorStackFrame.win32.js index 179e174210f..81dbc821a95 100644 --- a/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorStackFrame.win32.js +++ b/packages/@office-iss/react-native-win32/src-win/Libraries/LogBox/UI/LogBoxInspectorStackFrame.win32.js @@ -87,22 +87,12 @@ const styles = StyleSheet.create({ includeFontPadding: false, lineHeight: 18, fontWeight: '400', -<<<<<<< Upstream fontFamily: Platform.select({ android: 'monospace', ios: 'Menlo', macos: 'Menlo', - windows: 'Consolas', - }), -||||||| base - fontFamily: Platform.select({android: 'monospace', ios: 'Menlo'}), -======= - fontFamily: Platform.select({ - android: 'monospace', - ios: 'Menlo', win32: 'Consolas', }), ->>>>>>> Override }, location: { color: LogBoxStyle.getTextColor(0.8), 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 b5b4f15ca39..2fdde69acdf 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 @@ -1516,22 +1516,8 @@ exports.examples = [ title: 'Nesting content inside component', render: function (): React.Node { return ( -<<<<<<< Upstream - - -||||||| base - - -======= - ->>>>>>> Override + React ); diff --git a/packages/@react-native/tester/js/examples/Animated/ColorStylesExample.js b/packages/@react-native/tester/js/examples/Animated/ColorStylesExample.js index 7b44870e6c2..5abcded22ea 100644 --- a/packages/@react-native/tester/js/examples/Animated/ColorStylesExample.js +++ b/packages/@react-native/tester/js/examples/Animated/ColorStylesExample.js @@ -17,7 +17,7 @@ import * as React from 'react'; import {useState} from 'react'; import {Animated, StyleSheet, Text, View} from 'react-native'; -function AnimatedView({useNativeDriver}: {useNativeDriver: boolean}) { +component AnimatedView(useNativeDriver: boolean) { const animations = []; const animatedViewStyle = { @@ -123,7 +123,7 @@ function AnimatedView({useNativeDriver}: {useNativeDriver: boolean}) { ); } -function AnimatedColorStyleExample(): React.Node { +component AnimatedColorStyleExample() { const [useNativeDriver, setUseNativeDriver] = useState(false); return ( diff --git a/packages/@react-native/tester/js/examples/Animated/CombineExample.js b/packages/@react-native/tester/js/examples/Animated/CombineExample.js index 700dfcab230..8ee9a812085 100644 --- a/packages/@react-native/tester/js/examples/Animated/CombineExample.js +++ b/packages/@react-native/tester/js/examples/Animated/CombineExample.js @@ -24,7 +24,7 @@ export default ({ render: () => , }: RNTesterModuleExample); -const CombineExample = () => { +component CombineExample() { const [aValue, setAValue] = useState('0.4'); const [bValue, setBValue] = useState('0.5'); const a = new Animated.Value(parseFloat(aValue)); @@ -69,7 +69,7 @@ const CombineExample = () => { setAnimation(mod)}>Modulo ); -}; +} const styles = StyleSheet.create({ content: { diff --git a/packages/@react-native/tester/js/examples/Animated/ComposeAnimationsWithEasingExample.js b/packages/@react-native/tester/js/examples/Animated/ComposeAnimationsWithEasingExample.js index 5b72071a311..6808f10382f 100644 --- a/packages/@react-native/tester/js/examples/Animated/ComposeAnimationsWithEasingExample.js +++ b/packages/@react-native/tester/js/examples/Animated/ComposeAnimationsWithEasingExample.js @@ -29,7 +29,7 @@ const styles = StyleSheet.create({ }, }); -function CompositeAnimationsWithEasingExample(): React.Node { +component CompositeAnimationsWithEasingExample() { const anims = [1, 2, 3].map(() => new Animated.Value(0)); const theme = useContext(RNTesterThemeContext); diff --git a/packages/@react-native/tester/js/examples/Animated/ComposingExample.js b/packages/@react-native/tester/js/examples/Animated/ComposingExample.js index ecb6b3093fd..e94c5b4d3fc 100644 --- a/packages/@react-native/tester/js/examples/Animated/ComposingExample.js +++ b/packages/@react-native/tester/js/examples/Animated/ComposingExample.js @@ -27,7 +27,6 @@ import { useWindowDimensions, } from 'react-native'; -type Props = Readonly<{}>; const boxSize = 12; const padding = 8; const leftToRightTimingConfig = (useNativeDriver: boolean) => ({ @@ -128,12 +127,7 @@ const items = [ }, ]; -function ComposingExampleItem({ - title, - description, - compositeAnimation, - useNativeDriver, -}: { +component ComposingExampleItem( title: string, description: string, compositeAnimation: ( @@ -141,7 +135,7 @@ function ComposingExampleItem({ useNativeDriver: boolean, ) => CompositeAnimation, useNativeDriver: boolean, -}): React.Node { +) { const {width: windowWidth} = useWindowDimensions(); // Figure out how far along the x axis we should translate the box by taking into @@ -150,6 +144,7 @@ function ComposingExampleItem({ const boxIndexes = useMemo(() => [0, 1, 2, 3, 4], []); const xTranslations = useRef(boxIndexes.map(() => new Animated.Value(0))); const animation = useRef( + // $FlowFixMe[react-rule-unsafe-ref] compositeAnimation(xTranslations.current, useNativeDriver), ); const theme = useContext(RNTesterThemeContext); @@ -206,7 +201,7 @@ function ComposingExampleItem({ ); } -function ComposingExample(props: Props): React.Node { +component ComposingExample() { const [useNativeDriver, setUseNativeDriver] = useState(false); return ( diff --git a/packages/@react-native/tester/js/examples/Animated/ContinuousInteractionsExample.js b/packages/@react-native/tester/js/examples/Animated/ContinuousInteractionsExample.js index 2c4fea2dc5a..b0e7b0e1bfe 100644 --- a/packages/@react-native/tester/js/examples/Animated/ContinuousInteractionsExample.js +++ b/packages/@react-native/tester/js/examples/Animated/ContinuousInteractionsExample.js @@ -15,7 +15,7 @@ import * as React from 'react'; import {useContext} from 'react'; import {Text} from 'react-native'; -function AnimatedContinuousInteractionsExample(): React.Node { +component AnimatedContinuousInteractionsExample() { const theme = useContext(RNTesterThemeContext); return ( diff --git a/packages/@react-native/tester/js/examples/Animated/EasingExample.js b/packages/@react-native/tester/js/examples/Animated/EasingExample.js index 46db230695c..386e12f15e4 100644 --- a/packages/@react-native/tester/js/examples/Animated/EasingExample.js +++ b/packages/@react-native/tester/js/examples/Animated/EasingExample.js @@ -23,10 +23,9 @@ import { StyleSheet, Text, View, + useAnimatedValue, } from 'react-native'; -type Props = Readonly<{}>; - type EasingListItem = { title: string, easing: (value: number) => number, @@ -80,16 +79,10 @@ const easingSections = [ }, ]; -function EasingItem({ - item, - useNativeDriver, -}: { - item: EasingListItem, - useNativeDriver: boolean, -}): React.Node { - const opacityAndScale = useRef(new Animated.Value(1)); +component EasingItem(item: EasingListItem, useNativeDriver: boolean) { + const opacityAndScale = useAnimatedValue(1); const animation = useRef( - Animated.timing(opacityAndScale.current, { + Animated.timing(opacityAndScale, { toValue: 1, duration: 1200, easing: item.easing, @@ -100,8 +93,8 @@ function EasingItem({ const animatedStyles = [ styles.box, { - opacity: opacityAndScale.current, - transform: [{scale: opacityAndScale.current}], + opacity: opacityAndScale, + transform: [{scale: opacityAndScale}], }, ]; @@ -115,7 +108,7 @@ function EasingItem({ { - opacityAndScale.current.setValue(0); + opacityAndScale.setValue(0); animation.current.start(); }}> Animate @@ -128,7 +121,7 @@ function EasingItem({ ); } -function EasingExample(props: Props): React.Node { +component EasingExample() { const [useNativeDriver, setUseNativeDriver] = useState(false); return ( diff --git a/packages/@react-native/tester/js/examples/Animated/FadeInViewExample.js b/packages/@react-native/tester/js/examples/Animated/FadeInViewExample.js index 56b8d402805..08bfe01d79f 100644 --- a/packages/@react-native/tester/js/examples/Animated/FadeInViewExample.js +++ b/packages/@react-native/tester/js/examples/Animated/FadeInViewExample.js @@ -29,13 +29,7 @@ const styles = StyleSheet.create({ }, }); -function FadeInView({ - useNativeDriver, - children, -}: { - useNativeDriver: boolean, - children: React.Node, -}) { +component FadeInView(useNativeDriver: boolean, children: React.Node) { //opacity 0 const [fadeAnim] = useState(() => new Animated.Value(0)); useEffect(() => { @@ -64,7 +58,7 @@ function FadeInView({ ); } -function FadeInExample(): React.Node { +component FadeInExample() { const [show, setShow] = useState(true); const [useNativeDriver, setUseNativeDriver] = useState(false); return ( diff --git a/packages/@react-native/tester/js/examples/Animated/LoopingExample.js b/packages/@react-native/tester/js/examples/Animated/LoopingExample.js index 4e24cf3f28e..22a6acff389 100644 --- a/packages/@react-native/tester/js/examples/Animated/LoopingExample.js +++ b/packages/@react-native/tester/js/examples/Animated/LoopingExample.js @@ -24,13 +24,7 @@ export default ({ render: () => , }: RNTesterModuleExample); -function LoopingView({ - useNativeDriver, - running, -}: { - useNativeDriver: boolean, - running: boolean, -}) { +component LoopingView(useNativeDriver: boolean, running: boolean) { const opacity = useMemo(() => new Animated.Value(1), []); const scale = useMemo(() => new Animated.Value(1), []); @@ -64,7 +58,7 @@ function LoopingView({ ); } -function LoopingExample(props: {}): React.Node { +component LoopingExample() { const [running, setRunning] = useState(false); const [useNativeDriver, setUseNativeDriver] = useState(false); diff --git a/packages/@react-native/tester/js/examples/Animated/MovingBoxExample.js b/packages/@react-native/tester/js/examples/Animated/MovingBoxExample.js index 56e9fc88925..c4044e8e06a 100644 --- a/packages/@react-native/tester/js/examples/Animated/MovingBoxExample.js +++ b/packages/@react-native/tester/js/examples/Animated/MovingBoxExample.js @@ -14,8 +14,8 @@ import RNTConfigurationBlock from '../../components/RNTConfigurationBlock'; import RNTesterButton from '../../components/RNTesterButton'; import ToggleNativeDriver from './utils/ToggleNativeDriver'; import * as React from 'react'; -import {useRef, useState} from 'react'; -import {Animated, StyleSheet, Text, View} from 'react-native'; +import {useState} from 'react'; +import {Animated, StyleSheet, Text, View, useAnimatedValue} from 'react-native'; const containerWidth = 200; const boxSize = 50; @@ -56,15 +56,13 @@ const styles = StyleSheet.create({ }, }); -type Props = Readonly<{}>; - -function MovingBoxView({useNativeDriver}: {useNativeDriver: boolean}) { - const x = useRef(new Animated.Value(0)); +component MovingBoxView(useNativeDriver: boolean) { + const x = useAnimatedValue(0); const [update, setUpdate] = useState(0); const [boxVisible, setBoxVisible] = useState(true); const moveTo = (pos: number) => { - Animated.timing(x.current, { + Animated.timing(x, { toValue: pos, duration: 1000, useNativeDriver, @@ -76,7 +74,7 @@ function MovingBoxView({useNativeDriver}: {useNativeDriver: boolean}) { }; const toggleText = boxVisible ? 'Hide' : 'Show'; const onReset = () => { - x.current.resetAnimation(); + x.resetAnimation(); setUpdate(update + 1); }; return ( @@ -85,11 +83,7 @@ function MovingBoxView({useNativeDriver}: {useNativeDriver: boolean}) { {boxVisible ? ( ) : ( The box view is not being rendered @@ -111,7 +105,7 @@ function MovingBoxView({useNativeDriver}: {useNativeDriver: boolean}) { ); } -function MovingBoxExample(props: Props): React.Node { +component MovingBoxExample() { const [useNativeDriver, setUseNativeDriver] = useState(false); return ( diff --git a/packages/@react-native/tester/js/examples/Animated/PanGestureExample.js b/packages/@react-native/tester/js/examples/Animated/PanGestureExample.js index d9745ad7677..f01b2da8560 100644 --- a/packages/@react-native/tester/js/examples/Animated/PanGestureExample.js +++ b/packages/@react-native/tester/js/examples/Animated/PanGestureExample.js @@ -22,7 +22,7 @@ import { View, } from 'react-native'; -function TextBox({children}: Readonly<{children: React.Node}>): React.Node { +component TextBox(children: React.Node) { // Prevent touch from being hijacked by Text return ( @@ -31,15 +31,13 @@ function TextBox({children}: Readonly<{children: React.Node}>): React.Node { ); } -function AnimatedEventExample({ - containerPageXY, - useNativeDriver, -}: Readonly<{ +component AnimatedEventExample( containerPageXY: Readonly<{x: number, y: number}>, useNativeDriver: boolean, -}>): React.Node { +) { const boxRef = useRef>(); + // $FlowFixMe[react-rule-unsafe-ref] const pointerPageXY = useRef( new Animated.ValueXY( { @@ -50,6 +48,7 @@ function AnimatedEventExample({ ), ).current; + // $FlowFixMe[react-rule-unsafe-ref] const dragStartOffsetXY = useRef( new Animated.ValueXY({x: 0, y: 0}, {useNativeDriver}), ).current; @@ -126,13 +125,14 @@ function AnimatedEventExample({ ); } -function PanResponderExample({ - useNativeDriver, -}: Readonly<{useNativeDriver: boolean}>): React.Node { +component PanResponderExample(useNativeDriver: boolean) { + // $FlowFixMe[react-rule-unsafe-ref] const finalOffsetXY = useRef( new Animated.ValueXY({x: 0, y: 0}, {useNativeDriver}), ).current; + // $FlowFixMe[react-rule-unsafe-ref] const dragStartOffsetXY = useRef({x: 0, y: 0}).current; + // $FlowFixMe[react-rule-unsafe-ref] const panResponder = useRef( PanResponder.create({ onMoveShouldSetPanResponder: (pressEvent, gestureState) => { @@ -177,7 +177,7 @@ function PanResponderExample({ ); } -function PanGestureExample(): React.Node { +component PanGestureExample() { const [busy, setBusy] = useState(false); const [useNativeDriver, setUseNativeDriver] = useState(false); diff --git a/packages/@react-native/tester/js/examples/Animated/PressabilityWithNativeDrivers.js b/packages/@react-native/tester/js/examples/Animated/PressabilityWithNativeDrivers.js index 2b92ca80a27..a16d3521161 100644 --- a/packages/@react-native/tester/js/examples/Animated/PressabilityWithNativeDrivers.js +++ b/packages/@react-native/tester/js/examples/Animated/PressabilityWithNativeDrivers.js @@ -11,13 +11,13 @@ import type {RNTesterModuleExample} from '../../types/RNTesterTypes'; import * as React from 'react'; -import {useRef, useState} from 'react'; -import {Animated, Button, Text, View} from 'react-native'; +import {useState} from 'react'; +import {Animated, Button, Text, View, useAnimatedValue} from 'react-native'; const componentList: number[] = Array.from({length: 100}, (_, i) => i + 1); -function PressableWithNativeDriver() { - const currScroll = useRef(new Animated.Value(0)).current; +component PressableWithNativeDriver() { + const currScroll = useAnimatedValue(0); const [count, setCount] = useState(0); return ( diff --git a/packages/@react-native/tester/js/examples/Animated/RotatingImagesExample.js b/packages/@react-native/tester/js/examples/Animated/RotatingImagesExample.js index 670ab20dff3..1db3dc145ad 100644 --- a/packages/@react-native/tester/js/examples/Animated/RotatingImagesExample.js +++ b/packages/@react-native/tester/js/examples/Animated/RotatingImagesExample.js @@ -24,7 +24,7 @@ const styles = StyleSheet.create({ }, }); -function RotatingImagesView({useNativeDriver}: {useNativeDriver: boolean}) { +component RotatingImagesView(useNativeDriver: boolean) { const anim = new Animated.Value(0); const rotatingAnimation = Animated.spring(anim, { // Returns to the start @@ -84,7 +84,7 @@ function RotatingImagesView({useNativeDriver}: {useNativeDriver: boolean}) { ); } -function RotatingImagesExample(): React.Node { +component RotatingImagesExample() { const [useNativeDriver, setUseNativeDriver] = useState(false); return ( diff --git a/packages/@react-native/tester/js/examples/Animated/TransformBounceExample.js b/packages/@react-native/tester/js/examples/Animated/TransformBounceExample.js index bed88330164..151b0ce5aa9 100644 --- a/packages/@react-native/tester/js/examples/Animated/TransformBounceExample.js +++ b/packages/@react-native/tester/js/examples/Animated/TransformBounceExample.js @@ -29,7 +29,7 @@ const styles = StyleSheet.create({ }, }); -function TransformBounceView({useNativeDriver}: {useNativeDriver: boolean}) { +component TransformBounceView(useNativeDriver: boolean) { const anim = new Animated.Value(0); const bounceAnimation = Animated.spring(anim, { // Returns to the start @@ -91,7 +91,7 @@ function TransformBounceView({useNativeDriver}: {useNativeDriver: boolean}) { ); } -function TransformBounceExample(): React.Node { +component TransformBounceExample() { const [useNativeDriver, setUseNativeDriver] = useState(false); return ( diff --git a/packages/@react-native/tester/js/examples/Animated/TransformStylesExample.js b/packages/@react-native/tester/js/examples/Animated/TransformStylesExample.js index 4168e877a57..3da1dda0421 100644 --- a/packages/@react-native/tester/js/examples/Animated/TransformStylesExample.js +++ b/packages/@react-native/tester/js/examples/Animated/TransformStylesExample.js @@ -34,13 +34,7 @@ const transformProperties = { translateY: {outputRange: [0, 100], selected: false}, }; -function AnimatedView({ - properties, - useNativeDriver, -}: { - properties: Array, - useNativeDriver: boolean, -}) { +component AnimatedView(properties: Array, useNativeDriver: boolean) { const animatedValue = new Animated.Value(0); const transformStyles = properties.map(property => ({ [property]: animatedValue.interpolate({ @@ -78,7 +72,7 @@ function AnimatedView({ ); } -function AnimatedTransformStyleExample(): React.Node { +component AnimatedTransformStyleExample() { const [properties, setProperties] = useState(transformProperties); const [useNativeDriver, setUseNativeDriver] = useState(false); const onToggle = (property: string) => diff --git a/packages/@react-native/tester/js/examples/AnimatedGratuitousApp/AnExSet.js b/packages/@react-native/tester/js/examples/AnimatedGratuitousApp/AnExSet.js index 4df8cfb6914..a4fec8a10c5 100644 --- a/packages/@react-native/tester/js/examples/AnimatedGratuitousApp/AnExSet.js +++ b/packages/@react-native/tester/js/examples/AnimatedGratuitousApp/AnExSet.js @@ -14,8 +14,15 @@ import AnExBobble from './AnExBobble'; import AnExChained from './AnExChained'; import AnExScroll from './AnExScroll'; import AnExTilt from './AnExTilt'; -import React, {useRef, useState} from 'react'; -import {Animated, PanResponder, StyleSheet, Text, View} from 'react-native'; +import React, {useState} from 'react'; +import { + Animated, + PanResponder, + StyleSheet, + Text, + View, + useAnimatedValue, +} from 'react-native'; const randColor = () => { const colors = [0, 1, 2].map(() => Math.floor(Math.random() * 150 + 100)); @@ -39,7 +46,7 @@ const AnExSet = ({ }: AnExSetProps): React.Node => { const [closeColor] = useState(randColor()); const [openColor] = useState(randColor()); - const dismissY = useRef(new Animated.Value(0)).current; + const dismissY = useAnimatedValue(0); const dismissResponder = PanResponder.create({ onStartShouldSetPanResponder: () => isActive, diff --git a/packages/@react-native/tester/js/examples/AnimatedGratuitousApp/AnExTilt.js b/packages/@react-native/tester/js/examples/AnimatedGratuitousApp/AnExTilt.js index af3130e8d98..80760d8fdaa 100644 --- a/packages/@react-native/tester/js/examples/AnimatedGratuitousApp/AnExTilt.js +++ b/packages/@react-native/tester/js/examples/AnimatedGratuitousApp/AnExTilt.js @@ -10,13 +10,18 @@ 'use strict'; -import React, {useCallback, useEffect, useRef} from 'react'; -import {Animated, PanResponder, StyleSheet} from 'react-native'; +import React, {useCallback, useEffect} from 'react'; +import { + Animated, + PanResponder, + StyleSheet, + useAnimatedValue, +} from 'react-native'; const AnExTilt = (): React.Node => { - const panX = useRef(new Animated.Value(0)).current; - const opacity = useRef(new Animated.Value(1)).current; - const burns = useRef(new Animated.Value(1.15)).current; + const panX = useAnimatedValue(0); + const opacity = useAnimatedValue(1); + const burns = useAnimatedValue(1.15); const tiltPanResponder = PanResponder.create({ onStartShouldSetPanResponder: () => true, diff --git a/packages/@react-native/tester/js/examples/Experimental/Compatibility/CompatibilityAnimatedPointerMove.js b/packages/@react-native/tester/js/examples/Experimental/Compatibility/CompatibilityAnimatedPointerMove.js index a05925d42de..bb3458e48ed 100644 --- a/packages/@react-native/tester/js/examples/Experimental/Compatibility/CompatibilityAnimatedPointerMove.js +++ b/packages/@react-native/tester/js/examples/Experimental/Compatibility/CompatibilityAnimatedPointerMove.js @@ -12,8 +12,8 @@ import type {RNTesterModuleExample} from '../../../types/RNTesterTypes'; import ToggleNativeDriver from '../../Animated/utils/ToggleNativeDriver'; import * as React from 'react'; -import {useRef, useState} from 'react'; -import {Animated, StyleSheet, Text} from 'react-native'; +import {useState} from 'react'; +import {Animated, StyleSheet, Text, useAnimatedValue} from 'react-native'; const WIDTH = 200; const HEIGHT = 250; @@ -39,8 +39,8 @@ const styles = StyleSheet.create({ }); function CompatibilityAnimatedPointerMove(): React.Node { - const xCoord = useRef(new Animated.Value(0)).current; - const yCoord = useRef(new Animated.Value(0)).current; + const xCoord = useAnimatedValue(0); + const yCoord = useAnimatedValue(0); const [useNativeDriver, setUseNativeDriver] = useState(true); return ( diff --git a/packages/@react-native/tester/js/examples/Experimental/PlatformTest/RNTesterPlatformTest.js b/packages/@react-native/tester/js/examples/Experimental/PlatformTest/RNTesterPlatformTest.js index 4ba3617667e..745dc5a5cc4 100644 --- a/packages/@react-native/tester/js/examples/Experimental/PlatformTest/RNTesterPlatformTest.js +++ b/packages/@react-native/tester/js/examples/Experimental/PlatformTest/RNTesterPlatformTest.js @@ -16,21 +16,12 @@ import usePlatformTestHarness from './usePlatformTestHarness'; import * as React from 'react'; import {StyleSheet, Text, View} from 'react-native'; -type Props = Readonly<{ +export default component RNTesterPlatformTest( title: string, description: string, instructions?: ReadonlyArray, - component: React.ComponentType, -}>; - -export default function RNTesterPlatformTest(props: Props): React.MixedElement { - const { - title, - description, - instructions, - component: UnderTestComponent, - } = props; - + component as UnderTestComponent: React.ComponentType, +) { const {harness, numPending, reset, results, testKey} = usePlatformTestHarness(); diff --git a/packages/@react-native/tester/js/examples/Experimental/W3CPointerEventPlatformTests/PointerEventAccessibility.js b/packages/@react-native/tester/js/examples/Experimental/W3CPointerEventPlatformTests/PointerEventAccessibility.js index 48a13acb3f2..68905052cf3 100644 --- a/packages/@react-native/tester/js/examples/Experimental/W3CPointerEventPlatformTests/PointerEventAccessibility.js +++ b/packages/@react-native/tester/js/examples/Experimental/W3CPointerEventPlatformTests/PointerEventAccessibility.js @@ -18,7 +18,7 @@ import {Pressable, ScrollView, StyleSheet, Text, View} from 'react-native'; const eventsToTrack = ['onClick']; -export default function PointerEventAccessibility(props: {}): React.MixedElement { +export default component PointerEventAccessibility() { const [eventsSeen, setEventsSeen] = useState>([]); const onAnyEvent = (occurrence: EventOccurrence, event: PointerEvent) => diff --git a/packages/@react-native/tester/js/examples/Filter/FilterExample.js b/packages/@react-native/tester/js/examples/Filter/FilterExample.js index d1d9b0a8307..8df9767911d 100644 --- a/packages/@react-native/tester/js/examples/Filter/FilterExample.js +++ b/packages/@react-native/tester/js/examples/Filter/FilterExample.js @@ -15,7 +15,15 @@ import type {ViewStyleProp} from 'react-native/Libraries/StyleSheet/StyleSheet'; import React from 'react'; import {useState} from 'react'; -import {Animated, Button, Image, StyleSheet, Text, View} from 'react-native'; +import { + Animated, + Button, + Image, + StyleSheet, + Text, + View, + useAnimatedValue, +} from 'react-native'; const alphaHotdog = require('../../assets/alpha-hotdog.png'); const hotdog = require('../../assets/hotdog.jpg'); @@ -278,7 +286,7 @@ exports.examples = [ ] as Array; const AnimatedBlurExample = () => { - const animatedValue = React.useRef(new Animated.Value(0)).current; + const animatedValue = useAnimatedValue(0); const [isBlurred, setIsBlurred] = React.useState(false); const onPress = () => { diff --git a/packages/@react-native/tester/js/examples/FlatList/FlatList-contentInset.js b/packages/@react-native/tester/js/examples/FlatList/FlatList-contentInset.js index a6867911fe3..f7189237240 100644 --- a/packages/@react-native/tester/js/examples/FlatList/FlatList-contentInset.js +++ b/packages/@react-native/tester/js/examples/FlatList/FlatList-contentInset.js @@ -15,7 +15,7 @@ import * as React from 'react'; import {useState} from 'react'; import {StyleSheet, Text, View} from 'react-native'; -export function FlatList_contentInset(): React.Node { +export component FlatList_contentInset() { const [initialContentInset, toggledContentInset] = [44, 88]; const [output, setOutput] = useState( diff --git a/packages/@react-native/tester/js/examples/FlatList/FlatList-inverted.js b/packages/@react-native/tester/js/examples/FlatList/FlatList-inverted.js index 7b8190409a0..d0596d8de44 100644 --- a/packages/@react-native/tester/js/examples/FlatList/FlatList-inverted.js +++ b/packages/@react-native/tester/js/examples/FlatList/FlatList-inverted.js @@ -14,7 +14,7 @@ import BaseFlatListExample from './BaseFlatListExample'; import * as React from 'react'; import {useState} from 'react'; -export function FlatList_inverted(): React.Node { +export component FlatList_inverted() { const [output, setOutput] = useState('inverted false'); const [exampleProps, setExampleProps] = useState({ inverted: false, diff --git a/packages/@react-native/tester/js/examples/FlatList/FlatList-maintainVisibleContentPosition.js b/packages/@react-native/tester/js/examples/FlatList/FlatList-maintainVisibleContentPosition.js index 47d02d2cc51..f674b5aec42 100644 --- a/packages/@react-native/tester/js/examples/FlatList/FlatList-maintainVisibleContentPosition.js +++ b/packages/@react-native/tester/js/examples/FlatList/FlatList-maintainVisibleContentPosition.js @@ -21,7 +21,7 @@ const DATA = Array.from({length: 20}, (_, i) => ({ const MAINTAIN_VISIBLE_CONTENT_POSITION = {minIndexForVisible: 0}; -export function FlatList_maintainVisibleContentPosition(): React.Node { +export component FlatList_maintainVisibleContentPosition() { const [height, setHeight] = useState(200); const [isItemResponsive, setIsItemResponsive] = useState(true); diff --git a/packages/@react-native/tester/js/examples/FlatList/FlatList-multiColumn.js b/packages/@react-native/tester/js/examples/FlatList/FlatList-multiColumn.js index 5900e5d8cde..a0b043de57f 100644 --- a/packages/@react-native/tester/js/examples/FlatList/FlatList-multiColumn.js +++ b/packages/@react-native/tester/js/examples/FlatList/FlatList-multiColumn.js @@ -31,7 +31,7 @@ import * as React from 'react'; import {useCallback, useState} from 'react'; import {Alert, FlatList, StyleSheet, View} from 'react-native'; -function MultiColumnExample(): React.Node { +component MultiColumnExample() { const [data, setData] = useState(genNewerItems(1000)); const [filterText, setFilterText] = useState(''); const [fixedHeight, setFixedHeight] = useState(true); diff --git a/packages/@react-native/tester/js/examples/FlatList/FlatList-nested.js b/packages/@react-native/tester/js/examples/FlatList/FlatList-nested.js index 69e7b6978dc..3abbe4d80fd 100644 --- a/packages/@react-native/tester/js/examples/FlatList/FlatList-nested.js +++ b/packages/@react-native/tester/js/examples/FlatList/FlatList-nested.js @@ -76,7 +76,7 @@ function reducer(state: ItemsState, action: ItemsAction): ItemsState { return state; } -function NestedListExample(): React.Node { +component NestedListExample() { const [outer, dispatchOuter] = useReducer(reducer, initialItemsState); const [inner, dispatchInner] = useReducer(reducer, initialItemsState); const sortedInnerViewableItems = useMemo( @@ -152,18 +152,12 @@ function NestedListExample(): React.Node { ); } -function OuterItemRenderer({ - index, - item, - dispatchOuter, - dispatchInner, -}: { +component OuterItemRenderer( index: number, item: OuterItem, dispatchOuter: ItemsAction => void, dispatchInner: ItemsAction => void, - ... -}) { +) { useEffect(() => { dispatchOuter({ type: 'add-rendered', @@ -262,14 +256,7 @@ function OuterItemRenderer({ } } -function InnerItemRenderer({ - item, - dispatchInner, -}: { - item: number, - dispatchInner: ItemsAction => void, - ... -}) { +component InnerItemRenderer(item: number, dispatchInner: ItemsAction => void) { useEffect(() => { dispatchInner({ type: 'add-rendered', diff --git a/packages/@react-native/tester/js/examples/FlatList/FlatList-onEndReached.js b/packages/@react-native/tester/js/examples/FlatList/FlatList-onEndReached.js index be505226890..9354ecc9ad5 100644 --- a/packages/@react-native/tester/js/examples/FlatList/FlatList-onEndReached.js +++ b/packages/@react-native/tester/js/examples/FlatList/FlatList-onEndReached.js @@ -16,7 +16,7 @@ import BaseFlatListExample from './BaseFlatListExample'; import * as React from 'react'; import {useRef, useState} from 'react'; -export function FlatList_onEndReached(): React.Node { +export component FlatList_onEndReached() { const [output, setOutput] = useState(''); const exampleProps = { onEndReached: (info: {distanceFromEnd: number, ...}) => diff --git a/packages/@react-native/tester/js/examples/FlatList/FlatList-onStartReached.js b/packages/@react-native/tester/js/examples/FlatList/FlatList-onStartReached.js index 00dc412e4fe..0424dc43db0 100644 --- a/packages/@react-native/tester/js/examples/FlatList/FlatList-onStartReached.js +++ b/packages/@react-native/tester/js/examples/FlatList/FlatList-onStartReached.js @@ -17,7 +17,7 @@ import * as React from 'react'; import {useRef, useState} from 'react'; import {FlatList} from 'react-native'; -export function FlatList_onStartReached(): React.Node { +export component FlatList_onStartReached() { const [output, setOutput] = useState(''); const exampleProps = { onStartReached: (info: {distanceFromStart: number, ...}) => diff --git a/packages/@react-native/tester/js/examples/FlatList/FlatList-stickyHeaders.js b/packages/@react-native/tester/js/examples/FlatList/FlatList-stickyHeaders.js index 0165e382a62..e3f1f1feda8 100644 --- a/packages/@react-native/tester/js/examples/FlatList/FlatList-stickyHeaders.js +++ b/packages/@react-native/tester/js/examples/FlatList/FlatList-stickyHeaders.js @@ -38,7 +38,7 @@ const Item = ({item, separators}: ListRenderItemInfo) => { ); }; -export function FlatList_stickyHeaders(): React.Node { +export component FlatList_stickyHeaders() { return ( - + React ); diff --git a/packages/@react-native/tester/js/examples/ScrollView/ScrollViewIndicatorInsetsIOSExample.js b/packages/@react-native/tester/js/examples/ScrollView/ScrollViewIndicatorInsetsIOSExample.js index 0649f16954e..d4973235bb1 100644 --- a/packages/@react-native/tester/js/examples/ScrollView/ScrollViewIndicatorInsetsIOSExample.js +++ b/packages/@react-native/tester/js/examples/ScrollView/ScrollViewIndicatorInsetsIOSExample.js @@ -23,7 +23,7 @@ import { useWindowDimensions, } from 'react-native'; -function ScrollViewIndicatorInsetsExample(): React.Node { +component ScrollViewIndicatorInsetsExample() { const [ automaticallyAdjustsScrollIndicatorInsets, setAutomaticallyAdjustsScrollIndicatorInsets, diff --git a/packages/@react-native/tester/js/examples/ScrollView/ScrollViewKeyboardInsetsIOSExample.js b/packages/@react-native/tester/js/examples/ScrollView/ScrollViewKeyboardInsetsIOSExample.js index c2f8beae6e4..3189b4038d7 100644 --- a/packages/@react-native/tester/js/examples/ScrollView/ScrollViewKeyboardInsetsIOSExample.js +++ b/packages/@react-native/tester/js/examples/ScrollView/ScrollViewKeyboardInsetsIOSExample.js @@ -22,7 +22,7 @@ import { View, } from 'react-native'; -function ScrollViewKeyboardInsetsExample(): React.Node { +component ScrollViewKeyboardInsetsExample() { const [ automaticallyAdjustKeyboardInsets, setAutomaticallyAdjustKeyboardInsets, diff --git a/packages/@react-native/tester/js/examples/ScrollView/ScrollViewPressableStickyHeaderExample.js b/packages/@react-native/tester/js/examples/ScrollView/ScrollViewPressableStickyHeaderExample.js index bc40525ddfa..8451901a798 100644 --- a/packages/@react-native/tester/js/examples/ScrollView/ScrollViewPressableStickyHeaderExample.js +++ b/packages/@react-native/tester/js/examples/ScrollView/ScrollViewPressableStickyHeaderExample.js @@ -51,7 +51,7 @@ function renderComponent1(i: number) { ); } -export default function ScrollViewPressableStickyHeaderExample(): React.Node { +export default component ScrollViewPressableStickyHeaderExample() { const scrollRef = useRef<$FlowFixMe>(null); const components = []; for (var i = 1; i < 10; i++) { diff --git a/packages/@react-native/tester/js/examples/SectionList/SectionList-contentInset.js b/packages/@react-native/tester/js/examples/SectionList/SectionList-contentInset.js index a20e7fa814f..0345c3aa228 100644 --- a/packages/@react-native/tester/js/examples/SectionList/SectionList-contentInset.js +++ b/packages/@react-native/tester/js/examples/SectionList/SectionList-contentInset.js @@ -17,7 +17,7 @@ import * as React from 'react'; import {useState} from 'react'; import {StyleSheet, Text, View} from 'react-native'; -export function SectionList_contentInset(): React.Node { +export component SectionList_contentInset() { const [initialContentInset, toggledContentInset] = [44, 88]; const [output, setOutput] = useState( diff --git a/packages/@react-native/tester/js/examples/SectionList/SectionList-inverted.js b/packages/@react-native/tester/js/examples/SectionList/SectionList-inverted.js index 78e6d654b23..f85d92fb144 100644 --- a/packages/@react-native/tester/js/examples/SectionList/SectionList-inverted.js +++ b/packages/@react-native/tester/js/examples/SectionList/SectionList-inverted.js @@ -14,7 +14,7 @@ import SectionListBaseExample from './SectionListBaseExample'; import * as React from 'react'; import {useState} from 'react'; -export function SectionList_inverted(): React.Node { +export component SectionList_inverted() { const [output, setOutput] = useState('inverted false'); const [exampleProps, setExampleProps] = useState({ inverted: false, diff --git a/packages/@react-native/tester/js/examples/SectionList/SectionList-onEndReached.js b/packages/@react-native/tester/js/examples/SectionList/SectionList-onEndReached.js index f77f4e9c501..0f1066484ca 100644 --- a/packages/@react-native/tester/js/examples/SectionList/SectionList-onEndReached.js +++ b/packages/@react-native/tester/js/examples/SectionList/SectionList-onEndReached.js @@ -12,7 +12,7 @@ import SectionListBaseExample from './SectionListBaseExample'; import * as React from 'react'; import {useRef, useState} from 'react'; -export function SectionList_onEndReached(): React.Node { +export component SectionList_onEndReached() { const [output, setOutput] = useState(''); const exampleProps = { onEndReached: (info: {distanceFromEnd: number, ...}) => diff --git a/packages/@react-native/tester/js/examples/SectionList/SectionList-scrollable.js b/packages/@react-native/tester/js/examples/SectionList/SectionList-scrollable.js index 5246a9f26be..829af773636 100644 --- a/packages/@react-native/tester/js/examples/SectionList/SectionList-scrollable.js +++ b/packages/@react-native/tester/js/examples/SectionList/SectionList-scrollable.js @@ -172,7 +172,7 @@ const SectionSeparatorComponent = info => ( ); -export function SectionList_scrollable(Props: {...}): React.MixedElement { +export component SectionList_scrollable() { const scrollPos = new Animated.Value(0); const scrollSinkY = Animated.event( [{nativeEvent: {contentOffset: {y: scrollPos}}}], diff --git a/packages/@react-native/tester/js/examples/SectionList/SectionList-stickyHeadersEnabled.js b/packages/@react-native/tester/js/examples/SectionList/SectionList-stickyHeadersEnabled.js index 263df4a4b5e..0f5a5fd578d 100644 --- a/packages/@react-native/tester/js/examples/SectionList/SectionList-stickyHeadersEnabled.js +++ b/packages/@react-native/tester/js/examples/SectionList/SectionList-stickyHeadersEnabled.js @@ -14,7 +14,7 @@ import SectionListBaseExample from './SectionListBaseExample'; import * as React from 'react'; import {useState} from 'react'; -export function SectionList_stickySectionHeadersEnabled(): React.Node { +export component SectionList_stickySectionHeadersEnabled() { const [output, setOutput] = useState('stickySectionHeadersEnabled false'); const [exampleProps, setExampleProps] = useState({ stickySectionHeadersEnabled: false, diff --git a/packages/@react-native/tester/js/examples/SectionList/SectionList-withSeparators.js b/packages/@react-native/tester/js/examples/SectionList/SectionList-withSeparators.js index d5cc0f260fb..0dd5b6311ef 100644 --- a/packages/@react-native/tester/js/examples/SectionList/SectionList-withSeparators.js +++ b/packages/@react-native/tester/js/examples/SectionList/SectionList-withSeparators.js @@ -33,7 +33,7 @@ const Separator = ); }; -export function SectionList_withSeparators(): React.Node { +export component SectionList_withSeparators() { const exampleProps = { ItemSeparatorComponent: Separator('lightgreen', 'green', false), SectionSeparatorComponent: Separator('lightblue', 'blue', true), diff --git a/packages/@react-native/tester/js/examples/Text/TextAdjustsDynamicLayoutExample.js b/packages/@react-native/tester/js/examples/Text/TextAdjustsDynamicLayoutExample.js index 1337d1209ba..7ef680a5006 100644 --- a/packages/@react-native/tester/js/examples/Text/TextAdjustsDynamicLayoutExample.js +++ b/packages/@react-native/tester/js/examples/Text/TextAdjustsDynamicLayoutExample.js @@ -12,7 +12,7 @@ import * as React from 'react'; import {useState} from 'react'; import {Button, StyleSheet, Text, View} from 'react-native'; -export default function TextAdjustsDynamicLayoutExample(props: {}): React.Node { +export default component TextAdjustsDynamicLayoutExample() { const [height, setHeight] = useState(20); return ( diff --git a/packages/@react-native/tester/js/examples/Transform/TransformExample.js b/packages/@react-native/tester/js/examples/Transform/TransformExample.js index c3b1501a9bc..262206a9c0e 100644 --- a/packages/@react-native/tester/js/examples/Transform/TransformExample.js +++ b/packages/@react-native/tester/js/examples/Transform/TransformExample.js @@ -12,8 +12,15 @@ import type {RNTesterModuleExample} from '../../types/RNTesterTypes'; import type {AnimatedNode} from 'react-native/Libraries/Animated/AnimatedExports'; import * as React from 'react'; -import {useEffect, useRef, useState} from 'react'; -import {Animated, Easing, StyleSheet, Text, View} from 'react-native'; +import {useEffect, useState} from 'react'; +import { + Animated, + Easing, + StyleSheet, + Text, + View, + useAnimatedValue, +} from 'react-native'; function AnimateTransformSingleProp() { const [theta] = useState(new Animated.Value(45)); @@ -53,7 +60,7 @@ function AnimateTransformSingleProp() { } function TransformOriginExample() { - const rotateAnim = useRef(new Animated.Value(0)).current; + const rotateAnim = useAnimatedValue(0); useEffect(() => { Animated.loop( diff --git a/vnext/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp b/vnext/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp index c267e020f16..8908945a150 100644 --- a/vnext/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +++ b/vnext/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -404,6 +405,17 @@ void FabricUIManager::schedulerShouldRenderTransactions( } } +void FabricUIManager::schedulerShouldMergeReactRevision(facebook::react::SurfaceId surfaceId) { + m_context.UIDispatcher().Post([surfaceId, self = shared_from_this()]() { + std::lock_guard lock(self->m_schedulerMutex); + if (self->m_scheduler) { + self->m_scheduler->getUIManager()->getShadowTreeRegistry().visit( + surfaceId, + [](const facebook::react::ShadowTree &shadowTree) { shadowTree.mergeReactRevision(); }); + } + }); +} + void FabricUIManager::schedulerDidRequestPreliminaryViewAllocation(const facebook::react::ShadowNode &shadowView) { // iOS does not do this optimization, but Android does. It maybe that android's allocations are more expensive due to // the Java boundary. diff --git a/vnext/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h b/vnext/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h index cacda9a7cdb..696633a46a6 100644 --- a/vnext/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +++ b/vnext/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h @@ -90,6 +90,7 @@ struct FabricUIManager final : public std::enable_shared_from_this &mountingCoordinator) override; virtual void schedulerShouldRenderTransactions( const std::shared_ptr &mountingCoordinator) override; + virtual void schedulerShouldMergeReactRevision(facebook::react::SurfaceId surfaceId) override; virtual void schedulerDidRequestPreliminaryViewAllocation(const facebook::react::ShadowNode &shadowView) override; virtual void schedulerDidDispatchCommand( facebook::react::ShadowView const &shadowView, diff --git a/vnext/Microsoft.ReactNative/ReactHost/ReactHost.cpp b/vnext/Microsoft.ReactNative/ReactHost/ReactHost.cpp index ea96a7c4496..76803a9b974 100644 --- a/vnext/Microsoft.ReactNative/ReactHost/ReactHost.cpp +++ b/vnext/Microsoft.ReactNative/ReactHost/ReactHost.cpp @@ -614,7 +614,6 @@ void ReactHost::AddInspectorPage() noexcept { jsinspector_modern::InspectorTargetCapabilities capabilities; capabilities.nativePageReloads = true; - capabilities.prefersFuseboxFrontend = true; auto metadata = m_inspectorHostTargetDelegate->getMetadata(); std::string pageName; diff --git a/vnext/Shared/Shared.vcxitems b/vnext/Shared/Shared.vcxitems index e55833a5d6e..f64d0e8427a 100644 --- a/vnext/Shared/Shared.vcxitems +++ b/vnext/Shared/Shared.vcxitems @@ -446,6 +446,8 @@ + + diff --git a/vnext/overrides.json b/vnext/overrides.json index e8beafa2454..ac104221d27 100644 --- a/vnext/overrides.json +++ b/vnext/overrides.json @@ -286,14 +286,6 @@ "type": "platform", "file": "src-win/IntegrationTests/XHRTest.js" }, - { - "type": "copy", - "file": "src-win/jest/setup.js", - "baseFile": "packages/react-native/jest/setup.js", - "baseVersion": "0.85.0-nightly-20260210-4535df4f6", - "baseHash": "f0a153e2fecbfa912ae0997e0bc98ea8a1791a52", - "issue": 14929 - }, { "type": "platform", "file": "src-win/Libraries/__tests__/ViewWindows-test.js" @@ -564,13 +556,13 @@ "baseHash": "3d342d4c28ce5deafecf22682522fdb275ae41bf" }, { - "type": "derived", + "type": "copy", "file": "src-win/Libraries/LogBox/UI/LogBoxInspectorReactFrames.windows.js", "baseFile": "packages/react-native/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js", "baseHash": "12bd90c6572e19e7c23c0cc702d179f04dc8d7bc" }, { - "type": "derived", + "type": "copy", "file": "src-win/Libraries/LogBox/UI/LogBoxInspectorStackFrame.windows.js", "baseFile": "packages/react-native/Libraries/LogBox/UI/LogBoxInspectorStackFrame.js", "baseHash": "95e584184ae16ef23a57f7ebc3fba6b5c54a5268" diff --git a/vnext/src-win/Libraries/Components/TextInput/TextInput.windows.js b/vnext/src-win/Libraries/Components/TextInput/TextInput.windows.js index 1169add0905..c0c3cca8c85 100644 --- a/vnext/src-win/Libraries/Components/TextInput/TextInput.windows.js +++ b/vnext/src-win/Libraries/Components/TextInput/TextInput.windows.js @@ -501,23 +501,12 @@ function InternalTextInput(props: TextInputProps): React.Node { return inputRef.current; }, isFocused(): boolean { -<<<<<<< Upstream const currentlyFocusedInput = TextInputState.currentlyFocusedInput(); return ( currentlyFocusedInput != null && currentlyFocusedInput === inputRef.current ); -||||||| base - return TextInputState.currentlyFocusedInput() === inputRef.current; -======= - const currentlyFocusedInput = - TextInputState.currentlyFocusedInput(); - return ( - currentlyFocusedInput !== null && - currentlyFocusedInput === inputRef.current - ); ->>>>>>> Override }, setSelection(start: number, end: number): void { if (inputRef.current != null) { diff --git a/vnext/src-win/Libraries/LogBox/UI/LogBoxInspectorReactFrames.windows.js b/vnext/src-win/Libraries/LogBox/UI/LogBoxInspectorReactFrames.windows.js index 81b2f6d7ad1..d583068b45a 100644 --- a/vnext/src-win/Libraries/LogBox/UI/LogBoxInspectorReactFrames.windows.js +++ b/vnext/src-win/Libraries/LogBox/UI/LogBoxInspectorReactFrames.windows.js @@ -161,44 +161,24 @@ const componentStyles = StyleSheet.create({ paddingRight: 10, }, frameName: { -<<<<<<< Upstream fontFamily: Platform.select({ android: 'monospace', ios: 'Menlo', macos: 'Menlo', windows: 'Consolas', }), -||||||| base - fontFamily: Platform.select({android: 'monospace', ios: 'Menlo'}), -======= - fontFamily: Platform.select({ - android: 'monospace', - ios: 'Menlo', - windows: 'Consolas', - }), ->>>>>>> Override color: LogBoxStyle.getTextColor(1), fontSize: 14, includeFontPadding: false, lineHeight: 18, }, bracket: { -<<<<<<< Upstream fontFamily: Platform.select({ android: 'monospace', ios: 'Menlo', macos: 'Menlo', windows: 'Consolas', }), -||||||| base - fontFamily: Platform.select({android: 'monospace', ios: 'Menlo'}), -======= - fontFamily: Platform.select({ - android: 'monospace', - ios: 'Menlo', - windows: 'Consolas', - }), ->>>>>>> Override color: LogBoxStyle.getTextColor(0.4), fontSize: 14, fontWeight: '500', diff --git a/vnext/src-win/Libraries/LogBox/UI/LogBoxInspectorStackFrame.windows.js b/vnext/src-win/Libraries/LogBox/UI/LogBoxInspectorStackFrame.windows.js index 29754117900..644b28ce371 100644 --- a/vnext/src-win/Libraries/LogBox/UI/LogBoxInspectorStackFrame.windows.js +++ b/vnext/src-win/Libraries/LogBox/UI/LogBoxInspectorStackFrame.windows.js @@ -87,22 +87,12 @@ const styles = StyleSheet.create({ includeFontPadding: false, lineHeight: 18, fontWeight: '400', -<<<<<<< Upstream fontFamily: Platform.select({ android: 'monospace', ios: 'Menlo', macos: 'Menlo', windows: 'Consolas', }), -||||||| base - fontFamily: Platform.select({android: 'monospace', ios: 'Menlo'}), -======= - fontFamily: Platform.select({ - android: 'monospace', - ios: 'Menlo', - windows: 'Consolas', - }), ->>>>>>> Override }, location: { color: LogBoxStyle.getTextColor(0.8), diff --git a/vnext/src-win/jest/setup.js b/vnext/src-win/jest/setup.js deleted file mode 100644 index 988b156af35..00000000000 --- a/vnext/src-win/jest/setup.js +++ /dev/null @@ -1,141 +0,0 @@ -/** - * 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. - * - * @flow strict-local - * @format - */ - -global.IS_REACT_ACT_ENVIRONMENT = true; -// Suppress the `react-test-renderer` warnings until New Architecture and legacy -// mode are no longer supported by React Native. -global.IS_REACT_NATIVE_TEST_ENVIRONMENT = true; - -import '@react-native/js-polyfills/error-guard'; - -import mock from './mock'; - -// $FlowFixMe[cannot-write] -Object.defineProperties(global, { - __DEV__: { - configurable: true, - enumerable: true, - value: true, - writable: true, - }, - cancelAnimationFrame: { - configurable: true, - enumerable: true, - value(id: TimeoutID): void { - return clearTimeout(id); - }, - writable: true, - }, - nativeFabricUIManager: { - configurable: true, - enumerable: true, - value: {}, - writable: true, - }, - performance: { - configurable: true, - enumerable: true, - value: { - // $FlowFixMe[method-unbinding] - now: jest.fn(Date.now), - }, - writable: true, - }, - regeneratorRuntime: { - configurable: true, - enumerable: true, - value: jest.requireActual('regenerator-runtime/runtime'), - writable: true, - }, - requestAnimationFrame: { - configurable: true, - enumerable: true, - value(callback: number => void): TimeoutID { - return setTimeout(() => callback(jest.now()), 0); - }, - writable: true, - }, - window: { - configurable: true, - enumerable: true, - value: global, - writable: true, - }, -}); - -// This setup script will be published in the react-native package. -// Other people might not have prettier installed, so it will crash the mock below. -// Therefore, we wrap this mock in a try-catch. -try { - /** - * Prettier v3 uses import (cjs/mjs) file formats that jest-runtime does not - * support. To work around this we need to bypass the jest module system by - * using the orginal node `require` function. - */ - jest.mock('prettier', () => { - // $FlowExpectedError[underconstrained-implicit-instantiation] - const module = jest.requireActual('module'); - return module.prototype.require(require.resolve('prettier')); - }); -} catch {} - -// $FlowFixMe[incompatible-type] - `./mocks/AppState` is incomplete. -mock('m#../Libraries/AppState/AppState', 'm#./mocks/AppState'); -mock('m#../Libraries/BatchedBridge/NativeModules', 'm#./mocks/NativeModules'); -mock( - 'm#../Libraries/Components/AccessibilityInfo/AccessibilityInfo', - 'm#./mocks/AccessibilityInfo', -); -mock( - 'm#../Libraries/Components/ActivityIndicator/ActivityIndicator', - 'm#./mocks/ActivityIndicator', -); -mock('m#../Libraries/Components/Clipboard/Clipboard', 'm#./mocks/Clipboard'); -mock( - 'm#../Libraries/Components/RefreshControl/RefreshControl', - // $FlowFixMe[incompatible-type] - `../Libraries/Components/RefreshControl/RefreshControl` should export a component type. - 'm#./mocks/RefreshControl', -); -// $FlowFixMe[incompatible-exact] - `../Libraries/Components/ScrollView/ScrollView` is... I don't even. -// $FlowFixMe[incompatible-type] -mock('m#../Libraries/Components/ScrollView/ScrollView', 'm#./mocks/ScrollView'); -mock('m#../Libraries/Components/TextInput/TextInput', 'm#./mocks/TextInput'); -mock('m#../Libraries/Components/View/View', 'm#./mocks/View'); -mock( - 'm#../Libraries/Components/View/ViewNativeComponent', - // $FlowFixMe[incompatible-type] - `./mocks/ViewNativeComponent` is incomplete. - // $FlowFixMe[prop-missing] - 'm#./mocks/ViewNativeComponent', -); -mock('m#../Libraries/Core/InitializeCore', 'm#./mocks/InitializeCore'); -mock('m#../Libraries/Core/NativeExceptionsManager'); -mock('m#../Libraries/Image/Image', 'm#./mocks/Image'); -// $FlowFixMe[incompatible-type] - `./mocks/Linking` is incomplete. -mock('m#../Libraries/Linking/Linking', 'm#./mocks/Linking'); -// $FlowFixMe[incompatible-type] - `../Libraries/Modal/Modal` should export a component type. -mock('m#../Libraries/Modal/Modal', 'm#./mocks/Modal'); -mock( - 'm#../Libraries/NativeComponent/NativeComponentRegistry', - // $FlowFixMe[incompatible-type] - `./mocks/NativeComponentRegistry` should export named functions. - 'm#./mocks/NativeComponentRegistry', -); -// $FlowFixMe[incompatible-type] - `./mocks/RendererProxy` is incomplete. -mock('m#../Libraries/ReactNative/RendererProxy', 'm#./mocks/RendererProxy'); -mock( - 'm#../Libraries/ReactNative/requireNativeComponent', - 'm#./mocks/requireNativeComponent', -); -// $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/yarn.lock b/yarn.lock index cb98726a18f..e99d9e83b0c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4536,7 +4536,7 @@ __metadata: dependencies: "@babel/core": "npm:^7.25.2" "@babel/eslint-parser": "npm:^7.25.1" - "@babel/generator": "npm:^7.25.0" + "@babel/generator": "npm:^7.29.1" "@babel/plugin-syntax-typescript": "npm:^7.25.4" "@babel/plugin-transform-regenerator": "npm:^7.24.7" "@babel/preset-env": "npm:^7.25.3" @@ -4574,7 +4574,7 @@ __metadata: eslint-plugin-relay: "npm:^1.8.3" fb-dotslash: "npm:0.5.8" flow-api-translator: "npm:0.33.3" - flow-bin: "npm:^0.299.0" + flow-bin: "npm:^0.302.0" hermes-eslint: "npm:0.33.3" hermes-transform: "npm:0.33.3" ini: "npm:^5.0.0" @@ -10592,6 +10592,15 @@ __metadata: languageName: node linkType: hard +"flow-bin@npm:^0.302.0": + version: 0.302.0 + resolution: "flow-bin@npm:0.302.0" + bin: + flow: cli.js + checksum: 10c0/55fd528b56c9b51a1b2fec1af6f4c0bfadc0449aa14353fa0669ec1635022d0b00696b9920a3c497cd5056ce7f8fe97ee32bd7aac99efb7f27d1adda8b54686e + languageName: node + linkType: hard + "flow-enums-runtime@npm:^0.0.6": version: 0.0.6 resolution: "flow-enums-runtime@npm:0.0.6" From 401fea811d21d46bf8d267e93550447ec227cb71 Mon Sep 17 00:00:00 2001 From: Anukrati Agrawal Date: Mon, 29 Jun 2026 14:56:51 -0700 Subject: [PATCH 3/4] Add upstream AnimationBackend examples for RN 0.85.0-nightly-20260224-42cd0f041 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../AnimationBackend/AnimationBackendIndex.js | 29 ++ .../AnimationBackend/ChessboardExample.js | 134 ++++++++ .../AnimationBackend/SwipeableListExample.js | 286 ++++++++++++++++++ 3 files changed, 449 insertions(+) create mode 100644 packages/@react-native/tester/js/examples/AnimationBackend/AnimationBackendIndex.js create mode 100644 packages/@react-native/tester/js/examples/AnimationBackend/ChessboardExample.js create mode 100644 packages/@react-native/tester/js/examples/AnimationBackend/SwipeableListExample.js diff --git a/packages/@react-native/tester/js/examples/AnimationBackend/AnimationBackendIndex.js b/packages/@react-native/tester/js/examples/AnimationBackend/AnimationBackendIndex.js new file mode 100644 index 00000000000..f8eb3d25d77 --- /dev/null +++ b/packages/@react-native/tester/js/examples/AnimationBackend/AnimationBackendIndex.js @@ -0,0 +1,29 @@ +/** + * 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. + * + * @flow strict-local + * @format + */ + +import type {RNTesterModule} from '../../types/RNTesterTypes'; + +import PlaygroundExample from './ChessboardExample'; +import SwipeableListExample from './SwipeableListExample'; +import * as ReactNativeFeatureFlags from 'react-native/src/private/featureflags/ReactNativeFeatureFlags'; + +const canUseBackend = + // eslint-disable-next-line + ReactNativeFeatureFlags.useSharedAnimatedBackend() && + ReactNativeFeatureFlags.cxxNativeAnimatedEnabled(); + +export default ({ + framework: 'React', + title: 'Animation Backend', + category: 'UI', + description: `Examples demonstrating the Animation Backend for layout-updating animations. ${canUseBackend ? '' : 'You need to enable c++ Animated and the Animation Backend to see these examples.'}`, + showIndividualExamples: true, + examples: canUseBackend ? [PlaygroundExample, SwipeableListExample] : [], +}: RNTesterModule); diff --git a/packages/@react-native/tester/js/examples/AnimationBackend/ChessboardExample.js b/packages/@react-native/tester/js/examples/AnimationBackend/ChessboardExample.js new file mode 100644 index 00000000000..5bf011860ba --- /dev/null +++ b/packages/@react-native/tester/js/examples/AnimationBackend/ChessboardExample.js @@ -0,0 +1,134 @@ +/** + * 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. + * + * @flow strict-local + * @format + */ + +import type {RNTesterModuleExample} from '../../types/RNTesterTypes'; + +import * as React from 'react'; +import {useMemo} from 'react'; +import {Animated, StyleSheet, Text, View, useAnimatedValue} from 'react-native'; +import {allowStyleProp} from 'react-native/Libraries/Animated/NativeAnimatedAllowlist'; + +allowStyleProp('width'); +allowStyleProp('height'); +const colors = ['lime', 'green']; + +function useLoop() { + const animatedValue = useAnimatedValue(0); + + React.useEffect(() => { + const animation = Animated.loop( + Animated.sequence([ + Animated.timing(animatedValue, { + toValue: 1, + duration: 1000, + useNativeDriver: true, + }), + Animated.timing(animatedValue, { + toValue: 0, + duration: 1000, + useNativeDriver: true, + }), + ]), + ); + animation.start(); + + return () => { + animation.stop(); + }; + }, [animatedValue]); + + return animatedValue; +} + +const N = 12; +const STATE_MAX = 30; + +function ChessboardExample() { + const [state, setState] = React.useState(0); + + const animatedValue = useLoop(); + + React.useEffect(() => { + const id = setInterval(() => { + setState(s => (s + 1) % STATE_MAX); + }, 10); + return () => { + clearInterval(id); + }; + }, []); + + const animatedStyle = useMemo(() => { + return { + width: animatedValue.interpolate({ + inputRange: [0, 1], + outputRange: [10, 30], + }), + height: animatedValue.interpolate({ + inputRange: [0, 1], + outputRange: [10, 30], + }), + }; + }, [animatedValue]); + + return ( + + {state} + + + {[...Array(N).keys()].map(i => ( + + {[...Array(N).keys()].map(j => ( + + ))} + + ))} + + + + ); +} + +const styles = StyleSheet.create({ + workaround: { + height: 400, + }, + chessboard: { + alignItems: 'flex-start', + }, + border: { + borderWidth: 10, + borderColor: 'red', + }, + row: { + flexDirection: 'row', + }, + text: { + fontSize: 20, + fontWeight: 'bold', + textAlign: 'center', + margin: 10, + }, +}); + +export default ({ + title: 'Chessboard', + name: 'chessboard', + description: 'Combine animating layout with state updates', + render: (): React.Node => , +}: RNTesterModuleExample); diff --git a/packages/@react-native/tester/js/examples/AnimationBackend/SwipeableListExample.js b/packages/@react-native/tester/js/examples/AnimationBackend/SwipeableListExample.js new file mode 100644 index 00000000000..2ede306fa51 --- /dev/null +++ b/packages/@react-native/tester/js/examples/AnimationBackend/SwipeableListExample.js @@ -0,0 +1,286 @@ +/** + * 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. + * + * @flow strict-local + * @format + */ + +import type {RNTesterModuleExample} from '../../types/RNTesterTypes'; + +import * as React from 'react'; +import {useCallback, useMemo, useRef} from 'react'; +import { + Alert, + Animated, + Dimensions, + Easing, + PanResponder, + StyleSheet, + Text, + TouchableOpacity, + View, + useAnimatedValue, +} from 'react-native'; +import {allowStyleProp} from 'react-native/Libraries/Animated/NativeAnimatedAllowlist'; + +allowStyleProp('height'); + +const windowDimensions = Dimensions.get('window'); +const BUTTON_WIDTH = 80; +const MAX_TRANSLATE = -BUTTON_WIDTH; + +type Data = { + id: string, + title: string, +}; + +const initialData: $ReadOnlyArray = [ + {id: '1', title: 'Kate Bell'}, + {id: '2', title: 'John Appleseed'}, + {id: '3', title: 'Mark Zuckerberg'}, + {id: '4', title: 'Iron Man'}, + {id: '5', title: 'Captain America'}, + {id: '6', title: 'Batman'}, + {id: '7', title: 'Matt Smith'}, +]; + +const springConfig = { + stiffness: 1000, + damping: 500, + mass: 3, + overshootClamping: true, + useNativeDriver: true, +}; + +const timingConfig = { + duration: 400, + easing: Easing.bezier(0.25, 0.1, 0.25, 1), + useNativeDriver: true, +}; + +function SwipeableListExample(): React.Node { + const [data, setData] = React.useState<$ReadOnlyArray>(initialData); + + const handleRemove = useCallback((id: string) => { + setData(currentData => currentData.filter(item => item.id !== id)); + Alert.alert('Removed'); + }, []); + + return ( + + {data.map(item => ( + handleRemove(item.id)} + /> + ))} + + ); +} + +type ListItemProps = { + item: Data, + onRemove: () => void, +}; + +function ListItem({item, onRemove}: ListItemProps): React.Node { + const isRemoving = useRef(false); + const translateX = useAnimatedValue(0); + const removalOffset = useAnimatedValue(0); // Separate value for removal animation + const height = useAnimatedValue(78); + const opacity = useAnimatedValue(1); + + const clampedTranslateX = useMemo( + () => + translateX.interpolate({ + inputRange: [MAX_TRANSLATE, 0], + outputRange: [MAX_TRANSLATE, 0], + extrapolate: 'clamp', + }), + [translateX], + ); + + // Combine clamped pan position with removal offset + const finalTranslateX = useMemo( + () => Animated.add(clampedTranslateX, removalOffset), + [clampedTranslateX, removalOffset], + ); + + const panResponder = useMemo( + () => + PanResponder.create({ + onMoveShouldSetPanResponder: (_, gestureState) => { + return Math.abs(gestureState.dx) > 10; + }, + onPanResponderGrant: () => { + translateX.extractOffset(); + }, + onPanResponderMove: Animated.event([null, {dx: translateX}], { + useNativeDriver: false, + }), + onPanResponderRelease: (_, gestureState) => { + translateX.flattenOffset(); + + const shouldOpen = gestureState.vx < -0.05; + const targetValue = shouldOpen ? MAX_TRANSLATE : 0; + + Animated.spring(translateX, { + toValue: targetValue, + velocity: gestureState.vx, + ...springConfig, + }).start(); + }, + }), + [translateX], + ); + + const handleRemove = useCallback(() => { + if (isRemoving.current) { + return; + } + isRemoving.current = true; + + // Animate removal offset separately - this bypasses the clamp + Animated.parallel([ + Animated.timing(height, { + toValue: 0, + ...timingConfig, + }), + Animated.timing(opacity, { + toValue: 0, + ...timingConfig, + }), + Animated.timing(removalOffset, { + toValue: -windowDimensions.width - MAX_TRANSLATE, + ...timingConfig, + }), + ]).start(() => { + onRemove(); + }); + }, [height, opacity, removalOffset, onRemove]); + + const animatedStyle = useMemo( + () => ({ + height, + opacity, + transform: [{translateX: finalTranslateX}], + }), + [height, opacity, finalTranslateX], + ); + + const removeButton = useMemo( + () => ({ + title: 'Delete', + backgroundColor: 'red', + color: 'white', + onPress: handleRemove, + }), + [handleRemove], + ); + + return ( + + + + +