react-native-windows 0.73.11 → 0.74.0-preview.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (767) hide show
  1. package/.flowconfig +12 -7
  2. package/Chakra/ChakraUtils.cpp +5 -10
  3. package/Chakra/ChakraUtils.h +2 -2
  4. package/Common/packages.lock.json +3 -3
  5. package/Directory.Build.props +5 -5
  6. package/Folly/Folly.vcxproj +2 -2
  7. package/Folly/Folly.vcxproj.filters +7 -0
  8. package/Folly/TEMP_UntilFollyUpdate/dynamic-inl.h +22 -1
  9. package/Folly/TEMP_UntilFollyUpdate/lang/SafeAssert.h +4 -1
  10. package/Folly/cgmanifest.json +1 -1
  11. package/Libraries/ActionSheetIOS/ActionSheetIOS.d.ts +6 -0
  12. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +6 -0
  13. package/Libraries/ActionSheetIOS/NativeActionSheetManager.js +4 -45
  14. package/Libraries/Alert/Alert.windows.js +2 -3
  15. package/Libraries/Alert/NativeAlertManager.js +4 -26
  16. package/Libraries/Animated/Animated.js +2 -2
  17. package/Libraries/Animated/AnimatedPlatformConfig.js +1 -1
  18. package/Libraries/Animated/NativeAnimatedHelper.js +14 -11
  19. package/Libraries/Animated/NativeAnimatedModule.js +4 -68
  20. package/Libraries/Animated/NativeAnimatedTurboModule.js +4 -69
  21. package/Libraries/Animated/animations/Animation.js +6 -22
  22. package/Libraries/Animated/components/AnimatedFlatList.js +1 -16
  23. package/Libraries/Animated/components/AnimatedScrollView.js +36 -31
  24. package/Libraries/Animated/components/AnimatedSectionList.js +1 -20
  25. package/Libraries/Animated/createAnimatedComponent.js +45 -40
  26. package/Libraries/Animated/nodes/AnimatedStyle.js +1 -1
  27. package/Libraries/Animated/shouldUseTurboAnimatedModule.js +1 -1
  28. package/Libraries/Animated/useAnimatedProps.js +21 -1
  29. package/Libraries/AppState/NativeAppState.js +4 -24
  30. package/Libraries/AppTheme/NativeAppTheme.js +4 -25
  31. package/Libraries/BatchedBridge/NativeModules.js +1 -1
  32. package/Libraries/Blob/Blob.js +1 -4
  33. package/Libraries/Blob/BlobManager.js +6 -8
  34. package/Libraries/Blob/File.js +1 -1
  35. package/Libraries/Blob/NativeBlobModule.js +4 -50
  36. package/Libraries/Blob/NativeFileReaderModule.js +4 -13
  37. package/Libraries/BugReporting/NativeBugReporting.js +4 -12
  38. package/Libraries/Components/AccessibilityInfo/NativeAccessibilityInfo.js +3 -23
  39. package/Libraries/Components/AccessibilityInfo/NativeAccessibilityManager.js +4 -57
  40. package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.android.js +3 -2
  41. package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.windows.js +3 -2
  42. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +9 -40
  43. package/Libraries/Components/ActivityIndicator/ActivityIndicatorViewNativeComponent.js +3 -43
  44. package/Libraries/Components/Button.js +103 -107
  45. package/Libraries/Components/Button.windows.js +199 -206
  46. package/Libraries/Components/Clipboard/NativeClipboard.js +3 -11
  47. package/Libraries/Components/DrawerAndroid/AndroidDrawerLayoutNativeComponent.js +3 -114
  48. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +1 -5
  49. package/Libraries/Components/Keyboard/KeyboardExt.d.ts +8 -8
  50. package/Libraries/Components/Keyboard/KeyboardExt.js +27 -27
  51. package/Libraries/Components/Keyboard/KeyboardExt.js.map +1 -1
  52. package/Libraries/Components/Keyboard/KeyboardExtProps.d.ts +17 -17
  53. package/Libraries/Components/Keyboard/KeyboardExtProps.js +7 -7
  54. package/Libraries/Components/Keyboard/KeyboardExtProps.js.map +1 -1
  55. package/Libraries/Components/Keyboard/NativeKeyboardObserver.js +3 -10
  56. package/Libraries/Components/Pressable/Pressable.js +1 -1
  57. package/Libraries/Components/Pressable/Pressable.windows.js +1 -2
  58. package/Libraries/Components/Pressable/useAndroidRippleForView.js +5 -4
  59. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidNativeComponent.js +4 -24
  60. package/Libraries/Components/RefreshControl/AndroidSwipeRefreshLayoutNativeComponent.js +3 -64
  61. package/Libraries/Components/RefreshControl/PullToRefreshViewNativeComponent.js +3 -61
  62. package/Libraries/Components/RefreshControl/RefreshControl.js +1 -1
  63. package/Libraries/Components/RefreshControl/RefreshControl.windows.js +1 -1
  64. package/Libraries/Components/SafeAreaView/RCTSafeAreaViewNativeComponent.js +3 -15
  65. package/Libraries/Components/ScrollView/AndroidHorizontalScrollContentViewNativeComponent.js +3 -16
  66. package/Libraries/Components/ScrollView/ScrollContentViewNativeComponent.js +1 -1
  67. package/Libraries/Components/ScrollView/ScrollView.d.ts +5 -6
  68. package/Libraries/Components/ScrollView/ScrollView.js +12 -38
  69. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +1 -2
  70. package/Libraries/Components/Sound/NativeSoundManager.js +3 -12
  71. package/Libraries/Components/StatusBar/NativeStatusBarManagerAndroid.js +3 -58
  72. package/Libraries/Components/StatusBar/NativeStatusBarManagerIOS.js +3 -79
  73. package/Libraries/Components/Switch/AndroidSwitchNativeComponent.js +4 -53
  74. package/Libraries/Components/Switch/Switch.js +0 -2
  75. package/Libraries/Components/Switch/Switch.windows.js +0 -2
  76. package/Libraries/Components/Switch/SwitchNativeComponent.js +4 -52
  77. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +8 -0
  78. package/Libraries/Components/TextInput/InputAccessoryView.js +18 -20
  79. package/Libraries/Components/TextInput/RCTInputAccessoryViewNativeComponent.js +4 -17
  80. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +3 -6
  81. package/Libraries/Components/TextInput/TextInput.d.ts +16 -0
  82. package/Libraries/Components/TextInput/TextInput.flow.js +16 -0
  83. package/Libraries/Components/TextInput/TextInput.js +65 -32
  84. package/Libraries/Components/TextInput/TextInput.windows.js +87 -38
  85. package/Libraries/Components/TextInput/WindowsTextInputNativeComponent.js +773 -9
  86. package/Libraries/Components/ToastAndroid/NativeToastAndroid.js +3 -28
  87. package/Libraries/Components/Touchable/PooledClass.js +1 -1
  88. package/Libraries/Components/Touchable/Touchable.js +2 -3
  89. package/Libraries/Components/Touchable/Touchable.windows.js +2 -3
  90. package/Libraries/Components/Touchable/TouchableHighlight.js +4 -4
  91. package/Libraries/Components/Touchable/TouchableHighlight.windows.js +4 -4
  92. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +2 -1
  93. package/Libraries/Components/Touchable/TouchableOpacity.js +5 -2
  94. package/Libraries/Components/Touchable/TouchableOpacity.windows.js +5 -2
  95. package/Libraries/Components/UnimplementedViews/UnimplementedNativeViewNativeComponent.js +3 -16
  96. package/Libraries/Components/View/ReactNativeStyleAttributes.js +2 -1
  97. package/Libraries/Components/View/View.js +0 -11
  98. package/Libraries/Components/View/View.windows.js +19 -18
  99. package/Libraries/Components/View/ViewAccessibility.d.ts +33 -17
  100. package/Libraries/Components/View/ViewPropTypes.d.ts +28 -17
  101. package/Libraries/Components/View/ViewPropTypes.js +36 -36
  102. package/Libraries/Components/View/ViewPropTypes.windows.js +36 -36
  103. package/Libraries/Core/InitializeCore.js +1 -1
  104. package/Libraries/Core/NativeExceptionsManager.js +3 -93
  105. package/Libraries/Core/ReactNativeVersion.js +12 -6
  106. package/Libraries/Core/ReactNativeVersionCheck.js +6 -6
  107. package/Libraries/Core/SegmentFetcher/NativeSegmentFetcher.js +3 -18
  108. package/Libraries/Core/Timers/NativeTiming.js +3 -16
  109. package/Libraries/Core/registerCallableModule.d.ts +16 -0
  110. package/Libraries/Core/registerCallableModule.js +42 -0
  111. package/Libraries/Core/setUpPerformance.js +2 -2
  112. package/Libraries/Core/setUpPerformanceObserver.js +3 -1
  113. package/Libraries/Debugging/DebuggingOverlay.js +111 -0
  114. package/Libraries/Debugging/DebuggingOverlayNativeComponent.js +13 -0
  115. package/Libraries/Debugging/DebuggingOverlayRegistry.js +513 -0
  116. package/Libraries/Debugging/useSubscribeToDebuggingOverlayRegistry.js +32 -0
  117. package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +3 -14
  118. package/Libraries/HeapCapture/NativeJSCHeapCapture.js +3 -9
  119. package/Libraries/Image/AssetSourceResolver.js +5 -5
  120. package/Libraries/Image/AssetUtils.js +4 -5
  121. package/Libraries/Image/Image.android.js +146 -174
  122. package/Libraries/Image/Image.d.ts +1 -1
  123. package/Libraries/Image/Image.ios.js +53 -79
  124. package/Libraries/Image/Image.windows.js +53 -79
  125. package/Libraries/Image/ImageBackground.js +2 -2
  126. package/Libraries/Image/ImageInjection.js +76 -18
  127. package/Libraries/Image/ImageTypes.flow.js +71 -0
  128. package/Libraries/Image/ImageUtils.js +1 -1
  129. package/Libraries/Image/ImageViewNativeComponent.js +18 -0
  130. package/Libraries/Image/NativeImageEditor.js +3 -42
  131. package/Libraries/Image/NativeImageLoaderAndroid.js +4 -28
  132. package/Libraries/Image/NativeImageLoaderIOS.js +4 -28
  133. package/Libraries/Image/NativeImageStoreAndroid.js +3 -16
  134. package/Libraries/Image/NativeImageStoreIOS.js +3 -23
  135. package/Libraries/Image/resolveAssetSource.js +59 -26
  136. package/Libraries/Image/resolveAssetSource.windows.js +148 -0
  137. package/Libraries/Inspector/ElementProperties.js +26 -52
  138. package/Libraries/Inspector/Inspector.js +122 -186
  139. package/Libraries/Inspector/InspectorOverlay.js +21 -33
  140. package/Libraries/Inspector/InspectorPanel.js +3 -17
  141. package/Libraries/Inspector/ReactDevToolsOverlay.js +171 -0
  142. package/Libraries/Inspector/getInspectorDataForViewAtPoint.js +20 -8
  143. package/Libraries/Interaction/FrameRateLogger.js +8 -18
  144. package/Libraries/Interaction/NativeFrameRateLogger.js +4 -16
  145. package/Libraries/IntersectionObserver/IntersectionObserver.js +1 -1
  146. package/Libraries/IntersectionObserver/IntersectionObserverEntry.js +20 -19
  147. package/Libraries/IntersectionObserver/IntersectionObserverManager.js +84 -6
  148. package/Libraries/IntersectionObserver/NativeIntersectionObserver.js +3 -31
  149. package/Libraries/IntersectionObserver/__mocks__/NativeIntersectionObserver.js +12 -2
  150. package/Libraries/LayoutAnimation/LayoutAnimation.js +1 -2
  151. package/Libraries/Linking/NativeIntentAndroid.js +3 -20
  152. package/Libraries/Linking/NativeLinkingManager.js +3 -17
  153. package/Libraries/Lists/FillRateHelper.js +1 -1
  154. package/Libraries/Lists/FlatList.d.ts +2 -2
  155. package/Libraries/Lists/FlatList.js +6 -2
  156. package/Libraries/Lists/FlatList.windows.js +717 -0
  157. package/Libraries/Lists/SectionList.d.ts +6 -1
  158. package/Libraries/Lists/ViewabilityHelper.js +1 -1
  159. package/Libraries/Lists/VirtualizeUtils.js +1 -1
  160. package/Libraries/Lists/VirtualizedList.js +1 -1
  161. package/Libraries/Lists/VirtualizedListContext.js +1 -1
  162. package/Libraries/Lists/VirtualizedSectionList.js +1 -1
  163. package/Libraries/LogBox/LogBoxInspectorContainer.js +1 -1
  164. package/Libraries/Modal/Modal.js +43 -11
  165. package/Libraries/Modal/NativeModalManager.js +3 -11
  166. package/Libraries/Modal/RCTModalHostViewNativeComponent.js +3 -129
  167. package/Libraries/MutationObserver/MutationObserver.js +1 -1
  168. package/Libraries/MutationObserver/MutationObserverManager.js +2 -2
  169. package/Libraries/MutationObserver/MutationRecord.js +12 -10
  170. package/Libraries/MutationObserver/NativeMutationObserver.js +3 -48
  171. package/Libraries/MutationObserver/__mocks__/NativeMutationObserver.js +1 -1
  172. package/Libraries/NativeComponent/BaseViewConfig.android.js +1 -0
  173. package/Libraries/NativeComponent/BaseViewConfig.windows.js +3 -0
  174. package/Libraries/NativeComponent/NativeComponentRegistry.js +1 -1
  175. package/Libraries/NativeModules/specs/NativeAnimationsDebugModule.js +3 -10
  176. package/Libraries/NativeModules/specs/NativeDevMenu.js +3 -13
  177. package/Libraries/NativeModules/specs/NativeDevSettings.js +3 -23
  178. package/Libraries/NativeModules/specs/NativeDeviceEventManager.js +3 -9
  179. package/Libraries/NativeModules/specs/NativeDialogManagerAndroid.js +3 -38
  180. package/Libraries/NativeModules/specs/NativeDialogManagerWindows.js +11 -0
  181. package/Libraries/NativeModules/specs/NativeLogBox.js +3 -10
  182. package/Libraries/NativeModules/specs/NativeRedBox.js +4 -11
  183. package/Libraries/NativeModules/specs/NativeSourceCode.js +2 -25
  184. package/Libraries/Network/FormData.js +3 -1
  185. package/Libraries/Network/NativeNetworkingAndroid.js +4 -28
  186. package/Libraries/Network/NativeNetworkingIOS.js +4 -28
  187. package/Libraries/NewAppScreen/components/DebugInstructions.windows.js +4 -2
  188. package/Libraries/NewAppScreen/components/ReloadInstructions.windows.js +3 -1
  189. package/Libraries/Performance/NativeJSCSamplingProfiler.js +3 -9
  190. package/Libraries/PermissionsAndroid/NativePermissionsAndroid.js +4 -68
  191. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +3 -3
  192. package/Libraries/Pressability/Pressability.js +12 -2
  193. package/Libraries/Pressability/Pressability.windows.js +13 -3
  194. package/Libraries/Pressability/usePressability.js +7 -0
  195. package/Libraries/PushNotificationIOS/NativePushNotificationManagerIOS.js +4 -70
  196. package/Libraries/PushNotificationIOS/PushNotificationIOS.js +45 -39
  197. package/Libraries/ReactNative/AppContainer-dev.js +211 -0
  198. package/Libraries/ReactNative/AppContainer-prod.js +53 -0
  199. package/Libraries/ReactNative/AppContainer.js +6 -149
  200. package/Libraries/ReactNative/AppRegistry.js +3 -1
  201. package/Libraries/ReactNative/BridgelessUIManager.js +375 -128
  202. package/Libraries/ReactNative/FabricUIManager.js +6 -0
  203. package/Libraries/ReactNative/NativeHeadlessJsTaskSupport.js +3 -10
  204. package/Libraries/ReactNative/NativeI18nManager.js +3 -18
  205. package/Libraries/ReactNative/NativeUIManager.js +4 -112
  206. package/Libraries/ReactNative/PaperUIManager.js +8 -7
  207. package/Libraries/ReactNative/PaperUIManager.windows.js +29 -8
  208. package/Libraries/ReactNative/ReactFabricInternals.js +1 -1
  209. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +24 -5
  210. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +0 -45
  211. package/Libraries/ReactNative/RendererImplementation.js +11 -0
  212. package/Libraries/ReactNative/UIManager.d.ts +11 -34
  213. package/Libraries/ReactNative/UIManager.js +2 -23
  214. package/Libraries/ReactNative/UIManagerProperties.js +0 -2
  215. package/Libraries/ReactNative/__mocks__/FabricUIManager.js +23 -1
  216. package/Libraries/ReactNative/getNativeComponentAttributes.js +5 -1
  217. package/Libraries/ReactNative/renderApplication.js +9 -6
  218. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +6 -1
  219. package/Libraries/Renderer/implementations/ReactFabric-dev.js +24771 -21123
  220. package/Libraries/Renderer/implementations/ReactFabric-prod.js +4160 -3109
  221. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +4384 -3322
  222. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +25194 -21398
  223. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +3763 -2636
  224. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +4027 -2867
  225. package/Libraries/Renderer/shims/ReactNativeTypes.js +8 -9
  226. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +7 -12
  227. package/Libraries/Settings/NativeSettingsManager.js +4 -16
  228. package/Libraries/Share/NativeShareModule.js +3 -13
  229. package/Libraries/StyleSheet/PlatformColorValueTypes.windows.js +1 -1
  230. package/Libraries/StyleSheet/StyleSheet.d.ts +1 -20
  231. package/Libraries/StyleSheet/StyleSheet.js +5 -28
  232. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +51 -7
  233. package/Libraries/StyleSheet/StyleSheetTypes.js +19 -11
  234. package/Libraries/StyleSheet/flattenStyle.js +2 -2
  235. package/Libraries/StyleSheet/normalizeColor.js +1 -1
  236. package/Libraries/StyleSheet/processAspectRatio.js +1 -1
  237. package/Libraries/StyleSheet/processFontVariant.js +1 -1
  238. package/Libraries/Text/Text.js +0 -6
  239. package/Libraries/Text/Text.windows.js +0 -6
  240. package/Libraries/Text/TextAncestor.js +2 -3
  241. package/Libraries/TurboModule/samples/NativeSampleTurboModule.js +4 -41
  242. package/Libraries/Types/ReactDevToolsTypes.js +58 -0
  243. package/Libraries/Types/UIManagerJSInterface.js +16 -0
  244. package/Libraries/Utilities/DebugEnvironment.js +1 -4
  245. package/Libraries/Utilities/Dimensions.js +8 -16
  246. package/Libraries/Utilities/GlobalPerformanceLogger.js +1 -2
  247. package/Libraries/Utilities/NativeAppearance.js +3 -26
  248. package/Libraries/Utilities/NativeDevLoadingView.js +3 -14
  249. package/Libraries/Utilities/NativeDeviceInfo.js +2 -47
  250. package/Libraries/Utilities/NativePlatformConstantsAndroid.js +3 -34
  251. package/Libraries/Utilities/NativePlatformConstantsIOS.js +3 -26
  252. package/Libraries/Utilities/NativePlatformConstantsWin.js +3 -23
  253. package/Libraries/Utilities/PixelRatio.d.ts +4 -4
  254. package/Libraries/Utilities/Platform.android.js +4 -0
  255. package/Libraries/Utilities/Platform.d.ts +3 -0
  256. package/Libraries/Utilities/Platform.flow.js +7 -0
  257. package/Libraries/Utilities/Platform.flow.windows.js +9 -0
  258. package/Libraries/Utilities/Platform.ios.js +11 -0
  259. package/Libraries/Utilities/Platform.windows.js +6 -0
  260. package/Libraries/Utilities/binaryToBase64.js +1 -1
  261. package/Libraries/Utilities/codegenNativeComponent.js +4 -6
  262. package/Libraries/Utilities/createPerformanceLogger.js +2 -74
  263. package/Libraries/Utilities/useMergeRefs.js +5 -9
  264. package/Libraries/Vibration/NativeVibration.js +3 -14
  265. package/Libraries/WebSocket/NativeWebSocketModule.js +4 -25
  266. package/Libraries/YellowBox/YellowBoxDeprecated.js +1 -1
  267. package/Libraries/vendor/emitter/EventEmitter.js +1 -0
  268. package/Microsoft.ReactNative/AsynchronousEventBeat.cpp +50 -0
  269. package/Microsoft.ReactNative/AsynchronousEventBeat.h +23 -0
  270. package/Microsoft.ReactNative/Base/CoreUIManagers.cpp +4 -0
  271. package/Microsoft.ReactNative/Base/CxxReactIncludes.h +1 -1
  272. package/Microsoft.ReactNative/Base/FollyIncludes.h +2 -2
  273. package/Microsoft.ReactNative/ComponentView.idl +106 -0
  274. package/Microsoft.ReactNative/Composition.Input.idl +16 -2
  275. package/Microsoft.ReactNative/CompositionComponentView.idl +117 -0
  276. package/Microsoft.ReactNative/CompositionContext.idl +1 -1
  277. package/Microsoft.ReactNative/CompositionRootView.idl +8 -0
  278. package/Microsoft.ReactNative/CompositionSwitcher.idl +25 -14
  279. package/Microsoft.ReactNative/DevMenuControl.idl +0 -3
  280. package/Microsoft.ReactNative/DevMenuControl.xaml +0 -15
  281. package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.cpp +189 -0
  282. package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.h +80 -0
  283. package/Microsoft.ReactNative/Fabric/AbiShadowNode.cpp +83 -0
  284. package/Microsoft.ReactNative/Fabric/AbiShadowNode.h +83 -0
  285. package/Microsoft.ReactNative/Fabric/AbiState.cpp +71 -0
  286. package/Microsoft.ReactNative/Fabric/AbiState.h +38 -0
  287. package/Microsoft.ReactNative/Fabric/AbiViewComponentDescriptor.cpp +48 -19
  288. package/Microsoft.ReactNative/Fabric/AbiViewComponentDescriptor.h +8 -16
  289. package/Microsoft.ReactNative/Fabric/AbiViewProps.cpp +97 -0
  290. package/Microsoft.ReactNative/Fabric/AbiViewProps.h +39 -0
  291. package/Microsoft.ReactNative/Fabric/AbiViewShadowNode.cpp +90 -0
  292. package/Microsoft.ReactNative/Fabric/AbiViewShadowNode.h +87 -0
  293. package/Microsoft.ReactNative/Fabric/ComponentView.cpp +340 -0
  294. package/Microsoft.ReactNative/Fabric/ComponentView.h +130 -64
  295. package/Microsoft.ReactNative/Fabric/Composition/ActivityIndicatorComponentView.cpp +48 -24
  296. package/Microsoft.ReactNative/Fabric/Composition/ActivityIndicatorComponentView.h +18 -14
  297. package/Microsoft.ReactNative/Fabric/Composition/ComponentViewRegistry.cpp +42 -27
  298. package/Microsoft.ReactNative/Fabric/Composition/ComponentViewRegistry.h +3 -1
  299. package/Microsoft.ReactNative/Fabric/Composition/Composition.Input.cpp +123 -28
  300. package/Microsoft.ReactNative/Fabric/Composition/Composition.Input.h +69 -13
  301. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.cpp +651 -284
  302. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.h +7 -7
  303. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper_emptyimpl.cpp +9 -9
  304. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +120 -31
  305. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.h +12 -2
  306. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +308 -129
  307. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.h +34 -6
  308. package/Microsoft.ReactNative/Fabric/Composition/CompositionHelpers.h +2 -1
  309. package/Microsoft.ReactNative/Fabric/Composition/CompositionHwndHost.cpp +61 -54
  310. package/Microsoft.ReactNative/Fabric/Composition/CompositionHwndHost.h +0 -9
  311. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootAutomationProvider.cpp +99 -30
  312. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootAutomationProvider.h +4 -3
  313. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootView.cpp +273 -28
  314. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootView.h +28 -3
  315. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootView_emptyimpl.cpp +7 -3
  316. package/Microsoft.ReactNative/Fabric/Composition/CompositionUIService.cpp +4 -0
  317. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +479 -280
  318. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.h +133 -79
  319. package/Microsoft.ReactNative/Fabric/Composition/DebuggingOverlayComponentView.cpp +113 -0
  320. package/Microsoft.ReactNative/Fabric/Composition/DebuggingOverlayComponentView.h +39 -0
  321. package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.cpp +61 -41
  322. package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.h +19 -14
  323. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentDescriptor.h +39 -0
  324. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.cpp +343 -0
  325. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.h +67 -0
  326. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewShadowNode.cpp +18 -0
  327. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewShadowNode.h +39 -0
  328. package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +53 -186
  329. package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.h +20 -12
  330. package/Microsoft.ReactNative/Fabric/Composition/ReactCompositionViewComponentBuilder.cpp +59 -150
  331. package/Microsoft.ReactNative/Fabric/Composition/ReactCompositionViewComponentBuilder.h +27 -76
  332. package/Microsoft.ReactNative/Fabric/Composition/RootComponentView.cpp +81 -32
  333. package/Microsoft.ReactNative/Fabric/Composition/RootComponentView.h +27 -14
  334. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +707 -64
  335. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.h +47 -26
  336. package/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.cpp +225 -125
  337. package/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.h +34 -21
  338. package/Microsoft.ReactNative/Fabric/Composition/TextDrawing.cpp +179 -0
  339. package/Microsoft.ReactNative/Fabric/Composition/TextDrawing.h +25 -0
  340. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentDescriptor.h +110 -115
  341. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +228 -79
  342. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.h +43 -22
  343. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputEventEmitter.cpp +18 -0
  344. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputEventEmitter.h +12 -0
  345. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputProps.h +5 -5
  346. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.cpp +5 -1
  347. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.h +1 -2
  348. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputState.cpp +4 -44
  349. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputState.h +11 -9
  350. package/Microsoft.ReactNative/Fabric/Composition/Theme.cpp +550 -0
  351. package/Microsoft.ReactNative/Fabric/Composition/Theme.h +73 -0
  352. package/Microsoft.ReactNative/Fabric/Composition/Theme_emptyimpl.cpp +85 -0
  353. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +48 -26
  354. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +6 -2
  355. package/Microsoft.ReactNative/Fabric/Composition/UnimplementedNativeViewComponentView.cpp +30 -65
  356. package/Microsoft.ReactNative/Fabric/Composition/UnimplementedNativeViewComponentView.h +16 -25
  357. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +72 -88
  358. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +5 -2
  359. package/Microsoft.ReactNative/Fabric/IComponentViewRegistry.h +3 -2
  360. package/Microsoft.ReactNative/Fabric/ReactNativeConfigProperties.cpp +6 -6
  361. package/Microsoft.ReactNative/Fabric/ReactNativeConfigProperties.h +2 -2
  362. package/Microsoft.ReactNative/Fabric/ReactTaggedView.h +12 -7
  363. package/Microsoft.ReactNative/Fabric/WindowsComponentDescriptorRegistry.cpp +28 -19
  364. package/Microsoft.ReactNative/Fabric/WindowsComponentDescriptorRegistry.h +5 -0
  365. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewEventEmitter.cpp +0 -2
  366. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewTraitsInitializer.h +5 -1
  367. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/WindowsViewEvents.h +2 -4
  368. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/Float.h +20 -0
  369. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/HostPlatformColor.h +86 -0
  370. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/PlatformColorParser.h +38 -0
  371. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/{Color.cpp → PlatformColorUtils.cpp} +7 -77
  372. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/PlatformColorUtils.h +12 -0
  373. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.cpp +1 -0
  374. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.h +2 -0
  375. package/Microsoft.ReactNative/IReactCompositionViewComponentBuilder.idl +6 -87
  376. package/Microsoft.ReactNative/IReactContext.idl +3 -0
  377. package/Microsoft.ReactNative/IReactViewComponentBuilder.idl +71 -1
  378. package/Microsoft.ReactNative/JsiApi.cpp +17 -7
  379. package/Microsoft.ReactNative/JsiApi.h +2 -2
  380. package/Microsoft.ReactNative/JsiApi.idl +5 -4
  381. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +13 -22
  382. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +6 -2
  383. package/Microsoft.ReactNative/Modules/AccessibilityInfoModule.h +1 -1
  384. package/Microsoft.ReactNative/Modules/AlertModule.h +2 -2
  385. package/Microsoft.ReactNative/Modules/Animated/PropsAnimatedNode.cpp +12 -8
  386. package/Microsoft.ReactNative/Modules/Animated/PropsAnimatedNode.h +1 -1
  387. package/Microsoft.ReactNative/Modules/AppStateModule.h +2 -2
  388. package/Microsoft.ReactNative/Modules/AppThemeModuleUwp.cpp +5 -3
  389. package/Microsoft.ReactNative/Modules/AppThemeModuleUwp.h +4 -4
  390. package/Microsoft.ReactNative/Modules/AppearanceModule.cpp +10 -1
  391. package/Microsoft.ReactNative/Modules/ClipboardModule.h +1 -1
  392. package/Microsoft.ReactNative/Modules/DeviceInfoModule.cpp +71 -38
  393. package/Microsoft.ReactNative/Modules/DeviceInfoModule.h +5 -5
  394. package/Microsoft.ReactNative/Modules/ExceptionsManager.cpp +110 -0
  395. package/Microsoft.ReactNative/Modules/ExceptionsManager.h +54 -0
  396. package/Microsoft.ReactNative/Modules/ImageViewManagerModule.h +11 -10
  397. package/Microsoft.ReactNative/Modules/LinkingManagerModule.h +8 -6
  398. package/Microsoft.ReactNative/Modules/LogBoxModule.h +3 -3
  399. package/Microsoft.ReactNative/Modules/NativeUIManager.cpp +5 -28
  400. package/Microsoft.ReactNative/Modules/NativeUIManager.h +1 -1
  401. package/Microsoft.ReactNative/Modules/PaperUIManagerModule.cpp +8 -5
  402. package/Microsoft.ReactNative/Modules/PaperUIManagerModule.h +3 -3
  403. package/Microsoft.ReactNative/Modules/PlatformConstantsWinModule.cpp +49 -0
  404. package/Microsoft.ReactNative/Modules/PlatformConstantsWinModule.h +18 -0
  405. package/Microsoft.ReactNative/Modules/SourceCode.cpp +31 -0
  406. package/Microsoft.ReactNative/Modules/SourceCode.h +28 -0
  407. package/Microsoft.ReactNative/Modules/StatusBarManager.h +12 -0
  408. package/Microsoft.ReactNative/Modules/Timing.cpp +325 -0
  409. package/Microsoft.ReactNative/Modules/Timing.h +121 -0
  410. package/Microsoft.ReactNative/QuirkSettings.cpp +32 -0
  411. package/Microsoft.ReactNative/QuirkSettings.h +9 -0
  412. package/Microsoft.ReactNative/QuirkSettings.idl +6 -0
  413. package/Microsoft.ReactNative/ReactCoreInjection.cpp +15 -0
  414. package/Microsoft.ReactNative/ReactCoreInjection.h +4 -0
  415. package/Microsoft.ReactNative/ReactCoreInjection.idl +8 -0
  416. package/Microsoft.ReactNative/ReactHost/IReactInstance.h +1 -1
  417. package/Microsoft.ReactNative/ReactHost/MsoReactContext.cpp +1 -1
  418. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +556 -234
  419. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.h +36 -9
  420. package/Microsoft.ReactNative/ReactInstanceSettings.idl +3 -0
  421. package/Microsoft.ReactNative/ReactPointerEventArgs.cpp +8 -0
  422. package/Microsoft.ReactNative/ReactPointerEventArgs.h +4 -0
  423. package/Microsoft.ReactNative/ReactPointerEventArgs.idl +12 -0
  424. package/Microsoft.ReactNative/SchedulerSettings.cpp +23 -0
  425. package/Microsoft.ReactNative/SchedulerSettings.h +9 -1
  426. package/Microsoft.ReactNative/SynchronousEventBeat.cpp +41 -0
  427. package/Microsoft.ReactNative/SynchronousEventBeat.h +29 -0
  428. package/Microsoft.ReactNative/Theme.idl +57 -0
  429. package/Microsoft.ReactNative/Timer.cpp +63 -0
  430. package/Microsoft.ReactNative/{CoreAppPage.h → Timer.h} +12 -5
  431. package/Microsoft.ReactNative/Timer.idl +34 -0
  432. package/Microsoft.ReactNative/TurboModulesProvider.cpp +4 -0
  433. package/Microsoft.ReactNative/Utils/ImageUtils.cpp +37 -3
  434. package/Microsoft.ReactNative/Utils/ImageUtils.h +0 -1
  435. package/Microsoft.ReactNative/Utils/LocalBundleReader.cpp +11 -12
  436. package/Microsoft.ReactNative/Utils/LocalBundleReader.h +3 -3
  437. package/Microsoft.ReactNative/Utils/ThemeUtils.cpp +33 -0
  438. package/Microsoft.ReactNative/Utils/ThemeUtils.h +13 -0
  439. package/Microsoft.ReactNative/Utils/ValueUtils.cpp +0 -5
  440. package/Microsoft.ReactNative/Utils/ValueUtils.h +0 -3
  441. package/Microsoft.ReactNative/ViewProps.idl +17 -0
  442. package/Microsoft.ReactNative/Views/ActivityIndicatorViewManager.cpp +1 -0
  443. package/Microsoft.ReactNative/Views/DebuggingOverlayViewManager.cpp +54 -0
  444. package/Microsoft.ReactNative/Views/DebuggingOverlayViewManager.h +30 -0
  445. package/Microsoft.ReactNative/Views/DevMenu.cpp +1 -20
  446. package/Microsoft.ReactNative/Views/DynamicAutomationPeer.cpp +157 -0
  447. package/Microsoft.ReactNative/Views/DynamicAutomationPeer.h +5 -0
  448. package/Microsoft.ReactNative/Views/DynamicAutomationProperties.cpp +20 -0
  449. package/Microsoft.ReactNative/Views/DynamicAutomationProperties.h +4 -0
  450. package/Microsoft.ReactNative/Views/FlyoutViewManager.cpp +1 -5
  451. package/Microsoft.ReactNative/Views/FrameworkElementViewManager.cpp +137 -0
  452. package/Microsoft.ReactNative/Views/ICompositionRootView.h +0 -1
  453. package/Microsoft.ReactNative/Views/Image/ImageViewManager.cpp +0 -5
  454. package/Microsoft.ReactNative/Views/PopupViewManager.cpp +1 -5
  455. package/Microsoft.ReactNative/Views/ShadowNodeBase.cpp +11 -0
  456. package/Microsoft.ReactNative/Views/ShadowNodeBase.h +3 -4
  457. package/Microsoft.ReactNative/Views/TextInputViewManager.cpp +0 -6
  458. package/Microsoft.ReactNative/Views/TextViewManager.cpp +0 -11
  459. package/Microsoft.ReactNative/Views/TouchEventHandler.cpp +1 -1
  460. package/Microsoft.ReactNative/Views/UnimplementedViewManager.cpp +79 -0
  461. package/Microsoft.ReactNative/Views/UnimplementedViewManager.h +27 -0
  462. package/Microsoft.ReactNative/Views/ViewManagerBase.cpp +46 -0
  463. package/Microsoft.ReactNative/Views/ViewManagerBase.h +1 -1
  464. package/Microsoft.ReactNative/Views/cppwinrt/DynamicAutomationPeer.idl +77 -2
  465. package/Microsoft.ReactNative/microsoft.reactnative.def +0 -3
  466. package/Microsoft.ReactNative/packages.lock.json +9 -6
  467. package/{Shared/Composition → Microsoft.ReactNative.Cxx}/AutoDraw.h +2 -0
  468. package/{Shared/Composition → Microsoft.ReactNative.Cxx}/CompositionSwitcher.interop.h +4 -10
  469. package/Microsoft.ReactNative.Cxx/CppWinRTIncludes.h +0 -5
  470. package/Microsoft.ReactNative.Cxx/DesktopWindowBridge.h +5 -0
  471. package/Microsoft.ReactNative.Cxx/JSI/JsiAbiApi.cpp +19 -10
  472. package/Microsoft.ReactNative.Cxx/JSI/JsiAbiApi.h +2 -0
  473. package/Microsoft.ReactNative.Cxx/JSValueComposition.h +22 -0
  474. package/Microsoft.ReactNative.Cxx/JSValueReader.h +19 -0
  475. package/Microsoft.ReactNative.Cxx/JSValueXaml.h +1 -1
  476. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +6 -4
  477. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems.filters +0 -1
  478. package/Microsoft.ReactNative.Cxx/NativeModules.h +15 -15
  479. package/Microsoft.ReactNative.Cxx/TurboModuleProvider.cpp +1 -1
  480. package/Microsoft.ReactNative.Managed/ReactSettingsSnapshot.cs +2 -0
  481. package/Microsoft.ReactNative.Managed/packages.lock.json +6 -3
  482. package/Microsoft.ReactNative.Managed.CodeGen/Microsoft.ReactNative.Managed.CodeGen.csproj +0 -1
  483. package/Mso/future/details/executor.h +1 -1
  484. package/Mso/src/debugAssertApi/debugAssertApi.cpp +1 -1
  485. package/PropertySheets/External/Microsoft.ReactNative.Composition.Common.props +8 -0
  486. package/PropertySheets/External/Microsoft.ReactNative.Composition.CppLib.props +24 -0
  487. package/PropertySheets/External/Microsoft.ReactNative.Composition.CppLib.targets +20 -0
  488. package/PropertySheets/External/Microsoft.ReactNative.Cpp.Dependencies.props +1 -1
  489. package/PropertySheets/External/Microsoft.ReactNative.WindowsSdk.Default.props +2 -0
  490. package/PropertySheets/Generated/PackageVersion.g.props +4 -4
  491. package/PropertySheets/JSEngine.props +0 -8
  492. package/PropertySheets/React.Cpp.props +14 -3
  493. package/PropertySheets/ReactCommunity.cpp.props +2 -2
  494. package/PropertySheets/Release.props +0 -1
  495. package/PropertySheets/WinUI.props +21 -1
  496. package/PropertySheets/x64.props +3 -0
  497. package/PropertySheets/x86.props +3 -0
  498. package/ReactCommon/ReactCommon.vcxproj +13 -8
  499. package/ReactCommon/ReactCommon.vcxproj.filters +12 -1
  500. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +114 -19
  501. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.cpp +66 -0
  502. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleBinding.cpp +114 -52
  503. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleUtils.h +13 -15
  504. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/scrollview/ScrollViewProps.cpp +535 -0
  505. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/ReactInstance.cpp +437 -0
  506. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/utils/jsi-utils.cpp +39 -0
  507. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/utils/jsi-utils.h +31 -0
  508. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/YGEnums.h +19 -24
  509. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/algorithm/CalculateLayout.cpp +600 -980
  510. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/enums/ExperimentalFeature.h +5 -11
  511. package/ReactCommon/cgmanifest.json +1 -1
  512. package/Scripts/EnableInternalWinAppSDKFeed.ps1 +21 -0
  513. package/Scripts/IntegrationTests.ps1 +26 -15
  514. package/Scripts/Microsoft.ReactNative.targets +0 -6
  515. package/Scripts/OfficeReact.Win32.nuspec +1 -2
  516. package/Scripts/TestServers.ps1 +2 -28
  517. package/Scripts/Tfs/Start-TestServers.ps1 +1 -21
  518. package/Scripts/Tfs/Stop-TestServers.ps1 +0 -5
  519. package/Scripts/rnw-dependencies.ps1 +38 -67
  520. package/Shared/CreateInstance.h +25 -0
  521. package/Shared/DevServerHelper.h +0 -3
  522. package/Shared/DevSettings.h +9 -0
  523. package/Shared/HermesRuntimeHolder.cpp +17 -0
  524. package/Shared/HermesRuntimeHolder.h +17 -0
  525. package/Shared/HermesSamplingProfiler.cpp +12 -10
  526. package/Shared/HermesSamplingProfiler.h +5 -4
  527. package/Shared/IDevSupportManager.h +4 -2
  528. package/Shared/InstanceManager.cpp +13 -11
  529. package/Shared/InstanceManager.h +8 -18
  530. package/Shared/JSI/ChakraRuntime.cpp +66 -9
  531. package/Shared/JSI/ChakraRuntime.h +8 -0
  532. package/Shared/JSI/JSExecutorFactoryDelegate.h +12 -0
  533. package/Shared/JSI/JSExecutorFactorySettings.cpp +30 -0
  534. package/Shared/JSI/JSExecutorFactorySettings.h +21 -0
  535. package/Shared/Modules/BlobModule.h +1 -1
  536. package/Shared/Modules/FileReaderModule.h +1 -1
  537. package/Shared/Modules/HttpModule.h +1 -1
  538. package/Shared/Modules/WebSocketTurboModule.h +1 -1
  539. package/Shared/OInstance.cpp +212 -165
  540. package/Shared/OInstance.h +19 -0
  541. package/Shared/Shared.vcxitems +134 -50
  542. package/Shared/Shared.vcxitems.filters +81 -24
  543. package/Shared/Utils.cpp +12 -10
  544. package/Shared/Utils.h +2 -2
  545. package/Shared/WebSocketJSExecutorFactory.h +1 -0
  546. package/codegen/NativeBugReportingSpec.g.h +0 -6
  547. package/codegen/NativeFrameRateLoggerSpec.g.h +0 -2
  548. package/codegen/NativeImageLoaderAndroidSpec.g.h +10 -23
  549. package/codegen/NativePerformanceObserverSpec.g.h +6 -0
  550. package/codegen/NativePlatformConstantsIOSSpec.g.h +2 -0
  551. package/codegen/NativePlatformConstantsWinSpec.g.h +17 -0
  552. package/codegen/NativePushNotificationManagerIOSSpec.g.h +8 -6
  553. package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +88 -0
  554. package/codegen/NativeUIManagerSpec.g.h +83 -95
  555. package/codegen/react/components/rnwcore/ComponentDescriptors.h +9 -7
  556. package/codegen/react/components/rnwcore/EventEmitters.cpp +35 -56
  557. package/codegen/react/components/rnwcore/EventEmitters.h +58 -85
  558. package/codegen/react/components/rnwcore/Props.cpp +53 -95
  559. package/codegen/react/components/rnwcore/Props.h +188 -239
  560. package/codegen/react/components/rnwcore/ShadowNodes.cpp +5 -7
  561. package/codegen/react/components/rnwcore/ShadowNodes.h +27 -29
  562. package/codegen/react/components/rnwcore/States.cpp +3 -5
  563. package/codegen/react/components/rnwcore/States.h +17 -19
  564. package/codegen/rnwcoreJSI-generated.cpp +1442 -1398
  565. package/codegen/rnwcoreJSI.h +6066 -3593
  566. package/index.js +61 -99
  567. package/index.windows.js +60 -102
  568. package/jest/assetFileTransformer.js +1 -1
  569. package/jest/local-setup.js +0 -5
  570. package/jest/mockModal.js +2 -1
  571. package/jest/mockScrollView.js +1 -2
  572. package/jest/renderer.js +1 -1
  573. package/jest/setup.js +6 -3
  574. package/just-task.js +1 -1
  575. package/package.json +31 -29
  576. package/{Libraries/Core → src/private/core}/setUpDOM.js +2 -2
  577. package/src/private/featureflags/NativeReactNativeFeatureFlags.js +42 -0
  578. package/src/private/featureflags/ReactNativeFeatureFlags.js +140 -0
  579. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +84 -0
  580. package/src/private/featureflags/__tests__/ReactNativeFeatureFlags-test.js +92 -0
  581. package/src/private/specs/components/ActivityIndicatorViewNativeComponent.js +53 -0
  582. package/src/private/specs/components/AndroidDrawerLayoutNativeComponent.js +124 -0
  583. package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +26 -0
  584. package/src/private/specs/components/AndroidSwipeRefreshLayoutNativeComponent.js +74 -0
  585. package/src/private/specs/components/AndroidSwitchNativeComponent.js +62 -0
  586. package/src/private/specs/components/DebuggingOverlayNativeComponent.js +61 -0
  587. package/src/private/specs/components/ProgressBarAndroidNativeComponent.js +36 -0
  588. package/src/private/specs/components/PullToRefreshViewNativeComponent.js +71 -0
  589. package/src/private/specs/components/RCTInputAccessoryViewNativeComponent.js +26 -0
  590. package/src/private/specs/components/RCTModalHostViewNativeComponent.js +139 -0
  591. package/src/private/specs/components/RCTSafeAreaViewNativeComponent.js +25 -0
  592. package/src/private/specs/components/SwitchNativeComponent.js +61 -0
  593. package/src/private/specs/components/UnimplementedNativeViewNativeComponent.js +26 -0
  594. package/src/private/specs/modules/NativeAccessibilityInfo.js +33 -0
  595. package/src/private/specs/modules/NativeAccessibilityManager.js +66 -0
  596. package/src/private/specs/modules/NativeActionSheetManager.js +54 -0
  597. package/src/private/specs/modules/NativeAlertManager.js +35 -0
  598. package/src/private/specs/modules/NativeAnimatedModule.js +77 -0
  599. package/src/private/specs/modules/NativeAnimatedTurboModule.js +78 -0
  600. package/src/private/specs/modules/NativeAnimationsDebugModule.js +20 -0
  601. package/src/private/specs/modules/NativeAppState.js +33 -0
  602. package/src/private/specs/modules/NativeAppTheme.js +33 -0
  603. package/src/private/specs/modules/NativeAppearance.js +36 -0
  604. package/src/private/specs/modules/NativeBlobModule.js +59 -0
  605. package/src/private/specs/modules/NativeBugReporting.js +20 -0
  606. package/src/private/specs/modules/NativeClipboard.js +21 -0
  607. package/src/private/specs/modules/NativeDevLoadingView.js +24 -0
  608. package/src/private/specs/modules/NativeDevMenu.js +23 -0
  609. package/src/private/specs/modules/NativeDevSettings.js +33 -0
  610. package/src/private/specs/modules/NativeDevToolsSettingsManager.js +24 -0
  611. package/src/private/specs/modules/NativeDeviceEventManager.js +19 -0
  612. package/src/private/specs/modules/NativeDeviceInfo.js +58 -0
  613. package/src/private/specs/modules/NativeDialogManagerAndroid.js +48 -0
  614. package/{Libraries/Alert → src/private/specs/modules}/NativeDialogManagerWindows.js +5 -4
  615. package/src/private/specs/modules/NativeExceptionsManager.js +103 -0
  616. package/src/private/specs/modules/NativeFileReaderModule.js +22 -0
  617. package/src/private/specs/modules/NativeFrameRateLogger.js +22 -0
  618. package/src/private/specs/modules/NativeHeadlessJsTaskSupport.js +20 -0
  619. package/src/private/specs/modules/NativeI18nManager.js +28 -0
  620. package/src/private/specs/modules/NativeImageEditor.js +52 -0
  621. package/src/private/specs/modules/NativeImageLoaderAndroid.js +30 -0
  622. package/src/private/specs/modules/NativeImageLoaderIOS.js +37 -0
  623. package/src/private/specs/modules/NativeImageStoreAndroid.js +26 -0
  624. package/src/private/specs/modules/NativeImageStoreIOS.js +33 -0
  625. package/src/private/specs/modules/NativeIntentAndroid.js +30 -0
  626. package/src/private/specs/modules/NativeIntersectionObserver.js +41 -0
  627. package/src/private/specs/modules/NativeJSCHeapCapture.js +19 -0
  628. package/src/private/specs/modules/NativeJSCSamplingProfiler.js +19 -0
  629. package/src/private/specs/modules/NativeKeyboardObserver.js +20 -0
  630. package/src/private/specs/modules/NativeLinkingManager.js +27 -0
  631. package/src/private/specs/modules/NativeLogBox.js +20 -0
  632. package/src/private/specs/modules/NativeModalManager.js +21 -0
  633. package/src/private/specs/modules/NativeMutationObserver.js +58 -0
  634. package/src/private/specs/modules/NativeNetworkingAndroid.js +37 -0
  635. package/src/private/specs/modules/NativeNetworkingIOS.js +37 -0
  636. package/src/private/specs/modules/NativePermissionsAndroid.js +77 -0
  637. package/src/private/specs/modules/NativePlatformConstantsAndroid.js +44 -0
  638. package/src/private/specs/modules/NativePlatformConstantsIOS.js +37 -0
  639. package/src/private/specs/modules/NativePlatformConstantsWin.js +38 -0
  640. package/src/private/specs/modules/NativePushNotificationManagerIOS.js +107 -0
  641. package/src/private/specs/modules/NativeRedBox.js +20 -0
  642. package/src/private/specs/modules/NativeSampleTurboModule.js +53 -0
  643. package/src/private/specs/modules/NativeSegmentFetcher.js +28 -0
  644. package/src/private/specs/modules/NativeSettingsManager.js +25 -0
  645. package/src/private/specs/modules/NativeShareModule.js +23 -0
  646. package/src/private/specs/modules/NativeSoundManager.js +22 -0
  647. package/src/private/specs/modules/NativeSourceCode.js +36 -0
  648. package/src/private/specs/modules/NativeStatusBarManagerAndroid.js +68 -0
  649. package/src/private/specs/modules/NativeStatusBarManagerIOS.js +89 -0
  650. package/src/private/specs/modules/NativeTiming.js +26 -0
  651. package/src/private/specs/modules/NativeToastAndroid.js +38 -0
  652. package/src/private/specs/modules/NativeUIManager.js +118 -0
  653. package/src/private/specs/modules/NativeVibration.js +24 -0
  654. package/src/private/specs/modules/NativeWebSocketModule.js +34 -0
  655. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReactNativeElement.js +6 -6
  656. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyCharacterData.js +2 -2
  657. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyElement.js +5 -5
  658. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyNode.js +19 -10
  659. package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/DOMRectList.js +1 -1
  660. package/src/private/webapis/dom/oldstylecollections/__tests__/DOMRectList-test.js +85 -0
  661. package/src/private/webapis/dom/oldstylecollections/__tests__/HTMLCollection-test.js +80 -0
  662. package/src/private/webapis/dom/oldstylecollections/__tests__/NodeList-test.js +161 -0
  663. package/{Libraries/WebPerformance → src/private/webapis/performance}/NativePerformance.js +2 -2
  664. package/{Libraries/WebPerformance → src/private/webapis/performance}/NativePerformanceObserver.js +3 -2
  665. package/{Libraries/WebPerformance → src/private/webapis/performance}/Performance.js +2 -2
  666. package/{Libraries/WebPerformance → src/private/webapis/performance}/PerformanceEventTiming.js +1 -1
  667. package/{Libraries/WebPerformance → src/private/webapis/performance}/PerformanceObserver.js +21 -2
  668. package/{Libraries/WebPerformance → src/private/webapis/performance}/RawPerformanceEntry.js +1 -1
  669. package/{Libraries/WebPerformance → src/private/webapis/performance}/__mocks__/NativePerformanceObserver.js +9 -0
  670. package/src/private/webapis/performance/__tests__/EventCounts-test.js +116 -0
  671. package/src/private/webapis/performance/__tests__/NativePerformanceMock-test.js +82 -0
  672. package/src/private/webapis/performance/__tests__/NativePerformanceObserverMock-test.js +108 -0
  673. package/src/private/webapis/performance/__tests__/Performance-test.js +117 -0
  674. package/src/private/webapis/performance/__tests__/PerformanceObserver-test.js +208 -0
  675. package/template/cpp-app/src/App.cpp +2 -2
  676. package/template/cs-app/src/App.xaml.cs +2 -2
  677. package/templates/cpp-app/jest.config.windows.js +3 -0
  678. package/templates/cpp-app/metro.config.js +0 -2
  679. package/templates/cpp-app/template.config.js +24 -9
  680. package/templates/cpp-app/windows/ExperimentalFeatures.props +1 -1
  681. package/templates/cpp-app/windows/MyApp/AutolinkedNativeModules.g.cpp +13 -0
  682. package/templates/cpp-app/windows/MyApp/AutolinkedNativeModules.g.h +10 -0
  683. package/templates/cpp-app/windows/MyApp/MyApp.cpp +134 -249
  684. package/templates/cpp-app/windows/MyApp/MyApp.vcxproj +12 -11
  685. package/templates/cpp-app/windows/MyApp/MyApp.vcxproj.filters +6 -3
  686. package/templates/cpp-app/windows/MyApp/pch.h +12 -9
  687. package/templates/cpp-app/windows/MyApp/resource.h +0 -1
  688. package/templates/cpp-app/windows/MyApp.sln +26 -26
  689. package/templates/cpp-lib/example/metro.config.js +74 -0
  690. package/templates/cpp-lib/template.config.js +235 -0
  691. package/templates/cpp-lib/windows/ExperimentalFeatures.props +11 -0
  692. package/templates/cpp-lib/windows/MyLib/MyLib.cpp +18 -0
  693. package/templates/cpp-lib/windows/MyLib/MyLib.def +3 -0
  694. package/templates/cpp-lib/windows/MyLib/MyLib.h +31 -0
  695. package/templates/cpp-lib/windows/MyLib/MyLib.rc +0 -0
  696. package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj +148 -0
  697. package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj.filters +44 -0
  698. package/templates/cpp-lib/windows/MyLib/ReactPackageProvider.cpp +20 -0
  699. package/templates/cpp-lib/windows/MyLib/ReactPackageProvider.h +24 -0
  700. package/templates/cpp-lib/windows/MyLib/ReactPackageProvider.idl +9 -0
  701. package/templates/cpp-lib/windows/MyLib/pch.cpp +1 -0
  702. package/templates/cpp-lib/windows/MyLib/pch.h +30 -0
  703. package/templates/cpp-lib/windows/MyLib/resource.h +5 -0
  704. package/templates/cpp-lib/windows/MyLib/targetver.h +8 -0
  705. package/templates/cpp-lib/windows/MyLib.sln +156 -0
  706. package/templates/cpp-lib/windows/_gitignore +41 -0
  707. package/templates/templateUtils.js +137 -0
  708. package/types/index.d.ts +1 -0
  709. package/types/modules/globals.d.ts +1 -0
  710. package/Folly/TEMP_UntilFollyUpdate/hash/Hash.h +0 -1016
  711. package/Libraries/Components/Button.flow.js +0 -265
  712. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.windows.js +0 -8
  713. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.windows.js +0 -14
  714. package/Libraries/Components/SafeAreaView/SafeAreaView.windows.js +0 -34
  715. package/Libraries/Components/ScrollView/ScrollView.windows.js +0 -1941
  716. package/Libraries/Components/ScrollView/ScrollViewViewConfig.js +0 -85
  717. package/Libraries/Components/ToastAndroid/ToastAndroid.windows.js +0 -45
  718. package/Libraries/Components/Touchable/Touchable.flow.js +0 -284
  719. package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlay.js +0 -189
  720. package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlayNativeComponent.js +0 -43
  721. package/Libraries/Image/Image.flow.js +0 -64
  722. package/Libraries/Inspector/DevtoolsOverlay.js +0 -223
  723. package/Libraries/Performance/QuickPerformanceLogger.js +0 -142
  724. package/Libraries/Settings/Settings.windows.js +0 -28
  725. package/Microsoft.ReactNative/CoreApp.cpp +0 -303
  726. package/Microsoft.ReactNative/CoreAppPage.cpp +0 -21
  727. package/Microsoft.ReactNative/CoreAppPage.idl +0 -12
  728. package/Microsoft.ReactNative/CoreAppPage.xaml +0 -14
  729. package/Microsoft.ReactNative/Fabric/Composition/AbiCompositionViewComponentView.cpp +0 -197
  730. package/Microsoft.ReactNative/Fabric/Composition/AbiCompositionViewComponentView.h +0 -84
  731. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rnwcore/EventEmitters.h +0 -5
  732. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rnwcore/Props.h +0 -5
  733. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rnwcore/ShadowNodes.h +0 -5
  734. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rnwcore/States.h +0 -5
  735. package/Microsoft.ReactNative/Fabric/platform/react/renderer/core/graphicsConversions.h +0 -245
  736. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/Color.h +0 -134
  737. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/conversions.h +0 -27
  738. package/Microsoft.ReactNative/Modules/TimingModule.cpp +0 -229
  739. package/Microsoft.ReactNative/Modules/TimingModule.h +0 -88
  740. package/Microsoft.ReactNative.Cxx/CoreApp.h +0 -60
  741. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/LongLivedObject.cpp +0 -60
  742. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/LongLivedObject.h +0 -60
  743. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleBinding.h +0 -63
  744. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/YogaLayoutableShadowNode.cpp +0 -1038
  745. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/YogaStylableProps.cpp +0 -503
  746. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/conversions.h +0 -895
  747. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/mapbuffer/MapBufferBuilder.cpp +0 -182
  748. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/mounting/ShadowTree.cpp +0 -543
  749. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/uimanager/UIManagerBinding.cpp +0 -1505
  750. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/bits/NumericBitfield.h +0 -67
  751. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/config/Config.h +0 -93
  752. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/node/LayoutResults.h +0 -88
  753. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/node/Node.cpp +0 -606
  754. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/node/Node.h +0 -344
  755. package/ReactCommon/Yoga.cpp +0 -961
  756. /package/{Libraries/DOM/Geometry → src/private/webapis/dom/geometry}/DOMRect.js +0 -0
  757. /package/{Libraries/DOM/Geometry → src/private/webapis/dom/geometry}/DOMRectReadOnly.js +0 -0
  758. /package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyText.js +0 -0
  759. /package/{Libraries/DOM/Nodes/Utilities → src/private/webapis/dom/nodes/utilities}/Traversal.js +0 -0
  760. /package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/ArrayLikeUtils.js +0 -0
  761. /package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/HTMLCollection.js +0 -0
  762. /package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/NodeList.js +0 -0
  763. /package/{Libraries/WebPerformance → src/private/webapis/performance}/EventCounts.js +0 -0
  764. /package/{Libraries/WebPerformance → src/private/webapis/performance}/MemoryInfo.js +0 -0
  765. /package/{Libraries/WebPerformance → src/private/webapis/performance}/PerformanceEntry.js +0 -0
  766. /package/{Libraries/WebPerformance → src/private/webapis/performance}/ReactNativeStartupTiming.js +0 -0
  767. /package/{Libraries/WebPerformance → src/private/webapis/performance}/__mocks__/NativePerformance.js +0 -0
@@ -1,8 +1,8 @@
1
1
 
2
2
  #include "pch.h"
3
3
  #include "CompositionContextHelper.h"
4
- #if __has_include("Composition.WindowsCompositionContextHelper.g.cpp")
5
- #include "Composition.WindowsCompositionContextHelper.g.cpp"
4
+ #if __has_include("Composition.SystemCompositionContextHelper.g.cpp")
5
+ #include "Composition.SystemCompositionContextHelper.g.cpp"
6
6
  #endif
7
7
  #ifdef USE_WINUI3
8
8
  #if __has_include("Composition.MicrosoftCompositionContextHelper.g.cpp")
@@ -37,16 +37,26 @@ struct CompositionTypeTraits<WindowsTypeTag> {
37
37
  using CompositionAnimation = winrt::Windows::UI::Composition::CompositionAnimation;
38
38
  using CompositionBackfaceVisibility = winrt::Windows::UI::Composition::CompositionBackfaceVisibility;
39
39
  using CompositionBrush = winrt::Windows::UI::Composition::CompositionBrush;
40
+ using CompositionColorBrush = winrt::Windows::UI::Composition::CompositionColorBrush;
41
+ using CompositionContainerShape = winrt::Windows::UI::Composition::CompositionContainerShape;
40
42
  using CompositionDrawingSurface = winrt::Windows::UI::Composition::CompositionDrawingSurface;
43
+ using CompositionEasingFunction = winrt::Windows::UI::Composition::CompositionEasingFunction;
41
44
  using CompositionEllipseGeometry = winrt::Windows::UI::Composition::CompositionEllipseGeometry;
45
+ using CompositionGeometry = winrt::Windows::UI::Composition::CompositionGeometry;
46
+ using CompositionRoundedRectangleGeometry = winrt::Windows::UI::Composition::CompositionRoundedRectangleGeometry;
42
47
  using CompositionNineGridBrush = winrt::Windows::UI::Composition::CompositionNineGridBrush;
48
+ using CompositionObject = winrt::Windows::UI::Composition::CompositionObject;
43
49
  using CompositionPath = winrt::Windows::UI::Composition::CompositionPath;
50
+ using CompositionPropertySet = winrt::Windows::UI::Composition::CompositionPropertySet;
44
51
  using CompositionSpriteShape = winrt::Windows::UI::Composition::CompositionSpriteShape;
45
52
  using CompositionStretch = winrt::Windows::UI::Composition::CompositionStretch;
53
+ using CompositionStrokeCap = winrt::Windows::UI::Composition::CompositionStrokeCap;
46
54
  using CompositionSurfaceBrush = winrt::Windows::UI::Composition::CompositionSurfaceBrush;
47
55
  using Compositor = winrt::Windows::UI::Composition::Compositor;
48
56
  using ContainerVisual = winrt::Windows::UI::Composition::ContainerVisual;
57
+ using CubicBezierEasingFunction = winrt::Windows::UI::Composition::CubicBezierEasingFunction;
49
58
  using DropShadow = winrt::Windows::UI::Composition::DropShadow;
59
+ using ExpressionAnimation = winrt::Windows::UI::Composition::ExpressionAnimation;
50
60
  using ICompositionSurface = winrt::Windows::UI::Composition::ICompositionSurface;
51
61
  using IInteractionTrackerOwner = winrt::Windows::UI::Composition::Interactions::IInteractionTrackerOwner;
52
62
  using InteractionSourceMode = winrt::Windows::UI::Composition::Interactions::InteractionSourceMode;
@@ -66,6 +76,7 @@ struct CompositionTypeTraits<WindowsTypeTag> {
66
76
  using ScalarKeyFrameAnimation = winrt::Windows::UI::Composition::ScalarKeyFrameAnimation;
67
77
  using ShapeVisual = winrt::Windows::UI::Composition::ShapeVisual;
68
78
  using SpriteVisual = winrt::Windows::UI::Composition::SpriteVisual;
79
+ using StepEasingFunction = winrt::Windows::UI::Composition::StepEasingFunction;
69
80
  using Visual = winrt::Windows::UI::Composition::Visual;
70
81
  using VisualInteractionSource = winrt::Windows::UI::Composition::Interactions::VisualInteractionSource;
71
82
  using VisualInteractionSourceRedirectionMode =
@@ -80,7 +91,7 @@ struct CompositionTypeTraits<WindowsTypeTag> {
80
91
  using IInnerCompositionVisual = IWindowsCompositionVisual;
81
92
  using IInnerCompositionBrush = IWindowsCompositionBrush;
82
93
  using IInnerCompositionDrawingSurface = IWindowsCompositionDrawingSurfaceInner;
83
- using CompositionContextHelper = winrt::Microsoft::ReactNative::Composition::WindowsCompositionContextHelper;
94
+ using CompositionContextHelper = winrt::Microsoft::ReactNative::Composition::SystemCompositionContextHelper;
84
95
  };
85
96
  using WindowsTypeRedirects = CompositionTypeTraits<WindowsTypeTag>;
86
97
 
@@ -94,16 +105,26 @@ struct CompositionTypeTraits<MicrosoftTypeTag> {
94
105
  using CompositionAnimation = winrt::Microsoft::UI::Composition::CompositionAnimation;
95
106
  using CompositionBackfaceVisibility = winrt::Microsoft::UI::Composition::CompositionBackfaceVisibility;
96
107
  using CompositionBrush = winrt::Microsoft::UI::Composition::CompositionBrush;
108
+ using CompositionColorBrush = winrt::Microsoft::UI::Composition::CompositionColorBrush;
109
+ using CompositionContainerShape = winrt::Microsoft::UI::Composition::CompositionContainerShape;
97
110
  using CompositionDrawingSurface = winrt::Microsoft::UI::Composition::CompositionDrawingSurface;
111
+ using CompositionEasingFunction = winrt::Microsoft::UI::Composition::CompositionEasingFunction;
98
112
  using CompositionEllipseGeometry = winrt::Microsoft::UI::Composition::CompositionEllipseGeometry;
113
+ using CompositionGeometry = winrt::Microsoft::UI::Composition::CompositionGeometry;
114
+ using CompositionRoundedRectangleGeometry = winrt::Microsoft::UI::Composition::CompositionRoundedRectangleGeometry;
99
115
  using CompositionNineGridBrush = winrt::Microsoft::UI::Composition::CompositionNineGridBrush;
116
+ using CompositionObject = winrt::Microsoft::UI::Composition::CompositionObject;
100
117
  using CompositionPath = winrt::Microsoft::UI::Composition::CompositionPath;
118
+ using CompositionPropertySet = winrt::Microsoft::UI::Composition::CompositionPropertySet;
101
119
  using CompositionSpriteShape = winrt::Microsoft::UI::Composition::CompositionSpriteShape;
102
120
  using CompositionStretch = winrt::Microsoft::UI::Composition::CompositionStretch;
121
+ using CompositionStrokeCap = winrt::Microsoft::UI::Composition::CompositionStrokeCap;
103
122
  using CompositionSurfaceBrush = winrt::Microsoft::UI::Composition::CompositionSurfaceBrush;
104
123
  using Compositor = winrt::Microsoft::UI::Composition::Compositor;
105
124
  using ContainerVisual = winrt::Microsoft::UI::Composition::ContainerVisual;
125
+ using CubicBezierEasingFunction = winrt::Microsoft::UI::Composition::CubicBezierEasingFunction;
106
126
  using DropShadow = winrt::Microsoft::UI::Composition::DropShadow;
127
+ using ExpressionAnimation = winrt::Microsoft::UI::Composition::ExpressionAnimation;
107
128
  using ICompositionSurface = winrt::Microsoft::UI::Composition::ICompositionSurface;
108
129
  using IInteractionTrackerOwner = winrt::Microsoft::UI::Composition::Interactions::IInteractionTrackerOwner;
109
130
  using InteractionSourceMode = winrt::Microsoft::UI::Composition::Interactions::InteractionSourceMode;
@@ -123,6 +144,7 @@ struct CompositionTypeTraits<MicrosoftTypeTag> {
123
144
  using ScalarKeyFrameAnimation = winrt::Microsoft::UI::Composition::ScalarKeyFrameAnimation;
124
145
  using ShapeVisual = winrt::Microsoft::UI::Composition::ShapeVisual;
125
146
  using SpriteVisual = winrt::Microsoft::UI::Composition::SpriteVisual;
147
+ using StepEasingFunction = winrt::Microsoft::UI::Composition::StepEasingFunction;
126
148
  using Visual = winrt::Microsoft::UI::Composition::Visual;
127
149
  using VisualInteractionSource = winrt::Microsoft::UI::Composition::Interactions::VisualInteractionSource;
128
150
  using VisualInteractionSourceRedirectionMode =
@@ -233,6 +255,11 @@ struct CompDrawingSurfaceBrush : public winrt::implements<
233
255
  }
234
256
 
235
257
  HRESULT BeginDraw(ID2D1DeviceContext **deviceContextOut, POINT *offset) noexcept {
258
+ #ifdef DEBUG
259
+ // Drawing to a zero sized surface is a waste of time
260
+ auto size = m_drawingSurfaceInterop.as<typename TTypeRedirects::CompositionDrawingSurface>().Size();
261
+ assert(size.Width != 0 && size.Height != 0);
262
+ #endif
236
263
  return m_drawingSurfaceInterop->BeginDraw(nullptr, __uuidof(ID2D1DeviceContext), (void **)deviceContextOut, offset);
237
264
  }
238
265
 
@@ -288,22 +315,103 @@ using MicrosoftCompDrawingSurfaceBrush = CompDrawingSurfaceBrush<MicrosoftTypeRe
288
315
  #endif
289
316
 
290
317
  template <typename TTypeRedirects>
291
- struct CompVisual : public winrt::implements<
292
- CompVisual<TTypeRedirects>,
293
- winrt::Microsoft::ReactNative::Composition::IVisual,
294
- typename TTypeRedirects::IInnerCompositionVisual,
295
- IVisualInterop> {
296
- CompVisual(typename TTypeRedirects::Visual const &visual) : m_visual(visual) {}
318
+ void SetAnimationClass(
319
+ winrt::Microsoft::ReactNative::Composition::AnimationClass value,
320
+ typename const TTypeRedirects::Visual &visual) {
321
+ constexpr int64_t ScrollBarExpandBeginTime = 400; // ms
322
+ constexpr int64_t ScrollBarExpandDuration = 167; // ms
323
+ constexpr int64_t SwitchDuration = 167; // ms
324
+
325
+ switch (value) {
326
+ case winrt::Microsoft::ReactNative::Composition::AnimationClass::None: {
327
+ visual.ImplicitAnimations(nullptr);
328
+ break;
329
+ }
297
330
 
298
- typename TTypeRedirects::Visual InnerVisual() const noexcept override {
331
+ case winrt::Microsoft::ReactNative::Composition::AnimationClass::SwitchThumb: {
332
+ auto compositor = visual.Compositor();
333
+ auto offsetAnimation = compositor.CreateVector3KeyFrameAnimation();
334
+ offsetAnimation.InsertExpressionKeyFrame(
335
+ 0.0f, L"vector3(this.CurrentValue.X, this.FinalValue.Y, this.FinalValue.Z)");
336
+ offsetAnimation.InsertExpressionKeyFrame(1.0f, L"this.FinalValue");
337
+ offsetAnimation.Target(L"Offset");
338
+ offsetAnimation.Duration(std::chrono::milliseconds(SwitchDuration));
339
+
340
+ auto implicitAnimations = compositor.CreateImplicitAnimationCollection();
341
+ implicitAnimations.Insert(L"Offset", offsetAnimation);
342
+
343
+ visual.ImplicitAnimations(implicitAnimations);
344
+ break;
345
+ }
346
+
347
+ case winrt::Microsoft::ReactNative::Composition::AnimationClass::ScrollBar: {
348
+ auto compositor = visual.Compositor();
349
+
350
+ auto opacityAnimation = compositor.CreateScalarKeyFrameAnimation();
351
+ opacityAnimation.InsertExpressionKeyFrame(0.0f, L"this.StartingValue");
352
+ opacityAnimation.InsertExpressionKeyFrame(1.0f, L"this.FinalValue");
353
+ opacityAnimation.Target(L"Opacity");
354
+ opacityAnimation.DelayTime(std::chrono::milliseconds(ScrollBarExpandBeginTime));
355
+ opacityAnimation.Duration(std::chrono::milliseconds(ScrollBarExpandDuration));
356
+
357
+ auto implicitAnimations = compositor.CreateImplicitAnimationCollection();
358
+ implicitAnimations.Insert(L"Opacity", opacityAnimation);
359
+ visual.ImplicitAnimations(implicitAnimations);
360
+ break;
361
+ }
362
+
363
+ case winrt::Microsoft::ReactNative::Composition::AnimationClass::ScrollBarThumbVertical:
364
+ case winrt::Microsoft::ReactNative::Composition::AnimationClass::ScrollBarThumbHorizontal: {
365
+ auto compositor = visual.Compositor();
366
+ auto offsetAnimation = compositor.CreateVector3KeyFrameAnimation();
367
+ // We cannot just use a DelayTime, since we want changes to the offset in the scrolling dirction to happen
368
+ // immediately, and only delay the offset changes used when hiding/showing the scrollbar
369
+ float delayStartFrameOffset =
370
+ static_cast<float>(ScrollBarExpandBeginTime) / (ScrollBarExpandBeginTime + ScrollBarExpandDuration);
371
+ if (value == winrt::Microsoft::ReactNative::Composition::AnimationClass::ScrollBarThumbVertical) {
372
+ offsetAnimation.InsertExpressionKeyFrame(
373
+ 0.0f, L"vector3(this.CurrentValue.X, this.FinalValue.Y, this.FinalValue.Z)");
374
+ offsetAnimation.InsertExpressionKeyFrame(
375
+ delayStartFrameOffset, L"vector3(this.CurrentValue.X, this.FinalValue.Y, this.FinalValue.Z)");
376
+ } else {
377
+ offsetAnimation.InsertExpressionKeyFrame(
378
+ 0.0f, L"vector3(this.FinalValue.X, this.CurrentValue.Y, this.FinalValue.Z)");
379
+ offsetAnimation.InsertExpressionKeyFrame(
380
+ delayStartFrameOffset, L"vector3(this.FinalValue.X, this.CurrentValue.Y, this.FinalValue.Z)");
381
+ }
382
+ offsetAnimation.InsertExpressionKeyFrame(1.0f, L"this.FinalValue");
383
+ offsetAnimation.Target(L"Offset");
384
+ offsetAnimation.Duration(std::chrono::milliseconds(ScrollBarExpandBeginTime + ScrollBarExpandDuration));
385
+
386
+ auto scaleAnimation = compositor.CreateVector3KeyFrameAnimation();
387
+ scaleAnimation.InsertExpressionKeyFrame(0.0f, L"this.StartingValue");
388
+ scaleAnimation.InsertExpressionKeyFrame(1.0f, L"this.FinalValue");
389
+ scaleAnimation.Target(L"Scale");
390
+ scaleAnimation.DelayTime(std::chrono::milliseconds(ScrollBarExpandBeginTime));
391
+ scaleAnimation.Duration(std::chrono::milliseconds(ScrollBarExpandDuration));
392
+
393
+ auto implicitAnimations = compositor.CreateImplicitAnimationCollection();
394
+ implicitAnimations.Insert(L"Offset", offsetAnimation);
395
+ implicitAnimations.Insert(L"Scale", scaleAnimation);
396
+
397
+ visual.ImplicitAnimations(implicitAnimations);
398
+ }
399
+ }
400
+ }
401
+
402
+ template <typename TTypeRedirects, typename TVisual = typename TTypeRedirects::Visual>
403
+ struct CompVisualImpl {
404
+ CompVisualImpl(typename TVisual const &visual) : m_visual(visual) {}
405
+
406
+ typename TTypeRedirects::Visual InnerVisual() const noexcept {
299
407
  return m_visual;
300
408
  }
301
409
 
302
410
  void InsertAt(const winrt::Microsoft::ReactNative::Composition::IVisual &visual, uint32_t index) noexcept {
303
- auto containerChildren = m_visual.as<typename TTypeRedirects::ContainerVisual>().Children();
411
+ auto containerChildren = InnerVisual().as<typename TTypeRedirects::ContainerVisual>().Children();
304
412
  auto compVisual = TTypeRedirects::CompositionContextHelper::InnerVisual(visual);
305
- if (index == 0 || containerChildren.Count() == 0) {
306
- containerChildren.InsertAtTop(compVisual);
413
+ if (index == 0) {
414
+ containerChildren.InsertAtBottom(compVisual);
307
415
  return;
308
416
  }
309
417
  auto insertAfter = containerChildren.First();
@@ -314,7 +422,7 @@ struct CompVisual : public winrt::implements<
314
422
 
315
423
  void Remove(const winrt::Microsoft::ReactNative::Composition::IVisual &visual) noexcept {
316
424
  auto compVisual = TTypeRedirects::CompositionContextHelper::InnerVisual(visual);
317
- auto containerChildren = m_visual.as<typename TTypeRedirects::ContainerVisual>().Children();
425
+ auto containerChildren = InnerVisual().as<typename TTypeRedirects::ContainerVisual>().Children();
318
426
  containerChildren.Remove(compVisual);
319
427
  }
320
428
 
@@ -380,16 +488,49 @@ struct CompVisual : public winrt::implements<
380
488
  m_visual.RelativeSizeAdjustment(relativeSizeAdjustment);
381
489
  }
382
490
 
383
- winrt::Microsoft::ReactNative::Composition::BackfaceVisibility BackfaceVisibility() {
491
+ winrt::Microsoft::ReactNative::Composition::BackfaceVisibility BackfaceVisibility() const noexcept {
384
492
  return static_cast<winrt::Microsoft::ReactNative::Composition::BackfaceVisibility>(m_visual.BackfaceVisibility());
385
493
  }
386
494
 
387
- void BackfaceVisibility(winrt::Microsoft::ReactNative::Composition::BackfaceVisibility value) {
495
+ void BackfaceVisibility(winrt::Microsoft::ReactNative::Composition::BackfaceVisibility value) noexcept {
388
496
  m_visual.BackfaceVisibility(static_cast<typename TTypeRedirects::CompositionBackfaceVisibility>(value));
389
497
  }
390
498
 
391
- private:
392
- typename TTypeRedirects::Visual m_visual;
499
+ winrt::hstring Comment() const noexcept {
500
+ return m_visual.Comment();
501
+ }
502
+
503
+ void Comment(winrt::hstring value) noexcept {
504
+ m_visual.Comment(value);
505
+ }
506
+
507
+ void AnimationClass(winrt::Microsoft::ReactNative::Composition::AnimationClass value) noexcept {
508
+ SetAnimationClass<TTypeRedirects>(value, m_visual);
509
+ }
510
+
511
+ protected:
512
+ TVisual m_visual;
513
+ };
514
+
515
+ template <typename TTypeRedirects>
516
+ struct CompVisual : public winrt::implements<
517
+ CompVisual<TTypeRedirects>,
518
+ winrt::Microsoft::ReactNative::Composition::IVisual,
519
+ typename TTypeRedirects::IInnerCompositionVisual,
520
+ IVisualInterop>,
521
+ CompVisualImpl<TTypeRedirects> {
522
+ using Super = CompVisualImpl<TTypeRedirects>;
523
+ CompVisual(typename TTypeRedirects::Visual const &visual) : CompVisualImpl<TTypeRedirects>(visual) {}
524
+
525
+ // IInnerCompositionVisual
526
+ typename TTypeRedirects::Visual InnerVisual() const noexcept override {
527
+ return Super::m_visual;
528
+ }
529
+
530
+ // IVisualInterop
531
+ void SetClippingPath(ID2D1Geometry *clippingPath) noexcept override {
532
+ Super::SetClippingPath(clippingPath);
533
+ }
393
534
  };
394
535
  using WindowsCompVisual = CompVisual<WindowsTypeRedirects>;
395
536
  #ifdef USE_WINUI3
@@ -402,116 +543,114 @@ struct CompSpriteVisual : winrt::implements<
402
543
  winrt::Microsoft::ReactNative::Composition::ISpriteVisual,
403
544
  winrt::Microsoft::ReactNative::Composition::IVisual,
404
545
  typename TTypeRedirects::IInnerCompositionVisual,
405
- IVisualInterop> {
406
- CompSpriteVisual(typename TTypeRedirects::SpriteVisual const &visual) : m_visual(visual) {}
546
+ IVisualInterop>,
547
+ CompVisualImpl<TTypeRedirects, typename TTypeRedirects::SpriteVisual> {
548
+ using Super = CompVisualImpl<TTypeRedirects, typename TTypeRedirects::SpriteVisual>;
549
+ CompSpriteVisual(typename TTypeRedirects::SpriteVisual const &visual) : Super(visual) {}
407
550
 
551
+ // IInnerCompositionVisual
408
552
  typename TTypeRedirects::Visual InnerVisual() const noexcept override {
409
- return m_visual;
410
- }
411
-
412
- void InsertAt(const winrt::Microsoft::ReactNative::Composition::IVisual &visual, uint32_t index) noexcept {
413
- auto containerChildren = m_visual.Children();
414
- auto compVisual = TTypeRedirects::CompositionContextHelper::InnerVisual(visual);
415
- if (index == 0) {
416
- containerChildren.InsertAtBottom(compVisual);
417
- return;
418
- }
419
- auto insertAfter = containerChildren.First();
420
- for (uint32_t i = 1; i < index; i++)
421
- insertAfter.MoveNext();
422
- containerChildren.InsertAbove(compVisual, insertAfter.Current());
423
- }
424
-
425
- void Remove(const winrt::Microsoft::ReactNative::Composition::IVisual &visual) noexcept {
426
- auto compVisual = TTypeRedirects::CompositionContextHelper::InnerVisual(visual);
427
- auto containerChildren = m_visual.Children();
428
- containerChildren.Remove(compVisual);
553
+ return Super::m_visual;
429
554
  }
430
555
 
431
- winrt::Microsoft::ReactNative::Composition::IVisual GetAt(uint32_t index) noexcept {
432
- auto containerChildren = m_visual.as<typename TTypeRedirects::ContainerVisual>().Children();
433
- auto it = containerChildren.First();
434
- for (uint32_t i = 0; i < index; i++)
435
- it.MoveNext();
436
- return TTypeRedirects::CompositionContextHelper::CreateVisual(it.Current());
556
+ // IVisualInterop
557
+ void SetClippingPath(ID2D1Geometry *clippingPath) noexcept override {
558
+ Super::SetClippingPath(clippingPath);
437
559
  }
438
560
 
439
561
  void Brush(const winrt::Microsoft::ReactNative::Composition::IBrush &brush) noexcept {
440
- m_visual.Brush(TTypeRedirects::CompositionContextHelper::InnerBrush(brush));
441
- }
442
-
443
- void Opacity(float opacity) noexcept {
444
- m_visual.Opacity(opacity);
445
- }
446
-
447
- void Scale(winrt::Windows::Foundation::Numerics::float3 const &scale) noexcept {
448
- m_visual.Scale(scale);
562
+ Super::m_visual.Brush(TTypeRedirects::CompositionContextHelper::InnerBrush(brush));
449
563
  }
450
564
 
451
- void TransformMatrix(winrt::Windows::Foundation::Numerics::float4x4 const &transform) noexcept {
452
- m_visual.TransformMatrix(transform);
565
+ void Shadow(const winrt::Microsoft::ReactNative::Composition::IDropShadow &shadow) noexcept {
566
+ Super::m_visual.Shadow(TTypeRedirects::CompositionContextHelper::InnerDropShadow(shadow));
453
567
  }
568
+ };
569
+ using WindowsCompSpriteVisual = CompSpriteVisual<WindowsTypeRedirects>;
570
+ #ifdef USE_WINUI3
571
+ using MicrosoftCompSpriteVisual = CompSpriteVisual<MicrosoftTypeRedirects>;
572
+ #endif
454
573
 
455
- void RotationAngle(float rotation) noexcept {
456
- m_visual.RotationAngle(rotation);
574
+ template <typename TTypeRedirects>
575
+ struct CompRoundedRectangleVisual : winrt::implements<
576
+ CompRoundedRectangleVisual<TTypeRedirects>,
577
+ winrt::Microsoft::ReactNative::Composition::IRoundedRectangleVisual,
578
+ winrt::Microsoft::ReactNative::Composition::IVisual,
579
+ typename TTypeRedirects::IInnerCompositionVisual,
580
+ IVisualInterop>,
581
+ CompVisualImpl<TTypeRedirects> {
582
+ using Super = CompVisualImpl<TTypeRedirects>;
583
+ CompRoundedRectangleVisual(typename TTypeRedirects::ShapeVisual const &visual) : Super(visual) {
584
+ auto compositor = visual.Compositor();
585
+ m_geometry = compositor.CreateRoundedRectangleGeometry();
586
+ m_spriteShape = compositor.CreateSpriteShape();
587
+ m_spriteShape.Geometry(m_geometry);
588
+ visual.Shapes().Append(m_spriteShape);
589
+ }
590
+
591
+ // IInnerCompositionVisual
592
+ typename TTypeRedirects::Visual InnerVisual() const noexcept override {
593
+ return Super::m_visual;
457
594
  }
458
595
 
459
- void IsVisible(bool isVisible) noexcept {
460
- m_visual.IsVisible(isVisible);
596
+ // IVisualInterop
597
+ void SetClippingPath(ID2D1Geometry *clippingPath) noexcept override {
598
+ Super::SetClippingPath(clippingPath);
461
599
  }
462
600
 
463
601
  void Size(winrt::Windows::Foundation::Numerics::float2 const &size) noexcept {
464
- m_visual.Size(size);
602
+ m_size = size;
603
+ Super::m_visual.Size(size);
604
+ updateGeometry();
465
605
  }
466
606
 
467
- void Offset(winrt::Windows::Foundation::Numerics::float3 const &offset) noexcept {
468
- m_visual.Offset(offset);
469
- }
470
-
471
- void Offset(
472
- winrt::Windows::Foundation::Numerics::float3 offset,
473
- winrt::Windows::Foundation::Numerics::float3 relativeAdjustment) noexcept {
474
- m_visual.Offset(offset);
475
- m_visual.RelativeOffsetAdjustment(relativeAdjustment);
607
+ void updateGeometry() {
608
+ m_geometry.Size({m_size.x - (m_strokeThickness * 2), m_size.y - (m_strokeThickness * 2)});
609
+ m_geometry.CornerRadius({m_cornerRadius.x - m_strokeThickness, m_cornerRadius.y - m_strokeThickness});
610
+ m_geometry.Offset({m_strokeThickness, m_strokeThickness});
476
611
  }
477
612
 
478
613
  void RelativeSizeWithOffset(
479
614
  winrt::Windows::Foundation::Numerics::float2 size,
480
615
  winrt::Windows::Foundation::Numerics::float2 relativeSizeAdjustment) noexcept {
481
- m_visual.Size(size);
482
- m_visual.RelativeSizeAdjustment(relativeSizeAdjustment);
616
+ assert(false); // Does not correctly handle relativeSizeAdjustment - since geometry does not support
617
+ // RelativeSizeAdjustment
618
+ m_size = size;
619
+ Super::m_visual.Size(size);
620
+ updateGeometry();
621
+
622
+ Super::m_visual.RelativeSizeAdjustment(relativeSizeAdjustment);
483
623
  }
484
624
 
485
- winrt::Microsoft::ReactNative::Composition::BackfaceVisibility BackfaceVisibility() {
486
- return static_cast<winrt::Microsoft::ReactNative::Composition::BackfaceVisibility>(m_visual.BackfaceVisibility());
625
+ void Brush(const winrt::Microsoft::ReactNative::Composition::IBrush &brush) noexcept {
626
+ m_spriteShape.FillBrush(TTypeRedirects::CompositionContextHelper::InnerBrush(brush));
487
627
  }
488
628
 
489
- void BackfaceVisibility(winrt::Microsoft::ReactNative::Composition::BackfaceVisibility value) {
490
- m_visual.BackfaceVisibility(static_cast<typename TTypeRedirects::CompositionBackfaceVisibility>(value));
629
+ void CornerRadius(winrt::Windows::Foundation::Numerics::float2 value) noexcept {
630
+ m_cornerRadius = value;
631
+ updateGeometry();
491
632
  }
492
633
 
493
- void SetClippingPath(ID2D1Geometry *clippingPath) noexcept {
494
- if (!clippingPath) {
495
- m_visual.Clip(nullptr);
496
- return;
497
- }
498
- auto geometry = winrt::make<GeometrySource>(clippingPath);
499
- auto path = TTypeRedirects::CompositionPath(geometry);
500
- auto pathgeo = m_visual.Compositor().CreatePathGeometry(path);
501
- auto clip = m_visual.Compositor().CreateGeometricClip(pathgeo);
502
- m_visual.Clip(clip);
634
+ void StrokeBrush(const winrt::Microsoft::ReactNative::Composition::IBrush &brush) noexcept {
635
+ m_spriteShape.StrokeBrush(TTypeRedirects::CompositionContextHelper::InnerBrush(brush));
503
636
  }
504
637
 
505
- void Shadow(const winrt::Microsoft::ReactNative::Composition::IDropShadow &shadow) noexcept {
506
- m_visual.Shadow(TTypeRedirects::CompositionContextHelper::InnerDropShadow(shadow));
638
+ void StrokeThickness(float value) noexcept {
639
+ m_strokeThickness = value;
640
+ m_spriteShape.StrokeThickness(value);
641
+ updateGeometry();
507
642
  }
508
643
 
509
644
  private:
510
- typename TTypeRedirects::SpriteVisual m_visual;
645
+ float m_strokeThickness{0.0f};
646
+ winrt::Windows::Foundation::Numerics::float2 m_cornerRadius{0};
647
+ winrt::Windows::Foundation::Numerics::float2 m_size{0};
648
+ typename TTypeRedirects::CompositionSpriteShape m_spriteShape{nullptr};
649
+ typename TTypeRedirects::CompositionRoundedRectangleGeometry m_geometry{nullptr};
511
650
  };
512
- using WindowsCompSpriteVisual = CompSpriteVisual<WindowsTypeRedirects>;
651
+ using WindowsCompRoundedRectangleVisual = CompRoundedRectangleVisual<WindowsTypeRedirects>;
513
652
  #ifdef USE_WINUI3
514
- using MicrosoftCompSpriteVisual = CompSpriteVisual<MicrosoftTypeRedirects>;
653
+ using MicrosoftCompRoundedRectangleVisual = CompRoundedRectangleVisual<MicrosoftTypeRedirects>;
515
654
  #endif
516
655
 
517
656
  struct CompScrollPositionChangedArgs : winrt::implements<
@@ -519,7 +658,7 @@ struct CompScrollPositionChangedArgs : winrt::implements<
519
658
  winrt::Microsoft::ReactNative::Composition::IScrollPositionChangedArgs> {
520
659
  CompScrollPositionChangedArgs(winrt::Windows::Foundation::Numerics::float2 position) : m_position(position) {}
521
660
 
522
- winrt::Windows::Foundation::Numerics::float2 Position() {
661
+ winrt::Windows::Foundation::Numerics::float2 Position() const noexcept {
523
662
  return m_position;
524
663
  }
525
664
 
@@ -613,8 +752,8 @@ struct CompScrollerVisual : winrt::implements<
613
752
  void InsertAt(const winrt::Microsoft::ReactNative::Composition::IVisual &visual, uint32_t index) noexcept {
614
753
  auto containerChildren = m_contentVisual.Children();
615
754
  auto compVisual = TTypeRedirects::CompositionContextHelper::InnerVisual(visual);
616
- if (index == 0 || containerChildren.Count() == 0) {
617
- containerChildren.InsertAtTop(compVisual);
755
+ if (index == 0) {
756
+ containerChildren.InsertAtBottom(compVisual);
618
757
  return;
619
758
  }
620
759
  auto insertAfter = containerChildren.First();
@@ -693,6 +832,14 @@ struct CompScrollerVisual : winrt::implements<
693
832
  m_visual.BackfaceVisibility(static_cast<typename TTypeRedirects::CompositionBackfaceVisibility>(value));
694
833
  }
695
834
 
835
+ winrt::hstring Comment() const noexcept {
836
+ return m_visual.Comment();
837
+ }
838
+
839
+ void Comment(winrt::hstring value) noexcept {
840
+ m_visual.Comment(value);
841
+ }
842
+
696
843
  void SetClippingPath(ID2D1Geometry *clippingPath) noexcept {
697
844
  if (!clippingPath) {
698
845
  m_visual.Clip(nullptr);
@@ -711,7 +858,7 @@ struct CompScrollerVisual : winrt::implements<
711
858
 
712
859
  winrt::event_token ScrollPositionChanged(
713
860
  winrt::Windows::Foundation::EventHandler<
714
- winrt::Microsoft::ReactNative::Composition::IScrollPositionChangedArgs> const &handler) {
861
+ winrt::Microsoft::ReactNative::Composition::IScrollPositionChangedArgs> const &handler) noexcept {
715
862
  return m_scrollPositionChangedEvent.add(handler);
716
863
  }
717
864
 
@@ -725,7 +872,7 @@ struct CompScrollerVisual : winrt::implements<
725
872
  UpdateMaxPosition();
726
873
  }
727
874
 
728
- winrt::Windows::Foundation::Numerics::float3 ScrollPosition() noexcept {
875
+ winrt::Windows::Foundation::Numerics::float3 ScrollPosition() const noexcept {
729
876
  return m_interactionTracker.Position();
730
877
  }
731
878
 
@@ -734,7 +881,7 @@ struct CompScrollerVisual : winrt::implements<
734
881
  static constexpr int64_t s_offsetsChangeMinMs{50};
735
882
  static constexpr int64_t s_offsetsChangeMaxMs{1000};
736
883
 
737
- typename TTypeRedirects::CompositionAnimation GetPositionAnimation(float x, float y) {
884
+ typename TTypeRedirects::CompositionAnimation GetPositionAnimation(float x, float y) noexcept {
738
885
  const int64_t distance =
739
886
  static_cast<int64_t>(std::sqrt(std::pow(x - m_currentPosition.x, 2.0f) + pow(y - m_currentPosition.y, 2.0f)));
740
887
  auto compositor = m_visual.Compositor();
@@ -780,12 +927,16 @@ struct CompScrollerVisual : winrt::implements<
780
927
  }
781
928
  }
782
929
 
930
+ void AnimationClass(winrt::Microsoft::ReactNative::Composition::AnimationClass value) noexcept {
931
+ SetAnimationClass<TTypeRedirects>(value, m_visual);
932
+ }
933
+
783
934
  private:
784
- void FireScrollPositionChanged(winrt::Windows::Foundation::Numerics::float2 position) {
935
+ void FireScrollPositionChanged(winrt::Windows::Foundation::Numerics::float2 position) noexcept {
785
936
  m_scrollPositionChangedEvent(*this, winrt::make<CompScrollPositionChangedArgs>(position));
786
937
  }
787
938
 
788
- void UpdateMaxPosition() {
939
+ void UpdateMaxPosition() noexcept {
789
940
  m_interactionTracker.MaxPosition(
790
941
  {std::max<float>(m_contentSize.x - m_visualSize.x, 0),
791
942
  std::max<float>(m_contentSize.y - m_visualSize.y, 0),
@@ -818,74 +969,361 @@ struct CompActivityVisual : winrt::implements<
818
969
  winrt::Microsoft::ReactNative::Composition::IVisual,
819
970
  typename TTypeRedirects::IInnerCompositionVisual,
820
971
  IVisualInterop> {
821
- CompActivityVisual(typename TTypeRedirects::SpriteVisual const &visual) : m_visual(visual) {
822
- auto compositor = m_visual.Compositor();
823
- m_contentVisual = compositor.CreateSpriteVisual();
824
-
825
- // Create loading circles
826
- for (int i = 0; i < 4; i++) {
827
- auto loadingCircle = createLoadingCircle(compositor, i * 200);
828
- m_visual.Children().InsertAtTop(loadingCircle);
829
- }
830
- }
831
-
832
- void Color(winrt::Windows::UI::Color color) noexcept {
833
- // Change the color of each SpriteVisual
834
- for (auto &spriteVisual : m_spriteVisuals) {
835
- auto colorBrush = m_visual.Compositor().CreateColorBrush(color);
836
- // Set the new color brush on the SpriteVisual
837
- spriteVisual.FillBrush(colorBrush);
972
+ /************************************************************************************
973
+ * Begin of copy from ProgressRingIndeterminate.cpp which is autogen'd from lottie
974
+ * Changes were made to the namespaces, but otherwise code should be untouched
975
+ ************************************************************************************/
976
+
977
+ static constexpr int64_t c_durationTicks{20000000L};
978
+ typename TTypeRedirects::Compositor const _c{nullptr};
979
+ typename TTypeRedirects::ExpressionAnimation const _reusableExpressionAnimation{nullptr};
980
+ typename TTypeRedirects::CompositionPropertySet const _themeProperties{nullptr};
981
+ typename TTypeRedirects::CompositionColorBrush _themeColor_Foreground_0{nullptr};
982
+ typename TTypeRedirects::CompositionColorBrush _themeColor_Foreground_1{nullptr};
983
+ typename TTypeRedirects::ContainerVisual _root{nullptr};
984
+ typename TTypeRedirects::CubicBezierEasingFunction _cubicBezierEasingFunction_0{nullptr};
985
+ typename TTypeRedirects::ExpressionAnimation _rootProgress{nullptr};
986
+ typename TTypeRedirects::StepEasingFunction _holdThenStepEasingFunction{nullptr};
987
+
988
+ static void StartProgressBoundAnimation(
989
+ typename TTypeRedirects::CompositionObject target,
990
+ winrt::hstring animatedPropertyName,
991
+ typename TTypeRedirects::CompositionAnimation animation,
992
+ typename TTypeRedirects::ExpressionAnimation controllerProgressExpression) {
993
+ target.StartAnimation(animatedPropertyName, animation);
994
+ const auto controller = target.TryGetAnimationController(animatedPropertyName);
995
+ controller.Pause();
996
+ controller.StartAnimation(L"Progress", controllerProgressExpression);
997
+ }
998
+
999
+ void BindProperty(
1000
+ typename TTypeRedirects::CompositionObject target,
1001
+ winrt::hstring animatedPropertyName,
1002
+ winrt::hstring expression,
1003
+ winrt::hstring referenceParameterName,
1004
+ typename TTypeRedirects::CompositionObject referencedObject) {
1005
+ _reusableExpressionAnimation.ClearAllParameters();
1006
+ _reusableExpressionAnimation.Expression(expression);
1007
+ _reusableExpressionAnimation.SetReferenceParameter(referenceParameterName, referencedObject);
1008
+ target.StartAnimation(animatedPropertyName, _reusableExpressionAnimation);
1009
+ }
1010
+
1011
+ void BindProperty2(
1012
+ typename TTypeRedirects::CompositionObject target,
1013
+ winrt::hstring animatedPropertyName,
1014
+ winrt::hstring expression,
1015
+ winrt::hstring referenceParameterName0,
1016
+ typename TTypeRedirects::CompositionObject referencedObject0,
1017
+ winrt::hstring referenceParameterName1,
1018
+ typename TTypeRedirects::CompositionObject referencedObject1) {
1019
+ _reusableExpressionAnimation.ClearAllParameters();
1020
+ _reusableExpressionAnimation.Expression(expression);
1021
+ _reusableExpressionAnimation.SetReferenceParameter(referenceParameterName0, referencedObject0);
1022
+ _reusableExpressionAnimation.SetReferenceParameter(referenceParameterName1, referencedObject1);
1023
+ target.StartAnimation(animatedPropertyName, _reusableExpressionAnimation);
1024
+ }
1025
+
1026
+ typename TTypeRedirects::ScalarKeyFrameAnimation CreateScalarKeyFrameAnimation(
1027
+ float initialProgress,
1028
+ float initialValue,
1029
+ typename TTypeRedirects::CompositionEasingFunction initialEasingFunction) {
1030
+ const auto result = _c.CreateScalarKeyFrameAnimation();
1031
+ result.Duration(winrt::Windows::Foundation::TimeSpan{c_durationTicks});
1032
+ result.InsertKeyFrame(initialProgress, initialValue, initialEasingFunction);
1033
+ return result;
1034
+ }
1035
+
1036
+ typename TTypeRedirects::CompositionSpriteShape CreateSpriteShape(
1037
+ typename TTypeRedirects::CompositionGeometry geometry,
1038
+ winrt::Windows::Foundation::Numerics::float3x2 transformMatrix) {
1039
+ const auto result = _c.CreateSpriteShape(geometry);
1040
+ result.TransformMatrix(transformMatrix);
1041
+ return result;
1042
+ }
1043
+
1044
+ // - Layer aggregator
1045
+ // Scale:5,5, Offset:<40, 40>
1046
+ // Color bound to theme property value: Background
1047
+ typename TTypeRedirects::CompositionColorBrush ThemeColor_Background() {
1048
+ const auto result = _c.CreateColorBrush();
1049
+ BindProperty(
1050
+ result,
1051
+ L"Color",
1052
+ L"ColorRGB(_theme.Background.W*1,_theme.Background.X,_theme.Background.Y,_theme.Background.Z)",
1053
+ L"_theme",
1054
+ _themeProperties);
1055
+ return result;
1056
+ }
1057
+
1058
+ // - - Layer aggregator
1059
+ // - Scale:5,5, Offset:<40, 40>
1060
+ // ShapeGroup: Ellipse B
1061
+ // Color bound to theme property value: Foreground
1062
+ typename TTypeRedirects::CompositionColorBrush ThemeColor_Foreground_0() {
1063
+ const auto result = _themeColor_Foreground_0 = _c.CreateColorBrush();
1064
+ const auto propertySet = result.Properties();
1065
+ propertySet.InsertScalar(L"Opacity0", 0.0F);
1066
+ BindProperty2(
1067
+ result,
1068
+ L"Color",
1069
+ L"ColorRGB(_theme.Foreground.W*my.Opacity0,_theme.Foreground.X,_theme.Foreground.Y,_theme.Foreground.Z)",
1070
+ L"_theme",
1071
+ _themeProperties,
1072
+ L"my",
1073
+ propertySet);
1074
+ StartProgressBoundAnimation(propertySet, L"Opacity0", Opacity0ScalarAnimation_0_to_1(), _rootProgress);
1075
+ return result;
1076
+ }
1077
+
1078
+ // - - Layer aggregator
1079
+ // - Scale:5,5, Offset:<40, 40>
1080
+ // ShapeGroup: Ellipse B
1081
+ // Color bound to theme property value: Foreground
1082
+ typename TTypeRedirects::CompositionColorBrush ThemeColor_Foreground_1() {
1083
+ const auto result = _themeColor_Foreground_1 = _c.CreateColorBrush();
1084
+ const auto propertySet = result.Properties();
1085
+ propertySet.InsertScalar(L"Opacity0", 1.0F);
1086
+ BindProperty2(
1087
+ result,
1088
+ L"Color",
1089
+ L"ColorRGB(_theme.Foreground.W*my.Opacity0,_theme.Foreground.X,_theme.Foreground.Y,_theme.Foreground.Z)",
1090
+ L"_theme",
1091
+ _themeProperties,
1092
+ L"my",
1093
+ propertySet);
1094
+ StartProgressBoundAnimation(propertySet, L"Opacity0", Opacity0ScalarAnimation_1_to_0(), _rootProgress);
1095
+ return result;
1096
+ }
1097
+
1098
+ // Layer aggregator
1099
+ // Transforms for Radial
1100
+ typename TTypeRedirects::CompositionContainerShape ContainerShape() {
1101
+ const auto result = _c.CreateContainerShape();
1102
+ // Offset:<40, 40>, Scale:<5, 5>
1103
+ result.TransformMatrix({5.0F, 0.0F, 0.0F, 5.0F, 40.0F, 40.0F});
1104
+ const auto shapes = result.Shapes();
1105
+ // ShapeGroup: Ellipse B
1106
+ shapes.Append(SpriteShape_1());
1107
+ // ShapeGroup: Ellipse B
1108
+ shapes.Append(SpriteShape_2());
1109
+ StartProgressBoundAnimation(
1110
+ result, L"RotationAngleInDegrees", RotationAngleInDegreesScalarAnimation_0_to_900(), _rootProgress);
1111
+ return result;
1112
+ }
1113
+
1114
+ // - Layer aggregator
1115
+ // Scale:5,5, Offset:<40, 40>
1116
+ // Ellipse Path.EllipseGeometry
1117
+ typename TTypeRedirects::CompositionEllipseGeometry Ellipse_7_0() {
1118
+ const auto result = _c.CreateEllipseGeometry();
1119
+ result.Radius({7.0F, 7.0F});
1120
+ return result;
1121
+ }
1122
+
1123
+ // - - Layer aggregator
1124
+ // - Scale:5,5, Offset:<40, 40>
1125
+ // ShapeGroup: Ellipse B
1126
+ // Ellipse Path.EllipseGeometry
1127
+ typename TTypeRedirects::CompositionEllipseGeometry Ellipse_7_1() {
1128
+ const auto result = _c.CreateEllipseGeometry();
1129
+ result.TrimEnd(0.5F);
1130
+ result.Radius({7.0F, 7.0F});
1131
+ StartProgressBoundAnimation(result, L"TrimStart", TrimStartScalarAnimation_0_to_0p5(), RootProgress());
1132
+ return result;
1133
+ }
1134
+
1135
+ // - - Layer aggregator
1136
+ // - Scale:5,5, Offset:<40, 40>
1137
+ // ShapeGroup: Ellipse B
1138
+ // Ellipse Path.EllipseGeometry
1139
+ typename TTypeRedirects::CompositionEllipseGeometry Ellipse_7_2() {
1140
+ const auto result = _c.CreateEllipseGeometry();
1141
+ result.Radius({7.0F, 7.0F});
1142
+ StartProgressBoundAnimation(result, L"TrimEnd", TrimEndScalarAnimation_0_to_0p5(), _rootProgress);
1143
+ return result;
1144
+ }
1145
+
1146
+ // Layer aggregator
1147
+ // Ellipse Path
1148
+ typename TTypeRedirects::CompositionSpriteShape SpriteShape_0() {
1149
+ // Offset:<40, 40>, Scale:<5, 5>
1150
+ const auto result = CreateSpriteShape(Ellipse_7_0(), {5.0F, 0.0F, 0.0F, 5.0F, 40.0F, 40.0F});
1151
+ result.StrokeBrush(ThemeColor_Background());
1152
+ result.StrokeDashCap(TTypeRedirects::CompositionStrokeCap::Round);
1153
+ result.StrokeThickness(1.5F);
1154
+ return result;
1155
+ }
1156
+
1157
+ // - Layer aggregator
1158
+ // Scale:5,5, Offset:<40, 40>
1159
+ // Ellipse Path
1160
+ typename TTypeRedirects::CompositionSpriteShape SpriteShape_1() {
1161
+ const auto result = _c.CreateSpriteShape(Ellipse_7_1());
1162
+ result.StrokeBrush(ThemeColor_Foreground_0());
1163
+ result.StrokeDashCap(TTypeRedirects::CompositionStrokeCap::Round);
1164
+ result.StrokeStartCap(TTypeRedirects::CompositionStrokeCap::Round);
1165
+ result.StrokeEndCap(TTypeRedirects::CompositionStrokeCap::Round);
1166
+ result.StrokeThickness(1.5F);
1167
+ return result;
1168
+ }
1169
+
1170
+ // - Layer aggregator
1171
+ // Scale:5,5, Offset:<40, 40>
1172
+ // Ellipse Path
1173
+ typename TTypeRedirects::CompositionSpriteShape SpriteShape_2() {
1174
+ const auto result = _c.CreateSpriteShape(Ellipse_7_2());
1175
+ result.StrokeBrush(ThemeColor_Foreground_1());
1176
+ result.StrokeDashCap(TTypeRedirects::CompositionStrokeCap::Round);
1177
+ result.StrokeStartCap(TTypeRedirects::CompositionStrokeCap::Round);
1178
+ result.StrokeEndCap(TTypeRedirects::CompositionStrokeCap::Round);
1179
+ result.StrokeThickness(1.5F);
1180
+ return result;
1181
+ }
1182
+
1183
+ // The root of the composition.
1184
+ typename TTypeRedirects::ContainerVisual Root() {
1185
+ const auto result = _root = _c.CreateContainerVisual();
1186
+ const auto propertySet = result.Properties();
1187
+ propertySet.InsertScalar(L"Progress", 0.0F);
1188
+ // Layer aggregator
1189
+ result.Children().InsertAtTop(ShapeVisual_0());
1190
+ return result;
1191
+ }
1192
+
1193
+ typename TTypeRedirects::CubicBezierEasingFunction CubicBezierEasingFunction_0() {
1194
+ return _cubicBezierEasingFunction_0 =
1195
+ _c.CreateCubicBezierEasingFunction({0.166999996F, 0.166999996F}, {0.833000004F, 0.833000004F});
1196
+ }
1197
+
1198
+ typename TTypeRedirects::ExpressionAnimation RootProgress() {
1199
+ const auto result = _rootProgress = _c.CreateExpressionAnimation(L"_.Progress");
1200
+ result.SetReferenceParameter(L"_", _root);
1201
+ return result;
1202
+ }
1203
+
1204
+ // Opacity0
1205
+ typename TTypeRedirects::ScalarKeyFrameAnimation Opacity0ScalarAnimation_0_to_1() {
1206
+ const auto result = CreateScalarKeyFrameAnimation(0.0F, 0.0F, _holdThenStepEasingFunction);
1207
+ result.InsertKeyFrame(0.5F, 1.0F, _holdThenStepEasingFunction);
1208
+ return result;
1209
+ }
1210
+
1211
+ // Opacity0
1212
+ typename TTypeRedirects::ScalarKeyFrameAnimation Opacity0ScalarAnimation_1_to_0() {
1213
+ const auto result = CreateScalarKeyFrameAnimation(0.0F, 1.0F, _holdThenStepEasingFunction);
1214
+ result.InsertKeyFrame(0.5F, 0.0F, _holdThenStepEasingFunction);
1215
+ return result;
1216
+ }
1217
+
1218
+ // - Layer aggregator
1219
+ // Scale:5,5, Offset:<40, 40>
1220
+ // Rotation
1221
+ typename TTypeRedirects::ScalarKeyFrameAnimation RotationAngleInDegreesScalarAnimation_0_to_900() {
1222
+ const auto result = CreateScalarKeyFrameAnimation(0.0F, 0.0F, _holdThenStepEasingFunction);
1223
+ result.InsertKeyFrame(0.5F, 450.0F, _cubicBezierEasingFunction_0);
1224
+ result.InsertKeyFrame(1.0F, 900.0F, _cubicBezierEasingFunction_0);
1225
+ return result;
1226
+ }
1227
+
1228
+ // - - - Layer aggregator
1229
+ // - - Scale:5,5, Offset:<40, 40>
1230
+ // - ShapeGroup: Ellipse B
1231
+ // Ellipse Path.EllipseGeometry
1232
+ // TrimEnd
1233
+ typename TTypeRedirects::ScalarKeyFrameAnimation TrimEndScalarAnimation_0_to_0p5() {
1234
+ const auto result = CreateScalarKeyFrameAnimation(0.0F, 9.99999975E-05F, _holdThenStepEasingFunction);
1235
+ result.InsertKeyFrame(0.5F, 0.5F, _cubicBezierEasingFunction_0);
1236
+ return result;
1237
+ }
1238
+
1239
+ // - - - Layer aggregator
1240
+ // - - Scale:5,5, Offset:<40, 40>
1241
+ // - ShapeGroup: Ellipse B
1242
+ // Ellipse Path.EllipseGeometry
1243
+ // TrimStart
1244
+ typename TTypeRedirects::ScalarKeyFrameAnimation TrimStartScalarAnimation_0_to_0p5() {
1245
+ const auto result = CreateScalarKeyFrameAnimation(0.0F, 0.0F, StepThenHoldEasingFunction());
1246
+ result.InsertKeyFrame(0.5F, 0.0F, HoldThenStepEasingFunction());
1247
+ result.InsertKeyFrame(1.0F, 0.5F, CubicBezierEasingFunction_0());
1248
+ return result;
1249
+ }
1250
+
1251
+ // Layer aggregator
1252
+ typename TTypeRedirects::ShapeVisual ShapeVisual_0() {
1253
+ const auto result = _c.CreateShapeVisual();
1254
+ result.Size({80.0F, 80.0F});
1255
+ const auto shapes = result.Shapes();
1256
+ // Scale:5,5, Offset:<40, 40>
1257
+ shapes.Append(SpriteShape_0());
1258
+ // Scale:5,5, Offset:<40, 40>
1259
+ shapes.Append(ContainerShape());
1260
+ return result;
1261
+ }
1262
+
1263
+ typename TTypeRedirects::StepEasingFunction HoldThenStepEasingFunction() {
1264
+ const auto result = _holdThenStepEasingFunction = _c.CreateStepEasingFunction();
1265
+ result.IsFinalStepSingleFrame(true);
1266
+ return result;
1267
+ }
1268
+
1269
+ // - - - - Layer aggregator
1270
+ // - - - Scale:5,5, Offset:<40, 40>
1271
+ // - - ShapeGroup: Ellipse B
1272
+ // - Ellipse Path.EllipseGeometry
1273
+ // TrimStart
1274
+ typename TTypeRedirects::StepEasingFunction StepThenHoldEasingFunction() {
1275
+ const auto result = _c.CreateStepEasingFunction();
1276
+ result.IsInitialStepSingleFrame(true);
1277
+ return result;
1278
+ }
1279
+
1280
+ /************************************************************************************
1281
+ * End of copy from ProgressRingIndeterminate.cpp which is autogen'd from lottie
1282
+ ************************************************************************************/
1283
+
1284
+ winrt::Windows::Foundation::Numerics::float4 ColorAsVector4(winrt::Windows::UI::Color color) {
1285
+ return {
1286
+ static_cast<float>(color.R),
1287
+ static_cast<float>(color.G),
1288
+ static_cast<float>(color.B),
1289
+ static_cast<float>(color.A)};
1290
+ }
1291
+
1292
+ CompActivityVisual(typename TTypeRedirects::SpriteVisual const &visual)
1293
+ : m_visual(visual),
1294
+ _c(visual.Compositor()),
1295
+ _reusableExpressionAnimation(_c.CreateExpressionAnimation()),
1296
+ _themeProperties(_c.CreatePropertySet()) {
1297
+ // Default colors
1298
+ _themeProperties.InsertVector4(L"Background", ColorAsVector4({0, 0, 0, 0}));
1299
+ _themeProperties.InsertVector4(L"Foreground", ColorAsVector4({0, 0, 0, 0}));
1300
+
1301
+ visual.Children().InsertAtTop(Root());
1302
+
1303
+ auto easing = _c.CreateLinearEasingFunction();
1304
+ const auto progressAnimation = _c.CreateScalarKeyFrameAnimation();
1305
+ progressAnimation.Duration(winrt::Windows::Foundation::TimeSpan{c_durationTicks});
1306
+ progressAnimation.InsertKeyFrame(0.0f, 0.0f);
1307
+ progressAnimation.InsertKeyFrame(1.0f, 1.0f, easing);
1308
+ progressAnimation.IterationBehavior(TTypeRedirects::AnimationIterationBehavior::Forever);
1309
+
1310
+ _root.Properties().StartAnimation(L"Progress", progressAnimation);
1311
+ _root.StartAnimation(L"Progress", progressAnimation);
1312
+ }
1313
+
1314
+ void Brush(winrt::Microsoft::ReactNative::Composition::IBrush brush) noexcept {
1315
+ auto innerBrush = TTypeRedirects::CompositionContextHelper::InnerBrush(brush);
1316
+ if (brush) {
1317
+ _themeProperties.InsertVector4(
1318
+ L"Foreground", ColorAsVector4(innerBrush.as<TTypeRedirects::CompositionColorBrush>().Color()));
1319
+ } else {
1320
+ _themeProperties.InsertVector4(L"Foreground", ColorAsVector4({0, 0, 0, 0}));
838
1321
  }
839
1322
  }
840
1323
 
841
- typename TTypeRedirects::ShapeVisual createLoadingCircle(typename TTypeRedirects::Compositor compositor, int delay) {
842
- // Create circle
843
- auto ellipse = compositor.CreateEllipseGeometry();
844
- ellipse.Radius({m_ringWidth, m_ringWidth});
845
- auto spriteShape = compositor.CreateSpriteShape();
846
- spriteShape.Geometry(ellipse);
847
- spriteShape.Offset(winrt::Windows::Foundation::Numerics::float2(m_centerX, m_centerY + m_radiusSmall));
848
- auto spriteVisualBrush = compositor.CreateColorBrush(winrt::Windows::UI::Colors::LightGray());
849
- spriteShape.FillBrush(spriteVisualBrush);
850
- auto circleShape = compositor.CreateShapeVisual();
851
- circleShape.Shapes().Append(spriteShape);
852
- circleShape.Size({100.0f, 100.0f});
853
- circleShape.Opacity(0.0f);
854
- m_spriteVisuals.push_back(spriteShape);
855
-
856
- // Create an OpacityAnimation
857
- auto opacityAnimation = compositor.CreateScalarKeyFrameAnimation();
858
- opacityAnimation.Duration(std::chrono::seconds(2));
859
- opacityAnimation.IterationBehavior(TTypeRedirects::AnimationIterationBehavior::Forever);
860
- opacityAnimation.DelayTime(std::chrono::milliseconds(650 + delay));
861
-
862
- opacityAnimation.InsertKeyFrame(0.0f, 0.0f); // Initial opacity (fully transparent)
863
- opacityAnimation.InsertKeyFrame(0.5f, 1.0f); // Intermediate opacity (fully opaque)
864
- opacityAnimation.InsertKeyFrame(1.0f, 0.0f); // Intermediate opacity (fully opaque)
865
- opacityAnimation.InsertKeyFrame(0.0f, 0.0f); // Final opacity (fully transparent)
866
-
867
- // create an animation for the Offset property of the ShapeVisual
868
- auto animation = compositor.CreateVector2KeyFrameAnimation();
869
- animation.Duration(std::chrono::seconds(2));
870
- animation.Direction(TTypeRedirects::AnimationDirection::Normal);
871
- animation.IterationBehavior(TTypeRedirects::AnimationIterationBehavior::Forever);
872
- animation.DelayTime(std::chrono::milliseconds(delay));
873
- animation.DelayBehavior(TTypeRedirects::AnimationDelayBehavior::SetInitialValueAfterDelay);
874
-
875
- // create path animation
876
- float progress = 2.0f * static_cast<float>(M_PI); // specifies the end of the keyframe progress
877
- for (float angle = 0.0f; angle < progress; angle += 0.1f) {
878
- float x = m_centerX + m_radiusSmall * cos(angle);
879
- float y = m_centerY + m_radiusSmall * sin(angle);
880
- animation.InsertKeyFrame(
881
- angle / (2.0f * static_cast<float>(M_PI)), winrt::Windows::Foundation::Numerics::float2(x, y));
882
- }
883
-
884
- // run animations
885
- circleShape.StartAnimation(L"Opacity", opacityAnimation);
886
- spriteShape.StartAnimation(L"Offset", animation);
887
-
888
- return circleShape;
1324
+ void Size(float radius) noexcept {
1325
+ auto scale = radius / 40.0f;
1326
+ _root.Scale({scale, scale, 1.0f});
889
1327
  }
890
1328
 
891
1329
  typename TTypeRedirects::Visual InnerVisual() const noexcept {
@@ -895,8 +1333,8 @@ struct CompActivityVisual : winrt::implements<
895
1333
  void InsertAt(const winrt::Microsoft::ReactNative::Composition::IVisual &visual, uint32_t index) noexcept {
896
1334
  auto containerChildren = m_contentVisual.Children();
897
1335
  auto compVisual = typename TTypeRedirects::CompositionContextHelper::InnerVisual(visual);
898
- if (index == 0 || containerChildren.Count() == 0) {
899
- containerChildren.InsertAtTop(compVisual);
1336
+ if (index == 0) {
1337
+ containerChildren.InsertAtBottom(compVisual);
900
1338
  return;
901
1339
  }
902
1340
  auto insertAfter = containerChildren.First();
@@ -940,7 +1378,6 @@ struct CompActivityVisual : winrt::implements<
940
1378
  }
941
1379
 
942
1380
  void Size(winrt::Windows::Foundation::Numerics::float2 const &size) noexcept {
943
- m_visualSize = size;
944
1381
  m_visual.Size(size);
945
1382
  }
946
1383
 
@@ -962,14 +1399,22 @@ struct CompActivityVisual : winrt::implements<
962
1399
  m_visual.RelativeSizeAdjustment(relativeSizeAdjustment);
963
1400
  }
964
1401
 
965
- winrt::Microsoft::ReactNative::Composition::BackfaceVisibility BackfaceVisibility() {
1402
+ winrt::Microsoft::ReactNative::Composition::BackfaceVisibility BackfaceVisibility() const noexcept {
966
1403
  return static_cast<winrt::Microsoft::ReactNative::Composition::BackfaceVisibility>(m_visual.BackfaceVisibility());
967
1404
  }
968
1405
 
969
- void BackfaceVisibility(winrt::Microsoft::ReactNative::Composition::BackfaceVisibility value) {
1406
+ void BackfaceVisibility(winrt::Microsoft::ReactNative::Composition::BackfaceVisibility value) noexcept {
970
1407
  m_visual.BackfaceVisibility(static_cast<typename TTypeRedirects::CompositionBackfaceVisibility>(value));
971
1408
  }
972
1409
 
1410
+ winrt::hstring Comment() const noexcept {
1411
+ return m_visual.Comment();
1412
+ }
1413
+
1414
+ void Comment(winrt::hstring value) noexcept {
1415
+ m_visual.Comment(value);
1416
+ }
1417
+
973
1418
  void SetClippingPath(ID2D1Geometry *clippingPath) noexcept {
974
1419
  if (!clippingPath) {
975
1420
  m_visual.Clip(nullptr);
@@ -982,18 +1427,13 @@ struct CompActivityVisual : winrt::implements<
982
1427
  m_visual.Clip(clip);
983
1428
  }
984
1429
 
1430
+ void AnimationClass(winrt::Microsoft::ReactNative::Composition::AnimationClass value) noexcept {
1431
+ SetAnimationClass<TTypeRedirects>(value, m_visual);
1432
+ }
1433
+
985
1434
  private:
986
- winrt::Windows::Foundation::Numerics::float2 m_visualSize{0};
987
1435
  typename TTypeRedirects::SpriteVisual m_visual{nullptr};
988
1436
  typename TTypeRedirects::SpriteVisual m_contentVisual{nullptr};
989
- std::vector<typename TTypeRedirects::CompositionSpriteShape> m_spriteVisuals;
990
-
991
- // constants
992
- float m_radiusSmall = 8.0f;
993
- float m_radiusLarge = 16.0f;
994
- float m_ringWidth = 2.0f;
995
- float m_centerX = m_radiusSmall + m_ringWidth;
996
- float m_centerY = m_radiusSmall + m_ringWidth;
997
1437
  };
998
1438
  using WindowsCompActivityVisual = CompActivityVisual<WindowsTypeRedirects>;
999
1439
  #ifdef USE_WINUI3
@@ -1010,7 +1450,7 @@ struct CompCaretVisual
1010
1450
  m_visual = CreateVisual();
1011
1451
 
1012
1452
  // TODO should make the caret use an invert brush by default
1013
- m_compVisual.Brush(m_compositor.CreateColorBrush(winrt::Windows::UI::Colors::Black()));
1453
+ m_compVisual.Brush(m_compositor.CreateColorBrush({255, 0, 0, 0} /* Black */));
1014
1454
  m_compVisual.Opacity(1.0f);
1015
1455
 
1016
1456
  // Blinking animation
@@ -1034,8 +1474,8 @@ struct CompCaretVisual
1034
1474
  return m_visual;
1035
1475
  }
1036
1476
 
1037
- void Color(winrt::Windows::UI::Color color) noexcept {
1038
- m_compVisual.Brush(m_compositor.CreateColorBrush(color));
1477
+ void Brush(winrt::Microsoft::ReactNative::Composition::IBrush brush) noexcept {
1478
+ m_compVisual.Brush(TTypeRedirects::CompositionContextHelper::InnerBrush(brush));
1039
1479
  }
1040
1480
 
1041
1481
  void Size(winrt::Windows::Foundation::Numerics::float2 size) noexcept {
@@ -1062,8 +1502,12 @@ struct CompCaretVisual
1062
1502
  }
1063
1503
  }
1064
1504
 
1505
+ void AnimationClass(winrt::Microsoft::ReactNative::Composition::AnimationClass value) noexcept {
1506
+ SetAnimationClass(value, m_compVisual);
1507
+ }
1508
+
1065
1509
  private:
1066
- bool m_isVisible{false};
1510
+ bool m_isVisible{true};
1067
1511
  typename TTypeRedirects::SpriteVisual m_compVisual;
1068
1512
  winrt::Microsoft::ReactNative::Composition::IVisual m_visual;
1069
1513
  typename TTypeRedirects::ScalarKeyFrameAnimation m_opacityAnimation;
@@ -1084,87 +1528,6 @@ winrt::Microsoft::ReactNative::Composition::IVisual CompCaretVisual<MicrosoftTyp
1084
1528
  using MicrosoftCompCaretVisual = CompCaretVisual<MicrosoftTypeRedirects>;
1085
1529
  #endif
1086
1530
 
1087
- // Switch Thumb animations
1088
- template <typename TTypeRedirects>
1089
- struct CompSwitchThumbVisual : winrt::implements<
1090
- CompSwitchThumbVisual<TTypeRedirects>,
1091
- winrt::Microsoft::ReactNative::Composition::ISwitchThumbVisual> {
1092
- CompSwitchThumbVisual(typename TTypeRedirects::Compositor const &compositor)
1093
- : m_compositor(compositor), m_compVisual(compositor.CreateSpriteVisual()) {
1094
- m_visual = CreateVisual();
1095
-
1096
- // Create Thumb
1097
- m_geometry = m_compositor.CreateEllipseGeometry();
1098
- m_spiritShape = m_compositor.CreateSpriteShape();
1099
- m_spiritShape.Geometry(m_geometry);
1100
- auto circleShape = m_compositor.CreateShapeVisual();
1101
- circleShape.Shapes().Append(m_spiritShape);
1102
- circleShape.Size({150.0f, 150.0f});
1103
-
1104
- m_compVisual.Children().InsertAtTop(circleShape);
1105
- }
1106
-
1107
- winrt::Microsoft::ReactNative::Composition::IVisual CreateVisual() const noexcept;
1108
-
1109
- winrt::Microsoft::ReactNative::Composition::IVisual InnerVisual() const noexcept {
1110
- return m_visual;
1111
- }
1112
-
1113
- void Color(winrt::Windows::UI::Color color) noexcept {
1114
- m_spiritShape.FillBrush(m_compositor.CreateColorBrush(color));
1115
- }
1116
-
1117
- void Size(winrt::Windows::Foundation::Numerics::float2 size) noexcept {
1118
- m_geometry.Radius(size);
1119
- m_spiritShape.Offset(size);
1120
- m_compVisual.Size(size);
1121
- }
1122
-
1123
- void Position(winrt::Windows::Foundation::Numerics::float2 position) noexcept {
1124
- if (!isDrawn) {
1125
- // we don't want to animate if this is the first time the switch is drawn on screen
1126
- isDrawn = true;
1127
- m_compVisual.Offset({position.x, position.y, 0.0f});
1128
- } else {
1129
- auto animation = m_compositor.CreateVector3KeyFrameAnimation();
1130
- animation.Duration(std::chrono::milliseconds(250));
1131
- animation.Direction(TTypeRedirects::AnimationDirection::Normal);
1132
- animation.InsertKeyFrame(1.0f, {position.x, position.y, 0.0f});
1133
-
1134
- m_compVisual.StartAnimation(L"Offset", animation);
1135
- }
1136
- }
1137
-
1138
- bool IsVisible() const noexcept {
1139
- return m_isVisible;
1140
- }
1141
-
1142
- void IsVisible(bool value) noexcept {}
1143
-
1144
- private:
1145
- bool m_isVisible{true};
1146
- bool isDrawn{false};
1147
- typename TTypeRedirects::SpriteVisual m_compVisual;
1148
- winrt::Microsoft::ReactNative::Composition::IVisual m_visual;
1149
- typename TTypeRedirects::Compositor m_compositor{nullptr};
1150
- typename TTypeRedirects::CompositionSpriteShape m_spiritShape{nullptr};
1151
- typename TTypeRedirects::CompositionEllipseGeometry m_geometry{nullptr};
1152
- };
1153
-
1154
- winrt::Microsoft::ReactNative::Composition::IVisual CompSwitchThumbVisual<WindowsTypeRedirects>::CreateVisual()
1155
- const noexcept {
1156
- return winrt::make<Composition::WindowsCompSpriteVisual>(m_compVisual);
1157
- }
1158
- using WindowsCompSwitchThumbVisual = CompSwitchThumbVisual<WindowsTypeRedirects>;
1159
-
1160
- #ifdef USE_WINUI3
1161
- winrt::Microsoft::ReactNative::Composition::IVisual CompSwitchThumbVisual<MicrosoftTypeRedirects>::CreateVisual()
1162
- const noexcept {
1163
- return winrt::make<Composition::MicrosoftCompSpriteVisual>(m_compVisual);
1164
- }
1165
- using MicrosoftCompSwitchThumbVisual = CompSwitchThumbVisual<MicrosoftTypeRedirects>;
1166
- #endif
1167
-
1168
1531
  template <typename TTypeRedirects>
1169
1532
  struct CompFocusVisual
1170
1533
  : winrt::implements<CompFocusVisual<TTypeRedirects>, winrt::Microsoft::ReactNative::Composition::IFocusVisual> {
@@ -1175,7 +1538,7 @@ struct CompFocusVisual
1175
1538
  m_compVisual.Opacity(1.0f);
1176
1539
  m_compVisual.RelativeSizeAdjustment({1, 1});
1177
1540
 
1178
- m_brush.Source(compositor.CreateColorBrush(winrt::Windows::UI::Colors::Black()));
1541
+ m_brush.Source(compositor.CreateColorBrush({255, 0, 0, 0} /* Black */));
1179
1542
  m_brush.IsCenterHollow(true);
1180
1543
  }
1181
1544
 
@@ -1210,6 +1573,10 @@ struct CompFocusVisual
1210
1573
  m_brush.SetInsets(inset, inset, inset, inset);
1211
1574
  }
1212
1575
 
1576
+ void AnimationClass(winrt::Microsoft::ReactNative::Composition::AnimationClass value) noexcept {
1577
+ SetAnimationClass(value, m_compVisual);
1578
+ }
1579
+
1213
1580
  private:
1214
1581
  float m_scaleFactor{0};
1215
1582
  typename TTypeRedirects::CompositionNineGridBrush m_brush;
@@ -1308,6 +1675,8 @@ struct CompContext : winrt::implements<
1308
1675
 
1309
1676
  winrt::Microsoft::ReactNative::Composition::ISpriteVisual CreateSpriteVisual() noexcept;
1310
1677
 
1678
+ winrt::Microsoft::ReactNative::Composition::IRoundedRectangleVisual CreateRoundedRectangleVisual() noexcept;
1679
+
1311
1680
  winrt::Microsoft::ReactNative::Composition::IScrollVisual CreateScrollerVisual() noexcept;
1312
1681
 
1313
1682
  winrt::Microsoft::ReactNative::Composition::IActivityVisual CreateActivityVisual() noexcept;
@@ -1323,8 +1692,6 @@ struct CompContext : winrt::implements<
1323
1692
 
1324
1693
  winrt::Microsoft::ReactNative::Composition::ICaretVisual CreateCaretVisual() noexcept;
1325
1694
 
1326
- winrt::Microsoft::ReactNative::Composition::ISwitchThumbVisual CreateSwitchThumbVisual() noexcept;
1327
-
1328
1695
  winrt::Microsoft::ReactNative::Composition::IFocusVisual CreateFocusVisual() noexcept;
1329
1696
 
1330
1697
  typename TTypeRedirects::CompositionGraphicsDevice CompositionGraphicsDevice() noexcept;
@@ -1352,6 +1719,11 @@ CompContext<WindowsTypeRedirects>::CreateScrollerVisual() noexcept {
1352
1719
  return winrt::make<Composition::WindowsCompScrollerVisual>(m_compositor.CreateSpriteVisual());
1353
1720
  }
1354
1721
 
1722
+ winrt::Microsoft::ReactNative::Composition::IRoundedRectangleVisual
1723
+ CompContext<WindowsTypeRedirects>::CreateRoundedRectangleVisual() noexcept {
1724
+ return winrt::make<Composition::WindowsCompRoundedRectangleVisual>(m_compositor.CreateShapeVisual());
1725
+ }
1726
+
1355
1727
  winrt::Microsoft::ReactNative::Composition::IActivityVisual
1356
1728
  CompContext<WindowsTypeRedirects>::CreateActivityVisual() noexcept {
1357
1729
  return winrt::make<Composition::WindowsCompActivityVisual>(m_compositor.CreateSpriteVisual());
@@ -1380,11 +1752,6 @@ CompContext<WindowsTypeRedirects>::CreateCaretVisual() noexcept {
1380
1752
  return winrt::make<Composition::WindowsCompCaretVisual>(m_compositor);
1381
1753
  }
1382
1754
 
1383
- winrt::Microsoft::ReactNative::Composition::ISwitchThumbVisual
1384
- CompContext<WindowsTypeRedirects>::CreateSwitchThumbVisual() noexcept {
1385
- return winrt::make<Composition::WindowsCompSwitchThumbVisual>(m_compositor);
1386
- }
1387
-
1388
1755
  winrt::Microsoft::ReactNative::Composition::IFocusVisual
1389
1756
  CompContext<WindowsTypeRedirects>::CreateFocusVisual() noexcept {
1390
1757
  return winrt::make<Composition::WindowsCompFocusVisual>(m_compositor);
@@ -1422,6 +1789,11 @@ CompContext<MicrosoftTypeRedirects>::CreateScrollerVisual() noexcept {
1422
1789
  return winrt::make<Composition::MicrosoftCompScrollerVisual>(m_compositor.CreateSpriteVisual());
1423
1790
  }
1424
1791
 
1792
+ winrt::Microsoft::ReactNative::Composition::IRoundedRectangleVisual
1793
+ CompContext<MicrosoftTypeRedirects>::CreateRoundedRectangleVisual() noexcept {
1794
+ return winrt::make<Composition::MicrosoftCompRoundedRectangleVisual>(m_compositor.CreateShapeVisual());
1795
+ }
1796
+
1425
1797
  winrt::Microsoft::ReactNative::Composition::IActivityVisual
1426
1798
  CompContext<MicrosoftTypeRedirects>::CreateActivityVisual() noexcept {
1427
1799
  return winrt::make<Composition::MicrosoftCompActivityVisual>(m_compositor.CreateSpriteVisual());
@@ -1455,11 +1827,6 @@ CompContext<MicrosoftTypeRedirects>::CreateCaretVisual() noexcept {
1455
1827
  return winrt::make<Composition::MicrosoftCompCaretVisual>(m_compositor);
1456
1828
  }
1457
1829
 
1458
- winrt::Microsoft::ReactNative::Composition::ISwitchThumbVisual
1459
- CompContext<MicrosoftTypeRedirects>::CreateSwitchThumbVisual() noexcept {
1460
- return winrt::make<Composition::MicrosoftCompSwitchThumbVisual>(m_compositor);
1461
- }
1462
-
1463
1830
  winrt::Microsoft::ReactNative::Composition::IFocusVisual
1464
1831
  CompContext<MicrosoftTypeRedirects>::CreateFocusVisual() noexcept {
1465
1832
  return winrt::make<Composition::MicrosoftCompFocusVisual>(m_compositor);
@@ -1482,44 +1849,44 @@ using MicrosoftCompContext = CompContext<MicrosoftTypeRedirects>;
1482
1849
 
1483
1850
  namespace winrt::Microsoft::ReactNative::Composition::implementation {
1484
1851
 
1485
- ICompositionContext WindowsCompositionContextHelper::CreateContext(
1852
+ ICompositionContext SystemCompositionContextHelper::CreateContext(
1486
1853
  winrt::Windows::UI::Composition::Compositor const &compositor) noexcept {
1487
1854
  return winrt::make<::Microsoft::ReactNative::Composition::WindowsCompContext>(compositor);
1488
1855
  }
1489
1856
 
1490
- IVisual WindowsCompositionContextHelper::CreateVisual(winrt::Windows::UI::Composition::Visual const &visual) noexcept {
1857
+ IVisual SystemCompositionContextHelper::CreateVisual(winrt::Windows::UI::Composition::Visual const &visual) noexcept {
1491
1858
  if (auto spriteVisual = visual.try_as<winrt::Windows::UI::Composition::SpriteVisual>())
1492
1859
  return winrt::make<::Microsoft::ReactNative::Composition::WindowsCompSpriteVisual>(spriteVisual);
1493
1860
  return winrt::make<::Microsoft::ReactNative::Composition::WindowsCompVisual>(visual);
1494
1861
  }
1495
1862
 
1496
- winrt::Windows::UI::Composition::Compositor WindowsCompositionContextHelper::InnerCompositor(
1863
+ winrt::Windows::UI::Composition::Compositor SystemCompositionContextHelper::InnerCompositor(
1497
1864
  ICompositionContext context) noexcept {
1498
1865
  winrt::com_ptr<::Microsoft::ReactNative::Composition::IWindowsCompositionCompositor> s;
1499
1866
  context.try_as(s);
1500
1867
  return s ? s->InnerCompositor() : nullptr;
1501
1868
  }
1502
1869
 
1503
- winrt::Windows::UI::Composition::Visual WindowsCompositionContextHelper::InnerVisual(IVisual visual) noexcept {
1870
+ winrt::Windows::UI::Composition::Visual SystemCompositionContextHelper::InnerVisual(IVisual visual) noexcept {
1504
1871
  winrt::com_ptr<::Microsoft::ReactNative::Composition::IWindowsCompositionVisual> s;
1505
1872
  visual.try_as(s);
1506
1873
  return s ? s->InnerVisual() : nullptr;
1507
1874
  }
1508
1875
 
1509
- winrt::Windows::UI::Composition::DropShadow WindowsCompositionContextHelper::InnerDropShadow(
1876
+ winrt::Windows::UI::Composition::DropShadow SystemCompositionContextHelper::InnerDropShadow(
1510
1877
  IDropShadow shadow) noexcept {
1511
1878
  winrt::com_ptr<::Microsoft::ReactNative::Composition::IWindowsCompositionDropShadow> s;
1512
1879
  shadow.try_as(s);
1513
1880
  return s ? s->InnerShadow() : nullptr;
1514
1881
  }
1515
1882
 
1516
- winrt::Windows::UI::Composition::CompositionBrush WindowsCompositionContextHelper::InnerBrush(IBrush brush) noexcept {
1883
+ winrt::Windows::UI::Composition::CompositionBrush SystemCompositionContextHelper::InnerBrush(IBrush brush) noexcept {
1517
1884
  winrt::com_ptr<::Microsoft::ReactNative::Composition::IWindowsCompositionBrush> s;
1518
1885
  brush.try_as(s);
1519
1886
  return s ? s->InnerBrush() : nullptr;
1520
1887
  }
1521
1888
 
1522
- winrt::Windows::UI::Composition::ICompositionSurface WindowsCompositionContextHelper::InnerSurface(
1889
+ winrt::Windows::UI::Composition::ICompositionSurface SystemCompositionContextHelper::InnerSurface(
1523
1890
  IDrawingSurfaceBrush surface) noexcept {
1524
1891
  winrt::com_ptr<::Microsoft::ReactNative::Composition::IWindowsCompositionDrawingSurfaceInner> s;
1525
1892
  surface.try_as(s);