react-native-windows 0.75.4 → 0.76.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 (318) hide show
  1. package/.flowconfig +6 -4
  2. package/Directory.Build.props +4 -0
  3. package/Directory.Build.targets +5 -0
  4. package/Libraries/Alert/Alert.js +3 -0
  5. package/Libraries/Alert/Alert.windows.js +3 -0
  6. package/Libraries/Animated/AnimatedEvent.js +1 -1
  7. package/Libraries/Animated/AnimatedImplementation.js +7 -7
  8. package/Libraries/Animated/NativeAnimatedAllowlist.js +111 -0
  9. package/Libraries/Animated/animations/Animation.js +11 -1
  10. package/Libraries/Animated/animations/DecayAnimation.js +1 -1
  11. package/Libraries/Animated/animations/SpringAnimation.js +1 -1
  12. package/Libraries/Animated/animations/TimingAnimation.js +2 -1
  13. package/Libraries/Animated/components/AnimatedScrollView.js +3 -2
  14. package/Libraries/Animated/createAnimatedComponent.js +10 -9
  15. package/Libraries/Animated/nodes/AnimatedColor.js +1 -1
  16. package/Libraries/Animated/nodes/AnimatedInterpolation.js +3 -2
  17. package/Libraries/Animated/nodes/AnimatedNode.js +42 -33
  18. package/Libraries/Animated/nodes/AnimatedObject.js +56 -50
  19. package/Libraries/Animated/nodes/AnimatedProps.js +77 -40
  20. package/Libraries/Animated/nodes/AnimatedStyle.js +103 -59
  21. package/Libraries/Animated/nodes/AnimatedTracking.js +1 -1
  22. package/Libraries/Animated/nodes/AnimatedTransform.js +102 -67
  23. package/Libraries/Animated/nodes/AnimatedValue.js +2 -1
  24. package/Libraries/Animated/nodes/AnimatedWithChildren.js +21 -22
  25. package/Libraries/Animated/useAnimatedProps.js +142 -7
  26. package/Libraries/BatchedBridge/NativeModules.js +2 -0
  27. package/Libraries/Blob/FileReader.js +1 -1
  28. package/Libraries/Blob/URL.js +2 -62
  29. package/Libraries/Blob/URLSearchParams.js +71 -0
  30. package/Libraries/Components/Button.windows.js +0 -1
  31. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +1 -1
  32. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +17 -0
  33. package/Libraries/Components/Keyboard/KeyboardExt.js.map +1 -1
  34. package/Libraries/Components/RefreshControl/__mocks__/RefreshControlMock.js +1 -1
  35. package/Libraries/Components/ScrollView/ScrollView.js +131 -169
  36. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +3 -0
  37. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.windows.js +3 -0
  38. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +1 -1
  39. package/Libraries/Components/StatusBar/StatusBar.js +3 -1
  40. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +10 -0
  41. package/Libraries/Components/TextInput/TextInput.d.ts +32 -2
  42. package/Libraries/Components/TextInput/TextInput.js +230 -94
  43. package/Libraries/Components/TextInput/TextInput.windows.js +230 -105
  44. package/Libraries/Components/View/ReactNativeStyleAttributes.js +23 -1
  45. package/Libraries/Components/View/ReactNativeViewAttributes.js +2 -0
  46. package/Libraries/Components/View/ReactNativeViewAttributes.windows.js +2 -0
  47. package/Libraries/Components/View/View.windows.js +32 -30
  48. package/Libraries/Components/View/ViewAccessibility.d.ts +15 -0
  49. package/Libraries/Components/View/ViewNativeComponent.js +0 -1
  50. package/Libraries/Components/View/ViewPropTypes.js +14 -0
  51. package/Libraries/Components/View/ViewPropTypes.windows.js +14 -0
  52. package/Libraries/Core/ExceptionsManager.js +2 -0
  53. package/Libraries/Core/InitializeCore.js +3 -1
  54. package/Libraries/Core/ReactFiberErrorDialog.js +3 -0
  55. package/Libraries/Core/ReactNativeVersion.js +4 -4
  56. package/Libraries/Core/setUpDeveloperTools.js +5 -1
  57. package/Libraries/Core/setUpErrorHandling.js +7 -1
  58. package/Libraries/Core/setUpGlobals.js +1 -0
  59. package/Libraries/Core/setUpReactRefresh.js +0 -4
  60. package/Libraries/Image/AssetSourceResolver.js +28 -1
  61. package/Libraries/Image/AssetSourceResolver.windows.js +28 -1
  62. package/Libraries/Image/Image.android.js +9 -14
  63. package/Libraries/Image/Image.ios.js +11 -22
  64. package/Libraries/Image/Image.windows.js +11 -22
  65. package/Libraries/Image/ImageBackground.js +1 -8
  66. package/Libraries/Image/ImageUtils.js +9 -9
  67. package/Libraries/Image/ImageViewNativeComponent.js +1 -0
  68. package/Libraries/Inspector/Inspector.js +3 -2
  69. package/Libraries/Inspector/InspectorPanel.js +16 -10
  70. package/Libraries/Inspector/NetworkOverlay.js +1 -1
  71. package/Libraries/Interaction/TaskQueue.js +1 -0
  72. package/Libraries/Lists/FlatList.js +1 -1
  73. package/Libraries/Lists/SectionList.js +2 -2
  74. package/Libraries/Lists/SectionListModern.js +3 -3
  75. package/Libraries/LogBox/Data/LogBoxData.js +24 -3
  76. package/Libraries/LogBox/LogBoxNotificationContainer.js +3 -2
  77. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +9 -8
  78. package/Libraries/LogBox/UI/LogBoxInspectorHeader.windows.js +9 -8
  79. package/Libraries/Modal/Modal.js +0 -1
  80. package/Libraries/NativeComponent/BaseViewConfig.android.js +9 -1
  81. package/Libraries/NativeComponent/BaseViewConfig.ios.js +17 -1
  82. package/Libraries/NativeComponent/BaseViewConfig.windows.js +17 -1
  83. package/Libraries/NativeComponent/NativeComponentRegistry.js +22 -22
  84. package/Libraries/NativeComponent/StaticViewConfigValidator.js +0 -21
  85. package/Libraries/Network/XMLHttpRequest.js +4 -2
  86. package/Libraries/ReactNative/AppContainer-dev.js +1 -5
  87. package/Libraries/ReactNative/AppContainer-prod.js +1 -5
  88. package/Libraries/ReactNative/AppContainer.js +1 -2
  89. package/Libraries/ReactNative/AppRegistry.d.ts +0 -4
  90. package/Libraries/ReactNative/AppRegistry.js +1 -7
  91. package/Libraries/ReactNative/BridgelessUIManager.js +1 -0
  92. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +1 -1
  93. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +5 -5
  94. package/Libraries/ReactNative/RendererImplementation.js +26 -4
  95. package/Libraries/ReactNative/getNativeComponentAttributes.js +12 -0
  96. package/Libraries/ReactNative/renderApplication.js +1 -3
  97. package/Libraries/Renderer/shims/ReactNativeTypes.js +11 -4
  98. package/Libraries/StyleSheet/StyleSheet.js +1 -1
  99. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +152 -2
  100. package/Libraries/StyleSheet/StyleSheetTypes.js +60 -5
  101. package/Libraries/StyleSheet/processBackgroundImage.js +384 -0
  102. package/Libraries/StyleSheet/processBoxShadow.js +209 -0
  103. package/Libraries/StyleSheet/processFilter.js +231 -42
  104. package/Libraries/Text/Text.js +394 -196
  105. package/Libraries/Text/Text.windows.js +476 -300
  106. package/Libraries/Text/TextNativeComponent.js +2 -1
  107. package/Libraries/TurboModule/TurboModuleRegistry.js +13 -50
  108. package/Libraries/Types/CodegenTypes.js +3 -1
  109. package/Libraries/Utilities/Appearance.js +108 -84
  110. package/Libraries/Utilities/DevLoadingView.js +2 -4
  111. package/Libraries/Utilities/HMRClient.js +8 -6
  112. package/Libraries/Utilities/ReactNativeTestTools.js +1 -1
  113. package/Libraries/Utilities/createPerformanceLogger.js +0 -9
  114. package/Libraries/Utilities/stringifyViewConfig.js +22 -0
  115. package/Libraries/Utilities/useColorScheme.js +3 -3
  116. package/Libraries/WebSocket/WebSocket.js +1 -1
  117. package/Libraries/promiseRejectionTrackingOptions.js +1 -1
  118. package/Libraries/vendor/emitter/EventEmitter.js +6 -5
  119. package/Microsoft.ReactNative/ComponentView.idl +11 -0
  120. package/Microsoft.ReactNative/Composition.Input.idl +1 -0
  121. package/Microsoft.ReactNative/CompositionSwitcher.idl +3 -0
  122. package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.cpp +9 -9
  123. package/Microsoft.ReactNative/Fabric/AbiViewComponentDescriptor.cpp +9 -9
  124. package/Microsoft.ReactNative/Fabric/ComponentView.cpp +7 -9
  125. package/Microsoft.ReactNative/Fabric/ComponentView.h +5 -6
  126. package/Microsoft.ReactNative/Fabric/Composition/Composition.Input.cpp +4 -0
  127. package/Microsoft.ReactNative/Fabric/Composition/Composition.Input.h +1 -0
  128. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.cpp +44 -13
  129. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +42 -5
  130. package/Microsoft.ReactNative/Fabric/Composition/CompositionHwndHost.cpp +1 -0
  131. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +81 -63
  132. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.h +2 -3
  133. package/Microsoft.ReactNative/Fabric/Composition/DebuggingOverlayComponentView.cpp +8 -6
  134. package/Microsoft.ReactNative/Fabric/Composition/DebuggingOverlayComponentView.h +1 -2
  135. package/Microsoft.ReactNative/Fabric/Composition/FocusManager.cpp +20 -6
  136. package/Microsoft.ReactNative/Fabric/Composition/FocusManager.h +13 -6
  137. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.cpp +2 -3
  138. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.h +1 -2
  139. package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.cpp +72 -54
  140. package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.h +14 -4
  141. package/Microsoft.ReactNative/Fabric/Composition/RootComponentView.cpp +26 -8
  142. package/Microsoft.ReactNative/Fabric/Composition/RootComponentView.h +5 -2
  143. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +18 -7
  144. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.h +1 -2
  145. package/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.cpp +6 -6
  146. package/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.h +1 -2
  147. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +97 -140
  148. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.h +8 -4
  149. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.cpp +18 -11
  150. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.h +5 -4
  151. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputState.cpp +0 -13
  152. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputState.h +0 -3
  153. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +29 -4
  154. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +2 -0
  155. package/Microsoft.ReactNative/Fabric/Composition/UnimplementedNativeViewComponentView.cpp +1 -2
  156. package/Microsoft.ReactNative/Fabric/Composition/UnimplementedNativeViewComponentView.h +1 -2
  157. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +28 -12
  158. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/HostPlatformColor.h +33 -0
  159. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.cpp +26 -9
  160. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.h +10 -4
  161. package/Microsoft.ReactNative/IReactModuleBuilder.cpp +5 -0
  162. package/Microsoft.ReactNative/IReactModuleBuilder.h +1 -0
  163. package/Microsoft.ReactNative/IReactModuleBuilder.idl +9 -0
  164. package/Microsoft.ReactNative/IReactViewComponentBuilder.idl +8 -1
  165. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +2 -0
  166. package/Microsoft.ReactNative/Modules/AlertModule.cpp +3 -1
  167. package/Microsoft.ReactNative/Modules/AppearanceModule.cpp +1 -1
  168. package/Microsoft.ReactNative/Modules/AppearanceModule.h +7 -1
  169. package/Microsoft.ReactNative/Modules/DevSettingsModule.cpp +3 -3
  170. package/Microsoft.ReactNative/Modules/DevSettingsModule.h +1 -1
  171. package/Microsoft.ReactNative/Modules/LinkingManagerModule.cpp +2 -2
  172. package/Microsoft.ReactNative/Modules/LinkingManagerModule.h +1 -1
  173. package/Microsoft.ReactNative/Modules/LogBoxModule.cpp +9 -0
  174. package/Microsoft.ReactNative/Modules/LogBoxModule.h +2 -0
  175. package/Microsoft.ReactNative/Modules/SampleTurboModule.cpp +121 -0
  176. package/Microsoft.ReactNative/Modules/SampleTurboModule.h +90 -0
  177. package/Microsoft.ReactNative/ReactHost/MsoReactContext.cpp +0 -7
  178. package/Microsoft.ReactNative/ReactHost/MsoReactContext.h +0 -5
  179. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +5 -1
  180. package/Microsoft.ReactNative/ReactInstanceSettingsBuilder.cpp +59 -0
  181. package/Microsoft.ReactNative/ReactInstanceSettingsBuilder.h +23 -0
  182. package/Microsoft.ReactNative/ReactNativeAppBuilder.cpp +179 -0
  183. package/Microsoft.ReactNative/ReactNativeAppBuilder.h +35 -0
  184. package/Microsoft.ReactNative/ReactNativeAppBuilder.idl +69 -0
  185. package/Microsoft.ReactNative/ReactNativeIsland.idl +2 -0
  186. package/Microsoft.ReactNative/ReactNativeWin32App.cpp +82 -0
  187. package/Microsoft.ReactNative/ReactNativeWin32App.h +38 -0
  188. package/Microsoft.ReactNative/TurboModulesProvider.cpp +45 -0
  189. package/Microsoft.ReactNative/Views/DynamicAutomationPeer.cpp +2 -1
  190. package/Microsoft.ReactNative/Views/FlyoutViewManager.cpp +25 -16
  191. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +3 -4
  192. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems.filters +3 -0
  193. package/Microsoft.ReactNative.Cxx/ModuleRegistration.cpp +2 -2
  194. package/Microsoft.ReactNative.Cxx/ModuleRegistration.h +62 -4
  195. package/Microsoft.ReactNative.Cxx/NativeModules.h +131 -14
  196. package/Microsoft.ReactNative.Managed.CodeGen/ReactNativeNames.cs +10 -2
  197. package/PropertySheets/Autolink.props +1 -1
  198. package/PropertySheets/Bundle.props +1 -1
  199. package/PropertySheets/Codegen.props +1 -1
  200. package/PropertySheets/Generated/PackageVersion.g.props +4 -4
  201. package/PropertySheets/NuGet.LockFile.props +18 -0
  202. package/README.md +29 -29
  203. package/ReactCommon/ReactCommon.vcxproj +5 -1
  204. package/ReactCommon/ReactCommon.vcxproj.filters +11 -2
  205. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSExecutor.cpp +2 -7
  206. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.cpp +441 -0
  207. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.h +266 -0
  208. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/Utf8.h +56 -0
  209. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/Base.h +3 -1
  210. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/Bridging.h +2 -2
  211. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/CallbackWrapper.h +1 -1
  212. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/Convert.h +172 -0
  213. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/EventEmitter.h +4 -5
  214. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/Function.h +2 -2
  215. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.h +1 -1
  216. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleUtils.h +3 -2
  217. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/scrollview/ScrollViewProps.cpp +9 -0
  218. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/core/LayoutableShadowNode.cpp +363 -0
  219. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/JSRuntimeFactory.h +22 -2
  220. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/ReactInstance.cpp +118 -51
  221. package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +8 -1
  222. package/Scripts/Tfs/Layout-MSRN-Headers.ps1 +2 -2
  223. package/Shared/Modules/WebSocketModule.cpp +1 -2
  224. package/Shared/Networking/WinRTWebSocketResource.cpp +4 -1
  225. package/Shared/Shared.vcxitems +38 -2
  226. package/Shared/Shared.vcxitems.filters +6 -1
  227. package/Shared/TurboModuleManager.cpp +0 -3
  228. package/codegen/NativeLinkingManagerSpec.g.h +3 -3
  229. package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +198 -54
  230. package/codegen/NativeSampleTurboModuleSpec.g.h +35 -0
  231. package/codegen/rnwcoreJSI-generated.cpp +245 -101
  232. package/codegen/rnwcoreJSI.h +847 -548
  233. package/index.js +3 -1
  234. package/index.windows.js +3 -1
  235. package/jest/mockComponent.js +4 -1
  236. package/jest/mockModal.js +1 -3
  237. package/jest/mockScrollView.js +1 -1
  238. package/jest/renderer.js +2 -2
  239. package/jest/setup.js +16 -13
  240. package/package.json +34 -30
  241. package/src/private/animated/NativeAnimatedHelper.js +438 -0
  242. package/src/private/animated/NativeAnimatedValidation.js +64 -0
  243. package/src/private/components/HScrollViewNativeComponents.js +56 -0
  244. package/src/private/components/SafeAreaView_INTERNAL_DO_NOT_USE.js +29 -0
  245. package/src/private/components/VScrollViewNativeComponents.js +48 -0
  246. package/src/private/components/useSyncOnScroll.js +48 -0
  247. package/src/private/featureflags/ReactNativeFeatureFlags.js +166 -16
  248. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +29 -5
  249. package/src/private/fusebox/FuseboxSessionObserver.js +42 -0
  250. package/{Libraries/Core → src/private/renderer/errorhandling}/ErrorHandlers.js +14 -4
  251. package/src/private/setup/setUpDOM.js +28 -0
  252. package/src/private/setup/setUpIntersectionObserver.js +27 -0
  253. package/src/private/setup/setUpMutationObserver.js +26 -0
  254. package/src/private/setup/setUpPerformanceObserver.js +64 -0
  255. package/src/private/specs/modules/NativeAppearance.js +3 -3
  256. package/src/private/specs/modules/NativeLinkingManager.js +1 -1
  257. package/src/private/specs/modules/NativePlatformConstantsWindows.js +7 -0
  258. package/src/private/specs/modules/NativeSampleTurboModule.js +14 -1
  259. package/src/private/webapis/dom/nodes/ReadOnlyNode.js +6 -4
  260. package/{Libraries/IntersectionObserver → src/private/webapis/intersectionobserver}/IntersectionObserver.js +5 -3
  261. package/{Libraries/IntersectionObserver → src/private/webapis/intersectionobserver}/IntersectionObserverEntry.js +3 -3
  262. package/{Libraries/IntersectionObserver → src/private/webapis/intersectionobserver}/IntersectionObserverManager.js +14 -17
  263. package/src/private/{specs/modules → webapis/intersectionobserver/specs}/NativeIntersectionObserver.js +2 -2
  264. package/{Libraries/IntersectionObserver → src/private/webapis/intersectionobserver/specs}/__mocks__/NativeIntersectionObserver.js +4 -4
  265. package/{Libraries/MutationObserver → src/private/webapis/mutationobserver}/MutationObserver.js +5 -3
  266. package/{Libraries/MutationObserver → src/private/webapis/mutationobserver}/MutationObserverManager.js +24 -15
  267. package/{Libraries/MutationObserver → src/private/webapis/mutationobserver}/MutationRecord.js +4 -6
  268. package/src/private/{specs/modules → webapis/mutationobserver/specs}/NativeMutationObserver.js +2 -2
  269. package/{Libraries/MutationObserver → src/private/webapis/mutationobserver/specs}/__mocks__/NativeMutationObserver.js +5 -5
  270. package/src/private/webapis/performance/{EventCounts.js → EventTiming.js} +65 -3
  271. package/src/private/webapis/performance/LongTasks.js +39 -0
  272. package/src/private/webapis/performance/Performance.js +22 -9
  273. package/src/private/webapis/performance/PerformanceEntry.js +36 -18
  274. package/src/private/webapis/performance/PerformanceObserver.js +29 -43
  275. package/src/private/webapis/performance/RawPerformanceEntry.js +24 -1
  276. package/src/private/webapis/performance/UserTiming.js +17 -12
  277. package/src/private/webapis/performance/specs/NativePerformanceObserver.js +1 -1
  278. package/template/cpp-app/src/AutolinkedNativeModules.g.cpp +1 -1
  279. package/template/cpp-app/src/AutolinkedNativeModules.g.h +1 -1
  280. package/template/cs-app/src/AutolinkedNativeModules.g.cs +1 -1
  281. package/template/index.windows.bundle +1 -1
  282. package/template/metro.config.js +2 -2
  283. package/template/shared-app/src/AutolinkedNativeModules.g.props +1 -1
  284. package/template/shared-app/src/AutolinkedNativeModules.g.targets +1 -1
  285. package/templates/cpp-app/metro.config.js +2 -2
  286. package/templates/cpp-app/template.config.js +5 -5
  287. package/templates/cpp-app/windows/MyApp/AutolinkedNativeModules.g.cpp +1 -1
  288. package/templates/cpp-app/windows/MyApp/AutolinkedNativeModules.g.h +1 -1
  289. package/templates/cpp-app/windows/MyApp/MyApp.cpp +2 -0
  290. package/templates/cpp-app/windows/MyApp/MyApp.vcxproj +1 -1
  291. package/templates/cpp-lib/example/metro.config.js +2 -2
  292. package/templates/cpp-lib/template.config.js +3 -3
  293. package/templates/cpp-lib/windows/MyLib/MyLib.h +3 -3
  294. package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj +1 -1
  295. package/types/experimental.d.ts +12 -98
  296. package/Common/packages.lock.json +0 -26
  297. package/Folly/packages.lock.json +0 -23
  298. package/Libraries/Animated/NativeAnimatedHelper.js +0 -615
  299. package/Libraries/Core/setUpIntersectionObserver.js +0 -16
  300. package/Libraries/Core/setUpMutationObserver.js +0 -16
  301. package/Libraries/Core/setUpPerformanceObserver.js +0 -18
  302. package/Libraries/IntersectionObserver/NativeIntersectionObserver.js +0 -13
  303. package/Libraries/MutationObserver/NativeMutationObserver.js +0 -13
  304. package/Libraries/Utilities/verifyComponentAttributeEquivalence.js +0 -135
  305. package/Microsoft.ReactNative/packages.lock.json +0 -132
  306. package/Microsoft.ReactNative.Managed/packages.lock.json +0 -373
  307. package/Microsoft.ReactNative.Managed.CodeGen/packages.lock.json +0 -3197
  308. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/algorithm/CalculateLayout.cpp +0 -2396
  309. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/config/Config.cpp +0 -136
  310. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/config/Config.h +0 -92
  311. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/node/LayoutResults.cpp +0 -48
  312. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/node/LayoutResults.h +0 -122
  313. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/node/Node.cpp +0 -388
  314. package/ReactCommon/packages.lock.json +0 -30
  315. package/fmt/packages.lock.json +0 -13
  316. package/src/private/core/setUpDOM.js +0 -18
  317. package/src/private/webapis/performance/PerformanceEventTiming.js +0 -55
  318. /package/src/private/{core → styles}/composeStyles.js +0 -0
@@ -0,0 +1,82 @@
1
+ #include "pch.h"
2
+ #include "ReactNativeWin32App.h"
3
+ #include "ReactNativeWin32App.g.cpp"
4
+ #include "ReactNativeHost.h"
5
+ #include "winrt/Microsoft.UI.Composition.h"
6
+ #include "winrt/Microsoft.UI.Content.h"
7
+ #include "winrt/Microsoft.UI.Interop.h"
8
+ #include "winrt/Microsoft.UI.Windowing.h"
9
+
10
+ namespace winrt::Microsoft::ReactNative::implementation {
11
+ ReactNativeWin32App::ReactNativeWin32App() {}
12
+
13
+ ReactNativeWin32App::~ReactNativeWin32App() {
14
+ m_desktopChildSiteBridge = nullptr;
15
+
16
+ // Destroy all Composition objects
17
+ m_compositor.Close();
18
+ m_compositor = nullptr;
19
+ }
20
+
21
+ void ReactNativeWin32App::AppWindow(winrt::Microsoft::UI::Windowing::AppWindow const &appWindow) {
22
+ m_appWindow = appWindow;
23
+ }
24
+
25
+ winrt::Microsoft::UI::Windowing::AppWindow ReactNativeWin32App::AppWindow() {
26
+ return m_appWindow;
27
+ }
28
+
29
+ void ReactNativeWin32App::Compositor(winrt::Microsoft::UI::Composition::Compositor const &compositor) {
30
+ m_compositor = compositor;
31
+ }
32
+
33
+ winrt::Microsoft::UI::Composition::Compositor ReactNativeWin32App::Compositor() {
34
+ return m_compositor;
35
+ }
36
+
37
+ winrt::Microsoft::ReactNative::ReactNativeIsland ReactNativeWin32App::ReactNativeIsland() {
38
+ return m_reactNativeIsland;
39
+ }
40
+
41
+ void ReactNativeWin32App::ReactNativeIsland(winrt::Microsoft::ReactNative::ReactNativeIsland const &reactNativeIsland) {
42
+ m_reactNativeIsland = reactNativeIsland;
43
+ }
44
+
45
+ winrt::Microsoft::UI::Content::DesktopChildSiteBridge ReactNativeWin32App::DesktopChildSiteBridge() {
46
+ return m_desktopChildSiteBridge;
47
+ }
48
+
49
+ void ReactNativeWin32App::DesktopChildSiteBridge(
50
+ winrt::Microsoft::UI::Content::DesktopChildSiteBridge const &desktopChildSiteBridge) {
51
+ m_desktopChildSiteBridge = desktopChildSiteBridge;
52
+ }
53
+
54
+ winrt::Microsoft::ReactNative::ReactNativeHost ReactNativeWin32App::ReactNativeHost() {
55
+ if (m_host == nullptr) {
56
+ m_host = winrt::make<winrt::Microsoft::ReactNative::implementation::ReactNativeHost>();
57
+ }
58
+ return m_host;
59
+ }
60
+
61
+ void ReactNativeWin32App::ReactNativeHost(winrt::Microsoft::ReactNative::ReactNativeHost const &host) {
62
+ m_host = host;
63
+ }
64
+
65
+ void ReactNativeWin32App::DispatchQueueController(
66
+ winrt::Microsoft::UI::Dispatching::DispatcherQueueController const &dispatcherQueueController) {
67
+ m_dispatcherQueueController = dispatcherQueueController;
68
+ }
69
+
70
+ void ReactNativeWin32App::Start() {
71
+ m_desktopChildSiteBridge.Show();
72
+
73
+ // Run the main application event loop
74
+ m_dispatcherQueueController.DispatcherQueue().RunEventLoop();
75
+
76
+ // Rundown the DispatcherQueue. This drains the queue and raises events to let components
77
+ // know the message loop has finished.
78
+ m_dispatcherQueueController.ShutdownQueue();
79
+
80
+ m_desktopChildSiteBridge.Close();
81
+ }
82
+ } // namespace winrt::Microsoft::ReactNative::implementation
@@ -0,0 +1,38 @@
1
+ #pragma once
2
+ #include "ReactNativeWin32App.g.h"
3
+ #include "winrt/Microsoft.UI.Dispatching.h"
4
+
5
+ namespace winrt::Microsoft::ReactNative::implementation {
6
+ struct ReactNativeWin32App : ReactNativeWin32AppT<ReactNativeWin32App> {
7
+ ReactNativeWin32App();
8
+ ~ReactNativeWin32App();
9
+
10
+ void AppWindow(winrt::Microsoft::UI::Windowing::AppWindow const &appWindow);
11
+ winrt::Microsoft::UI::Windowing::AppWindow AppWindow();
12
+
13
+ winrt::Microsoft::UI::Composition::Compositor Compositor();
14
+ void Compositor(winrt::Microsoft::UI::Composition::Compositor const &compositor);
15
+
16
+ winrt::Microsoft::ReactNative::ReactNativeIsland ReactNativeIsland();
17
+ void ReactNativeIsland(winrt::Microsoft::ReactNative::ReactNativeIsland const &reactNativeIsland);
18
+
19
+ winrt::Microsoft::UI::Content::DesktopChildSiteBridge DesktopChildSiteBridge();
20
+ void DesktopChildSiteBridge(winrt::Microsoft::UI::Content::DesktopChildSiteBridge const &desktopChildSiteBridge);
21
+
22
+ void DispatchQueueController(
23
+ winrt::Microsoft::UI::Dispatching::DispatcherQueueController const &dispatcherQueueController);
24
+
25
+ winrt::Microsoft::ReactNative::ReactNativeHost ReactNativeHost();
26
+ void ReactNativeHost(winrt::Microsoft::ReactNative::ReactNativeHost const &host);
27
+
28
+ void Start();
29
+
30
+ private:
31
+ winrt::Microsoft::UI::Windowing::AppWindow m_appWindow{nullptr};
32
+ winrt::Microsoft::UI::Composition::Compositor m_compositor{nullptr};
33
+ winrt::Microsoft::UI::Dispatching::DispatcherQueueController m_dispatcherQueueController{nullptr};
34
+ winrt::Microsoft::ReactNative::ReactNativeHost m_host{nullptr};
35
+ winrt::Microsoft::ReactNative::ReactNativeIsland m_reactNativeIsland{nullptr};
36
+ winrt::Microsoft::UI::Content::DesktopChildSiteBridge m_desktopChildSiteBridge{nullptr};
37
+ };
38
+ } // namespace winrt::Microsoft::ReactNative::implementation
@@ -8,7 +8,9 @@
8
8
  #include "pch.h"
9
9
  #include "TurboModulesProvider.h"
10
10
  #include <ReactCommon/TurboModuleUtils.h>
11
+ #include <react/bridging/EventEmitter.h>
11
12
  #include "JSDispatcherWriter.h"
13
+ #include "JSValueWriter.h"
12
14
  #include "JsiApi.h"
13
15
  #include "JsiReader.h"
14
16
  #include "JsiWriter.h"
@@ -51,6 +53,12 @@ struct TurboModuleBuilder : winrt::implements<TurboModuleBuilder, IReactModuleBu
51
53
  m_methods.insert({key, {returnType, method}});
52
54
  }
53
55
 
56
+ void AddEventEmitter(hstring const &name, EventEmitterInitializerDelegate const &emitter) noexcept {
57
+ auto key = to_string(name);
58
+ EnsureMemberNotSet(key, true);
59
+ m_eventEmitters.insert({key, emitter});
60
+ }
61
+
54
62
  void AddSyncMethod(hstring const &name, SyncMethodDelegate const &method) noexcept {
55
63
  auto key = to_string(name);
56
64
  EnsureMemberNotSet(key, true);
@@ -70,10 +78,15 @@ struct TurboModuleBuilder : winrt::implements<TurboModuleBuilder, IReactModuleBu
70
78
  return m_constantProviders;
71
79
  }
72
80
 
81
+ const std::unordered_map<std::string, EventEmitterInitializerDelegate> &EventEmitters() const noexcept {
82
+ return m_eventEmitters;
83
+ }
84
+
73
85
  private:
74
86
  void EnsureMemberNotSet(const std::string &key, bool checkingMethod) noexcept {
75
87
  VerifyElseCrash(m_methods.find(key) == m_methods.end());
76
88
  VerifyElseCrash(m_syncMethods.find(key) == m_syncMethods.end());
89
+ VerifyElseCrash(m_eventEmitters.find(key) == m_eventEmitters.end());
77
90
  if (checkingMethod && key == "getConstants") {
78
91
  VerifyElseCrash(m_constantProviders.size() == 0);
79
92
  }
@@ -81,6 +94,7 @@ struct TurboModuleBuilder : winrt::implements<TurboModuleBuilder, IReactModuleBu
81
94
 
82
95
  private:
83
96
  IReactContext m_reactContext;
97
+ std::unordered_map<std::string, EventEmitterInitializerDelegate> m_eventEmitters;
84
98
  std::unordered_map<std::string, TurboModuleMethodInfo> m_methods;
85
99
  std::unordered_map<std::string, SyncMethodDelegate> m_syncMethods;
86
100
  std::vector<ConstantProviderDelegate> m_constantProviders;
@@ -373,6 +387,36 @@ class TurboModuleImpl : public facebook::react::TurboModule {
373
387
  }
374
388
  }
375
389
 
390
+ {
391
+ // try to find an event
392
+ auto it = m_moduleBuilder->EventEmitters().find(key);
393
+ if (it != m_moduleBuilder->EventEmitters().end()) {
394
+ // See if we have an existing eventEmitter
395
+ auto itEmitter = m_eventEmitters.find(key);
396
+ if (itEmitter == m_eventEmitters.end()) {
397
+ m_eventEmitters[key] = std::make_shared<facebook::react::AsyncEventEmitter<facebook::jsi::Value>>();
398
+
399
+ itEmitter = m_eventEmitters.find(key);
400
+
401
+ it->second([emitter = std::static_pointer_cast<facebook::react::AsyncEventEmitter<facebook::jsi::Value>>(
402
+ itEmitter->second),
403
+ jsInvoker = jsInvoker_](const JSValueArgWriter &eventDelegate) {
404
+ auto argWriter = MakeJSValueTreeWriter();
405
+ eventDelegate(argWriter);
406
+ emitter->emit(
407
+ [jsInvoker, eventDelegate, jsValue = std::make_shared<JSValue>(TakeJSValue(argWriter))](
408
+ facebook::jsi::Runtime &rt) -> facebook::jsi::Value {
409
+ auto argWriter = winrt::make<JsiWriter>(rt);
410
+ WriteValue(argWriter, *jsValue);
411
+ return argWriter.as<JsiWriter>()->MoveResult();
412
+ });
413
+ });
414
+ }
415
+
416
+ return itEmitter->second->get(runtime, jsInvoker_);
417
+ }
418
+ }
419
+
376
420
  // returns undefined if the expected member is not found
377
421
  return facebook::jsi::Value::undefined();
378
422
  }
@@ -408,6 +452,7 @@ class TurboModuleImpl : public facebook::react::TurboModule {
408
452
  IReactContext m_reactContext;
409
453
  winrt::com_ptr<TurboModuleBuilder> m_moduleBuilder;
410
454
  IInspectable m_providedModule;
455
+ std::unordered_map<std::string, std::shared_ptr<facebook::react::IAsyncEventEmitter>> m_eventEmitters;
411
456
  std::shared_ptr<implementation::HostObjectWrapper> m_hostObjectWrapper;
412
457
  std::weak_ptr<facebook::react::LongLivedObjectCollection> m_longLivedObjectCollection;
413
458
  };
@@ -257,7 +257,8 @@ winrt::IInspectable DynamicAutomationPeer::GetPatternCore(winrt::PatternInterfac
257
257
  if (patternInterface == winrt::PatternInterface::Invoke &&
258
258
  (accessibilityRole == winrt::Microsoft::ReactNative::AccessibilityRoles::Button ||
259
259
  accessibilityRole == winrt::Microsoft::ReactNative::AccessibilityRoles::ImageButton ||
260
- accessibilityRole == winrt::Microsoft::ReactNative::AccessibilityRoles::Radio)) {
260
+ accessibilityRole == winrt::Microsoft::ReactNative::AccessibilityRoles::Radio ||
261
+ accessibilityRole == winrt::Microsoft::ReactNative::AccessibilityRoles::Link)) {
261
262
  return *this;
262
263
  } else if (
263
264
  (patternInterface == winrt::PatternInterface::Selection ||
@@ -200,7 +200,10 @@ void FlyoutShadowNode::createView(const winrt::Microsoft::ReactNative::JSValueOb
200
200
  }
201
201
 
202
202
  OnFlyoutClosed(GetViewManager()->GetReactContext(), m_tag, false);
203
- m_xamlRootChangedRevoker.revoke();
203
+
204
+ if (Is19H1OrHigher()) {
205
+ m_xamlRootChangedRevoker.revoke();
206
+ }
204
207
  }
205
208
  });
206
209
 
@@ -262,15 +265,17 @@ void FlyoutShadowNode::createView(const winrt::Microsoft::ReactNative::JSValueOb
262
265
  });
263
266
 
264
267
  // Set XamlRoot on the Flyout to handle XamlIsland/AppWindow scenarios.
265
- if (auto flyoutBase6 = m_flyout.try_as<winrt::IFlyoutBase6>()) {
266
- if (auto uiManager = GetNativeUIManager(GetViewManager()->GetReactContext()).lock()) {
267
- if (auto xamlRoot = uiManager->tryGetXamlRoot(m_rootTag)) {
268
- flyoutBase6.XamlRoot(xamlRoot);
269
- m_xamlRootChangedRevoker = xamlRoot.Changed(winrt::auto_revoke, [this](auto &&, auto &&) {
270
- if (m_isLightDismissEnabled) {
271
- onDropViewInstance();
272
- }
273
- });
268
+ if (Is19H1OrHigher()) {
269
+ if (auto flyoutBase6 = m_flyout.try_as<winrt::IFlyoutBase6>()) {
270
+ if (auto uiManager = GetNativeUIManager(GetViewManager()->GetReactContext()).lock()) {
271
+ if (auto xamlRoot = uiManager->tryGetXamlRoot(m_rootTag)) {
272
+ flyoutBase6.XamlRoot(xamlRoot);
273
+ m_xamlRootChangedRevoker = xamlRoot.Changed(winrt::auto_revoke, [this](auto &&, auto &&) {
274
+ if (m_isLightDismissEnabled) {
275
+ onDropViewInstance();
276
+ }
277
+ });
278
+ }
274
279
  }
275
280
  }
276
281
  }
@@ -403,12 +408,16 @@ winrt::Flyout FlyoutShadowNode::GetFlyout() {
403
408
  void FlyoutShadowNode::OnShowFlyout() {
404
409
  AdjustDefaultFlyoutStyle(50000, 50000);
405
410
  if (m_isFlyoutShowOptionsSupported) {
406
- if (!m_flyout.XamlRoot()) {
407
- LogErrorAndClose("The target view window was closed before flyout could be shown.");
408
- } else if (!m_targetElement && m_targetTag > 0) {
409
- LogErrorAndClose("The target view unmounted before flyout could be shown.");
410
- } else if (m_targetElement && m_flyout.XamlRoot() != m_targetElement.XamlRoot()) {
411
- LogErrorAndClose("The target view window lost focus before flyout could be shown.");
411
+ if (Is19H1OrHigher()) {
412
+ if (!m_flyout.XamlRoot()) {
413
+ LogErrorAndClose("The target view window was closed before flyout could be shown.");
414
+ } else if (!m_targetElement && m_targetTag > 0) {
415
+ LogErrorAndClose("The target view unmounted before flyout could be shown.");
416
+ } else if (m_targetElement && m_flyout.XamlRoot() != m_targetElement.XamlRoot()) {
417
+ LogErrorAndClose("The target view window lost focus before flyout could be shown.");
418
+ } else {
419
+ m_flyout.ShowAt(m_targetElement, m_showOptions);
420
+ }
412
421
  } else {
413
422
  m_flyout.ShowAt(m_targetElement, m_showOptions);
414
423
  }
@@ -17,10 +17,6 @@
17
17
  <TurboModule_SourcePath Condition="'$(TurboModule_SourcePath)' == '' AND Exists('$(MSBuildThisFileDirectory)ReactCommon\TurboModule.h')">$(MSBuildThisFileDirectory)</TurboModule_SourcePath>
18
18
  <Bridging_SourcePath Condition="'$(Bridging_SourcePath)' == '' AND '$(ReactNativeDir)' != ''">$(ReactNativeDir)\ReactCommon\react\bridging</Bridging_SourcePath>
19
19
  <Bridging_SourcePath Condition="'$(Bridging_SourcePath)' == '' AND Exists('$(MSBuildThisFileDirectory)ReactCommon\CallbackWrapper.h')">$(MSBuildThisFileDirectory)ReactCommon</Bridging_SourcePath>
20
- <Bridging_SourcePath Condition="'$(Bridging_SourcePath)' == '' AND Exists('$(MSBuildThisFileDirectory)ReactCommon\EventEmitter.h')">$(MSBuildThisFileDirectory)ReactCommon</Bridging_SourcePath>
21
- <Bridging_SourcePath Condition="'$(Bridging_SourcePath)' == '' AND Exists('$(MSBuildThisFileDirectory)ReactCommon\Function.h')">$(MSBuildThisFileDirectory)ReactCommon</Bridging_SourcePath>
22
- <Bridging_SourcePath Condition="'$(Bridging_SourcePath)' == '' AND Exists('$(MSBuildThisFileDirectory)ReactCommon\Base.h')">$(MSBuildThisFileDirectory)ReactCommon</Bridging_SourcePath>
23
- <Bridging_SourcePath Condition="'$(Bridging_SourcePath)' == '' AND Exists('$(MSBuildThisFileDirectory)ReactCommon\Convert.h')">$(MSBuildThisFileDirectory)ReactCommon</Bridging_SourcePath>
24
20
 
25
21
  <NodeApiJsiCommitHash>83cfef428a97627c9185c73da097e42742de56eb</NodeApiJsiCommitHash>
26
22
  <NodeApiJsiLocal Condition="Exists('$(MSBuildThisFileDirectory)NodeApiJsiRuntime.cpp')">true</NodeApiJsiLocal>
@@ -65,6 +61,9 @@
65
61
  <ClInclude Include="$(TurboModule_SourcePath)\ReactCommon\LongLivedObject.h" />
66
62
  <ClInclude Include="$(Bridging_SourcePath)\CallbackWrapper.h" />
67
63
  <ClInclude Include="$(Bridging_SourcePath)\EventEmitter.h" />
64
+ <ClInclude Include="$(Bridging_SourcePath)\Function.h" />
65
+ <ClInclude Include="$(Bridging_SourcePath)\Base.h" />
66
+ <ClInclude Include="$(Bridging_SourcePath)\Convert.h" />
68
67
  <ClInclude Include="$(TurboModule_SourcePath)\ReactCommon\TurboModule.h" />
69
68
  <ClInclude Include="$(TurboModule_SourcePath)\ReactCommon\TurboModuleUtils.h" />
70
69
  <ClInclude Include="$(MSBuildThisFileDirectory)CppWinRTIncludes.h" />
@@ -161,6 +161,9 @@
161
161
  </ClInclude>
162
162
  <ClInclude Include="$(Bridging_SourcePath)\CallbackWrapper.h" />
163
163
  <ClInclude Include="$(Bridging_SourcePath)\EventEmitter.h" />
164
+ <ClInclude Include="$(Bridging_SourcePath)\Function.h" />
165
+ <ClInclude Include="$(Bridging_SourcePath)\Base.h" />
166
+ <ClInclude Include="$(Bridging_SourcePath)\Convert.h" />
164
167
  <ClInclude Include="$(MSBuildThisFileDirectory)JSI\LongLivedJsiValue.h">
165
168
  <Filter>TurboModule</Filter>
166
169
  </ClInclude>
@@ -17,7 +17,7 @@ ModuleRegistration::ModuleRegistration(wchar_t const *moduleName) noexcept : m_m
17
17
 
18
18
  void AddAttributedModules(IReactPackageBuilder const &packageBuilder, bool useTurboModules) noexcept {
19
19
  for (auto const *reg = ModuleRegistration::Head(); reg != nullptr; reg = reg->Next()) {
20
- if (useTurboModules)
20
+ if (useTurboModules || reg->ShouldRegisterAsTurboModule())
21
21
  packageBuilder.AddTurboModule(reg->ModuleName(), reg->MakeModuleProvider());
22
22
  else
23
23
  packageBuilder.AddModule(reg->ModuleName(), reg->MakeModuleProvider());
@@ -30,7 +30,7 @@ bool TryAddAttributedModule(
30
30
  bool useTurboModule) noexcept {
31
31
  for (auto const *reg = ModuleRegistration::Head(); reg != nullptr; reg = reg->Next()) {
32
32
  if (moduleName == reg->ModuleName()) {
33
- if (useTurboModule) {
33
+ if (useTurboModule || reg->ShouldRegisterAsTurboModule()) {
34
34
  packageBuilder.AddTurboModule(moduleName, reg->MakeModuleProvider());
35
35
  } else {
36
36
  packageBuilder.AddModule(moduleName, reg->MakeModuleProvider());
@@ -17,10 +17,20 @@
17
17
  // The macros below are internal implementation details for macro defined in nativeModules.h
18
18
  //
19
19
 
20
- // Register struct as a ReactNative module.
21
- #define INTERNAL_REACT_MODULE_3_ARGS(moduleStruct, moduleName, eventEmitterName) \
20
+ template <typename T>
21
+ struct IsReactTurboModule;
22
+
23
+ // Default to false if no specific override
24
+ template <typename T>
25
+ struct IsReactTurboModule : std::false_type {};
26
+
27
+ #define INTERNAL_REACT_MODULE_REGISTRATION_AND_PROVIDER( \
28
+ moduleStruct, moduleName, eventEmitterName, isReactTurboModule) \
22
29
  struct moduleStruct; \
23
30
  \
31
+ template <> \
32
+ struct IsReactTurboModule<moduleStruct> : std::isReactTurboModule##_type {}; \
33
+ \
24
34
  template <class TDummy> \
25
35
  struct moduleStruct##_ModuleRegistration final : winrt::Microsoft::ReactNative::ModuleRegistration { \
26
36
  moduleStruct##_ModuleRegistration() noexcept : winrt::Microsoft::ReactNative::ModuleRegistration{moduleName} {} \
@@ -29,6 +39,8 @@
29
39
  return winrt::Microsoft::ReactNative::MakeModuleProvider<moduleStruct>(); \
30
40
  } \
31
41
  \
42
+ bool ShouldRegisterAsTurboModule() const noexcept override { return isReactTurboModule; } \
43
+ \
32
44
  static const moduleStruct##_ModuleRegistration Registration; \
33
45
  }; \
34
46
  \
@@ -42,6 +54,9 @@
42
54
  moduleName, eventEmitterName, winrt::Microsoft::ReactNative::ReactAttributeId<__COUNTER__>{}); \
43
55
  }
44
56
 
57
+ #define INTERNAL_REACT_MODULE_3_ARGS(moduleStruct, moduleName, eventEmitterName) \
58
+ INTERNAL_REACT_MODULE_REGISTRATION_AND_PROVIDER(moduleStruct, moduleName, eventEmitterName, false)
59
+
45
60
  #define INTERNAL_REACT_MODULE_2_ARGS(moduleStruct, moduleName) \
46
61
  INTERNAL_REACT_MODULE_3_ARGS(moduleStruct, moduleName, L"")
47
62
 
@@ -51,15 +66,23 @@
51
66
  INTERNAL_REACT_RECOMPOSER_4( \
52
67
  (__VA_ARGS__, INTERNAL_REACT_MODULE_3_ARGS, INTERNAL_REACT_MODULE_2_ARGS, INTERNAL_REACT_MODULE_1_ARG, ))
53
68
 
54
- // Another version of REACT_MODULE but does not do auto registration
55
- #define INTERNAL_REACT_MODULE_NOREG_3_ARGS(moduleStruct, moduleName, eventEmitterName) \
69
+ #define INTERNAL_REACT_MODULE_NO_REGISTRATION_AND_PROVIDER( \
70
+ moduleStruct, moduleName, eventEmitterName, isReactTurboModule) \
56
71
  struct moduleStruct; \
72
+ \
73
+ template <> \
74
+ struct IsReactTurboModule<moduleStruct> : std::isReactTurboModule##_type {}; \
75
+ \
57
76
  template <class TRegistry> \
58
77
  constexpr void GetReactModuleInfo(moduleStruct *, TRegistry &registry) noexcept { \
59
78
  registry.RegisterModule( \
60
79
  moduleName, eventEmitterName, winrt::Microsoft::ReactNative::ReactAttributeId<__COUNTER__>{}); \
61
80
  }
62
81
 
82
+ // Another version of REACT_MODULE but does not do auto registration
83
+ #define INTERNAL_REACT_MODULE_NOREG_3_ARGS(moduleStruct, moduleName, eventEmitterName) \
84
+ INTERNAL_REACT_MODULE_NO_REGISTRATION_AND_PROVIDER(moduleStruct, moduleName, eventEmitterName, false)
85
+
63
86
  #define INTERNAL_REACT_MODULE_NOREG_2_ARGS(moduleStruct, moduleName) \
64
87
  INTERNAL_REACT_MODULE_NOREG_3_ARGS(moduleStruct, moduleName, L"")
65
88
 
@@ -73,6 +96,30 @@
73
96
  INTERNAL_REACT_MODULE_NOREG_2_ARGS, \
74
97
  INTERNAL_REACT_MODULE_NOREG_1_ARG, ))
75
98
 
99
+ #define INTERNAL_REACT_GET_ARG_3(arg1, arg2, arg3, ...) arg3
100
+ #define INTERNAL_REACT_RECOMPOSER_3(argsWithParentheses) INTERNAL_REACT_GET_ARG_3 argsWithParentheses
101
+
102
+ // Register struct as a ReactNative module.
103
+ #define INTERNAL_REACT_TURBO_MODULE_2_ARGS(moduleStruct, moduleName) \
104
+ INTERNAL_REACT_MODULE_REGISTRATION_AND_PROVIDER(moduleStruct, moduleName, L"", true)
105
+
106
+ #define INTERNAL_REACT_TURBO_MODULE_1_ARG(moduleStruct) \
107
+ INTERNAL_REACT_TURBO_MODULE_2_ARGS(moduleStruct, L## #moduleStruct)
108
+
109
+ #define INTERNAL_REACT_TURBO_MODULE(...) \
110
+ INTERNAL_REACT_RECOMPOSER_3((__VA_ARGS__, INTERNAL_REACT_TURBO_MODULE_2_ARGS, INTERNAL_REACT_TURBO_MODULE_1_ARG, ))
111
+
112
+ // Another version of REACT_MODULE but does not do auto registration
113
+ #define INTERNAL_REACT_TURBO_MODULE_NOREG_2_ARGS(moduleStruct, moduleName) \
114
+ INTERNAL_REACT_MODULE_NO_REGISTRATION_AND_PROVIDER(moduleStruct, moduleName, L"", true)
115
+
116
+ #define INTERNAL_REACT_TURBO_MODULE_NOREG_1_ARG(moduleStruct) \
117
+ INTERNAL_REACT_TURBO_MODULE_NOREG_2_ARGS(moduleStruct, L## #moduleStruct)
118
+
119
+ #define INTERNAL_REACT_TURBO_MODULE_NOREG(...) \
120
+ INTERNAL_REACT_RECOMPOSER_3( \
121
+ (__VA_ARGS__, INTERNAL_REACT_TURBO_MODULE_NOREG_2_ARGS, INTERNAL_REACT_TURBO_MODULE_NOREG_1_ARG, ))
122
+
76
123
  // Provide meta data information about struct member.
77
124
  // For each member with a 'custom attribute' macro we create a static method to provide meta data.
78
125
  // The member Id is generated as a ReactMemberId<__COUNTER__> type.
@@ -102,6 +149,7 @@ struct ModuleRegistration {
102
149
  ModuleRegistration(wchar_t const *moduleName) noexcept;
103
150
 
104
151
  virtual ReactModuleProvider MakeModuleProvider() const noexcept = 0;
152
+ virtual bool ShouldRegisterAsTurboModule() const noexcept = 0;
105
153
 
106
154
  static ModuleRegistration const *Head() noexcept {
107
155
  return s_head;
@@ -122,6 +170,16 @@ struct ModuleRegistration {
122
170
  static const ModuleRegistration *s_head;
123
171
  };
124
172
 
173
+ // AddAttributedModules(IReactPackageBuilder const &packageBuilder, bool useTurboModules = false)
174
+ // Arguments:
175
+ // - packageBuilder (required).
176
+ // - useTurboModules (optional) - If set to true, all modules will be registered as TurboModules.
177
+ // Consider moving modules to use REACT_TURBO_MODULE instead.
178
+ //
179
+ // AddAttributedModules will add all modules attributed with REACT_MODULE or REACT_TURBO_MODULE into packageBuilder.
180
+ // if useTurboModules is specified, then all modules will be registered using packageBuilder.AddTurboModules
181
+ // Otherwise modules attributed with REACT_MODULE will use packageBuilder.AddModule, and modules attributed with
182
+ // REACT_TURBO_MODULE will use packageBuilder.AddTurboModule.
125
183
  void AddAttributedModules(IReactPackageBuilder const &packageBuilder, bool useTurboModules = false) noexcept;
126
184
 
127
185
  bool TryAddAttributedModule(