react-native-windows 0.81.2 → 0.82.0-preview.2

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 (727) hide show
  1. package/.flowconfig +11 -10
  2. package/Directory.Build.props +3 -3
  3. package/Folly/Folly.vcxproj +1 -3
  4. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +7 -3
  5. package/Libraries/Alert/RCTAlertManager.android.js +4 -2
  6. package/Libraries/Animated/Animated.d.ts +2 -0
  7. package/Libraries/Animated/AnimatedEvent.js +1 -1
  8. package/Libraries/Animated/AnimatedExports.js.flow +1 -0
  9. package/Libraries/Animated/AnimatedImplementation.js +4 -2
  10. package/Libraries/Animated/AnimatedMock.js +1 -1
  11. package/Libraries/Animated/Easing.js +2 -0
  12. package/Libraries/Animated/NativeAnimatedAllowlist.js +1 -0
  13. package/Libraries/Animated/animations/Animation.js +19 -20
  14. package/Libraries/Animated/animations/TimingAnimation.js +2 -0
  15. package/Libraries/Animated/components/AnimatedScrollView.js +3 -2
  16. package/Libraries/Animated/components/AnimatedSectionList.js +1 -1
  17. package/Libraries/Animated/nodes/AnimatedColor.js +9 -9
  18. package/Libraries/Animated/nodes/AnimatedInterpolation.js +4 -4
  19. package/Libraries/Animated/nodes/AnimatedNode.js +14 -7
  20. package/Libraries/Animated/nodes/AnimatedObject.js +7 -7
  21. package/Libraries/Animated/nodes/AnimatedProps.js +32 -32
  22. package/Libraries/Animated/nodes/AnimatedStyle.js +23 -21
  23. package/Libraries/Animated/nodes/AnimatedTransform.js +6 -6
  24. package/Libraries/Animated/nodes/AnimatedValue.js +18 -18
  25. package/Libraries/AppState/AppState.js +8 -4
  26. package/Libraries/BatchedBridge/MessageQueue.js +4 -0
  27. package/Libraries/BatchedBridge/NativeModules.js +1 -1
  28. package/Libraries/Blob/BlobManager.js +1 -1
  29. package/Libraries/Blob/URLSearchParams.js +2 -0
  30. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +2 -2
  31. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js +2 -2
  32. package/Libraries/Components/Button.js +1 -1
  33. package/Libraries/Components/Button.windows.js +1 -1
  34. package/Libraries/Components/Flyout/FlyoutNativeComponent.js +2 -2
  35. package/Libraries/Components/Glyph/GlyphNativeComponent.js +1 -1
  36. package/Libraries/Components/Popup/PopupNativeComponent.js +1 -0
  37. package/Libraries/Components/Pressable/Pressable.d.ts +8 -0
  38. package/Libraries/Components/Pressable/Pressable.js +10 -1
  39. package/Libraries/Components/Pressable/Pressable.windows.js +30 -2
  40. package/Libraries/Components/Pressable/useAndroidRippleForView.js +2 -2
  41. package/Libraries/Components/ScrollView/ScrollView.js +13 -4
  42. package/Libraries/Components/ScrollView/ScrollView.windows.js +14 -5
  43. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +1 -1
  44. package/Libraries/Components/StatusBar/StatusBar.js +2 -2
  45. package/Libraries/Components/Switch/Switch.js +2 -2
  46. package/Libraries/Components/Switch/Switch.windows.js +2 -2
  47. package/Libraries/Components/TextInput/TextInput.flow.js +12 -5
  48. package/Libraries/Components/TextInput/TextInput.flow.windows.js +12 -5
  49. package/Libraries/Components/TextInput/TextInput.js +14 -5
  50. package/Libraries/Components/TextInput/TextInput.windows.js +23 -11
  51. package/Libraries/Components/TextInput/TextInputState.js +1 -1
  52. package/Libraries/Components/TextInput/TextInputState.windows.js +1 -1
  53. package/Libraries/Components/Touchable/TouchableBounce.js +1 -1
  54. package/Libraries/Components/Touchable/TouchableHighlight.js +1 -1
  55. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +1 -1
  56. package/Libraries/Components/Touchable/TouchableOpacity.js +1 -1
  57. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +3 -3
  58. package/Libraries/Components/Touchable/TouchableWithoutFeedback.windows.js +1 -1
  59. package/Libraries/Components/View/View.js +81 -167
  60. package/Libraries/Components/View/View.windows.js +202 -302
  61. package/Libraries/Core/Devtools/loadBundleFromServer.js +1 -1
  62. package/Libraries/Core/Devtools/loadBundleFromServer.windows.js +1 -1
  63. package/Libraries/Core/ExceptionsManager.js +4 -2
  64. package/Libraries/Core/ReactFiberErrorDialog.js +3 -3
  65. package/Libraries/Core/ReactNativeVersion.js +37 -10
  66. package/Libraries/Core/Timers/JSTimers.js +3 -1
  67. package/Libraries/Core/Timers/immediateShim.js +1 -1
  68. package/Libraries/Core/Timers/queueMicrotask.js +1 -0
  69. package/Libraries/Core/setUpPerformance.js +2 -1
  70. package/Libraries/Debugging/DebuggingOverlayRegistry.js +5 -3
  71. package/Libraries/Image/AssetSourceResolver.windows.js +2 -2
  72. package/Libraries/Image/Image.android.js +327 -111
  73. package/Libraries/Image/Image.ios.js +6 -1
  74. package/Libraries/Image/Image.windows.js +28 -61
  75. package/Libraries/Image/ImageSourceUtils.js +8 -2
  76. package/Libraries/Image/resolveAssetSource.js +1 -1
  77. package/Libraries/Image/resolveAssetSource.windows.js +1 -1
  78. package/Libraries/Interaction/InteractionManager.js +118 -167
  79. package/Libraries/Interaction/PanResponder.js +1 -1
  80. package/Libraries/LayoutAnimation/LayoutAnimation.js +2 -0
  81. package/Libraries/Lists/FlatList.js +5 -6
  82. package/Libraries/LogBox/Data/LogBoxData.js +5 -2
  83. package/Libraries/LogBox/Data/parseLogBoxLog.js +1 -1
  84. package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +1 -1
  85. package/Libraries/Modal/Modal.js +3 -3
  86. package/Libraries/Modal/Modal.windows.js +2 -2
  87. package/Libraries/NativeComponent/NativeComponentRegistry.js +1 -1
  88. package/Libraries/NativeComponent/ViewConfig.js +2 -2
  89. package/Libraries/Network/RCTNetworking.android.js +1 -1
  90. package/Libraries/Network/RCTNetworking.ios.js +1 -1
  91. package/Libraries/Network/RCTNetworking.windows.js +1 -1
  92. package/Libraries/Network/XMLHttpRequest.js +20 -5
  93. package/Libraries/Network/convertRequestBody.js +1 -1
  94. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +10 -9
  95. package/Libraries/Pressability/HoverState.js +2 -0
  96. package/Libraries/Pressability/Pressability.js +1 -1
  97. package/Libraries/Pressability/Pressability.windows.js +5 -5
  98. package/Libraries/PushNotificationIOS/PushNotificationIOS.js +2 -2
  99. package/Libraries/ReactNative/AppRegistryImpl.js +4 -2
  100. package/Libraries/ReactNative/PaperUIManager.windows.js +4 -4
  101. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +2 -0
  102. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +3 -3
  103. package/Libraries/ReactNative/RendererImplementation.js +116 -116
  104. package/Libraries/ReactNative/UIManager.js +3 -3
  105. package/Libraries/ReactNative/renderApplication.js +1 -0
  106. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +1 -1
  107. package/Libraries/Renderer/implementations/ReactFabric-dev.js +38 -35
  108. package/Libraries/Renderer/implementations/ReactFabric-prod.js +51 -22
  109. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +54 -24
  110. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +36 -33
  111. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +5 -5
  112. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +5 -5
  113. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +3 -1
  114. package/Libraries/Share/Share.js +4 -0
  115. package/Libraries/StyleSheet/PlatformColorValueTypes.android.js +2 -2
  116. package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +2 -2
  117. package/Libraries/StyleSheet/PlatformColorValueTypes.windows.js +2 -0
  118. package/Libraries/StyleSheet/StyleSheet.d.ts +7 -22
  119. package/Libraries/StyleSheet/StyleSheetExports.js +2 -8
  120. package/Libraries/StyleSheet/StyleSheetExports.js.flow +11 -18
  121. package/Libraries/StyleSheet/flattenStyle.js +2 -2
  122. package/Libraries/StyleSheet/processAspectRatio.js +2 -0
  123. package/Libraries/StyleSheet/processFilter.js +5 -5
  124. package/Libraries/StyleSheet/splitLayoutProps.js +2 -2
  125. package/Libraries/Text/Text.js +534 -234
  126. package/Libraries/Text/Text.windows.js +622 -265
  127. package/Libraries/Text/TextNativeComponent.js +2 -2
  128. package/Libraries/Utilities/Appearance.d.ts +3 -5
  129. package/Libraries/Utilities/Appearance.js +5 -17
  130. package/Libraries/Utilities/HMRClient.js +2 -1
  131. package/Libraries/Utilities/Platform.android.js +3 -3
  132. package/Libraries/Utilities/Platform.d.ts +1 -0
  133. package/Libraries/Utilities/Platform.ios.js +1 -1
  134. package/Libraries/Utilities/Platform.windows.js +3 -3
  135. package/Libraries/Utilities/PlatformTypes.js +1 -1
  136. package/Libraries/Utilities/ReactNativeTestTools.js +12 -0
  137. package/Libraries/Utilities/SceneTracker.js +1 -1
  138. package/Libraries/Utilities/codegenNativeCommands.js +1 -1
  139. package/Libraries/Utilities/codegenNativeComponent.js +1 -1
  140. package/Libraries/Utilities/createPerformanceLogger.js +32 -0
  141. package/Libraries/Utilities/deepFreezeAndThrowOnMutationInDev.js +2 -0
  142. package/Libraries/Utilities/differ/pointsDiffer.js +1 -1
  143. package/Libraries/Utilities/useMergeRefs.js +1 -1
  144. package/Libraries/WebSocket/WebSocketInterceptor.js +2 -0
  145. package/Libraries/promiseRejectionTrackingOptions.js +17 -31
  146. package/Libraries/vendor/emitter/EventEmitter.js +1 -1
  147. package/Microsoft.ReactNative/App.xaml +5 -0
  148. package/Microsoft.ReactNative/Base/CxxReactIncludes.h +0 -3
  149. package/Microsoft.ReactNative/CompositionContext.idl +0 -2
  150. package/Microsoft.ReactNative/Fabric/AbiViewProps.cpp +2 -2
  151. package/Microsoft.ReactNative/Fabric/AbiViewProps.h +0 -2
  152. package/Microsoft.ReactNative/Fabric/ComponentView.cpp +26 -0
  153. package/Microsoft.ReactNative/Fabric/ComponentView.h +2 -0
  154. package/Microsoft.ReactNative/Fabric/Composition/ActivityIndicatorComponentView.cpp +0 -1
  155. package/Microsoft.ReactNative/Fabric/Composition/Composition.Input.cpp +0 -69
  156. package/Microsoft.ReactNative/Fabric/Composition/Composition.Input.h +1 -15
  157. package/Microsoft.ReactNative/Fabric/Composition/CompositionAnnotationProvider.cpp +2 -5
  158. package/Microsoft.ReactNative/Fabric/Composition/CompositionAnnotationProvider.h +1 -4
  159. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.cpp +0 -31
  160. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.h +0 -10
  161. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper_emptyimpl.cpp +0 -4
  162. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +65 -32
  163. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.h +9 -0
  164. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +8 -6
  165. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.h +0 -2
  166. package/Microsoft.ReactNative/Fabric/Composition/CompositionHelpers.h +0 -2
  167. package/Microsoft.ReactNative/Fabric/Composition/CompositionHwndHost.cpp +0 -9
  168. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootAutomationProvider.cpp +2 -11
  169. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootAutomationProvider.h +0 -4
  170. package/Microsoft.ReactNative/Fabric/Composition/CompositionTextProvider.cpp +4 -7
  171. package/Microsoft.ReactNative/Fabric/Composition/CompositionTextProvider.h +1 -5
  172. package/Microsoft.ReactNative/Fabric/Composition/CompositionTextRangeProvider.cpp +68 -53
  173. package/Microsoft.ReactNative/Fabric/Composition/CompositionTextRangeProvider.h +1 -5
  174. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +20 -18
  175. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.h +10 -3
  176. package/Microsoft.ReactNative/Fabric/Composition/ContentIslandComponentView.cpp +30 -9
  177. package/Microsoft.ReactNative/Fabric/Composition/ContentIslandComponentView.h +4 -1
  178. package/Microsoft.ReactNative/Fabric/Composition/DebuggingOverlayComponentView.cpp +3 -2
  179. package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.cpp +0 -2
  180. package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.h +0 -1
  181. package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +559 -4
  182. package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.h +52 -0
  183. package/Microsoft.ReactNative/Fabric/Composition/ReactCompositionViewComponentBuilder.cpp +16 -0
  184. package/Microsoft.ReactNative/Fabric/Composition/ReactCompositionViewComponentBuilder.h +6 -0
  185. package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.cpp +0 -6
  186. package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.h +0 -2
  187. package/Microsoft.ReactNative/Fabric/Composition/RootComponentView.cpp +53 -2
  188. package/Microsoft.ReactNative/Fabric/Composition/RootComponentView.h +8 -1
  189. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +0 -2
  190. package/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.cpp +0 -1
  191. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +5 -2
  192. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.cpp +4 -1
  193. package/Microsoft.ReactNative/Fabric/Composition/Theme.cpp +6 -30
  194. package/Microsoft.ReactNative/Fabric/Composition/Theme.h +1 -3
  195. package/Microsoft.ReactNative/Fabric/Composition/TooltipService.cpp +1 -1
  196. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +36 -14
  197. package/Microsoft.ReactNative/Fabric/Composition/UnimplementedNativeViewComponentView.cpp +0 -1
  198. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +0 -1
  199. package/Microsoft.ReactNative/Fabric/ImageManager.cpp +0 -4
  200. package/Microsoft.ReactNative/Fabric/ReactTaggedView.h +1 -1
  201. package/Microsoft.ReactNative/Fabric/WindowsComponentDescriptorRegistry.cpp +8 -0
  202. package/Microsoft.ReactNative/Fabric/WindowsComponentDescriptorRegistry.h +3 -0
  203. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/PlatformColorUtils.cpp +0 -11
  204. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/WindowsTextLayoutManager.h +2 -1
  205. package/Microsoft.ReactNative/IReactContext.cpp +2 -25
  206. package/Microsoft.ReactNative/IReactContext.h +0 -7
  207. package/Microsoft.ReactNative/IReactContext.idl +4 -29
  208. package/Microsoft.ReactNative/IReactModuleBuilder.cpp +24 -140
  209. package/Microsoft.ReactNative/IReactModuleBuilder.h +0 -11
  210. package/Microsoft.ReactNative/IReactPackageBuilder.idl +1 -16
  211. package/Microsoft.ReactNative/IReactPackageProvider.idl +0 -1
  212. package/Microsoft.ReactNative/IReactViewComponentBuilder.idl +10 -0
  213. package/Microsoft.ReactNative/JsiApi.cpp +4 -3
  214. package/Microsoft.ReactNative/JsiApi.h +2 -3
  215. package/Microsoft.ReactNative/JsiApi.idl +3 -2
  216. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +6 -214
  217. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -252
  218. package/Microsoft.ReactNative/Modules/AccessibilityInfoModule.cpp +0 -37
  219. package/Microsoft.ReactNative/Modules/AlertModule.cpp +2 -140
  220. package/Microsoft.ReactNative/Modules/AlertModule.h +0 -2
  221. package/Microsoft.ReactNative/Modules/Animated/NativeAnimatedNodeManager.cpp +5 -10
  222. package/Microsoft.ReactNative/Modules/Animated/NativeAnimatedNodeManager.h +0 -1
  223. package/Microsoft.ReactNative/Modules/Animated/PropsAnimatedNode.cpp +1 -96
  224. package/Microsoft.ReactNative/Modules/Animated/PropsAnimatedNode.h +0 -14
  225. package/Microsoft.ReactNative/Modules/AppStateModule.cpp +0 -53
  226. package/Microsoft.ReactNative/Modules/AppStateModule.h +0 -5
  227. package/Microsoft.ReactNative/Modules/AppThemeModuleUwp.cpp +5 -14
  228. package/Microsoft.ReactNative/Modules/AppThemeModuleUwp.h +0 -2
  229. package/Microsoft.ReactNative/Modules/AppearanceModule.cpp +1 -9
  230. package/Microsoft.ReactNative/Modules/DevSettingsModule.cpp +0 -4
  231. package/Microsoft.ReactNative/Modules/DevSettingsModule.h +0 -2
  232. package/Microsoft.ReactNative/Modules/DeviceInfoModule.cpp +16 -90
  233. package/Microsoft.ReactNative/Modules/I18nManagerModule.cpp +3 -8
  234. package/Microsoft.ReactNative/Modules/ImageViewManagerModule.cpp +11 -48
  235. package/Microsoft.ReactNative/Modules/LinkingManagerModule.cpp +0 -3
  236. package/Microsoft.ReactNative/Modules/LogBoxModule.cpp +30 -102
  237. package/Microsoft.ReactNative/Modules/LogBoxModule.h +0 -7
  238. package/Microsoft.ReactNative/Modules/Timing.cpp +7 -9
  239. package/Microsoft.ReactNative/Pch/pch.h +0 -28
  240. package/Microsoft.ReactNative/ReactCoreInjection.h +0 -1
  241. package/Microsoft.ReactNative/ReactHost/IReactInstance.h +0 -8
  242. package/Microsoft.ReactNative/ReactHost/MsoReactContext.cpp +0 -15
  243. package/Microsoft.ReactNative/ReactHost/MsoReactContext.h +0 -2
  244. package/Microsoft.ReactNative/ReactHost/React.h +0 -44
  245. package/Microsoft.ReactNative/ReactHost/ReactHost.cpp +10 -47
  246. package/Microsoft.ReactNative/ReactHost/ReactHost.h +1 -1
  247. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +30 -586
  248. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.h +2 -37
  249. package/Microsoft.ReactNative/ReactHost/ReactNativeHeaders.h +0 -13
  250. package/Microsoft.ReactNative/ReactHost/React_Win.h +0 -1
  251. package/Microsoft.ReactNative/ReactInstanceSettings.cpp +0 -8
  252. package/Microsoft.ReactNative/ReactInstanceSettings.h +0 -13
  253. package/Microsoft.ReactNative/ReactInstanceSettings.idl +7 -23
  254. package/Microsoft.ReactNative/ReactNativeHost.cpp +10 -35
  255. package/Microsoft.ReactNative/ReactNativeHost.h +0 -1
  256. package/Microsoft.ReactNative/ReactNativeIsland.idl +0 -4
  257. package/Microsoft.ReactNative/ReactPackageBuilder.cpp +9 -36
  258. package/Microsoft.ReactNative/ReactPackageBuilder.h +4 -38
  259. package/Microsoft.ReactNative/RedBox.cpp +9 -362
  260. package/Microsoft.ReactNative/Theme.idl +0 -2
  261. package/Microsoft.ReactNative/Timer.cpp +3 -2
  262. package/Microsoft.ReactNative/Utils/Helpers.cpp +0 -47
  263. package/Microsoft.ReactNative/Utils/Helpers.h +0 -5
  264. package/Microsoft.ReactNative/Utils/IcuUtils.cpp +84 -0
  265. package/Microsoft.ReactNative/Utils/IcuUtils.h +42 -0
  266. package/Microsoft.ReactNative/Utils/KeyboardUtils.cpp +0 -11
  267. package/Microsoft.ReactNative/Utils/ThemeUtils.cpp +0 -4
  268. package/Microsoft.ReactNative/Utils/ThemeUtils.h +1 -5
  269. package/Microsoft.ReactNative/Utils/UwpPreparedScriptStore.h +0 -2
  270. package/Microsoft.ReactNative/Utils/ValueUtils.cpp +0 -245
  271. package/Microsoft.ReactNative/Utils/ValueUtils.h +0 -23
  272. package/Microsoft.ReactNative/ViewProps.idl +0 -2
  273. package/Microsoft.ReactNative/Views/DevMenu.cpp +2 -278
  274. package/Microsoft.ReactNative/Views/DevMenu.h +0 -5
  275. package/Microsoft.ReactNative/XamlApplication.cpp +71 -0
  276. package/Microsoft.ReactNative/XamlApplication.h +47 -0
  277. package/Microsoft.ReactNative/XamlApplication.idl +19 -0
  278. package/Microsoft.ReactNative/XamlUIService.cpp +0 -54
  279. package/Microsoft.ReactNative/XamlUIService.h +0 -12
  280. package/Microsoft.ReactNative/XamlUIService.idl +0 -12
  281. package/Microsoft.ReactNative.Cxx/CppWinRTIncludes.h +0 -19
  282. package/Microsoft.ReactNative.Cxx/DesktopWindowBridge.h +1 -1
  283. package/Microsoft.ReactNative.Cxx/JSI/decorator.h +191 -114
  284. package/Microsoft.ReactNative.Cxx/JSI/instrumentation.h +5 -0
  285. package/Microsoft.ReactNative.Cxx/JSI/jsi-inl.h +37 -0
  286. package/Microsoft.ReactNative.Cxx/JSI/jsi.cpp +68 -0
  287. package/Microsoft.ReactNative.Cxx/JSI/jsi.h +77 -11
  288. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +2 -2
  289. package/Microsoft.ReactNative.Cxx/NamespaceRedirect.h +0 -5
  290. package/Microsoft.ReactNative.Cxx/NodeApiJsiRuntime.cpp +93 -1
  291. package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModule.cpp +4 -3
  292. package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModule.h +2 -2
  293. package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModuleUtils.cpp +2 -55
  294. package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModuleUtils.h +4 -8
  295. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Class.h +5 -0
  296. package/Microsoft.ReactNative.Cxx/ReactCommon/react/timing/primitives.h +32 -4
  297. package/Microsoft.ReactNative.Cxx/ReactContext.h +0 -13
  298. package/Microsoft.ReactNative.Cxx/StructInfo.h +8 -1
  299. package/Microsoft.ReactNative.Cxx/UI.Composition.Effects.h +0 -4
  300. package/Microsoft.ReactNative.Cxx/UI.Composition.h +0 -4
  301. package/Microsoft.ReactNative.Cxx/UI.Input.h +0 -4
  302. package/Microsoft.ReactNative.Cxx/UI.Popups.h +0 -4
  303. package/Microsoft.ReactNative.Cxx/UI.Text.h +0 -4
  304. package/Microsoft.ReactNative.Cxx/XamlUtils.h +0 -33
  305. package/Microsoft.ReactNative.Managed/JSValueReader.cs +0 -4
  306. package/Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj +0 -3
  307. package/Microsoft.ReactNative.Managed/ReactContext.cs +0 -5
  308. package/Microsoft.ReactNative.Managed/ReactContextGenerator.cs +0 -4
  309. package/Microsoft.ReactNative.Managed/ReactPackageBuilderExtensions.cs +0 -25
  310. package/Microsoft.ReactNative.Managed/ReactSettingsSnapshot.cs +0 -4
  311. package/Microsoft.ReactNative.Managed/ReflectionReactPackageProvider.cs +1 -2
  312. package/Microsoft.ReactNative.Managed.CodeGen/CodeAnalyzer.cs +0 -10
  313. package/Microsoft.ReactNative.Managed.CodeGen/CodeGenerator.ViewManager.cs +0 -36
  314. package/Microsoft.ReactNative.Managed.CodeGen/CodeGenerator.cs +0 -6
  315. package/Microsoft.ReactNative.Managed.CodeGen/Model/ReactAssembly.cs +0 -2
  316. package/Microsoft.ReactNative.Managed.CodeGen/Model/ReactTypes.cs +0 -2
  317. package/Microsoft.ReactNative.Managed.CodeGen/ReactNativeNames.cs +0 -2
  318. package/Mso/src/dispatchQueue/queueService.cpp +3 -1
  319. package/Mso/src/dispatchQueue/uiScheduler_winrt.cpp +2 -10
  320. package/PropertySheets/Bundle.Common.targets +1 -1
  321. package/PropertySheets/Bundle.props +3 -4
  322. package/PropertySheets/External/Microsoft.ReactNative.Common.props +0 -1
  323. package/PropertySheets/External/Microsoft.ReactNative.Uwp.CSharpApp.targets +1 -1
  324. package/PropertySheets/External/Microsoft.ReactNative.Uwp.CppApp.targets +1 -1
  325. package/PropertySheets/Generated/PackageVersion.g.props +4 -4
  326. package/PropertySheets/JSEngine.props +1 -1
  327. package/PropertySheets/NuGet.LockFile.props +0 -8
  328. package/PropertySheets/OutputMSBuildProperties.targets +0 -1
  329. package/PropertySheets/React.Cpp.props +3 -5
  330. package/PropertySheets/Warnings.props +1 -2
  331. package/PropertySheets/WinUI.props +3 -3
  332. package/README.md +1 -5
  333. package/ReactCommon/ReactCommon.vcxproj +12 -31
  334. package/ReactCommon/ReactCommon.vcxproj.filters +0 -3
  335. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/CxxNativeModule.cpp +3 -2
  336. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/NativeToJsBridge.cpp +5 -2
  337. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/TraceSection.h +20 -4
  338. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +113 -1
  339. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.cpp +14 -6
  340. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/Utf8.h +1 -0
  341. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/tracing/RuntimeSamplingProfileTraceEventSerializer.cpp +351 -0
  342. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.h +2 -2
  343. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/dom/NativeDOM.cpp +42 -36
  344. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/dom/NativeDOM.h +15 -3
  345. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +1 -1
  346. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/image/conversions.h +174 -0
  347. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/text/BaseParagraphProps.cpp +174 -0
  348. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/text/BaseParagraphProps.h +69 -0
  349. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/text/ParagraphShadowNode.cpp +1 -0
  350. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityPrimitives.h +26 -3
  351. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/conversions.h +1 -1
  352. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/core/ShadowNode.cpp +1 -1
  353. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/imagemanager/primitives.h +189 -0
  354. package/ReactCommon/TEMP_UntilReactCommonUpdate/reactperflogger/reactperflogger/ReactPerfettoLogger.cpp +27 -8
  355. package/ReactCommon/cgmanifest.json +1 -1
  356. package/Scripts/Microsoft.ReactNative.nuspec +15 -33
  357. package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +23 -23
  358. package/Scripts/OfficeReact.Win32.nuspec +0 -3
  359. package/Scripts/creaternwapp.cmd +1 -1
  360. package/Shared/DevServerHelper.h +17 -21
  361. package/Shared/DevSettings.h +1 -25
  362. package/Shared/DevSupportManager.cpp +0 -50
  363. package/Shared/DevSupportManager.h +0 -4
  364. package/Shared/Hermes/HermesRuntimeTargetDelegate.cpp +5 -1
  365. package/Shared/HermesRuntimeHolder.cpp +0 -31
  366. package/Shared/HermesRuntimeHolder.h +0 -14
  367. package/Shared/IDevSupportManager.h +0 -6
  368. package/Shared/InstanceManager.cpp +0 -97
  369. package/Shared/InstanceManager.h +0 -53
  370. package/Shared/JSI/ScriptStore.h +1 -1
  371. package/Shared/Logging.cpp +1 -12
  372. package/Shared/Modules/CxxModuleUtilities.cpp +0 -9
  373. package/Shared/Modules/CxxModuleUtilities.h +0 -8
  374. package/Shared/Networking/OriginPolicyHttpFilter.cpp +9 -1
  375. package/Shared/OInstance.cpp +144 -424
  376. package/Shared/OInstance.h +0 -81
  377. package/Shared/Shared.vcxitems +83 -203
  378. package/Shared/Shared.vcxitems.filters +8 -67
  379. package/Shared/Threading/MessageQueueThreadFactory.cpp +0 -6
  380. package/Shared/Threading/MessageQueueThreadFactory.h +0 -4
  381. package/Shared/TurboModuleManager.cpp +0 -4
  382. package/Shared/Utils.cpp +26 -0
  383. package/Shared/Utils.h +3 -0
  384. package/codegen/NativeDOMSpec.g.h +41 -35
  385. package/codegen/NativeIntersectionObserverSpec.g.h +9 -21
  386. package/codegen/NativePerformanceSpec.g.h +47 -35
  387. package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +177 -129
  388. package/codegen/react/components/rnwcore/ActivityIndicatorView.g.h +14 -0
  389. package/codegen/react/components/rnwcore/AndroidDrawerLayout.g.h +14 -0
  390. package/codegen/react/components/rnwcore/AndroidHorizontalScrollContentView.g.h +14 -0
  391. package/codegen/react/components/rnwcore/AndroidProgressBar.g.h +14 -0
  392. package/codegen/react/components/rnwcore/AndroidSwipeRefreshLayout.g.h +14 -0
  393. package/codegen/react/components/rnwcore/AndroidSwitch.g.h +14 -0
  394. package/codegen/react/components/rnwcore/DebuggingOverlay.g.h +14 -0
  395. package/codegen/react/components/rnwcore/EventEmitters.cpp +25 -0
  396. package/codegen/react/components/rnwcore/EventEmitters.h +25 -0
  397. package/codegen/react/components/rnwcore/InputAccessory.g.h +14 -0
  398. package/codegen/react/components/rnwcore/ModalHostView.g.h +14 -0
  399. package/codegen/react/components/rnwcore/Props.cpp +41 -2
  400. package/codegen/react/components/rnwcore/Props.h +51 -2
  401. package/codegen/react/components/rnwcore/PullToRefreshView.g.h +14 -0
  402. package/codegen/react/components/rnwcore/SafeAreaView.g.h +14 -0
  403. package/codegen/react/components/rnwcore/Switch.g.h +14 -0
  404. package/codegen/react/components/rnwcore/UnimplementedNativeView.g.h +14 -0
  405. package/codegen/react/components/rnwcore/VirtualView.g.h +18 -0
  406. package/codegen/react/components/rnwcore/VirtualViewExperimental.g.h +240 -0
  407. package/codegen/rnwcoreJSI-generated.cpp +522 -467
  408. package/codegen/rnwcoreJSI.h +148 -67
  409. package/fmt/cgmanifest.json +1 -1
  410. package/fmt/fmt.vcxproj +0 -8
  411. package/index.js +8 -2
  412. package/index.windows.js +8 -2
  413. package/jest/local-setup.js +2 -2
  414. package/jest/mock.js +1 -1
  415. package/jest/mockComponent.js +9 -9
  416. package/jest/mockNativeComponent.js +3 -2
  417. package/jest/mocks/Modal.js +1 -1
  418. package/jest/mocks/ScrollView.js +1 -1
  419. package/jest/mocks/ViewNativeComponent.js +1 -1
  420. package/jest/setup.js +23 -12
  421. package/just-task.js +14 -0
  422. package/package.json +30 -31
  423. package/src/private/animated/NativeAnimatedHelper.js +16 -5
  424. package/src/private/animated/createAnimatedPropsHook.js +11 -60
  425. package/src/private/animated/createAnimatedPropsMemoHook.js +8 -54
  426. package/src/private/components/virtualview/VirtualView.js +43 -12
  427. package/src/private/components/virtualview/VirtualViewExperimentalNativeComponent.js +93 -0
  428. package/src/private/components/virtualview/VirtualViewNativeComponent.js +6 -0
  429. package/src/private/devsupport/devmenu/elementinspector/Inspector.js +2 -2
  430. package/src/private/devsupport/devmenu/elementinspector/ReactDevToolsOverlay.js +2 -2
  431. package/src/private/featureflags/ReactNativeFeatureFlags.js +80 -52
  432. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +23 -4
  433. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +14 -6
  434. package/src/private/renderer/errorhandling/ErrorHandlers.js +3 -3
  435. package/src/private/specs_DEPRECATED/components/SwitchNativeComponent.js +0 -1
  436. package/src/private/types/HostInstance.js +4 -1
  437. package/src/private/webapis/dom/nodes/ReactNativeDocument.js +22 -2
  438. package/src/private/webapis/dom/nodes/ReactNativeElement.js +1 -1
  439. package/src/private/webapis/dom/nodes/ReadOnlyElement.js +5 -3
  440. package/src/private/webapis/dom/nodes/ReadOnlyNode.js +16 -13
  441. package/src/private/webapis/dom/nodes/internals/NodeInternals.js +45 -22
  442. package/src/private/webapis/dom/nodes/internals/ReactNativeDocumentInstanceHandle.js +1 -1
  443. package/src/private/webapis/dom/nodes/specs/NativeDOM.js +26 -192
  444. package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +15 -12
  445. package/src/private/webapis/dom/oldstylecollections/NodeList.js +14 -11
  446. package/src/private/webapis/geometry/DOMRectList.js +2 -2
  447. package/src/private/webapis/intersectionobserver/internals/IntersectionObserverManager.js +19 -74
  448. package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +0 -4
  449. package/src/private/webapis/mutationobserver/internals/MutationObserverManager.js +1 -1
  450. package/src/private/webapis/performance/EventTiming.js +6 -10
  451. package/src/private/webapis/performance/Performance.js +309 -164
  452. package/src/private/webapis/performance/PerformanceEntry.js +20 -16
  453. package/src/private/webapis/performance/PerformanceObserver.js +8 -29
  454. package/src/private/webapis/performance/UserTiming.js +71 -18
  455. package/src/private/webapis/performance/UserTimingExtensibility.js.flow +38 -0
  456. package/src/private/webapis/performance/internals/Utilities.js +9 -0
  457. package/src/private/webapis/performance/specs/NativePerformance.js +21 -23
  458. package/src/private/webapis/structuredClone/structuredClone.js +10 -10
  459. package/stubs/double-conversion/README.md +1 -1
  460. package/template/cpp-lib/proj/MyLib.sln +0 -5
  461. package/template/cpp-lib/src/pch.h +0 -5
  462. package/template/cs-lib/proj/MyLib.sln +0 -5
  463. package/template/metro.config.js +1 -0
  464. package/templates/cpp-app/metro.config.js +2 -1
  465. package/templates/cpp-app/windows/MyApp.sln +0 -5
  466. package/templates/cpp-lib/example/metro.config.js +3 -4
  467. package/templates/cpp-lib/windows/MyLib.sln +0 -5
  468. package/Chakra/Chakra.vcxitems +0 -32
  469. package/Chakra/Chakra.vcxitems.filters +0 -54
  470. package/Chakra/ChakraHelpers.cpp +0 -468
  471. package/Chakra/ChakraHelpers.h +0 -146
  472. package/Chakra/ChakraInstanceArgs.h +0 -52
  473. package/Chakra/ChakraPlatform.cpp +0 -42
  474. package/Chakra/ChakraPlatform.h +0 -51
  475. package/Chakra/ChakraTracing.cpp +0 -275
  476. package/Chakra/ChakraTracing.h +0 -11
  477. package/Chakra/ChakraUtils.cpp +0 -190
  478. package/Chakra/ChakraUtils.h +0 -72
  479. package/Chakra/ChakraValue.cpp +0 -257
  480. package/Chakra/ChakraValue.h +0 -308
  481. package/Chakra/Utf8DebugExtensions.cpp +0 -62
  482. package/Chakra/Utf8DebugExtensions.h +0 -29
  483. package/Libraries/Interaction/InteractionManagerStub.js +0 -184
  484. package/Libraries/Interaction/TaskQueue.js +0 -183
  485. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +0 -31
  486. package/Microsoft.ReactNative/ABICxxModule.cpp +0 -51
  487. package/Microsoft.ReactNative/ABICxxModule.h +0 -38
  488. package/Microsoft.ReactNative/ABIViewManager.cpp +0 -263
  489. package/Microsoft.ReactNative/ABIViewManager.h +0 -100
  490. package/Microsoft.ReactNative/Base/CoreUIManagers.cpp +0 -55
  491. package/Microsoft.ReactNative/DevMenuControl.cpp +0 -14
  492. package/Microsoft.ReactNative/DevMenuControl.h +0 -20
  493. package/Microsoft.ReactNative/DevMenuControl.idl +0 -28
  494. package/Microsoft.ReactNative/DevMenuControl.xaml +0 -139
  495. package/Microsoft.ReactNative/GlyphViewManager.cpp +0 -167
  496. package/Microsoft.ReactNative/GlyphViewManager.h +0 -24
  497. package/Microsoft.ReactNative/INativeUIManager.h +0 -75
  498. package/Microsoft.ReactNative/IViewManager.idl +0 -120
  499. package/Microsoft.ReactNative/IViewManagerCore.idl +0 -45
  500. package/Microsoft.ReactNative/LayoutService.cpp +0 -51
  501. package/Microsoft.ReactNative/LayoutService.h +0 -32
  502. package/Microsoft.ReactNative/LayoutService.idl +0 -41
  503. package/Microsoft.ReactNative/Modules/NativeUIManager.cpp +0 -1187
  504. package/Microsoft.ReactNative/Modules/NativeUIManager.h +0 -128
  505. package/Microsoft.ReactNative/Modules/PaperUIManagerModule.cpp +0 -891
  506. package/Microsoft.ReactNative/Modules/PaperUIManagerModule.h +0 -185
  507. package/Microsoft.ReactNative/NativeModulesProvider.cpp +0 -49
  508. package/Microsoft.ReactNative/NativeModulesProvider.h +0 -25
  509. package/Microsoft.ReactNative/ReactApplication.cpp +0 -276
  510. package/Microsoft.ReactNative/ReactApplication.h +0 -156
  511. package/Microsoft.ReactNative/ReactApplication.idl +0 -48
  512. package/Microsoft.ReactNative/ReactHost/ViewManagerProvider.h +0 -19
  513. package/Microsoft.ReactNative/ReactPointerEventArgs.cpp +0 -55
  514. package/Microsoft.ReactNative/ReactPointerEventArgs.h +0 -32
  515. package/Microsoft.ReactNative/ReactPointerEventArgs.idl +0 -79
  516. package/Microsoft.ReactNative/ReactRootView.cpp +0 -592
  517. package/Microsoft.ReactNative/ReactRootView.h +0 -127
  518. package/Microsoft.ReactNative/ReactRootView.idl +0 -40
  519. package/Microsoft.ReactNative/TestHook.cpp +0 -99
  520. package/Microsoft.ReactNative/TestHook.h +0 -15
  521. package/Microsoft.ReactNative/Utils/AccessibilityUtils.cpp +0 -36
  522. package/Microsoft.ReactNative/Utils/AccessibilityUtils.h +0 -15
  523. package/Microsoft.ReactNative/Utils/BatchingEventEmitter.cpp +0 -171
  524. package/Microsoft.ReactNative/Utils/BatchingEventEmitter.h +0 -72
  525. package/Microsoft.ReactNative/Utils/PropertyHandlerUtils.h +0 -87
  526. package/Microsoft.ReactNative/Utils/PropertyUtils.h +0 -568
  527. package/Microsoft.ReactNative/Utils/ResourceBrushUtils.cpp +0 -182
  528. package/Microsoft.ReactNative/Utils/ResourceBrushUtils.h +0 -58
  529. package/Microsoft.ReactNative/Utils/ShadowNodeTypeUtils.h +0 -26
  530. package/Microsoft.ReactNative/Utils/XamlIslandUtils.cpp +0 -93
  531. package/Microsoft.ReactNative/Utils/XamlIslandUtils.h +0 -48
  532. package/Microsoft.ReactNative/ViewManagersProvider.cpp +0 -39
  533. package/Microsoft.ReactNative/ViewManagersProvider.h +0 -27
  534. package/Microsoft.ReactNative/Views/ActivityIndicatorViewManager.cpp +0 -62
  535. package/Microsoft.ReactNative/Views/ActivityIndicatorViewManager.h +0 -29
  536. package/Microsoft.ReactNative/Views/ConfigureBundlerDlg.cpp +0 -186
  537. package/Microsoft.ReactNative/Views/ConfigureBundlerDlg.h +0 -11
  538. package/Microsoft.ReactNative/Views/ControlViewManager.cpp +0 -143
  539. package/Microsoft.ReactNative/Views/ControlViewManager.h +0 -38
  540. package/Microsoft.ReactNative/Views/DebuggingOverlayViewManager.cpp +0 -53
  541. package/Microsoft.ReactNative/Views/DebuggingOverlayViewManager.h +0 -30
  542. package/Microsoft.ReactNative/Views/DynamicAutomationPeer.cpp +0 -586
  543. package/Microsoft.ReactNative/Views/DynamicAutomationPeer.h +0 -104
  544. package/Microsoft.ReactNative/Views/DynamicAutomationProperties.cpp +0 -330
  545. package/Microsoft.ReactNative/Views/DynamicAutomationProperties.h +0 -111
  546. package/Microsoft.ReactNative/Views/DynamicValueProvider.cpp +0 -59
  547. package/Microsoft.ReactNative/Views/DynamicValueProvider.h +0 -32
  548. package/Microsoft.ReactNative/Views/ExpressionAnimationStore.cpp +0 -61
  549. package/Microsoft.ReactNative/Views/ExpressionAnimationStore.h +0 -26
  550. package/Microsoft.ReactNative/Views/FlyoutViewManager.cpp +0 -559
  551. package/Microsoft.ReactNative/Views/FlyoutViewManager.h +0 -34
  552. package/Microsoft.ReactNative/Views/FrameworkElementTransferProperties.cpp +0 -126
  553. package/Microsoft.ReactNative/Views/FrameworkElementTransferProperties.h +0 -23
  554. package/Microsoft.ReactNative/Views/FrameworkElementViewManager.cpp +0 -957
  555. package/Microsoft.ReactNative/Views/FrameworkElementViewManager.h +0 -41
  556. package/Microsoft.ReactNative/Views/IXamlRootView.h +0 -17
  557. package/Microsoft.ReactNative/Views/Image/ImageViewManager.cpp +0 -245
  558. package/Microsoft.ReactNative/Views/Image/ImageViewManager.h +0 -45
  559. package/Microsoft.ReactNative/Views/Image/ReactImage.cpp +0 -469
  560. package/Microsoft.ReactNative/Views/Image/ReactImage.h +0 -80
  561. package/Microsoft.ReactNative/Views/Image/ReactImageBrush.cpp +0 -247
  562. package/Microsoft.ReactNative/Views/Image/ReactImageBrush.h +0 -67
  563. package/Microsoft.ReactNative/Views/KeyboardEventHandler.cpp +0 -261
  564. package/Microsoft.ReactNative/Views/KeyboardEventHandler.h +0 -132
  565. package/Microsoft.ReactNative/Views/PaperShadowNode.cpp +0 -18
  566. package/Microsoft.ReactNative/Views/PaperShadowNode.h +0 -38
  567. package/Microsoft.ReactNative/Views/PopupViewManager.cpp +0 -349
  568. package/Microsoft.ReactNative/Views/PopupViewManager.h +0 -36
  569. package/Microsoft.ReactNative/Views/RawTextViewManager.cpp +0 -69
  570. package/Microsoft.ReactNative/Views/RawTextViewManager.h +0 -46
  571. package/Microsoft.ReactNative/Views/ReactViewInstance.cpp +0 -43
  572. package/Microsoft.ReactNative/Views/ReactViewInstance.h +0 -53
  573. package/Microsoft.ReactNative/Views/RefreshControlManager.cpp +0 -116
  574. package/Microsoft.ReactNative/Views/RefreshControlManager.h +0 -28
  575. package/Microsoft.ReactNative/Views/RootViewManager.cpp +0 -65
  576. package/Microsoft.ReactNative/Views/RootViewManager.h +0 -36
  577. package/Microsoft.ReactNative/Views/SIPEventHandler.cpp +0 -117
  578. package/Microsoft.ReactNative/Views/SIPEventHandler.h +0 -45
  579. package/Microsoft.ReactNative/Views/ScrollContentViewManager.cpp +0 -16
  580. package/Microsoft.ReactNative/Views/ScrollContentViewManager.h +0 -19
  581. package/Microsoft.ReactNative/Views/ScrollViewManager.cpp +0 -540
  582. package/Microsoft.ReactNative/Views/ScrollViewManager.h +0 -42
  583. package/Microsoft.ReactNative/Views/ShadowNodeBase.cpp +0 -228
  584. package/Microsoft.ReactNative/Views/ShadowNodeBase.h +0 -169
  585. package/Microsoft.ReactNative/Views/ShadowNodeRegistry.cpp +0 -68
  586. package/Microsoft.ReactNative/Views/ShadowNodeRegistry.h +0 -40
  587. package/Microsoft.ReactNative/Views/SliderViewManager.cpp +0 -97
  588. package/Microsoft.ReactNative/Views/SliderViewManager.h +0 -32
  589. package/Microsoft.ReactNative/Views/SwitchViewManager.cpp +0 -227
  590. package/Microsoft.ReactNative/Views/SwitchViewManager.h +0 -31
  591. package/Microsoft.ReactNative/Views/Text/TextHighlighterVisitor.cpp +0 -52
  592. package/Microsoft.ReactNative/Views/Text/TextHighlighterVisitor.h +0 -37
  593. package/Microsoft.ReactNative/Views/Text/TextHitTestUtils.cpp +0 -348
  594. package/Microsoft.ReactNative/Views/Text/TextHitTestUtils.h +0 -13
  595. package/Microsoft.ReactNative/Views/Text/TextHitTestVisitor.cpp +0 -76
  596. package/Microsoft.ReactNative/Views/Text/TextHitTestVisitor.h +0 -32
  597. package/Microsoft.ReactNative/Views/Text/TextParentVisitor.cpp +0 -12
  598. package/Microsoft.ReactNative/Views/Text/TextParentVisitor.h +0 -19
  599. package/Microsoft.ReactNative/Views/Text/TextPropertyChangedParentVisitor.cpp +0 -75
  600. package/Microsoft.ReactNative/Views/Text/TextPropertyChangedParentVisitor.h +0 -43
  601. package/Microsoft.ReactNative/Views/Text/TextTransformParentVisitor.cpp +0 -21
  602. package/Microsoft.ReactNative/Views/Text/TextTransformParentVisitor.h +0 -23
  603. package/Microsoft.ReactNative/Views/Text/TextTransformVisitor.cpp +0 -70
  604. package/Microsoft.ReactNative/Views/Text/TextTransformVisitor.h +0 -34
  605. package/Microsoft.ReactNative/Views/Text/TextVisitor.cpp +0 -56
  606. package/Microsoft.ReactNative/Views/Text/TextVisitor.h +0 -34
  607. package/Microsoft.ReactNative/Views/Text/TextVisitorScope.h +0 -35
  608. package/Microsoft.ReactNative/Views/Text/TextVisitors.h +0 -47
  609. package/Microsoft.ReactNative/Views/TextInputViewManager.cpp +0 -1003
  610. package/Microsoft.ReactNative/Views/TextInputViewManager.h +0 -33
  611. package/Microsoft.ReactNative/Views/TextViewManager.cpp +0 -414
  612. package/Microsoft.ReactNative/Views/TextViewManager.h +0 -47
  613. package/Microsoft.ReactNative/Views/TouchEventHandler.cpp +0 -608
  614. package/Microsoft.ReactNative/Views/TouchEventHandler.h +0 -116
  615. package/Microsoft.ReactNative/Views/UnimplementedViewManager.cpp +0 -79
  616. package/Microsoft.ReactNative/Views/UnimplementedViewManager.h +0 -27
  617. package/Microsoft.ReactNative/Views/ViewControl.cpp +0 -43
  618. package/Microsoft.ReactNative/Views/ViewControl.h +0 -32
  619. package/Microsoft.ReactNative/Views/ViewManager.h +0 -33
  620. package/Microsoft.ReactNative/Views/ViewManagerBase.cpp +0 -487
  621. package/Microsoft.ReactNative/Views/ViewManagerBase.h +0 -121
  622. package/Microsoft.ReactNative/Views/ViewPanel.cpp +0 -164
  623. package/Microsoft.ReactNative/Views/ViewPanel.h +0 -82
  624. package/Microsoft.ReactNative/Views/ViewViewManager.cpp +0 -507
  625. package/Microsoft.ReactNative/Views/ViewViewManager.h +0 -52
  626. package/Microsoft.ReactNative/Views/VirtualTextViewManager.cpp +0 -143
  627. package/Microsoft.ReactNative/Views/VirtualTextViewManager.h +0 -57
  628. package/Microsoft.ReactNative/Views/XamlFeatures.cpp +0 -11
  629. package/Microsoft.ReactNative/Views/XamlFeatures.h +0 -11
  630. package/Microsoft.ReactNative/Views/cppwinrt/AccessibilityAction.idl +0 -12
  631. package/Microsoft.ReactNative/Views/cppwinrt/DynamicAutomationPeer.idl +0 -231
  632. package/Microsoft.ReactNative/Views/cppwinrt/ViewPanel.idl +0 -48
  633. package/Microsoft.ReactNative/XamlHelper.cpp +0 -78
  634. package/Microsoft.ReactNative/XamlHelper.h +0 -54
  635. package/Microsoft.ReactNative/XamlHelper.idl +0 -30
  636. package/Microsoft.ReactNative/XamlLoadState.cpp +0 -217
  637. package/Microsoft.ReactNative/XamlLoadState.h +0 -44
  638. package/Microsoft.ReactNative/XamlView.cpp +0 -59
  639. package/Microsoft.ReactNative/XamlView.h +0 -58
  640. package/Microsoft.ReactNative/getLayoutProps.ps1 +0 -5
  641. package/Microsoft.ReactNative.Cxx/UI.Xaml.Automation.Peers.h +0 -10
  642. package/Microsoft.ReactNative.Cxx/UI.Xaml.Automation.h +0 -10
  643. package/Microsoft.ReactNative.Cxx/UI.Xaml.Controls.Primitives.h +0 -10
  644. package/Microsoft.ReactNative.Cxx/UI.Xaml.Controls.h +0 -13
  645. package/Microsoft.ReactNative.Cxx/UI.Xaml.Documents.h +0 -10
  646. package/Microsoft.ReactNative.Cxx/UI.Xaml.Hosting.DesktopWindowXamlSource.h +0 -11
  647. package/Microsoft.ReactNative.Cxx/UI.Xaml.Hosting.h +0 -10
  648. package/Microsoft.ReactNative.Cxx/UI.Xaml.Input.h +0 -10
  649. package/Microsoft.ReactNative.Cxx/UI.Xaml.Markup.h +0 -10
  650. package/Microsoft.ReactNative.Cxx/UI.Xaml.Media.Imaging.h +0 -10
  651. package/Microsoft.ReactNative.Cxx/UI.Xaml.Media.Media3D.h +0 -10
  652. package/Microsoft.ReactNative.Cxx/UI.Xaml.Media.h +0 -10
  653. package/Microsoft.ReactNative.Cxx/UI.Xaml.Navigation.h +0 -10
  654. package/Microsoft.ReactNative.Cxx/UI.Xaml.Shapes.h +0 -10
  655. package/Microsoft.ReactNative.Managed/AttributedViewManager.cs +0 -527
  656. package/Microsoft.ReactNative.Managed/ViewManagerAttributes.cs +0 -91
  657. package/Microsoft.ReactNative.Managed/ViewManagerEvent.cs +0 -13
  658. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityProps.cpp +0 -344
  659. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/core/DynamicEventPayload.cpp +0 -42
  660. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/YGEnums.h +0 -146
  661. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/algorithm/CalculateLayout.cpp +0 -2435
  662. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/enums/ExperimentalFeature.h +0 -40
  663. package/Shared/BatchingMessageQueueThread.h +0 -20
  664. package/Shared/ChakraRuntimeHolder.cpp +0 -62
  665. package/Shared/ChakraRuntimeHolder.h +0 -46
  666. package/Shared/CreateInstance.h +0 -25
  667. package/Shared/Executors/WebSocketJSExecutor.cpp +0 -294
  668. package/Shared/Executors/WebSocketJSExecutor.h +0 -123
  669. package/Shared/Executors/WebSocketJSExecutorFactory.cpp +0 -25
  670. package/Shared/Hermes/HermesSamplingProfiler.cpp +0 -114
  671. package/Shared/Hermes/HermesSamplingProfiler.h +0 -26
  672. package/Shared/JSI/ChakraApi.cpp +0 -436
  673. package/Shared/JSI/ChakraApi.h +0 -474
  674. package/Shared/JSI/ChakraJsiRuntime_edgemode.cpp +0 -100
  675. package/Shared/JSI/ChakraRuntime.cpp +0 -1132
  676. package/Shared/JSI/ChakraRuntime.h +0 -512
  677. package/Shared/JSI/ChakraRuntimeArgs.h +0 -45
  678. package/Shared/JSI/ChakraRuntimeFactory.h +0 -15
  679. package/Shared/JSI/JSExecutorFactoryDelegate.h +0 -12
  680. package/Shared/JSI/JSExecutorFactorySettings.cpp +0 -30
  681. package/Shared/JSI/JSExecutorFactorySettings.h +0 -21
  682. package/Shared/NativeModuleProvider.h +0 -40
  683. package/Shared/SystemChakraRuntime.h +0 -38
  684. package/Shared/Threading/BatchingQueueThread.cpp +0 -128
  685. package/Shared/Threading/BatchingQueueThread.h +0 -59
  686. package/Shared/WebSocketJSExecutorFactory.h +0 -27
  687. package/fmt/TEMP_UntilFmtUpdate/core.h +0 -2925
  688. package/template/cpp-app/proj/MyApp.sln +0 -166
  689. package/template/cpp-app/proj/MyApp.vcxproj +0 -176
  690. package/template/cpp-app/proj/MyApp.vcxproj.filters +0 -62
  691. package/template/cpp-app/src/App.cpp +0 -93
  692. package/template/cpp-app/src/App.h +0 -21
  693. package/template/cpp-app/src/App.idl +0 -3
  694. package/template/cpp-app/src/AutolinkedNativeModules.g.cpp +0 -13
  695. package/template/cpp-app/src/AutolinkedNativeModules.g.h +0 -10
  696. package/template/cpp-app/src/MainPage.cpp +0 -20
  697. package/template/cpp-app/src/MainPage.h +0 -19
  698. package/template/cpp-app/src/MainPage.idl +0 -10
  699. package/template/cpp-app/src/PropertySheet.props +0 -16
  700. package/template/cpp-app/src/ReactPackageProvider.cpp +0 -15
  701. package/template/cpp-app/src/ReactPackageProvider.h +0 -13
  702. package/template/cpp-app/src/pch.cpp +0 -1
  703. package/template/cpp-app/src/pch.h +0 -24
  704. package/template/cs-app/proj/MyApp.csproj +0 -162
  705. package/template/cs-app/proj/MyApp.sln +0 -191
  706. package/template/cs-app/src/App.xaml.cs +0 -62
  707. package/template/cs-app/src/AutolinkedNativeModules.g.cs +0 -13
  708. package/template/cs-app/src/MainPage.xaml.cs +0 -34
  709. package/template/cs-app/src/Properties/AssemblyInfo.cs +0 -29
  710. package/template/cs-app/src/Properties/Default.rd.xml +0 -32
  711. package/template/cs-app/src/ReactPackageProvider.cs +0 -17
  712. package/template/shared-app/assets/LockScreenLogo.scale-200.png +0 -0
  713. package/template/shared-app/assets/SplashScreen.scale-200.png +0 -0
  714. package/template/shared-app/assets/Square150x150Logo.scale-200.png +0 -0
  715. package/template/shared-app/assets/Square44x44Logo.scale-200.png +0 -0
  716. package/template/shared-app/assets/Square44x44Logo.targetsize-24_altform-unplated.png +0 -0
  717. package/template/shared-app/assets/StoreLogo.png +0 -0
  718. package/template/shared-app/assets/Wide310x150Logo.scale-200.png +0 -0
  719. package/template/shared-app/proj/ExperimentalFeatures.props +0 -32
  720. package/template/shared-app/proj/NuGet_Config +0 -19
  721. package/template/shared-app/src/App.xaml +0 -10
  722. package/template/shared-app/src/AutolinkedNativeModules.g.props +0 -6
  723. package/template/shared-app/src/AutolinkedNativeModules.g.targets +0 -6
  724. package/template/shared-app/src/MainPage.xaml +0 -21
  725. package/template/shared-app/src/Package.appxmanifest +0 -50
  726. package/templates/old/uwp-cpp-app/template.config.js +0 -15
  727. package/templates/old/uwp-cs-app/template.config.js +0 -15
@@ -8,17 +8,44 @@
8
8
  #include <react/renderer/textlayoutmanager/WindowsTextLayoutManager.h>
9
9
 
10
10
  #include <AutoDraw.h>
11
+ #include <Fabric/ReactTaggedView.h>
12
+ #include <Utils/IcuUtils.h>
11
13
  #include <Utils/ValueUtils.h>
12
14
  #include <react/renderer/components/text/ParagraphShadowNode.h>
13
15
  #include <react/renderer/components/text/ParagraphState.h>
14
16
  #include <unicode.h>
15
17
  #include <winrt/Microsoft.ReactNative.Composition.h>
16
- #include "CompositionDynamicAutomationProvider.h"
18
+ #include <winrt/Microsoft.UI.Input.h>
19
+ #include <winrt/Windows.ApplicationModel.DataTransfer.h>
17
20
  #include "CompositionHelpers.h"
21
+ #include "RootComponentView.h"
18
22
  #include "TextDrawing.h"
19
23
 
20
24
  namespace winrt::Microsoft::ReactNative::Composition::implementation {
21
25
 
26
+ // Automatically restores the original DPI of a render target
27
+ struct DpiRestorer {
28
+ ID2D1RenderTarget *renderTarget = nullptr;
29
+ float originalDpiX = 0.0f;
30
+ float originalDpiY = 0.0f;
31
+
32
+ void operator()(ID2D1RenderTarget *) const noexcept {
33
+ if (renderTarget) {
34
+ renderTarget->SetDpi(originalDpiX, originalDpiY);
35
+ }
36
+ }
37
+ };
38
+
39
+ inline std::unique_ptr<ID2D1RenderTarget, DpiRestorer>
40
+ MakeDpiGuard(ID2D1RenderTarget &renderTarget, float newDpiX, float newDpiY) noexcept {
41
+ float originalDpiX, originalDpiY;
42
+ renderTarget.GetDpi(&originalDpiX, &originalDpiY);
43
+ renderTarget.SetDpi(newDpiX, newDpiY);
44
+
45
+ return std::unique_ptr<ID2D1RenderTarget, DpiRestorer>(
46
+ &renderTarget, DpiRestorer{&renderTarget, originalDpiX, originalDpiY});
47
+ }
48
+
22
49
  ParagraphComponentView::ParagraphComponentView(
23
50
  const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
24
51
  facebook::react::Tag tag,
@@ -28,7 +55,8 @@ ParagraphComponentView::ParagraphComponentView(
28
55
  compContext,
29
56
  tag,
30
57
  reactContext,
31
- ComponentViewFeatures::Default & ~ComponentViewFeatures::Background) {}
58
+ // Disable Background (text draws its own) and FocusVisual (selection highlight is the focus indicator)
59
+ ComponentViewFeatures::Default & ~ComponentViewFeatures::Background & ~ComponentViewFeatures::FocusVisual) {}
32
60
 
33
61
  void ParagraphComponentView::MountChildComponentView(
34
62
  const winrt::Microsoft::ReactNative::ComponentView &childComponentView,
@@ -71,6 +99,18 @@ void ParagraphComponentView::updateProps(
71
99
  m_textLayout = nullptr;
72
100
  }
73
101
 
102
+ // Clear selection if text becomes non-selectable
103
+ if (oldViewProps.isSelectable != newViewProps.isSelectable) {
104
+ if (!newViewProps.isSelectable) {
105
+ ClearSelection();
106
+ }
107
+ m_requireRedraw = true;
108
+ }
109
+
110
+ if (oldViewProps.selectionColor != newViewProps.selectionColor) {
111
+ m_requireRedraw = true;
112
+ }
113
+
74
114
  Super::updateProps(props, oldProps);
75
115
  }
76
116
 
@@ -131,6 +171,108 @@ void ParagraphComponentView::updateTextAlignment(
131
171
  m_textLayout = nullptr;
132
172
  }
133
173
 
174
+ bool ParagraphComponentView::IsTextSelectableAtPoint(facebook::react::Point pt) noexcept {
175
+ // paragraph-level selectable prop is enabled
176
+ const auto &props = paragraphProps();
177
+ if (!props.isSelectable) {
178
+ return false;
179
+ }
180
+
181
+ // Finds which text fragment was hit
182
+ if (m_attributedStringBox.getValue().getFragments().size() && m_textLayout) {
183
+ BOOL isTrailingHit = false;
184
+ BOOL isInside = false;
185
+ DWRITE_HIT_TEST_METRICS metrics;
186
+ winrt::check_hresult(m_textLayout->HitTestPoint(pt.x, pt.y, &isTrailingHit, &isInside, &metrics));
187
+
188
+ if (isInside) {
189
+ uint32_t textPosition = metrics.textPosition;
190
+
191
+ // Finds which fragment contains this text position
192
+ for (auto fragment : m_attributedStringBox.getValue().getFragments()) {
193
+ if (textPosition < fragment.string.length()) {
194
+ return true;
195
+ }
196
+ textPosition -= static_cast<uint32_t>(fragment.string.length());
197
+ }
198
+ }
199
+ }
200
+
201
+ return false;
202
+ }
203
+
204
+ std::optional<int32_t> ParagraphComponentView::GetTextPositionAtPoint(facebook::react::Point pt) noexcept {
205
+ if (!m_textLayout) {
206
+ return std::nullopt;
207
+ }
208
+
209
+ BOOL isTrailingHit = FALSE;
210
+ BOOL isInside = FALSE;
211
+ DWRITE_HIT_TEST_METRICS metrics = {};
212
+
213
+ // Convert screen coordinates to character position
214
+ HRESULT hr = m_textLayout->HitTestPoint(pt.x, pt.y, &isTrailingHit, &isInside, &metrics);
215
+ if (FAILED(hr) || !isInside) {
216
+ return std::nullopt;
217
+ }
218
+
219
+ // Calculates the actual character position
220
+ // If isTrailingHit is true, the point is closer to the trailing edge of the character,
221
+ // so we should return the next character position (for cursor positioning)
222
+ return static_cast<int32_t>(metrics.textPosition + isTrailingHit);
223
+ }
224
+
225
+ std::optional<int32_t> ParagraphComponentView::GetClampedTextPosition(facebook::react::Point pt) noexcept {
226
+ if (!m_textLayout) {
227
+ return std::nullopt;
228
+ }
229
+
230
+ const std::wstring utf16Text{facebook::react::WindowsTextLayoutManager::GetTransformedText(m_attributedStringBox)};
231
+ if (utf16Text.empty()) {
232
+ return std::nullopt;
233
+ }
234
+
235
+ DWRITE_TEXT_METRICS textMetrics;
236
+ if (FAILED(m_textLayout->GetMetrics(&textMetrics))) {
237
+ return std::nullopt;
238
+ }
239
+
240
+ // Clamp the point to the text bounds for hit testing
241
+ const float clampedX = std::max(0.0f, std::min(pt.x, textMetrics.width));
242
+ const float clampedY = std::max(0.0f, std::min(pt.y, textMetrics.height));
243
+
244
+ BOOL isTrailingHit = FALSE;
245
+ BOOL isInside = FALSE;
246
+ DWRITE_HIT_TEST_METRICS metrics = {};
247
+
248
+ HRESULT hr = m_textLayout->HitTestPoint(clampedX, clampedY, &isTrailingHit, &isInside, &metrics);
249
+ if (FAILED(hr)) {
250
+ return std::nullopt;
251
+ }
252
+
253
+ int32_t result = static_cast<int32_t>(metrics.textPosition);
254
+ if (pt.x > textMetrics.width) {
255
+ // Dragging right - go to end of character
256
+ result = static_cast<int32_t>(metrics.textPosition + metrics.length);
257
+ } else if (pt.x < 0) {
258
+ // Dragging left - go to start of character
259
+ result = static_cast<int32_t>(metrics.textPosition);
260
+ } else if (isTrailingHit) {
261
+ // Inside bounds, trailing hit
262
+ result += 1;
263
+ }
264
+
265
+ if (pt.y > textMetrics.height) {
266
+ // Dragging below - select to end of text
267
+ result = static_cast<int32_t>(utf16Text.length());
268
+ } else if (pt.y < 0) {
269
+ // Dragging above - select to start of text
270
+ result = 0;
271
+ }
272
+
273
+ return result;
274
+ }
275
+
134
276
  void ParagraphComponentView::OnRenderingDeviceLost() noexcept {
135
277
  DrawText();
136
278
  }
@@ -263,6 +405,81 @@ void ParagraphComponentView::onThemeChanged() noexcept {
263
405
  }
264
406
 
265
407
  // Renders the text into our composition surface
408
+ void ParagraphComponentView::DrawSelectionHighlight(
409
+ ID2D1RenderTarget &renderTarget,
410
+ float offsetX,
411
+ float offsetY,
412
+ float pointScaleFactor) noexcept {
413
+ if (!m_selectionStart || !m_selectionEnd || !m_textLayout) {
414
+ return;
415
+ }
416
+
417
+ // During drag, selection may not be normalized yet, using min/max for rendering
418
+ const int32_t selStart = std::min(*m_selectionStart, *m_selectionEnd);
419
+ const int32_t selEnd = std::max(*m_selectionStart, *m_selectionEnd);
420
+ if (selEnd <= selStart) {
421
+ return;
422
+ }
423
+
424
+ // Scale offset to match text layout coordinates (same as RenderText)
425
+ const float scaledOffsetX = offsetX / pointScaleFactor;
426
+ const float scaledOffsetY = offsetY / pointScaleFactor;
427
+
428
+ // Set DPI to match text rendering
429
+ const float dpi = pointScaleFactor * 96.0f;
430
+ std::unique_ptr<ID2D1RenderTarget, DpiRestorer> dpiGuard = MakeDpiGuard(renderTarget, dpi, dpi);
431
+
432
+ // Get the hit test metrics for the selected text range
433
+ UINT32 actualCount = 0;
434
+ HRESULT hr = m_textLayout->HitTestTextRange(
435
+ static_cast<UINT32>(selStart),
436
+ static_cast<UINT32>(selEnd - selStart),
437
+ scaledOffsetX,
438
+ scaledOffsetY,
439
+ nullptr,
440
+ 0,
441
+ &actualCount);
442
+
443
+ if (actualCount == 0) {
444
+ return;
445
+ }
446
+
447
+ std::vector<DWRITE_HIT_TEST_METRICS> hitTestMetrics(actualCount);
448
+ hr = m_textLayout->HitTestTextRange(
449
+ static_cast<UINT32>(selStart),
450
+ static_cast<UINT32>(selEnd - selStart),
451
+ scaledOffsetX,
452
+ scaledOffsetY,
453
+ hitTestMetrics.data(),
454
+ actualCount,
455
+ &actualCount);
456
+
457
+ if (FAILED(hr)) {
458
+ return;
459
+ }
460
+
461
+ winrt::com_ptr<ID2D1SolidColorBrush> selectionBrush;
462
+ D2D1_COLOR_F selectionColor;
463
+ const auto &props = paragraphProps();
464
+ if (props.selectionColor) {
465
+ selectionColor = theme()->D2DColor(**props.selectionColor);
466
+ } else {
467
+ selectionColor = theme()->D2DPlatformColor("Highlight@40");
468
+ }
469
+ hr = renderTarget.CreateSolidColorBrush(selectionColor, selectionBrush.put());
470
+
471
+ if (FAILED(hr)) {
472
+ return;
473
+ }
474
+
475
+ // Draw rectangles for each hit test metric
476
+ for (UINT32 i = 0; i < actualCount; i++) {
477
+ const auto &metric = hitTestMetrics[i];
478
+ const D2D1_RECT_F rect = {metric.left, metric.top, metric.left + metric.width, metric.top + metric.height};
479
+ renderTarget.FillRectangle(&rect, selectionBrush.get());
480
+ }
481
+ }
482
+
266
483
  void ParagraphComponentView::DrawText() noexcept {
267
484
  if (!m_drawingSurface || theme()->IsEmpty())
268
485
  return;
@@ -281,13 +498,20 @@ void ParagraphComponentView::DrawText() noexcept {
281
498
  viewProps()->backgroundColor ? theme()->D2DColor(*viewProps()->backgroundColor)
282
499
  : D2D1::ColorF(D2D1::ColorF::Black, 0.0f));
283
500
  const auto &props = paragraphProps();
501
+
502
+ // Calculate text offset
503
+ const float textOffsetX = static_cast<float>(offset.x) + m_layoutMetrics.contentInsets.left;
504
+ const float textOffsetY = static_cast<float>(offset.y) + m_layoutMetrics.contentInsets.top;
505
+
506
+ // Draw selection highlight behind text
507
+ DrawSelectionHighlight(*d2dDeviceContext, textOffsetX, textOffsetY, m_layoutMetrics.pointScaleFactor);
508
+
284
509
  RenderText(
285
510
  *d2dDeviceContext,
286
511
  *m_textLayout,
287
512
  m_attributedStringBox.getValue(),
288
513
  props.textAttributes,
289
- {static_cast<float>(offset.x) + m_layoutMetrics.contentInsets.left,
290
- static_cast<float>(offset.y) + m_layoutMetrics.contentInsets.top},
514
+ {textOffsetX, textOffsetY},
291
515
  m_layoutMetrics.pointScaleFactor,
292
516
  *theme());
293
517
 
@@ -299,6 +523,324 @@ void ParagraphComponentView::DrawText() noexcept {
299
523
  }
300
524
  }
301
525
 
526
+ void ParagraphComponentView::ClearSelection() noexcept {
527
+ const bool hadSelection = (m_selectionStart || m_selectionEnd || m_isSelecting);
528
+ m_selectionStart = std::nullopt;
529
+ m_selectionEnd = std::nullopt;
530
+ m_isSelecting = false;
531
+ if (hadSelection) {
532
+ // Clears selection highlight
533
+ DrawText();
534
+ }
535
+ }
536
+
537
+ void ParagraphComponentView::OnPointerPressed(
538
+ const winrt::Microsoft::ReactNative::Composition::Input::PointerRoutedEventArgs &args) noexcept {
539
+ // Only handle selection if text is selectable
540
+ const auto &props = paragraphProps();
541
+ if (!props.isSelectable) {
542
+ Super::OnPointerPressed(args);
543
+ return;
544
+ }
545
+
546
+ auto pp = args.GetCurrentPoint(-1);
547
+
548
+ // Ignores right-click
549
+ if (pp.Properties().PointerUpdateKind() ==
550
+ winrt::Microsoft::ReactNative::Composition::Input::PointerUpdateKind::RightButtonPressed) {
551
+ args.Handled(true);
552
+ return;
553
+ }
554
+
555
+ auto position = pp.Position();
556
+
557
+ facebook::react::Point localPt{
558
+ position.X - m_layoutMetrics.frame.origin.x, position.Y - m_layoutMetrics.frame.origin.y};
559
+
560
+ std::optional<int32_t> charPosition = GetTextPositionAtPoint(localPt);
561
+
562
+ if (charPosition) {
563
+ if (auto root = rootComponentView()) {
564
+ root->ClearCurrentTextSelection();
565
+ }
566
+
567
+ // Check for double-click
568
+ auto now = std::chrono::steady_clock::now();
569
+ auto timeSinceLastClick = std::chrono::duration_cast<std::chrono::milliseconds>(now - m_lastClickTime);
570
+ const UINT doubleClickTime = GetDoubleClickTime();
571
+ const bool isDoubleClick = (timeSinceLastClick.count() < static_cast<long long>(doubleClickTime)) &&
572
+ m_lastClickPosition && (std::abs(*charPosition - *m_lastClickPosition) <= 1);
573
+
574
+ // Update last click tracking
575
+ m_lastClickTime = now;
576
+ m_lastClickPosition = charPosition;
577
+
578
+ if (isDoubleClick) {
579
+ SelectWordAtPosition(*charPosition);
580
+ m_isSelecting = false;
581
+ } else {
582
+ // Single-click: start drag selection
583
+ m_selectionStart = charPosition;
584
+ m_selectionEnd = charPosition;
585
+ m_isSelecting = true;
586
+
587
+ // Tracks selection even when the mouse moves outside the component bounds
588
+ CapturePointer(args.Pointer());
589
+ }
590
+
591
+ if (auto root = rootComponentView()) {
592
+ root->SetViewWithTextSelection(*get_strong());
593
+ }
594
+
595
+ // Focuses so we receive onLostFocus when clicking elsewhere
596
+ if (auto root = rootComponentView()) {
597
+ root->TrySetFocusedComponent(*get_strong(), winrt::Microsoft::ReactNative::FocusNavigationDirection::None);
598
+ }
599
+
600
+ args.Handled(true);
601
+ } else {
602
+ ClearSelection();
603
+ m_lastClickPosition = std::nullopt;
604
+ Super::OnPointerPressed(args);
605
+ }
606
+ }
607
+
608
+ void ParagraphComponentView::OnPointerMoved(
609
+ const winrt::Microsoft::ReactNative::Composition::Input::PointerRoutedEventArgs &args) noexcept {
610
+ // Only track movement if we're actively selecting
611
+ if (!m_isSelecting) {
612
+ Super::OnPointerMoved(args);
613
+ return;
614
+ }
615
+
616
+ auto pp = args.GetCurrentPoint(static_cast<int32_t>(Tag()));
617
+ auto position = pp.Position();
618
+
619
+ facebook::react::Point localPt{position.X, position.Y};
620
+ std::optional<int32_t> charPosition = GetClampedTextPosition(localPt);
621
+
622
+ if (charPosition && charPosition != m_selectionEnd) {
623
+ m_selectionEnd = charPosition;
624
+ DrawText();
625
+ args.Handled(true);
626
+ }
627
+ }
628
+
629
+ void ParagraphComponentView::OnPointerReleased(
630
+ const winrt::Microsoft::ReactNative::Composition::Input::PointerRoutedEventArgs &args) noexcept {
631
+ // Check for right-click to show context menu
632
+ auto pp = args.GetCurrentPoint(-1);
633
+ if (pp.Properties().PointerUpdateKind() ==
634
+ winrt::Microsoft::ReactNative::Composition::Input::PointerUpdateKind::RightButtonReleased) {
635
+ const auto &props = paragraphProps();
636
+ if (props.isSelectable) {
637
+ ShowContextMenu();
638
+ args.Handled(true);
639
+ return;
640
+ }
641
+ }
642
+
643
+ if (!m_isSelecting) {
644
+ Super::OnPointerReleased(args);
645
+ return;
646
+ }
647
+
648
+ m_isSelecting = false;
649
+
650
+ ReleasePointerCapture(args.Pointer());
651
+
652
+ if (!m_selectionStart || !m_selectionEnd || *m_selectionStart == *m_selectionEnd) {
653
+ m_selectionStart = std::nullopt;
654
+ m_selectionEnd = std::nullopt;
655
+ } else {
656
+ SetSelection(*m_selectionStart, *m_selectionEnd);
657
+ }
658
+
659
+ args.Handled(true);
660
+ }
661
+
662
+ void ParagraphComponentView::onLostFocus(
663
+ const winrt::Microsoft::ReactNative::Composition::Input::RoutedEventArgs &args) noexcept {
664
+ ClearSelection();
665
+
666
+ Super::onLostFocus(args);
667
+ }
668
+
669
+ void ParagraphComponentView::OnPointerCaptureLost() noexcept {
670
+ // Pointer capture was lost stop any active selection drag
671
+ if (m_isSelecting) {
672
+ m_isSelecting = false;
673
+
674
+ if (!m_selectionStart || !m_selectionEnd || *m_selectionStart == *m_selectionEnd) {
675
+ m_selectionStart = std::nullopt;
676
+ m_selectionEnd = std::nullopt;
677
+ } else {
678
+ SetSelection(*m_selectionStart, *m_selectionEnd);
679
+ }
680
+ }
681
+
682
+ Super::OnPointerCaptureLost();
683
+ }
684
+
685
+ std::string ParagraphComponentView::GetSelectedText() const noexcept {
686
+ if (!m_selectionStart || !m_selectionEnd) {
687
+ return "";
688
+ }
689
+
690
+ const int32_t selStart = std::min(*m_selectionStart, *m_selectionEnd);
691
+ const int32_t selEnd = std::max(*m_selectionStart, *m_selectionEnd);
692
+
693
+ if (selEnd <= selStart) {
694
+ return "";
695
+ }
696
+
697
+ const std::wstring utf16Text{facebook::react::WindowsTextLayoutManager::GetTransformedText(m_attributedStringBox)};
698
+
699
+ if (selStart >= static_cast<int32_t>(utf16Text.length())) {
700
+ return "";
701
+ }
702
+
703
+ const int32_t clampedEnd = std::min(selEnd, static_cast<int32_t>(utf16Text.length()));
704
+ const std::wstring selectedUtf16 =
705
+ utf16Text.substr(static_cast<size_t>(selStart), static_cast<size_t>(clampedEnd - selStart));
706
+ return ::Microsoft::Common::Unicode::Utf16ToUtf8(selectedUtf16);
707
+ }
708
+
709
+ void ParagraphComponentView::CopySelectionToClipboard() noexcept {
710
+ const std::string selectedText = GetSelectedText();
711
+ if (selectedText.empty()) {
712
+ return;
713
+ }
714
+
715
+ // Convert UTF-8 to wide string for Windows clipboard
716
+ const std::wstring wideText = ::Microsoft::Common::Unicode::Utf8ToUtf16(selectedText);
717
+
718
+ winrt::Windows::ApplicationModel::DataTransfer::DataPackage dataPackage;
719
+ dataPackage.SetText(wideText);
720
+ winrt::Windows::ApplicationModel::DataTransfer::Clipboard::SetContent(dataPackage);
721
+ }
722
+
723
+ void ParagraphComponentView::SelectWordAtPosition(int32_t charPosition) noexcept {
724
+ const std::wstring utf16Text{facebook::react::WindowsTextLayoutManager::GetTransformedText(m_attributedStringBox)};
725
+ const int32_t textLength = static_cast<int32_t>(utf16Text.length());
726
+
727
+ if (utf16Text.empty() || charPosition < 0 || charPosition >= textLength) {
728
+ return;
729
+ }
730
+
731
+ int32_t wordStart = charPosition;
732
+ int32_t wordEnd = charPosition;
733
+
734
+ ::Microsoft::ReactNative::IcuUtils::WordBreakIterator wordBreaker(utf16Text.c_str(), textLength);
735
+ const bool icuSuccess = wordBreaker.IsValid() && wordBreaker.GetWordBoundaries(charPosition, wordStart, wordEnd);
736
+
737
+ if (!icuSuccess) {
738
+ wordStart = charPosition;
739
+ wordEnd = charPosition;
740
+
741
+ while (wordStart > 0) {
742
+ int32_t prevPos = ::Microsoft::ReactNative::IcuUtils::MoveToPreviousCodePoint(utf16Text.c_str(), wordStart);
743
+ ::Microsoft::ReactNative::IcuUtils::UChar32 prevCp =
744
+ ::Microsoft::ReactNative::IcuUtils::GetCodePointAt(utf16Text.c_str(), textLength, prevPos);
745
+ if (!::Microsoft::ReactNative::IcuUtils::IsAlphanumeric(prevCp)) {
746
+ break;
747
+ }
748
+ wordStart = prevPos;
749
+ }
750
+
751
+ while (wordEnd < textLength) {
752
+ ::Microsoft::ReactNative::IcuUtils::UChar32 cp =
753
+ ::Microsoft::ReactNative::IcuUtils::GetCodePointAt(utf16Text.c_str(), textLength, wordEnd);
754
+ if (!::Microsoft::ReactNative::IcuUtils::IsAlphanumeric(cp)) {
755
+ break;
756
+ }
757
+ wordEnd = ::Microsoft::ReactNative::IcuUtils::MoveToNextCodePoint(utf16Text.c_str(), textLength, wordEnd);
758
+ }
759
+ }
760
+
761
+ if (wordEnd > wordStart) {
762
+ SetSelection(wordStart, wordEnd);
763
+ DrawText();
764
+ }
765
+ }
766
+
767
+ void ParagraphComponentView::SetSelection(int32_t start, int32_t end) noexcept {
768
+ m_selectionStart = std::min(start, end);
769
+ m_selectionEnd = std::max(start, end);
770
+ }
771
+
772
+ void ParagraphComponentView::ShowContextMenu() noexcept {
773
+ HMENU menu = CreatePopupMenu();
774
+ if (!menu) {
775
+ return;
776
+ }
777
+
778
+ const bool hasSelection = (m_selectionStart && m_selectionEnd && *m_selectionStart != *m_selectionEnd);
779
+ const std::wstring utf16Text{facebook::react::WindowsTextLayoutManager::GetTransformedText(m_attributedStringBox)};
780
+ const bool hasText = !utf16Text.empty();
781
+
782
+ // Add menu items (1 = Copy, 2 = Select All)
783
+ AppendMenuW(menu, MF_STRING | (hasSelection ? 0 : MF_GRAYED), 1, L"Copy");
784
+ AppendMenuW(menu, MF_STRING | (hasText ? 0 : MF_GRAYED), 2, L"Select All");
785
+
786
+ // Get cursor position for menu placement
787
+ POINT cursorPos;
788
+ GetCursorPos(&cursorPos);
789
+
790
+ const HWND hwnd = GetActiveWindow();
791
+
792
+ const int cmd = TrackPopupMenu(
793
+ menu, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RETURNCMD | TPM_NONOTIFY, cursorPos.x, cursorPos.y, 0, hwnd, NULL);
794
+
795
+ if (cmd == 1) {
796
+ // Copy
797
+ CopySelectionToClipboard();
798
+ } else if (cmd == 2) {
799
+ SetSelection(0, static_cast<int32_t>(utf16Text.length()));
800
+ DrawText();
801
+ }
802
+
803
+ DestroyMenu(menu);
804
+ }
805
+
806
+ void ParagraphComponentView::OnKeyDown(
807
+ const winrt::Microsoft::ReactNative::Composition::Input::KeyRoutedEventArgs &args) noexcept {
808
+ const bool isCtrlDown =
809
+ (args.KeyboardSource().GetKeyState(winrt::Windows::System::VirtualKey::Control) &
810
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down) == winrt::Microsoft::UI::Input::VirtualKeyStates::Down;
811
+
812
+ // Handle Ctrl+C for copy
813
+ if (isCtrlDown && args.Key() == winrt::Windows::System::VirtualKey::C) {
814
+ if (m_selectionStart && m_selectionEnd && *m_selectionStart != *m_selectionEnd) {
815
+ CopySelectionToClipboard();
816
+ args.Handled(true);
817
+ return;
818
+ }
819
+ }
820
+
821
+ // Handle Ctrl+A for select all
822
+ if (isCtrlDown && args.Key() == winrt::Windows::System::VirtualKey::A) {
823
+ const std::wstring utf16Text{facebook::react::WindowsTextLayoutManager::GetTransformedText(m_attributedStringBox)};
824
+ if (!utf16Text.empty()) {
825
+ if (auto root = rootComponentView()) {
826
+ root->ClearCurrentTextSelection();
827
+ }
828
+
829
+ SetSelection(0, static_cast<int32_t>(utf16Text.length()));
830
+
831
+ if (auto root = rootComponentView()) {
832
+ root->SetViewWithTextSelection(*get_strong());
833
+ }
834
+
835
+ DrawText();
836
+ args.Handled(true);
837
+ return;
838
+ }
839
+ }
840
+
841
+ Super::OnKeyDown(args);
842
+ }
843
+
302
844
  std::string ParagraphComponentView::DefaultControlType() const noexcept {
303
845
  return "text";
304
846
  }
@@ -307,6 +849,19 @@ std::string ParagraphComponentView::DefaultAccessibleName() const noexcept {
307
849
  return m_attributedStringBox.getValue().getString();
308
850
  }
309
851
 
852
+ bool ParagraphComponentView::focusable() const noexcept {
853
+ // Text is focusable when it's selectable or when explicitly marked as focusable via props
854
+ return paragraphProps().isSelectable || viewProps()->focusable;
855
+ }
856
+
857
+ std::pair<facebook::react::Cursor, HCURSOR> ParagraphComponentView::cursor() const noexcept {
858
+ // Returns I-beam cursor for selectable text
859
+ if (paragraphProps().isSelectable) {
860
+ return {facebook::react::Cursor::Text, nullptr};
861
+ }
862
+ return Super::cursor();
863
+ }
864
+
310
865
  winrt::Microsoft::ReactNative::ComponentView ParagraphComponentView::Create(
311
866
  const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
312
867
  facebook::react::Tag tag,
@@ -12,6 +12,7 @@
12
12
  #include <react/renderer/components/text/ParagraphProps.h>
13
13
  #include <windows.ui.composition.interop.h>
14
14
  #include <winrt/Windows.UI.Composition.h>
15
+ #include <chrono>
15
16
  #include "CompositionHelpers.h"
16
17
  #include "CompositionViewComponentView.h"
17
18
 
@@ -48,6 +49,28 @@ struct ParagraphComponentView : ParagraphComponentViewT<ParagraphComponentView,
48
49
  static facebook::react::SharedViewProps defaultProps() noexcept;
49
50
  const facebook::react::ParagraphProps &paragraphProps() const noexcept;
50
51
 
52
+ // Returns true when text is selectable
53
+ bool focusable() const noexcept override;
54
+
55
+ // Returns I-beam cursor for selectable text
56
+ std::pair<facebook::react::Cursor, HCURSOR> cursor() const noexcept override;
57
+
58
+ // Called when losing focus, when another text starts selection, or when clicking outside text bounds.
59
+ void ClearSelection() noexcept;
60
+
61
+ // Text selection pointer event handlers
62
+ void OnPointerPressed(
63
+ const winrt::Microsoft::ReactNative::Composition::Input::PointerRoutedEventArgs &args) noexcept override;
64
+ void OnPointerMoved(
65
+ const winrt::Microsoft::ReactNative::Composition::Input::PointerRoutedEventArgs &args) noexcept override;
66
+ void OnPointerReleased(
67
+ const winrt::Microsoft::ReactNative::Composition::Input::PointerRoutedEventArgs &args) noexcept override;
68
+ void OnPointerCaptureLost() noexcept override;
69
+ void onLostFocus(const winrt::Microsoft::ReactNative::Composition::Input::RoutedEventArgs &args) noexcept override;
70
+
71
+ // Keyboard event handler for copy
72
+ void OnKeyDown(const winrt::Microsoft::ReactNative::Composition::Input::KeyRoutedEventArgs &args) noexcept override;
73
+
51
74
  ParagraphComponentView(
52
75
  const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext,
53
76
  facebook::react::Tag tag,
@@ -56,7 +79,28 @@ struct ParagraphComponentView : ParagraphComponentViewT<ParagraphComponentView,
56
79
  private:
57
80
  void updateVisualBrush() noexcept;
58
81
  void DrawText() noexcept;
82
+ void DrawSelectionHighlight(
83
+ ID2D1RenderTarget &renderTarget,
84
+ float offsetX,
85
+ float offsetY,
86
+ float pointScaleFactor) noexcept;
59
87
  void updateTextAlignment(const std::optional<facebook::react::TextAlignment> &fbAlignment) noexcept;
88
+ bool IsTextSelectableAtPoint(facebook::react::Point pt) noexcept;
89
+ std::optional<int32_t> GetTextPositionAtPoint(facebook::react::Point pt) noexcept;
90
+ std::optional<int32_t> GetClampedTextPosition(facebook::react::Point pt) noexcept;
91
+ std::string GetSelectedText() const noexcept;
92
+
93
+ // Copies currently selected text to the system clipboard
94
+ void CopySelectionToClipboard() noexcept;
95
+
96
+ // Selects the word at the given character position
97
+ void SelectWordAtPosition(int32_t charPosition) noexcept;
98
+
99
+ // Shows a context menu with Copy/Select All options on right-click
100
+ void ShowContextMenu() noexcept;
101
+
102
+ // m_selectionStart <= m_selectionEnd
103
+ void SetSelection(int32_t start, int32_t end) noexcept;
60
104
 
61
105
  winrt::com_ptr<::IDWriteTextLayout> m_textLayout;
62
106
  facebook::react::AttributedStringBox m_attributedStringBox;
@@ -64,6 +108,14 @@ struct ParagraphComponentView : ParagraphComponentViewT<ParagraphComponentView,
64
108
 
65
109
  bool m_requireRedraw{true};
66
110
  winrt::Microsoft::ReactNative::Composition::Experimental::IDrawingSurfaceBrush m_drawingSurface;
111
+
112
+ std::optional<int32_t> m_selectionStart;
113
+ std::optional<int32_t> m_selectionEnd;
114
+ bool m_isSelecting{false};
115
+
116
+ // Double-click detection
117
+ std::chrono::steady_clock::time_point m_lastClickTime{};
118
+ std::optional<int32_t> m_lastClickPosition;
67
119
  };
68
120
 
69
121
  } // namespace winrt::Microsoft::ReactNative::Composition::implementation