react-native-windows 0.73.11 → 0.74.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 (767) hide show
  1. package/.flowconfig +12 -7
  2. package/Chakra/ChakraUtils.cpp +5 -10
  3. package/Chakra/ChakraUtils.h +2 -2
  4. package/Common/packages.lock.json +3 -3
  5. package/Directory.Build.props +5 -5
  6. package/Folly/Folly.vcxproj +2 -2
  7. package/Folly/Folly.vcxproj.filters +7 -0
  8. package/Folly/TEMP_UntilFollyUpdate/dynamic-inl.h +22 -1
  9. package/Folly/TEMP_UntilFollyUpdate/lang/SafeAssert.h +4 -1
  10. package/Folly/cgmanifest.json +1 -1
  11. package/Libraries/ActionSheetIOS/ActionSheetIOS.d.ts +6 -0
  12. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +6 -0
  13. package/Libraries/ActionSheetIOS/NativeActionSheetManager.js +4 -45
  14. package/Libraries/Alert/Alert.windows.js +2 -3
  15. package/Libraries/Alert/NativeAlertManager.js +4 -26
  16. package/Libraries/Animated/Animated.js +2 -2
  17. package/Libraries/Animated/AnimatedPlatformConfig.js +1 -1
  18. package/Libraries/Animated/NativeAnimatedHelper.js +14 -11
  19. package/Libraries/Animated/NativeAnimatedModule.js +4 -68
  20. package/Libraries/Animated/NativeAnimatedTurboModule.js +4 -69
  21. package/Libraries/Animated/animations/Animation.js +6 -22
  22. package/Libraries/Animated/components/AnimatedFlatList.js +1 -16
  23. package/Libraries/Animated/components/AnimatedScrollView.js +36 -31
  24. package/Libraries/Animated/components/AnimatedSectionList.js +1 -20
  25. package/Libraries/Animated/createAnimatedComponent.js +45 -40
  26. package/Libraries/Animated/nodes/AnimatedStyle.js +1 -1
  27. package/Libraries/Animated/shouldUseTurboAnimatedModule.js +1 -1
  28. package/Libraries/Animated/useAnimatedProps.js +21 -1
  29. package/Libraries/AppState/NativeAppState.js +4 -24
  30. package/Libraries/AppTheme/NativeAppTheme.js +4 -25
  31. package/Libraries/BatchedBridge/NativeModules.js +1 -1
  32. package/Libraries/Blob/Blob.js +1 -4
  33. package/Libraries/Blob/BlobManager.js +6 -8
  34. package/Libraries/Blob/File.js +1 -1
  35. package/Libraries/Blob/NativeBlobModule.js +4 -50
  36. package/Libraries/Blob/NativeFileReaderModule.js +4 -13
  37. package/Libraries/BugReporting/NativeBugReporting.js +4 -12
  38. package/Libraries/Components/AccessibilityInfo/NativeAccessibilityInfo.js +3 -23
  39. package/Libraries/Components/AccessibilityInfo/NativeAccessibilityManager.js +4 -57
  40. package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.android.js +3 -2
  41. package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.windows.js +3 -2
  42. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +9 -40
  43. package/Libraries/Components/ActivityIndicator/ActivityIndicatorViewNativeComponent.js +3 -43
  44. package/Libraries/Components/Button.js +103 -107
  45. package/Libraries/Components/Button.windows.js +199 -206
  46. package/Libraries/Components/Clipboard/NativeClipboard.js +3 -11
  47. package/Libraries/Components/DrawerAndroid/AndroidDrawerLayoutNativeComponent.js +3 -114
  48. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +1 -5
  49. package/Libraries/Components/Keyboard/KeyboardExt.d.ts +8 -8
  50. package/Libraries/Components/Keyboard/KeyboardExt.js +27 -27
  51. package/Libraries/Components/Keyboard/KeyboardExt.js.map +1 -1
  52. package/Libraries/Components/Keyboard/KeyboardExtProps.d.ts +17 -17
  53. package/Libraries/Components/Keyboard/KeyboardExtProps.js +7 -7
  54. package/Libraries/Components/Keyboard/KeyboardExtProps.js.map +1 -1
  55. package/Libraries/Components/Keyboard/NativeKeyboardObserver.js +3 -10
  56. package/Libraries/Components/Pressable/Pressable.js +1 -1
  57. package/Libraries/Components/Pressable/Pressable.windows.js +1 -2
  58. package/Libraries/Components/Pressable/useAndroidRippleForView.js +5 -4
  59. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidNativeComponent.js +4 -24
  60. package/Libraries/Components/RefreshControl/AndroidSwipeRefreshLayoutNativeComponent.js +3 -64
  61. package/Libraries/Components/RefreshControl/PullToRefreshViewNativeComponent.js +3 -61
  62. package/Libraries/Components/RefreshControl/RefreshControl.js +1 -1
  63. package/Libraries/Components/RefreshControl/RefreshControl.windows.js +1 -1
  64. package/Libraries/Components/SafeAreaView/RCTSafeAreaViewNativeComponent.js +3 -15
  65. package/Libraries/Components/ScrollView/AndroidHorizontalScrollContentViewNativeComponent.js +3 -16
  66. package/Libraries/Components/ScrollView/ScrollContentViewNativeComponent.js +1 -1
  67. package/Libraries/Components/ScrollView/ScrollView.d.ts +5 -6
  68. package/Libraries/Components/ScrollView/ScrollView.js +12 -38
  69. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +1 -2
  70. package/Libraries/Components/Sound/NativeSoundManager.js +3 -12
  71. package/Libraries/Components/StatusBar/NativeStatusBarManagerAndroid.js +3 -58
  72. package/Libraries/Components/StatusBar/NativeStatusBarManagerIOS.js +3 -79
  73. package/Libraries/Components/Switch/AndroidSwitchNativeComponent.js +4 -53
  74. package/Libraries/Components/Switch/Switch.js +0 -2
  75. package/Libraries/Components/Switch/Switch.windows.js +0 -2
  76. package/Libraries/Components/Switch/SwitchNativeComponent.js +4 -52
  77. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +8 -0
  78. package/Libraries/Components/TextInput/InputAccessoryView.js +18 -20
  79. package/Libraries/Components/TextInput/RCTInputAccessoryViewNativeComponent.js +4 -17
  80. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +3 -6
  81. package/Libraries/Components/TextInput/TextInput.d.ts +16 -0
  82. package/Libraries/Components/TextInput/TextInput.flow.js +16 -0
  83. package/Libraries/Components/TextInput/TextInput.js +65 -32
  84. package/Libraries/Components/TextInput/TextInput.windows.js +87 -38
  85. package/Libraries/Components/TextInput/WindowsTextInputNativeComponent.js +773 -9
  86. package/Libraries/Components/ToastAndroid/NativeToastAndroid.js +3 -28
  87. package/Libraries/Components/Touchable/PooledClass.js +1 -1
  88. package/Libraries/Components/Touchable/Touchable.js +2 -3
  89. package/Libraries/Components/Touchable/Touchable.windows.js +2 -3
  90. package/Libraries/Components/Touchable/TouchableHighlight.js +4 -4
  91. package/Libraries/Components/Touchable/TouchableHighlight.windows.js +4 -4
  92. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +2 -1
  93. package/Libraries/Components/Touchable/TouchableOpacity.js +5 -2
  94. package/Libraries/Components/Touchable/TouchableOpacity.windows.js +5 -2
  95. package/Libraries/Components/UnimplementedViews/UnimplementedNativeViewNativeComponent.js +3 -16
  96. package/Libraries/Components/View/ReactNativeStyleAttributes.js +2 -1
  97. package/Libraries/Components/View/View.js +0 -11
  98. package/Libraries/Components/View/View.windows.js +19 -18
  99. package/Libraries/Components/View/ViewAccessibility.d.ts +33 -17
  100. package/Libraries/Components/View/ViewPropTypes.d.ts +28 -17
  101. package/Libraries/Components/View/ViewPropTypes.js +36 -36
  102. package/Libraries/Components/View/ViewPropTypes.windows.js +36 -36
  103. package/Libraries/Core/InitializeCore.js +1 -1
  104. package/Libraries/Core/NativeExceptionsManager.js +3 -93
  105. package/Libraries/Core/ReactNativeVersion.js +12 -6
  106. package/Libraries/Core/ReactNativeVersionCheck.js +6 -6
  107. package/Libraries/Core/SegmentFetcher/NativeSegmentFetcher.js +3 -18
  108. package/Libraries/Core/Timers/NativeTiming.js +3 -16
  109. package/Libraries/Core/registerCallableModule.d.ts +16 -0
  110. package/Libraries/Core/registerCallableModule.js +42 -0
  111. package/Libraries/Core/setUpPerformance.js +2 -2
  112. package/Libraries/Core/setUpPerformanceObserver.js +3 -1
  113. package/Libraries/Debugging/DebuggingOverlay.js +111 -0
  114. package/Libraries/Debugging/DebuggingOverlayNativeComponent.js +13 -0
  115. package/Libraries/Debugging/DebuggingOverlayRegistry.js +513 -0
  116. package/Libraries/Debugging/useSubscribeToDebuggingOverlayRegistry.js +32 -0
  117. package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +3 -14
  118. package/Libraries/HeapCapture/NativeJSCHeapCapture.js +3 -9
  119. package/Libraries/Image/AssetSourceResolver.js +5 -5
  120. package/Libraries/Image/AssetUtils.js +4 -5
  121. package/Libraries/Image/Image.android.js +146 -174
  122. package/Libraries/Image/Image.d.ts +1 -1
  123. package/Libraries/Image/Image.ios.js +53 -79
  124. package/Libraries/Image/Image.windows.js +53 -79
  125. package/Libraries/Image/ImageBackground.js +2 -2
  126. package/Libraries/Image/ImageInjection.js +76 -18
  127. package/Libraries/Image/ImageTypes.flow.js +71 -0
  128. package/Libraries/Image/ImageUtils.js +1 -1
  129. package/Libraries/Image/ImageViewNativeComponent.js +18 -0
  130. package/Libraries/Image/NativeImageEditor.js +3 -42
  131. package/Libraries/Image/NativeImageLoaderAndroid.js +4 -28
  132. package/Libraries/Image/NativeImageLoaderIOS.js +4 -28
  133. package/Libraries/Image/NativeImageStoreAndroid.js +3 -16
  134. package/Libraries/Image/NativeImageStoreIOS.js +3 -23
  135. package/Libraries/Image/resolveAssetSource.js +59 -26
  136. package/Libraries/Image/resolveAssetSource.windows.js +148 -0
  137. package/Libraries/Inspector/ElementProperties.js +26 -52
  138. package/Libraries/Inspector/Inspector.js +122 -186
  139. package/Libraries/Inspector/InspectorOverlay.js +21 -33
  140. package/Libraries/Inspector/InspectorPanel.js +3 -17
  141. package/Libraries/Inspector/ReactDevToolsOverlay.js +171 -0
  142. package/Libraries/Inspector/getInspectorDataForViewAtPoint.js +20 -8
  143. package/Libraries/Interaction/FrameRateLogger.js +8 -18
  144. package/Libraries/Interaction/NativeFrameRateLogger.js +4 -16
  145. package/Libraries/IntersectionObserver/IntersectionObserver.js +1 -1
  146. package/Libraries/IntersectionObserver/IntersectionObserverEntry.js +20 -19
  147. package/Libraries/IntersectionObserver/IntersectionObserverManager.js +84 -6
  148. package/Libraries/IntersectionObserver/NativeIntersectionObserver.js +3 -31
  149. package/Libraries/IntersectionObserver/__mocks__/NativeIntersectionObserver.js +12 -2
  150. package/Libraries/LayoutAnimation/LayoutAnimation.js +1 -2
  151. package/Libraries/Linking/NativeIntentAndroid.js +3 -20
  152. package/Libraries/Linking/NativeLinkingManager.js +3 -17
  153. package/Libraries/Lists/FillRateHelper.js +1 -1
  154. package/Libraries/Lists/FlatList.d.ts +2 -2
  155. package/Libraries/Lists/FlatList.js +6 -2
  156. package/Libraries/Lists/FlatList.windows.js +717 -0
  157. package/Libraries/Lists/SectionList.d.ts +6 -1
  158. package/Libraries/Lists/ViewabilityHelper.js +1 -1
  159. package/Libraries/Lists/VirtualizeUtils.js +1 -1
  160. package/Libraries/Lists/VirtualizedList.js +1 -1
  161. package/Libraries/Lists/VirtualizedListContext.js +1 -1
  162. package/Libraries/Lists/VirtualizedSectionList.js +1 -1
  163. package/Libraries/LogBox/LogBoxInspectorContainer.js +1 -1
  164. package/Libraries/Modal/Modal.js +43 -11
  165. package/Libraries/Modal/NativeModalManager.js +3 -11
  166. package/Libraries/Modal/RCTModalHostViewNativeComponent.js +3 -129
  167. package/Libraries/MutationObserver/MutationObserver.js +1 -1
  168. package/Libraries/MutationObserver/MutationObserverManager.js +2 -2
  169. package/Libraries/MutationObserver/MutationRecord.js +12 -10
  170. package/Libraries/MutationObserver/NativeMutationObserver.js +3 -48
  171. package/Libraries/MutationObserver/__mocks__/NativeMutationObserver.js +1 -1
  172. package/Libraries/NativeComponent/BaseViewConfig.android.js +1 -0
  173. package/Libraries/NativeComponent/BaseViewConfig.windows.js +3 -0
  174. package/Libraries/NativeComponent/NativeComponentRegistry.js +1 -1
  175. package/Libraries/NativeModules/specs/NativeAnimationsDebugModule.js +3 -10
  176. package/Libraries/NativeModules/specs/NativeDevMenu.js +3 -13
  177. package/Libraries/NativeModules/specs/NativeDevSettings.js +3 -23
  178. package/Libraries/NativeModules/specs/NativeDeviceEventManager.js +3 -9
  179. package/Libraries/NativeModules/specs/NativeDialogManagerAndroid.js +3 -38
  180. package/Libraries/NativeModules/specs/NativeDialogManagerWindows.js +11 -0
  181. package/Libraries/NativeModules/specs/NativeLogBox.js +3 -10
  182. package/Libraries/NativeModules/specs/NativeRedBox.js +4 -11
  183. package/Libraries/NativeModules/specs/NativeSourceCode.js +2 -25
  184. package/Libraries/Network/FormData.js +3 -1
  185. package/Libraries/Network/NativeNetworkingAndroid.js +4 -28
  186. package/Libraries/Network/NativeNetworkingIOS.js +4 -28
  187. package/Libraries/NewAppScreen/components/DebugInstructions.windows.js +4 -2
  188. package/Libraries/NewAppScreen/components/ReloadInstructions.windows.js +3 -1
  189. package/Libraries/Performance/NativeJSCSamplingProfiler.js +3 -9
  190. package/Libraries/PermissionsAndroid/NativePermissionsAndroid.js +4 -68
  191. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +3 -3
  192. package/Libraries/Pressability/Pressability.js +12 -2
  193. package/Libraries/Pressability/Pressability.windows.js +13 -3
  194. package/Libraries/Pressability/usePressability.js +7 -0
  195. package/Libraries/PushNotificationIOS/NativePushNotificationManagerIOS.js +4 -70
  196. package/Libraries/PushNotificationIOS/PushNotificationIOS.js +45 -39
  197. package/Libraries/ReactNative/AppContainer-dev.js +211 -0
  198. package/Libraries/ReactNative/AppContainer-prod.js +53 -0
  199. package/Libraries/ReactNative/AppContainer.js +6 -149
  200. package/Libraries/ReactNative/AppRegistry.js +3 -1
  201. package/Libraries/ReactNative/BridgelessUIManager.js +375 -128
  202. package/Libraries/ReactNative/FabricUIManager.js +6 -0
  203. package/Libraries/ReactNative/NativeHeadlessJsTaskSupport.js +3 -10
  204. package/Libraries/ReactNative/NativeI18nManager.js +3 -18
  205. package/Libraries/ReactNative/NativeUIManager.js +4 -112
  206. package/Libraries/ReactNative/PaperUIManager.js +8 -7
  207. package/Libraries/ReactNative/PaperUIManager.windows.js +29 -8
  208. package/Libraries/ReactNative/ReactFabricInternals.js +1 -1
  209. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +24 -5
  210. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +0 -45
  211. package/Libraries/ReactNative/RendererImplementation.js +11 -0
  212. package/Libraries/ReactNative/UIManager.d.ts +11 -34
  213. package/Libraries/ReactNative/UIManager.js +2 -23
  214. package/Libraries/ReactNative/UIManagerProperties.js +0 -2
  215. package/Libraries/ReactNative/__mocks__/FabricUIManager.js +23 -1
  216. package/Libraries/ReactNative/getNativeComponentAttributes.js +5 -1
  217. package/Libraries/ReactNative/renderApplication.js +9 -6
  218. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +6 -1
  219. package/Libraries/Renderer/implementations/ReactFabric-dev.js +24771 -21123
  220. package/Libraries/Renderer/implementations/ReactFabric-prod.js +4160 -3109
  221. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +4384 -3322
  222. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +25194 -21398
  223. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +3763 -2636
  224. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +4027 -2867
  225. package/Libraries/Renderer/shims/ReactNativeTypes.js +8 -9
  226. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +7 -12
  227. package/Libraries/Settings/NativeSettingsManager.js +4 -16
  228. package/Libraries/Share/NativeShareModule.js +3 -13
  229. package/Libraries/StyleSheet/PlatformColorValueTypes.windows.js +1 -1
  230. package/Libraries/StyleSheet/StyleSheet.d.ts +1 -20
  231. package/Libraries/StyleSheet/StyleSheet.js +5 -28
  232. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +51 -7
  233. package/Libraries/StyleSheet/StyleSheetTypes.js +19 -11
  234. package/Libraries/StyleSheet/flattenStyle.js +2 -2
  235. package/Libraries/StyleSheet/normalizeColor.js +1 -1
  236. package/Libraries/StyleSheet/processAspectRatio.js +1 -1
  237. package/Libraries/StyleSheet/processFontVariant.js +1 -1
  238. package/Libraries/Text/Text.js +0 -6
  239. package/Libraries/Text/Text.windows.js +0 -6
  240. package/Libraries/Text/TextAncestor.js +2 -3
  241. package/Libraries/TurboModule/samples/NativeSampleTurboModule.js +4 -41
  242. package/Libraries/Types/ReactDevToolsTypes.js +58 -0
  243. package/Libraries/Types/UIManagerJSInterface.js +16 -0
  244. package/Libraries/Utilities/DebugEnvironment.js +1 -4
  245. package/Libraries/Utilities/Dimensions.js +8 -16
  246. package/Libraries/Utilities/GlobalPerformanceLogger.js +1 -2
  247. package/Libraries/Utilities/NativeAppearance.js +3 -26
  248. package/Libraries/Utilities/NativeDevLoadingView.js +3 -14
  249. package/Libraries/Utilities/NativeDeviceInfo.js +2 -47
  250. package/Libraries/Utilities/NativePlatformConstantsAndroid.js +3 -34
  251. package/Libraries/Utilities/NativePlatformConstantsIOS.js +3 -26
  252. package/Libraries/Utilities/NativePlatformConstantsWin.js +3 -23
  253. package/Libraries/Utilities/PixelRatio.d.ts +4 -4
  254. package/Libraries/Utilities/Platform.android.js +4 -0
  255. package/Libraries/Utilities/Platform.d.ts +3 -0
  256. package/Libraries/Utilities/Platform.flow.js +7 -0
  257. package/Libraries/Utilities/Platform.flow.windows.js +9 -0
  258. package/Libraries/Utilities/Platform.ios.js +11 -0
  259. package/Libraries/Utilities/Platform.windows.js +6 -0
  260. package/Libraries/Utilities/binaryToBase64.js +1 -1
  261. package/Libraries/Utilities/codegenNativeComponent.js +4 -6
  262. package/Libraries/Utilities/createPerformanceLogger.js +2 -74
  263. package/Libraries/Utilities/useMergeRefs.js +5 -9
  264. package/Libraries/Vibration/NativeVibration.js +3 -14
  265. package/Libraries/WebSocket/NativeWebSocketModule.js +4 -25
  266. package/Libraries/YellowBox/YellowBoxDeprecated.js +1 -1
  267. package/Libraries/vendor/emitter/EventEmitter.js +1 -0
  268. package/Microsoft.ReactNative/AsynchronousEventBeat.cpp +50 -0
  269. package/Microsoft.ReactNative/AsynchronousEventBeat.h +23 -0
  270. package/Microsoft.ReactNative/Base/CoreUIManagers.cpp +4 -0
  271. package/Microsoft.ReactNative/Base/CxxReactIncludes.h +1 -1
  272. package/Microsoft.ReactNative/Base/FollyIncludes.h +2 -2
  273. package/Microsoft.ReactNative/ComponentView.idl +106 -0
  274. package/Microsoft.ReactNative/Composition.Input.idl +16 -2
  275. package/Microsoft.ReactNative/CompositionComponentView.idl +117 -0
  276. package/Microsoft.ReactNative/CompositionContext.idl +1 -1
  277. package/Microsoft.ReactNative/CompositionRootView.idl +8 -0
  278. package/Microsoft.ReactNative/CompositionSwitcher.idl +25 -14
  279. package/Microsoft.ReactNative/DevMenuControl.idl +0 -3
  280. package/Microsoft.ReactNative/DevMenuControl.xaml +0 -15
  281. package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.cpp +189 -0
  282. package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.h +80 -0
  283. package/Microsoft.ReactNative/Fabric/AbiShadowNode.cpp +83 -0
  284. package/Microsoft.ReactNative/Fabric/AbiShadowNode.h +83 -0
  285. package/Microsoft.ReactNative/Fabric/AbiState.cpp +71 -0
  286. package/Microsoft.ReactNative/Fabric/AbiState.h +38 -0
  287. package/Microsoft.ReactNative/Fabric/AbiViewComponentDescriptor.cpp +48 -19
  288. package/Microsoft.ReactNative/Fabric/AbiViewComponentDescriptor.h +8 -16
  289. package/Microsoft.ReactNative/Fabric/AbiViewProps.cpp +97 -0
  290. package/Microsoft.ReactNative/Fabric/AbiViewProps.h +39 -0
  291. package/Microsoft.ReactNative/Fabric/AbiViewShadowNode.cpp +90 -0
  292. package/Microsoft.ReactNative/Fabric/AbiViewShadowNode.h +87 -0
  293. package/Microsoft.ReactNative/Fabric/ComponentView.cpp +340 -0
  294. package/Microsoft.ReactNative/Fabric/ComponentView.h +130 -64
  295. package/Microsoft.ReactNative/Fabric/Composition/ActivityIndicatorComponentView.cpp +48 -24
  296. package/Microsoft.ReactNative/Fabric/Composition/ActivityIndicatorComponentView.h +18 -14
  297. package/Microsoft.ReactNative/Fabric/Composition/ComponentViewRegistry.cpp +42 -27
  298. package/Microsoft.ReactNative/Fabric/Composition/ComponentViewRegistry.h +3 -1
  299. package/Microsoft.ReactNative/Fabric/Composition/Composition.Input.cpp +123 -28
  300. package/Microsoft.ReactNative/Fabric/Composition/Composition.Input.h +69 -13
  301. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.cpp +651 -284
  302. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.h +7 -7
  303. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper_emptyimpl.cpp +9 -9
  304. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +120 -31
  305. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.h +12 -2
  306. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +308 -129
  307. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.h +34 -6
  308. package/Microsoft.ReactNative/Fabric/Composition/CompositionHelpers.h +2 -1
  309. package/Microsoft.ReactNative/Fabric/Composition/CompositionHwndHost.cpp +61 -54
  310. package/Microsoft.ReactNative/Fabric/Composition/CompositionHwndHost.h +0 -9
  311. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootAutomationProvider.cpp +99 -30
  312. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootAutomationProvider.h +4 -3
  313. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootView.cpp +273 -28
  314. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootView.h +28 -3
  315. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootView_emptyimpl.cpp +7 -3
  316. package/Microsoft.ReactNative/Fabric/Composition/CompositionUIService.cpp +4 -0
  317. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +479 -280
  318. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.h +133 -79
  319. package/Microsoft.ReactNative/Fabric/Composition/DebuggingOverlayComponentView.cpp +113 -0
  320. package/Microsoft.ReactNative/Fabric/Composition/DebuggingOverlayComponentView.h +39 -0
  321. package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.cpp +61 -41
  322. package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.h +19 -14
  323. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentDescriptor.h +39 -0
  324. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.cpp +343 -0
  325. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.h +67 -0
  326. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewShadowNode.cpp +18 -0
  327. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewShadowNode.h +39 -0
  328. package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +53 -186
  329. package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.h +20 -12
  330. package/Microsoft.ReactNative/Fabric/Composition/ReactCompositionViewComponentBuilder.cpp +59 -150
  331. package/Microsoft.ReactNative/Fabric/Composition/ReactCompositionViewComponentBuilder.h +27 -76
  332. package/Microsoft.ReactNative/Fabric/Composition/RootComponentView.cpp +81 -32
  333. package/Microsoft.ReactNative/Fabric/Composition/RootComponentView.h +27 -14
  334. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +707 -64
  335. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.h +47 -26
  336. package/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.cpp +225 -125
  337. package/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.h +34 -21
  338. package/Microsoft.ReactNative/Fabric/Composition/TextDrawing.cpp +179 -0
  339. package/Microsoft.ReactNative/Fabric/Composition/TextDrawing.h +25 -0
  340. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentDescriptor.h +110 -115
  341. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +228 -79
  342. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.h +43 -22
  343. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputEventEmitter.cpp +18 -0
  344. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputEventEmitter.h +12 -0
  345. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputProps.h +5 -5
  346. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.cpp +5 -1
  347. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.h +1 -2
  348. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputState.cpp +4 -44
  349. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputState.h +11 -9
  350. package/Microsoft.ReactNative/Fabric/Composition/Theme.cpp +550 -0
  351. package/Microsoft.ReactNative/Fabric/Composition/Theme.h +73 -0
  352. package/Microsoft.ReactNative/Fabric/Composition/Theme_emptyimpl.cpp +85 -0
  353. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +48 -26
  354. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +6 -2
  355. package/Microsoft.ReactNative/Fabric/Composition/UnimplementedNativeViewComponentView.cpp +30 -65
  356. package/Microsoft.ReactNative/Fabric/Composition/UnimplementedNativeViewComponentView.h +16 -25
  357. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +72 -88
  358. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +5 -2
  359. package/Microsoft.ReactNative/Fabric/IComponentViewRegistry.h +3 -2
  360. package/Microsoft.ReactNative/Fabric/ReactNativeConfigProperties.cpp +6 -6
  361. package/Microsoft.ReactNative/Fabric/ReactNativeConfigProperties.h +2 -2
  362. package/Microsoft.ReactNative/Fabric/ReactTaggedView.h +12 -7
  363. package/Microsoft.ReactNative/Fabric/WindowsComponentDescriptorRegistry.cpp +28 -19
  364. package/Microsoft.ReactNative/Fabric/WindowsComponentDescriptorRegistry.h +5 -0
  365. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewEventEmitter.cpp +0 -2
  366. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewTraitsInitializer.h +5 -1
  367. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/WindowsViewEvents.h +2 -4
  368. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/Float.h +20 -0
  369. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/HostPlatformColor.h +86 -0
  370. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/PlatformColorParser.h +38 -0
  371. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/{Color.cpp → PlatformColorUtils.cpp} +7 -77
  372. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/PlatformColorUtils.h +12 -0
  373. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.cpp +1 -0
  374. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.h +2 -0
  375. package/Microsoft.ReactNative/IReactCompositionViewComponentBuilder.idl +6 -87
  376. package/Microsoft.ReactNative/IReactContext.idl +3 -0
  377. package/Microsoft.ReactNative/IReactViewComponentBuilder.idl +71 -1
  378. package/Microsoft.ReactNative/JsiApi.cpp +17 -7
  379. package/Microsoft.ReactNative/JsiApi.h +2 -2
  380. package/Microsoft.ReactNative/JsiApi.idl +5 -4
  381. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +13 -22
  382. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +6 -2
  383. package/Microsoft.ReactNative/Modules/AccessibilityInfoModule.h +1 -1
  384. package/Microsoft.ReactNative/Modules/AlertModule.h +2 -2
  385. package/Microsoft.ReactNative/Modules/Animated/PropsAnimatedNode.cpp +12 -8
  386. package/Microsoft.ReactNative/Modules/Animated/PropsAnimatedNode.h +1 -1
  387. package/Microsoft.ReactNative/Modules/AppStateModule.h +2 -2
  388. package/Microsoft.ReactNative/Modules/AppThemeModuleUwp.cpp +5 -3
  389. package/Microsoft.ReactNative/Modules/AppThemeModuleUwp.h +4 -4
  390. package/Microsoft.ReactNative/Modules/AppearanceModule.cpp +10 -1
  391. package/Microsoft.ReactNative/Modules/ClipboardModule.h +1 -1
  392. package/Microsoft.ReactNative/Modules/DeviceInfoModule.cpp +71 -38
  393. package/Microsoft.ReactNative/Modules/DeviceInfoModule.h +5 -5
  394. package/Microsoft.ReactNative/Modules/ExceptionsManager.cpp +110 -0
  395. package/Microsoft.ReactNative/Modules/ExceptionsManager.h +54 -0
  396. package/Microsoft.ReactNative/Modules/ImageViewManagerModule.h +11 -10
  397. package/Microsoft.ReactNative/Modules/LinkingManagerModule.h +8 -6
  398. package/Microsoft.ReactNative/Modules/LogBoxModule.h +3 -3
  399. package/Microsoft.ReactNative/Modules/NativeUIManager.cpp +5 -28
  400. package/Microsoft.ReactNative/Modules/NativeUIManager.h +1 -1
  401. package/Microsoft.ReactNative/Modules/PaperUIManagerModule.cpp +8 -5
  402. package/Microsoft.ReactNative/Modules/PaperUIManagerModule.h +3 -3
  403. package/Microsoft.ReactNative/Modules/PlatformConstantsWinModule.cpp +49 -0
  404. package/Microsoft.ReactNative/Modules/PlatformConstantsWinModule.h +18 -0
  405. package/Microsoft.ReactNative/Modules/SourceCode.cpp +31 -0
  406. package/Microsoft.ReactNative/Modules/SourceCode.h +28 -0
  407. package/Microsoft.ReactNative/Modules/StatusBarManager.h +12 -0
  408. package/Microsoft.ReactNative/Modules/Timing.cpp +325 -0
  409. package/Microsoft.ReactNative/Modules/Timing.h +121 -0
  410. package/Microsoft.ReactNative/QuirkSettings.cpp +32 -0
  411. package/Microsoft.ReactNative/QuirkSettings.h +9 -0
  412. package/Microsoft.ReactNative/QuirkSettings.idl +6 -0
  413. package/Microsoft.ReactNative/ReactCoreInjection.cpp +15 -0
  414. package/Microsoft.ReactNative/ReactCoreInjection.h +4 -0
  415. package/Microsoft.ReactNative/ReactCoreInjection.idl +8 -0
  416. package/Microsoft.ReactNative/ReactHost/IReactInstance.h +1 -1
  417. package/Microsoft.ReactNative/ReactHost/MsoReactContext.cpp +1 -1
  418. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +556 -234
  419. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.h +36 -9
  420. package/Microsoft.ReactNative/ReactInstanceSettings.idl +3 -0
  421. package/Microsoft.ReactNative/ReactPointerEventArgs.cpp +8 -0
  422. package/Microsoft.ReactNative/ReactPointerEventArgs.h +4 -0
  423. package/Microsoft.ReactNative/ReactPointerEventArgs.idl +12 -0
  424. package/Microsoft.ReactNative/SchedulerSettings.cpp +23 -0
  425. package/Microsoft.ReactNative/SchedulerSettings.h +9 -1
  426. package/Microsoft.ReactNative/SynchronousEventBeat.cpp +41 -0
  427. package/Microsoft.ReactNative/SynchronousEventBeat.h +29 -0
  428. package/Microsoft.ReactNative/Theme.idl +57 -0
  429. package/Microsoft.ReactNative/Timer.cpp +63 -0
  430. package/Microsoft.ReactNative/{CoreAppPage.h → Timer.h} +12 -5
  431. package/Microsoft.ReactNative/Timer.idl +34 -0
  432. package/Microsoft.ReactNative/TurboModulesProvider.cpp +4 -0
  433. package/Microsoft.ReactNative/Utils/ImageUtils.cpp +37 -3
  434. package/Microsoft.ReactNative/Utils/ImageUtils.h +0 -1
  435. package/Microsoft.ReactNative/Utils/LocalBundleReader.cpp +11 -12
  436. package/Microsoft.ReactNative/Utils/LocalBundleReader.h +3 -3
  437. package/Microsoft.ReactNative/Utils/ThemeUtils.cpp +33 -0
  438. package/Microsoft.ReactNative/Utils/ThemeUtils.h +13 -0
  439. package/Microsoft.ReactNative/Utils/ValueUtils.cpp +0 -5
  440. package/Microsoft.ReactNative/Utils/ValueUtils.h +0 -3
  441. package/Microsoft.ReactNative/ViewProps.idl +17 -0
  442. package/Microsoft.ReactNative/Views/ActivityIndicatorViewManager.cpp +1 -0
  443. package/Microsoft.ReactNative/Views/DebuggingOverlayViewManager.cpp +54 -0
  444. package/Microsoft.ReactNative/Views/DebuggingOverlayViewManager.h +30 -0
  445. package/Microsoft.ReactNative/Views/DevMenu.cpp +1 -20
  446. package/Microsoft.ReactNative/Views/DynamicAutomationPeer.cpp +157 -0
  447. package/Microsoft.ReactNative/Views/DynamicAutomationPeer.h +5 -0
  448. package/Microsoft.ReactNative/Views/DynamicAutomationProperties.cpp +20 -0
  449. package/Microsoft.ReactNative/Views/DynamicAutomationProperties.h +4 -0
  450. package/Microsoft.ReactNative/Views/FlyoutViewManager.cpp +1 -5
  451. package/Microsoft.ReactNative/Views/FrameworkElementViewManager.cpp +137 -0
  452. package/Microsoft.ReactNative/Views/ICompositionRootView.h +0 -1
  453. package/Microsoft.ReactNative/Views/Image/ImageViewManager.cpp +0 -5
  454. package/Microsoft.ReactNative/Views/PopupViewManager.cpp +1 -5
  455. package/Microsoft.ReactNative/Views/ShadowNodeBase.cpp +11 -0
  456. package/Microsoft.ReactNative/Views/ShadowNodeBase.h +3 -4
  457. package/Microsoft.ReactNative/Views/TextInputViewManager.cpp +0 -6
  458. package/Microsoft.ReactNative/Views/TextViewManager.cpp +0 -11
  459. package/Microsoft.ReactNative/Views/TouchEventHandler.cpp +1 -1
  460. package/Microsoft.ReactNative/Views/UnimplementedViewManager.cpp +79 -0
  461. package/Microsoft.ReactNative/Views/UnimplementedViewManager.h +27 -0
  462. package/Microsoft.ReactNative/Views/ViewManagerBase.cpp +46 -0
  463. package/Microsoft.ReactNative/Views/ViewManagerBase.h +1 -1
  464. package/Microsoft.ReactNative/Views/cppwinrt/DynamicAutomationPeer.idl +77 -2
  465. package/Microsoft.ReactNative/microsoft.reactnative.def +0 -3
  466. package/Microsoft.ReactNative/packages.lock.json +9 -6
  467. package/{Shared/Composition → Microsoft.ReactNative.Cxx}/AutoDraw.h +2 -0
  468. package/{Shared/Composition → Microsoft.ReactNative.Cxx}/CompositionSwitcher.interop.h +4 -10
  469. package/Microsoft.ReactNative.Cxx/CppWinRTIncludes.h +0 -5
  470. package/Microsoft.ReactNative.Cxx/DesktopWindowBridge.h +5 -0
  471. package/Microsoft.ReactNative.Cxx/JSI/JsiAbiApi.cpp +19 -10
  472. package/Microsoft.ReactNative.Cxx/JSI/JsiAbiApi.h +2 -0
  473. package/Microsoft.ReactNative.Cxx/JSValueComposition.h +22 -0
  474. package/Microsoft.ReactNative.Cxx/JSValueReader.h +19 -0
  475. package/Microsoft.ReactNative.Cxx/JSValueXaml.h +1 -1
  476. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +6 -4
  477. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems.filters +0 -1
  478. package/Microsoft.ReactNative.Cxx/NativeModules.h +15 -15
  479. package/Microsoft.ReactNative.Cxx/TurboModuleProvider.cpp +1 -1
  480. package/Microsoft.ReactNative.Managed/ReactSettingsSnapshot.cs +2 -0
  481. package/Microsoft.ReactNative.Managed/packages.lock.json +6 -3
  482. package/Microsoft.ReactNative.Managed.CodeGen/Microsoft.ReactNative.Managed.CodeGen.csproj +0 -1
  483. package/Mso/future/details/executor.h +1 -1
  484. package/Mso/src/debugAssertApi/debugAssertApi.cpp +1 -1
  485. package/PropertySheets/External/Microsoft.ReactNative.Composition.Common.props +8 -0
  486. package/PropertySheets/External/Microsoft.ReactNative.Composition.CppLib.props +24 -0
  487. package/PropertySheets/External/Microsoft.ReactNative.Composition.CppLib.targets +20 -0
  488. package/PropertySheets/External/Microsoft.ReactNative.Cpp.Dependencies.props +1 -1
  489. package/PropertySheets/External/Microsoft.ReactNative.WindowsSdk.Default.props +2 -0
  490. package/PropertySheets/Generated/PackageVersion.g.props +4 -4
  491. package/PropertySheets/JSEngine.props +0 -8
  492. package/PropertySheets/React.Cpp.props +14 -3
  493. package/PropertySheets/ReactCommunity.cpp.props +2 -2
  494. package/PropertySheets/Release.props +0 -1
  495. package/PropertySheets/WinUI.props +21 -1
  496. package/PropertySheets/x64.props +3 -0
  497. package/PropertySheets/x86.props +3 -0
  498. package/ReactCommon/ReactCommon.vcxproj +13 -8
  499. package/ReactCommon/ReactCommon.vcxproj.filters +12 -1
  500. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +114 -19
  501. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.cpp +66 -0
  502. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleBinding.cpp +114 -52
  503. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleUtils.h +13 -15
  504. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/scrollview/ScrollViewProps.cpp +535 -0
  505. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/ReactInstance.cpp +437 -0
  506. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/utils/jsi-utils.cpp +39 -0
  507. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/utils/jsi-utils.h +31 -0
  508. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/YGEnums.h +19 -24
  509. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/algorithm/CalculateLayout.cpp +600 -980
  510. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/enums/ExperimentalFeature.h +5 -11
  511. package/ReactCommon/cgmanifest.json +1 -1
  512. package/Scripts/EnableInternalWinAppSDKFeed.ps1 +21 -0
  513. package/Scripts/IntegrationTests.ps1 +26 -15
  514. package/Scripts/Microsoft.ReactNative.targets +0 -6
  515. package/Scripts/OfficeReact.Win32.nuspec +1 -2
  516. package/Scripts/TestServers.ps1 +2 -28
  517. package/Scripts/Tfs/Start-TestServers.ps1 +1 -21
  518. package/Scripts/Tfs/Stop-TestServers.ps1 +0 -5
  519. package/Scripts/rnw-dependencies.ps1 +38 -67
  520. package/Shared/CreateInstance.h +25 -0
  521. package/Shared/DevServerHelper.h +0 -3
  522. package/Shared/DevSettings.h +9 -0
  523. package/Shared/HermesRuntimeHolder.cpp +17 -0
  524. package/Shared/HermesRuntimeHolder.h +17 -0
  525. package/Shared/HermesSamplingProfiler.cpp +12 -10
  526. package/Shared/HermesSamplingProfiler.h +5 -4
  527. package/Shared/IDevSupportManager.h +4 -2
  528. package/Shared/InstanceManager.cpp +13 -11
  529. package/Shared/InstanceManager.h +8 -18
  530. package/Shared/JSI/ChakraRuntime.cpp +66 -9
  531. package/Shared/JSI/ChakraRuntime.h +8 -0
  532. package/Shared/JSI/JSExecutorFactoryDelegate.h +12 -0
  533. package/Shared/JSI/JSExecutorFactorySettings.cpp +30 -0
  534. package/Shared/JSI/JSExecutorFactorySettings.h +21 -0
  535. package/Shared/Modules/BlobModule.h +1 -1
  536. package/Shared/Modules/FileReaderModule.h +1 -1
  537. package/Shared/Modules/HttpModule.h +1 -1
  538. package/Shared/Modules/WebSocketTurboModule.h +1 -1
  539. package/Shared/OInstance.cpp +212 -165
  540. package/Shared/OInstance.h +19 -0
  541. package/Shared/Shared.vcxitems +134 -50
  542. package/Shared/Shared.vcxitems.filters +81 -24
  543. package/Shared/Utils.cpp +12 -10
  544. package/Shared/Utils.h +2 -2
  545. package/Shared/WebSocketJSExecutorFactory.h +1 -0
  546. package/codegen/NativeBugReportingSpec.g.h +0 -6
  547. package/codegen/NativeFrameRateLoggerSpec.g.h +0 -2
  548. package/codegen/NativeImageLoaderAndroidSpec.g.h +10 -23
  549. package/codegen/NativePerformanceObserverSpec.g.h +6 -0
  550. package/codegen/NativePlatformConstantsIOSSpec.g.h +2 -0
  551. package/codegen/NativePlatformConstantsWinSpec.g.h +17 -0
  552. package/codegen/NativePushNotificationManagerIOSSpec.g.h +8 -6
  553. package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +88 -0
  554. package/codegen/NativeUIManagerSpec.g.h +83 -95
  555. package/codegen/react/components/rnwcore/ComponentDescriptors.h +9 -7
  556. package/codegen/react/components/rnwcore/EventEmitters.cpp +35 -56
  557. package/codegen/react/components/rnwcore/EventEmitters.h +58 -85
  558. package/codegen/react/components/rnwcore/Props.cpp +53 -95
  559. package/codegen/react/components/rnwcore/Props.h +188 -239
  560. package/codegen/react/components/rnwcore/ShadowNodes.cpp +5 -7
  561. package/codegen/react/components/rnwcore/ShadowNodes.h +27 -29
  562. package/codegen/react/components/rnwcore/States.cpp +3 -5
  563. package/codegen/react/components/rnwcore/States.h +17 -19
  564. package/codegen/rnwcoreJSI-generated.cpp +1442 -1398
  565. package/codegen/rnwcoreJSI.h +6066 -3593
  566. package/index.js +61 -99
  567. package/index.windows.js +60 -102
  568. package/jest/assetFileTransformer.js +1 -1
  569. package/jest/local-setup.js +0 -5
  570. package/jest/mockModal.js +2 -1
  571. package/jest/mockScrollView.js +1 -2
  572. package/jest/renderer.js +1 -1
  573. package/jest/setup.js +6 -3
  574. package/just-task.js +1 -1
  575. package/package.json +31 -29
  576. package/{Libraries/Core → src/private/core}/setUpDOM.js +2 -2
  577. package/src/private/featureflags/NativeReactNativeFeatureFlags.js +42 -0
  578. package/src/private/featureflags/ReactNativeFeatureFlags.js +140 -0
  579. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +84 -0
  580. package/src/private/featureflags/__tests__/ReactNativeFeatureFlags-test.js +92 -0
  581. package/src/private/specs/components/ActivityIndicatorViewNativeComponent.js +53 -0
  582. package/src/private/specs/components/AndroidDrawerLayoutNativeComponent.js +124 -0
  583. package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +26 -0
  584. package/src/private/specs/components/AndroidSwipeRefreshLayoutNativeComponent.js +74 -0
  585. package/src/private/specs/components/AndroidSwitchNativeComponent.js +62 -0
  586. package/src/private/specs/components/DebuggingOverlayNativeComponent.js +61 -0
  587. package/src/private/specs/components/ProgressBarAndroidNativeComponent.js +36 -0
  588. package/src/private/specs/components/PullToRefreshViewNativeComponent.js +71 -0
  589. package/src/private/specs/components/RCTInputAccessoryViewNativeComponent.js +26 -0
  590. package/src/private/specs/components/RCTModalHostViewNativeComponent.js +139 -0
  591. package/src/private/specs/components/RCTSafeAreaViewNativeComponent.js +25 -0
  592. package/src/private/specs/components/SwitchNativeComponent.js +61 -0
  593. package/src/private/specs/components/UnimplementedNativeViewNativeComponent.js +26 -0
  594. package/src/private/specs/modules/NativeAccessibilityInfo.js +33 -0
  595. package/src/private/specs/modules/NativeAccessibilityManager.js +66 -0
  596. package/src/private/specs/modules/NativeActionSheetManager.js +54 -0
  597. package/src/private/specs/modules/NativeAlertManager.js +35 -0
  598. package/src/private/specs/modules/NativeAnimatedModule.js +77 -0
  599. package/src/private/specs/modules/NativeAnimatedTurboModule.js +78 -0
  600. package/src/private/specs/modules/NativeAnimationsDebugModule.js +20 -0
  601. package/src/private/specs/modules/NativeAppState.js +33 -0
  602. package/src/private/specs/modules/NativeAppTheme.js +33 -0
  603. package/src/private/specs/modules/NativeAppearance.js +36 -0
  604. package/src/private/specs/modules/NativeBlobModule.js +59 -0
  605. package/src/private/specs/modules/NativeBugReporting.js +20 -0
  606. package/src/private/specs/modules/NativeClipboard.js +21 -0
  607. package/src/private/specs/modules/NativeDevLoadingView.js +24 -0
  608. package/src/private/specs/modules/NativeDevMenu.js +23 -0
  609. package/src/private/specs/modules/NativeDevSettings.js +33 -0
  610. package/src/private/specs/modules/NativeDevToolsSettingsManager.js +24 -0
  611. package/src/private/specs/modules/NativeDeviceEventManager.js +19 -0
  612. package/src/private/specs/modules/NativeDeviceInfo.js +58 -0
  613. package/src/private/specs/modules/NativeDialogManagerAndroid.js +48 -0
  614. package/{Libraries/Alert → src/private/specs/modules}/NativeDialogManagerWindows.js +5 -4
  615. package/src/private/specs/modules/NativeExceptionsManager.js +103 -0
  616. package/src/private/specs/modules/NativeFileReaderModule.js +22 -0
  617. package/src/private/specs/modules/NativeFrameRateLogger.js +22 -0
  618. package/src/private/specs/modules/NativeHeadlessJsTaskSupport.js +20 -0
  619. package/src/private/specs/modules/NativeI18nManager.js +28 -0
  620. package/src/private/specs/modules/NativeImageEditor.js +52 -0
  621. package/src/private/specs/modules/NativeImageLoaderAndroid.js +30 -0
  622. package/src/private/specs/modules/NativeImageLoaderIOS.js +37 -0
  623. package/src/private/specs/modules/NativeImageStoreAndroid.js +26 -0
  624. package/src/private/specs/modules/NativeImageStoreIOS.js +33 -0
  625. package/src/private/specs/modules/NativeIntentAndroid.js +30 -0
  626. package/src/private/specs/modules/NativeIntersectionObserver.js +41 -0
  627. package/src/private/specs/modules/NativeJSCHeapCapture.js +19 -0
  628. package/src/private/specs/modules/NativeJSCSamplingProfiler.js +19 -0
  629. package/src/private/specs/modules/NativeKeyboardObserver.js +20 -0
  630. package/src/private/specs/modules/NativeLinkingManager.js +27 -0
  631. package/src/private/specs/modules/NativeLogBox.js +20 -0
  632. package/src/private/specs/modules/NativeModalManager.js +21 -0
  633. package/src/private/specs/modules/NativeMutationObserver.js +58 -0
  634. package/src/private/specs/modules/NativeNetworkingAndroid.js +37 -0
  635. package/src/private/specs/modules/NativeNetworkingIOS.js +37 -0
  636. package/src/private/specs/modules/NativePermissionsAndroid.js +77 -0
  637. package/src/private/specs/modules/NativePlatformConstantsAndroid.js +44 -0
  638. package/src/private/specs/modules/NativePlatformConstantsIOS.js +37 -0
  639. package/src/private/specs/modules/NativePlatformConstantsWin.js +38 -0
  640. package/src/private/specs/modules/NativePushNotificationManagerIOS.js +107 -0
  641. package/src/private/specs/modules/NativeRedBox.js +20 -0
  642. package/src/private/specs/modules/NativeSampleTurboModule.js +53 -0
  643. package/src/private/specs/modules/NativeSegmentFetcher.js +28 -0
  644. package/src/private/specs/modules/NativeSettingsManager.js +25 -0
  645. package/src/private/specs/modules/NativeShareModule.js +23 -0
  646. package/src/private/specs/modules/NativeSoundManager.js +22 -0
  647. package/src/private/specs/modules/NativeSourceCode.js +36 -0
  648. package/src/private/specs/modules/NativeStatusBarManagerAndroid.js +68 -0
  649. package/src/private/specs/modules/NativeStatusBarManagerIOS.js +89 -0
  650. package/src/private/specs/modules/NativeTiming.js +26 -0
  651. package/src/private/specs/modules/NativeToastAndroid.js +38 -0
  652. package/src/private/specs/modules/NativeUIManager.js +118 -0
  653. package/src/private/specs/modules/NativeVibration.js +24 -0
  654. package/src/private/specs/modules/NativeWebSocketModule.js +34 -0
  655. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReactNativeElement.js +6 -6
  656. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyCharacterData.js +2 -2
  657. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyElement.js +5 -5
  658. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyNode.js +19 -10
  659. package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/DOMRectList.js +1 -1
  660. package/src/private/webapis/dom/oldstylecollections/__tests__/DOMRectList-test.js +85 -0
  661. package/src/private/webapis/dom/oldstylecollections/__tests__/HTMLCollection-test.js +80 -0
  662. package/src/private/webapis/dom/oldstylecollections/__tests__/NodeList-test.js +161 -0
  663. package/{Libraries/WebPerformance → src/private/webapis/performance}/NativePerformance.js +2 -2
  664. package/{Libraries/WebPerformance → src/private/webapis/performance}/NativePerformanceObserver.js +3 -2
  665. package/{Libraries/WebPerformance → src/private/webapis/performance}/Performance.js +2 -2
  666. package/{Libraries/WebPerformance → src/private/webapis/performance}/PerformanceEventTiming.js +1 -1
  667. package/{Libraries/WebPerformance → src/private/webapis/performance}/PerformanceObserver.js +21 -2
  668. package/{Libraries/WebPerformance → src/private/webapis/performance}/RawPerformanceEntry.js +1 -1
  669. package/{Libraries/WebPerformance → src/private/webapis/performance}/__mocks__/NativePerformanceObserver.js +9 -0
  670. package/src/private/webapis/performance/__tests__/EventCounts-test.js +116 -0
  671. package/src/private/webapis/performance/__tests__/NativePerformanceMock-test.js +82 -0
  672. package/src/private/webapis/performance/__tests__/NativePerformanceObserverMock-test.js +108 -0
  673. package/src/private/webapis/performance/__tests__/Performance-test.js +117 -0
  674. package/src/private/webapis/performance/__tests__/PerformanceObserver-test.js +208 -0
  675. package/template/cpp-app/src/App.cpp +2 -2
  676. package/template/cs-app/src/App.xaml.cs +2 -2
  677. package/templates/cpp-app/jest.config.windows.js +3 -0
  678. package/templates/cpp-app/metro.config.js +0 -2
  679. package/templates/cpp-app/template.config.js +24 -9
  680. package/templates/cpp-app/windows/ExperimentalFeatures.props +1 -1
  681. package/templates/cpp-app/windows/MyApp/AutolinkedNativeModules.g.cpp +13 -0
  682. package/templates/cpp-app/windows/MyApp/AutolinkedNativeModules.g.h +10 -0
  683. package/templates/cpp-app/windows/MyApp/MyApp.cpp +134 -249
  684. package/templates/cpp-app/windows/MyApp/MyApp.vcxproj +12 -11
  685. package/templates/cpp-app/windows/MyApp/MyApp.vcxproj.filters +6 -3
  686. package/templates/cpp-app/windows/MyApp/pch.h +12 -9
  687. package/templates/cpp-app/windows/MyApp/resource.h +0 -1
  688. package/templates/cpp-app/windows/MyApp.sln +26 -26
  689. package/templates/cpp-lib/example/metro.config.js +74 -0
  690. package/templates/cpp-lib/template.config.js +235 -0
  691. package/templates/cpp-lib/windows/ExperimentalFeatures.props +11 -0
  692. package/templates/cpp-lib/windows/MyLib/MyLib.cpp +18 -0
  693. package/templates/cpp-lib/windows/MyLib/MyLib.def +3 -0
  694. package/templates/cpp-lib/windows/MyLib/MyLib.h +31 -0
  695. package/templates/cpp-lib/windows/MyLib/MyLib.rc +0 -0
  696. package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj +148 -0
  697. package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj.filters +44 -0
  698. package/templates/cpp-lib/windows/MyLib/ReactPackageProvider.cpp +20 -0
  699. package/templates/cpp-lib/windows/MyLib/ReactPackageProvider.h +24 -0
  700. package/templates/cpp-lib/windows/MyLib/ReactPackageProvider.idl +9 -0
  701. package/templates/cpp-lib/windows/MyLib/pch.cpp +1 -0
  702. package/templates/cpp-lib/windows/MyLib/pch.h +30 -0
  703. package/templates/cpp-lib/windows/MyLib/resource.h +5 -0
  704. package/templates/cpp-lib/windows/MyLib/targetver.h +8 -0
  705. package/templates/cpp-lib/windows/MyLib.sln +156 -0
  706. package/templates/cpp-lib/windows/_gitignore +41 -0
  707. package/templates/templateUtils.js +137 -0
  708. package/types/index.d.ts +1 -0
  709. package/types/modules/globals.d.ts +1 -0
  710. package/Folly/TEMP_UntilFollyUpdate/hash/Hash.h +0 -1016
  711. package/Libraries/Components/Button.flow.js +0 -265
  712. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.windows.js +0 -8
  713. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.windows.js +0 -14
  714. package/Libraries/Components/SafeAreaView/SafeAreaView.windows.js +0 -34
  715. package/Libraries/Components/ScrollView/ScrollView.windows.js +0 -1941
  716. package/Libraries/Components/ScrollView/ScrollViewViewConfig.js +0 -85
  717. package/Libraries/Components/ToastAndroid/ToastAndroid.windows.js +0 -45
  718. package/Libraries/Components/Touchable/Touchable.flow.js +0 -284
  719. package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlay.js +0 -189
  720. package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlayNativeComponent.js +0 -43
  721. package/Libraries/Image/Image.flow.js +0 -64
  722. package/Libraries/Inspector/DevtoolsOverlay.js +0 -223
  723. package/Libraries/Performance/QuickPerformanceLogger.js +0 -142
  724. package/Libraries/Settings/Settings.windows.js +0 -28
  725. package/Microsoft.ReactNative/CoreApp.cpp +0 -303
  726. package/Microsoft.ReactNative/CoreAppPage.cpp +0 -21
  727. package/Microsoft.ReactNative/CoreAppPage.idl +0 -12
  728. package/Microsoft.ReactNative/CoreAppPage.xaml +0 -14
  729. package/Microsoft.ReactNative/Fabric/Composition/AbiCompositionViewComponentView.cpp +0 -197
  730. package/Microsoft.ReactNative/Fabric/Composition/AbiCompositionViewComponentView.h +0 -84
  731. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rnwcore/EventEmitters.h +0 -5
  732. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rnwcore/Props.h +0 -5
  733. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rnwcore/ShadowNodes.h +0 -5
  734. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rnwcore/States.h +0 -5
  735. package/Microsoft.ReactNative/Fabric/platform/react/renderer/core/graphicsConversions.h +0 -245
  736. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/Color.h +0 -134
  737. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/conversions.h +0 -27
  738. package/Microsoft.ReactNative/Modules/TimingModule.cpp +0 -229
  739. package/Microsoft.ReactNative/Modules/TimingModule.h +0 -88
  740. package/Microsoft.ReactNative.Cxx/CoreApp.h +0 -60
  741. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/LongLivedObject.cpp +0 -60
  742. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/LongLivedObject.h +0 -60
  743. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleBinding.h +0 -63
  744. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/YogaLayoutableShadowNode.cpp +0 -1038
  745. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/YogaStylableProps.cpp +0 -503
  746. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/conversions.h +0 -895
  747. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/mapbuffer/MapBufferBuilder.cpp +0 -182
  748. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/mounting/ShadowTree.cpp +0 -543
  749. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/uimanager/UIManagerBinding.cpp +0 -1505
  750. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/bits/NumericBitfield.h +0 -67
  751. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/config/Config.h +0 -93
  752. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/node/LayoutResults.h +0 -88
  753. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/node/Node.cpp +0 -606
  754. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/node/Node.h +0 -344
  755. package/ReactCommon/Yoga.cpp +0 -961
  756. /package/{Libraries/DOM/Geometry → src/private/webapis/dom/geometry}/DOMRect.js +0 -0
  757. /package/{Libraries/DOM/Geometry → src/private/webapis/dom/geometry}/DOMRectReadOnly.js +0 -0
  758. /package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyText.js +0 -0
  759. /package/{Libraries/DOM/Nodes/Utilities → src/private/webapis/dom/nodes/utilities}/Traversal.js +0 -0
  760. /package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/ArrayLikeUtils.js +0 -0
  761. /package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/HTMLCollection.js +0 -0
  762. /package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/NodeList.js +0 -0
  763. /package/{Libraries/WebPerformance → src/private/webapis/performance}/EventCounts.js +0 -0
  764. /package/{Libraries/WebPerformance → src/private/webapis/performance}/MemoryInfo.js +0 -0
  765. /package/{Libraries/WebPerformance → src/private/webapis/performance}/PerformanceEntry.js +0 -0
  766. /package/{Libraries/WebPerformance → src/private/webapis/performance}/ReactNativeStartupTiming.js +0 -0
  767. /package/{Libraries/WebPerformance → src/private/webapis/performance}/__mocks__/NativePerformance.js +0 -0
@@ -30,24 +30,30 @@ bool IsMousePointerEvent(const facebook::react::PointerEvent &pointerEvent) {
30
30
  return pointerEvent.pointerId == MOUSE_POINTER_ID;
31
31
  }
32
32
 
33
- bool IsViewListeningToEvent(IComponentView *view, facebook::react::ViewEvents::Offset eventType) {
33
+ bool IsViewListeningToEvent(
34
+ const winrt::Microsoft::ReactNative::ComponentView &view,
35
+ facebook::react::ViewEvents::Offset eventType) {
34
36
  if (view) {
35
- auto const &viewProps = *std::static_pointer_cast<facebook::react::ViewProps const>(view->props());
37
+ auto const &viewProps = *std::static_pointer_cast<facebook::react::ViewProps const>(
38
+ winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(view)->props());
36
39
  return viewProps.events[eventType];
37
40
  }
38
41
  return false;
39
42
  }
40
43
 
41
- bool IsViewListeningToEvent(IComponentView *view, facebook::react::WindowsViewEvents::Offset eventType) {
44
+ bool IsViewListeningToEvent(
45
+ const winrt::Microsoft::ReactNative::ComponentView &view,
46
+ facebook::react::WindowsViewEvents::Offset eventType) {
42
47
  if (view) {
43
- auto const &viewProps = *std::static_pointer_cast<facebook::react::ViewProps const>(view->props());
48
+ auto const &viewProps = *std::static_pointer_cast<facebook::react::ViewProps const>(
49
+ winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(view)->props());
44
50
  return viewProps.windowsEvents[eventType];
45
51
  }
46
52
  return false;
47
53
  }
48
54
 
49
55
  bool IsAnyViewInPathListeningToEvent(
50
- std::vector<IComponentView *> &path,
56
+ std::vector<winrt::Microsoft::ReactNative::ComponentView> &path,
51
57
  facebook::react::ViewEvents::Offset eventType) {
52
58
  for (auto view : path) {
53
59
  if (IsViewListeningToEvent(view, eventType)) {
@@ -57,12 +63,14 @@ bool IsAnyViewInPathListeningToEvent(
57
63
  return false;
58
64
  }
59
65
 
60
- IComponentView *FindClosestFabricManagedTouchableView(IComponentView *componentView) {
61
- while (componentView) {
62
- if (componentView->eventEmitter()) {
63
- return componentView;
66
+ winrt::Microsoft::ReactNative::ComponentView FindClosestFabricManagedTouchableView(
67
+ const winrt::Microsoft::ReactNative::ComponentView &componentView) {
68
+ auto view = componentView;
69
+ while (view) {
70
+ if (winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(view)->eventEmitter()) {
71
+ return view;
64
72
  }
65
- componentView = componentView->parent();
73
+ view = view.Parent();
66
74
  }
67
75
  return nullptr;
68
76
  }
@@ -73,13 +81,15 @@ facebook::react::SharedEventEmitter EventEmitterForComponent(
73
81
  auto &registry = uimanager->GetViewRegistry();
74
82
 
75
83
  auto descriptor = registry.componentViewDescriptorWithTag(tag);
76
- auto view = std::static_pointer_cast<CompositionBaseComponentView>(descriptor.view);
77
- auto emitter = view->GetEventEmitter();
84
+ auto view = descriptor.view;
85
+ auto viewComponent = descriptor.view.as<winrt::Microsoft::ReactNative::Composition::implementation::ComponentView>();
86
+ auto emitter = viewComponent->GetEventEmitter();
78
87
  if (emitter)
79
88
  return emitter;
80
89
 
81
- for (IComponentView *it = view->parent(); it; it = it->parent()) {
82
- auto emitter = static_cast<CompositionBaseComponentView *>(it)->GetEventEmitter();
90
+ for (auto it = view.Parent(); it; it = it.Parent()) {
91
+ auto emitter =
92
+ it.as<winrt::Microsoft::ReactNative::Composition::implementation::ComponentView>()->GetEventEmitter();
83
93
  if (emitter)
84
94
  return emitter;
85
95
  }
@@ -157,7 +167,7 @@ CompositionEventHandler::CompositionEventHandler(
157
167
  return;
158
168
 
159
169
  auto pp = winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::PointerPoint>(
160
- args.CurrentPoint());
170
+ args.CurrentPoint(), m_compRootView.ScaleFactor());
161
171
  onPointerPressed(pp, args.KeyModifiers());
162
172
  });
163
173
 
@@ -169,7 +179,7 @@ CompositionEventHandler::CompositionEventHandler(
169
179
  return;
170
180
 
171
181
  auto pp = winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::PointerPoint>(
172
- args.CurrentPoint());
182
+ args.CurrentPoint(), m_compRootView.ScaleFactor());
173
183
  onPointerReleased(pp, args.KeyModifiers());
174
184
  });
175
185
 
@@ -177,10 +187,22 @@ CompositionEventHandler::CompositionEventHandler(
177
187
  winrt::Microsoft::UI::Input::InputPointerSource const &,
178
188
  winrt::Microsoft::UI::Input::PointerEventArgs const &args) {
179
189
  auto pp = winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::PointerPoint>(
180
- args.CurrentPoint());
190
+ args.CurrentPoint(), m_compRootView.ScaleFactor());
181
191
  onPointerMoved(pp, args.KeyModifiers());
182
192
  });
183
193
 
194
+ m_pointerCaptureLostToken =
195
+ pointerSource.PointerCaptureLost([this](
196
+ winrt::Microsoft::UI::Input::InputPointerSource const &,
197
+ winrt::Microsoft::UI::Input::PointerEventArgs const &args) {
198
+ if (SurfaceId() == -1)
199
+ return;
200
+
201
+ auto pp = winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::PointerPoint>(
202
+ args.CurrentPoint(), m_compRootView.ScaleFactor());
203
+ onPointerCaptureLost(pp, args.KeyModifiers());
204
+ });
205
+
184
206
  m_pointerWheelChangedToken =
185
207
  pointerSource.PointerWheelChanged([this](
186
208
  winrt::Microsoft::UI::Input::InputPointerSource const &,
@@ -189,7 +211,7 @@ CompositionEventHandler::CompositionEventHandler(
189
211
  return;
190
212
 
191
213
  auto pp = winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::PointerPoint>(
192
- args.CurrentPoint());
214
+ args.CurrentPoint(), m_compRootView.ScaleFactor());
193
215
  onPointerWheelChanged(pp, args.KeyModifiers());
194
216
  });
195
217
 
@@ -204,7 +226,7 @@ CompositionEventHandler::CompositionEventHandler(
204
226
  auto focusedComponent = RootComponentView().GetFocusedComponent();
205
227
  auto keyArgs = winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::KeyRoutedEventArgs>(
206
228
  focusedComponent
207
- ? focusedComponent->tag()
229
+ ? focusedComponent.Tag()
208
230
  : static_cast<facebook::react::Tag>(
209
231
  winrt::get_self<winrt::Microsoft::ReactNative::implementation::CompositionRootView>(m_compRootView)
210
232
  ->GetTag()),
@@ -223,7 +245,7 @@ CompositionEventHandler::CompositionEventHandler(
223
245
  auto focusedComponent = RootComponentView().GetFocusedComponent();
224
246
  auto keyArgs = winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::KeyRoutedEventArgs>(
225
247
  focusedComponent
226
- ? focusedComponent->tag()
248
+ ? focusedComponent.Tag()
227
249
  : static_cast<facebook::react::Tag>(
228
250
  winrt::get_self<winrt::Microsoft::ReactNative::implementation::CompositionRootView>(m_compRootView)
229
251
  ->GetTag()),
@@ -232,9 +254,31 @@ CompositionEventHandler::CompositionEventHandler(
232
254
  onKeyUp(keyboardSource, keyArgs);
233
255
  winrt::get_self<CompositionInputKeyboardSource>(keyboardSource)->Disconnect();
234
256
  });
257
+
258
+ m_characterReceivedToken =
259
+ keyboardSource.CharacterReceived([this](
260
+ winrt::Microsoft::UI::Input::InputKeyboardSource const &source,
261
+ winrt::Microsoft::UI::Input::CharacterReceivedEventArgs const &args) {
262
+ if (SurfaceId() == -1)
263
+ return;
264
+
265
+ auto focusedComponent = RootComponentView().GetFocusedComponent();
266
+ auto charArgs = winrt::make<
267
+ winrt::Microsoft::ReactNative::Composition::Input::implementation::CharacterReceivedRoutedEventArgs>(
268
+ focusedComponent
269
+ ? focusedComponent.Tag()
270
+ : static_cast<facebook::react::Tag>(
271
+ winrt::get_self<winrt::Microsoft::ReactNative::implementation::CompositionRootView>(
272
+ m_compRootView)
273
+ ->GetTag()),
274
+ args);
275
+ auto keyboardSource = winrt::make<CompositionInputKeyboardSource>(source);
276
+ onCharacterReceived(keyboardSource, charArgs);
277
+ winrt::get_self<CompositionInputKeyboardSource>(keyboardSource)->Disconnect();
278
+ });
235
279
  }
236
280
  #endif
237
- };
281
+ }
238
282
 
239
283
  CompositionEventHandler::~CompositionEventHandler() {
240
284
  #ifdef USE_WINUI3
@@ -243,24 +287,28 @@ CompositionEventHandler::~CompositionEventHandler() {
243
287
  pointerSource.PointerPressed(m_pointerPressedToken);
244
288
  pointerSource.PointerReleased(m_pointerReleasedToken);
245
289
  pointerSource.PointerMoved(m_pointerMovedToken);
290
+ pointerSource.PointerCaptureLost(m_pointerCaptureLostToken);
246
291
  pointerSource.PointerWheelChanged(m_pointerWheelChangedToken);
247
292
  auto keyboardSource = winrt::Microsoft::UI::Input::InputKeyboardSource::GetForIsland(island);
248
293
  keyboardSource.KeyDown(m_keyDownToken);
249
294
  keyboardSource.KeyUp(m_keyUpToken);
295
+ keyboardSource.CharacterReceived(m_characterReceivedToken);
250
296
  }
251
297
  #endif
252
298
  }
253
299
 
254
- facebook::react::SurfaceId CompositionEventHandler::SurfaceId() noexcept {
300
+ facebook::react::SurfaceId CompositionEventHandler::SurfaceId() const noexcept {
255
301
  return static_cast<facebook::react::SurfaceId>(
256
302
  winrt::get_self<winrt::Microsoft::ReactNative::implementation::CompositionRootView>(m_compRootView)->GetTag());
257
303
  }
258
304
 
259
- ::Microsoft::ReactNative::RootComponentView &CompositionEventHandler::RootComponentView() noexcept {
305
+ winrt::Microsoft::ReactNative::Composition::implementation::RootComponentView &
306
+ CompositionEventHandler::RootComponentView() const noexcept {
260
307
  auto rootComponentViewDescriptor = (::Microsoft::ReactNative::FabricUIManager::FromProperties(m_context.Properties()))
261
308
  ->GetViewRegistry()
262
309
  .componentViewDescriptorWithTag(SurfaceId());
263
- return static_cast<::Microsoft::ReactNative::RootComponentView &>(*(rootComponentViewDescriptor.view));
310
+ return *rootComponentViewDescriptor.view
311
+ .as<winrt::Microsoft::ReactNative::Composition::implementation::RootComponentView>();
264
312
  }
265
313
 
266
314
  void CompositionEventHandler::onPointerWheelChanged(
@@ -280,9 +328,9 @@ void CompositionEventHandler::onPointerWheelChanged(
280
328
 
281
329
  auto targetComponentView = fabricuiManager->GetViewRegistry().componentViewDescriptorWithTag(tag).view;
282
330
  auto args = winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::PointerRoutedEventArgs>(
283
- tag, pointerPoint, keyModifiers);
331
+ m_context, tag, pointerPoint, keyModifiers);
284
332
 
285
- std::static_pointer_cast<CompositionBaseComponentView>(targetComponentView)->onPointerWheelChanged(args);
333
+ targetComponentView.OnPointerWheelChanged(args);
286
334
  }
287
335
  }
288
336
 
@@ -318,51 +366,66 @@ winrt::Windows::System::VirtualKeyModifiers GetKeyModifiers(uint64_t wParam) {
318
366
  return keyModifiers;
319
367
  }
320
368
 
321
- int64_t CompositionEventHandler::SendMessage(uint32_t msg, uint64_t wParam, int64_t lParam) noexcept {
369
+ int64_t CompositionEventHandler::SendMessage(HWND hwnd, uint32_t msg, uint64_t wParam, int64_t lParam) noexcept {
322
370
  switch (msg) {
323
371
  case WM_LBUTTONDOWN: {
324
372
  auto pp = winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::PointerPoint>(
325
- msg, wParam, lParam, m_compRootView.ScaleFactor());
373
+ hwnd, msg, wParam, lParam, m_compRootView.ScaleFactor());
326
374
  onPointerPressed(pp, GetKeyModifiers(wParam));
327
375
  return 0;
328
376
  }
329
377
  case WM_POINTERDOWN: {
330
378
  auto pp = winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::PointerPoint>(
331
- msg, wParam, lParam, m_compRootView.ScaleFactor());
379
+ hwnd, msg, wParam, lParam, m_compRootView.ScaleFactor());
332
380
  onPointerPressed(pp, GetKeyModifiers(wParam));
333
381
  return 0;
334
382
  }
335
383
  case WM_LBUTTONUP: {
336
384
  auto pp = winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::PointerPoint>(
337
- msg, wParam, lParam, m_compRootView.ScaleFactor());
385
+ hwnd, msg, wParam, lParam, m_compRootView.ScaleFactor());
338
386
  onPointerReleased(pp, GetKeyModifiers(wParam));
339
387
  return 0;
340
388
  }
341
389
  case WM_POINTERUP: {
342
390
  auto pp = winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::PointerPoint>(
343
- msg, wParam, lParam, m_compRootView.ScaleFactor());
391
+ hwnd, msg, wParam, lParam, m_compRootView.ScaleFactor());
344
392
  onPointerReleased(pp, GetKeyModifiers(wParam));
345
393
  return 0;
346
394
  }
347
395
  case WM_MOUSEMOVE: {
348
396
  auto pp = winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::PointerPoint>(
349
- msg, wParam, lParam, m_compRootView.ScaleFactor());
397
+ hwnd, msg, wParam, lParam, m_compRootView.ScaleFactor());
350
398
  onPointerMoved(pp, GetKeyModifiers(wParam));
351
399
  return 0;
352
400
  }
401
+ case WM_CAPTURECHANGED: {
402
+ auto pp = winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::PointerPoint>(
403
+ hwnd, msg, wParam, lParam, m_compRootView.ScaleFactor());
404
+ onPointerCaptureLost(pp, winrt::Windows::System::VirtualKeyModifiers::None);
405
+ return 0;
406
+ }
353
407
  case WM_MOUSEWHEEL: {
354
408
  auto pp = winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::PointerPoint>(
355
- msg, wParam, lParam, m_compRootView.ScaleFactor());
409
+ hwnd, msg, wParam, lParam, m_compRootView.ScaleFactor());
356
410
  onPointerWheelChanged(pp, GetKeyModifiers(wParam));
411
+ break;
357
412
  }
358
413
  case WM_CHAR:
359
414
  case WM_SYSCHAR: {
360
- // TODO full bubbling of events
361
- if (auto focusedComponent = RootComponentView().GetFocusedComponent()) {
362
- auto result = focusedComponent->sendMessage(msg, wParam, lParam);
363
- if (result)
364
- return result;
365
- }
415
+ auto focusedComponent = RootComponentView().GetFocusedComponent();
416
+ auto args = winrt::make<
417
+ winrt::Microsoft::ReactNative::Composition::Input::implementation::CharacterReceivedRoutedEventArgs>(
418
+ focusedComponent
419
+ ? focusedComponent.Tag()
420
+ : static_cast<facebook::react::Tag>(
421
+ winrt::get_self<winrt::Microsoft::ReactNative::implementation::CompositionRootView>(m_compRootView)
422
+ ->GetTag()),
423
+ msg,
424
+ wParam,
425
+ lParam);
426
+ auto keyboardSource = winrt::make<CompositionKeyboardSource>(this);
427
+ onCharacterReceived(keyboardSource, args);
428
+ winrt::get_self<CompositionKeyboardSource>(keyboardSource)->Disconnect();
366
429
  break;
367
430
  }
368
431
  case WM_KEYDOWN:
@@ -372,7 +435,7 @@ int64_t CompositionEventHandler::SendMessage(uint32_t msg, uint64_t wParam, int6
372
435
  auto focusedComponent = RootComponentView().GetFocusedComponent();
373
436
  auto args = winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::KeyRoutedEventArgs>(
374
437
  focusedComponent
375
- ? focusedComponent->tag()
438
+ ? focusedComponent.Tag()
376
439
  : static_cast<facebook::react::Tag>(
377
440
  winrt::get_self<winrt::Microsoft::ReactNative::implementation::CompositionRootView>(m_compRootView)
378
441
  ->GetTag()),
@@ -386,6 +449,7 @@ int64_t CompositionEventHandler::SendMessage(uint32_t msg, uint64_t wParam, int6
386
449
  onKeyUp(keyboardSource, args);
387
450
  }
388
451
  winrt::get_self<CompositionKeyboardSource>(keyboardSource)->Disconnect();
452
+ break;
389
453
  }
390
454
  }
391
455
 
@@ -396,7 +460,7 @@ void CompositionEventHandler::onKeyDown(
396
460
  const winrt::Microsoft::ReactNative::Composition::Input::KeyboardSource &source,
397
461
  const winrt::Microsoft::ReactNative::Composition::Input::KeyRoutedEventArgs &args) noexcept {
398
462
  if (auto focusedComponent = RootComponentView().GetFocusedComponent()) {
399
- focusedComponent->onKeyDown(source, args);
463
+ focusedComponent.OnKeyDown(source, args);
400
464
 
401
465
  if (args.Handled())
402
466
  return;
@@ -404,8 +468,8 @@ void CompositionEventHandler::onKeyDown(
404
468
 
405
469
  bool fShift = source.GetKeyState(winrt::Windows::System::VirtualKey::Shift) ==
406
470
  winrt::Windows::UI::Core::CoreVirtualKeyStates::Down;
407
- bool fCtrl =
408
- GetKeyState(winrt::Windows::System::VirtualKey::Control) == winrt::Windows::UI::Core::CoreVirtualKeyStates::Down;
471
+ bool fCtrl = source.GetKeyState(winrt::Windows::System::VirtualKey::Control) ==
472
+ winrt::Windows::UI::Core::CoreVirtualKeyStates::Down;
409
473
 
410
474
  if (fShift && fCtrl && args.Key() == static_cast<winrt::Windows::System::VirtualKey>(VkKeyScanA('d')) &&
411
475
  Mso::React::ReactOptions::UseDeveloperSupport(m_context.Properties().Handle())) {
@@ -428,62 +492,76 @@ void CompositionEventHandler::onKeyUp(
428
492
  const winrt::Microsoft::ReactNative::Composition::Input::KeyboardSource &source,
429
493
  const winrt::Microsoft::ReactNative::Composition::Input::KeyRoutedEventArgs &args) noexcept {
430
494
  if (auto focusedComponent = RootComponentView().GetFocusedComponent()) {
431
- focusedComponent->onKeyUp(source, args);
495
+ focusedComponent.OnKeyUp(source, args);
496
+
497
+ if (args.Handled())
498
+ return;
499
+ }
500
+ }
501
+
502
+ void CompositionEventHandler::onCharacterReceived(
503
+ const winrt::Microsoft::ReactNative::Composition::Input::KeyboardSource &source,
504
+ const winrt::Microsoft::ReactNative::Composition::Input::CharacterReceivedRoutedEventArgs &args) noexcept {
505
+ if (auto focusedComponent = RootComponentView().GetFocusedComponent()) {
506
+ focusedComponent.OnCharacterReceived(source, args);
432
507
 
433
508
  if (args.Handled())
434
509
  return;
435
510
  }
436
511
  }
437
512
 
438
- std::vector<IComponentView *> GetTouchableViewsInPathToRoot(IComponentView *view) {
439
- std::vector<IComponentView *> results;
513
+ std::vector<winrt::Microsoft::ReactNative::ComponentView> GetTouchableViewsInPathToRoot(
514
+ const winrt::Microsoft::ReactNative::ComponentView &componentView) {
515
+ std::vector<winrt::Microsoft::ReactNative::ComponentView> results;
516
+ auto view = componentView;
440
517
  while (view) {
441
- if (view->eventEmitter()) {
518
+ if (winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(view)->eventEmitter()) {
442
519
  results.push_back(view);
443
520
  }
444
- view = view->parent();
521
+ view = view.Parent();
445
522
  }
446
523
  return results;
447
524
  }
448
525
 
449
526
  /**
450
527
  * Private method which is used for tracking the location of pointer events to manage the entering/leaving events.
451
- * The primary idea is that a pointer's presence & movement is dictated by a variety of underlying events such as down,
452
- * move, and up — and they should all be treated the same when it comes to tracking the entering & leaving of pointers
453
- * to views. This method accomplishes that by receiving the pointer event, the target view (can be null in cases when
454
- * the event indicates that the pointer has left the screen entirely), and a block/callback where the underlying event
455
- * should be fired.
528
+ * The primary idea is that a pointer's presence & movement is dictated by a variety of underlying events such as
529
+ * down, move, and up — and they should all be treated the same when it comes to tracking the entering & leaving of
530
+ * pointers to views. This method accomplishes that by receiving the pointer event, the target view (can be null in
531
+ * cases when the event indicates that the pointer has left the screen entirely), and a block/callback where the
532
+ * underlying event should be fired.
456
533
  */
457
534
  void CompositionEventHandler::HandleIncomingPointerEvent(
458
535
  facebook::react::PointerEvent &event,
459
- IComponentView *targetView,
536
+ const winrt::Microsoft::ReactNative::ComponentView &targetView,
460
537
  const winrt::Microsoft::ReactNative::Composition::Input::PointerPoint &pointerPoint,
461
538
  winrt::Windows::System::VirtualKeyModifiers keyModifiers,
462
- std::function<void(std::vector<IComponentView *> &)> handler) {
539
+ std::function<void(std::vector<winrt::Microsoft::ReactNative::ComponentView> &)> handler) {
463
540
  int pointerId = event.pointerId;
464
541
  // CGPoint clientLocation = CGPointMake(event.clientPoint.x, event.clientPoint.y);
465
542
 
466
- std::vector<IComponentView *> currentlyHoveredViews;
543
+ std::vector<winrt::Microsoft::ReactNative::ComponentView> currentlyHoveredViews;
467
544
  auto itCurrentlyHoveredViews = m_currentlyHoveredViewsPerPointer.find(pointerId);
468
545
  if (itCurrentlyHoveredViews != m_currentlyHoveredViewsPerPointer.end()) {
469
546
  for (auto &taggedView : itCurrentlyHoveredViews->second) {
470
547
  if (auto view = taggedView.view()) {
471
- currentlyHoveredViews.push_back(view.get());
548
+ currentlyHoveredViews.push_back(view);
472
549
  }
473
550
  }
474
551
  }
475
552
 
476
553
  // RCTReactTaggedView *targetTaggedView = [RCTReactTaggedView wrap:targetView];
477
554
  auto prevTargetView = currentlyHoveredViews.empty() ? nullptr : currentlyHoveredViews[0];
478
- auto previousTargetTag = prevTargetView ? prevTargetView->tag() : -1;
555
+ auto previousTargetTag = prevTargetView ? prevTargetView.Tag() : -1;
479
556
 
480
557
  auto eventPathViews = GetTouchableViewsInPathToRoot(targetView);
481
558
 
482
559
  // Over
483
- if (targetView != nullptr && previousTargetTag != targetView->tag()) {
560
+ if (targetView != nullptr && previousTargetTag != targetView.Tag()) {
484
561
  bool shouldEmitOverEvent =
485
562
  IsAnyViewInPathListeningToEvent(eventPathViews, facebook::react::ViewEvents::Offset::PointerOver);
486
- const auto eventEmitter = targetView->eventEmitterAtPoint(event.offsetPoint);
563
+ const auto eventEmitter = winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(targetView)
564
+ ->eventEmitterAtPoint(event.offsetPoint);
487
565
  if (shouldEmitOverEvent && eventEmitter != nullptr) {
488
566
  eventEmitter->onPointerOver(event);
489
567
  }
@@ -508,11 +586,17 @@ void CompositionEventHandler::HandleIncomingPointerEvent(
508
586
  IsViewListeningToEvent(componentView, facebook::react::ViewEvents::Offset::PointerEnter) ||
509
587
  IsViewListeningToEvent(componentView, facebook::react::WindowsViewEvents::Offset::MouseEnter));
510
588
 
511
- if ((shouldEmitEvent || !emittedNativeEnteredEvent) &&
512
- std::find(currentlyHoveredViews.begin(), currentlyHoveredViews.end(), componentView) ==
513
- currentlyHoveredViews.end()) {
589
+ if (std::find(currentlyHoveredViews.begin(), currentlyHoveredViews.end(), componentView) ==
590
+ currentlyHoveredViews.end()) {
591
+ auto args =
592
+ winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::PointerRoutedEventArgs>(
593
+ m_context, componentView.Tag(), pointerPoint, keyModifiers);
594
+ componentView.OnPointerEntered(args);
595
+
514
596
  if (shouldEmitEvent) {
515
- const auto eventEmitter = componentView->eventEmitter();
597
+ const auto eventEmitter =
598
+ winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(componentView)
599
+ ->eventEmitter();
516
600
  if (eventEmitter) {
517
601
  eventEmitter->onPointerEnter(event);
518
602
  if (IsMousePointerEvent(event)) {
@@ -520,13 +604,6 @@ void CompositionEventHandler::HandleIncomingPointerEvent(
520
604
  }
521
605
  }
522
606
  }
523
- if (!emittedNativeEnteredEvent) {
524
- emittedNativeEnteredEvent = true;
525
- auto args =
526
- winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::PointerRoutedEventArgs>(
527
- componentView->tag(), pointerPoint, keyModifiers);
528
- static_cast<CompositionBaseComponentView *>(componentView)->onPointerEntered(args);
529
- }
530
607
  }
531
608
 
532
609
  if (shouldEmitEvent && !hasParentEnterListener) {
@@ -538,10 +615,11 @@ void CompositionEventHandler::HandleIncomingPointerEvent(
538
615
  handler(eventPathViews);
539
616
 
540
617
  // Out
541
- if (previousTargetTag != -1 && previousTargetTag != (targetView ? targetView->tag() : -1)) {
618
+ if (previousTargetTag != -1 && previousTargetTag != (targetView ? targetView.Tag() : -1)) {
542
619
  bool shouldEmitOutEvent =
543
620
  IsAnyViewInPathListeningToEvent(currentlyHoveredViews, facebook::react::ViewEvents::Offset::PointerOut);
544
- const auto eventEmitter = prevTargetView->eventEmitter();
621
+ const auto eventEmitter =
622
+ winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(prevTargetView)->eventEmitter();
545
623
  if (shouldEmitOutEvent && eventEmitter != nullptr) {
546
624
  eventEmitter->onPointerOut(event);
547
625
  }
@@ -553,10 +631,13 @@ void CompositionEventHandler::HandleIncomingPointerEvent(
553
631
  // we also need to efficiently keep track of if a view has a parent which is listening to the leave events,
554
632
  // so we first iterate from the root to the target, collecting the views which need events fired for, of which
555
633
  // we reverse iterate (now from target to root), actually emitting the events.
556
- std::vector<IComponentView *> viewsToEmitLeaveEventsTo; // NSMutableOrderedSet<UIView *> *viewsToEmitLeaveEventsTo =
557
- // [NSMutableOrderedSet orderedSet];
634
+ std::vector<winrt::Microsoft::ReactNative::ComponentView>
635
+ viewsToEmitJSLeaveEventsTo; // NSMutableOrderedSet<UIView *> *viewsToEmitLeaveEventsTo =
636
+ // [NSMutableOrderedSet orderedSet];
558
637
 
559
- IComponentView *viewToEmitNativeExitedEvent = nullptr;
638
+ std::vector<winrt::Microsoft::ReactNative::ComponentView> viewsToEmitLeaveEventsTo;
639
+
640
+ winrt::Microsoft::ReactNative::ComponentView viewToEmitNativeExitedEvent{nullptr};
560
641
 
561
642
  bool hasParentLeaveListener = false;
562
643
  for (auto itComponentView = currentlyHoveredViews.rbegin(); itComponentView != currentlyHoveredViews.rend();
@@ -565,37 +646,38 @@ void CompositionEventHandler::HandleIncomingPointerEvent(
565
646
  // {
566
647
  auto componentView = *itComponentView;
567
648
 
568
- bool shouldEmitEvent = componentView != nullptr &&
649
+ bool shouldEmitJSEvent = componentView != nullptr &&
569
650
  (hasParentLeaveListener ||
570
651
  IsViewListeningToEvent(componentView, facebook::react::ViewEvents::Offset::PointerLeave) ||
571
652
  IsViewListeningToEvent(componentView, facebook::react::WindowsViewEvents::Offset::MouseLeave));
572
653
 
573
- if ((shouldEmitEvent || !viewToEmitNativeExitedEvent) &&
574
- std::find(eventPathViews.begin(), eventPathViews.end(), componentView) == eventPathViews.end()) {
575
- if (shouldEmitEvent) {
576
- viewsToEmitLeaveEventsTo.push_back(componentView);
577
- }
578
- if (!viewToEmitNativeExitedEvent) {
579
- viewToEmitNativeExitedEvent = componentView;
654
+ if (std::find(eventPathViews.begin(), eventPathViews.end(), componentView) == eventPathViews.end()) {
655
+ if (shouldEmitJSEvent) {
656
+ viewsToEmitJSLeaveEventsTo.push_back(componentView);
580
657
  }
658
+ viewsToEmitLeaveEventsTo.push_back(componentView);
581
659
  }
582
660
 
583
- if (shouldEmitEvent && !hasParentLeaveListener) {
661
+ if (shouldEmitJSEvent && !hasParentLeaveListener) {
584
662
  hasParentLeaveListener = true;
585
663
  }
586
664
  }
587
665
 
588
- if (viewToEmitNativeExitedEvent) {
666
+ for (auto itComponentView = viewsToEmitLeaveEventsTo.rbegin(); itComponentView != viewsToEmitLeaveEventsTo.rend();
667
+ itComponentView++) {
668
+ auto componentView = *itComponentView;
669
+
589
670
  auto args = winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::PointerRoutedEventArgs>(
590
- viewToEmitNativeExitedEvent->tag(), pointerPoint, keyModifiers);
591
- static_cast<CompositionBaseComponentView *>(viewToEmitNativeExitedEvent)->onPointerExited(args);
671
+ m_context, componentView.Tag(), pointerPoint, keyModifiers);
672
+ componentView.OnPointerExited(args);
592
673
  }
593
674
 
594
- for (auto itComponentView = viewsToEmitLeaveEventsTo.rbegin(); itComponentView != viewsToEmitLeaveEventsTo.rend();
595
- itComponentView++) { // for (UIView *componentView in [viewsToEmitLeaveEventsTo reverseObjectEnumerator]) {
675
+ for (auto itComponentView = viewsToEmitJSLeaveEventsTo.rbegin(); itComponentView != viewsToEmitJSLeaveEventsTo.rend();
676
+ itComponentView++) { // for (UIView *componentView in [viewsToEmitJSLeaveEventsTo reverseObjectEnumerator]) {
596
677
  auto componentView = *itComponentView;
597
678
 
598
- const auto eventEmitter = componentView->eventEmitter();
679
+ const auto eventEmitter =
680
+ winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(componentView)->eventEmitter();
599
681
  if (eventEmitter) {
600
682
  eventEmitter->onPointerLeave(event);
601
683
  if (IsMousePointerEvent(event)) {
@@ -609,7 +691,7 @@ void CompositionEventHandler::HandleIncomingPointerEvent(
609
691
  ::Microsoft::ReactNative::FabricUIManager::FromProperties(m_context.Properties());
610
692
  auto &viewRegistry = fabricuiManager->GetViewRegistry();
611
693
  for (auto &view : eventPathViews) {
612
- auto componentViewDescriptor = viewRegistry.componentViewDescriptorWithTag(view->tag());
694
+ auto componentViewDescriptor = viewRegistry.componentViewDescriptorWithTag(view.Tag());
613
695
  hoveredViews.emplace_back(ReactTaggedView(componentViewDescriptor.view));
614
696
  }
615
697
  m_currentlyHoveredViewsPerPointer[pointerId] = std::move(hoveredViews);
@@ -669,6 +751,49 @@ facebook::react::PointerEvent CreatePointerEventFromIncompleteHoverData(
669
751
  return pointerEvent;
670
752
  }
671
753
 
754
+ void CompositionEventHandler::getTargetPointerArgs(
755
+ const std::shared_ptr<FabricUIManager> &fabricuiManager,
756
+ const winrt::Microsoft::ReactNative::Composition::Input::PointerPoint &pointerPoint,
757
+ facebook::react::Tag &tag,
758
+ facebook::react::Point &ptScaled,
759
+ facebook::react::Point &ptLocal) const noexcept {
760
+ int pointerId = pointerPoint.PointerId();
761
+ auto position = pointerPoint.Position();
762
+ tag = -1;
763
+
764
+ ptScaled = {position.X, position.Y};
765
+ if (std::find(m_capturedPointers.begin(), m_capturedPointers.end(), pointerId) != m_capturedPointers.end()) {
766
+ assert(m_pointerCapturingComponentTag != -1);
767
+ tag = m_pointerCapturingComponentTag;
768
+
769
+ auto targetComponentView = fabricuiManager->GetViewRegistry().componentViewDescriptorWithTag(tag).view;
770
+ auto clientRect = winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(targetComponentView)
771
+ ->getClientRect();
772
+ ptLocal.x = ptScaled.x - (clientRect.left / m_compRootView.ScaleFactor());
773
+ ptLocal.y = ptScaled.y - (clientRect.top / m_compRootView.ScaleFactor());
774
+ } else {
775
+ tag = RootComponentView().hitTest(ptScaled, ptLocal);
776
+ }
777
+ }
778
+
779
+ void CompositionEventHandler::onPointerCaptureLost(
780
+ const winrt::Microsoft::ReactNative::Composition::Input::PointerPoint &pointerPoint,
781
+ winrt::Windows::System::VirtualKeyModifiers keyModifiers) noexcept {
782
+ if (SurfaceId() == -1)
783
+ return;
784
+
785
+ if (m_pointerCapturingComponentTag) {
786
+ // copy array to avoid iterator being invalidated during deletion
787
+ std::vector<PointerId> capturedPointers = m_capturedPointers;
788
+
789
+ for (auto pointerId : capturedPointers) {
790
+ releasePointerCapture(pointerId, m_pointerCapturingComponentTag);
791
+ }
792
+
793
+ m_pointerCapturingComponentTag = -1;
794
+ }
795
+ }
796
+
672
797
  void CompositionEventHandler::onPointerMoved(
673
798
  const winrt::Microsoft::ReactNative::Composition::Input::PointerPoint &pointerPoint,
674
799
  winrt::Windows::System::VirtualKeyModifiers keyModifiers) noexcept {
@@ -681,28 +806,30 @@ void CompositionEventHandler::onPointerMoved(
681
806
 
682
807
  if (std::shared_ptr<FabricUIManager> fabricuiManager =
683
808
  ::Microsoft::ReactNative::FabricUIManager::FromProperties(m_context.Properties())) {
684
- facebook::react::Point ptLocal;
685
-
686
- facebook::react::Point ptScaled = {position.X, position.Y};
687
- auto tag = RootComponentView().hitTest(ptScaled, ptLocal);
809
+ facebook::react::Tag tag = -1;
810
+ facebook::react::Point ptLocal, ptScaled;
811
+ getTargetPointerArgs(fabricuiManager, pointerPoint, tag, ptScaled, ptLocal);
688
812
 
689
813
  if (tag == -1)
690
814
  return;
691
815
 
692
816
  auto args = winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::PointerRoutedEventArgs>(
693
- tag, pointerPoint, keyModifiers);
694
- IComponentView *targetComponentView =
695
- fabricuiManager->GetViewRegistry().componentViewDescriptorWithTag(tag).view.get();
817
+ m_context, tag, pointerPoint, keyModifiers);
818
+ auto targetComponentView = fabricuiManager->GetViewRegistry().componentViewDescriptorWithTag(tag).view;
696
819
 
697
- static_cast<CompositionBaseComponentView *>(targetComponentView)->onPointerMoved(args);
820
+ targetComponentView.OnPointerMoved(args);
698
821
 
699
822
  auto targetView = FindClosestFabricManagedTouchableView(
700
- fabricuiManager->GetViewRegistry().componentViewDescriptorWithTag(tag).view.get());
823
+ fabricuiManager->GetViewRegistry().componentViewDescriptorWithTag(tag).view);
701
824
 
702
825
  facebook::react::PointerEvent pointerEvent = CreatePointerEventFromIncompleteHoverData(ptScaled, ptLocal);
703
826
 
704
- auto handler = [targetView, &pointerEvent](std::vector<IComponentView *> &eventPathViews) {
705
- const auto eventEmitter = targetView ? targetView->eventEmitterAtPoint(pointerEvent.offsetPoint) : nullptr;
827
+ auto handler = [&targetView,
828
+ &pointerEvent](std::vector<winrt::Microsoft::ReactNative::ComponentView> &eventPathViews) {
829
+ const auto eventEmitter = targetView
830
+ ? winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(targetView)
831
+ ->eventEmitterAtPoint(pointerEvent.offsetPoint)
832
+ : nullptr;
706
833
  bool hasMoveEventListeners =
707
834
  IsAnyViewInPathListeningToEvent(eventPathViews, facebook::react::ViewEvents::Offset::PointerMove) ||
708
835
  IsAnyViewInPathListeningToEvent(eventPathViews, facebook::react::ViewEvents::Offset::PointerMoveCapture);
@@ -730,37 +857,35 @@ void CompositionEventHandler::onPointerPressed(
730
857
  return;
731
858
  }
732
859
 
733
- auto position = pointerPoint.Position();
734
860
  const auto eventType = TouchEventType::Start;
735
861
 
736
862
  if (std::shared_ptr<FabricUIManager> fabricuiManager =
737
863
  ::Microsoft::ReactNative::FabricUIManager::FromProperties(m_context.Properties())) {
738
- facebook::react::Point ptLocal;
739
-
740
- facebook::react::Point ptScaled = {position.X, position.Y};
741
- auto tag = RootComponentView().hitTest(ptScaled, ptLocal);
864
+ facebook::react::Tag tag = -1;
865
+ facebook::react::Point ptLocal, ptScaled;
866
+ getTargetPointerArgs(fabricuiManager, pointerPoint, tag, ptScaled, ptLocal);
742
867
 
743
868
  if (tag == -1)
744
869
  return;
745
870
 
746
- IComponentView *targetComponentView =
747
- fabricuiManager->GetViewRegistry().componentViewDescriptorWithTag(tag).view.get();
871
+ auto targetComponentView = fabricuiManager->GetViewRegistry().componentViewDescriptorWithTag(tag).view;
748
872
  auto args = winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::PointerRoutedEventArgs>(
749
- tag, pointerPoint, keyModifiers);
750
- static_cast<CompositionBaseComponentView *>(targetComponentView)->onPointerPressed(args);
873
+ m_context, tag, pointerPoint, keyModifiers);
874
+ targetComponentView.OnPointerPressed(args);
751
875
 
752
876
  ActiveTouch activeTouch{0};
753
877
  activeTouch.touchType = UITouchType::Mouse;
754
878
 
755
- auto componentView = targetComponentView;
756
- while (componentView) {
757
- if (auto eventEmitter = componentView->eventEmitterAtPoint(ptLocal)) {
879
+ while (targetComponentView) {
880
+ if (auto eventEmitter =
881
+ winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(targetComponentView)
882
+ ->eventEmitterAtPoint(ptLocal)) {
758
883
  activeTouch.eventEmitter = eventEmitter;
759
- activeTouch.touch.target = componentView->tag();
884
+ activeTouch.touch.target = targetComponentView.Tag();
760
885
  // activeTouch.componentView = componentView;
761
886
  break;
762
887
  }
763
- componentView = componentView->parent();
888
+ targetComponentView = targetComponentView.Parent();
764
889
  }
765
890
 
766
891
  UpdateActiveTouch(activeTouch, ptScaled, ptLocal);
@@ -794,23 +919,20 @@ void CompositionEventHandler::onPointerReleased(
794
919
  return;
795
920
  }
796
921
 
797
- auto position = pointerPoint.Position();
798
-
799
922
  if (std::shared_ptr<FabricUIManager> fabricuiManager =
800
923
  ::Microsoft::ReactNative::FabricUIManager::FromProperties(m_context.Properties())) {
801
- facebook::react::Point ptLocal;
802
-
803
- facebook::react::Point ptScaled = {position.X, position.Y};
804
- auto tag = RootComponentView().hitTest(ptScaled, ptLocal);
924
+ facebook::react::Tag tag = -1;
925
+ facebook::react::Point ptLocal, ptScaled;
926
+ getTargetPointerArgs(fabricuiManager, pointerPoint, tag, ptScaled, ptLocal);
805
927
 
806
928
  if (tag == -1)
807
929
  return;
808
930
 
809
931
  auto targetComponentView = fabricuiManager->GetViewRegistry().componentViewDescriptorWithTag(tag).view;
810
932
  auto args = winrt::make<winrt::Microsoft::ReactNative::Composition::Input::implementation::PointerRoutedEventArgs>(
811
- tag, pointerPoint, keyModifiers);
933
+ m_context, tag, pointerPoint, keyModifiers);
812
934
 
813
- std::static_pointer_cast<CompositionBaseComponentView>(targetComponentView)->onPointerReleased(args);
935
+ targetComponentView.OnPointerReleased(args);
814
936
 
815
937
  UpdateActiveTouch(activeTouch->second, ptScaled, ptLocal);
816
938
  DispatchTouchEvent(TouchEventType::End, pointerId, pointerPoint, keyModifiers);
@@ -818,6 +940,60 @@ void CompositionEventHandler::onPointerReleased(
818
940
  }
819
941
  }
820
942
 
943
+ bool CompositionEventHandler::CapturePointer(
944
+ const winrt::Microsoft::ReactNative::Composition::Input::Pointer &pointer,
945
+ facebook::react::Tag tag) noexcept {
946
+ if (m_pointerCapturingComponentTag != -1) {
947
+ m_capturedPointers.clear();
948
+
949
+ if (std::shared_ptr<FabricUIManager> fabricuiManager =
950
+ ::Microsoft::ReactNative::FabricUIManager::FromProperties(m_context.Properties())) {
951
+ auto targetComponentView =
952
+ fabricuiManager->GetViewRegistry().componentViewDescriptorWithTag(m_pointerCapturingComponentTag).view;
953
+
954
+ targetComponentView.OnPointerCaptureLost();
955
+ }
956
+ }
957
+
958
+ m_pointerCapturingComponentTag = tag;
959
+ m_capturedPointers.push_back(pointer.PointerId());
960
+ return true;
961
+ }
962
+
963
+ bool CompositionEventHandler::ReleasePointerCapture(
964
+ const winrt::Microsoft::ReactNative::Composition::Input::Pointer &pointer,
965
+ facebook::react::Tag tag) noexcept {
966
+ return releasePointerCapture(static_cast<PointerId>(pointer.PointerId()), tag);
967
+ }
968
+
969
+ // Returns if pointer capture should be removed entirely
970
+ bool CompositionEventHandler::releasePointerCapture(PointerId pointerId, facebook::react::Tag tag) noexcept {
971
+ bool result = false;
972
+
973
+ if (m_pointerCapturingComponentTag == tag) {
974
+ auto it = std::find(m_capturedPointers.begin(), m_capturedPointers.end(), pointerId);
975
+ if (it == m_capturedPointers.end()) {
976
+ return false;
977
+ }
978
+ m_capturedPointers.erase(it);
979
+
980
+ if (std::shared_ptr<FabricUIManager> fabricuiManager =
981
+ ::Microsoft::ReactNative::FabricUIManager::FromProperties(m_context.Properties())) {
982
+ auto targetComponentView =
983
+ fabricuiManager->GetViewRegistry().componentViewDescriptorWithTag(m_pointerCapturingComponentTag).view;
984
+
985
+ targetComponentView.OnPointerCaptureLost();
986
+ }
987
+
988
+ if (m_capturedPointers.size() == 0) {
989
+ m_pointerCapturingComponentTag = -1;
990
+ return true;
991
+ }
992
+ }
993
+
994
+ return false;
995
+ }
996
+
821
997
  // defines button payload, follows https://developer.mozilla.org/docs/Web/API/MouseEvent/button
822
998
  enum class MouseEventButtonKind { None = -1, Main = 0, Auxiliary = 1, Secondary = 2, Eraser = 5 };
823
999
 
@@ -924,18 +1100,21 @@ void CompositionEventHandler::DispatchTouchEvent(
924
1100
 
925
1101
  facebook::react::PointerEvent pointerEvent = CreatePointerEventFromActiveTouch(activeTouch, eventType);
926
1102
 
927
- IComponentView *targetView = nullptr;
1103
+ winrt::Microsoft::ReactNative::ComponentView targetView{nullptr};
928
1104
  bool shouldLeave = (eventType == TouchEventType::End && activeTouch.shouldLeaveWhenReleased) ||
929
1105
  eventType == TouchEventType::Cancel;
930
1106
  if (!shouldLeave) {
931
1107
  const auto &viewRegistry = fabricuiManager->GetViewRegistry();
932
1108
  facebook::react::Point ptLocal;
933
1109
  auto targetTag = RootComponentView().hitTest(pointerEvent.clientPoint, ptLocal);
934
- auto targetComponentViewDescriptor = viewRegistry.componentViewDescriptorWithTag(targetTag);
935
- targetView = FindClosestFabricManagedTouchableView(targetComponentViewDescriptor.view.get());
1110
+ if (targetTag != -1) {
1111
+ auto targetComponentViewDescriptor = viewRegistry.componentViewDescriptorWithTag(targetTag);
1112
+ targetView = FindClosestFabricManagedTouchableView(targetComponentViewDescriptor.view);
1113
+ }
936
1114
  }
937
1115
 
938
- auto handler = [&activeTouch, eventType, &pointerEvent](std::vector<IComponentView *> &eventPathViews) {
1116
+ auto handler = [&activeTouch, eventType, &pointerEvent](
1117
+ std::vector<winrt::Microsoft::ReactNative::ComponentView> &eventPathViews) {
939
1118
  switch (eventType) {
940
1119
  case TouchEventType::Start:
941
1120
  activeTouch.eventEmitter->onPointerDown(pointerEvent);