react-native-windows 0.79.5 → 0.80.0-preview.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (370) hide show
  1. package/.flowconfig +12 -3
  2. package/Directory.Build.props +11 -2
  3. package/Folly/TEMP_UntilFollyUpdate/json/json.cpp +1 -1
  4. package/Libraries/Alert/Alert.d.ts +4 -1
  5. package/Libraries/Alert/Alert.js +3 -0
  6. package/Libraries/Alert/Alert.windows.js +3 -0
  7. package/Libraries/Alert/RCTAlertManager.js +17 -0
  8. package/Libraries/Animated/Animated.js.flow +1 -3
  9. package/Libraries/Animated/AnimatedEvent.js +4 -3
  10. package/Libraries/Animated/AnimatedExports.js +2 -2
  11. package/Libraries/Animated/AnimatedExports.js.flow +140 -0
  12. package/Libraries/Animated/AnimatedImplementation.js +2 -123
  13. package/Libraries/Animated/Easing.js +13 -15
  14. package/Libraries/Animated/animations/Animation.js +8 -4
  15. package/Libraries/Animated/components/AnimatedFlatList.js +7 -6
  16. package/Libraries/Animated/components/AnimatedScrollView.js +48 -42
  17. package/Libraries/Animated/components/AnimatedSectionList.js +11 -7
  18. package/Libraries/Animated/createAnimatedComponent.js +105 -57
  19. package/Libraries/Animated/nodes/AnimatedNode.js +4 -3
  20. package/Libraries/Animated/nodes/AnimatedProps.js +46 -26
  21. package/Libraries/Animated/nodes/AnimatedValue.js +16 -7
  22. package/Libraries/Animated/nodes/AnimatedValueXY.js +3 -1
  23. package/Libraries/AppState/AppState.js +7 -2
  24. package/Libraries/BatchedBridge/MessageQueue.js +2 -2
  25. package/Libraries/BatchedBridge/NativeModules.js +2 -0
  26. package/Libraries/Blob/BlobManager.js +1 -0
  27. package/Libraries/Blob/FileReader.js +219 -8
  28. package/Libraries/Blob/URL.js +37 -12
  29. package/Libraries/Blob/URLSearchParams.js +106 -31
  30. package/Libraries/Blob/URLSearchParams.js.flow +12 -7
  31. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +1 -1
  32. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js +1 -1
  33. package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.js +17 -0
  34. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +1 -0
  35. package/Libraries/Components/Button.d.ts +3 -0
  36. package/Libraries/Components/Button.js +1 -1
  37. package/Libraries/Components/Button.windows.js +27 -1
  38. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +1 -3
  39. package/Libraries/{NewAppScreen/components/Colors.js → Components/DrawerAndroid/DrawerLayoutAndroid.ios.js} +6 -10
  40. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +6 -66
  41. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js.flow +18 -0
  42. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroidFallback.js +71 -0
  43. package/Libraries/Components/Flyout/Flyout.js +11 -0
  44. package/Libraries/Components/Keyboard/Keyboard.js +5 -3
  45. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +6 -3
  46. package/Libraries/Components/Keyboard/KeyboardExt.js.map +1 -1
  47. package/Libraries/Components/Popup/Popup.js +11 -0
  48. package/Libraries/Components/Pressable/Pressable.js +20 -4
  49. package/Libraries/Components/Pressable/Pressable.windows.js +20 -4
  50. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js +25 -3
  51. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidTypes.js +29 -20
  52. package/Libraries/Components/RefreshControl/RefreshControl.js +1 -1
  53. package/Libraries/Components/RefreshControl/RefreshControl.windows.js +1 -1
  54. package/Libraries/Components/ScrollView/ScrollView.d.ts +3 -3
  55. package/Libraries/Components/ScrollView/ScrollView.js +132 -122
  56. package/Libraries/Components/ScrollView/ScrollView.windows.js +131 -122
  57. package/Libraries/Components/StaticRenderer.js +1 -1
  58. package/Libraries/Components/Switch/Switch.d.ts +3 -0
  59. package/Libraries/Components/Switch/Switch.js +8 -4
  60. package/Libraries/Components/Switch/Switch.windows.js +17 -4
  61. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +2 -1
  62. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +2 -4
  63. package/Libraries/Components/TextInput/TextInput.d.ts +70 -33
  64. package/Libraries/Components/TextInput/TextInput.flow.js +100 -51
  65. package/Libraries/Components/TextInput/TextInput.flow.windows.js +1246 -0
  66. package/Libraries/Components/TextInput/TextInput.js +88 -1027
  67. package/Libraries/Components/TextInput/TextInput.windows.js +104 -1092
  68. package/Libraries/Components/TextInput/TextInputState.js +1 -1
  69. package/Libraries/Components/TextInput/TextInputState.windows.js +1 -1
  70. package/Libraries/Components/TextInput/WindowsTextInputNativeComponent.js +2 -1
  71. package/Libraries/{Modal/ModalInjection.js → Components/ToastAndroid/ToastAndroid.ios.js} +3 -5
  72. package/Libraries/Components/ToastAndroid/ToastAndroid.js +4 -32
  73. package/Libraries/Components/ToastAndroid/ToastAndroid.js.flow +109 -0
  74. package/Libraries/Components/ToastAndroid/ToastAndroidFallback.js +45 -0
  75. package/Libraries/Components/Touchable/Touchable.js +5 -5
  76. package/Libraries/Components/Touchable/Touchable.windows.js +5 -5
  77. package/Libraries/Components/Touchable/TouchableBounce.js +14 -7
  78. package/Libraries/Components/Touchable/TouchableBounce.windows.js +14 -7
  79. package/Libraries/Components/Touchable/TouchableHighlight.js +10 -7
  80. package/Libraries/Components/Touchable/TouchableHighlight.windows.js +10 -7
  81. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +6 -6
  82. package/Libraries/Components/Touchable/TouchableNativeFeedback.windows.js +6 -6
  83. package/Libraries/Components/Touchable/TouchableOpacity.js +13 -6
  84. package/Libraries/Components/Touchable/TouchableOpacity.windows.js +13 -6
  85. package/Libraries/Components/View/View.js +18 -21
  86. package/Libraries/Components/View/View.windows.js +39 -41
  87. package/Libraries/Components/View/ViewAccessibility.d.ts +8 -0
  88. package/Libraries/Components/View/ViewAccessibility.js +25 -1
  89. package/Libraries/Components/View/ViewAccessibility.windows.js +9 -1
  90. package/Libraries/Components/View/ViewPropTypes.js +49 -3
  91. package/Libraries/Components/View/ViewPropTypes.windows.js +50 -2
  92. package/Libraries/Core/ReactNativeVersion.js +1 -1
  93. package/Libraries/Core/setUpReactDevTools.js +5 -5
  94. package/Libraries/Debugging/DebuggingOverlayRegistry.js +3 -3
  95. package/Libraries/EventEmitter/NativeEventEmitter.js +9 -4
  96. package/Libraries/Image/AssetSourceResolver.js +17 -4
  97. package/Libraries/Image/AssetSourceResolver.windows.js +17 -4
  98. package/Libraries/Image/Image.d.ts +26 -10
  99. package/Libraries/Image/Image.js +17 -0
  100. package/Libraries/Image/Image.js.flow +5 -5
  101. package/Libraries/Image/Image.windows.js +13 -1
  102. package/Libraries/Image/ImageBackground.js +2 -0
  103. package/Libraries/Image/ImageInjection.js +1 -1
  104. package/Libraries/Image/ImageProps.js +22 -17
  105. package/Libraries/Image/ImageSource.js +3 -1
  106. package/Libraries/Image/ImageSourceUtils.js +4 -2
  107. package/Libraries/Image/ImageTypes.flow.js +1 -1
  108. package/Libraries/Interaction/InteractionManager.d.ts +13 -0
  109. package/Libraries/Interaction/InteractionManager.js +1 -1
  110. package/Libraries/Interaction/PanResponder.js +3 -3
  111. package/Libraries/Interaction/TaskQueue.js +1 -0
  112. package/Libraries/LayoutAnimation/LayoutAnimation.js +2 -2
  113. package/Libraries/Linking/Linking.js +1 -1
  114. package/Libraries/Lists/FlatList.d.ts +2 -2
  115. package/Libraries/Lists/FlatList.js +8 -11
  116. package/Libraries/Lists/SectionList.js +39 -42
  117. package/Libraries/Lists/SectionListModern.js +25 -34
  118. package/Libraries/Lists/VirtualizedList.js +1 -0
  119. package/Libraries/Lists/VirtualizedSectionList.js +1 -0
  120. package/Libraries/LogBox/Data/LogBoxData.js +1 -1
  121. package/Libraries/LogBox/LogBoxNotificationContainer.js +1 -1
  122. package/Libraries/Modal/Modal.js +33 -7
  123. package/Libraries/Modal/Modal.windows.js +33 -10
  124. package/Libraries/NativeComponent/BaseViewConfig.android.js +2 -0
  125. package/Libraries/NativeComponent/BaseViewConfig.ios.js +2 -0
  126. package/Libraries/NativeComponent/BaseViewConfig.js +17 -0
  127. package/Libraries/NativeComponent/BaseViewConfig.windows.js +3 -0
  128. package/Libraries/NativeComponent/PlatformBaseViewConfig.js +2 -2
  129. package/Libraries/NativeModules/specs/NativeDevMenu.js +2 -2
  130. package/Libraries/Network/RCTNetworking.android.js +1 -1
  131. package/Libraries/Network/RCTNetworking.ios.js +1 -1
  132. package/Libraries/Network/RCTNetworking.js +17 -0
  133. package/Libraries/Network/RCTNetworking.js.flow +1 -1
  134. package/Libraries/Network/RCTNetworking.windows.js +1 -1
  135. package/Libraries/Network/XMLHttpRequest.js +781 -10
  136. package/Libraries/Performance/Systrace.js +7 -7
  137. package/Libraries/Pressability/Pressability.js +1 -1
  138. package/Libraries/Pressability/Pressability.windows.js +1 -1
  139. package/Libraries/ReactNative/AppContainer-dev.js +5 -4
  140. package/Libraries/ReactNative/AppRegistry.flow.js +49 -0
  141. package/Libraries/ReactNative/AppRegistry.js +2 -322
  142. package/Libraries/ReactNative/AppRegistry.js.flow +23 -0
  143. package/Libraries/ReactNative/AppRegistryImpl.js +316 -0
  144. package/Libraries/ReactNative/FabricUIManager.js +10 -0
  145. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +2 -4
  146. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +1 -4
  147. package/Libraries/ReactNative/RendererImplementation.js +10 -5
  148. package/Libraries/ReactNative/getNativeComponentAttributes.js +1 -0
  149. package/Libraries/ReactNative/renderApplication.js +9 -0
  150. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +3 -3
  151. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js.flow +51 -0
  152. package/Libraries/Renderer/implementations/ReactFabric-dev.js +4840 -4748
  153. package/Libraries/Renderer/implementations/ReactFabric-prod.js +4947 -4829
  154. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +3998 -3888
  155. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +5005 -4948
  156. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +2744 -2652
  157. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +5020 -4933
  158. package/Libraries/Renderer/shims/ReactNativeTypes.js +3 -3
  159. package/Libraries/Settings/Settings.ios.js +1 -0
  160. package/Libraries/Settings/Settings.js +13 -19
  161. package/Libraries/Settings/SettingsFallback.js +33 -0
  162. package/Libraries/StyleSheet/PlatformColorValueTypes.js +15 -0
  163. package/Libraries/StyleSheet/PlatformColorValueTypesIOS.js +6 -0
  164. package/Libraries/StyleSheet/Rect.js +1 -0
  165. package/Libraries/StyleSheet/StyleSheet.js +31 -200
  166. package/Libraries/StyleSheet/StyleSheet.js.flow +188 -0
  167. package/Libraries/StyleSheet/StyleSheetExports.js +210 -0
  168. package/Libraries/StyleSheet/StyleSheetExports.js.flow +112 -0
  169. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +1 -1
  170. package/Libraries/StyleSheet/StyleSheetTypes.js +130 -52
  171. package/Libraries/StyleSheet/flattenStyle.js +14 -4
  172. package/Libraries/StyleSheet/private/_TransformStyle.js +49 -21
  173. package/Libraries/StyleSheet/processBackgroundImage.js +670 -214
  174. package/Libraries/Text/Text.d.ts +2 -5
  175. package/Libraries/Text/Text.js +3 -3
  176. package/Libraries/Text/Text.windows.js +3 -3
  177. package/Libraries/Text/TextNativeComponent.js +0 -4
  178. package/Libraries/Text/TextProps.js +5 -33
  179. package/Libraries/Text/TextProps.windows.js +5 -32
  180. package/Libraries/Types/CodegenTypesNamespace.d.ts +45 -0
  181. package/Libraries/{Blob/__mocks__/BlobModule.js → Types/CodegenTypesNamespace.js} +4 -6
  182. package/Libraries/Types/CoreEventTypes.d.ts +6 -1
  183. package/Libraries/Types/CoreEventTypes.js +1 -1
  184. package/Libraries/Types/CoreEventTypes.windows.js +1 -1
  185. package/Libraries/Utilities/Appearance.js +2 -0
  186. package/Libraries/Utilities/BackHandler.js +17 -0
  187. package/Libraries/Utilities/DeviceInfo.js +2 -0
  188. package/Libraries/Utilities/Dimensions.js +1 -1
  189. package/Libraries/Utilities/Platform.js +17 -0
  190. package/Libraries/Utilities/PlatformTypes.js +11 -3
  191. package/Libraries/Utilities/ReactNativeTestTools.js +2 -2
  192. package/Libraries/Utilities/codegenNativeCommands.d.ts +18 -0
  193. package/Libraries/Utilities/codegenNativeComponent.d.ts +26 -0
  194. package/Libraries/WebSocket/WebSocket.js +313 -8
  195. package/Libraries/vendor/core/ErrorUtils.js +28 -2
  196. package/Libraries/vendor/emitter/EventEmitter.js +6 -2
  197. package/Microsoft.ReactNative/CompositionSwitcher.idl +3 -0
  198. package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.cpp +0 -6
  199. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.cpp +248 -6
  200. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +55 -160
  201. package/Microsoft.ReactNative/Fabric/Composition/CompositionTextRangeProvider.cpp +30 -9
  202. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +36 -0
  203. package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +36 -33
  204. package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.cpp +22 -0
  205. package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.h +3 -0
  206. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +46 -0
  207. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.h +4 -1
  208. package/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.cpp +11 -0
  209. package/Microsoft.ReactNative/Fabric/Composition/TextDrawing.cpp +37 -5
  210. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +177 -25
  211. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.h +4 -0
  212. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputEventEmitter.cpp +29 -0
  213. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputEventEmitter.h +2 -0
  214. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.cpp +17 -34
  215. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +225 -0
  216. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +23 -0
  217. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +9 -3
  218. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +2 -0
  219. package/Microsoft.ReactNative/Fabric/ImageManager.cpp +1 -1
  220. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewEventEmitter.cpp +16 -0
  221. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewEventEmitter.h +1 -0
  222. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.cpp +9 -0
  223. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.h +1 -0
  224. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewTraitsInitializer.h +4 -0
  225. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/PlatformColorUtils.cpp +64 -0
  226. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/PlatformColorUtils.h +11 -0
  227. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/WindowsTextLayoutManager.cpp +36 -96
  228. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/WindowsTextLayoutManager.h +1 -1
  229. package/Microsoft.ReactNative/Modules/AccessibilityInfoModule.cpp +29 -0
  230. package/Microsoft.ReactNative/Modules/SampleTurboModule.cpp +4 -0
  231. package/Microsoft.ReactNative/Modules/SampleTurboModule.h +3 -0
  232. package/Microsoft.ReactNative/TurboModulesProvider.h +1 -1
  233. package/Microsoft.ReactNative/Utils/ThemeUtils.cpp +49 -0
  234. package/Microsoft.ReactNative/Utils/ThemeUtils.h +31 -0
  235. package/Microsoft.ReactNative.Cxx/JSI/JsiApiContext.h +1 -1
  236. package/Microsoft.ReactNative.Cxx/JSI/LongLivedJsiValue.h +1 -1
  237. package/PropertySheets/Generated/PackageVersion.g.props +4 -4
  238. package/PropertySheets/JSEngine.props +1 -1
  239. package/PropertySheets/React.Cpp.props +4 -0
  240. package/PropertySheets/Warnings.props +45 -0
  241. package/README.md +6 -2
  242. package/ReactCommon/ReactCommon.vcxproj +9 -4
  243. package/ReactCommon/ReactCommon.vcxproj.filters +6 -0
  244. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/CxxNativeModule.cpp +253 -0
  245. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSExecutor.cpp +5 -2
  246. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/NativeToJsBridge.cpp +4 -8
  247. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/TraceSection.h +184 -0
  248. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.cpp +22 -0
  249. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.h +2 -4
  250. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleWithJSIBindings.cpp +27 -0
  251. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +3 -2
  252. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityPrimitives.h +1 -1
  253. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityProps.cpp +308 -0
  254. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/core/DynamicEventPayload.cpp +42 -0
  255. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/css/CSSTokenizer.h +7 -51
  256. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/ReactInstance.cpp +10 -5
  257. package/Scripts/creaternwapp.cmd +9 -3
  258. package/Scripts/rnw-dependencies.ps1 +16 -3
  259. package/Shared/Shared.vcxitems +3 -2
  260. package/Shared/Shared.vcxitems.filters +2 -1
  261. package/codegen/NativeAnimatedModuleSpec.g.h +2 -0
  262. package/codegen/NativeAnimatedTurboModuleSpec.g.h +2 -0
  263. package/codegen/NativePerformanceSpec.g.h +14 -0
  264. package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +151 -127
  265. package/codegen/NativeSampleTurboModuleSpec.g.h +14 -8
  266. package/codegen/react/components/rnwcore/EventEmitters.cpp +48 -48
  267. package/codegen/rnwcoreJSI-generated.cpp +159 -129
  268. package/codegen/rnwcoreJSI.h +534 -408
  269. package/index.js +51 -331
  270. package/index.windows.js +70 -352
  271. package/interface.js +0 -4
  272. package/jest/resolver.js +31 -0
  273. package/jest/setup.js +6 -2
  274. package/package.json +29 -28
  275. package/src/private/animated/NativeAnimatedHelper.js +21 -8
  276. package/src/private/animated/createAnimatedPropsHook.js +11 -16
  277. package/src/private/animated/createAnimatedPropsMemoHook.js +1 -2
  278. package/src/private/components/{SafeAreaView_INTERNAL_DO_NOT_USE.js → safeareaview/SafeAreaView_INTERNAL_DO_NOT_USE.js} +6 -6
  279. package/src/private/components/{HScrollViewNativeComponents.js → scrollview/HScrollViewNativeComponents.js} +8 -8
  280. package/src/private/components/scrollview/VScrollViewNativeComponents.js +25 -0
  281. package/src/private/{devmenu → devsupport/devmenu}/DevMenu.js +1 -1
  282. package/src/private/{inspector → devsupport/devmenu/elementinspector}/BorderBox.js +3 -3
  283. package/src/private/{inspector → devsupport/devmenu/elementinspector}/BoxInspector.js +6 -5
  284. package/src/private/{inspector → devsupport/devmenu/elementinspector}/ElementBox.js +8 -6
  285. package/src/private/{inspector → devsupport/devmenu/elementinspector}/ElementProperties.js +11 -10
  286. package/src/private/{inspector → devsupport/devmenu/elementinspector}/Inspector.js +14 -12
  287. package/src/private/{inspector → devsupport/devmenu/elementinspector}/InspectorOverlay.js +5 -4
  288. package/src/private/{inspector → devsupport/devmenu/elementinspector}/InspectorPanel.js +9 -8
  289. package/src/private/{inspector → devsupport/devmenu/elementinspector}/NetworkOverlay.js +10 -9
  290. package/src/private/{inspector → devsupport/devmenu/elementinspector}/ReactDevToolsOverlay.js +7 -7
  291. package/src/private/{inspector → devsupport/devmenu/elementinspector}/StyleInspector.js +7 -6
  292. package/src/private/{inspector → devsupport/devmenu/elementinspector}/XHRInterceptor.js +2 -2
  293. package/src/private/{inspector → devsupport/devmenu/elementinspector}/getInspectorDataForViewAtPoint.js +4 -4
  294. package/src/private/{inspector → devsupport/devmenu/elementinspector}/resolveBoxStyle.js +1 -1
  295. package/src/private/{inspector → devsupport/devmenu/perfmonitor}/PerformanceOverlay.js +6 -5
  296. package/src/private/{specs_DEPRECATED/modules → devsupport/devmenu/specs}/NativeDevMenu.js +2 -2
  297. package/src/private/{debugging → devsupport/rndevtools}/ReactDevToolsSettingsManager.android.js +1 -1
  298. package/src/private/{debugging → devsupport/rndevtools}/ReactDevToolsSettingsManager.ios.js +1 -1
  299. package/src/private/{debugging → devsupport/rndevtools}/ReactDevToolsSettingsManager.windows.js +1 -1
  300. package/src/private/{debugging → devsupport/rndevtools}/setUpFuseboxReactDevToolsDispatcher.js +1 -1
  301. package/src/private/{fusebox → devsupport/rndevtools}/specs/NativeReactDevToolsRuntimeSettingsModule.js +2 -2
  302. package/src/private/{specs_DEPRECATED/modules → devsupport/rndevtools/specs}/NativeReactDevToolsSettingsManager.js +2 -2
  303. package/src/private/featureflags/ReactNativeFeatureFlags.js +82 -80
  304. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +12 -1
  305. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +17 -13
  306. package/src/private/renderer/errorhandling/ErrorHandlers.js +2 -2
  307. package/src/private/specs_DEPRECATED/modules/NativeAnimatedModule.js +1 -1
  308. package/src/private/specs_DEPRECATED/modules/NativeAnimatedTurboModule.js +1 -1
  309. package/src/private/specs_DEPRECATED/modules/NativeSampleTurboModule.js +3 -0
  310. package/src/private/styles/composeStyles.js +12 -5
  311. package/src/private/types/HostComponent.js +1 -1
  312. package/src/private/types/HostInstance.js +67 -1
  313. package/src/private/webapis/dom/nodes/ReactNativeElement.js +2 -5
  314. package/src/private/webapis/dom/nodes/ReadOnlyNode.js +5 -18
  315. package/src/private/webapis/dom/nodes/internals/NodeInternals.js +6 -0
  316. package/src/private/webapis/performance/Performance.js +1 -3
  317. package/src/private/webapis/performance/PerformanceEntry.js +6 -1
  318. package/src/private/webapis/performance/internals/RawPerformanceEntry.js +3 -0
  319. package/src/private/webapis/performance/specs/NativePerformance.js +10 -1
  320. package/src/types/globals.d.ts +42 -0
  321. package/stubs/double-conversion/double-conversion.h +3 -1
  322. package/templates/cpp-app/template.config.js +2 -1
  323. package/templates/cpp-app/windows/MyApp/MyApp.vcxproj +4 -0
  324. package/templates/cpp-lib/example/metro.config.js +1 -1
  325. package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj +4 -0
  326. package/templates/old/generateWrapper.js +1 -1
  327. package/templates/old/uwp-cpp-app/template.config.js +1 -1
  328. package/types/index.d.ts +6 -3
  329. package/types/public/ReactNativeTypes.d.ts +2 -2
  330. package/Libraries/BatchedBridge/__mocks__/MessageQueueTestConfig.js +0 -38
  331. package/Libraries/BatchedBridge/__mocks__/MessageQueueTestModule.js +0 -22
  332. package/Libraries/Blob/FileReader_new.js +0 -231
  333. package/Libraries/Blob/FileReader_old.js +0 -186
  334. package/Libraries/Blob/__mocks__/FileReaderModule.js +0 -20
  335. package/Libraries/Components/RefreshControl/__mocks__/RefreshControlMock.js +0 -32
  336. package/Libraries/Core/__mocks__/ErrorUtils.js +0 -33
  337. package/Libraries/Core/__mocks__/NativeExceptionsManager.js +0 -19
  338. package/Libraries/EventEmitter/__mocks__/NativeEventEmitter.js +0 -49
  339. package/Libraries/Events/CustomEvent.js +0 -32
  340. package/Libraries/Events/EventPolyfill.js +0 -239
  341. package/Libraries/Lists/__flowtests__/FlatList-flowtest.js +0 -118
  342. package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +0 -134
  343. package/Libraries/Network/XMLHttpRequest_new.js +0 -794
  344. package/Libraries/Network/XMLHttpRequest_old.js +0 -701
  345. package/Libraries/NewAppScreen/components/DebugInstructions.js +0 -41
  346. package/Libraries/NewAppScreen/components/DebugInstructions.windows.js +0 -30
  347. package/Libraries/NewAppScreen/components/Header.js +0 -77
  348. package/Libraries/NewAppScreen/components/HermesBadge.js +0 -53
  349. package/Libraries/NewAppScreen/components/LearnMoreLinks.js +0 -148
  350. package/Libraries/NewAppScreen/components/ReloadInstructions.js +0 -39
  351. package/Libraries/NewAppScreen/components/ReloadInstructions.windows.js +0 -31
  352. package/Libraries/NewAppScreen/components/logo.png +0 -0
  353. package/Libraries/NewAppScreen/index.js +0 -25
  354. package/Libraries/StyleSheet/__flowtests__/StyleSheet-flowtest.js +0 -58
  355. package/Libraries/Utilities/__mocks__/BackHandler.js +0 -45
  356. package/Libraries/Utilities/__mocks__/GlobalPerformanceLogger.js +0 -16
  357. package/Libraries/Utilities/__mocks__/PixelRatio.js +0 -25
  358. package/Libraries/WebSocket/WebSocketEvent.js +0 -30
  359. package/Libraries/WebSocket/WebSocket_new.js +0 -325
  360. package/Libraries/WebSocket/WebSocket_old.js +0 -297
  361. package/Libraries/WebSocket/__mocks__/event-target-shim.js +0 -27
  362. package/Libraries/__flowtests__/ReactNativeTypes-flowtest.js +0 -30
  363. package/Libraries/vendor/emitter/__flowtests__/EventEmitter-flowtest.js +0 -81
  364. package/jest/__tests__/setup-test.js +0 -18
  365. package/src/private/components/VScrollViewNativeComponents.js +0 -25
  366. package/src/private/utilities/ensureInstance.js +0 -21
  367. package/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js +0 -267
  368. package/types/modules/LaunchScreen.d.ts +0 -18
  369. /package/src/private/{devmenu → devsupport/devmenu}/DevMenu.d.ts +0 -0
  370. /package/src/private/{debugging → devsupport/rndevtools}/FuseboxSessionObserver.js +0 -0
@@ -166,6 +166,24 @@ void UpdateUiaProperty(winrt::IInspectable provider, PROPERTYID propId, bool old
166
166
  UiaRaiseAutomationPropertyChangedEvent(spProviderSimple.get(), propId, CComVariant(oldValue), CComVariant(newValue));
167
167
  }
168
168
 
169
+ void UpdateUiaProperty(winrt::IInspectable provider, PROPERTYID propId, int oldValue, int newValue) noexcept {
170
+ auto spProviderSimple = provider.try_as<IRawElementProviderSimple>();
171
+
172
+ if (spProviderSimple == nullptr || oldValue == newValue || !WasUiaPropertyAdvised(spProviderSimple, propId))
173
+ return;
174
+
175
+ UiaRaiseAutomationPropertyChangedEvent(spProviderSimple.get(), propId, CComVariant(oldValue), CComVariant(newValue));
176
+ }
177
+
178
+ void UpdateUiaProperty(winrt::IInspectable provider, PROPERTYID propId, long oldValue, long newValue) noexcept {
179
+ auto spProviderSimple = provider.try_as<IRawElementProviderSimple>();
180
+
181
+ if (spProviderSimple == nullptr || oldValue == newValue || !WasUiaPropertyAdvised(spProviderSimple, propId))
182
+ return;
183
+
184
+ UiaRaiseAutomationPropertyChangedEvent(spProviderSimple.get(), propId, CComVariant(oldValue), CComVariant(newValue));
185
+ }
186
+
169
187
  void UpdateUiaProperty(
170
188
  winrt::IInspectable provider,
171
189
  PROPERTYID propId,
@@ -190,6 +208,29 @@ void UpdateUiaProperty(
190
208
  UpdateUiaProperty(provider, propId, oldData, newData);
191
209
  }
192
210
 
211
+ void UpdateUiaPropertiesForAnnotation(
212
+ winrt::IInspectable provider,
213
+ const std::optional<facebook::react::AccessibilityAnnotation> &oldAnnotation,
214
+ const std::optional<facebook::react::AccessibilityAnnotation> &newAnnotation) noexcept {
215
+ // if no value fall back to a default value.
216
+ const auto &old_annotation = oldAnnotation.value_or(facebook::react::AccessibilityAnnotation());
217
+ const auto &new_annotation = newAnnotation.value_or(facebook::react::AccessibilityAnnotation());
218
+
219
+ // Update all annotation properties
220
+ UpdateUiaProperty(
221
+ provider,
222
+ UIA_AnnotationAnnotationTypeIdPropertyId,
223
+ GetAnnotationTypeId(old_annotation.typeID),
224
+ GetAnnotationTypeId(new_annotation.typeID));
225
+
226
+ UpdateUiaProperty(
227
+ provider, UIA_AnnotationAnnotationTypeNamePropertyId, old_annotation.typeName, new_annotation.typeName);
228
+
229
+ UpdateUiaProperty(provider, UIA_AnnotationAuthorPropertyId, old_annotation.author, new_annotation.author);
230
+
231
+ UpdateUiaProperty(provider, UIA_AnnotationDateTimePropertyId, old_annotation.dateTime, new_annotation.dateTime);
232
+ }
233
+
193
234
  long GetLiveSetting(const std::string &liveRegion) noexcept {
194
235
  if (liveRegion == "polite") {
195
236
  return LiveSetting::Polite;
@@ -250,6 +291,190 @@ long GetAnnotationTypeId(const std::string &annotationType) noexcept {
250
291
  return AnnotationType_Unknown;
251
292
  }
252
293
 
294
+ long GetControlTypeFromString(const std::string &role) noexcept {
295
+ if (role == "adjustable") {
296
+ return UIA_SliderControlTypeId;
297
+ } else if (role == "group" || role == "search" || role == "radiogroup" || role == "timer" || role.empty()) {
298
+ return UIA_GroupControlTypeId;
299
+ } else if (role == "button" || role == "imagebutton" || role == "switch" || role == "togglebutton") {
300
+ return UIA_ButtonControlTypeId;
301
+ } else if (role == "checkbox") {
302
+ return UIA_CheckBoxControlTypeId;
303
+ } else if (role == "combobox") {
304
+ return UIA_ComboBoxControlTypeId;
305
+ } else if (role == "alert" || role == "header" || role == "summary" || role == "text") {
306
+ return UIA_TextControlTypeId;
307
+ } else if (role == "image") {
308
+ return UIA_ImageControlTypeId;
309
+ } else if (role == "keyboardkey") {
310
+ return UIA_CustomControlTypeId;
311
+ } else if (role == "link") {
312
+ return UIA_HyperlinkControlTypeId;
313
+ }
314
+ // list and listitem were added by RNW to better support UIA Control Types
315
+ else if (role == "list") {
316
+ return UIA_ListControlTypeId;
317
+ } else if (role == "listitem") {
318
+ return UIA_ListItemControlTypeId;
319
+ } else if (role == "menu") {
320
+ return UIA_MenuControlTypeId;
321
+ } else if (role == "menubar") {
322
+ return UIA_MenuBarControlTypeId;
323
+ } else if (role == "menuitem") {
324
+ return UIA_MenuItemControlTypeId;
325
+ }
326
+ // If role is "none", remove the element from the control tree
327
+ // and expose it as a plain element would in the raw tree.
328
+ else if (role == "none") {
329
+ return UIA_GroupControlTypeId;
330
+ } else if (role == "progressbar") {
331
+ return UIA_ProgressBarControlTypeId;
332
+ } else if (role == "radio") {
333
+ return UIA_RadioButtonControlTypeId;
334
+ } else if (role == "scrollbar") {
335
+ return UIA_ScrollBarControlTypeId;
336
+ } else if (role == "spinbutton") {
337
+ return UIA_SpinnerControlTypeId;
338
+ } else if (role == "splitbutton") {
339
+ return UIA_SplitButtonControlTypeId;
340
+ } else if (role == "tab") {
341
+ return UIA_TabItemControlTypeId;
342
+ } else if (role == "tablist") {
343
+ return UIA_TabControlTypeId;
344
+ } else if (role == "textinput" || role == "searchbox") {
345
+ return UIA_EditControlTypeId;
346
+ } else if (role == "toolbar") {
347
+ return UIA_ToolBarControlTypeId;
348
+ } else if (role == "tree") {
349
+ return UIA_TreeControlTypeId;
350
+ } else if (role == "treeitem") {
351
+ return UIA_TreeItemControlTypeId;
352
+ } else if (role == "pane") {
353
+ return UIA_PaneControlTypeId;
354
+ }
355
+ assert(false);
356
+ return UIA_GroupControlTypeId;
357
+ }
358
+
359
+ long GetControlTypeFromRole(const facebook::react::Role &role) noexcept {
360
+ switch (role) {
361
+ case facebook::react::Role::Alert:
362
+ return UIA_TextControlTypeId;
363
+ case facebook::react::Role::Application:
364
+ return UIA_WindowControlTypeId;
365
+ case facebook::react::Role::Button:
366
+ return UIA_ButtonControlTypeId;
367
+ case facebook::react::Role::Checkbox:
368
+ return UIA_CheckBoxControlTypeId;
369
+ case facebook::react::Role::Columnheader:
370
+ return UIA_HeaderControlTypeId;
371
+ case facebook::react::Role::Combobox:
372
+ return UIA_ComboBoxControlTypeId;
373
+ case facebook::react::Role::Document:
374
+ return UIA_DocumentControlTypeId;
375
+ case facebook::react::Role::Grid:
376
+ return UIA_GroupControlTypeId;
377
+ case facebook::react::Role::Group:
378
+ return UIA_GroupControlTypeId;
379
+ case facebook::react::Role::Heading:
380
+ return UIA_TextControlTypeId;
381
+ case facebook::react::Role::Img:
382
+ return UIA_ImageControlTypeId;
383
+ case facebook::react::Role::Link:
384
+ return UIA_HyperlinkControlTypeId;
385
+ case facebook::react::Role::List:
386
+ return UIA_ListControlTypeId;
387
+ case facebook::react::Role::Listitem:
388
+ return UIA_ListItemControlTypeId;
389
+ case facebook::react::Role::Menu:
390
+ return UIA_MenuControlTypeId;
391
+ case facebook::react::Role::Menubar:
392
+ return UIA_MenuBarControlTypeId;
393
+ case facebook::react::Role::Menuitem:
394
+ return UIA_MenuItemControlTypeId;
395
+ case facebook::react::Role::None:
396
+ return UIA_GroupControlTypeId;
397
+ case facebook::react::Role::Presentation:
398
+ return UIA_GroupControlTypeId;
399
+ case facebook::react::Role::Progressbar:
400
+ return UIA_ProgressBarControlTypeId;
401
+ case facebook::react::Role::Radio:
402
+ return UIA_RadioButtonControlTypeId;
403
+ case facebook::react::Role::Radiogroup:
404
+ return UIA_GroupControlTypeId;
405
+ case facebook::react::Role::Rowgroup:
406
+ return UIA_GroupControlTypeId;
407
+ case facebook::react::Role::Rowheader:
408
+ return UIA_HeaderControlTypeId;
409
+ case facebook::react::Role::Scrollbar:
410
+ return UIA_ScrollBarControlTypeId;
411
+ case facebook::react::Role::Searchbox:
412
+ return UIA_EditControlTypeId;
413
+ case facebook::react::Role::Separator:
414
+ return UIA_SeparatorControlTypeId;
415
+ case facebook::react::Role::Slider:
416
+ return UIA_SliderControlTypeId;
417
+ case facebook::react::Role::Spinbutton:
418
+ return UIA_SpinnerControlTypeId;
419
+ case facebook::react::Role::Status:
420
+ return UIA_StatusBarControlTypeId;
421
+ case facebook::react::Role::Summary:
422
+ return UIA_GroupControlTypeId;
423
+ case facebook::react::Role::Switch:
424
+ return UIA_ButtonControlTypeId;
425
+ case facebook::react::Role::Tab:
426
+ return UIA_TabItemControlTypeId;
427
+ case facebook::react::Role::Table:
428
+ return UIA_TableControlTypeId;
429
+ case facebook::react::Role::Tablist:
430
+ return UIA_TabControlTypeId;
431
+ case facebook::react::Role::Tabpanel:
432
+ return UIA_TabControlTypeId;
433
+ case facebook::react::Role::Timer:
434
+ return UIA_ButtonControlTypeId;
435
+ case facebook::react::Role::Toolbar:
436
+ return UIA_ToolBarControlTypeId;
437
+ case facebook::react::Role::Tooltip:
438
+ return UIA_ToolTipControlTypeId;
439
+ case facebook::react::Role::Tree:
440
+ return UIA_TreeControlTypeId;
441
+ case facebook::react::Role::Treegrid:
442
+ return UIA_TreeControlTypeId;
443
+ case facebook::react::Role::Treeitem:
444
+ return UIA_TreeItemControlTypeId;
445
+ }
446
+ return UIA_GroupControlTypeId;
447
+ }
448
+
449
+ long GetHeadingLevel(int headingLevel, const std::string &strRole, const facebook::react::Role &role) noexcept {
450
+ if (strRole != "header" && role != facebook::react::Role::Heading) {
451
+ return HeadingLevel_None;
452
+ }
453
+
454
+ switch (headingLevel) {
455
+ case 1:
456
+ return HeadingLevel1;
457
+ case 2:
458
+ return HeadingLevel2;
459
+ case 3:
460
+ return HeadingLevel3;
461
+ case 4:
462
+ return HeadingLevel4;
463
+ case 5:
464
+ return HeadingLevel5;
465
+ case 6:
466
+ return HeadingLevel6;
467
+ case 7:
468
+ return HeadingLevel7;
469
+ case 8:
470
+ return HeadingLevel8;
471
+ case 9:
472
+ return HeadingLevel9;
473
+ default:
474
+ return HeadingLevel_None;
475
+ }
476
+ }
477
+
253
478
  bool accessibilityAnnotationHasValue(
254
479
  const std::optional<facebook::react::AccessibilityAnnotation> &annotation) noexcept {
255
480
  return annotation.has_value() &&
@@ -29,6 +29,18 @@ void UpdateUiaProperty(
29
29
  bool oldValue,
30
30
  bool newValue) noexcept;
31
31
 
32
+ void UpdateUiaProperty(
33
+ winrt::Windows::Foundation::IInspectable provider,
34
+ PROPERTYID propId,
35
+ int oldValue,
36
+ int newValue) noexcept;
37
+
38
+ void UpdateUiaProperty(
39
+ winrt::Windows::Foundation::IInspectable provider,
40
+ PROPERTYID propId,
41
+ long oldValue,
42
+ long newValue) noexcept;
43
+
32
44
  void UpdateUiaProperty(
33
45
  winrt::Windows::Foundation::IInspectable provider,
34
46
  PROPERTYID propId,
@@ -41,10 +53,21 @@ void UpdateUiaProperty(
41
53
  const std::optional<std::string> &oldValue,
42
54
  const std::optional<std::string> &newValue) noexcept;
43
55
 
56
+ void UpdateUiaPropertiesForAnnotation(
57
+ winrt::Windows::Foundation::IInspectable provider,
58
+ const std::optional<facebook::react::AccessibilityAnnotation> &oldAnnotation,
59
+ const std::optional<facebook::react::AccessibilityAnnotation> &newAnnotation) noexcept;
60
+
44
61
  long GetLiveSetting(const std::string &liveRegion) noexcept;
45
62
 
46
63
  long GetAnnotationTypeId(const std::string &annotationType) noexcept;
47
64
 
65
+ long GetControlTypeFromRole(const facebook::react::Role &role) noexcept;
66
+
67
+ long GetControlTypeFromString(const std::string &role) noexcept;
68
+
69
+ long GetHeadingLevel(int headingLevel, const std::string &strRole, const facebook::react::Role &role) noexcept;
70
+
48
71
  bool accessibilityAnnotationHasValue(
49
72
  const std::optional<facebook::react::AccessibilityAnnotation> &annotation) noexcept;
50
73
 
@@ -66,7 +66,8 @@ FabricUIManager::~FabricUIManager() {
66
66
  void FabricUIManager::installFabricUIManager() noexcept {
67
67
  std::lock_guard<std::mutex> schedulerLock(m_schedulerMutex);
68
68
 
69
- facebook::react::ContextContainer::Shared contextContainer = std::make_shared<facebook::react::ContextContainer>();
69
+ std::shared_ptr<const facebook::react::ContextContainer> contextContainer =
70
+ std::make_shared<facebook::react::ContextContainer>();
70
71
 
71
72
  // This allows access to our ReactContext from the contextContainer thats passed around the fabric codebase
72
73
  contextContainer->insert("MSRN.ReactContext", m_context);
@@ -97,8 +98,9 @@ void FabricUIManager::installFabricUIManager() noexcept {
97
98
  };
98
99
 
99
100
  toolbox.contextContainer = contextContainer;
100
- toolbox.componentRegistryFactory = [](facebook::react::EventDispatcher::Weak const &eventDispatcher,
101
- facebook::react::ContextContainer::Shared const &contextContainer)
101
+ toolbox.componentRegistryFactory =
102
+ [](facebook::react::EventDispatcher::Weak const &eventDispatcher,
103
+ std::shared_ptr<const facebook::react::ContextContainer> const &contextContainer)
102
104
  -> facebook::react::ComponentDescriptorRegistry::Shared {
103
105
  auto providerRegistry =
104
106
  WindowsComponentDescriptorRegistry::FromProperties(
@@ -465,6 +467,10 @@ void FabricUIManager::schedulerDidSetIsJSResponder(
465
467
  bool isJSResponder,
466
468
  bool blockNativeResponder) {}
467
469
 
470
+ void FabricUIManager::schedulerShouldSynchronouslyUpdateViewOnUIThread(
471
+ facebook::react::Tag tag,
472
+ const folly::dynamic &props) {}
473
+
468
474
  void FabricUIManager::schedulerDidSendAccessibilityEvent(
469
475
  const facebook::react::ShadowView &shadowView,
470
476
  std::string const &eventType) {
@@ -99,6 +99,8 @@ struct FabricUIManager final : public std::enable_shared_from_this<FabricUIManag
99
99
  facebook::react::ShadowView const &shadowView,
100
100
  bool isJSResponder,
101
101
  bool blockNativeResponder) override;
102
+ virtual void schedulerShouldSynchronouslyUpdateViewOnUIThread(facebook::react::Tag tag, const folly::dynamic &props)
103
+ override;
102
104
  virtual void schedulerDidSendAccessibilityEvent(
103
105
  const facebook::react::ShadowView &shadowView,
104
106
  std::string const &eventType) override;
@@ -9,7 +9,7 @@
9
9
  namespace facebook {
10
10
  namespace react {
11
11
 
12
- ImageManager::ImageManager(ContextContainer::Shared const &contextContainer) {
12
+ ImageManager::ImageManager(std::shared_ptr<const ContextContainer> const &contextContainer) {
13
13
  auto reactContext = *contextContainer->find<winrt::Microsoft::ReactNative::ReactContext>("MSRN.ReactContext");
14
14
  self_ = new Microsoft::ReactNative::WindowsImageManager(reactContext);
15
15
  }
@@ -64,4 +64,20 @@ void HostPlatformViewEventEmitter::onPressIn(GestureResponderEvent event) const
64
64
  });
65
65
  }
66
66
 
67
+ void HostPlatformViewEventEmitter::onPressOut(GestureResponderEvent event) const {
68
+ dispatchEvent("pressOut", [event](jsi::Runtime &runtime) {
69
+ auto payload = jsi::Object(runtime);
70
+ auto nativeEvent = jsi::Object(runtime);
71
+ nativeEvent.setProperty(runtime, "target", static_cast<double>(event.target));
72
+ nativeEvent.setProperty(runtime, "pageX", event.pagePoint.x);
73
+ nativeEvent.setProperty(runtime, "pageY", event.pagePoint.y);
74
+ nativeEvent.setProperty(runtime, "locationX", event.offsetPoint.x);
75
+ nativeEvent.setProperty(runtime, "locationY", event.offsetPoint.y);
76
+ nativeEvent.setProperty(runtime, "timestamp", event.timestamp);
77
+ nativeEvent.setProperty(runtime, "identifier", event.identifier);
78
+ payload.setProperty(runtime, "nativeEvent", nativeEvent);
79
+ return payload;
80
+ });
81
+ }
82
+
67
83
  } // namespace facebook::react
@@ -39,6 +39,7 @@ class HostPlatformViewEventEmitter : public BaseViewEventEmitter {
39
39
  #pragma mark - Touch Events
40
40
 
41
41
  virtual void onPressIn(GestureResponderEvent event) const;
42
+ virtual void onPressOut(GestureResponderEvent event) const;
42
43
  };
43
44
 
44
45
  } // namespace facebook::react
@@ -56,6 +56,14 @@ HostPlatformViewProps::HostPlatformViewProps(
56
56
  ReactNativeFeatureFlags::enableCppPropsIteratorSetter()
57
57
  ? sourceProps.accessibilityAccessKey
58
58
  : convertRawProp(context, rawProps, "accessibilityAccessKey", sourceProps.accessibilityAccessKey, {})),
59
+ accessibilityDescription(
60
+ ReactNativeFeatureFlags::enableCppPropsIteratorSetter() ? sourceProps.accessibilityDescription
61
+ : convertRawProp(
62
+ context,
63
+ rawProps,
64
+ "accessibilityDescription",
65
+ sourceProps.accessibilityDescription,
66
+ {})),
59
67
  accessibilityLiveRegion(
60
68
  ReactNativeFeatureFlags::enableCppPropsIteratorSetter() ? sourceProps.accessibilityLiveRegion
61
69
  : convertRawProp(
@@ -104,6 +112,7 @@ void HostPlatformViewProps::setProp(
104
112
  RAW_SET_PROP_SWITCH_CASE_BASIC(accessibilityLevel);
105
113
  RAW_SET_PROP_SWITCH_CASE_BASIC(accessibilityItemType);
106
114
  RAW_SET_PROP_SWITCH_CASE_BASIC(accessibilityAccessKey);
115
+ RAW_SET_PROP_SWITCH_CASE_BASIC(accessibilityDescription);
107
116
  RAW_SET_PROP_SWITCH_CASE_BASIC(accessibilityLiveRegion);
108
117
  RAW_SET_PROP_SWITCH_CASE_BASIC(keyDownEvents);
109
118
  RAW_SET_PROP_SWITCH_CASE_BASIC(keyUpEvents);
@@ -32,6 +32,7 @@ class HostPlatformViewProps : public BaseViewProps {
32
32
  std::optional<AccessibilityAnnotation> accessibilityAnnotation{};
33
33
  std::optional<std::string> accessibilityItemType{};
34
34
  std::optional<std::string> accessibilityAccessKey{};
35
+ std::optional<std::string> accessibilityDescription{};
35
36
 
36
37
  // std::optional<std::string> overflowAnchor{};
37
38
  std::optional<std::string> tooltip{};
@@ -20,4 +20,8 @@ inline ShadowNodeTraits::Trait extraTraits() {
20
20
  return ShadowNodeTraits::Trait::None;
21
21
  }
22
22
 
23
+ inline bool isKeyboardFocusable(const ViewProps &viewProps) {
24
+ return false;
25
+ }
26
+
23
27
  } // namespace facebook::react::HostPlatformViewTraitsInitializer
@@ -3,11 +3,14 @@
3
3
 
4
4
  #include "PlatformColorUtils.h"
5
5
  #include <UI.Xaml.Media.h>
6
+ #include <Utils/ThemeUtils.h>
6
7
  #include <Utils/ValueUtils.h>
7
8
  #ifndef CORE_ABI
8
9
  #include <XamlUtils.h>
9
10
  #endif // CORE_ABI
11
+ #include <react/renderer/graphics/Color.h>
10
12
  #include <winrt/Windows.UI.ViewManagement.h>
13
+ #include "HostPlatformColor.h"
11
14
 
12
15
  namespace facebook::react {
13
16
 
@@ -142,4 +145,65 @@ winrt::Windows::UI::Color ResolvePlatformColor(const std::vector<std::string> &s
142
145
  return {};
143
146
  }
144
147
 
148
+ SharedColor GetTextInputPlaceholderColor(bool isFocused, const winrt::Windows::UI::Color &backgroundColor) {
149
+ // In high contrast mode, always use system GrayText for accessibility
150
+ auto accessibilitySettings{winrt::Windows::UI::ViewManagement::AccessibilitySettings()};
151
+ if (accessibilitySettings.HighContrast()) {
152
+ auto uiSettings{winrt::Windows::UI::ViewManagement::UISettings()};
153
+ auto grayText = uiSettings.UIElementColor(winrt::Windows::UI::ViewManagement::UIElementType::GrayText);
154
+ return hostPlatformColorFromRGBA(grayText.R, grayText.G, grayText.B, grayText.A);
155
+ }
156
+
157
+ // When no background color provided (transparent), use Windows system default
158
+ if (backgroundColor.A == 0) {
159
+ // Use system WindowText for default placeholder - matches RN Core behavior
160
+ auto uiSettings{winrt::Windows::UI::ViewManagement::UISettings()};
161
+ auto windowText = uiSettings.UIElementColor(winrt::Windows::UI::ViewManagement::UIElementType::WindowText);
162
+ // Make placeholder text lighter (60% opacity)
163
+ return hostPlatformColorFromRGBA(
164
+ windowText.R, windowText.G, windowText.B, static_cast<uint8_t>(windowText.A * 0.6f));
165
+ }
166
+
167
+ // Use ITU-R BT.601 luminance calculation to determine background brightness
168
+ bool isLightBackground = Microsoft::ReactNative::IsColorLight(backgroundColor);
169
+
170
+ // Use Windows 11 design system semantic colors for optimal contrast and consistency
171
+ // Light backgrounds: TextFillColorPrimary (darker) for focus, TextFillColorSecondary for unfocused
172
+ // Dark backgrounds: TextFillColorPrimary (lighter) for focus, TextFillColorSecondary for unfocused
173
+ if (isLightBackground) {
174
+ if (isFocused) {
175
+ auto color = ResolvePlatformColor({"TextFillColorPrimary"});
176
+ return hostPlatformColorFromRGBA(color.R, color.G, color.B, color.A);
177
+ } else {
178
+ auto color = ResolvePlatformColor({"TextFillColorSecondary"});
179
+ return hostPlatformColorFromRGBA(color.R, color.G, color.B, color.A);
180
+ }
181
+ } else {
182
+ if (isFocused) {
183
+ auto color = ResolvePlatformColor({"TextFillColorPrimary"});
184
+ return hostPlatformColorFromRGBA(color.R, color.G, color.B, color.A);
185
+ } else {
186
+ auto color = ResolvePlatformColor({"TextFillColorSecondary"});
187
+ return hostPlatformColorFromRGBA(color.R, color.G, color.B, color.A);
188
+ }
189
+ }
190
+ }
191
+
192
+ SharedColor GetDefaultTextColor() {
193
+ // In high contrast mode, always use system WindowText for accessibility
194
+ auto accessibilitySettings{winrt::Windows::UI::ViewManagement::AccessibilitySettings()};
195
+ if (accessibilitySettings.HighContrast()) {
196
+ auto uiSettings{winrt::Windows::UI::ViewManagement::UISettings()};
197
+ auto windowText = uiSettings.UIElementColor(winrt::Windows::UI::ViewManagement::UIElementType::WindowText);
198
+ return hostPlatformColorFromRGBA(windowText.R, windowText.G, windowText.B, windowText.A);
199
+ }
200
+
201
+ // Use Windows 11 design system semantic color TextFillColorPrimary
202
+ // This automatically adapts to light/dark mode themes:
203
+ // - Light mode: rgba(0, 0, 0, 0.894) - nearly black for good contrast
204
+ // - Dark mode: rgba(255, 255, 255, 1.0) - white for readability
205
+ auto color = ResolvePlatformColor({"TextFillColorPrimary"});
206
+ return hostPlatformColorFromRGBA(color.R, color.G, color.B, color.A);
207
+ }
208
+
145
209
  } // namespace facebook::react
@@ -5,8 +5,19 @@
5
5
 
6
6
  #include <winrt/Windows.UI.h>
7
7
 
8
+ // Forward declaration to avoid circular dependencies
9
+ namespace facebook::react {
10
+ class SharedColor;
11
+ }
12
+
8
13
  namespace facebook::react {
9
14
 
10
15
  winrt::Windows::UI::Color ResolvePlatformColor(const std::vector<std::string> &semanticItems);
11
16
 
17
+ // Get appropriate placeholder text color for TextInput based on focus state and background
18
+ SharedColor GetTextInputPlaceholderColor(bool isFocused, const winrt::Windows::UI::Color &backgroundColor = {});
19
+
20
+ // Get default text foreground color for Text component (theme-aware)
21
+ SharedColor GetDefaultTextColor();
22
+
12
23
  } // namespace facebook::react
@@ -66,12 +66,10 @@ class AttachmentInlineObject : public winrt::implements<AttachmentInlineObject,
66
66
  float m_height;
67
67
  };
68
68
 
69
- TextLayoutManager::TextLayoutManager(const ContextContainer::Shared &contextContainer)
70
- : contextContainer_(contextContainer),
71
- textMeasureCache_(kSimpleThreadSafeCacheSizeCap),
72
- lineMeasureCache_(kSimpleThreadSafeCacheSizeCap) {}
69
+ TextLayoutManager::TextLayoutManager(const std::shared_ptr<const ContextContainer> &contextContainer)
70
+ : contextContainer_(contextContainer), textMeasureCache_(kSimpleThreadSafeCacheSizeCap) {}
73
71
 
74
- WindowsTextLayoutManager::WindowsTextLayoutManager(const ContextContainer::Shared &contextContainer)
72
+ WindowsTextLayoutManager::WindowsTextLayoutManager(const std::shared_ptr<const ContextContainer> &contextContainer)
75
73
  : TextLayoutManager(contextContainer) {}
76
74
 
77
75
  void WindowsTextLayoutManager::GetTextLayout(
@@ -160,7 +158,6 @@ void WindowsTextLayoutManager::GetTextLayout(
160
158
 
161
159
  // Get text with Object Replacement Characters for attachments
162
160
  auto str = GetTransformedText(attributedStringBox);
163
-
164
161
  winrt::check_hresult(Microsoft::ReactNative::DWriteFactory()->CreateTextLayout(
165
162
  str.c_str(), // The string to be laid out and formatted.
166
163
  static_cast<UINT32>(str.size()), // The length of the string.
@@ -170,6 +167,39 @@ void WindowsTextLayoutManager::GetTextLayout(
170
167
  spTextLayout.put() // The IDWriteTextLayout interface pointer.
171
168
  ));
172
169
 
170
+ // Apply max width constraint and ellipsis trimming to ensure consistency with rendering
171
+ DWRITE_TEXT_METRICS metrics;
172
+ winrt::check_hresult(spTextLayout->GetMetrics(&metrics));
173
+
174
+ if (metrics.width > size.width) {
175
+ spTextLayout->SetMaxWidth(size.width);
176
+ }
177
+
178
+ // Apply DWRITE_TRIMMING for ellipsizeMode
179
+ DWRITE_TRIMMING trimming = {};
180
+ winrt::com_ptr<IDWriteInlineObject> ellipsisSign;
181
+
182
+ switch (paragraphAttributes.ellipsizeMode) {
183
+ case facebook::react::EllipsizeMode::Tail:
184
+ trimming.granularity = DWRITE_TRIMMING_GRANULARITY_CHARACTER;
185
+ break;
186
+ case facebook::react::EllipsizeMode::Clip:
187
+ trimming.granularity = DWRITE_TRIMMING_GRANULARITY_NONE;
188
+ break;
189
+ default:
190
+ trimming.granularity = DWRITE_TRIMMING_GRANULARITY_CHARACTER; // Default to tail behavior
191
+ break;
192
+ }
193
+
194
+ // Use DWriteFactory to create the ellipsis trimming sign
195
+ if (trimming.granularity != DWRITE_TRIMMING_GRANULARITY_NONE) {
196
+ auto dwriteFactory = Microsoft::ReactNative::DWriteFactory();
197
+ HRESULT hr = dwriteFactory->CreateEllipsisTrimmingSign(spTextLayout.get(), ellipsisSign.put());
198
+ if (SUCCEEDED(hr)) {
199
+ spTextLayout->SetTrimming(&trimming, ellipsisSign.get());
200
+ }
201
+ }
202
+
173
203
  // Calculate positions for attachments and set inline objects
174
204
  unsigned int position = 0;
175
205
  for (const auto &fragment : fragments) {
@@ -408,96 +438,6 @@ Microsoft::ReactNative::TextTransform ConvertTextTransform(std::optional<TextTra
408
438
  return Microsoft::ReactNative::TextTransform::Undefined;
409
439
  }
410
440
 
411
- LinesMeasurements TextLayoutManager::measureLines(
412
- const AttributedStringBox &attributedStringBox,
413
- const ParagraphAttributes &paragraphAttributes,
414
- const Size &size) const {
415
- LinesMeasurements lineMeasurements{};
416
-
417
- winrt::com_ptr<IDWriteTextLayout> spTextLayout;
418
- TextMeasurement::Attachments attachments;
419
- WindowsTextLayoutManager::GetTextLayout(attributedStringBox, paragraphAttributes, size, spTextLayout, attachments);
420
-
421
- if (spTextLayout) {
422
- std::vector<DWRITE_LINE_METRICS> lineMetrics;
423
- uint32_t actualLineCount;
424
- spTextLayout->GetLineMetrics(nullptr, 0, &actualLineCount);
425
- lineMetrics.resize(static_cast<size_t>(actualLineCount));
426
- winrt::check_hresult(spTextLayout->GetLineMetrics(lineMetrics.data(), actualLineCount, &actualLineCount));
427
- uint32_t startRange = 0;
428
- const auto count = (paragraphAttributes.maximumNumberOfLines > 0)
429
- ? std::min(static_cast<uint32_t>(paragraphAttributes.maximumNumberOfLines), actualLineCount)
430
- : actualLineCount;
431
- for (uint32_t i = 0; i < count; ++i) {
432
- UINT32 actualHitTestCount = 0;
433
- spTextLayout->HitTestTextRange(
434
- startRange,
435
- lineMetrics[i].length,
436
- 0, // x
437
- 0, // y
438
- NULL,
439
- 0, // metrics count
440
- &actualHitTestCount);
441
-
442
- // Allocate enough room to return all hit-test metrics.
443
- std::vector<DWRITE_HIT_TEST_METRICS> hitTestMetrics(actualHitTestCount);
444
- spTextLayout->HitTestTextRange(
445
- startRange,
446
- lineMetrics[i].length,
447
- 0, // x
448
- 0, // y
449
- &hitTestMetrics[0],
450
- static_cast<UINT32>(hitTestMetrics.size()),
451
- &actualHitTestCount);
452
-
453
- float width = 0;
454
- for (auto tm : hitTestMetrics) {
455
- width += tm.width;
456
- }
457
-
458
- std::string str;
459
- const auto &attributedString = attributedStringBox.getValue();
460
- for (const auto &fragment : attributedString.getFragments()) {
461
- str = str +
462
- winrt::to_string(Microsoft::ReactNative::TransformableText::TransformText(
463
- winrt::hstring{Microsoft::Common::Unicode::Utf8ToUtf16(fragment.string)},
464
- ConvertTextTransform(fragment.textAttributes.textTransform)));
465
- }
466
-
467
- lineMeasurements.emplace_back(LineMeasurement(
468
- str.substr(startRange, lineMetrics[i].length),
469
- {{hitTestMetrics[0].left, hitTestMetrics[0].top}, // origin
470
- {width, lineMetrics[i].height}},
471
- 0.0f, // TODO descender
472
- 0.0f, // TODO: capHeight
473
- 0.0f, // TODO ascender
474
- 0.0f // TODO: xHeight
475
- ));
476
-
477
- startRange += lineMetrics[i].length;
478
- }
479
- }
480
-
481
- return lineMeasurements;
482
- }
483
-
484
- Float TextLayoutManager::baseline(
485
- const AttributedStringBox &attributedStringBox,
486
- const ParagraphAttributes &paragraphAttributes,
487
- const Size &size) const {
488
- winrt::com_ptr<IDWriteTextLayout> spTextLayout;
489
- TextMeasurement::Attachments attachments;
490
- WindowsTextLayoutManager::GetTextLayout(attributedStringBox, paragraphAttributes, size, spTextLayout, attachments);
491
- if (!spTextLayout) {
492
- return 0;
493
- }
494
-
495
- DWRITE_TEXT_METRICS metrics;
496
- winrt::check_hresult(spTextLayout->GetMetrics(&metrics));
497
- return metrics.height *
498
- 0.8f; // https://learn.microsoft.com/en-us/windows/win32/api/dwrite/nf-dwrite-idwritetextformat-getlinespacing
499
- }
500
-
501
441
  winrt::hstring WindowsTextLayoutManager::GetTransformedText(const AttributedStringBox &attributedStringBox) {
502
442
  winrt::hstring result{};
503
443
  const auto &attributedString = attributedStringBox.getValue();