react-native-windows 0.68.3 → 0.69.0-preview.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/.flowconfig +1 -3
  2. package/Chakra/ChakraHelpers.cpp +0 -1
  3. package/Directory.Build.props +3 -0
  4. package/Directory.Build.targets +1 -1
  5. package/Folly/TEMP_UntilFollyUpdate/dynamic-inl.h +1411 -0
  6. package/Folly/TEMP_UntilFollyUpdate/lang/ToAscii.cpp +336 -0
  7. package/Folly/TEMP_UntilFollyUpdate/lang/ToAscii.h +182 -0
  8. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +7 -0
  9. package/Libraries/ActionSheetIOS/NativeActionSheetManager.js +1 -0
  10. package/Libraries/Alert/Alert.windows.js +2 -2
  11. package/Libraries/Animated/AnimatedImplementation.js +1 -1
  12. package/Libraries/Animated/NativeAnimatedHelper.js +55 -9
  13. package/Libraries/Animated/NativeAnimatedModule.js +1 -0
  14. package/Libraries/Animated/NativeAnimatedTurboModule.js +1 -0
  15. package/Libraries/Animated/animations/TimingAnimation.js +6 -11
  16. package/Libraries/Animated/createAnimatedComponent.js +2 -2
  17. package/Libraries/Animated/nodes/AnimatedColor.js +95 -29
  18. package/Libraries/Animated/nodes/AnimatedInterpolation.js +19 -22
  19. package/Libraries/Animated/nodes/AnimatedNode.js +2 -2
  20. package/Libraries/Animated/nodes/AnimatedValue.js +1 -1
  21. package/Libraries/AppState/AppState.js +1 -1
  22. package/Libraries/Blob/URL.js +7 -1
  23. package/Libraries/Components/Button.js +3 -0
  24. package/Libraries/Components/Button.windows.js +4 -0
  25. package/Libraries/Components/DatePickerAndroid/NativeDatePickerAndroid.js +5 -0
  26. package/Libraries/Components/Pressable/Pressable.js +3 -3
  27. package/Libraries/Components/Pressable/Pressable.windows.js +3 -3
  28. package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +47 -38
  29. package/Libraries/Components/ScrollView/ScrollContentViewNativeComponent.js +15 -7
  30. package/Libraries/Components/ScrollView/ScrollView.js +1 -1
  31. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +16 -3
  32. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +3 -1
  33. package/Libraries/Components/Slider/Slider.js +0 -2
  34. package/Libraries/Components/Slider/SliderNativeComponent.js +0 -1
  35. package/Libraries/Components/StatusBar/StatusBar.js +6 -1
  36. package/Libraries/Components/Switch/Switch.js +11 -1
  37. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +114 -109
  38. package/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent.js +17 -9
  39. package/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent.js +13 -5
  40. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +10 -0
  41. package/Libraries/Components/TextInput/TextInput.js +1 -8
  42. package/Libraries/Components/TextInput/TextInput.windows.js +4 -9
  43. package/Libraries/Components/TextInput/TextInputState.js +10 -2
  44. package/Libraries/Components/TextInput/TextInputState.windows.js +10 -3
  45. package/Libraries/Components/TextInput/WindowsTextInputNativeComponent.js +1 -1
  46. package/Libraries/Components/Touchable/TouchableBounce.js +1 -0
  47. package/Libraries/Components/Touchable/TouchableHighlight.js +1 -0
  48. package/Libraries/Components/Touchable/TouchableHighlight.windows.js +6 -5
  49. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +1 -0
  50. package/Libraries/Components/Touchable/TouchableOpacity.js +7 -1
  51. package/Libraries/Components/Touchable/TouchableOpacity.windows.js +11 -5
  52. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +2 -0
  53. package/Libraries/Components/Touchable/TouchableWithoutFeedback.windows.js +2 -0
  54. package/Libraries/Components/View/ReactNativeViewAttributes.js +1 -0
  55. package/Libraries/Components/View/ReactNativeViewAttributes.windows.js +1 -0
  56. package/Libraries/Components/View/View.windows.js +33 -1
  57. package/Libraries/Components/View/ViewNativeComponent.js +68 -8
  58. package/Libraries/Components/View/ViewPropTypes.js +36 -4
  59. package/Libraries/Components/View/ViewPropTypes.windows.js +36 -4
  60. package/Libraries/Core/Devtools/parseHermesStack.js +1 -1
  61. package/Libraries/Core/ExceptionsManager.js +1 -1
  62. package/Libraries/Core/RawEventEmitter.js +38 -0
  63. package/Libraries/Core/ReactNativeVersion.js +2 -2
  64. package/Libraries/Core/polyfillPromise.js +32 -0
  65. package/Libraries/Core/setUpReactDevTools.js +3 -2
  66. package/Libraries/EventEmitter/NativeEventEmitter.js +3 -3
  67. package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +2 -1
  68. package/Libraries/EventEmitter/__mocks__/NativeEventEmitter.js +3 -3
  69. package/Libraries/Events/CustomEvent.js +32 -0
  70. package/Libraries/Events/EventPolyfill.js +239 -0
  71. package/Libraries/Image/Image.android.js +0 -6
  72. package/Libraries/Image/Image.ios.js +0 -6
  73. package/Libraries/Image/Image.windows.js +2 -8
  74. package/Libraries/Image/ImageViewNativeComponent.js +18 -3
  75. package/Libraries/Image/TextInlineImageNativeComponent.js +23 -15
  76. package/Libraries/Inspector/Inspector.js +2 -4
  77. package/Libraries/Interaction/BridgeSpyStallHandler.js +4 -3
  78. package/Libraries/Interaction/InteractionManager.js +1 -12
  79. package/Libraries/Interaction/TaskQueue.js +5 -4
  80. package/Libraries/LayoutAnimation/LayoutAnimation.js +13 -0
  81. package/Libraries/Linking/Linking.js +1 -1
  82. package/Libraries/Lists/FlatList.js +27 -6
  83. package/Libraries/Lists/VirtualizedList.js +71 -55
  84. package/Libraries/Lists/VirtualizedListContext.js +7 -3
  85. package/Libraries/Lists/VirtualizedSectionList.js +2 -2
  86. package/Libraries/Lists/__tests__/{FillRateHelper-test.windows.js → FillRateHelper-test.js} +2 -2
  87. package/Libraries/Lists/__tests__/{FlatList-test.windows.js → FlatList-test.js} +2 -2
  88. package/Libraries/Lists/__tests__/{SectionList-test.windows.js → SectionList-test.js} +14 -14
  89. package/Libraries/Lists/__tests__/{VirtualizeUtils-test.windows.js → VirtualizeUtils-test.js} +3 -3
  90. package/Libraries/Lists/__tests__/{VirtualizedList-test.windows.js → VirtualizedList-test.js} +91 -42
  91. package/Libraries/Lists/__tests__/{VirtualizedSectionList-test.windows.js → VirtualizedSectionList-test.js} +13 -13
  92. package/Libraries/LogBox/Data/LogBoxData.js +2 -2
  93. package/Libraries/LogBox/Data/LogBoxLog.js +1 -1
  94. package/Libraries/LogBox/Data/LogBoxSymbolication.js +1 -1
  95. package/Libraries/LogBox/Data/parseLogBoxLog.js +1 -1
  96. package/Libraries/LogBox/LogBox.js +2 -21
  97. package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +1 -0
  98. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +2 -1
  99. package/Libraries/NativeComponent/BaseViewConfig.android.js +295 -0
  100. package/Libraries/NativeComponent/BaseViewConfig.ios.js +333 -0
  101. package/Libraries/NativeComponent/BaseViewConfig.windows.js +334 -0
  102. package/Libraries/NativeComponent/NativeComponentRegistry.js +0 -2
  103. package/Libraries/NativeComponent/PlatformBaseViewConfig.js +24 -0
  104. package/Libraries/NativeComponent/StaticViewConfigValidator.js +7 -42
  105. package/Libraries/NativeComponent/ViewConfig.js +4 -4
  106. package/Libraries/NativeComponent/ViewConfigIgnore.js +54 -0
  107. package/Libraries/Network/FormData.js +7 -1
  108. package/Libraries/Pressability/Pressability.js +115 -46
  109. package/Libraries/Pressability/Pressability.windows.js +190 -74
  110. package/Libraries/Pressability/PressabilityDebug.js +5 -9
  111. package/Libraries/PushNotificationIOS/NativePushNotificationManagerIOS.js +1 -0
  112. package/Libraries/ReactNative/AppContainer.js +1 -1
  113. package/Libraries/ReactNative/{DummyUIManager.js → BridgelessUIManager.js} +62 -40
  114. package/Libraries/ReactNative/PaperUIManager.windows.js +5 -5
  115. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +39 -0
  116. package/Libraries/ReactNative/UIManager.js +2 -3
  117. package/Libraries/ReactNative/renderApplication.js +4 -0
  118. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +8 -0
  119. package/Libraries/Renderer/implementations/ReactFabric-dev.js +5908 -4906
  120. package/Libraries/Renderer/implementations/ReactFabric-prod.js +2100 -1918
  121. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +2567 -2352
  122. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +5610 -4844
  123. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +1710 -1556
  124. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +1830 -1639
  125. package/Libraries/Renderer/shims/ReactNativeTypes.js +2 -1
  126. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +2 -1
  127. package/Libraries/StyleSheet/EdgeInsetsPropType.js +4 -1
  128. package/Libraries/StyleSheet/StyleSheetTypes.js +59 -66
  129. package/Libraries/StyleSheet/normalizeColor.js +1 -1
  130. package/Libraries/StyleSheet/private/_StyleSheetTypesOverrides.js +15 -0
  131. package/Libraries/StyleSheet/private/_TransformStyle.js +53 -0
  132. package/Libraries/StyleSheet/processTransform.windows.js +272 -0
  133. package/Libraries/Text/Text.js +13 -7
  134. package/Libraries/Text/Text.windows.js +16 -7
  135. package/Libraries/Text/TextNativeComponent.js +2 -0
  136. package/Libraries/Text/TextProps.js +10 -0
  137. package/Libraries/Types/CoreEventTypes.js +13 -1
  138. package/Libraries/Types/CoreEventTypes.windows.js +26 -1
  139. package/Libraries/Utilities/Appearance.js +0 -8
  140. package/Libraries/Utilities/HMRClient.js +1 -1
  141. package/Libraries/Utilities/ReactNativeTestTools.js +1 -0
  142. package/Libraries/Utilities/codegenNativeComponent.js +17 -6
  143. package/Libraries/Utilities/stringifySafe.js +4 -1
  144. package/Libraries/Utilities/verifyComponentAttributeEquivalence.js +3 -3
  145. package/Libraries/WebSocket/WebSocket.js +1 -1
  146. package/Libraries/vendor/emitter/_EmitterSubscription.js +1 -1
  147. package/Libraries/vendor/emitter/_EventEmitter.js +1 -1
  148. package/Libraries/vendor/emitter/_EventSubscription.js +1 -1
  149. package/Microsoft.ReactNative/DynamicReader.cpp +3 -3
  150. package/Microsoft.ReactNative/Fabric/ComponentView.h +1 -0
  151. package/Microsoft.ReactNative/Fabric/ComponentViewRegistry.cpp +36 -2
  152. package/Microsoft.ReactNative/Fabric/ComponentViewRegistry.h +1 -0
  153. package/Microsoft.ReactNative/Fabric/DWriteHelpers.cpp +19 -0
  154. package/Microsoft.ReactNative/Fabric/DWriteHelpers.h +13 -0
  155. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +65 -19
  156. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +2 -0
  157. package/Microsoft.ReactNative/Fabric/ParagraphComponentView.cpp +36 -10
  158. package/Microsoft.ReactNative/Fabric/ScrollViewComponentView.cpp +2 -0
  159. package/Microsoft.ReactNative/Fabric/SliderComponentView.cpp +107 -0
  160. package/Microsoft.ReactNative/Fabric/SliderComponentView.h +51 -0
  161. package/Microsoft.ReactNative/Fabric/SwitchComponentView.cpp +109 -0
  162. package/Microsoft.ReactNative/Fabric/SwitchComponentView.h +52 -0
  163. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputComponentDescriptor.h +197 -0
  164. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputComponentView.cpp +308 -0
  165. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputComponentView.h +52 -0
  166. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputEventEmitter.cpp +31 -0
  167. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputEventEmitter.h +33 -0
  168. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputProps.cpp +81 -0
  169. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputProps.h +132 -0
  170. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputShadowNode.cpp +193 -0
  171. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputShadowNode.h +85 -0
  172. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputState.cpp +76 -0
  173. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputState.h +99 -0
  174. package/Microsoft.ReactNative/Fabric/ViewComponentView.cpp +35 -3
  175. package/Microsoft.ReactNative/Fabric/ViewComponentView.h +1 -0
  176. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rncore/EventEmitters.h +5 -0
  177. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rncore/Props.h +5 -0
  178. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/slider/SliderMeasurementsManager.cpp +46 -0
  179. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/slider/SliderMeasurementsManager.h +30 -0
  180. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/Color.cpp +2 -0
  181. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/conversions.h +1 -9
  182. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/platform/cxx/react/renderer/graphics/Color.h +3 -1
  183. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.cpp +119 -57
  184. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.h +18 -1
  185. package/Microsoft.ReactNative/IViewManager.idl +3 -3
  186. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +13 -107
  187. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +2 -2
  188. package/Microsoft.ReactNative/Modules/AppStateModule.cpp +2 -0
  189. package/Microsoft.ReactNative/Modules/AppStateModule.h +2 -0
  190. package/Microsoft.ReactNative/Modules/CreateModules.cpp +3 -3
  191. package/Microsoft.ReactNative/Modules/NativeUIManager.cpp +7 -5
  192. package/Microsoft.ReactNative/Modules/TimingModule.cpp +2 -2
  193. package/Microsoft.ReactNative/Modules/TimingModule.h +2 -2
  194. package/Microsoft.ReactNative/ReactHost/{ReactContext.cpp → MsoReactContext.cpp} +1 -1
  195. package/Microsoft.ReactNative/ReactHost/{ReactContext.h → MsoReactContext.h} +0 -0
  196. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +14 -1
  197. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.h +1 -1
  198. package/Microsoft.ReactNative/ReactHost/ReactNativeHeaders.h +1 -1
  199. package/Microsoft.ReactNative/ReactRootView.cpp +2 -1
  200. package/Microsoft.ReactNative/RedBox.cpp +3 -2
  201. package/Microsoft.ReactNative/Utils/ValueUtils.cpp +3 -2
  202. package/Microsoft.ReactNative/Views/ControlViewManager.cpp +32 -0
  203. package/Microsoft.ReactNative/Views/ControlViewManager.h +11 -0
  204. package/Microsoft.ReactNative/Views/DevMenu.cpp +2 -2
  205. package/Microsoft.ReactNative/Views/FrameworkElementTransferProperties.cpp +13 -2
  206. package/Microsoft.ReactNative/Views/FrameworkElementViewManager.cpp +149 -22
  207. package/Microsoft.ReactNative/Views/Image/ImageViewManager.cpp +1 -1
  208. package/Microsoft.ReactNative/Views/Image/Microsoft.UI.Composition.Effects_Impl.h +5 -11
  209. package/Microsoft.ReactNative/Views/Image/ReactImage.cpp +2 -1
  210. package/Microsoft.ReactNative/Views/SliderViewManager.cpp +12 -4
  211. package/Microsoft.ReactNative/Views/TextInputViewManager.cpp +1 -1
  212. package/Microsoft.ReactNative/Views/TextViewManager.cpp +2 -2
  213. package/Microsoft.ReactNative/Views/TouchEventHandler.cpp +163 -37
  214. package/Microsoft.ReactNative/Views/TouchEventHandler.h +11 -4
  215. package/Microsoft.ReactNative/Views/ViewPanel.cpp +3 -23
  216. package/Microsoft.ReactNative/Views/ViewPanel.h +2 -3
  217. package/Microsoft.ReactNative/Views/ViewViewManager.cpp +21 -0
  218. package/Microsoft.ReactNative/XamlUIService.cpp +1 -1
  219. package/Microsoft.ReactNative/XamlView.h +8 -3
  220. package/Microsoft.ReactNative.Cxx/CppWinRTIncludes.h +3 -5
  221. package/Microsoft.ReactNative.Cxx/DesktopWindowBridge.h +1 -1
  222. package/Microsoft.ReactNative.Cxx/JSI/JsiAbiApi.cpp +11 -2
  223. package/Microsoft.ReactNative.Cxx/JSI/JsiAbiApi.h +1 -0
  224. package/Microsoft.ReactNative.Cxx/JSI/NodeApiJsiRuntime.cpp +10 -1
  225. package/Microsoft.ReactNative.Cxx/JSValueReader.h +2 -2
  226. package/Microsoft.ReactNative.Cxx/JSValueWriter.h +5 -5
  227. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +5 -1
  228. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems.filters +2 -3
  229. package/Microsoft.ReactNative.Cxx/NativeModules.h +1 -1
  230. package/Microsoft.ReactNative.Cxx/ReactContext.h +3 -3
  231. package/Microsoft.ReactNative.Cxx/ReactNonAbiValue.h +3 -3
  232. package/Microsoft.ReactNative.Cxx/XamlUtils.h +44 -5
  233. package/Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj +0 -6
  234. package/Mso/activeObject/activeObject.h +2 -2
  235. package/Mso/compilerAdapters/cppMacros.h +3 -5
  236. package/Mso/errorCode/errorProvider.h +2 -2
  237. package/Mso/errorCode/maybe.h +4 -4
  238. package/Mso/functional/functor.h +6 -6
  239. package/Mso/functional/functorRef.h +2 -2
  240. package/Mso/future/details/executor.h +2 -2
  241. package/Mso/future/details/futureFuncInl.h +4 -4
  242. package/Mso/future/details/ifuture.h +3 -3
  243. package/Mso/future/details/maybeInvoker.h +6 -6
  244. package/Mso/future/details/promiseGroupInl.h +4 -4
  245. package/Mso/future/details/promiseInl.h +4 -4
  246. package/Mso/future/details/resultTraits.h +4 -4
  247. package/Mso/future/details/whenAllInl.h +1 -1
  248. package/Mso/future/future.h +13 -13
  249. package/Mso/guid/msoGuidDetails.h +1 -1
  250. package/Mso/memoryApi/memoryApi.h +13 -7
  251. package/Mso/motifCpp/gTestAdapter.h +1 -1
  252. package/Mso/motifCpp/testInfo.h +7 -9
  253. package/Mso/object/make.h +8 -8
  254. package/Mso/object/objectRefCount.h +3 -5
  255. package/Mso/object/objectWithWeakRef.h +10 -14
  256. package/Mso/object/queryCast.h +4 -4
  257. package/Mso/object/refCountedObject.h +4 -4
  258. package/Mso/object/unknownObject.h +7 -7
  259. package/Mso/platformAdapters/windowsFirst.h +1 -1
  260. package/Mso/smartPtr/cntPtr.h +8 -8
  261. package/Mso/src/dispatchQueue/uiScheduler_winrt.cpp +2 -2
  262. package/Mso/src/future/futureImpl.h +1 -1
  263. package/Mso/src/memoryApi/memoryApi.cpp +4 -4
  264. package/PropertySheets/CppAppConsumeCSharpModule.props +3 -0
  265. package/PropertySheets/External/Microsoft.ReactNative.WinAppSDK.CSharpApp.props +26 -0
  266. package/PropertySheets/External/Microsoft.ReactNative.WinAppSDK.Common.props +12 -0
  267. package/PropertySheets/Generated/PackageVersion.g.props +3 -3
  268. package/PropertySheets/React.Cpp.props +13 -0
  269. package/PropertySheets/WinUI.props +3 -6
  270. package/ReactCommon/ReactCommon.vcxproj +2 -4
  271. package/ReactCommon/ReactCommon.vcxproj.filters +4 -1
  272. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/JSCRuntime.cpp +1480 -0
  273. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/decorator.h +753 -0
  274. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/jsi.h +1331 -0
  275. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +1431 -0
  276. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/CallbackWrapper.h +103 -0
  277. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.h +87 -0
  278. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleUtils.h +61 -0
  279. package/ReactCommon/Yoga.cpp +1 -1
  280. package/Scripts/{Microsoft.ReactNative.ProjectReunion.nuspec → Microsoft.ReactNative.WindowsAppSDK.nuspec} +7 -9
  281. package/Scripts/OfficeReact.Win32.nuspec +1 -3
  282. package/Scripts/Tfs/Layout-MSRN-Headers.ps1 +2 -1
  283. package/Scripts/copyRNLibraries.js +8 -8
  284. package/Scripts/just.js +1 -1
  285. package/Scripts/rnw-dependencies.ps1 +41 -10
  286. package/Scripts/run-desktop-integration-tests.js +6 -6
  287. package/Shared/AbiSafe.h +3 -3
  288. package/Shared/BaseScriptStoreImpl.cpp +1 -1
  289. package/Shared/CppRuntimeOptions.h +50 -0
  290. package/Shared/DevSupportManager.cpp +32 -36
  291. package/Shared/DevSupportManager.h +1 -2
  292. package/Shared/HermesRuntimeHolder.cpp +23 -14
  293. package/Shared/HermesRuntimeHolder.h +8 -2
  294. package/Shared/IDevSupportManager.h +1 -2
  295. package/Shared/InspectorPackagerConnection.cpp +7 -5
  296. package/Shared/InspectorPackagerConnection.h +2 -2
  297. package/Shared/JSI/ChakraApi.cpp +0 -1
  298. package/Shared/JSI/ChakraRuntime.cpp +1 -2
  299. package/Shared/JSI/RuntimeHolder.h +2 -0
  300. package/Shared/Modules/HttpModule.cpp +1 -1
  301. package/Shared/Modules/HttpModule.h +2 -2
  302. package/Shared/Modules/WebSocketModule.cpp +1 -1
  303. package/Shared/Modules/WebSocketModule.h +8 -5
  304. package/Shared/{IHttpResource.h → Networking/IHttpResource.h} +4 -4
  305. package/Shared/{IWebSocketResource.h → Networking/IWebSocketResource.h} +2 -2
  306. package/Shared/Networking/OriginPolicy.h +15 -0
  307. package/Shared/Networking/OriginPolicyHttpFilter.cpp +746 -0
  308. package/Shared/Networking/OriginPolicyHttpFilter.h +112 -0
  309. package/Shared/{WinRTHttpResource.cpp → Networking/WinRTHttpResource.cpp} +129 -99
  310. package/Shared/{WinRTHttpResource.h → Networking/WinRTHttpResource.h} +8 -12
  311. package/Shared/Networking/WinRTTypes.h +30 -0
  312. package/Shared/{WinRTWebSocketResource.cpp → Networking/WinRTWebSocketResource.cpp} +2 -2
  313. package/Shared/{WinRTWebSocketResource.h → Networking/WinRTWebSocketResource.h} +3 -3
  314. package/Shared/OInstance.cpp +5 -5
  315. package/Shared/RuntimeOptions.cpp +93 -15
  316. package/Shared/RuntimeOptions.h +22 -9
  317. package/Shared/Shared.vcxitems +122 -7
  318. package/Shared/Shared.vcxitems.filters +40 -21
  319. package/Shared/Threading/BatchingQueueThread.cpp +1 -1
  320. package/Shared/tracing/fbsystrace.h +2 -2
  321. package/codegen/NativeActionSheetManagerSpec.g.h +6 -0
  322. package/codegen/NativeAnimatedModuleSpec.g.h +43 -37
  323. package/codegen/NativeAnimatedTurboModuleSpec.g.h +43 -37
  324. package/codegen/NativePushNotificationManagerIOSSpec.g.h +2 -0
  325. package/codegen/react/components/rnwcore/ComponentDescriptors.h +0 -1
  326. package/codegen/react/components/rnwcore/EventEmitters.cpp +133 -0
  327. package/codegen/react/components/rnwcore/EventEmitters.h +0 -18
  328. package/codegen/react/components/rnwcore/Props.cpp +0 -13
  329. package/codegen/react/components/rnwcore/Props.h +0 -16
  330. package/codegen/react/components/rnwcore/ShadowNodes.cpp +0 -1
  331. package/codegen/react/components/rnwcore/ShadowNodes.h +0 -10
  332. package/include/Shared/cdebug.h +9 -9
  333. package/index.js +30 -25
  334. package/index.windows.js +30 -25
  335. package/jest/preprocessor.js +24 -107
  336. package/jest/preprocessor_DO_NOT_USE.js +122 -0
  337. package/metro.config.js +3 -70
  338. package/package.json +29 -28
  339. package/react-native.config.js +40 -6
  340. package/rntypes/index.d.ts +19 -7
  341. package/stubs/glog/logging.h +1 -1
  342. package/template/cpp-app/src/App.h +0 -4
  343. package/template/cs-app/src/App.xaml.cs +0 -5
  344. package/template/cs-app/src/MainPage.xaml.cs +1 -10
  345. package/template/cs-app-WinAppSDK/MyApp/App.xaml +16 -0
  346. package/template/cs-app-WinAppSDK/MyApp/App.xaml.cs +70 -0
  347. package/template/cs-app-WinAppSDK/MyApp/MainWindow.xaml +14 -0
  348. package/template/cs-app-WinAppSDK/MyApp/MainWindow.xaml.cs +38 -0
  349. package/template/cs-app-WinAppSDK/MyApp/Package.appxmanifest +48 -0
  350. package/template/cs-app-WinAppSDK/MyApp/Properties/PublishProfiles/win10-arm64.pubxml +19 -0
  351. package/template/cs-app-WinAppSDK/MyApp/Properties/PublishProfiles/win10-x64.pubxml +19 -0
  352. package/template/cs-app-WinAppSDK/MyApp/Properties/PublishProfiles/win10-x86.pubxml +19 -0
  353. package/template/cs-app-WinAppSDK/MyApp/Properties/launchSettings.json +10 -0
  354. package/template/cs-app-WinAppSDK/MyApp/app.manifest +15 -0
  355. package/template/cs-app-WinAppSDK/proj/ExperimentalFeatures.props +23 -0
  356. package/template/cs-app-WinAppSDK/proj/MyApp.csproj +49 -0
  357. package/template/cs-app-WinAppSDK/proj/MyApp.sln +43 -0
  358. package/template/cs-app-WinAppSDK/proj/NuGet.Config +17 -0
  359. package/template/metro.devMode.config.js +2 -51
  360. package/typings-index.js +5 -1
  361. package/typings-index.js.map +1 -1
  362. package/Libraries/Components/SegmentedControlIOS/RCTSegmentedControlNativeComponent.js +0 -44
  363. package/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.android.js +0 -45
  364. package/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.ios.js +0 -123
  365. package/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.windows.js +0 -45
  366. package/Libraries/Components/View/ReactNativeViewViewConfig.js +0 -360
  367. package/Libraries/Components/View/ReactNativeViewViewConfig.windows.js +0 -390
  368. package/Libraries/Components/View/ReactNativeViewViewConfigAndroid.js +0 -83
  369. package/Libraries/ReactNative/UIManagerInjection.js +0 -15
  370. package/Libraries/Renderer/implementations/ReactFabric-dev.fb.js +0 -24527
  371. package/Libraries/Renderer/implementations/ReactFabric-prod.fb.js +0 -8309
  372. package/Libraries/Renderer/implementations/ReactFabric-profiling.fb.js +0 -8961
  373. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.fb.js +0 -24948
  374. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.fb.js +0 -8400
  375. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.fb.js +0 -9049
  376. package/PropertySheets/CppEnablePackageReferences.props +0 -13
  377. package/Shared/cdebug.cpp +0 -6
  378. package/include/Shared/ViewManager.h +0 -34
@@ -17,6 +17,7 @@
17
17
  #include <WindowsNumerics.h>
18
18
  #include <winrt/Windows.Foundation.h>
19
19
 
20
+ #include <UI.Xaml.Automation.Peers.h>
20
21
  #include <UI.Xaml.Automation.h>
21
22
  #include <UI.Xaml.Controls.h>
22
23
  #include "Utils/PropertyHandlerUtils.h"
@@ -99,6 +100,21 @@ static void GetAccessibilityValueProps(const winrt::Microsoft::ReactNative::IJSV
99
100
  writer.WriteObjectEnd();
100
101
  }
101
102
 
103
+ inline float ToRadians(const winrt::Microsoft::ReactNative::JSValue &value) {
104
+ if ((value.Type() == winrt::Microsoft::ReactNative::JSValueType::Double)) {
105
+ return value.AsSingle();
106
+ }
107
+ assert(value.Type() == winrt::Microsoft::ReactNative::JSValueType::String);
108
+
109
+ auto stringValue = value.AsString();
110
+ char *suffixStart;
111
+ double num = strtod(stringValue.c_str(), &suffixStart);
112
+ if (0 == strncmp(suffixStart, "deg", 3)) {
113
+ return static_cast<float>(num * M_PI / 180.0f);
114
+ }
115
+ return static_cast<float>(num); // assume suffix is "rad"
116
+ }
117
+
102
118
  void FrameworkElementViewManager::GetNativeProps(const winrt::Microsoft::ReactNative::IJSValueWriter &writer) const {
103
119
  Super::GetNativeProps(writer);
104
120
 
@@ -139,27 +155,84 @@ bool FrameworkElementViewManager::UpdateProperty(
139
155
  if (element.try_as<xaml::IUIElement10>()) // Works on 19H1+
140
156
  {
141
157
  if (propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Array) {
142
- assert(propertyValue.AsArray().size() == 16);
143
- winrt::Windows::Foundation::Numerics::float4x4 transformMatrix;
144
- transformMatrix.m11 = static_cast<float>(propertyValue[0].AsDouble());
145
- transformMatrix.m12 = static_cast<float>(propertyValue[1].AsDouble());
146
- transformMatrix.m13 = static_cast<float>(propertyValue[2].AsDouble());
147
- transformMatrix.m14 = static_cast<float>(propertyValue[3].AsDouble());
148
- transformMatrix.m21 = static_cast<float>(propertyValue[4].AsDouble());
149
- transformMatrix.m22 = static_cast<float>(propertyValue[5].AsDouble());
150
- transformMatrix.m23 = static_cast<float>(propertyValue[6].AsDouble());
151
- transformMatrix.m24 = static_cast<float>(propertyValue[7].AsDouble());
152
- transformMatrix.m31 = static_cast<float>(propertyValue[8].AsDouble());
153
- transformMatrix.m32 = static_cast<float>(propertyValue[9].AsDouble());
154
- transformMatrix.m33 = static_cast<float>(propertyValue[10].AsDouble());
155
- transformMatrix.m34 = static_cast<float>(propertyValue[11].AsDouble());
156
- transformMatrix.m41 = static_cast<float>(propertyValue[12].AsDouble());
157
- transformMatrix.m42 = static_cast<float>(propertyValue[13].AsDouble());
158
- transformMatrix.m43 = static_cast<float>(propertyValue[14].AsDouble());
159
- transformMatrix.m44 = static_cast<float>(propertyValue[15].AsDouble());
158
+ winrt::Windows::Foundation::Numerics::float4x4 transformMatrix{
159
+ winrt::Windows::Foundation::Numerics::float4x4::identity()};
160
+ for (const auto &transform : propertyValue.AsArray()) {
161
+ for (const auto &operation : transform.AsObject()) {
162
+ const std::string &transformType = operation.first;
163
+ const auto &innerValue = operation.second;
164
+
165
+ if (transformType == "matrix") {
166
+ assert(innerValue.AsArray().size() == 16);
167
+ winrt::Windows::Foundation::Numerics::float4x4 innerMatrix;
168
+ innerMatrix.m11 = static_cast<float>(innerValue[0].AsDouble());
169
+ innerMatrix.m12 = static_cast<float>(innerValue[1].AsDouble());
170
+ innerMatrix.m13 = static_cast<float>(innerValue[2].AsDouble());
171
+ innerMatrix.m14 = static_cast<float>(innerValue[3].AsDouble());
172
+ innerMatrix.m21 = static_cast<float>(innerValue[4].AsDouble());
173
+ innerMatrix.m22 = static_cast<float>(innerValue[5].AsDouble());
174
+ innerMatrix.m23 = static_cast<float>(innerValue[6].AsDouble());
175
+ innerMatrix.m24 = static_cast<float>(innerValue[7].AsDouble());
176
+ innerMatrix.m31 = static_cast<float>(innerValue[8].AsDouble());
177
+ innerMatrix.m32 = static_cast<float>(innerValue[9].AsDouble());
178
+ innerMatrix.m33 = static_cast<float>(innerValue[10].AsDouble());
179
+ innerMatrix.m34 = static_cast<float>(innerValue[11].AsDouble());
180
+ innerMatrix.m41 = static_cast<float>(innerValue[12].AsDouble());
181
+ innerMatrix.m42 = static_cast<float>(innerValue[13].AsDouble());
182
+ innerMatrix.m43 = static_cast<float>(innerValue[14].AsDouble());
183
+ innerMatrix.m44 = static_cast<float>(innerValue[15].AsDouble());
184
+ transformMatrix = transformMatrix * innerMatrix;
185
+ } else if (transformType == "perspective") {
186
+ auto innerMatrix = winrt::Windows::Foundation::Numerics::float4x4::identity();
187
+ innerMatrix.m34 = -1 / innerValue.AsSingle();
188
+ transformMatrix = transformMatrix * innerMatrix;
189
+ } else if (transformType == "rotateX") {
190
+ transformMatrix = transformMatrix *
191
+ winrt::Windows::Foundation::Numerics::make_float4x4_rotation_x(ToRadians(innerValue));
192
+ } else if (transformType == "rotateY") {
193
+ transformMatrix = transformMatrix *
194
+ winrt::Windows::Foundation::Numerics::make_float4x4_rotation_y(ToRadians(innerValue));
195
+ } else if (transformType == "rotate" || transformType == "rotateZ") {
196
+ transformMatrix = transformMatrix *
197
+ winrt::Windows::Foundation::Numerics::make_float4x4_rotation_z(ToRadians(innerValue));
198
+ } else if (transformType == "scale") {
199
+ transformMatrix = transformMatrix *
200
+ winrt::Windows::Foundation::Numerics::make_float4x4_scale(
201
+ innerValue.AsSingle(), innerValue.AsSingle(), 1);
202
+ } else if (transformType == "scaleX") {
203
+ transformMatrix = transformMatrix *
204
+ winrt::Windows::Foundation::Numerics::make_float4x4_scale(innerValue.AsSingle(), 1, 1);
205
+ } else if (transformType == "scaleY") {
206
+ transformMatrix = transformMatrix *
207
+ winrt::Windows::Foundation::Numerics::make_float4x4_scale(1, innerValue.AsSingle(), 1);
208
+ } else if (transformType == "translate") {
209
+ auto &params = innerValue.AsArray();
210
+ transformMatrix =
211
+ transformMatrix *
212
+ winrt::Windows::Foundation::Numerics::make_float4x4_translation(
213
+ params[0].AsSingle(), params[1].AsSingle(), params.size() > 2 ? params[2].AsSingle() : 0.f);
214
+ } else if (transformType == "translateX") {
215
+ transformMatrix = transformMatrix *
216
+ winrt::Windows::Foundation::Numerics::make_float4x4_translation(innerValue.AsSingle(), 0.f, 0.f);
217
+ } else if (transformType == "translateY") {
218
+ transformMatrix = transformMatrix *
219
+ winrt::Windows::Foundation::Numerics::make_float4x4_translation(0.f, innerValue.AsSingle(), 0.f);
220
+ } else if (transformType == "skewX") {
221
+ transformMatrix =
222
+ transformMatrix *
223
+ winrt::Windows::Foundation::Numerics::float4x4(
224
+ winrt::Windows::Foundation::Numerics::make_float3x2_skew(innerValue.AsSingle(), 0.f));
225
+ } else if (transformType == "skewY") {
226
+ transformMatrix =
227
+ transformMatrix *
228
+ winrt::Windows::Foundation::Numerics::float4x4(
229
+ winrt::Windows::Foundation::Numerics::make_float3x2_skew(0.f, innerValue.AsSingle()));
230
+ }
231
+ }
232
+ }
160
233
 
161
234
  if (!element.IsLoaded()) {
162
- element.Loaded([=](auto sender, auto &&) -> auto {
235
+ element.Loaded([=](auto sender, auto &&) -> auto{
163
236
  ApplyTransformMatrix(sender.as<xaml::UIElement>(), nodeToUpdate, transformMatrix);
164
237
  });
165
238
  } else {
@@ -344,13 +417,30 @@ bool FrameworkElementViewManager::UpdateProperty(
344
417
  const std::string &innerName = pair.first;
345
418
  const auto &innerValue = pair.second;
346
419
 
347
- if (innerName == "selected")
420
+ auto peer = xaml::Automation::Peers::FrameworkElementAutomationPeer::FromElement(element);
421
+
422
+ if (innerName == "selected") {
348
423
  states[static_cast<int32_t>(winrt::Microsoft::ReactNative::AccessibilityStates::Selected)] =
349
424
  innerValue.AsBoolean();
350
- else if (innerName == "disabled")
425
+ const auto prevSelectedState = DynamicAutomationProperties::GetAccessibilityStateSelected(element);
426
+ if (peer != nullptr && prevSelectedState != innerValue.AsBoolean()) {
427
+ peer.RaisePropertyChangedEvent(
428
+ winrt::SelectionItemPatternIdentifiers::IsSelectedProperty(),
429
+ winrt::box_value(prevSelectedState),
430
+ winrt::box_value(innerValue.AsBoolean()));
431
+ }
432
+ } else if (innerName == "disabled") {
351
433
  states[static_cast<int32_t>(winrt::Microsoft::ReactNative::AccessibilityStates::Disabled)] =
352
434
  innerValue.AsBoolean();
353
- else if (innerName == "checked") {
435
+ const auto prevDisabledState = DynamicAutomationProperties::GetAccessibilityStateDisabled(element);
436
+
437
+ if (peer != nullptr && prevDisabledState != innerValue.AsBoolean()) {
438
+ peer.RaisePropertyChangedEvent(
439
+ winrt::AutomationElementIdentifiers::IsEnabledProperty(),
440
+ winrt::box_value(!prevDisabledState),
441
+ winrt::box_value(!innerValue.AsBoolean()));
442
+ }
443
+ } else if (innerName == "checked") {
354
444
  states[static_cast<int32_t>(winrt::Microsoft::ReactNative::AccessibilityStates::Checked)] =
355
445
  innerValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Boolean && innerValue.AsBoolean();
356
446
  states[static_cast<int32_t>(winrt::Microsoft::ReactNative::AccessibilityStates::Unchecked)] =
@@ -358,6 +448,30 @@ bool FrameworkElementViewManager::UpdateProperty(
358
448
  // If the state is "mixed" we'll just set both Checked and Unchecked to false,
359
449
  // then later in the IToggleProvider implementation it will return the Intermediate state
360
450
  // due to both being set to false (see DynamicAutomationPeer::ToggleState()).
451
+ const auto prevCheckedState = DynamicAutomationProperties::GetAccessibilityStateChecked(element);
452
+ const auto prevUncheckedState = DynamicAutomationProperties::GetAccessibilityStateUnchecked(element);
453
+
454
+ if (peer != nullptr) {
455
+ if (prevCheckedState !=
456
+ states[static_cast<int32_t>(winrt::Microsoft::ReactNative::AccessibilityStates::Checked)] ||
457
+ prevUncheckedState !=
458
+ states[static_cast<int32_t>(winrt::Microsoft::ReactNative::AccessibilityStates::Unchecked)]) {
459
+ // Checking if either state has changed here to catch changes involving "mixed" state.
460
+ const auto oldValue = prevCheckedState ? winrt::ToggleState::On : winrt::ToggleState::Off;
461
+ if (innerValue.Type() != winrt::Microsoft::ReactNative::JSValueType::Boolean) {
462
+ peer.RaisePropertyChangedEvent(
463
+ winrt::TogglePatternIdentifiers::ToggleStateProperty(),
464
+ winrt::box_value(oldValue),
465
+ winrt::box_value(winrt::ToggleState::Indeterminate));
466
+ } else {
467
+ const auto newValue = innerValue.AsBoolean() ? winrt::ToggleState::On : winrt::ToggleState::Off;
468
+ peer.RaisePropertyChangedEvent(
469
+ winrt::TogglePatternIdentifiers::ToggleStateProperty(),
470
+ winrt::box_value(oldValue),
471
+ winrt::box_value(newValue));
472
+ }
473
+ }
474
+ }
361
475
  } else if (innerName == "busy")
362
476
  states[static_cast<int32_t>(winrt::Microsoft::ReactNative::AccessibilityStates::Busy)] =
363
477
  !innerValue.IsNull() && innerValue.AsBoolean();
@@ -366,6 +480,19 @@ bool FrameworkElementViewManager::UpdateProperty(
366
480
  !innerValue.IsNull() && innerValue.AsBoolean();
367
481
  states[static_cast<int32_t>(winrt::Microsoft::ReactNative::AccessibilityStates::Collapsed)] =
368
482
  innerValue.IsNull() || !innerValue.AsBoolean();
483
+
484
+ const auto prevExpandedState = DynamicAutomationProperties::GetAccessibilityStateExpanded(element);
485
+
486
+ if (peer != nullptr && prevExpandedState != innerValue.AsBoolean()) {
487
+ const auto newValue =
488
+ innerValue.AsBoolean() ? winrt::ExpandCollapseState::Expanded : winrt::ExpandCollapseState::Collapsed;
489
+ const auto oldValue =
490
+ prevExpandedState ? winrt::ExpandCollapseState::Expanded : winrt::ExpandCollapseState::Collapsed;
491
+ peer.RaisePropertyChangedEvent(
492
+ winrt::ExpandCollapsePatternIdentifiers::ExpandCollapseStateProperty(),
493
+ winrt::box_value(oldValue),
494
+ winrt::box_value(newValue));
495
+ }
369
496
  }
370
497
  }
371
498
  }
@@ -167,7 +167,7 @@ bool ImageViewManager::UpdateProperty(
167
167
  }
168
168
 
169
169
  void ImageViewManager::EmitImageEvent(winrt::Grid grid, const char *eventName, ReactImageSource &source) {
170
- int64_t tag = grid.Tag().as<winrt::IPropertyValue>().GetInt64();
170
+ int64_t tag = GetTag(grid);
171
171
  folly::dynamic imageSource =
172
172
  folly::dynamic::object()("uri", source.uri)("width", source.width)("height", source.height);
173
173
 
@@ -141,14 +141,10 @@ class EffectBase : public winrt::implements<EffectBase, abi::IGraphicsEffectD2D1
141
141
 
142
142
  #pragma push_macro("DECLARE_SOURCE")
143
143
  #undef DECLARE_SOURCE
144
- #define DECLARE_SOURCE(Name) \
145
- winrt::IGraphicsEffectSource m_##Name; \
146
- winrt::IGraphicsEffectSource Name() { \
147
- return m_##Name; \
148
- } \
149
- void Name(winrt::IGraphicsEffectSource const &value) { \
150
- m_##Name = value; \
151
- }
144
+ #define DECLARE_SOURCE(Name) \
145
+ winrt::IGraphicsEffectSource m_##Name; \
146
+ winrt::IGraphicsEffectSource Name() { return m_##Name; } \
147
+ void Name(winrt::IGraphicsEffectSource const &value) { m_##Name = value; }
152
148
 
153
149
  #pragma push_macro("DECLARE_SINGLE_SOURCE")
154
150
  #undef DECLARE_SINGLE_SOURCE
@@ -192,9 +188,7 @@ class EffectBase : public winrt::implements<EffectBase, abi::IGraphicsEffectD2D1
192
188
  Type m_##Name = InitialValue; \
193
189
  \
194
190
  public: \
195
- Type Name() { \
196
- return m_##Name; \
197
- } \
191
+ Type Name() { return m_##Name; } \
198
192
  void Name(Type const &value) { \
199
193
  if (!(0, Condition)) { \
200
194
  throw winrt::hresult_invalid_argument(); \
@@ -259,7 +259,8 @@ winrt::fire_and_forget ReactImage::SetBackground(bool fireLoadEndEvent) {
259
259
  compositionBrush->TintColor(strong_this->m_tintColor);
260
260
 
261
261
  const auto surface = fromStream ? winrt::LoadedImageSurface::StartLoadFromStream(memoryStream)
262
- : uri ? winrt::LoadedImageSurface::StartLoadFromUri(uri) : nullptr;
262
+ : uri ? winrt::LoadedImageSurface::StartLoadFromUri(uri)
263
+ : nullptr;
263
264
 
264
265
  m_sizeChangedRevoker = strong_this->SizeChanged(
265
266
  winrt::auto_revoke, [compositionBrush](const auto &, const winrt::SizeChangedEventArgs &args) {
@@ -14,10 +14,6 @@
14
14
  #include <UI.Xaml.Controls.Primitives.h>
15
15
  #include <UI.Xaml.Controls.h>
16
16
 
17
- namespace winrt {
18
- using ToggleButton = xaml::Controls::Primitives::ToggleButton;
19
- }
20
-
21
17
  namespace Microsoft::ReactNative {
22
18
 
23
19
  class SliderShadowNode : public ShadowNodeBase {
@@ -80,6 +76,18 @@ bool SliderViewManager::UpdateProperty(
80
76
  slider.Value(propertyValue.AsDouble());
81
77
  else if (propertyValue.IsNull())
82
78
  slider.Value(0);
79
+ } else if (propertyName == "maximumValue") {
80
+ if (propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Double ||
81
+ propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Int64)
82
+ slider.Maximum(propertyValue.AsDouble());
83
+ else if (propertyValue.IsNull())
84
+ slider.Maximum(100);
85
+ } else if (propertyName == "minimumValue") {
86
+ if (propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Double ||
87
+ propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Int64)
88
+ slider.Minimum(propertyValue.AsDouble());
89
+ else if (propertyValue.IsNull())
90
+ slider.Minimum(0);
83
91
  } else {
84
92
  return Super::UpdateProperty(nodeToUpdate, propertyName, propertyValue);
85
93
  }
@@ -760,7 +760,7 @@ void TextInputShadowNode::dispatchCommand(
760
760
  TextInputViewManager::TextInputViewManager(const Mso::React::IReactContext &context) : Super(context) {}
761
761
 
762
762
  const wchar_t *TextInputViewManager::GetName() const {
763
- return L"RCTTextInput";
763
+ return L"WindowsTextInput";
764
764
  }
765
765
 
766
766
  void TextInputViewManager::GetNativeProps(const winrt::Microsoft::ReactNative::IJSValueWriter &writer) const {
@@ -23,7 +23,7 @@
23
23
  #include <Utils/ValueUtils.h>
24
24
 
25
25
  #ifdef USE_WINUI3
26
- #include <winrt/Microsoft.UI.Input.Experimental.h>
26
+ #include <winrt/Microsoft.UI.Input.h>
27
27
  #endif
28
28
 
29
29
  namespace winrt {
@@ -357,7 +357,7 @@ void TextViewManager::OnPointerEvent(
357
357
  args.Target(nullptr);
358
358
 
359
359
  // Get the pointer point and hit test
360
- const auto point = args.Args().GetCurrentPoint(textBlock).RawPosition();
360
+ const auto point = args.Args().GetCurrentPoint(textBlock).Position();
361
361
  HitTest(node, args, point);
362
362
 
363
363
  // Set the target back to the current view if hit test failed
@@ -26,7 +26,10 @@
26
26
  #include <winrt/Windows.UI.Input.h>
27
27
 
28
28
  #ifdef USE_WINUI3
29
- #include <winrt/Microsoft.UI.Input.Experimental.h>
29
+ #include <winrt/Microsoft.UI.Input.h>
30
+ namespace input = winrt::Microsoft::UI::Input;
31
+ #else
32
+ namespace input = winrt::Windows::UI::Input;
30
33
  #endif
31
34
 
32
35
  namespace Microsoft::ReactNative {
@@ -46,7 +49,7 @@ TouchEventHandler::~TouchEventHandler() {
46
49
  }
47
50
 
48
51
  void TouchEventHandler::AddTouchHandlers(XamlView xamlView, XamlView rootView, bool handledEventsToo) {
49
- auto uiElement(xamlView.as<xaml::UIElement>());
52
+ auto uiElement(xamlView.try_as<xaml::UIElement>());
50
53
  if (uiElement == nullptr) {
51
54
  assert(false);
52
55
  return;
@@ -118,7 +121,7 @@ void TouchEventHandler::OnPointerPressed(
118
121
 
119
122
  // If this was caused by the user pressing the "back" hardware button, fire that event instead
120
123
  if (args.GetCurrentPoint(sourceElement).Properties().PointerUpdateKind() ==
121
- winrt::Windows::UI::Input::PointerUpdateKind::XButton1Pressed) {
124
+ input::PointerUpdateKind::XButton1Pressed) {
122
125
  args.Handled(DispatchBackEvent());
123
126
  return;
124
127
  }
@@ -127,16 +130,9 @@ void TouchEventHandler::OnPointerPressed(
127
130
  assert(!tagsForBranch.empty());
128
131
  const auto tag = tagsForBranch.front();
129
132
 
130
- // Pointer pressing updates the enter/leave state
131
- UpdatePointersInViews(args, sourceElement, std::move(tagsForBranch));
132
-
133
133
  size_t pointerIndex = AddReactPointer(args, tag, sourceElement);
134
134
 
135
- // For now, when using the mouse we only want to send click events for the left button.
136
- // Finger and pen taps will also set isLeftButton.
137
- if (m_pointers[pointerIndex].isLeftButton) {
138
- DispatchTouchEvent(eventType, pointerIndex);
139
- }
135
+ DispatchTouchEvent(eventType, pointerIndex);
140
136
  }
141
137
  }
142
138
 
@@ -189,10 +185,11 @@ void TouchEventHandler::OnPointerMoved(
189
185
  if (optPointerIndex) {
190
186
  UpdateReactPointer(m_pointers[*optPointerIndex], args, sourceElement);
191
187
  DispatchTouchEvent(eventType, *optPointerIndex);
192
- } else {
193
- // Move with no buttons pressed
194
- UpdatePointersInViews(args, sourceElement, std::move(tagsForBranch));
195
188
  }
189
+
190
+ // If we re-introduce onMouseMove to react-native-windows, we should add an
191
+ // argument to ensure we do not emit these events while the pointer is down.
192
+ UpdatePointersInViews(args, sourceElement, std::move(tagsForBranch));
196
193
  }
197
194
 
198
195
  void TouchEventHandler::OnPointerConcluded(TouchEventType eventType, const winrt::PointerRoutedEventArgs &args) {
@@ -213,23 +210,18 @@ void TouchEventHandler::OnPointerConcluded(TouchEventType eventType, const winrt
213
210
  if (PropagatePointerEventAndFindReactSourceBranch(reactArgs, &tagsForBranch, &sourceElement))
214
211
  UpdateReactPointer(m_pointers[*optPointerIndex], args, sourceElement);
215
212
 
216
- if (m_pointers[*optPointerIndex].isLeftButton) {
217
- // In case a PointerCaptureLost event should be treated as an "end" event,
218
- // check the ReactPointerEventArgs Kind property before emitting the event.
219
- const auto adjustedEventType = reactArgs.Kind() == winrt::Microsoft::ReactNative::PointerEventKind::End
220
- ? TouchEventType::End
221
- : TouchEventType::Cancel;
222
- DispatchTouchEvent(adjustedEventType, *optPointerIndex);
223
- }
213
+ // In case a PointerCaptureLost event should be treated as an "end" event,
214
+ // check the ReactPointerEventArgs Kind property before emitting the event.
215
+ const auto adjustedEventType = reactArgs.Kind() == winrt::Microsoft::ReactNative::PointerEventKind::End
216
+ ? TouchEventType::End
217
+ : TouchEventType::Cancel;
218
+ DispatchTouchEvent(adjustedEventType, *optPointerIndex);
224
219
 
225
220
  m_pointers.erase(cbegin(m_pointers) + *optPointerIndex);
226
221
  if (m_pointers.size() == 0)
227
222
  m_touchId = 0;
228
223
 
229
224
  m_xamlView.as<xaml::FrameworkElement>().ReleasePointerCapture(args.Pointer());
230
-
231
- // Updates the enter/leave state when pointer was being tracked
232
- UpdatePointersInViews(args, sourceElement, std::move(tagsForBranch));
233
225
  }
234
226
 
235
227
  size_t TouchEventHandler::AddReactPointer(
@@ -334,7 +326,7 @@ void TouchEventHandler::UpdatePointersInViews(
334
326
  } else {
335
327
  // newViews is empty when UpdatePointersInViews is called from outside
336
328
  // the root view, in this case use -1 for the JS event pointer target
337
- const auto tag = !newViews.empty() ? newViews.front() : -1;
329
+ const auto tag = !newViews.empty() ? newViews.front() : InvalidTag;
338
330
  pointer = CreateReactPointer(args, tag, sourceElement);
339
331
  }
340
332
 
@@ -373,7 +365,21 @@ void TouchEventHandler::UpdatePointersInViews(
373
365
  }
374
366
  }
375
367
 
368
+ // defines button payload, follows https://developer.mozilla.org/docs/Web/API/MouseEvent/button
369
+ enum class MouseEventButtonKind { None = -1, Main = 0, Auxiliary = 1, Secondary = 2, Eraser = 5 };
370
+
376
371
  winrt::Microsoft::ReactNative::JSValue TouchEventHandler::GetPointerJson(const ReactPointer &pointer, int64_t target) {
372
+ MouseEventButtonKind button = MouseEventButtonKind::None;
373
+ if (pointer.isLeftButton) {
374
+ button = MouseEventButtonKind::Main;
375
+ } else if (pointer.isMiddleButton) {
376
+ button = MouseEventButtonKind::Auxiliary;
377
+ } else if (pointer.isRightButton || pointer.isBarrelButton) {
378
+ button = MouseEventButtonKind::Secondary;
379
+ } else if (pointer.isEraser) {
380
+ button = MouseEventButtonKind::Eraser;
381
+ }
382
+
377
383
  return winrt::Microsoft::ReactNative::JSValueObject{
378
384
  {"target", target},
379
385
  {"identifier", pointer.identifier},
@@ -395,6 +401,7 @@ winrt::Microsoft::ReactNative::JSValue TouchEventHandler::GetPointerJson(const R
395
401
  {"isEraser", pointer.isEraser},
396
402
  {"shiftKey", pointer.shiftKey},
397
403
  {"ctrlKey", pointer.ctrlKey},
404
+ {"button", static_cast<int>(button)},
398
405
  {"altKey", pointer.altKey}};
399
406
  }
400
407
 
@@ -414,9 +421,9 @@ facebook::react::SharedEventEmitter EventEmitterForElement(
414
421
  auto element = view->Element();
415
422
  while (auto parent = element.Parent()) {
416
423
  if (element = parent.try_as<xaml::FrameworkElement>()) {
417
- auto boxedTag = element.Tag();
418
- if (boxedTag) {
419
- if (tag = winrt::unbox_value<facebook::react::Tag>(element.Tag()))
424
+ auto elementTag = GetTag(element);
425
+ if (elementTag != InvalidTag) {
426
+ if ((tag = static_cast<facebook::react::Tag>(elementTag)) != InvalidTag)
420
427
  return EventEmitterForElement(uimanager, tag);
421
428
  }
422
429
  }
@@ -438,6 +445,109 @@ facebook::react::Touch TouchEventHandler::TouchForPointer(const ReactPointer &po
438
445
  t.timestamp = static_cast<facebook::react::Float>(pointer.timestamp);
439
446
  return t;
440
447
  }
448
+
449
+ winrt::IPropertyValue TestHit(
450
+ const winrt::Collections::IVectorView<xaml::Documents::Inline> &inlines,
451
+ const winrt::Point &pointerPos,
452
+ bool &isHit) {
453
+ winrt::IPropertyValue tag(nullptr);
454
+
455
+ for (const auto &el : inlines) {
456
+ if (const auto span = el.try_as<xaml::Documents::Span>()) {
457
+ auto resTag = TestHit(span.Inlines().GetView(), pointerPos, isHit);
458
+
459
+ if (resTag)
460
+ return resTag;
461
+
462
+ if (isHit) {
463
+ tag = el.GetValue(xaml::FrameworkElement::TagProperty()).try_as<winrt::IPropertyValue>();
464
+ if (tag) {
465
+ return tag;
466
+ }
467
+ }
468
+ } else if (const auto run = el.try_as<xaml::Documents::Run>()) {
469
+ const auto start = el.ContentStart();
470
+ const auto end = el.ContentEnd();
471
+
472
+ auto startRect = start.GetCharacterRect(xaml::Documents::LogicalDirection::Forward);
473
+ auto endRect = end.GetCharacterRect(xaml::Documents::LogicalDirection::Forward);
474
+
475
+ // Swap rectangles in RTL scenarios.
476
+ if (startRect.X > endRect.X) {
477
+ const auto tempRect = startRect;
478
+ startRect = endRect;
479
+ endRect = tempRect;
480
+ }
481
+
482
+ // Approximate the bounding rect (for now, don't account for text wrapping).
483
+ if ((startRect.X <= pointerPos.X) && (endRect.X + endRect.Width >= pointerPos.X) &&
484
+ (startRect.Y <= pointerPos.Y) && (endRect.Y + endRect.Height >= pointerPos.Y)) {
485
+ isHit = true;
486
+ return nullptr;
487
+ }
488
+ }
489
+ }
490
+
491
+ return tag;
492
+ }
493
+
494
+ bool TagFromOriginalSource(const winrt::PointerRoutedEventArgs &args, int64_t *pTag, xaml::UIElement *pSourceElement) {
495
+ assert(pTag != nullptr);
496
+ assert(pSourceElement != nullptr);
497
+
498
+ // Find the React element that triggered the input event
499
+ xaml::UIElement sourceElement = args.OriginalSource().try_as<xaml::UIElement>();
500
+ winrt::IPropertyValue tag(nullptr);
501
+
502
+ while (sourceElement) {
503
+ auto tagValue = sourceElement.ReadLocalValue(xaml::FrameworkElement::TagProperty());
504
+ if (tagValue != xaml::DependencyProperty::UnsetValue()) {
505
+ tag = tagValue.try_as<winrt::IPropertyValue>();
506
+ // If a TextBlock was the UIElement event source, perform a more accurate hit test,
507
+ // searching for the tag of the nested Run/Span XAML elements that the user actually clicked.
508
+ // This is to support nested <Text> elements in React.
509
+ // Nested React <Text> elements get translated into nested XAML <Span> elements,
510
+ // while the content of the <Text> becomes a list of XAML <Run> elements.
511
+ // However, we should report the Text element as the target, not the contexts of the text.
512
+ if (const auto textBlock = sourceElement.try_as<xaml::Controls::TextBlock>()) {
513
+ const auto pointerPos = args.GetCurrentPoint(textBlock).RawPosition();
514
+ const auto inlines = textBlock.Inlines().GetView();
515
+
516
+ bool isHit = false;
517
+ const auto finerTag = TestHit(inlines, pointerPos, isHit);
518
+ if (finerTag) {
519
+ tag = finerTag;
520
+ }
521
+ }
522
+
523
+ break;
524
+ }
525
+
526
+ sourceElement = winrt::VisualTreeHelper::GetParent(sourceElement).try_as<xaml::UIElement>();
527
+ }
528
+
529
+ if (tag == nullptr) {
530
+ // If the root view fails to be fully created, then the Tag property will
531
+ // never be set. This can happen,
532
+ // for example, when the red box error box is shown.
533
+ return false;
534
+ }
535
+
536
+ *pTag = tag.GetInt64();
537
+ *pSourceElement = sourceElement;
538
+ return true;
539
+ }
540
+
541
+ bool TouchEventHandler::IsEndishEventType(TouchEventType eventType) noexcept {
542
+ switch (eventType) {
543
+ case TouchEventType::End:
544
+ case TouchEventType::Cancel:
545
+ case TouchEventType::CaptureLost:
546
+ return true;
547
+ default:
548
+ return false;
549
+ }
550
+ }
441
551
  #endif
442
552
 
443
553
  void TouchEventHandler::DispatchTouchEvent(TouchEventType eventType, size_t pointerIndex) {
@@ -456,8 +566,13 @@ void TouchEventHandler::DispatchTouchEvent(TouchEventType eventType, size_t poin
456
566
 
457
567
  size_t index = 0;
458
568
  for (const auto &pointer : m_pointers) {
459
- te.touches.insert(TouchForPointer(pointer));
460
- if (pointerIndex == index++)
569
+ bool isChangedPointer = pointerIndex == index++;
570
+
571
+ if (!isChangedPointer || !IsEndishEventType(eventType)) {
572
+ te.touches.insert(TouchForPointer(pointer));
573
+ }
574
+
575
+ if (isChangedPointer)
461
576
  te.changedTouches.insert(TouchForPointer(pointer));
462
577
 
463
578
  auto emitter = std::static_pointer_cast<facebook::react::TouchEventEmitter>(
@@ -530,17 +645,16 @@ bool TouchEventHandler::DispatchBackEvent() {
530
645
  return true;
531
646
  }
532
647
 
533
- const char *TouchEventHandler::GetPointerDeviceTypeName(
534
- winrt::Windows::Devices::Input::PointerDeviceType deviceType) noexcept {
648
+ const char *TouchEventHandler::GetPointerDeviceTypeName(PointerDeviceType deviceType) noexcept {
535
649
  const char *deviceTypeName = "unknown";
536
650
  switch (deviceType) {
537
- case winrt::Windows::Devices::Input::PointerDeviceType::Mouse:
651
+ case PointerDeviceType::Mouse:
538
652
  deviceTypeName = "mouse";
539
653
  break;
540
- case winrt::Windows::Devices::Input::PointerDeviceType::Pen:
654
+ case PointerDeviceType::Pen:
541
655
  deviceTypeName = "pen";
542
656
  break;
543
- case winrt::Windows::Devices::Input::PointerDeviceType::Touch:
657
+ case PointerDeviceType::Touch:
544
658
  deviceTypeName = "touch";
545
659
  break;
546
660
  default:
@@ -605,6 +719,18 @@ bool TouchEventHandler::PropagatePointerEventAndFindReactSourceBranch(
605
719
  assert(pTagsForBranch != nullptr);
606
720
  assert(pSourceElement != nullptr);
607
721
 
722
+ #ifdef USE_FABRIC
723
+ if (m_fabric) {
724
+ int64_t tag;
725
+ if (TagFromOriginalSource(args.Args(), &tag, pSourceElement)) {
726
+ std::vector<int64_t> tagsForBranch;
727
+ tagsForBranch.push_back(tag);
728
+ *pTagsForBranch = std::move(tagsForBranch);
729
+ }
730
+ return pSourceElement != nullptr;
731
+ }
732
+ #endif
733
+
608
734
  if (const auto uiManager = GetNativeUIManager(*m_context).lock()) {
609
735
  xaml::UIElement sourceElement = args.Args().OriginalSource().try_as<xaml::UIElement>();
610
736
  ShadowNodeBase *node = nullptr;
@@ -691,7 +817,7 @@ std::vector<int64_t> GetTagsForBranch(INativeUIManagerHost *host, int64_t tag, i
691
817
  std::vector<int64_t> tags;
692
818
 
693
819
  auto *shadowNode = host->FindShadowNodeForTag(tag);
694
- while (shadowNode != nullptr && tag != -1) {
820
+ while (shadowNode != nullptr && tag != InvalidTag) {
695
821
  if (tag == rootTag) {
696
822
  break;
697
823
  }