react-native-windows 0.73.10 → 0.74.0-preview.1

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 (773) 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/PopupMenuAndroid/PopupMenuAndroid.android.js +69 -0
  57. package/Libraries/Components/PopupMenuAndroid/PopupMenuAndroid.d.ts +24 -0
  58. package/Libraries/Components/PopupMenuAndroid/PopupMenuAndroid.js +33 -0
  59. package/Libraries/Components/PopupMenuAndroid/PopupMenuAndroidNativeComponent.js +13 -0
  60. package/Libraries/Components/Pressable/Pressable.js +1 -1
  61. package/Libraries/Components/Pressable/Pressable.windows.js +1 -2
  62. package/Libraries/Components/Pressable/useAndroidRippleForView.js +5 -4
  63. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidNativeComponent.js +4 -24
  64. package/Libraries/Components/RefreshControl/AndroidSwipeRefreshLayoutNativeComponent.js +3 -64
  65. package/Libraries/Components/RefreshControl/PullToRefreshViewNativeComponent.js +3 -61
  66. package/Libraries/Components/RefreshControl/RefreshControl.js +1 -1
  67. package/Libraries/Components/RefreshControl/RefreshControl.windows.js +1 -1
  68. package/Libraries/Components/SafeAreaView/RCTSafeAreaViewNativeComponent.js +3 -15
  69. package/Libraries/Components/ScrollView/AndroidHorizontalScrollContentViewNativeComponent.js +3 -16
  70. package/Libraries/Components/ScrollView/ScrollContentViewNativeComponent.js +1 -1
  71. package/Libraries/Components/ScrollView/ScrollView.d.ts +5 -6
  72. package/Libraries/Components/ScrollView/ScrollView.js +12 -38
  73. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +1 -2
  74. package/Libraries/Components/Sound/NativeSoundManager.js +3 -12
  75. package/Libraries/Components/StatusBar/NativeStatusBarManagerAndroid.js +3 -58
  76. package/Libraries/Components/StatusBar/NativeStatusBarManagerIOS.js +3 -79
  77. package/Libraries/Components/Switch/AndroidSwitchNativeComponent.js +4 -53
  78. package/Libraries/Components/Switch/Switch.js +0 -2
  79. package/Libraries/Components/Switch/Switch.windows.js +0 -2
  80. package/Libraries/Components/Switch/SwitchNativeComponent.js +4 -52
  81. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +8 -0
  82. package/Libraries/Components/TextInput/InputAccessoryView.js +18 -20
  83. package/Libraries/Components/TextInput/RCTInputAccessoryViewNativeComponent.js +4 -17
  84. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +3 -6
  85. package/Libraries/Components/TextInput/TextInput.d.ts +16 -0
  86. package/Libraries/Components/TextInput/TextInput.flow.js +16 -0
  87. package/Libraries/Components/TextInput/TextInput.js +65 -32
  88. package/Libraries/Components/TextInput/TextInput.windows.js +87 -38
  89. package/Libraries/Components/TextInput/WindowsTextInputNativeComponent.js +773 -9
  90. package/Libraries/Components/ToastAndroid/NativeToastAndroid.js +3 -28
  91. package/Libraries/Components/Touchable/PooledClass.js +1 -1
  92. package/Libraries/Components/Touchable/Touchable.js +2 -3
  93. package/Libraries/Components/Touchable/Touchable.windows.js +2 -3
  94. package/Libraries/Components/Touchable/TouchableHighlight.js +4 -4
  95. package/Libraries/Components/Touchable/TouchableHighlight.windows.js +4 -4
  96. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +2 -1
  97. package/Libraries/Components/Touchable/TouchableOpacity.js +5 -2
  98. package/Libraries/Components/Touchable/TouchableOpacity.windows.js +5 -2
  99. package/Libraries/Components/UnimplementedViews/UnimplementedNativeViewNativeComponent.js +3 -16
  100. package/Libraries/Components/View/ReactNativeStyleAttributes.js +1 -1
  101. package/Libraries/Components/View/View.js +0 -11
  102. package/Libraries/Components/View/View.windows.js +19 -18
  103. package/Libraries/Components/View/ViewAccessibility.d.ts +33 -17
  104. package/Libraries/Components/View/ViewPropTypes.d.ts +28 -17
  105. package/Libraries/Components/View/ViewPropTypes.js +36 -36
  106. package/Libraries/Components/View/ViewPropTypes.windows.js +36 -36
  107. package/Libraries/Core/InitializeCore.js +1 -1
  108. package/Libraries/Core/NativeExceptionsManager.js +3 -93
  109. package/Libraries/Core/ReactNativeVersion.js +12 -6
  110. package/Libraries/Core/ReactNativeVersionCheck.js +6 -6
  111. package/Libraries/Core/SegmentFetcher/NativeSegmentFetcher.js +3 -18
  112. package/Libraries/Core/Timers/NativeTiming.js +3 -16
  113. package/Libraries/Core/registerCallableModule.js +42 -0
  114. package/Libraries/Core/setUpPerformance.js +2 -2
  115. package/Libraries/Core/setUpPerformanceObserver.js +3 -1
  116. package/Libraries/Debugging/DebuggingOverlay.js +111 -0
  117. package/Libraries/Debugging/DebuggingOverlayNativeComponent.js +13 -0
  118. package/Libraries/Debugging/DebuggingOverlayRegistry.js +513 -0
  119. package/Libraries/Debugging/useSubscribeToDebuggingOverlayRegistry.js +32 -0
  120. package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +3 -14
  121. package/Libraries/HeapCapture/NativeJSCHeapCapture.js +3 -9
  122. package/Libraries/Image/AssetSourceResolver.js +5 -5
  123. package/Libraries/Image/AssetUtils.js +4 -5
  124. package/Libraries/Image/Image.android.js +146 -174
  125. package/Libraries/Image/Image.d.ts +1 -1
  126. package/Libraries/Image/Image.ios.js +53 -79
  127. package/Libraries/Image/Image.windows.js +53 -79
  128. package/Libraries/Image/ImageBackground.js +2 -2
  129. package/Libraries/Image/ImageInjection.js +76 -18
  130. package/Libraries/Image/ImageTypes.flow.js +71 -0
  131. package/Libraries/Image/ImageUtils.js +1 -1
  132. package/Libraries/Image/ImageViewNativeComponent.js +18 -0
  133. package/Libraries/Image/NativeImageEditor.js +3 -42
  134. package/Libraries/Image/NativeImageLoaderAndroid.js +4 -28
  135. package/Libraries/Image/NativeImageLoaderIOS.js +4 -28
  136. package/Libraries/Image/NativeImageStoreAndroid.js +3 -16
  137. package/Libraries/Image/NativeImageStoreIOS.js +3 -23
  138. package/Libraries/Image/resolveAssetSource.js +59 -26
  139. package/Libraries/Image/resolveAssetSource.windows.js +148 -0
  140. package/Libraries/Inspector/ElementProperties.js +26 -52
  141. package/Libraries/Inspector/Inspector.js +122 -186
  142. package/Libraries/Inspector/InspectorOverlay.js +21 -33
  143. package/Libraries/Inspector/InspectorPanel.js +3 -17
  144. package/Libraries/Inspector/ReactDevToolsOverlay.js +171 -0
  145. package/Libraries/Inspector/getInspectorDataForViewAtPoint.js +20 -8
  146. package/Libraries/Interaction/FrameRateLogger.js +8 -18
  147. package/Libraries/Interaction/NativeFrameRateLogger.js +4 -16
  148. package/Libraries/IntersectionObserver/IntersectionObserver.js +1 -1
  149. package/Libraries/IntersectionObserver/IntersectionObserverEntry.js +20 -19
  150. package/Libraries/IntersectionObserver/IntersectionObserverManager.js +84 -6
  151. package/Libraries/IntersectionObserver/NativeIntersectionObserver.js +3 -31
  152. package/Libraries/IntersectionObserver/__mocks__/NativeIntersectionObserver.js +12 -2
  153. package/Libraries/LayoutAnimation/LayoutAnimation.js +1 -2
  154. package/Libraries/Linking/NativeIntentAndroid.js +3 -20
  155. package/Libraries/Linking/NativeLinkingManager.js +3 -17
  156. package/Libraries/Lists/FillRateHelper.js +1 -1
  157. package/Libraries/Lists/FlatList.d.ts +2 -2
  158. package/Libraries/Lists/FlatList.js +6 -1
  159. package/Libraries/Lists/FlatList.windows.js +717 -0
  160. package/Libraries/Lists/SectionList.d.ts +6 -1
  161. package/Libraries/Lists/ViewabilityHelper.js +1 -1
  162. package/Libraries/Lists/VirtualizeUtils.js +1 -1
  163. package/Libraries/Lists/VirtualizedList.js +1 -1
  164. package/Libraries/Lists/VirtualizedListContext.js +1 -1
  165. package/Libraries/Lists/VirtualizedSectionList.js +1 -1
  166. package/Libraries/LogBox/LogBoxInspectorContainer.js +1 -1
  167. package/Libraries/Modal/Modal.js +43 -11
  168. package/Libraries/Modal/NativeModalManager.js +3 -11
  169. package/Libraries/Modal/RCTModalHostViewNativeComponent.js +3 -129
  170. package/Libraries/MutationObserver/MutationObserver.js +1 -1
  171. package/Libraries/MutationObserver/MutationObserverManager.js +2 -2
  172. package/Libraries/MutationObserver/MutationRecord.js +12 -10
  173. package/Libraries/MutationObserver/NativeMutationObserver.js +3 -48
  174. package/Libraries/MutationObserver/__mocks__/NativeMutationObserver.js +1 -1
  175. package/Libraries/NativeComponent/BaseViewConfig.android.js +1 -0
  176. package/Libraries/NativeComponent/BaseViewConfig.windows.js +3 -0
  177. package/Libraries/NativeComponent/NativeComponentRegistry.js +1 -1
  178. package/Libraries/NativeModules/specs/NativeAnimationsDebugModule.js +3 -10
  179. package/Libraries/NativeModules/specs/NativeDevMenu.js +3 -13
  180. package/Libraries/NativeModules/specs/NativeDevSettings.js +3 -23
  181. package/Libraries/NativeModules/specs/NativeDeviceEventManager.js +3 -9
  182. package/Libraries/NativeModules/specs/NativeDialogManagerAndroid.js +3 -38
  183. package/Libraries/NativeModules/specs/NativeDialogManagerWindows.js +11 -0
  184. package/Libraries/NativeModules/specs/NativeLogBox.js +3 -10
  185. package/Libraries/NativeModules/specs/NativeRedBox.js +4 -11
  186. package/Libraries/NativeModules/specs/NativeSourceCode.js +2 -25
  187. package/Libraries/Network/FormData.js +3 -1
  188. package/Libraries/Network/NativeNetworkingAndroid.js +4 -28
  189. package/Libraries/Network/NativeNetworkingIOS.js +4 -28
  190. package/Libraries/NewAppScreen/components/DebugInstructions.windows.js +4 -2
  191. package/Libraries/NewAppScreen/components/ReloadInstructions.windows.js +3 -1
  192. package/Libraries/Performance/NativeJSCSamplingProfiler.js +3 -9
  193. package/Libraries/PermissionsAndroid/NativePermissionsAndroid.js +4 -68
  194. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +3 -3
  195. package/Libraries/Pressability/Pressability.js +12 -2
  196. package/Libraries/Pressability/Pressability.windows.js +13 -3
  197. package/Libraries/Pressability/usePressability.js +7 -0
  198. package/Libraries/PushNotificationIOS/NativePushNotificationManagerIOS.js +4 -70
  199. package/Libraries/PushNotificationIOS/PushNotificationIOS.js +45 -39
  200. package/Libraries/ReactNative/AppContainer-dev.js +192 -0
  201. package/Libraries/ReactNative/AppContainer-prod.js +53 -0
  202. package/Libraries/ReactNative/AppContainer.js +6 -149
  203. package/Libraries/ReactNative/AppRegistry.js +3 -1
  204. package/Libraries/ReactNative/BridgelessUIManager.js +375 -128
  205. package/Libraries/ReactNative/FabricUIManager.js +6 -0
  206. package/Libraries/ReactNative/NativeHeadlessJsTaskSupport.js +3 -10
  207. package/Libraries/ReactNative/NativeI18nManager.js +3 -18
  208. package/Libraries/ReactNative/NativeUIManager.js +4 -112
  209. package/Libraries/ReactNative/PaperUIManager.js +8 -7
  210. package/Libraries/ReactNative/PaperUIManager.windows.js +29 -8
  211. package/Libraries/ReactNative/ReactFabricInternals.js +1 -1
  212. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +24 -5
  213. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +0 -45
  214. package/Libraries/ReactNative/RendererImplementation.js +11 -0
  215. package/Libraries/ReactNative/UIManager.d.ts +11 -34
  216. package/Libraries/ReactNative/UIManager.js +2 -23
  217. package/Libraries/ReactNative/UIManagerProperties.js +0 -2
  218. package/Libraries/ReactNative/__mocks__/FabricUIManager.js +23 -1
  219. package/Libraries/ReactNative/getNativeComponentAttributes.js +5 -1
  220. package/Libraries/ReactNative/renderApplication.js +9 -6
  221. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +6 -1
  222. package/Libraries/Renderer/implementations/ReactFabric-dev.js +24771 -21123
  223. package/Libraries/Renderer/implementations/ReactFabric-prod.js +4160 -3109
  224. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +4384 -3322
  225. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +25194 -21398
  226. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +3763 -2636
  227. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +4027 -2867
  228. package/Libraries/Renderer/shims/ReactNativeTypes.js +8 -9
  229. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +7 -12
  230. package/Libraries/Settings/NativeSettingsManager.js +4 -16
  231. package/Libraries/Share/NativeShareModule.js +3 -13
  232. package/Libraries/StyleSheet/PlatformColorValueTypes.windows.js +1 -1
  233. package/Libraries/StyleSheet/StyleSheet.d.ts +1 -20
  234. package/Libraries/StyleSheet/StyleSheet.js +5 -28
  235. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +47 -7
  236. package/Libraries/StyleSheet/StyleSheetTypes.js +16 -11
  237. package/Libraries/StyleSheet/flattenStyle.js +2 -2
  238. package/Libraries/StyleSheet/normalizeColor.js +1 -1
  239. package/Libraries/StyleSheet/processAspectRatio.js +1 -1
  240. package/Libraries/StyleSheet/processFontVariant.js +1 -1
  241. package/Libraries/Text/Text.js +0 -6
  242. package/Libraries/Text/Text.windows.js +0 -6
  243. package/Libraries/Text/TextAncestor.js +2 -3
  244. package/Libraries/TurboModule/samples/NativeSampleTurboModule.js +4 -41
  245. package/Libraries/Types/ReactDevToolsTypes.js +58 -0
  246. package/Libraries/Types/UIManagerJSInterface.js +16 -0
  247. package/Libraries/Utilities/DebugEnvironment.js +1 -4
  248. package/Libraries/Utilities/Dimensions.js +8 -16
  249. package/Libraries/Utilities/GlobalPerformanceLogger.js +1 -2
  250. package/Libraries/Utilities/NativeAppearance.js +3 -26
  251. package/Libraries/Utilities/NativeDevLoadingView.js +3 -14
  252. package/Libraries/Utilities/NativeDeviceInfo.js +2 -47
  253. package/Libraries/Utilities/NativePlatformConstantsAndroid.js +3 -34
  254. package/Libraries/Utilities/NativePlatformConstantsIOS.js +3 -26
  255. package/Libraries/Utilities/NativePlatformConstantsWin.js +3 -23
  256. package/Libraries/Utilities/PixelRatio.d.ts +4 -4
  257. package/Libraries/Utilities/Platform.android.js +4 -0
  258. package/Libraries/Utilities/Platform.d.ts +3 -0
  259. package/Libraries/Utilities/Platform.flow.js +7 -0
  260. package/Libraries/Utilities/Platform.flow.windows.js +9 -0
  261. package/Libraries/Utilities/Platform.ios.js +11 -0
  262. package/Libraries/Utilities/Platform.windows.js +6 -0
  263. package/Libraries/Utilities/binaryToBase64.js +1 -1
  264. package/Libraries/Utilities/codegenNativeComponent.js +4 -6
  265. package/Libraries/Utilities/createPerformanceLogger.js +2 -74
  266. package/Libraries/Utilities/useMergeRefs.js +5 -9
  267. package/Libraries/Vibration/NativeVibration.js +3 -14
  268. package/Libraries/WebSocket/NativeWebSocketModule.js +4 -25
  269. package/Libraries/YellowBox/YellowBoxDeprecated.js +1 -1
  270. package/Libraries/vendor/emitter/EventEmitter.js +1 -0
  271. package/Microsoft.ReactNative/AsynchronousEventBeat.cpp +50 -0
  272. package/Microsoft.ReactNative/AsynchronousEventBeat.h +23 -0
  273. package/Microsoft.ReactNative/Base/CoreUIManagers.cpp +4 -0
  274. package/Microsoft.ReactNative/Base/CxxReactIncludes.h +1 -1
  275. package/Microsoft.ReactNative/Base/FollyIncludes.h +2 -2
  276. package/Microsoft.ReactNative/ComponentView.idl +106 -0
  277. package/Microsoft.ReactNative/Composition.Input.idl +16 -2
  278. package/Microsoft.ReactNative/CompositionComponentView.idl +117 -0
  279. package/Microsoft.ReactNative/CompositionContext.idl +1 -1
  280. package/Microsoft.ReactNative/CompositionRootView.idl +8 -0
  281. package/Microsoft.ReactNative/CompositionSwitcher.idl +25 -14
  282. package/Microsoft.ReactNative/DevMenuControl.idl +0 -3
  283. package/Microsoft.ReactNative/DevMenuControl.xaml +0 -15
  284. package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.cpp +189 -0
  285. package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.h +80 -0
  286. package/Microsoft.ReactNative/Fabric/AbiShadowNode.cpp +83 -0
  287. package/Microsoft.ReactNative/Fabric/AbiShadowNode.h +83 -0
  288. package/Microsoft.ReactNative/Fabric/AbiState.cpp +71 -0
  289. package/Microsoft.ReactNative/Fabric/AbiState.h +38 -0
  290. package/Microsoft.ReactNative/Fabric/AbiViewComponentDescriptor.cpp +48 -19
  291. package/Microsoft.ReactNative/Fabric/AbiViewComponentDescriptor.h +8 -16
  292. package/Microsoft.ReactNative/Fabric/AbiViewProps.cpp +97 -0
  293. package/Microsoft.ReactNative/Fabric/AbiViewProps.h +39 -0
  294. package/Microsoft.ReactNative/Fabric/AbiViewShadowNode.cpp +90 -0
  295. package/Microsoft.ReactNative/Fabric/AbiViewShadowNode.h +87 -0
  296. package/Microsoft.ReactNative/Fabric/ComponentView.cpp +340 -0
  297. package/Microsoft.ReactNative/Fabric/ComponentView.h +130 -64
  298. package/Microsoft.ReactNative/Fabric/Composition/ActivityIndicatorComponentView.cpp +48 -24
  299. package/Microsoft.ReactNative/Fabric/Composition/ActivityIndicatorComponentView.h +18 -14
  300. package/Microsoft.ReactNative/Fabric/Composition/ComponentViewRegistry.cpp +42 -27
  301. package/Microsoft.ReactNative/Fabric/Composition/ComponentViewRegistry.h +3 -1
  302. package/Microsoft.ReactNative/Fabric/Composition/Composition.Input.cpp +123 -28
  303. package/Microsoft.ReactNative/Fabric/Composition/Composition.Input.h +69 -13
  304. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.cpp +651 -284
  305. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.h +7 -7
  306. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper_emptyimpl.cpp +9 -9
  307. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +120 -31
  308. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.h +12 -2
  309. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +308 -129
  310. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.h +34 -6
  311. package/Microsoft.ReactNative/Fabric/Composition/CompositionHelpers.h +2 -1
  312. package/Microsoft.ReactNative/Fabric/Composition/CompositionHwndHost.cpp +61 -54
  313. package/Microsoft.ReactNative/Fabric/Composition/CompositionHwndHost.h +0 -9
  314. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootAutomationProvider.cpp +99 -30
  315. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootAutomationProvider.h +4 -3
  316. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootView.cpp +273 -28
  317. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootView.h +28 -3
  318. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootView_emptyimpl.cpp +7 -3
  319. package/Microsoft.ReactNative/Fabric/Composition/CompositionUIService.cpp +4 -0
  320. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +479 -280
  321. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.h +133 -79
  322. package/Microsoft.ReactNative/Fabric/Composition/DebuggingOverlayComponentView.cpp +113 -0
  323. package/Microsoft.ReactNative/Fabric/Composition/DebuggingOverlayComponentView.h +39 -0
  324. package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.cpp +61 -41
  325. package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.h +19 -14
  326. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentDescriptor.h +39 -0
  327. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.cpp +343 -0
  328. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.h +67 -0
  329. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewShadowNode.cpp +18 -0
  330. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewShadowNode.h +39 -0
  331. package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +53 -186
  332. package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.h +20 -12
  333. package/Microsoft.ReactNative/Fabric/Composition/ReactCompositionViewComponentBuilder.cpp +59 -150
  334. package/Microsoft.ReactNative/Fabric/Composition/ReactCompositionViewComponentBuilder.h +27 -76
  335. package/Microsoft.ReactNative/Fabric/Composition/RootComponentView.cpp +81 -32
  336. package/Microsoft.ReactNative/Fabric/Composition/RootComponentView.h +27 -14
  337. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +707 -64
  338. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.h +47 -26
  339. package/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.cpp +225 -125
  340. package/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.h +34 -21
  341. package/Microsoft.ReactNative/Fabric/Composition/TextDrawing.cpp +179 -0
  342. package/Microsoft.ReactNative/Fabric/Composition/TextDrawing.h +25 -0
  343. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentDescriptor.h +110 -115
  344. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +228 -79
  345. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.h +43 -22
  346. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputEventEmitter.cpp +18 -0
  347. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputEventEmitter.h +12 -0
  348. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputProps.h +5 -5
  349. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.cpp +5 -1
  350. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.h +1 -2
  351. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputState.cpp +4 -44
  352. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputState.h +11 -9
  353. package/Microsoft.ReactNative/Fabric/Composition/Theme.cpp +550 -0
  354. package/Microsoft.ReactNative/Fabric/Composition/Theme.h +73 -0
  355. package/Microsoft.ReactNative/Fabric/Composition/Theme_emptyimpl.cpp +85 -0
  356. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +48 -26
  357. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +6 -2
  358. package/Microsoft.ReactNative/Fabric/Composition/UnimplementedNativeViewComponentView.cpp +30 -65
  359. package/Microsoft.ReactNative/Fabric/Composition/UnimplementedNativeViewComponentView.h +16 -25
  360. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +72 -88
  361. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +5 -2
  362. package/Microsoft.ReactNative/Fabric/IComponentViewRegistry.h +3 -2
  363. package/Microsoft.ReactNative/Fabric/ReactNativeConfigProperties.cpp +6 -6
  364. package/Microsoft.ReactNative/Fabric/ReactNativeConfigProperties.h +2 -2
  365. package/Microsoft.ReactNative/Fabric/ReactTaggedView.h +12 -7
  366. package/Microsoft.ReactNative/Fabric/WindowsComponentDescriptorRegistry.cpp +28 -19
  367. package/Microsoft.ReactNative/Fabric/WindowsComponentDescriptorRegistry.h +5 -0
  368. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewEventEmitter.cpp +0 -2
  369. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewTraitsInitializer.h +5 -1
  370. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/WindowsViewEvents.h +2 -4
  371. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/Float.h +20 -0
  372. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/HostPlatformColor.h +86 -0
  373. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/PlatformColorParser.h +38 -0
  374. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/{Color.cpp → PlatformColorUtils.cpp} +7 -77
  375. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/PlatformColorUtils.h +12 -0
  376. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.cpp +1 -0
  377. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.h +2 -0
  378. package/Microsoft.ReactNative/IReactCompositionViewComponentBuilder.idl +6 -87
  379. package/Microsoft.ReactNative/IReactContext.idl +3 -0
  380. package/Microsoft.ReactNative/IReactViewComponentBuilder.idl +71 -1
  381. package/Microsoft.ReactNative/JsiApi.cpp +17 -7
  382. package/Microsoft.ReactNative/JsiApi.h +2 -2
  383. package/Microsoft.ReactNative/JsiApi.idl +5 -4
  384. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +13 -22
  385. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +6 -2
  386. package/Microsoft.ReactNative/Modules/AccessibilityInfoModule.h +1 -1
  387. package/Microsoft.ReactNative/Modules/AlertModule.h +2 -2
  388. package/Microsoft.ReactNative/Modules/Animated/PropsAnimatedNode.cpp +12 -8
  389. package/Microsoft.ReactNative/Modules/Animated/PropsAnimatedNode.h +1 -1
  390. package/Microsoft.ReactNative/Modules/AppStateModule.h +2 -2
  391. package/Microsoft.ReactNative/Modules/AppThemeModuleUwp.cpp +5 -3
  392. package/Microsoft.ReactNative/Modules/AppThemeModuleUwp.h +4 -4
  393. package/Microsoft.ReactNative/Modules/AppearanceModule.cpp +10 -1
  394. package/Microsoft.ReactNative/Modules/ClipboardModule.h +1 -1
  395. package/Microsoft.ReactNative/Modules/DeviceInfoModule.cpp +71 -38
  396. package/Microsoft.ReactNative/Modules/DeviceInfoModule.h +5 -5
  397. package/Microsoft.ReactNative/Modules/ExceptionsManager.cpp +110 -0
  398. package/Microsoft.ReactNative/Modules/ExceptionsManager.h +54 -0
  399. package/Microsoft.ReactNative/Modules/ImageViewManagerModule.h +11 -10
  400. package/Microsoft.ReactNative/Modules/LinkingManagerModule.h +8 -6
  401. package/Microsoft.ReactNative/Modules/LogBoxModule.h +3 -3
  402. package/Microsoft.ReactNative/Modules/NativeUIManager.cpp +5 -28
  403. package/Microsoft.ReactNative/Modules/NativeUIManager.h +1 -1
  404. package/Microsoft.ReactNative/Modules/PaperUIManagerModule.cpp +8 -5
  405. package/Microsoft.ReactNative/Modules/PaperUIManagerModule.h +3 -3
  406. package/Microsoft.ReactNative/Modules/PlatformConstantsWinModule.cpp +49 -0
  407. package/Microsoft.ReactNative/Modules/PlatformConstantsWinModule.h +18 -0
  408. package/Microsoft.ReactNative/Modules/SourceCode.cpp +31 -0
  409. package/Microsoft.ReactNative/Modules/SourceCode.h +28 -0
  410. package/Microsoft.ReactNative/Modules/StatusBarManager.h +12 -0
  411. package/Microsoft.ReactNative/Modules/Timing.cpp +325 -0
  412. package/Microsoft.ReactNative/Modules/Timing.h +121 -0
  413. package/Microsoft.ReactNative/QuirkSettings.cpp +32 -0
  414. package/Microsoft.ReactNative/QuirkSettings.h +9 -0
  415. package/Microsoft.ReactNative/QuirkSettings.idl +6 -0
  416. package/Microsoft.ReactNative/ReactCoreInjection.cpp +15 -0
  417. package/Microsoft.ReactNative/ReactCoreInjection.h +4 -0
  418. package/Microsoft.ReactNative/ReactCoreInjection.idl +8 -0
  419. package/Microsoft.ReactNative/ReactHost/IReactInstance.h +1 -1
  420. package/Microsoft.ReactNative/ReactHost/MsoReactContext.cpp +1 -1
  421. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +556 -234
  422. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.h +36 -9
  423. package/Microsoft.ReactNative/ReactInstanceSettings.idl +3 -0
  424. package/Microsoft.ReactNative/ReactPointerEventArgs.cpp +8 -0
  425. package/Microsoft.ReactNative/ReactPointerEventArgs.h +4 -0
  426. package/Microsoft.ReactNative/ReactPointerEventArgs.idl +12 -0
  427. package/Microsoft.ReactNative/SchedulerSettings.cpp +23 -0
  428. package/Microsoft.ReactNative/SchedulerSettings.h +9 -1
  429. package/Microsoft.ReactNative/SynchronousEventBeat.cpp +41 -0
  430. package/Microsoft.ReactNative/SynchronousEventBeat.h +29 -0
  431. package/Microsoft.ReactNative/Theme.idl +57 -0
  432. package/Microsoft.ReactNative/Timer.cpp +63 -0
  433. package/Microsoft.ReactNative/{CoreAppPage.h → Timer.h} +12 -5
  434. package/Microsoft.ReactNative/Timer.idl +34 -0
  435. package/Microsoft.ReactNative/TurboModulesProvider.cpp +4 -0
  436. package/Microsoft.ReactNative/Utils/ImageUtils.cpp +37 -3
  437. package/Microsoft.ReactNative/Utils/ImageUtils.h +0 -1
  438. package/Microsoft.ReactNative/Utils/LocalBundleReader.cpp +11 -12
  439. package/Microsoft.ReactNative/Utils/LocalBundleReader.h +3 -3
  440. package/Microsoft.ReactNative/Utils/ThemeUtils.cpp +33 -0
  441. package/Microsoft.ReactNative/Utils/ThemeUtils.h +13 -0
  442. package/Microsoft.ReactNative/Utils/ValueUtils.cpp +0 -5
  443. package/Microsoft.ReactNative/Utils/ValueUtils.h +0 -3
  444. package/Microsoft.ReactNative/ViewProps.idl +17 -0
  445. package/Microsoft.ReactNative/Views/ActivityIndicatorViewManager.cpp +1 -0
  446. package/Microsoft.ReactNative/Views/DebuggingOverlayViewManager.cpp +54 -0
  447. package/Microsoft.ReactNative/Views/DebuggingOverlayViewManager.h +30 -0
  448. package/Microsoft.ReactNative/Views/DevMenu.cpp +1 -20
  449. package/Microsoft.ReactNative/Views/DynamicAutomationPeer.cpp +157 -0
  450. package/Microsoft.ReactNative/Views/DynamicAutomationPeer.h +5 -0
  451. package/Microsoft.ReactNative/Views/DynamicAutomationProperties.cpp +20 -0
  452. package/Microsoft.ReactNative/Views/DynamicAutomationProperties.h +4 -0
  453. package/Microsoft.ReactNative/Views/FlyoutViewManager.cpp +1 -5
  454. package/Microsoft.ReactNative/Views/FrameworkElementViewManager.cpp +137 -0
  455. package/Microsoft.ReactNative/Views/ICompositionRootView.h +0 -1
  456. package/Microsoft.ReactNative/Views/Image/ImageViewManager.cpp +0 -5
  457. package/Microsoft.ReactNative/Views/PopupViewManager.cpp +1 -5
  458. package/Microsoft.ReactNative/Views/ShadowNodeBase.cpp +11 -0
  459. package/Microsoft.ReactNative/Views/ShadowNodeBase.h +3 -4
  460. package/Microsoft.ReactNative/Views/TextInputViewManager.cpp +0 -6
  461. package/Microsoft.ReactNative/Views/TextViewManager.cpp +0 -11
  462. package/Microsoft.ReactNative/Views/TouchEventHandler.cpp +1 -1
  463. package/Microsoft.ReactNative/Views/UnimplementedViewManager.cpp +79 -0
  464. package/Microsoft.ReactNative/Views/UnimplementedViewManager.h +27 -0
  465. package/Microsoft.ReactNative/Views/ViewManagerBase.cpp +46 -0
  466. package/Microsoft.ReactNative/Views/ViewManagerBase.h +1 -1
  467. package/Microsoft.ReactNative/Views/cppwinrt/DynamicAutomationPeer.idl +77 -2
  468. package/Microsoft.ReactNative/microsoft.reactnative.def +0 -3
  469. package/Microsoft.ReactNative/packages.lock.json +9 -6
  470. package/{Shared/Composition → Microsoft.ReactNative.Cxx}/AutoDraw.h +2 -0
  471. package/{Shared/Composition → Microsoft.ReactNative.Cxx}/CompositionSwitcher.interop.h +4 -10
  472. package/Microsoft.ReactNative.Cxx/CppWinRTIncludes.h +0 -5
  473. package/Microsoft.ReactNative.Cxx/DesktopWindowBridge.h +5 -0
  474. package/Microsoft.ReactNative.Cxx/JSI/JsiAbiApi.cpp +19 -10
  475. package/Microsoft.ReactNative.Cxx/JSI/JsiAbiApi.h +2 -0
  476. package/Microsoft.ReactNative.Cxx/JSValueComposition.h +22 -0
  477. package/Microsoft.ReactNative.Cxx/JSValueReader.h +19 -0
  478. package/Microsoft.ReactNative.Cxx/JSValueXaml.h +1 -1
  479. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +6 -4
  480. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems.filters +0 -1
  481. package/Microsoft.ReactNative.Cxx/NativeModules.h +15 -15
  482. package/Microsoft.ReactNative.Cxx/TurboModuleProvider.cpp +1 -1
  483. package/Microsoft.ReactNative.Managed/ReactSettingsSnapshot.cs +2 -0
  484. package/Microsoft.ReactNative.Managed/packages.lock.json +6 -3
  485. package/Microsoft.ReactNative.Managed.CodeGen/Microsoft.ReactNative.Managed.CodeGen.csproj +0 -1
  486. package/Mso/future/details/executor.h +1 -1
  487. package/Mso/src/debugAssertApi/debugAssertApi.cpp +1 -1
  488. package/PropertySheets/External/Microsoft.ReactNative.Composition.Common.props +8 -0
  489. package/PropertySheets/External/Microsoft.ReactNative.Composition.CppLib.props +24 -0
  490. package/PropertySheets/External/Microsoft.ReactNative.Composition.CppLib.targets +20 -0
  491. package/PropertySheets/External/Microsoft.ReactNative.Cpp.Dependencies.props +1 -1
  492. package/PropertySheets/External/Microsoft.ReactNative.WindowsSdk.Default.props +2 -0
  493. package/PropertySheets/Generated/PackageVersion.g.props +4 -4
  494. package/PropertySheets/JSEngine.props +0 -8
  495. package/PropertySheets/React.Cpp.props +14 -3
  496. package/PropertySheets/ReactCommunity.cpp.props +2 -2
  497. package/PropertySheets/Release.props +0 -1
  498. package/PropertySheets/WinUI.props +21 -1
  499. package/PropertySheets/x64.props +3 -0
  500. package/PropertySheets/x86.props +3 -0
  501. package/ReactCommon/ReactCommon.vcxproj +13 -8
  502. package/ReactCommon/ReactCommon.vcxproj.filters +12 -1
  503. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +114 -19
  504. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.cpp +66 -0
  505. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleBinding.cpp +114 -52
  506. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleUtils.h +13 -15
  507. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/scrollview/ScrollViewProps.cpp +535 -0
  508. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/ReactInstance.cpp +437 -0
  509. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/utils/jsi-utils.cpp +39 -0
  510. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/utils/jsi-utils.h +31 -0
  511. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/YGEnums.h +19 -24
  512. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/algorithm/CalculateLayout.cpp +600 -980
  513. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/enums/ExperimentalFeature.h +5 -11
  514. package/ReactCommon/cgmanifest.json +1 -1
  515. package/Scripts/EnableInternalWinAppSDKFeed.ps1 +21 -0
  516. package/Scripts/IntegrationTests.ps1 +26 -15
  517. package/Scripts/Microsoft.ReactNative.targets +0 -6
  518. package/Scripts/OfficeReact.Win32.nuspec +1 -2
  519. package/Scripts/TestServers.ps1 +2 -28
  520. package/Scripts/Tfs/Start-TestServers.ps1 +1 -21
  521. package/Scripts/Tfs/Stop-TestServers.ps1 +0 -5
  522. package/Scripts/rnw-dependencies.ps1 +38 -67
  523. package/Shared/CreateInstance.h +25 -0
  524. package/Shared/DevServerHelper.h +0 -3
  525. package/Shared/DevSettings.h +9 -0
  526. package/Shared/HermesRuntimeHolder.cpp +17 -0
  527. package/Shared/HermesRuntimeHolder.h +17 -0
  528. package/Shared/HermesSamplingProfiler.cpp +12 -10
  529. package/Shared/HermesSamplingProfiler.h +5 -4
  530. package/Shared/IDevSupportManager.h +4 -2
  531. package/Shared/InstanceManager.cpp +13 -11
  532. package/Shared/InstanceManager.h +8 -18
  533. package/Shared/JSI/ChakraRuntime.cpp +66 -9
  534. package/Shared/JSI/ChakraRuntime.h +8 -0
  535. package/Shared/JSI/JSExecutorFactoryDelegate.h +12 -0
  536. package/Shared/JSI/JSExecutorFactorySettings.cpp +30 -0
  537. package/Shared/JSI/JSExecutorFactorySettings.h +21 -0
  538. package/Shared/Modules/BlobModule.h +1 -1
  539. package/Shared/Modules/FileReaderModule.h +1 -1
  540. package/Shared/Modules/HttpModule.h +1 -1
  541. package/Shared/Modules/WebSocketTurboModule.h +1 -1
  542. package/Shared/Networking/OriginPolicyHttpFilter.cpp +19 -23
  543. package/Shared/Networking/OriginPolicyHttpFilter.h +4 -7
  544. package/Shared/Networking/WinRTHttpResource.cpp +2 -4
  545. package/Shared/OInstance.cpp +212 -165
  546. package/Shared/OInstance.h +19 -0
  547. package/Shared/Shared.vcxitems +134 -50
  548. package/Shared/Shared.vcxitems.filters +81 -24
  549. package/Shared/Utils.cpp +12 -10
  550. package/Shared/Utils.h +2 -2
  551. package/Shared/WebSocketJSExecutorFactory.h +1 -0
  552. package/codegen/NativeBugReportingSpec.g.h +0 -6
  553. package/codegen/NativeFrameRateLoggerSpec.g.h +0 -2
  554. package/codegen/NativeImageLoaderAndroidSpec.g.h +10 -23
  555. package/codegen/NativePerformanceObserverSpec.g.h +6 -0
  556. package/codegen/NativePlatformConstantsIOSSpec.g.h +2 -0
  557. package/codegen/NativePlatformConstantsWinSpec.g.h +17 -0
  558. package/codegen/NativePushNotificationManagerIOSSpec.g.h +8 -6
  559. package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +88 -0
  560. package/codegen/NativeUIManagerSpec.g.h +83 -95
  561. package/codegen/react/components/rnwcore/ComponentDescriptors.h +10 -7
  562. package/codegen/react/components/rnwcore/EventEmitters.cpp +40 -52
  563. package/codegen/react/components/rnwcore/EventEmitters.h +66 -84
  564. package/codegen/react/components/rnwcore/Props.cpp +60 -95
  565. package/codegen/react/components/rnwcore/Props.h +198 -239
  566. package/codegen/react/components/rnwcore/ShadowNodes.cpp +6 -7
  567. package/codegen/react/components/rnwcore/ShadowNodes.h +38 -29
  568. package/codegen/react/components/rnwcore/States.cpp +3 -5
  569. package/codegen/react/components/rnwcore/States.h +29 -16
  570. package/codegen/rnwcoreJSI-generated.cpp +1442 -1398
  571. package/codegen/rnwcoreJSI.h +6066 -3593
  572. package/index.js +66 -99
  573. package/index.windows.js +60 -102
  574. package/jest/assetFileTransformer.js +1 -1
  575. package/jest/local-setup.js +0 -5
  576. package/jest/mockModal.js +2 -1
  577. package/jest/mockScrollView.js +1 -2
  578. package/jest/renderer.js +1 -1
  579. package/jest/setup.js +6 -3
  580. package/just-task.js +1 -1
  581. package/package.json +30 -29
  582. package/{Libraries/Core → src/private/core}/setUpDOM.js +2 -2
  583. package/src/private/featureflags/NativeReactNativeFeatureFlags.js +42 -0
  584. package/src/private/featureflags/ReactNativeFeatureFlags.js +140 -0
  585. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +84 -0
  586. package/src/private/featureflags/__tests__/ReactNativeFeatureFlags-test.js +92 -0
  587. package/src/private/specs/components/ActivityIndicatorViewNativeComponent.js +53 -0
  588. package/src/private/specs/components/AndroidDrawerLayoutNativeComponent.js +124 -0
  589. package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +26 -0
  590. package/src/private/specs/components/AndroidSwipeRefreshLayoutNativeComponent.js +74 -0
  591. package/src/private/specs/components/AndroidSwitchNativeComponent.js +62 -0
  592. package/src/private/specs/components/DebuggingOverlayNativeComponent.js +61 -0
  593. package/src/private/specs/components/PopupMenuAndroidNativeComponent.js +47 -0
  594. package/src/private/specs/components/ProgressBarAndroidNativeComponent.js +36 -0
  595. package/src/private/specs/components/PullToRefreshViewNativeComponent.js +71 -0
  596. package/src/private/specs/components/RCTInputAccessoryViewNativeComponent.js +26 -0
  597. package/src/private/specs/components/RCTModalHostViewNativeComponent.js +139 -0
  598. package/src/private/specs/components/RCTSafeAreaViewNativeComponent.js +25 -0
  599. package/src/private/specs/components/SwitchNativeComponent.js +61 -0
  600. package/src/private/specs/components/UnimplementedNativeViewNativeComponent.js +26 -0
  601. package/src/private/specs/modules/NativeAccessibilityInfo.js +33 -0
  602. package/src/private/specs/modules/NativeAccessibilityManager.js +66 -0
  603. package/src/private/specs/modules/NativeActionSheetManager.js +54 -0
  604. package/src/private/specs/modules/NativeAlertManager.js +35 -0
  605. package/src/private/specs/modules/NativeAnimatedModule.js +77 -0
  606. package/src/private/specs/modules/NativeAnimatedTurboModule.js +78 -0
  607. package/src/private/specs/modules/NativeAnimationsDebugModule.js +20 -0
  608. package/src/private/specs/modules/NativeAppState.js +33 -0
  609. package/src/private/specs/modules/NativeAppTheme.js +33 -0
  610. package/src/private/specs/modules/NativeAppearance.js +36 -0
  611. package/src/private/specs/modules/NativeBlobModule.js +59 -0
  612. package/src/private/specs/modules/NativeBugReporting.js +20 -0
  613. package/src/private/specs/modules/NativeClipboard.js +21 -0
  614. package/src/private/specs/modules/NativeDevLoadingView.js +24 -0
  615. package/src/private/specs/modules/NativeDevMenu.js +23 -0
  616. package/src/private/specs/modules/NativeDevSettings.js +33 -0
  617. package/src/private/specs/modules/NativeDevToolsSettingsManager.js +24 -0
  618. package/src/private/specs/modules/NativeDeviceEventManager.js +19 -0
  619. package/src/private/specs/modules/NativeDeviceInfo.js +58 -0
  620. package/src/private/specs/modules/NativeDialogManagerAndroid.js +48 -0
  621. package/{Libraries/Alert → src/private/specs/modules}/NativeDialogManagerWindows.js +5 -4
  622. package/src/private/specs/modules/NativeExceptionsManager.js +103 -0
  623. package/src/private/specs/modules/NativeFileReaderModule.js +22 -0
  624. package/src/private/specs/modules/NativeFrameRateLogger.js +22 -0
  625. package/src/private/specs/modules/NativeHeadlessJsTaskSupport.js +20 -0
  626. package/src/private/specs/modules/NativeI18nManager.js +28 -0
  627. package/src/private/specs/modules/NativeImageEditor.js +52 -0
  628. package/src/private/specs/modules/NativeImageLoaderAndroid.js +30 -0
  629. package/src/private/specs/modules/NativeImageLoaderIOS.js +37 -0
  630. package/src/private/specs/modules/NativeImageStoreAndroid.js +26 -0
  631. package/src/private/specs/modules/NativeImageStoreIOS.js +33 -0
  632. package/src/private/specs/modules/NativeIntentAndroid.js +30 -0
  633. package/src/private/specs/modules/NativeIntersectionObserver.js +41 -0
  634. package/src/private/specs/modules/NativeJSCHeapCapture.js +19 -0
  635. package/src/private/specs/modules/NativeJSCSamplingProfiler.js +19 -0
  636. package/src/private/specs/modules/NativeKeyboardObserver.js +20 -0
  637. package/src/private/specs/modules/NativeLinkingManager.js +27 -0
  638. package/src/private/specs/modules/NativeLogBox.js +20 -0
  639. package/src/private/specs/modules/NativeModalManager.js +21 -0
  640. package/src/private/specs/modules/NativeMutationObserver.js +58 -0
  641. package/src/private/specs/modules/NativeNetworkingAndroid.js +37 -0
  642. package/src/private/specs/modules/NativeNetworkingIOS.js +37 -0
  643. package/src/private/specs/modules/NativePermissionsAndroid.js +77 -0
  644. package/src/private/specs/modules/NativePlatformConstantsAndroid.js +44 -0
  645. package/src/private/specs/modules/NativePlatformConstantsIOS.js +37 -0
  646. package/src/private/specs/modules/NativePlatformConstantsWin.js +38 -0
  647. package/src/private/specs/modules/NativePushNotificationManagerIOS.js +107 -0
  648. package/src/private/specs/modules/NativeRedBox.js +20 -0
  649. package/src/private/specs/modules/NativeSampleTurboModule.js +53 -0
  650. package/src/private/specs/modules/NativeSegmentFetcher.js +28 -0
  651. package/src/private/specs/modules/NativeSettingsManager.js +25 -0
  652. package/src/private/specs/modules/NativeShareModule.js +23 -0
  653. package/src/private/specs/modules/NativeSoundManager.js +22 -0
  654. package/src/private/specs/modules/NativeSourceCode.js +36 -0
  655. package/src/private/specs/modules/NativeStatusBarManagerAndroid.js +68 -0
  656. package/src/private/specs/modules/NativeStatusBarManagerIOS.js +89 -0
  657. package/src/private/specs/modules/NativeTiming.js +26 -0
  658. package/src/private/specs/modules/NativeToastAndroid.js +38 -0
  659. package/src/private/specs/modules/NativeUIManager.js +118 -0
  660. package/src/private/specs/modules/NativeVibration.js +24 -0
  661. package/src/private/specs/modules/NativeWebSocketModule.js +34 -0
  662. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReactNativeElement.js +6 -6
  663. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyCharacterData.js +2 -2
  664. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyElement.js +5 -5
  665. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyNode.js +19 -10
  666. package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/DOMRectList.js +1 -1
  667. package/src/private/webapis/dom/oldstylecollections/__tests__/DOMRectList-test.js +85 -0
  668. package/src/private/webapis/dom/oldstylecollections/__tests__/HTMLCollection-test.js +80 -0
  669. package/src/private/webapis/dom/oldstylecollections/__tests__/NodeList-test.js +161 -0
  670. package/{Libraries/WebPerformance → src/private/webapis/performance}/NativePerformance.js +2 -2
  671. package/{Libraries/WebPerformance → src/private/webapis/performance}/NativePerformanceObserver.js +3 -2
  672. package/{Libraries/WebPerformance → src/private/webapis/performance}/Performance.js +2 -2
  673. package/{Libraries/WebPerformance → src/private/webapis/performance}/PerformanceEventTiming.js +1 -1
  674. package/{Libraries/WebPerformance → src/private/webapis/performance}/PerformanceObserver.js +21 -2
  675. package/{Libraries/WebPerformance → src/private/webapis/performance}/RawPerformanceEntry.js +1 -1
  676. package/{Libraries/WebPerformance → src/private/webapis/performance}/__mocks__/NativePerformanceObserver.js +9 -0
  677. package/src/private/webapis/performance/__tests__/EventCounts-test.js +116 -0
  678. package/src/private/webapis/performance/__tests__/NativePerformanceMock-test.js +82 -0
  679. package/src/private/webapis/performance/__tests__/NativePerformanceObserverMock-test.js +108 -0
  680. package/src/private/webapis/performance/__tests__/Performance-test.js +117 -0
  681. package/src/private/webapis/performance/__tests__/PerformanceObserver-test.js +208 -0
  682. package/template/cpp-app/src/App.cpp +2 -2
  683. package/template/cs-app/src/App.xaml.cs +2 -2
  684. package/templates/cpp-app/jest.config.windows.js +3 -0
  685. package/templates/cpp-app/metro.config.js +0 -2
  686. package/templates/cpp-app/template.config.js +24 -9
  687. package/templates/cpp-app/windows/ExperimentalFeatures.props +1 -1
  688. package/templates/cpp-app/windows/MyApp/AutolinkedNativeModules.g.cpp +13 -0
  689. package/templates/cpp-app/windows/MyApp/AutolinkedNativeModules.g.h +10 -0
  690. package/templates/cpp-app/windows/MyApp/MyApp.cpp +134 -249
  691. package/templates/cpp-app/windows/MyApp/MyApp.vcxproj +12 -11
  692. package/templates/cpp-app/windows/MyApp/MyApp.vcxproj.filters +6 -3
  693. package/templates/cpp-app/windows/MyApp/pch.h +12 -9
  694. package/templates/cpp-app/windows/MyApp/resource.h +0 -1
  695. package/templates/cpp-app/windows/MyApp.sln +26 -26
  696. package/templates/cpp-lib/example/metro.config.js +74 -0
  697. package/templates/cpp-lib/template.config.js +235 -0
  698. package/templates/cpp-lib/windows/ExperimentalFeatures.props +11 -0
  699. package/templates/cpp-lib/windows/MyLib/MyLib.cpp +18 -0
  700. package/templates/cpp-lib/windows/MyLib/MyLib.def +3 -0
  701. package/templates/cpp-lib/windows/MyLib/MyLib.h +31 -0
  702. package/templates/cpp-lib/windows/MyLib/MyLib.rc +0 -0
  703. package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj +148 -0
  704. package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj.filters +44 -0
  705. package/templates/cpp-lib/windows/MyLib/ReactPackageProvider.cpp +20 -0
  706. package/templates/cpp-lib/windows/MyLib/ReactPackageProvider.h +24 -0
  707. package/templates/cpp-lib/windows/MyLib/ReactPackageProvider.idl +9 -0
  708. package/templates/cpp-lib/windows/MyLib/pch.cpp +1 -0
  709. package/templates/cpp-lib/windows/MyLib/pch.h +30 -0
  710. package/templates/cpp-lib/windows/MyLib/resource.h +5 -0
  711. package/templates/cpp-lib/windows/MyLib/targetver.h +8 -0
  712. package/templates/cpp-lib/windows/MyLib.sln +156 -0
  713. package/templates/cpp-lib/windows/_gitignore +41 -0
  714. package/templates/templateUtils.js +137 -0
  715. package/types/modules/globals.d.ts +1 -0
  716. package/Folly/TEMP_UntilFollyUpdate/hash/Hash.h +0 -1016
  717. package/Libraries/Components/Button.flow.js +0 -265
  718. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.windows.js +0 -8
  719. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.windows.js +0 -14
  720. package/Libraries/Components/SafeAreaView/SafeAreaView.windows.js +0 -34
  721. package/Libraries/Components/ScrollView/ScrollView.windows.js +0 -1941
  722. package/Libraries/Components/ScrollView/ScrollViewViewConfig.js +0 -85
  723. package/Libraries/Components/ToastAndroid/ToastAndroid.windows.js +0 -45
  724. package/Libraries/Components/Touchable/Touchable.flow.js +0 -284
  725. package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlay.js +0 -189
  726. package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlayNativeComponent.js +0 -43
  727. package/Libraries/Image/Image.flow.js +0 -64
  728. package/Libraries/Inspector/DevtoolsOverlay.js +0 -223
  729. package/Libraries/Performance/QuickPerformanceLogger.js +0 -142
  730. package/Libraries/Settings/Settings.windows.js +0 -28
  731. package/Microsoft.ReactNative/CoreApp.cpp +0 -303
  732. package/Microsoft.ReactNative/CoreAppPage.cpp +0 -21
  733. package/Microsoft.ReactNative/CoreAppPage.idl +0 -12
  734. package/Microsoft.ReactNative/CoreAppPage.xaml +0 -14
  735. package/Microsoft.ReactNative/Fabric/Composition/AbiCompositionViewComponentView.cpp +0 -197
  736. package/Microsoft.ReactNative/Fabric/Composition/AbiCompositionViewComponentView.h +0 -84
  737. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rnwcore/EventEmitters.h +0 -5
  738. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rnwcore/Props.h +0 -5
  739. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rnwcore/ShadowNodes.h +0 -5
  740. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rnwcore/States.h +0 -5
  741. package/Microsoft.ReactNative/Fabric/platform/react/renderer/core/graphicsConversions.h +0 -245
  742. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/Color.h +0 -134
  743. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/conversions.h +0 -27
  744. package/Microsoft.ReactNative/Modules/TimingModule.cpp +0 -229
  745. package/Microsoft.ReactNative/Modules/TimingModule.h +0 -88
  746. package/Microsoft.ReactNative.Cxx/CoreApp.h +0 -60
  747. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/LongLivedObject.cpp +0 -60
  748. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/LongLivedObject.h +0 -60
  749. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleBinding.h +0 -63
  750. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/YogaLayoutableShadowNode.cpp +0 -1038
  751. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/YogaStylableProps.cpp +0 -503
  752. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/conversions.h +0 -895
  753. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/mapbuffer/MapBufferBuilder.cpp +0 -182
  754. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/mounting/ShadowTree.cpp +0 -543
  755. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/uimanager/UIManagerBinding.cpp +0 -1505
  756. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/bits/NumericBitfield.h +0 -67
  757. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/config/Config.h +0 -93
  758. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/node/LayoutResults.h +0 -88
  759. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/node/Node.cpp +0 -606
  760. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/node/Node.h +0 -344
  761. package/ReactCommon/Yoga.cpp +0 -961
  762. /package/{Libraries/DOM/Geometry → src/private/webapis/dom/geometry}/DOMRect.js +0 -0
  763. /package/{Libraries/DOM/Geometry → src/private/webapis/dom/geometry}/DOMRectReadOnly.js +0 -0
  764. /package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyText.js +0 -0
  765. /package/{Libraries/DOM/Nodes/Utilities → src/private/webapis/dom/nodes/utilities}/Traversal.js +0 -0
  766. /package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/ArrayLikeUtils.js +0 -0
  767. /package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/HTMLCollection.js +0 -0
  768. /package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/NodeList.js +0 -0
  769. /package/{Libraries/WebPerformance → src/private/webapis/performance}/EventCounts.js +0 -0
  770. /package/{Libraries/WebPerformance → src/private/webapis/performance}/MemoryInfo.js +0 -0
  771. /package/{Libraries/WebPerformance → src/private/webapis/performance}/PerformanceEntry.js +0 -0
  772. /package/{Libraries/WebPerformance → src/private/webapis/performance}/ReactNativeStartupTiming.js +0 -0
  773. /package/{Libraries/WebPerformance → src/private/webapis/performance}/__mocks__/NativePerformance.js +0 -0
@@ -6,6 +6,10 @@
6
6
 
7
7
  #include "CompositionViewComponentView.h"
8
8
 
9
+ #include <Fabric/AbiState.h>
10
+ #include <Fabric/AbiViewProps.h>
11
+ #include <Fabric/Composition/CompositionRootView.h>
12
+ #include <Fabric/FabricUIManagerModule.h>
9
13
  #include <UI.Xaml.Controls.h>
10
14
  #include <Utils/KeyboardUtils.h>
11
15
  #include <Utils/ValueUtils.h>
@@ -15,82 +19,163 @@
15
19
  #include "CompositionDynamicAutomationProvider.h"
16
20
  #include "CompositionHelpers.h"
17
21
  #include "RootComponentView.h"
22
+ #include "Theme.h"
18
23
  #include "UiaHelpers.h"
19
24
  #include "d2d1helper.h"
20
25
 
21
- namespace Microsoft::ReactNative {
26
+ #include "Composition.ComponentView.g.cpp"
27
+ #include "Composition.ViewComponentView.g.cpp"
22
28
 
23
- CompositionBaseComponentView::CompositionBaseComponentView(
29
+ namespace winrt::Microsoft::ReactNative::Composition::implementation {
30
+
31
+ CreateCompositionComponentViewArgs::CreateCompositionComponentViewArgs(
32
+ const winrt::Microsoft::ReactNative::IReactContext &reactContext,
33
+ facebook::react::Tag tag,
34
+ const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compositionContext)
35
+ : base_type(reactContext, tag), m_compositionContext(compositionContext){};
36
+
37
+ winrt::Microsoft::ReactNative::Composition::ICompositionContext CreateCompositionComponentViewArgs::CompositionContext()
38
+ const noexcept {
39
+ return m_compositionContext;
40
+ }
41
+
42
+ ComponentViewFeatures CreateCompositionComponentViewArgs::Features() const noexcept {
43
+ return m_features;
44
+ }
45
+
46
+ void CreateCompositionComponentViewArgs::Features(ComponentViewFeatures value) noexcept {
47
+ m_features = value;
48
+ }
49
+
50
+ ComponentView::ComponentView(const winrt::Microsoft::ReactNative::Composition::CreateCompositionComponentViewArgs &args)
51
+ : ComponentView(args.CompositionContext(), args.Tag(), args.ReactContext(), args.Features(), true) {}
52
+
53
+ ComponentView::ComponentView(
24
54
  const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
25
- facebook::react::Tag tag)
26
- : m_tag(tag), m_compContext(compContext) {
55
+ facebook::react::Tag tag,
56
+ winrt::Microsoft::ReactNative::ReactContext const &reactContext,
57
+ ComponentViewFeatures flags,
58
+ bool customControl)
59
+ : base_type(tag, reactContext, customControl), m_compContext(compContext), m_flags(flags) {
27
60
  m_outerVisual = compContext.CreateSpriteVisual(); // TODO could be a raw ContainerVisual if we had a
28
61
  // CreateContainerVisual in ICompositionContext
29
62
  m_focusVisual = compContext.CreateFocusVisual();
30
63
  m_outerVisual.InsertAt(m_focusVisual.InnerVisual(), 0);
31
64
  }
32
65
 
33
- facebook::react::Tag CompositionBaseComponentView::tag() const noexcept {
66
+ facebook::react::Tag ComponentView::Tag() const noexcept {
34
67
  return m_tag;
35
68
  }
36
69
 
37
- RootComponentView *CompositionBaseComponentView::rootComponentView() noexcept {
38
- if (m_parent)
39
- return m_parent->rootComponentView();
70
+ facebook::react::Props::Shared ComponentView::props() noexcept {
71
+ return viewProps();
72
+ }
40
73
 
41
- return nullptr;
74
+ void ComponentView::onThemeChanged() noexcept {
75
+ if ((m_flags & ComponentViewFeatures::Background) == ComponentViewFeatures::Background) {
76
+ if (viewProps()->backgroundColor) {
77
+ Visual().as<ISpriteVisual>().Brush(theme()->Brush(*viewProps()->backgroundColor));
78
+ } else {
79
+ Visual().as<ISpriteVisual>().Brush(nullptr);
80
+ }
81
+ }
82
+
83
+ if ((m_flags & ComponentViewFeatures::NativeBorder) == ComponentViewFeatures::NativeBorder) {
84
+ m_needsBorderUpdate = true;
85
+ finalizeBorderUpdates(m_layoutMetrics, *viewProps());
86
+ }
87
+
88
+ if ((m_flags & ComponentViewFeatures::ShadowProps) == ComponentViewFeatures::ShadowProps) {
89
+ applyShadowProps(*viewProps());
90
+ }
91
+
92
+ base_type::onThemeChanged();
93
+
94
+ if (m_customComponent) {
95
+ // Review is it expected that I need this cast to call overridden methods?
96
+ winrt::Microsoft::ReactNative::Composition::ComponentView outer(*this);
97
+ outer.OnThemeChanged();
98
+ }
42
99
  }
43
100
 
44
- const std::vector<IComponentView *> &CompositionBaseComponentView::children() const noexcept {
45
- return m_children;
101
+ void ComponentView::OnThemeChanged() noexcept {}
102
+
103
+ void ComponentView::Theme(const winrt::Microsoft::ReactNative::Composition::Theme &value) noexcept {
104
+ theme(winrt::get_self<winrt::Microsoft::ReactNative::Composition::implementation::Theme>(value));
105
+ }
106
+
107
+ winrt::Microsoft::ReactNative::Composition::Theme ComponentView::Theme() const noexcept {
108
+ return theme()->get_strong().as<winrt::Microsoft::ReactNative::Composition::Theme>();
46
109
  }
47
110
 
48
- void CompositionBaseComponentView::parent(IComponentView *parent) noexcept {
49
- if (!parent) {
50
- auto root = rootComponentView();
51
- if (root && root->GetFocusedComponent() == this) {
52
- root->SetFocusedComponent(nullptr); // TODO need move focus logic - where should focus go?
111
+ winrt::Microsoft::ReactNative::Composition::ICompositionContext ComponentView::CompositionContext() const noexcept {
112
+ return m_compContext;
113
+ }
114
+
115
+ void ComponentView::updateProps(
116
+ facebook::react::Props::Shared const &props,
117
+ facebook::react::Props::Shared const &oldProps) noexcept {
118
+ const auto &oldViewProps = *viewProps();
119
+ const auto &newViewProps = *std::static_pointer_cast<const facebook::react::ViewProps>(props);
120
+
121
+ if ((m_flags & ComponentViewFeatures::Background) == ComponentViewFeatures::Background) {
122
+ if (oldViewProps.backgroundColor != newViewProps.backgroundColor) {
123
+ if (newViewProps.backgroundColor) {
124
+ Visual().as<ISpriteVisual>().Brush(theme()->Brush(*newViewProps.backgroundColor));
125
+ } else {
126
+ Visual().as<ISpriteVisual>().Brush(nullptr);
127
+ }
53
128
  }
54
129
  }
55
130
 
56
- m_parent = parent;
131
+ if ((m_flags & ComponentViewFeatures::NativeBorder) == ComponentViewFeatures::NativeBorder) {
132
+ updateBorderProps(oldViewProps, newViewProps);
133
+ }
134
+ if ((m_flags & ComponentViewFeatures::ShadowProps) == ComponentViewFeatures::ShadowProps) {
135
+ updateShadowProps(oldViewProps, newViewProps);
136
+ }
137
+
138
+ base_type::updateProps(props, oldProps);
57
139
  }
58
140
 
59
- IComponentView *CompositionBaseComponentView::parent() const noexcept {
60
- return m_parent;
141
+ void ComponentView::updateLayoutMetrics(
142
+ facebook::react::LayoutMetrics const &layoutMetrics,
143
+ facebook::react::LayoutMetrics const &oldLayoutMetrics) noexcept {
144
+ if ((m_flags & ComponentViewFeatures::NativeBorder) == ComponentViewFeatures::NativeBorder) {
145
+ updateBorderLayoutMetrics(layoutMetrics, *viewProps());
146
+ }
147
+
148
+ m_layoutMetrics = layoutMetrics;
149
+ UpdateCenterPropertySet();
150
+
151
+ base_type::updateLayoutMetrics(layoutMetrics, oldLayoutMetrics);
61
152
  }
62
153
 
63
- bool CompositionBaseComponentView::runOnChildren(bool forward, Mso::Functor<bool(IComponentView &)> &fn) noexcept {
64
- if (forward) {
65
- for (auto it = m_children.begin(); it != m_children.end(); ++it) {
66
- if (fn(**it))
67
- return true;
68
- }
69
- } else {
70
- for (auto it = m_children.rbegin(); it != m_children.rend(); ++it) {
71
- if (fn(**it))
72
- return true;
73
- }
154
+ void ComponentView::FinalizeUpdates(winrt::Microsoft::ReactNative::ComponentViewUpdateMask updateMask) noexcept {
155
+ if ((m_flags & ComponentViewFeatures::NativeBorder) == ComponentViewFeatures::NativeBorder) {
156
+ finalizeBorderUpdates(m_layoutMetrics, *viewProps());
74
157
  }
75
- return false;
158
+
159
+ base_type::FinalizeUpdates(updateMask);
76
160
  }
77
161
 
78
- void CompositionBaseComponentView::onFocusLost() noexcept {
162
+ void ComponentView::onFocusLost() noexcept {
79
163
  m_eventEmitter->onBlur();
80
164
  showFocusVisual(false);
81
- if (UiaClientsAreListening()) {
165
+ if (m_uiaProvider) {
82
166
  winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty(
83
- EnsureUiaProvider(), UIA_HasKeyboardFocusPropertyId, true, false);
167
+ m_uiaProvider, UIA_HasKeyboardFocusPropertyId, true, false);
84
168
  }
169
+ base_type::onFocusLost();
85
170
  }
86
171
 
87
- void CompositionBaseComponentView::onFocusGained() noexcept {
172
+ void ComponentView::onFocusGained() noexcept {
88
173
  m_eventEmitter->onFocus();
89
174
  if (m_enableFocusVisual) {
90
175
  showFocusVisual(true);
91
176
  }
92
- if (UiaClientsAreListening()) {
93
- auto spProviderSimple = EnsureUiaProvider().try_as<IRawElementProviderSimple>();
177
+ if (m_uiaProvider) {
178
+ auto spProviderSimple = m_uiaProvider.try_as<IRawElementProviderSimple>();
94
179
  if (spProviderSimple != nullptr) {
95
180
  winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty(
96
181
  m_uiaProvider, UIA_HasKeyboardFocusPropertyId, false, true);
@@ -99,9 +184,11 @@ void CompositionBaseComponentView::onFocusGained() noexcept {
99
184
  }
100
185
 
101
186
  StartBringIntoView({});
187
+ base_type::onFocusGained();
102
188
  }
103
189
 
104
- void CompositionBaseComponentView::StartBringIntoView(BringIntoViewOptions &&options) noexcept {
190
+ void ComponentView::StartBringIntoView(
191
+ winrt::Microsoft::ReactNative::implementation::BringIntoViewOptions &&options) noexcept {
105
192
  if (!options.TargetRect) {
106
193
  // Default to bring the entire of this component into view
107
194
  options.TargetRect = {
@@ -113,23 +200,25 @@ void CompositionBaseComponentView::StartBringIntoView(BringIntoViewOptions &&opt
113
200
  if (m_parent) {
114
201
  options.TargetRect->origin.y += m_layoutMetrics.frame.origin.y * m_layoutMetrics.pointScaleFactor;
115
202
  options.TargetRect->origin.x += m_layoutMetrics.frame.origin.x * m_layoutMetrics.pointScaleFactor;
116
- m_parent->StartBringIntoView(std::move(options));
203
+ winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(m_parent)->StartBringIntoView(
204
+ std::move(options));
117
205
  }
118
206
  }
119
207
 
120
- void CompositionBaseComponentView::updateEventEmitter(
121
- facebook::react::EventEmitter::Shared const &eventEmitter) noexcept {
208
+ void ComponentView::updateEventEmitter(facebook::react::EventEmitter::Shared const &eventEmitter) noexcept {
122
209
  m_eventEmitter = std::static_pointer_cast<facebook::react::ViewEventEmitter const>(eventEmitter);
123
210
  }
124
211
 
125
- void CompositionBaseComponentView::handleCommand(std::string const &commandName, folly::dynamic const &arg) noexcept {
126
- if (commandName == "focus") {
212
+ void ComponentView::HandleCommand(
213
+ winrt::hstring commandName,
214
+ const winrt::Microsoft::ReactNative::IJSValueReader &args) noexcept {
215
+ if (commandName == L"focus") {
127
216
  if (auto root = rootComponentView()) {
128
- root->SetFocusedComponent(this);
217
+ root->SetFocusedComponent(*get_strong());
129
218
  }
130
219
  return;
131
220
  }
132
- if (commandName == "blur") {
221
+ if (commandName == L"blur") {
133
222
  if (auto root = rootComponentView()) {
134
223
  root->SetFocusedComponent(nullptr); // Todo store this component as previously focused element
135
224
  }
@@ -138,89 +227,76 @@ void CompositionBaseComponentView::handleCommand(std::string const &commandName,
138
227
  assert(false); // Unhandled command
139
228
  }
140
229
 
141
- int64_t CompositionBaseComponentView::sendMessage(uint32_t msg, uint64_t wParam, int64_t lParam) noexcept {
142
- return 0;
143
- }
144
-
145
- void CompositionBaseComponentView::onKeyDown(
146
- const winrt::Microsoft::ReactNative::Composition::Input::KeyboardSource &source,
147
- const winrt::Microsoft::ReactNative::Composition::Input::KeyRoutedEventArgs &args) noexcept {
148
- if (m_parent && !args.Handled()) {
149
- m_parent->onKeyDown(source, args);
150
- }
151
- }
230
+ bool ComponentView::CapturePointer(const winrt::Microsoft::ReactNative::Composition::Input::Pointer &pointer) noexcept {
231
+ auto uiManager = ::Microsoft::ReactNative::FabricUIManager::FromProperties(m_reactContext.Properties());
232
+ if (uiManager == nullptr)
233
+ return false;
152
234
 
153
- void CompositionBaseComponentView::onKeyUp(
154
- const winrt::Microsoft::ReactNative::Composition::Input::KeyboardSource &source,
155
- const winrt::Microsoft::ReactNative::Composition::Input::KeyRoutedEventArgs &args) noexcept {
156
- if (m_parent && !args.Handled()) {
157
- m_parent->onKeyUp(source, args);
158
- }
159
- }
235
+ auto root = rootComponentView();
236
+ if (!root)
237
+ return false;
160
238
 
161
- void CompositionBaseComponentView::onPointerEntered(
162
- const winrt::Microsoft::ReactNative::Composition::Input::PointerRoutedEventArgs &args) noexcept {
163
- if (m_parent && !args.Handled()) {
164
- m_parent->onPointerEntered(args);
239
+ auto rootView = uiManager->GetCompositionRootView(root->Tag());
240
+ if (!rootView) {
241
+ return false;
165
242
  }
166
- }
167
243
 
168
- void CompositionBaseComponentView::onPointerExited(
169
- const winrt::Microsoft::ReactNative::Composition::Input::PointerRoutedEventArgs &args) noexcept {
170
- if (m_parent && !args.Handled()) {
171
- m_parent->onPointerExited(args);
172
- }
244
+ return winrt::get_self<winrt::Microsoft::ReactNative::implementation::CompositionRootView>(rootView)->CapturePointer(
245
+ pointer, static_cast<facebook::react::Tag>(Tag()));
173
246
  }
174
247
 
175
- void CompositionBaseComponentView::onPointerPressed(
176
- const winrt::Microsoft::ReactNative::Composition::Input::PointerRoutedEventArgs &args) noexcept {
177
- if (m_parent && !args.Handled()) {
178
- m_parent->onPointerPressed(args);
179
- }
180
- }
248
+ void ComponentView::ReleasePointerCapture(
249
+ const winrt::Microsoft::ReactNative::Composition::Input::Pointer &pointer) noexcept {
250
+ auto uiManager = ::Microsoft::ReactNative::FabricUIManager::FromProperties(m_reactContext.Properties());
251
+ if (uiManager == nullptr)
252
+ return;
181
253
 
182
- void CompositionBaseComponentView::onPointerReleased(
183
- const winrt::Microsoft::ReactNative::Composition::Input::PointerRoutedEventArgs &args) noexcept {
184
- if (m_parent && !args.Handled()) {
185
- m_parent->onPointerReleased(args);
186
- }
187
- }
254
+ auto root = rootComponentView();
255
+ if (!root)
256
+ return;
188
257
 
189
- void CompositionBaseComponentView::onPointerMoved(
190
- const winrt::Microsoft::ReactNative::Composition::Input::PointerRoutedEventArgs &args) noexcept {
191
- if (m_parent && !args.Handled()) {
192
- m_parent->onPointerMoved(args);
258
+ auto rootView = uiManager->GetCompositionRootView(root->Tag());
259
+ if (!rootView) {
260
+ return;
193
261
  }
194
- }
195
262
 
196
- void CompositionBaseComponentView::onPointerWheelChanged(
197
- const winrt::Microsoft::ReactNative::Composition::Input::PointerRoutedEventArgs &args) noexcept {
198
- if (m_parent && !args.Handled()) {
199
- m_parent->onPointerWheelChanged(args);
200
- }
263
+ return winrt::get_self<winrt::Microsoft::ReactNative::implementation::CompositionRootView>(rootView)
264
+ ->ReleasePointerCapture(pointer, static_cast<facebook::react::Tag>(Tag()));
201
265
  }
202
266
 
203
- RECT CompositionBaseComponentView::getClientRect() const noexcept {
267
+ RECT ComponentView::getClientRect() const noexcept {
204
268
  RECT rc{0};
269
+ facebook::react::Point parentOffset{0};
205
270
  if (m_parent) {
206
- rc = m_parent->getClientRect();
271
+ parentOffset =
272
+ winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(m_parent)->getClientOffset();
207
273
  }
208
274
 
209
- rc.left += static_cast<LONG>(m_layoutMetrics.frame.origin.x * m_layoutMetrics.pointScaleFactor);
210
- rc.top += static_cast<LONG>(m_layoutMetrics.frame.origin.y * m_layoutMetrics.pointScaleFactor);
275
+ rc.left = static_cast<LONG>((m_layoutMetrics.frame.origin.x * m_layoutMetrics.pointScaleFactor) + parentOffset.x);
276
+ rc.top += static_cast<LONG>((m_layoutMetrics.frame.origin.y * m_layoutMetrics.pointScaleFactor) + parentOffset.y);
211
277
  rc.right = rc.left + static_cast<LONG>(m_layoutMetrics.frame.size.width * m_layoutMetrics.pointScaleFactor);
212
278
  rc.bottom = rc.top + static_cast<LONG>(m_layoutMetrics.frame.size.height * m_layoutMetrics.pointScaleFactor);
213
279
  return rc;
214
280
  }
215
281
 
216
- const facebook::react::SharedViewEventEmitter &CompositionBaseComponentView::GetEventEmitter() const noexcept {
282
+ facebook::react::Point ComponentView::getClientOffset() const noexcept {
283
+ facebook::react::Point parentOffset{0};
284
+ if (m_parent) {
285
+ parentOffset =
286
+ winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(m_parent)->getClientOffset();
287
+ }
288
+
289
+ return {
290
+ (m_layoutMetrics.frame.origin.x * m_layoutMetrics.pointScaleFactor) + parentOffset.x,
291
+ (m_layoutMetrics.frame.origin.y * m_layoutMetrics.pointScaleFactor) + parentOffset.y};
292
+ }
293
+
294
+ const facebook::react::SharedViewEventEmitter &ComponentView::GetEventEmitter() const noexcept {
217
295
  return m_eventEmitter;
218
296
  }
219
297
 
220
- std::array<
221
- winrt::Microsoft::ReactNative::Composition::ISpriteVisual,
222
- CompositionBaseComponentView::SpecialBorderLayerCount>
223
- CompositionBaseComponentView::FindSpecialBorderLayers() const noexcept {
298
+ std::array<winrt::Microsoft::ReactNative::Composition::ISpriteVisual, ComponentView::SpecialBorderLayerCount>
299
+ ComponentView::FindSpecialBorderLayers() const noexcept {
224
300
  std::array<winrt::Microsoft::ReactNative::Composition::ISpriteVisual, SpecialBorderLayerCount> layers{
225
301
  nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr};
226
302
 
@@ -257,7 +333,7 @@ static winrt::com_ptr<ID2D1PathGeometry> GenerateRoundedRectPathGeometry(
257
333
  const facebook::react::RectangleEdges<float> &rectPathGeometry) noexcept {
258
334
  winrt::com_ptr<ID2D1PathGeometry> pathGeometry;
259
335
  winrt::com_ptr<ID2D1Factory1> spD2dFactory;
260
- compContext.as<Composition::ICompositionContextInterop>()->D2DFactory(spD2dFactory.put());
336
+ compContext.as<::Microsoft::ReactNative::Composition::ICompositionContextInterop>()->D2DFactory(spD2dFactory.put());
261
337
 
262
338
  // Create a path geometry.
263
339
  HRESULT hr = spD2dFactory->CreatePathGeometry(pathGeometry.put());
@@ -472,7 +548,7 @@ void DrawShape(
472
548
  }
473
549
 
474
550
  struct AutoDrawHelper {
475
- AutoDrawHelper(winrt::com_ptr<Composition::ICompositionDrawingSurfaceInterop> &surface) {
551
+ AutoDrawHelper(winrt::com_ptr<::Microsoft::ReactNative::Composition::ICompositionDrawingSurfaceInterop> &surface) {
476
552
  m_surface = surface;
477
553
  m_surface->BeginDraw(m_pRT.put(), &m_offset);
478
554
  }
@@ -490,17 +566,18 @@ struct AutoDrawHelper {
490
566
  }
491
567
 
492
568
  private:
493
- winrt::com_ptr<Composition::ICompositionDrawingSurfaceInterop> m_surface;
569
+ winrt::com_ptr<::Microsoft::ReactNative::Composition::ICompositionDrawingSurfaceInterop> m_surface;
494
570
  POINT m_offset;
495
571
  winrt::com_ptr<ID2D1DeviceContext> m_pRT;
496
572
  };
497
573
 
498
574
  template <typename TShape>
499
575
  void SetBorderLayerPropertiesCommon(
576
+ winrt::Microsoft::ReactNative::Composition::implementation::Theme *theme,
500
577
  winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
501
578
  winrt::Microsoft::ReactNative::Composition::ISpriteVisual &layer,
502
579
  TShape &shape,
503
- winrt::com_ptr<Composition::ICompositionDrawingSurfaceInterop> &borderTexture,
580
+ winrt::com_ptr<::Microsoft::ReactNative::Composition::ICompositionDrawingSurfaceInterop> &borderTexture,
504
581
  const D2D1_RECT_F &textureRect,
505
582
  facebook::react::Point anchorPoint,
506
583
  facebook::react::Point anchorOffset,
@@ -509,7 +586,9 @@ void SetBorderLayerPropertiesCommon(
509
586
  FLOAT strokeWidth,
510
587
  const facebook::react::SharedColor &borderColor,
511
588
  facebook::react::BorderStyle borderStyle) {
512
- if ((textureRect.right - textureRect.left) <= 0 && (textureRect.bottom - textureRect.top) <= 0)
589
+ layer.Offset({anchorOffset.x, anchorOffset.y, 0}, {anchorPoint.x, anchorPoint.y, 0});
590
+ layer.RelativeSizeWithOffset(size, relativeSizeAdjustment);
591
+ if ((textureRect.right - textureRect.left) <= 0 || (textureRect.bottom - textureRect.top) <= 0)
513
592
  return;
514
593
 
515
594
  auto surface = compContext.CreateDrawingSurfaceBrush(
@@ -519,8 +598,6 @@ void SetBorderLayerPropertiesCommon(
519
598
  surface.as(borderTexture);
520
599
 
521
600
  layer.Brush(surface);
522
- layer.Offset({anchorOffset.x, anchorOffset.y, 0}, {anchorPoint.x, anchorPoint.y, 0});
523
- layer.RelativeSizeWithOffset(size, relativeSizeAdjustment);
524
601
 
525
602
  AutoDrawHelper autoDraw(borderTexture);
526
603
 
@@ -544,7 +621,7 @@ void SetBorderLayerPropertiesCommon(
544
621
  return;
545
622
 
546
623
  winrt::com_ptr<ID2D1SolidColorBrush> spBorderBrush;
547
- pRT->CreateSolidColorBrush(borderColor.AsD2DColor(), spBorderBrush.put());
624
+ pRT->CreateSolidColorBrush(theme->D2DColor(*borderColor), spBorderBrush.put());
548
625
  assert(spBorderBrush);
549
626
  if (spBorderBrush == nullptr)
550
627
  return;
@@ -586,10 +663,11 @@ void SetBorderLayerPropertiesCommon(
586
663
 
587
664
  template <typename TShape>
588
665
  void SetBorderLayerProperties(
666
+ winrt::Microsoft::ReactNative::Composition::implementation::Theme *theme,
589
667
  winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
590
668
  winrt::Microsoft::ReactNative::Composition::ISpriteVisual &layer,
591
669
  TShape &shape,
592
- winrt::com_ptr<Composition::ICompositionDrawingSurfaceInterop> &borderTexture,
670
+ winrt::com_ptr<::Microsoft::ReactNative::Composition::ICompositionDrawingSurfaceInterop> &borderTexture,
593
671
  const D2D1_RECT_F &textureRect,
594
672
  facebook::react::Point anchorPoint,
595
673
  facebook::react::Point anchorOffset,
@@ -600,6 +678,7 @@ void SetBorderLayerProperties(
600
678
  facebook::react::BorderStyle borderStyle) {
601
679
  if constexpr (!std::is_base_of_v<ID2D1GeometryGroup, TShape>) {
602
680
  SetBorderLayerPropertiesCommon(
681
+ theme,
603
682
  compContext,
604
683
  layer,
605
684
  shape,
@@ -618,22 +697,23 @@ void SetBorderLayerProperties(
618
697
  layer.Offset({anchorOffset.x, anchorOffset.y, 0}, {anchorPoint.x, anchorPoint.y, 0});
619
698
  layer.Size({textureRect.right - textureRect.left, textureRect.bottom - textureRect.top});
620
699
 
621
- layer.Brush(compContext.CreateColorBrush(borderColor.AsWindowsColor()));
700
+ layer.Brush(theme->Brush(*borderColor));
622
701
 
623
702
  winrt::com_ptr<ID2D1Factory1> spD2dFactory;
624
- compContext.as<Composition::ICompositionContextInterop>()->D2DFactory(spD2dFactory.put());
703
+ compContext.as<::Microsoft::ReactNative::Composition::ICompositionContextInterop>()->D2DFactory(
704
+ spD2dFactory.put());
625
705
 
626
706
  winrt::com_ptr<ID2D1TransformedGeometry> transformedShape;
627
707
  D2D1::Matrix3x2F translationTransform = D2D1::Matrix3x2F::Translation(-textureRect.left, -textureRect.top);
628
708
  winrt::check_hresult(
629
709
  spD2dFactory->CreateTransformedGeometry(&shape, &translationTransform, transformedShape.put()));
630
710
 
631
- layer.as<Composition::IVisualInterop>()->SetClippingPath(transformedShape.get());
711
+ layer.as<::Microsoft::ReactNative::Composition::IVisualInterop>()->SetClippingPath(transformedShape.get());
632
712
  }
633
713
  /*
634
714
  else
635
715
  {
636
- SetBorderLayerPropertiesCommon(comContext, layer, shape, borderTexture, textureRect,
716
+ SetBorderLayerPropertiesCommon(theme, comContext, layer, shape, borderTexture, textureRect,
637
717
  anchorPoint, anchorOffset, strokeWidth, borderColor, borderStyle);
638
718
  }
639
719
  */
@@ -650,10 +730,10 @@ const float Bottom = 1.0;
650
730
 
651
731
  template <typename TShape>
652
732
  void DrawAllBorderLayers(
733
+ winrt::Microsoft::ReactNative::Composition::implementation::Theme *theme,
653
734
  winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
654
- std::array<
655
- winrt::Microsoft::ReactNative::Composition::ISpriteVisual,
656
- CompositionBaseComponentView::SpecialBorderLayerCount> &spBorderLayers,
735
+ std::array<winrt::Microsoft::ReactNative::Composition::ISpriteVisual, ComponentView::SpecialBorderLayerCount>
736
+ &spBorderLayers,
657
737
  TShape &shape,
658
738
  const facebook::react::BorderWidths &borderWidths,
659
739
  const facebook::react::BorderRadii &borderRadii,
@@ -662,12 +742,13 @@ void DrawAllBorderLayers(
662
742
  const facebook::react::BorderColors &borderColors,
663
743
  facebook::react::BorderStyle borderStyle) {
664
744
  // Now that we've drawn our nice border in one layer, split it into its component layers
665
- winrt::com_ptr<Composition::ICompositionDrawingSurfaceInterop>
666
- spTextures[CompositionBaseComponentView::SpecialBorderLayerCount];
745
+ winrt::com_ptr<::Microsoft::ReactNative::Composition::ICompositionDrawingSurfaceInterop>
746
+ spTextures[ComponentView::SpecialBorderLayerCount];
667
747
 
668
748
  // Set component border properties
669
749
  // Top Left Corner
670
750
  SetBorderLayerProperties(
751
+ theme,
671
752
  compContext,
672
753
  spBorderLayers[0],
673
754
  shape,
@@ -686,6 +767,7 @@ void DrawAllBorderLayers(
686
767
 
687
768
  // Top Edge Border
688
769
  SetBorderLayerProperties(
770
+ theme,
689
771
  compContext,
690
772
  spBorderLayers[1],
691
773
  shape,
@@ -705,6 +787,7 @@ void DrawAllBorderLayers(
705
787
 
706
788
  // Top Right Corner Border
707
789
  SetBorderLayerProperties(
790
+ theme,
708
791
  compContext,
709
792
  spBorderLayers[2],
710
793
  shape,
@@ -723,6 +806,7 @@ void DrawAllBorderLayers(
723
806
 
724
807
  // Right Edge Border
725
808
  SetBorderLayerProperties(
809
+ theme,
726
810
  compContext,
727
811
  spBorderLayers[3],
728
812
  shape,
@@ -742,6 +826,7 @@ void DrawAllBorderLayers(
742
826
 
743
827
  // Bottom Right Corner Border
744
828
  SetBorderLayerProperties(
829
+ theme,
745
830
  compContext,
746
831
  spBorderLayers[4],
747
832
  shape,
@@ -760,6 +845,7 @@ void DrawAllBorderLayers(
760
845
 
761
846
  // Bottom Edge Border
762
847
  SetBorderLayerProperties(
848
+ theme,
763
849
  compContext,
764
850
  spBorderLayers[5],
765
851
  shape,
@@ -779,6 +865,7 @@ void DrawAllBorderLayers(
779
865
 
780
866
  // Bottom Left Corner Border
781
867
  SetBorderLayerProperties(
868
+ theme,
782
869
  compContext,
783
870
  spBorderLayers[6],
784
871
  shape,
@@ -797,6 +884,7 @@ void DrawAllBorderLayers(
797
884
 
798
885
  // Left Edge Border
799
886
  SetBorderLayerProperties(
887
+ theme,
800
888
  compContext,
801
889
  spBorderLayers[7],
802
890
  shape,
@@ -868,7 +956,7 @@ winrt::com_ptr<ID2D1GeometryGroup> GetGeometryForRoundedBorder(
868
956
 
869
957
  ID2D1Geometry *ppGeometries[] = {outerPathGeometry.get(), innerPathGeometry.get()};
870
958
  winrt::com_ptr<ID2D1Factory1> spD2dFactory;
871
- compContext.as<Composition::ICompositionContextInterop>()->D2DFactory(spD2dFactory.put());
959
+ compContext.as<::Microsoft::ReactNative::Composition::ICompositionContextInterop>()->D2DFactory(spD2dFactory.put());
872
960
 
873
961
  winrt::com_ptr<ID2D1GeometryGroup> geometryGroup = nullptr;
874
962
  // Create a geometry group.
@@ -946,7 +1034,8 @@ facebook::react::BorderMetrics resolveAndAlignBorderMetrics(
946
1034
  return borderMetrics;
947
1035
  }
948
1036
 
949
- bool CompositionBaseComponentView::TryUpdateSpecialBorderLayers(
1037
+ bool ComponentView::TryUpdateSpecialBorderLayers(
1038
+ winrt::Microsoft::ReactNative::Composition::implementation::Theme *theme,
950
1039
  std::array<winrt::Microsoft::ReactNative::Composition::ISpriteVisual, SpecialBorderLayerCount> &spBorderVisuals,
951
1040
  facebook::react::LayoutMetrics const &layoutMetrics,
952
1041
  const facebook::react::ViewProps &viewProps) noexcept {
@@ -990,6 +1079,7 @@ bool CompositionBaseComponentView::TryUpdateSpecialBorderLayers(
990
1079
 
991
1080
  if (pathGeometry) {
992
1081
  DrawAllBorderLayers(
1082
+ theme,
993
1083
  m_compContext,
994
1084
  spBorderVisuals,
995
1085
  *pathGeometry,
@@ -1013,6 +1103,7 @@ bool CompositionBaseComponentView::TryUpdateSpecialBorderLayers(
1013
1103
  rectPathGeometry);
1014
1104
 
1015
1105
  DrawAllBorderLayers(
1106
+ theme,
1016
1107
  m_compContext,
1017
1108
  spBorderVisuals,
1018
1109
  *pathGeometry,
@@ -1032,6 +1123,7 @@ bool CompositionBaseComponentView::TryUpdateSpecialBorderLayers(
1032
1123
  extentWidth - (borderMetrics.borderWidths.right / 2.0f),
1033
1124
  extentHeight - (borderMetrics.borderWidths.bottom / 2.0f)};
1034
1125
  DrawAllBorderLayers(
1126
+ theme,
1035
1127
  m_compContext,
1036
1128
  spBorderVisuals,
1037
1129
  rectShape,
@@ -1045,12 +1137,17 @@ bool CompositionBaseComponentView::TryUpdateSpecialBorderLayers(
1045
1137
  return true;
1046
1138
  }
1047
1139
 
1048
- void CompositionBaseComponentView::UpdateSpecialBorderLayers(
1140
+ void ComponentView::finalizeBorderUpdates(
1049
1141
  facebook::react::LayoutMetrics const &layoutMetrics,
1050
1142
  const facebook::react::ViewProps &viewProps) noexcept {
1143
+ if (!m_needsBorderUpdate || theme()->IsEmpty()) {
1144
+ return;
1145
+ }
1146
+
1147
+ m_needsBorderUpdate = false;
1051
1148
  auto spBorderLayers = FindSpecialBorderLayers();
1052
1149
 
1053
- if (!TryUpdateSpecialBorderLayers(spBorderLayers, layoutMetrics, viewProps)) {
1150
+ if (!TryUpdateSpecialBorderLayers(theme(), spBorderLayers, layoutMetrics, viewProps)) {
1054
1151
  for (auto &spBorderLayer : spBorderLayers) {
1055
1152
  if (spBorderLayer) {
1056
1153
  spBorderLayer.as<winrt::Microsoft::ReactNative::Composition::ISpriteVisual>().Brush(nullptr);
@@ -1059,11 +1156,11 @@ void CompositionBaseComponentView::UpdateSpecialBorderLayers(
1059
1156
  }
1060
1157
  }
1061
1158
 
1062
- winrt::Microsoft::ReactNative::Composition::IVisual CompositionBaseComponentView::OuterVisual() const noexcept {
1159
+ winrt::Microsoft::ReactNative::Composition::IVisual ComponentView::OuterVisual() const noexcept {
1063
1160
  return m_outerVisual ? m_outerVisual : Visual();
1064
1161
  }
1065
1162
 
1066
- void CompositionBaseComponentView::showFocusVisual(bool show) noexcept {
1163
+ void ComponentView::showFocusVisual(bool show) noexcept {
1067
1164
  if (show) {
1068
1165
  assert(m_enableFocusVisual);
1069
1166
  m_focusVisual.IsFocused(true);
@@ -1072,11 +1169,12 @@ void CompositionBaseComponentView::showFocusVisual(bool show) noexcept {
1072
1169
  }
1073
1170
  }
1074
1171
 
1075
- void CompositionBaseComponentView::updateBorderProps(
1172
+ void ComponentView::updateBorderProps(
1076
1173
  const facebook::react::ViewProps &oldViewProps,
1077
1174
  const facebook::react::ViewProps &newViewProps) noexcept {
1078
1175
  if (oldViewProps.borderColors != newViewProps.borderColors || oldViewProps.borderRadii != newViewProps.borderRadii ||
1079
- !(oldViewProps.yogaStyle.border() == newViewProps.yogaStyle.border()) ||
1176
+ !(oldViewProps.yogaStyle.border(facebook::yoga::Edge::All) ==
1177
+ newViewProps.yogaStyle.border(facebook::yoga::Edge::All)) ||
1080
1178
  oldViewProps.borderStyles != newViewProps.borderStyles) {
1081
1179
  m_needsBorderUpdate = true;
1082
1180
  }
@@ -1087,28 +1185,31 @@ void CompositionBaseComponentView::updateBorderProps(
1087
1185
  }
1088
1186
  }
1089
1187
 
1090
- void CompositionBaseComponentView::updateShadowProps(
1188
+ void ComponentView::updateShadowProps(
1091
1189
  const facebook::react::ViewProps &oldViewProps,
1092
- const facebook::react::ViewProps &newViewProps,
1093
- winrt::Microsoft::ReactNative::Composition::ISpriteVisual m_visual) noexcept {
1190
+ const facebook::react::ViewProps &newViewProps) noexcept {
1094
1191
  // Shadow Properties
1095
1192
  if (oldViewProps.shadowOffset != newViewProps.shadowOffset || oldViewProps.shadowColor != newViewProps.shadowColor ||
1096
1193
  oldViewProps.shadowOpacity != newViewProps.shadowOpacity ||
1097
1194
  oldViewProps.shadowRadius != newViewProps.shadowRadius) {
1098
- auto shadow = m_compContext.CreateDropShadow();
1099
- shadow.Offset({newViewProps.shadowOffset.width, newViewProps.shadowOffset.height, 0});
1100
- shadow.Opacity(newViewProps.shadowOpacity);
1101
- shadow.BlurRadius(newViewProps.shadowRadius);
1102
- if (newViewProps.shadowColor)
1103
- shadow.Color(newViewProps.shadowColor.AsWindowsColor());
1104
- m_visual.Shadow(shadow);
1195
+ applyShadowProps(newViewProps);
1105
1196
  }
1106
1197
  }
1107
1198
 
1108
- void CompositionBaseComponentView::updateTransformProps(
1199
+ void ComponentView::applyShadowProps(const facebook::react::ViewProps &viewProps) noexcept {
1200
+ auto shadow = m_compContext.CreateDropShadow();
1201
+ shadow.Offset({viewProps.shadowOffset.width, viewProps.shadowOffset.height, 0});
1202
+ shadow.Opacity(viewProps.shadowOpacity);
1203
+ shadow.BlurRadius(viewProps.shadowRadius);
1204
+ if (viewProps.shadowColor)
1205
+ shadow.Color(theme()->Color(*viewProps.shadowColor));
1206
+ Visual().as<winrt::Microsoft::ReactNative::Composition::ISpriteVisual>().Shadow(shadow);
1207
+ }
1208
+
1209
+ void ComponentView::updateTransformProps(
1109
1210
  const facebook::react::ViewProps &oldViewProps,
1110
1211
  const facebook::react::ViewProps &newViewProps,
1111
- winrt::Microsoft::ReactNative::Composition::ISpriteVisual m_visual) noexcept {
1212
+ winrt::Microsoft::ReactNative::Composition::IVisual visual) noexcept {
1112
1213
  // check for backfaceVisibility prop
1113
1214
  if (oldViewProps.backfaceVisibility != newViewProps.backfaceVisibility) {
1114
1215
  static_assert(
@@ -1123,7 +1224,7 @@ void CompositionBaseComponentView::updateTransformProps(
1123
1224
  static_cast<facebook::react::BackfaceVisibility>(
1124
1225
  winrt::Microsoft::ReactNative::Composition::BackfaceVisibility::Hidden) ==
1125
1226
  facebook::react::BackfaceVisibility::Hidden);
1126
- m_visual.BackfaceVisibility(
1227
+ visual.BackfaceVisibility(
1127
1228
  static_cast<winrt::Microsoft::ReactNative::Composition::BackfaceVisibility>(newViewProps.backfaceVisibility));
1128
1229
  }
1129
1230
 
@@ -1148,62 +1249,74 @@ void CompositionBaseComponentView::updateTransformProps(
1148
1249
  transformMatrix.m44 = newViewProps.transform.matrix[15];
1149
1250
 
1150
1251
  auto centerPointPropSet = EnsureCenterPointPropertySet();
1151
- centerPointPropSet.InsertMatrix4x4(L"transform", transformMatrix);
1252
+ if (centerPointPropSet) {
1253
+ centerPointPropSet.InsertMatrix4x4(L"transform", transformMatrix);
1254
+ }
1152
1255
 
1153
1256
  EnsureTransformMatrixFacade();
1154
1257
  }
1155
1258
  }
1156
1259
 
1157
- void CompositionBaseComponentView::updateAccessibilityProps(
1260
+ void ComponentView::updateAccessibilityProps(
1158
1261
  const facebook::react::ViewProps &oldViewProps,
1159
1262
  const facebook::react::ViewProps &newViewProps) noexcept {
1160
- if (!UiaClientsAreListening())
1263
+ if (!m_uiaProvider)
1161
1264
  return;
1162
1265
 
1163
- auto provider = EnsureUiaProvider();
1164
-
1165
1266
  winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty(
1166
- provider, UIA_IsKeyboardFocusablePropertyId, oldViewProps.focusable, newViewProps.focusable);
1267
+ m_uiaProvider, UIA_IsKeyboardFocusablePropertyId, oldViewProps.focusable, newViewProps.focusable);
1167
1268
 
1168
1269
  winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty(
1169
- provider,
1270
+ m_uiaProvider,
1170
1271
  UIA_NamePropertyId,
1171
1272
  oldViewProps.accessibilityLabel,
1172
1273
  newViewProps.accessibilityLabel.empty() ? DefaultAccessibleName() : newViewProps.accessibilityLabel);
1173
1274
 
1174
1275
  winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty(
1175
- provider,
1276
+ m_uiaProvider,
1176
1277
  UIA_IsContentElementPropertyId,
1177
1278
  (oldViewProps.accessible && oldViewProps.accessibilityRole != "none"),
1178
1279
  (newViewProps.accessible && newViewProps.accessibilityRole != "none"));
1179
1280
 
1180
1281
  winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty(
1181
- provider,
1282
+ m_uiaProvider,
1182
1283
  UIA_IsControlElementPropertyId,
1183
1284
  (oldViewProps.accessible && oldViewProps.accessibilityRole != "none"),
1184
1285
  (newViewProps.accessible && newViewProps.accessibilityRole != "none"));
1185
1286
 
1186
1287
  winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty(
1187
- provider,
1288
+ m_uiaProvider,
1188
1289
  UIA_IsEnabledPropertyId,
1189
- !oldViewProps.accessibilityState.disabled,
1190
- !newViewProps.accessibilityState.disabled);
1290
+ !(oldViewProps.accessibilityState && oldViewProps.accessibilityState->disabled),
1291
+ !(newViewProps.accessibilityState && newViewProps.accessibilityState->disabled));
1191
1292
 
1192
1293
  winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty(
1193
- provider, UIA_ControlTypePropertyId, oldViewProps.accessibilityRole, newViewProps.accessibilityRole);
1294
+ m_uiaProvider, UIA_ControlTypePropertyId, oldViewProps.accessibilityRole, newViewProps.accessibilityRole);
1194
1295
 
1195
1296
  winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty(
1196
- provider, UIA_HelpTextPropertyId, oldViewProps.accessibilityHint, newViewProps.accessibilityHint);
1297
+ m_uiaProvider, UIA_HelpTextPropertyId, oldViewProps.accessibilityHint, newViewProps.accessibilityHint);
1197
1298
  }
1198
1299
 
1199
- void CompositionBaseComponentView::updateBorderLayoutMetrics(
1300
+ std::optional<std::string> ComponentView::getAcccessiblityValue() noexcept {
1301
+ return std::static_pointer_cast<const facebook::react::ViewProps>(props())->accessibilityValue.text;
1302
+ }
1303
+
1304
+ void ComponentView::setAcccessiblityValue(std::string &&value) noexcept {
1305
+ // no-op
1306
+ }
1307
+
1308
+ bool ComponentView::getAcccessiblityIsReadOnly() noexcept {
1309
+ return true;
1310
+ }
1311
+
1312
+ void ComponentView::updateBorderLayoutMetrics(
1200
1313
  facebook::react::LayoutMetrics const &layoutMetrics,
1201
1314
  const facebook::react::ViewProps &viewProps) noexcept {
1202
1315
  auto borderMetrics = resolveAndAlignBorderMetrics(layoutMetrics, viewProps);
1203
1316
 
1204
1317
  if (borderMetrics.borderRadii.topLeft == 0 && borderMetrics.borderRadii.topRight == 0 &&
1205
1318
  borderMetrics.borderRadii.bottomLeft == 0 && borderMetrics.borderRadii.bottomRight == 0) {
1206
- Visual().as<Composition::IVisualInterop>()->SetClippingPath(nullptr);
1319
+ Visual().as<::Microsoft::ReactNative::Composition::IVisualInterop>()->SetClippingPath(nullptr);
1207
1320
  } else {
1208
1321
  winrt::com_ptr<ID2D1PathGeometry> pathGeometry = GenerateRoundedRectPathGeometry(
1209
1322
  m_compContext,
@@ -1214,7 +1327,7 @@ void CompositionBaseComponentView::updateBorderLayoutMetrics(
1214
1327
  layoutMetrics.frame.size.width * layoutMetrics.pointScaleFactor,
1215
1328
  layoutMetrics.frame.size.height * layoutMetrics.pointScaleFactor});
1216
1329
 
1217
- Visual().as<Composition::IVisualInterop>()->SetClippingPath(pathGeometry.get());
1330
+ Visual().as<::Microsoft::ReactNative::Composition::IVisualInterop>()->SetClippingPath(pathGeometry.get());
1218
1331
  }
1219
1332
 
1220
1333
  if (m_layoutMetrics != layoutMetrics) {
@@ -1232,18 +1345,18 @@ void CompositionBaseComponentView::updateBorderLayoutMetrics(
1232
1345
  });
1233
1346
  }
1234
1347
 
1235
- void CompositionBaseComponentView::indexOffsetForBorder(uint32_t &index) const noexcept {
1348
+ void ComponentView::indexOffsetForBorder(uint32_t &index) const noexcept {
1236
1349
  index += m_numBorderVisuals;
1237
1350
  }
1238
1351
 
1239
- void CompositionBaseComponentView::OnRenderingDeviceLost() noexcept {}
1352
+ void ComponentView::OnRenderingDeviceLost() noexcept {}
1240
1353
 
1241
1354
  std::vector<facebook::react::ComponentDescriptorProvider>
1242
- CompositionBaseComponentView::supplementalComponentDescriptorProviders() noexcept {
1355
+ ComponentView::supplementalComponentDescriptorProviders() noexcept {
1243
1356
  return {};
1244
1357
  }
1245
1358
 
1246
- comp::CompositionPropertySet CompositionBaseComponentView::EnsureCenterPointPropertySet() noexcept {
1359
+ comp::CompositionPropertySet ComponentView::EnsureCenterPointPropertySet() noexcept {
1247
1360
  if (m_centerPropSet == nullptr) {
1248
1361
  if (auto compositor =
1249
1362
  winrt::Microsoft::ReactNative::Composition::CompositionContextHelper::InnerCompositor(m_compContext)) {
@@ -1266,7 +1379,7 @@ comp::CompositionPropertySet CompositionBaseComponentView::EnsureCenterPointProp
1266
1379
  // convert from px to dips "translation": An additional translation to apply to the to the visual in
1267
1380
  // addition to Offset. This is used to apply any translation properties set, or animated
1268
1381
  // "transform": A transform to apply to the visual. This transform is in dips.
1269
- void CompositionBaseComponentView::UpdateCenterPropertySet() noexcept {
1382
+ void ComponentView::UpdateCenterPropertySet() noexcept {
1270
1383
  if (m_centerPropSet != nullptr) {
1271
1384
  m_centerPropSet.InsertVector3(
1272
1385
  L"center",
@@ -1284,7 +1397,7 @@ void CompositionBaseComponentView::UpdateCenterPropertySet() noexcept {
1284
1397
  }
1285
1398
  }
1286
1399
 
1287
- void CompositionBaseComponentView::EnsureTransformMatrixFacade() noexcept {
1400
+ void ComponentView::EnsureTransformMatrixFacade() noexcept {
1288
1401
  if (m_hasTransformMatrixFacade)
1289
1402
  return;
1290
1403
  m_hasTransformMatrixFacade = true;
@@ -1301,98 +1414,139 @@ void CompositionBaseComponentView::EnsureTransformMatrixFacade() noexcept {
1301
1414
  }
1302
1415
  }
1303
1416
 
1304
- facebook::react::SharedViewEventEmitter CompositionBaseComponentView::eventEmitter() noexcept {
1417
+ facebook::react::SharedViewEventEmitter ComponentView::eventEmitter() noexcept {
1305
1418
  return m_eventEmitter;
1306
1419
  }
1307
1420
 
1308
- facebook::react::SharedViewEventEmitter CompositionBaseComponentView::eventEmitterAtPoint(
1309
- facebook::react::Point /*pt*/) noexcept {
1421
+ facebook::react::SharedViewEventEmitter ComponentView::eventEmitterAtPoint(facebook::react::Point /*pt*/) noexcept {
1310
1422
  return m_eventEmitter;
1311
1423
  }
1312
1424
 
1313
- bool CompositionBaseComponentView::focusable() const noexcept {
1425
+ bool ComponentView::anyHitTestHelper(
1426
+ facebook::react::Tag &targetTag,
1427
+ facebook::react::Point &ptContent,
1428
+ facebook::react::Point &localPt) const noexcept {
1429
+ if (auto index = m_children.Size()) {
1430
+ do {
1431
+ index--;
1432
+ targetTag = winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(m_children.GetAt(index))
1433
+ ->hitTest(ptContent, localPt);
1434
+ if (targetTag != -1) {
1435
+ return true;
1436
+ }
1437
+ } while (index != 0);
1438
+ }
1439
+
1314
1440
  return false;
1315
1441
  }
1316
1442
 
1317
- std::string CompositionBaseComponentView::DefaultControlType() const noexcept {
1443
+ std::string ComponentView::DefaultControlType() const noexcept {
1318
1444
  return "group";
1319
1445
  }
1320
1446
 
1321
- std::string CompositionBaseComponentView::DefaultAccessibleName() const noexcept {
1447
+ std::string ComponentView::DefaultAccessibleName() const noexcept {
1322
1448
  return "";
1323
1449
  }
1324
1450
 
1325
- std::string CompositionBaseComponentView::DefaultHelpText() const noexcept {
1451
+ std::string ComponentView::DefaultHelpText() const noexcept {
1326
1452
  return "";
1327
1453
  }
1328
1454
 
1329
- CompositionViewComponentView::CompositionViewComponentView(
1455
+ ViewComponentView::ViewComponentView(
1456
+ const winrt::Microsoft::ReactNative::Composition::CreateCompositionComponentViewArgs &args)
1457
+ : ViewComponentView(args.CompositionContext(), args.Tag(), args.ReactContext(), args.Features(), true) {}
1458
+
1459
+ ViewComponentView::ViewComponentView(
1330
1460
  const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
1331
- facebook::react::Tag tag)
1332
- : Super(compContext, tag) {
1461
+ facebook::react::Tag tag,
1462
+ winrt::Microsoft::ReactNative::ReactContext const &reactContext,
1463
+ ComponentViewFeatures flags,
1464
+ bool customComponent)
1465
+ : base_type(compContext, tag, reactContext, flags, customComponent) {
1333
1466
  static auto const defaultProps = std::make_shared<facebook::react::ViewProps const>();
1334
1467
  m_props = defaultProps;
1335
- m_visual = m_compContext.CreateSpriteVisual();
1336
- OuterVisual().InsertAt(m_visual, 0);
1337
1468
  }
1338
1469
 
1339
- std::shared_ptr<CompositionViewComponentView> CompositionViewComponentView::Create(
1470
+ winrt::Microsoft::ReactNative::Composition::IVisual ViewComponentView::CreateVisual() noexcept {
1471
+ return m_compContext.CreateSpriteVisual();
1472
+ }
1473
+
1474
+ void ViewComponentView::ensureVisual() noexcept {
1475
+ if (!m_visual) {
1476
+ if (m_customComponent) {
1477
+ // Review is it expected that I need this cast to call overridden methods?
1478
+ winrt::Microsoft::ReactNative::Composition::ViewComponentView outer(*this);
1479
+ m_visual = outer.CreateVisual();
1480
+ } else {
1481
+ m_visual = CreateVisual();
1482
+ }
1483
+ OuterVisual().InsertAt(m_visual, 0);
1484
+ }
1485
+ }
1486
+
1487
+ winrt::Microsoft::ReactNative::ComponentView ViewComponentView::Create(
1340
1488
  const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
1341
- facebook::react::Tag tag) noexcept {
1342
- return std::shared_ptr<CompositionViewComponentView>(new CompositionViewComponentView(compContext, tag));
1489
+ facebook::react::Tag tag,
1490
+ winrt::Microsoft::ReactNative::ReactContext const &reactContext) noexcept {
1491
+ return winrt::make<ViewComponentView>(compContext, tag, reactContext, ComponentViewFeatures::Default, false);
1343
1492
  }
1344
1493
 
1345
- void CompositionViewComponentView::mountChildComponentView(
1346
- IComponentView &childComponentView,
1494
+ void ViewComponentView::MountChildComponentView(
1495
+ const winrt::Microsoft::ReactNative::ComponentView &childComponentView,
1347
1496
  uint32_t index) noexcept {
1348
- m_children.insert(std::next(m_children.begin(), index), &childComponentView);
1497
+ base_type::MountChildComponentView(childComponentView, index);
1349
1498
 
1350
1499
  indexOffsetForBorder(index);
1500
+ ensureVisual();
1351
1501
 
1352
- childComponentView.parent(this);
1353
-
1354
- m_visual.InsertAt(static_cast<CompositionBaseComponentView &>(childComponentView).OuterVisual(), index);
1502
+ // TODO if we get mixed children of composition and non-composition ComponentViews the indexes will get mixed up
1503
+ // We could offset the index based on non-composition children in m_children
1504
+ if (auto compositionChild = childComponentView.try_as<ComponentView>()) {
1505
+ m_visual.InsertAt(compositionChild->OuterVisual(), index);
1506
+ }
1355
1507
  }
1356
1508
 
1357
- void CompositionViewComponentView::unmountChildComponentView(
1358
- IComponentView &childComponentView,
1509
+ void ViewComponentView::UnmountChildComponentView(
1510
+ const winrt::Microsoft::ReactNative::ComponentView &childComponentView,
1359
1511
  uint32_t index) noexcept {
1360
- m_children.erase(std::next(m_children.begin(), index));
1512
+ base_type::UnmountChildComponentView(childComponentView, index);
1361
1513
 
1362
1514
  indexOffsetForBorder(index);
1363
-
1364
- childComponentView.parent(nullptr);
1365
- m_visual.Remove(static_cast<CompositionBaseComponentView &>(childComponentView).OuterVisual());
1515
+ if (auto compositionChild = childComponentView.try_as<ComponentView>()) {
1516
+ m_visual.Remove(compositionChild->OuterVisual());
1517
+ }
1366
1518
  }
1367
1519
 
1368
- void CompositionViewComponentView::updateProps(
1520
+ void ViewComponentView::updateProps(
1369
1521
  facebook::react::Props::Shared const &props,
1370
1522
  facebook::react::Props::Shared const &oldProps) noexcept {
1371
1523
  const auto &oldViewProps = *std::static_pointer_cast<const facebook::react::ViewProps>(m_props);
1372
1524
  const auto &newViewProps = *std::static_pointer_cast<const facebook::react::ViewProps>(props);
1373
1525
 
1374
- if (oldViewProps.backgroundColor != newViewProps.backgroundColor) {
1375
- if (newViewProps.backgroundColor) {
1376
- m_visual.Brush(m_compContext.CreateColorBrush(newViewProps.backgroundColor.AsWindowsColor()));
1377
- } else {
1378
- m_visual.Brush(nullptr);
1379
- }
1380
- }
1381
-
1526
+ ensureVisual();
1382
1527
  if (oldViewProps.opacity != newViewProps.opacity) {
1383
1528
  m_visual.Opacity(newViewProps.opacity);
1384
1529
  }
1530
+ if (oldViewProps.testId != newViewProps.testId) {
1531
+ m_visual.Comment(winrt::to_hstring(newViewProps.testId));
1532
+ }
1385
1533
 
1386
1534
  // update BaseComponentView props
1387
1535
  updateAccessibilityProps(oldViewProps, newViewProps);
1388
- updateShadowProps(oldViewProps, newViewProps, m_visual);
1389
1536
  updateTransformProps(oldViewProps, newViewProps, m_visual);
1390
- updateBorderProps(oldViewProps, newViewProps);
1537
+ base_type::updateProps(props, oldProps);
1391
1538
 
1392
1539
  m_props = std::static_pointer_cast<facebook::react::ViewProps const>(props);
1393
1540
  }
1394
1541
 
1395
- facebook::react::Tag CompositionViewComponentView::hitTest(
1542
+ const winrt::Microsoft::ReactNative::IComponentProps ViewComponentView::userProps(
1543
+ facebook::react::Props::Shared const &props) noexcept {
1544
+ assert(m_customComponent);
1545
+ const auto &abiViewProps = *std::static_pointer_cast<const ::Microsoft::ReactNative::AbiViewProps>(props);
1546
+ return abiViewProps.UserProps();
1547
+ }
1548
+
1549
+ facebook::react::Tag ViewComponentView::hitTest(
1396
1550
  facebook::react::Point pt,
1397
1551
  facebook::react::Point &localPt,
1398
1552
  bool ignorePointerEvents) const noexcept {
@@ -1402,10 +1556,7 @@ facebook::react::Tag CompositionViewComponentView::hitTest(
1402
1556
 
1403
1557
  if ((ignorePointerEvents || m_props->pointerEvents == facebook::react::PointerEventsMode::Auto ||
1404
1558
  m_props->pointerEvents == facebook::react::PointerEventsMode::BoxNone) &&
1405
- std::any_of(m_children.rbegin(), m_children.rend(), [&targetTag, &ptLocal, &localPt](auto child) {
1406
- targetTag = static_cast<const CompositionBaseComponentView *>(child)->hitTest(ptLocal, localPt);
1407
- return targetTag != -1;
1408
- }))
1559
+ anyHitTestHelper(targetTag, ptLocal, localPt))
1409
1560
  return targetTag;
1410
1561
 
1411
1562
  if ((ignorePointerEvents || m_props->pointerEvents == facebook::react::PointerEventsMode::Auto ||
@@ -1413,16 +1564,16 @@ facebook::react::Tag CompositionViewComponentView::hitTest(
1413
1564
  ptLocal.x >= 0 && ptLocal.x <= m_layoutMetrics.frame.size.width && ptLocal.y >= 0 &&
1414
1565
  ptLocal.y <= m_layoutMetrics.frame.size.height) {
1415
1566
  localPt = ptLocal;
1416
- return tag();
1567
+ return Tag();
1417
1568
  }
1418
1569
 
1419
1570
  return -1;
1420
1571
  }
1421
1572
 
1422
- void CompositionViewComponentView::onKeyDown(
1573
+ void ViewComponentView::OnKeyDown(
1423
1574
  const winrt::Microsoft::ReactNative::Composition::Input::KeyboardSource &source,
1424
1575
  const winrt::Microsoft::ReactNative::Composition::Input::KeyRoutedEventArgs &args) noexcept {
1425
- auto eventCode = CodeFromVirtualKey(args.Key());
1576
+ auto eventCode = ::Microsoft::ReactNative::CodeFromVirtualKey(args.Key());
1426
1577
  bool fShift = source.GetKeyState(winrt::Windows::System::VirtualKey::Shift) !=
1427
1578
  winrt::Windows::UI::Core::CoreVirtualKeyStates::None;
1428
1579
  bool fAlt = source.GetKeyState(winrt::Windows::System::VirtualKey::Menu) !=
@@ -1434,14 +1585,14 @@ void CompositionViewComponentView::onKeyDown(
1434
1585
  (source.GetKeyState(winrt::Windows::System::VirtualKey::RightWindows) !=
1435
1586
  winrt::Windows::UI::Core::CoreVirtualKeyStates::None);
1436
1587
 
1437
- if (args.OriginalSource() == tag()) {
1588
+ if (args.OriginalSource() == Tag()) {
1438
1589
  facebook::react::KeyEvent event;
1439
1590
  event.shiftKey = fShift;
1440
1591
  event.ctrlKey = fCtrl;
1441
1592
  event.altKey = fAlt;
1442
1593
  event.metaKey = fMeta;
1443
1594
 
1444
- event.key = FromVirtualKey(args.Key(), event.shiftKey, !!(GetKeyState(VK_CAPITAL) & 1));
1595
+ event.key = ::Microsoft::ReactNative::FromVirtualKey(args.Key(), event.shiftKey, !!(GetKeyState(VK_CAPITAL) & 1));
1445
1596
  event.code = eventCode;
1446
1597
  m_eventEmitter->onKeyDown(event);
1447
1598
  }
@@ -1455,13 +1606,13 @@ void CompositionViewComponentView::onKeyDown(
1455
1606
  }
1456
1607
  }
1457
1608
 
1458
- Super::onKeyDown(source, args);
1609
+ base_type::OnKeyDown(source, args);
1459
1610
  }
1460
1611
 
1461
- void CompositionViewComponentView::onKeyUp(
1612
+ void ViewComponentView::OnKeyUp(
1462
1613
  const winrt::Microsoft::ReactNative::Composition::Input::KeyboardSource &source,
1463
1614
  const winrt::Microsoft::ReactNative::Composition::Input::KeyRoutedEventArgs &args) noexcept {
1464
- auto eventCode = CodeFromVirtualKey(args.Key());
1615
+ auto eventCode = ::Microsoft::ReactNative::CodeFromVirtualKey(args.Key());
1465
1616
  bool fShift = source.GetKeyState(winrt::Windows::System::VirtualKey::Shift) !=
1466
1617
  winrt::Windows::UI::Core::CoreVirtualKeyStates::None;
1467
1618
  bool fAlt = source.GetKeyState(winrt::Windows::System::VirtualKey::Menu) !=
@@ -1473,14 +1624,14 @@ void CompositionViewComponentView::onKeyUp(
1473
1624
  (source.GetKeyState(winrt::Windows::System::VirtualKey::RightWindows) !=
1474
1625
  winrt::Windows::UI::Core::CoreVirtualKeyStates::None);
1475
1626
 
1476
- if (args.OriginalSource() == tag()) {
1627
+ if (args.OriginalSource() == Tag()) {
1477
1628
  facebook::react::KeyEvent event;
1478
1629
  event.shiftKey = fShift;
1479
1630
  event.ctrlKey = fCtrl;
1480
1631
  event.altKey = fAlt;
1481
1632
  event.metaKey = fMeta;
1482
1633
 
1483
- event.key = FromVirtualKey(args.Key(), event.shiftKey, !!(GetKeyState(VK_CAPITAL) & 1));
1634
+ event.key = ::Microsoft::ReactNative::FromVirtualKey(args.Key(), event.shiftKey, !!(GetKeyState(VK_CAPITAL) & 1));
1484
1635
  event.code = eventCode;
1485
1636
  m_eventEmitter->onKeyUp(event);
1486
1637
  }
@@ -1494,125 +1645,173 @@ void CompositionViewComponentView::onKeyUp(
1494
1645
  }
1495
1646
  }
1496
1647
 
1497
- Super::onKeyUp(source, args);
1648
+ base_type::OnKeyUp(source, args);
1498
1649
  }
1499
1650
 
1500
- void CompositionViewComponentView::updateState(
1501
- facebook::react::State::Shared const &state,
1502
- facebook::react::State::Shared const &oldState) noexcept {}
1503
-
1504
- void CompositionViewComponentView::updateLayoutMetrics(
1651
+ void ViewComponentView::updateLayoutMetrics(
1505
1652
  facebook::react::LayoutMetrics const &layoutMetrics,
1506
1653
  facebook::react::LayoutMetrics const &oldLayoutMetrics) noexcept {
1507
1654
  // Set Position & Size Properties
1508
1655
  if ((layoutMetrics.displayType != m_layoutMetrics.displayType)) {
1509
1656
  OuterVisual().IsVisible(layoutMetrics.displayType != facebook::react::DisplayType::None);
1510
1657
  }
1658
+ ensureVisual();
1659
+ base_type::updateLayoutMetrics(layoutMetrics, oldLayoutMetrics);
1660
+ }
1511
1661
 
1512
- updateBorderLayoutMetrics(layoutMetrics, *m_props);
1662
+ void ViewComponentView::UpdateLayoutMetrics(const LayoutMetrics &metrics, const LayoutMetrics &oldMetrics) noexcept {
1663
+ m_visual.Size({metrics.Frame.Width * metrics.PointScaleFactor, metrics.Frame.Height * metrics.PointScaleFactor});
1664
+ }
1513
1665
 
1514
- m_layoutMetrics = layoutMetrics;
1666
+ void ViewComponentView::prepareForRecycle() noexcept {}
1515
1667
 
1516
- UpdateCenterPropertySet();
1517
- m_visual.Size(
1518
- {layoutMetrics.frame.size.width * layoutMetrics.pointScaleFactor,
1519
- layoutMetrics.frame.size.height * layoutMetrics.pointScaleFactor});
1668
+ facebook::react::SharedViewProps ViewComponentView::viewProps() noexcept {
1669
+ return m_props;
1520
1670
  }
1521
1671
 
1522
- void CompositionViewComponentView::finalizeUpdates(RNComponentViewUpdateMask updateMask) noexcept {
1523
- if (m_needsBorderUpdate) {
1524
- m_needsBorderUpdate = false;
1525
- UpdateSpecialBorderLayers(m_layoutMetrics, *m_props);
1672
+ winrt::Microsoft::ReactNative::ViewProps ViewComponentView::ViewProps() noexcept {
1673
+ // If we have AbiViewProps, then we dont need to new up a props wrapper
1674
+ if (m_customComponent) {
1675
+ const auto &abiViewProps = *std::static_pointer_cast<const ::Microsoft::ReactNative::AbiViewProps>(m_props);
1676
+ return abiViewProps.ViewProps();
1526
1677
  }
1527
- }
1528
1678
 
1529
- void CompositionViewComponentView::prepareForRecycle() noexcept {}
1530
- facebook::react::Props::Shared CompositionViewComponentView::props() noexcept {
1531
- return m_props;
1679
+ return winrt::make<winrt::Microsoft::ReactNative::implementation::ViewProps>(m_props);
1532
1680
  }
1533
1681
 
1534
- winrt::Microsoft::ReactNative::Composition::IVisual CompositionViewComponentView::Visual() const noexcept {
1682
+ winrt::Microsoft::ReactNative::Composition::IVisual ViewComponentView::Visual() const noexcept {
1683
+ assert(m_visual);
1535
1684
  return m_visual;
1536
1685
  }
1537
1686
 
1538
- bool CompositionViewComponentView::focusable() const noexcept {
1687
+ bool ViewComponentView::focusable() const noexcept {
1539
1688
  return m_props->focusable;
1540
1689
  }
1541
1690
 
1542
- std::string CompositionViewComponentView::DefaultControlType() const noexcept {
1691
+ std::string ViewComponentView::DefaultControlType() const noexcept {
1543
1692
  return "group";
1544
1693
  }
1545
1694
 
1546
- IComponentView *lastDeepChild(IComponentView &view) noexcept {
1547
- auto current = &view;
1695
+ winrt::IInspectable ComponentView::EnsureUiaProvider() noexcept {
1696
+ if (m_uiaProvider == nullptr) {
1697
+ m_uiaProvider =
1698
+ winrt::make<winrt::Microsoft::ReactNative::implementation::CompositionDynamicAutomationProvider>(*get_strong());
1699
+ }
1700
+ return m_uiaProvider;
1701
+ }
1702
+
1703
+ bool IntersectRect(RECT *prcDst, const RECT &prcSrc1, const RECT &prcSrc2) {
1704
+ prcDst->left = std::max(prcSrc1.left, prcSrc2.left);
1705
+ prcDst->right = std::min(prcSrc1.right, prcSrc2.right);
1706
+
1707
+ if (prcDst->left < prcDst->right) {
1708
+ prcDst->top = std::max(prcSrc1.top, prcSrc2.top);
1709
+ prcDst->bottom = std::min(prcSrc1.bottom, prcSrc2.bottom);
1710
+
1711
+ if (prcDst->top < prcDst->bottom) {
1712
+ return true;
1713
+ }
1714
+ }
1715
+
1716
+ prcDst->left = prcDst->top = prcDst->right = prcDst->bottom = 0;
1717
+ return false;
1718
+ }
1719
+
1720
+ winrt::Microsoft::ReactNative::implementation::ClipState ComponentView::getClipState() noexcept {
1721
+ if (!m_parent) {
1722
+ return winrt::Microsoft::ReactNative::implementation::ClipState::FullyClipped;
1723
+ }
1724
+
1725
+ RECT intersection;
1726
+ const auto parentRect =
1727
+ winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(m_parent)->getClientRect();
1728
+ const auto clientRect = getClientRect();
1729
+
1730
+ IntersectRect(&intersection, parentRect, clientRect);
1731
+
1732
+ if (intersection == clientRect) {
1733
+ return m_parent.as<winrt::Microsoft::ReactNative::Composition::implementation::ComponentView>()->getClipState();
1734
+ }
1735
+
1736
+ if (((intersection.right - intersection.left) == 0) && ((intersection.bottom - intersection.top) == 0)) {
1737
+ return winrt::Microsoft::ReactNative::implementation::ClipState::FullyClipped;
1738
+ }
1739
+
1740
+ if (m_parent.as<winrt::Microsoft::ReactNative::Composition::implementation::ComponentView>()->getClipState() ==
1741
+ winrt::Microsoft::ReactNative::implementation::ClipState::FullyClipped) {
1742
+ return winrt::Microsoft::ReactNative::implementation::ClipState::FullyClipped;
1743
+ }
1744
+
1745
+ return winrt::Microsoft::ReactNative::implementation::ClipState::PartialClip;
1746
+ }
1747
+
1748
+ } // namespace winrt::Microsoft::ReactNative::Composition::implementation
1749
+
1750
+ namespace winrt::Microsoft::ReactNative::implementation {
1751
+
1752
+ winrt::Microsoft::ReactNative::ComponentView lastDeepChild(
1753
+ const winrt::Microsoft::ReactNative::ComponentView &view) noexcept {
1754
+ auto current = view;
1548
1755
  while (current) {
1549
- auto children = current->children();
1550
- auto itLastChild = children.rbegin();
1551
- if (itLastChild == children.rend()) {
1756
+ auto children = current.Children();
1757
+ if (children.Size() == 0)
1552
1758
  break;
1553
- }
1554
- current = *itLastChild;
1759
+ current = children.GetAt(children.Size() - 1);
1555
1760
  }
1556
1761
  return current;
1557
1762
  }
1558
1763
 
1559
- bool walkTree(IComponentView &view, bool forward, Mso::Functor<bool(IComponentView &)> &fn) noexcept {
1764
+ bool walkTree(
1765
+ const winrt::Microsoft::ReactNative::ComponentView &view,
1766
+ bool forward,
1767
+ Mso::Functor<bool(const winrt::Microsoft::ReactNative::ComponentView &)> &fn) noexcept {
1560
1768
  if (forward) {
1561
1769
  if (fn(view)) {
1562
1770
  return true;
1563
1771
  }
1564
1772
 
1565
- for (auto it = view.children().begin(); it != view.children().end(); ++it) {
1566
- if (fn(**it))
1567
- return true;
1773
+ auto children = view.Children();
1774
+ for (auto it = children.begin(); it != children.end(); ++it) {
1775
+ return walkTree(*it, forward, fn);
1568
1776
  }
1569
1777
 
1570
- auto current = &view;
1571
- auto parent = current->parent();
1778
+ auto current = view;
1779
+ auto parent = current.Parent();
1572
1780
  while (parent) {
1573
- auto &parentsChildren = parent->children();
1781
+ auto parentsChildren = parent.Children();
1574
1782
  auto itNextView = std::find(parentsChildren.begin(), parentsChildren.end(), current);
1575
1783
  assert(itNextView != parentsChildren.end());
1576
1784
  ++itNextView;
1577
1785
  if (itNextView != parentsChildren.end()) {
1578
- return walkTree(**itNextView, true, fn);
1786
+ return walkTree(*itNextView, true, fn);
1579
1787
  }
1580
1788
  current = parent;
1581
- parent = current->parent();
1789
+ parent = current.Parent();
1582
1790
  }
1583
1791
 
1584
1792
  } else {
1585
- auto current = &view;
1586
- auto parent = current->parent();
1793
+ auto current = view;
1794
+ auto parent = current.Parent();
1587
1795
  while (parent) {
1588
- auto &parentsChildren = parent->children();
1589
- auto itNextView = std::find(parentsChildren.rbegin(), parentsChildren.rend(), current);
1590
- assert(itNextView != parentsChildren.rend());
1591
- auto index = std::distance(parentsChildren.rbegin(), itNextView);
1592
- ++itNextView;
1593
- if (itNextView != parentsChildren.rend()) {
1594
- auto lastChild = lastDeepChild(**itNextView);
1595
- if (fn(*lastChild))
1796
+ auto parentsChildren = parent.Children();
1797
+ uint32_t index;
1798
+ bool success = parent.Children().IndexOf(current, index);
1799
+ assert(success);
1800
+ if (index > 0) {
1801
+ auto lastChild = lastDeepChild(parent.Children().GetAt(index - 1));
1802
+ if (fn(lastChild))
1596
1803
  return true;
1597
- return walkTree(*lastChild, false, fn);
1804
+ return walkTree(lastChild, false, fn);
1598
1805
  }
1599
1806
 
1600
- if (fn(*parent)) {
1807
+ if (fn(parent)) {
1601
1808
  return true;
1602
1809
  }
1603
1810
  current = parent;
1604
- parent = current->parent();
1811
+ parent = current.Parent();
1605
1812
  }
1606
1813
  }
1607
1814
  return false;
1608
1815
  }
1609
1816
 
1610
- winrt::IInspectable CompositionBaseComponentView::EnsureUiaProvider() noexcept {
1611
- if (m_uiaProvider == nullptr) {
1612
- m_uiaProvider = winrt::make<winrt::Microsoft::ReactNative::implementation::CompositionDynamicAutomationProvider>(
1613
- shared_from_this());
1614
- }
1615
- return m_uiaProvider;
1616
- }
1617
-
1618
- } // namespace Microsoft::ReactNative
1817
+ } // namespace winrt::Microsoft::ReactNative::implementation