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
@@ -20,6 +20,10 @@ const facebook::react::SharedViewEventEmitter &BaseComponentView::GetEventEmitte
20
20
  return m_eventEmitter;
21
21
  }
22
22
 
23
+ void BaseComponentView::handleCommand(std::string const &commandName, folly::dynamic const &arg) noexcept {
24
+ assert(false); // Unhandled command
25
+ }
26
+
23
27
  ViewComponentView::ViewComponentView() {
24
28
  static auto const defaultProps = std::make_shared<facebook::react::ViewProps const>();
25
29
  m_props = defaultProps;
@@ -81,6 +85,7 @@ bool ViewComponentView::shouldBeControl() const noexcept {
81
85
  void ViewComponentView::updateState(
82
86
  facebook::react::State::Shared const &state,
83
87
  facebook::react::State::Shared const &oldState) noexcept {}
88
+
84
89
  void ViewComponentView::updateLayoutMetrics(
85
90
  facebook::react::LayoutMetrics const &layoutMetrics,
86
91
  facebook::react::LayoutMetrics const &oldLayoutMetrics) noexcept {
@@ -91,9 +96,6 @@ void ViewComponentView::updateLayoutMetrics(
91
96
 
92
97
  winrt::Microsoft::ReactNative::ViewPanel::SetLeft(m_panel, layoutMetrics.frame.origin.x);
93
98
  winrt::Microsoft::ReactNative::ViewPanel::SetTop(m_panel, layoutMetrics.frame.origin.y);
94
-
95
- m_panel.Width(layoutMetrics.frame.size.width);
96
- m_panel.Height(layoutMetrics.frame.size.height);
97
99
  }
98
100
 
99
101
  void ViewComponentView::finalizeUpdates(RNComponentViewUpdateMask updateMask) noexcept {
@@ -174,6 +176,36 @@ void ViewComponentView::finalizeUpdates(RNComponentViewUpdateMask updateMask) no
174
176
  m_control.Content(m_panel);
175
177
  }
176
178
  }
179
+
180
+ if (m_outerBorder) {
181
+ m_outerBorder.Width(m_layoutMetrics.frame.size.width);
182
+ m_outerBorder.Height(m_layoutMetrics.frame.size.height);
183
+ }
184
+
185
+ if (m_control) {
186
+ m_control.Width(m_layoutMetrics.frame.size.width);
187
+ m_control.Height(m_layoutMetrics.frame.size.height);
188
+ }
189
+
190
+ m_panel.Width(m_layoutMetrics.frame.size.width);
191
+ m_panel.Height(m_layoutMetrics.frame.size.height);
192
+
193
+ if (m_control) {
194
+ winrt::Microsoft::ReactNative::ViewPanel::SetLeft(m_control, m_layoutMetrics.frame.origin.x);
195
+ winrt::Microsoft::ReactNative::ViewPanel::SetTop(m_control, m_layoutMetrics.frame.origin.y);
196
+ winrt::Microsoft::ReactNative::ViewPanel::SetLeft(m_outerBorder, 0);
197
+ winrt::Microsoft::ReactNative::ViewPanel::SetTop(m_outerBorder, 0);
198
+ winrt::Microsoft::ReactNative::ViewPanel::SetLeft(m_panel, 0);
199
+ winrt::Microsoft::ReactNative::ViewPanel::SetTop(m_panel, 0);
200
+ } else if (m_outerBorder) {
201
+ winrt::Microsoft::ReactNative::ViewPanel::SetLeft(m_outerBorder, m_layoutMetrics.frame.origin.x);
202
+ winrt::Microsoft::ReactNative::ViewPanel::SetTop(m_outerBorder, m_layoutMetrics.frame.origin.y);
203
+ winrt::Microsoft::ReactNative::ViewPanel::SetLeft(m_panel, 0);
204
+ winrt::Microsoft::ReactNative::ViewPanel::SetTop(m_panel, 0);
205
+ } else {
206
+ winrt::Microsoft::ReactNative::ViewPanel::SetLeft(m_panel, m_layoutMetrics.frame.origin.x);
207
+ winrt::Microsoft::ReactNative::ViewPanel::SetTop(m_panel, m_layoutMetrics.frame.origin.y);
208
+ }
177
209
  }
178
210
 
179
211
  void ViewComponentView::prepareForRecycle() noexcept {}
@@ -14,6 +14,7 @@ struct BaseComponentView : IComponentView {
14
14
  virtual const xaml::FrameworkElement Element() const noexcept = 0;
15
15
  void updateEventEmitter(facebook::react::EventEmitter::Shared const &eventEmitter) noexcept override;
16
16
  const facebook::react::SharedViewEventEmitter &GetEventEmitter() const noexcept;
17
+ void handleCommand(std::string const &commandName, folly::dynamic const &arg) noexcept override;
17
18
 
18
19
  protected:
19
20
  facebook::react::SharedViewEventEmitter m_eventEmitter;
@@ -0,0 +1,5 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+
4
+ // RN has some weird include directory redirections..this forwards the include to the right place
5
+ #include <react/components/rnwcore/EventEmitters.h>
@@ -0,0 +1,5 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+
4
+ // RN has some weird include directory redirections..this forwards the include to the right place
5
+ #include <react/components/rnwcore/Props.h>
@@ -0,0 +1,46 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #include "SliderMeasurementsManager.h"
9
+
10
+ #include <react/renderer/core/conversions.h>
11
+ #include <winrt/Windows.Foundation.Collections.h>
12
+ #include <winrt/Windows.UI.Xaml.Interop.h>
13
+
14
+ #include "ReactContext.h"
15
+ #include "ReactHost/React.h"
16
+ #include "ReactPropertyBag.h"
17
+ #include "winrt/Microsoft.ReactNative.h"
18
+
19
+ namespace facebook::react {
20
+
21
+ void InitSliderMeasurements(const Mso::React::IReactContext &reactContext) {
22
+ auto slider = xaml::Controls::Slider();
23
+ xaml::Style sliderStyle;
24
+ xaml::Application::Current()
25
+ .Resources()
26
+ .TryLookup(winrt::box_value(winrt::xaml_typename<xaml::Controls::Slider>()))
27
+ .as(sliderStyle);
28
+ slider.Style(sliderStyle);
29
+
30
+ slider.Measure({std::numeric_limits<float>::infinity(), std::numeric_limits<float>::infinity()});
31
+ auto size = slider.DesiredSize();
32
+ winrt::Microsoft::ReactNative::ReactPropertyBag(reactContext.Properties())
33
+ .Set(
34
+ winrt::Microsoft::ReactNative::ReactPropertyId<winrt::Windows::Foundation::Size>(L"SliderMeasurements"),
35
+ size);
36
+ }
37
+
38
+ Size SliderMeasurementsManager::measure(SurfaceId surfaceId, LayoutConstraints layoutConstraints) const {
39
+ auto context = m_contextContainer->at<winrt::Microsoft::ReactNative::ReactContext>("MSRN.ReactContext");
40
+ auto size = *context.Properties().Get(
41
+ winrt::Microsoft::ReactNative::ReactPropertyId<winrt::Windows::Foundation::Size>(L"SliderMeasurements"));
42
+
43
+ return {static_cast<float>(size.Width), static_cast<float>(size.Height)};
44
+ }
45
+
46
+ } // namespace facebook::react
@@ -0,0 +1,30 @@
1
+ #pragma once
2
+
3
+ #include <CppWinrtIncludes.h>
4
+ #include <UI.Xaml.Controls.h>
5
+ #include <react/renderer/core/ConcreteComponentDescriptor.h>
6
+ #include <react/renderer/core/LayoutConstraints.h>
7
+ #include <react/utils/ContextContainer.h>
8
+
9
+ namespace facebook::react {
10
+
11
+ /**
12
+ * Class that manages slider measurements across platforms.
13
+ * On iOS it is a noop, since the height is passed in from JS on iOS only.
14
+ */
15
+ class SliderMeasurementsManager {
16
+ public:
17
+ SliderMeasurementsManager(const ContextContainer::Shared &contextContainer) : m_contextContainer(contextContainer) {}
18
+
19
+ static inline bool shouldMeasureSlider() {
20
+ return true;
21
+ }
22
+
23
+ Size measure(SurfaceId surfaceId, LayoutConstraints layoutConstraints) const;
24
+
25
+ private:
26
+ ContextContainer::Shared m_contextContainer;
27
+ mutable xaml::Controls::Slider m_slider{nullptr};
28
+ };
29
+
30
+ } // namespace facebook::react
@@ -15,6 +15,7 @@ bool isColorMeaningful(SharedColor const &color) noexcept {
15
15
  return colorComponentsFromColor(color).alpha > 0;
16
16
  }
17
17
 
18
+ #ifndef CORE_ABI
18
19
  xaml::Media::Brush SharedColor::AsWindowsBrush() const {
19
20
  if (!m_color)
20
21
  return nullptr;
@@ -23,6 +24,7 @@ xaml::Media::Brush SharedColor::AsWindowsBrush() const {
23
24
  }
24
25
  return xaml::Media::SolidColorBrush(m_color->m_color);
25
26
  }
27
+ #endif // CORE_ABI
26
28
 
27
29
  SharedColor colorFromComponents(ColorComponents components) {
28
30
  float ratio = 255;
@@ -58,15 +58,7 @@ inline void fromRawValue(const PropsParserContext &context, const RawValue &valu
58
58
 
59
59
  #ifdef ANDROID
60
60
 
61
- inline folly::dynamic toDynamic(const SharedColor &color) {
62
- ColorComponents components = colorComponentsFromColor(color);
63
- auto ratio = 255.f;
64
- return (
65
- ((int)round(components.alpha * ratio) & 0xff) << 24 | ((int)round(components.red * ratio) & 0xff) << 16 |
66
- ((int)round(components.green * ratio) & 0xff) << 8 | ((int)round(components.blue * ratio) & 0xff));
67
- }
68
-
69
- inline int toMapBuffer(const SharedColor &color) {
61
+ inline int toAndroidRepr(const SharedColor &color) {
70
62
  ColorComponents components = colorComponentsFromColor(color);
71
63
  auto ratio = 255.f;
72
64
  return (
@@ -12,8 +12,8 @@
12
12
  #include <limits>
13
13
 
14
14
  #include <CppWinRTIncludes.h>
15
- #include <butter/optional.h>
16
15
  #include <react/renderer/graphics/ColorComponents.h>
16
+ #include <optional>
17
17
 
18
18
  namespace facebook {
19
19
  namespace react {
@@ -87,7 +87,9 @@ class SharedColor {
87
87
  return m_color->m_color;
88
88
  }
89
89
 
90
+ #ifndef CORE_ABI
90
91
  xaml::Media::Brush AsWindowsBrush() const;
92
+ #endif
91
93
 
92
94
  private:
93
95
  std::shared_ptr<Color> m_color;
@@ -5,86 +5,148 @@
5
5
 
6
6
  #include "pch.h"
7
7
 
8
- #include "TextLayoutManager.h"
9
-
8
+ #include <Fabric/DWriteHelpers.h>
10
9
  #include <dwrite.h>
10
+ #include "TextLayoutManager.h"
11
11
 
12
12
  #include <unicode.h>
13
13
 
14
- namespace facebook {
15
- namespace react {
14
+ namespace facebook::react {
16
15
 
17
- TextLayoutManager::~TextLayoutManager() {}
16
+ void TextLayoutManager::GetTextLayout(
17
+ AttributedStringBox attributedStringBox,
18
+ ParagraphAttributes paragraphAttributes,
19
+ LayoutConstraints layoutConstraints,
20
+ const std::optional<TextAlignment> &textAlignment,
21
+ winrt::com_ptr<IDWriteTextLayout> &spTextLayout) noexcept {
22
+ if (attributedStringBox.getValue().isEmpty())
23
+ return;
24
+
25
+ auto fragments = attributedStringBox.getValue().getFragments();
26
+ auto outerFragment = fragments[0];
27
+
28
+ DWRITE_FONT_STYLE style = DWRITE_FONT_STYLE_NORMAL;
29
+ if (outerFragment.textAttributes.fontStyle == facebook::react::FontStyle::Italic)
30
+ style = DWRITE_FONT_STYLE_ITALIC;
31
+ else if (outerFragment.textAttributes.fontStyle == facebook::react::FontStyle::Oblique)
32
+ style = DWRITE_FONT_STYLE_OBLIQUE;
33
+
34
+ winrt::com_ptr<IDWriteTextFormat> spTextFormat;
35
+ winrt::check_hresult(Microsoft::ReactNative::DWriteFactory()->CreateTextFormat(
36
+ outerFragment.textAttributes.fontFamily.empty()
37
+ ? L"Segoe UI"
38
+ : Microsoft::Common::Unicode::Utf8ToUtf16(outerFragment.textAttributes.fontFamily).c_str(),
39
+ nullptr, // Font collection (nullptr sets it to use the system font collection).
40
+ static_cast<DWRITE_FONT_WEIGHT>(outerFragment.textAttributes.fontWeight.value_or(
41
+ static_cast<facebook::react::FontWeight>(DWRITE_FONT_WEIGHT_REGULAR))),
42
+ style,
43
+ DWRITE_FONT_STRETCH_NORMAL,
44
+ outerFragment.textAttributes.fontSize,
45
+ L"",
46
+ spTextFormat.put()));
47
+
48
+ DWRITE_TEXT_ALIGNMENT alignment = DWRITE_TEXT_ALIGNMENT_LEADING;
49
+ if (textAlignment) {
50
+ switch (*textAlignment) {
51
+ case facebook::react::TextAlignment::Center:
52
+ alignment = DWRITE_TEXT_ALIGNMENT_CENTER;
53
+ break;
54
+ case facebook::react::TextAlignment::Justified:
55
+ alignment = DWRITE_TEXT_ALIGNMENT_JUSTIFIED;
56
+ break;
57
+ case facebook::react::TextAlignment::Left:
58
+ alignment = DWRITE_TEXT_ALIGNMENT_LEADING;
59
+ break;
60
+ case facebook::react::TextAlignment::Right:
61
+ alignment = DWRITE_TEXT_ALIGNMENT_TRAILING;
62
+ break;
63
+ // TODO use LTR values
64
+ case facebook::react::TextAlignment::Natural:
65
+ alignment = DWRITE_TEXT_ALIGNMENT_LEADING;
66
+ break;
67
+ default:
68
+ assert(false);
69
+ }
70
+ }
71
+ winrt::check_hresult(spTextFormat->SetTextAlignment(alignment));
72
+
73
+ auto str = Microsoft::Common::Unicode::Utf8ToUtf16(attributedStringBox.getValue().getString());
74
+
75
+ winrt::check_hresult(Microsoft::ReactNative::DWriteFactory()->CreateTextLayout(
76
+ str.c_str(), // The string to be laid out and formatted.
77
+ static_cast<UINT32>(str.length()), // The length of the string.
78
+ spTextFormat.get(), // The text format to apply to the string (contains font information, etc).
79
+ layoutConstraints.maximumSize.width, // The width of the layout box.
80
+ layoutConstraints.maximumSize.height, // The height of the layout box.
81
+ spTextLayout.put() // The IDWriteTextLayout interface pointer.
82
+ ));
83
+
84
+ unsigned int position = 0;
85
+ unsigned int length = 0;
86
+ for (const auto &fragment : fragments) {
87
+ length = static_cast<UINT32>(fragment.string.length());
88
+ DWRITE_TEXT_RANGE range = {position, length};
89
+ TextAttributes attributes = fragment.textAttributes;
90
+ DWRITE_FONT_STYLE fragmentStyle = DWRITE_FONT_STYLE_NORMAL;
91
+ if (attributes.fontStyle == facebook::react::FontStyle::Italic)
92
+ fragmentStyle = DWRITE_FONT_STYLE_ITALIC;
93
+ else if (attributes.fontStyle == facebook::react::FontStyle::Oblique)
94
+ fragmentStyle = DWRITE_FONT_STYLE_OBLIQUE;
95
+
96
+ winrt::check_hresult(spTextLayout->SetFontFamilyName(
97
+ attributes.fontFamily.empty() ? L"Segoe UI"
98
+ : Microsoft::Common::Unicode::Utf8ToUtf16(attributes.fontFamily).c_str(),
99
+ range));
100
+ winrt::check_hresult(spTextLayout->SetFontWeight(
101
+ static_cast<DWRITE_FONT_WEIGHT>(
102
+ attributes.fontWeight.value_or(static_cast<facebook::react::FontWeight>(DWRITE_FONT_WEIGHT_REGULAR))),
103
+ range));
104
+ winrt::check_hresult(spTextLayout->SetFontStyle(fragmentStyle, range));
105
+ winrt::check_hresult(spTextLayout->SetFontSize(attributes.fontSize, range));
106
+
107
+ position += length;
108
+ }
109
+ }
18
110
 
19
- // TODO: This is a placeholder implementation to get basic text rendering. This should not be considered a real
20
- // implementation. It currently has various performance issues (like creating a new factory on every run), and only
21
- // handles single strings, and makes all kinds of assumptions around things like locale, font family etc. This whole
22
- // implementation will need to be replaced to get text rendering/layout to work properly.
23
111
  TextMeasurement TextLayoutManager::measure(
24
112
  AttributedStringBox attributedStringBox,
25
113
  ParagraphAttributes paragraphAttributes,
26
114
  LayoutConstraints layoutConstraints) const {
27
- winrt::com_ptr<IDWriteFactory> spDWriteFactory;
28
- DWriteCreateFactory(
29
- DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory), reinterpret_cast<IUnknown **>(spDWriteFactory.put()));
30
-
31
- for (auto &fragment : attributedStringBox.getValue().getFragments()) {
32
- DWRITE_FONT_STYLE style = DWRITE_FONT_STYLE_NORMAL;
33
- if (fragment.textAttributes.fontStyle == facebook::react::FontStyle::Italic)
34
- style = DWRITE_FONT_STYLE_ITALIC;
35
- else if (fragment.textAttributes.fontStyle == facebook::react::FontStyle::Oblique)
36
- style = DWRITE_FONT_STYLE_OBLIQUE;
37
-
38
- winrt::com_ptr<IDWriteTextFormat> spTextFormat;
39
- spDWriteFactory->CreateTextFormat(
40
- fragment.textAttributes.fontFamily.empty()
41
- ? L"Segoe UI"
42
- : Microsoft::Common::Unicode::Utf8ToUtf16(fragment.textAttributes.fontFamily).c_str(),
43
- NULL, // Font collection (NULL sets it to use the system font collection).
44
- static_cast<DWRITE_FONT_WEIGHT>(fragment.textAttributes.fontWeight.value_or(
45
- static_cast<facebook::react::FontWeight>(DWRITE_FONT_WEIGHT_REGULAR))),
46
- style,
47
- DWRITE_FONT_STRETCH_NORMAL,
48
- fragment.textAttributes.fontSize,
49
- L"en-us",
50
- spTextFormat.put());
51
-
52
- auto str = Microsoft::Common::Unicode::Utf8ToUtf16(fragment.string);
53
-
54
- winrt::com_ptr<IDWriteTextLayout> spTextLayout;
55
- spDWriteFactory->CreateTextLayout(
56
- str.c_str(), // The string to be laid out and formatted.
57
- static_cast<UINT32>(str.length()), // The length of the string.
58
- spTextFormat.get(), // The text format to apply to the string (contains font information, etc).
59
- layoutConstraints.maximumSize.width, // The width of the layout box.
60
- layoutConstraints.maximumSize.height, // The height of the layout box.
61
- spTextLayout.put() // The IDWriteTextLayout interface pointer.
62
- );
63
-
64
- TextMeasurement tm;
65
-
66
- DWRITE_TEXT_METRICS dtm;
67
- spTextLayout->GetMetrics(&dtm);
115
+ winrt::com_ptr<IDWriteTextLayout> spTextLayout;
116
+
117
+ GetTextLayout(attributedStringBox, paragraphAttributes, layoutConstraints, TextAlignment::Left, spTextLayout);
118
+
119
+ TextMeasurement tm{};
120
+ if (spTextLayout) {
121
+ DWRITE_TEXT_METRICS dtm{};
122
+ winrt::check_hresult(spTextLayout->GetMetrics(&dtm));
68
123
  tm.size = {dtm.width, dtm.height};
69
- return tm;
70
124
  }
125
+ return tm;
126
+ }
71
127
 
128
+ /**
129
+ * Measures an AttributedString on the platform, as identified by some
130
+ * opaque cache ID.
131
+ */
132
+ TextMeasurement TextLayoutManager::measureCachedSpannableById(
133
+ int64_t cacheId,
134
+ ParagraphAttributes const &paragraphAttributes,
135
+ LayoutConstraints layoutConstraints) const {
136
+ assert(false);
72
137
  return {};
73
- };
138
+ }
74
139
 
75
140
  LinesMeasurements TextLayoutManager::measureLines(
76
141
  AttributedString attributedString,
77
142
  ParagraphAttributes paragraphAttributes,
78
143
  Size size) const {
79
144
  assert(false);
80
-
81
- std::vector<LineMeasurement> paragraphLines{};
82
- return paragraphLines;
145
+ return {};
83
146
  }
84
147
 
85
148
  void *TextLayoutManager::getNativeTextLayoutManager() const {
86
149
  return (void *)this;
87
150
  }
88
151
 
89
- } // namespace react
90
- } // namespace facebook
152
+ } // namespace facebook::react
@@ -3,6 +3,7 @@
3
3
 
4
4
  #pragma once
5
5
 
6
+ #include <dwrite.h>
6
7
  #include <react/renderer/attributedstring/AttributedString.h>
7
8
  #include <react/renderer/attributedstring/AttributedStringBox.h>
8
9
  #include <react/renderer/attributedstring/ParagraphAttributes.h>
@@ -27,7 +28,7 @@ class TextLayoutManager {
27
28
 
28
29
  #pragma region required interface from core cxx cross platform impl
29
30
  TextLayoutManager(const ContextContainer::Shared &contextContainer) : m_contextContainer(contextContainer){};
30
- ~TextLayoutManager();
31
+ ~TextLayoutManager() = default;
31
32
 
32
33
  /*
33
34
  * Measures `attributedStringBox` using native text rendering infrastructure.
@@ -44,12 +45,28 @@ class TextLayoutManager {
44
45
  LinesMeasurements measureLines(AttributedString attributedString, ParagraphAttributes paragraphAttributes, Size size)
45
46
  const;
46
47
 
48
+ /**
49
+ * Measures an AttributedString on the platform, as identified by some
50
+ * opaque cache ID.
51
+ */
52
+ TextMeasurement measureCachedSpannableById(
53
+ int64_t cacheId,
54
+ ParagraphAttributes const &paragraphAttributes,
55
+ LayoutConstraints layoutConstraints) const;
56
+
47
57
  /*
48
58
  * Returns an opaque pointer to platform-specific TextLayoutManager.
49
59
  * Is used on a native views layer to delegate text rendering to the manager.
50
60
  */
51
61
  void *getNativeTextLayoutManager() const;
52
62
 
63
+ static void GetTextLayout(
64
+ AttributedStringBox attributedStringBox,
65
+ ParagraphAttributes paragraphAttributes,
66
+ LayoutConstraints layoutConstraints,
67
+ const std::optional<TextAlignment> &textAlignment,
68
+ winrt::com_ptr<IDWriteTextLayout> &spTextLayout) noexcept;
69
+
53
70
  #pragma endregion
54
71
 
55
72
  private:
@@ -88,18 +88,18 @@ namespace Microsoft.ReactNative
88
88
  )
89
89
  void OnPointerEvent(Object view, ReactPointerEventArgs args);
90
90
  };
91
-
91
+
92
92
  [webhosthidden]
93
93
  DOC_STRING(
94
94
  "Enables view managers to track when views are"
95
- "removed from the shadow tree."
95
+ "removed from their shadow trees. "
96
96
  )
97
97
  interface IViewManagerWithDropViewInstance {
98
98
  DOC_STRING(
99
99
  "Invoked when React has removed the view "
100
100
  "from its shadow tree. Note this method call is distinct from "
101
101
  "the XAML Unloaded event, which is asynchronously triggered "
102
- "when the view is removed from the UI tree."
102
+ "from when the removal of the view from the UI tree happens. "
103
103
  )
104
104
  void OnDropViewInstance(XAML_NAMESPACE.FrameworkElement view);
105
105
  };