react-native-windows 0.68.1 → 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 (392) 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/Base/CoreNativeModules.cpp +1 -4
  150. package/Microsoft.ReactNative/DynamicReader.cpp +3 -3
  151. package/Microsoft.ReactNative/Fabric/ComponentView.h +1 -0
  152. package/Microsoft.ReactNative/Fabric/ComponentViewRegistry.cpp +36 -2
  153. package/Microsoft.ReactNative/Fabric/ComponentViewRegistry.h +1 -0
  154. package/Microsoft.ReactNative/Fabric/DWriteHelpers.cpp +19 -0
  155. package/Microsoft.ReactNative/Fabric/DWriteHelpers.h +13 -0
  156. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +65 -19
  157. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +2 -0
  158. package/Microsoft.ReactNative/Fabric/ParagraphComponentView.cpp +36 -10
  159. package/Microsoft.ReactNative/Fabric/ScrollViewComponentView.cpp +2 -0
  160. package/Microsoft.ReactNative/Fabric/SliderComponentView.cpp +107 -0
  161. package/Microsoft.ReactNative/Fabric/SliderComponentView.h +51 -0
  162. package/Microsoft.ReactNative/Fabric/SwitchComponentView.cpp +109 -0
  163. package/Microsoft.ReactNative/Fabric/SwitchComponentView.h +52 -0
  164. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputComponentDescriptor.h +197 -0
  165. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputComponentView.cpp +308 -0
  166. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputComponentView.h +52 -0
  167. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputEventEmitter.cpp +31 -0
  168. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputEventEmitter.h +33 -0
  169. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputProps.cpp +81 -0
  170. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputProps.h +132 -0
  171. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputShadowNode.cpp +193 -0
  172. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputShadowNode.h +85 -0
  173. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputState.cpp +76 -0
  174. package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputState.h +99 -0
  175. package/Microsoft.ReactNative/Fabric/ViewComponentView.cpp +35 -3
  176. package/Microsoft.ReactNative/Fabric/ViewComponentView.h +1 -0
  177. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rncore/EventEmitters.h +5 -0
  178. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rncore/Props.h +5 -0
  179. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/slider/SliderMeasurementsManager.cpp +46 -0
  180. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/slider/SliderMeasurementsManager.h +30 -0
  181. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/Color.cpp +2 -0
  182. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/conversions.h +1 -9
  183. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/platform/cxx/react/renderer/graphics/Color.h +3 -1
  184. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.cpp +119 -57
  185. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.h +18 -1
  186. package/Microsoft.ReactNative/IViewManager.idl +3 -3
  187. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +13 -107
  188. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +2 -2
  189. package/Microsoft.ReactNative/Modules/AppStateModule.cpp +2 -0
  190. package/Microsoft.ReactNative/Modules/AppStateModule.h +2 -0
  191. package/Microsoft.ReactNative/Modules/CreateModules.cpp +3 -3
  192. package/Microsoft.ReactNative/Modules/NativeUIManager.cpp +7 -5
  193. package/Microsoft.ReactNative/Modules/TimingModule.cpp +2 -2
  194. package/Microsoft.ReactNative/Modules/TimingModule.h +2 -2
  195. package/Microsoft.ReactNative/ReactHost/{ReactContext.cpp → MsoReactContext.cpp} +1 -1
  196. package/Microsoft.ReactNative/ReactHost/{ReactContext.h → MsoReactContext.h} +0 -0
  197. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +15 -2
  198. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.h +1 -1
  199. package/Microsoft.ReactNative/ReactHost/ReactNativeHeaders.h +1 -1
  200. package/Microsoft.ReactNative/ReactInstanceSettings.idl +12 -2
  201. package/Microsoft.ReactNative/ReactPackageBuilder.cpp +1 -1
  202. package/Microsoft.ReactNative/ReactRootView.cpp +2 -1
  203. package/Microsoft.ReactNative/RedBox.cpp +3 -2
  204. package/Microsoft.ReactNative/TurboModulesProvider.cpp +3 -2
  205. package/Microsoft.ReactNative/TurboModulesProvider.h +4 -1
  206. package/Microsoft.ReactNative/Utils/LocalBundleReader.cpp +41 -0
  207. package/Microsoft.ReactNative/Utils/ValueUtils.cpp +3 -2
  208. package/Microsoft.ReactNative/Views/ControlViewManager.cpp +32 -0
  209. package/Microsoft.ReactNative/Views/ControlViewManager.h +11 -0
  210. package/Microsoft.ReactNative/Views/DevMenu.cpp +2 -2
  211. package/Microsoft.ReactNative/Views/FrameworkElementTransferProperties.cpp +13 -2
  212. package/Microsoft.ReactNative/Views/FrameworkElementViewManager.cpp +149 -22
  213. package/Microsoft.ReactNative/Views/Image/ImageViewManager.cpp +1 -1
  214. package/Microsoft.ReactNative/Views/Image/Microsoft.UI.Composition.Effects_Impl.h +5 -11
  215. package/Microsoft.ReactNative/Views/Image/ReactImage.cpp +2 -1
  216. package/Microsoft.ReactNative/Views/SliderViewManager.cpp +12 -4
  217. package/Microsoft.ReactNative/Views/TextInputViewManager.cpp +1 -1
  218. package/Microsoft.ReactNative/Views/TextViewManager.cpp +2 -2
  219. package/Microsoft.ReactNative/Views/TouchEventHandler.cpp +163 -37
  220. package/Microsoft.ReactNative/Views/TouchEventHandler.h +11 -4
  221. package/Microsoft.ReactNative/Views/ViewPanel.cpp +3 -23
  222. package/Microsoft.ReactNative/Views/ViewPanel.h +2 -3
  223. package/Microsoft.ReactNative/Views/ViewViewManager.cpp +21 -0
  224. package/Microsoft.ReactNative/XamlUIService.cpp +1 -1
  225. package/Microsoft.ReactNative/XamlView.h +8 -3
  226. package/Microsoft.ReactNative.Cxx/CppWinRTIncludes.h +3 -5
  227. package/Microsoft.ReactNative.Cxx/DesktopWindowBridge.h +1 -1
  228. package/Microsoft.ReactNative.Cxx/JSI/JsiAbiApi.cpp +11 -2
  229. package/Microsoft.ReactNative.Cxx/JSI/JsiAbiApi.h +1 -0
  230. package/Microsoft.ReactNative.Cxx/JSI/NodeApiJsiRuntime.cpp +19 -14
  231. package/Microsoft.ReactNative.Cxx/JSI/NodeApiJsiRuntime.h +4 -0
  232. package/Microsoft.ReactNative.Cxx/JSValueReader.h +2 -2
  233. package/Microsoft.ReactNative.Cxx/JSValueWriter.h +5 -5
  234. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +5 -1
  235. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems.filters +2 -3
  236. package/Microsoft.ReactNative.Cxx/NativeModules.h +3 -3
  237. package/Microsoft.ReactNative.Cxx/ReactContext.h +3 -3
  238. package/Microsoft.ReactNative.Cxx/ReactNonAbiValue.h +3 -3
  239. package/Microsoft.ReactNative.Cxx/XamlUtils.h +44 -5
  240. package/Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj +0 -6
  241. package/Mso/activeObject/activeObject.h +2 -2
  242. package/Mso/compilerAdapters/cppMacros.h +3 -5
  243. package/Mso/errorCode/errorProvider.h +2 -2
  244. package/Mso/errorCode/maybe.h +4 -4
  245. package/Mso/functional/functor.h +6 -6
  246. package/Mso/functional/functorRef.h +2 -2
  247. package/Mso/future/details/executor.h +2 -2
  248. package/Mso/future/details/futureFuncInl.h +4 -4
  249. package/Mso/future/details/ifuture.h +3 -3
  250. package/Mso/future/details/maybeInvoker.h +6 -6
  251. package/Mso/future/details/promiseGroupInl.h +4 -4
  252. package/Mso/future/details/promiseInl.h +4 -4
  253. package/Mso/future/details/resultTraits.h +4 -4
  254. package/Mso/future/details/whenAllInl.h +1 -1
  255. package/Mso/future/future.h +13 -13
  256. package/Mso/guid/msoGuidDetails.h +1 -1
  257. package/Mso/memoryApi/memoryApi.h +13 -7
  258. package/Mso/motifCpp/gTestAdapter.h +1 -1
  259. package/Mso/motifCpp/testInfo.h +7 -9
  260. package/Mso/object/make.h +8 -8
  261. package/Mso/object/objectRefCount.h +3 -5
  262. package/Mso/object/objectWithWeakRef.h +10 -14
  263. package/Mso/object/queryCast.h +4 -4
  264. package/Mso/object/refCountedObject.h +4 -4
  265. package/Mso/object/unknownObject.h +7 -7
  266. package/Mso/platformAdapters/windowsFirst.h +1 -1
  267. package/Mso/smartPtr/cntPtr.h +8 -8
  268. package/Mso/src/dispatchQueue/threadPoolScheduler_win.cpp +96 -4
  269. package/Mso/src/dispatchQueue/uiScheduler_winrt.cpp +2 -2
  270. package/Mso/src/future/futureImpl.h +1 -1
  271. package/Mso/src/memoryApi/memoryApi.cpp +4 -4
  272. package/PropertySheets/CppAppConsumeCSharpModule.props +3 -0
  273. package/PropertySheets/External/Microsoft.ReactNative.WinAppSDK.CSharpApp.props +26 -0
  274. package/PropertySheets/External/Microsoft.ReactNative.WinAppSDK.Common.props +12 -0
  275. package/PropertySheets/Generated/PackageVersion.g.props +3 -3
  276. package/PropertySheets/JSEngine.props +1 -1
  277. package/PropertySheets/React.Cpp.props +13 -0
  278. package/PropertySheets/WinUI.props +3 -6
  279. package/ReactCommon/ReactCommon.vcxproj +2 -4
  280. package/ReactCommon/ReactCommon.vcxproj.filters +4 -1
  281. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/JSCRuntime.cpp +1480 -0
  282. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/decorator.h +753 -0
  283. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/jsi.h +1331 -0
  284. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +1431 -0
  285. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/CallbackWrapper.h +103 -0
  286. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.h +87 -0
  287. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleUtils.h +61 -0
  288. package/ReactCommon/Yoga.cpp +1 -1
  289. package/Scripts/{Microsoft.ReactNative.ProjectReunion.nuspec → Microsoft.ReactNative.WindowsAppSDK.nuspec} +7 -9
  290. package/Scripts/OfficeReact.Win32.nuspec +1 -3
  291. package/Scripts/Tfs/Layout-MSRN-Headers.ps1 +2 -1
  292. package/Scripts/copyRNLibraries.js +8 -8
  293. package/Scripts/just.js +1 -1
  294. package/Scripts/rnw-dependencies.ps1 +41 -10
  295. package/Scripts/run-desktop-integration-tests.js +6 -6
  296. package/Shared/AbiSafe.h +3 -3
  297. package/Shared/BaseScriptStoreImpl.cpp +1 -1
  298. package/Shared/CppRuntimeOptions.h +50 -0
  299. package/Shared/CreateModules.h +4 -0
  300. package/Shared/DevSupportManager.cpp +34 -33
  301. package/Shared/DevSupportManager.h +1 -2
  302. package/Shared/HermesRuntimeHolder.cpp +23 -14
  303. package/Shared/HermesRuntimeHolder.h +8 -2
  304. package/Shared/IDevSupportManager.h +1 -2
  305. package/Shared/InspectorPackagerConnection.cpp +7 -5
  306. package/Shared/InspectorPackagerConnection.h +2 -2
  307. package/Shared/JSI/ChakraApi.cpp +0 -1
  308. package/Shared/JSI/ChakraRuntime.cpp +1 -2
  309. package/Shared/JSI/NapiJsiV8RuntimeHolder.h +1 -1
  310. package/Shared/JSI/RuntimeHolder.h +2 -0
  311. package/Shared/Modules/HttpModule.cpp +198 -0
  312. package/Shared/Modules/HttpModule.h +53 -0
  313. package/Shared/Modules/WebSocketModule.cpp +5 -1
  314. package/Shared/Modules/WebSocketModule.h +8 -5
  315. package/Shared/Networking/IHttpResource.h +53 -0
  316. package/Shared/{IWebSocketResource.h → Networking/IWebSocketResource.h} +3 -3
  317. package/Shared/Networking/OriginPolicy.h +15 -0
  318. package/Shared/Networking/OriginPolicyHttpFilter.cpp +746 -0
  319. package/Shared/Networking/OriginPolicyHttpFilter.h +112 -0
  320. package/Shared/Networking/WinRTHttpResource.cpp +347 -0
  321. package/Shared/Networking/WinRTHttpResource.h +67 -0
  322. package/Shared/Networking/WinRTTypes.h +30 -0
  323. package/Shared/{WinRTWebSocketResource.cpp → Networking/WinRTWebSocketResource.cpp} +31 -22
  324. package/Shared/{WinRTWebSocketResource.h → Networking/WinRTWebSocketResource.h} +3 -3
  325. package/Shared/OInstance.cpp +37 -11
  326. package/Shared/RuntimeOptions.cpp +93 -15
  327. package/Shared/RuntimeOptions.h +22 -9
  328. package/Shared/Shared.vcxitems +126 -5
  329. package/Shared/Shared.vcxitems.filters +55 -15
  330. package/Shared/Threading/BatchingQueueThread.cpp +1 -1
  331. package/Shared/Utils/WinRTConversions.cpp +22 -0
  332. package/Shared/Utils/WinRTConversions.h +15 -0
  333. package/Shared/tracing/fbsystrace.h +2 -2
  334. package/codegen/NativeActionSheetManagerSpec.g.h +6 -0
  335. package/codegen/NativeAnimatedModuleSpec.g.h +43 -37
  336. package/codegen/NativeAnimatedTurboModuleSpec.g.h +43 -37
  337. package/codegen/NativePushNotificationManagerIOSSpec.g.h +2 -0
  338. package/codegen/react/components/rnwcore/ComponentDescriptors.h +0 -1
  339. package/codegen/react/components/rnwcore/EventEmitters.cpp +133 -0
  340. package/codegen/react/components/rnwcore/EventEmitters.h +0 -18
  341. package/codegen/react/components/rnwcore/Props.cpp +0 -13
  342. package/codegen/react/components/rnwcore/Props.h +0 -16
  343. package/codegen/react/components/rnwcore/ShadowNodes.cpp +0 -1
  344. package/codegen/react/components/rnwcore/ShadowNodes.h +0 -10
  345. package/include/Shared/cdebug.h +9 -9
  346. package/index.js +30 -25
  347. package/index.windows.js +30 -25
  348. package/jest/preprocessor.js +24 -107
  349. package/jest/preprocessor_DO_NOT_USE.js +122 -0
  350. package/metro.config.js +3 -70
  351. package/package.json +29 -28
  352. package/react-native.config.js +40 -6
  353. package/rntypes/index.d.ts +19 -7
  354. package/stubs/glog/logging.h +1 -1
  355. package/template/cpp-app/src/App.h +0 -4
  356. package/template/cs-app/src/App.xaml.cs +0 -5
  357. package/template/cs-app/src/MainPage.xaml.cs +1 -10
  358. package/template/cs-app-WinAppSDK/MyApp/App.xaml +16 -0
  359. package/template/cs-app-WinAppSDK/MyApp/App.xaml.cs +70 -0
  360. package/template/cs-app-WinAppSDK/MyApp/MainWindow.xaml +14 -0
  361. package/template/cs-app-WinAppSDK/MyApp/MainWindow.xaml.cs +38 -0
  362. package/template/cs-app-WinAppSDK/MyApp/Package.appxmanifest +48 -0
  363. package/template/cs-app-WinAppSDK/MyApp/Properties/PublishProfiles/win10-arm64.pubxml +19 -0
  364. package/template/cs-app-WinAppSDK/MyApp/Properties/PublishProfiles/win10-x64.pubxml +19 -0
  365. package/template/cs-app-WinAppSDK/MyApp/Properties/PublishProfiles/win10-x86.pubxml +19 -0
  366. package/template/cs-app-WinAppSDK/MyApp/Properties/launchSettings.json +10 -0
  367. package/template/cs-app-WinAppSDK/MyApp/app.manifest +15 -0
  368. package/template/cs-app-WinAppSDK/proj/ExperimentalFeatures.props +23 -0
  369. package/template/cs-app-WinAppSDK/proj/MyApp.csproj +49 -0
  370. package/template/cs-app-WinAppSDK/proj/MyApp.sln +43 -0
  371. package/template/cs-app-WinAppSDK/proj/NuGet.Config +17 -0
  372. package/template/metro.devMode.config.js +2 -51
  373. package/typings-index.js +5 -1
  374. package/typings-index.js.map +1 -1
  375. package/Libraries/Components/SegmentedControlIOS/RCTSegmentedControlNativeComponent.js +0 -44
  376. package/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.android.js +0 -45
  377. package/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.ios.js +0 -123
  378. package/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.windows.js +0 -45
  379. package/Libraries/Components/View/ReactNativeViewViewConfig.js +0 -360
  380. package/Libraries/Components/View/ReactNativeViewViewConfig.windows.js +0 -390
  381. package/Libraries/Components/View/ReactNativeViewViewConfigAndroid.js +0 -83
  382. package/Libraries/ReactNative/UIManagerInjection.js +0 -15
  383. package/Libraries/Renderer/implementations/ReactFabric-dev.fb.js +0 -24527
  384. package/Libraries/Renderer/implementations/ReactFabric-prod.fb.js +0 -8309
  385. package/Libraries/Renderer/implementations/ReactFabric-profiling.fb.js +0 -8961
  386. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.fb.js +0 -24948
  387. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.fb.js +0 -8400
  388. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.fb.js +0 -9049
  389. package/PropertySheets/CppEnablePackageReferences.props +0 -13
  390. package/Shared/IHttpResource.h +0 -34
  391. package/Shared/cdebug.cpp +0 -6
  392. package/include/Shared/ViewManager.h +0 -34
@@ -0,0 +1,197 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+
4
+ #pragma once
5
+
6
+ #include "WindowsTextInputShadowNode.h"
7
+
8
+ #include <yoga/CompactValue.h>
9
+ #include <yoga/YGEnums.h>
10
+ #include <yoga/YGValue.h>
11
+
12
+ #include <react/renderer/core/ConcreteComponentDescriptor.h>
13
+
14
+ namespace facebook {
15
+ namespace react {
16
+
17
+ // [Windows
18
+ void InitTextInputThemeInfo(const Mso::React::IReactContext &reactContext) {
19
+ xaml::Thickness textBoxPadding;
20
+ xaml::Application::Current().Resources().TryLookup(winrt::box_value(L"TextControlThemePadding")).as(textBoxPadding);
21
+ winrt::Microsoft::ReactNative::ReactPropertyBag(reactContext.Properties())
22
+ .Set(winrt::Microsoft::ReactNative::ReactPropertyId<xaml::Thickness>(L"TextBoxDefaultPadding"), textBoxPadding);
23
+ }
24
+
25
+ YGStyle::Edges PaddingFromContext(const facebook::react::ContextContainer &contextContainer) {
26
+ auto context = contextContainer.at<winrt::Microsoft::ReactNative::ReactContext>("MSRN.ReactContext");
27
+ auto defaultPadding = *context.Properties().Get(
28
+ winrt::Microsoft::ReactNative::ReactPropertyId<xaml::Thickness>(L"TextBoxDefaultPadding"));
29
+ YGStyle::Edges theme;
30
+ theme[YGEdgeStart] = YGValue{static_cast<float>(defaultPadding.Left), YGUnitPoint};
31
+ theme[YGEdgeEnd] = YGValue{static_cast<float>(defaultPadding.Right), YGUnitPoint};
32
+ theme[YGEdgeTop] = YGValue{static_cast<float>(defaultPadding.Top), YGUnitPoint};
33
+ theme[YGEdgeBottom] = YGValue{static_cast<float>(defaultPadding.Bottom), YGUnitPoint};
34
+ return theme;
35
+ }
36
+ // Windows]
37
+
38
+ /*
39
+ * Descriptor for <WindowsTextInput> component.
40
+ */
41
+ class WindowsTextInputComponentDescriptor final : public ConcreteComponentDescriptor<WindowsTextInputShadowNode> {
42
+ public:
43
+ WindowsTextInputComponentDescriptor(ComponentDescriptorParameters const &parameters)
44
+ : ConcreteComponentDescriptor<WindowsTextInputShadowNode>(parameters) {
45
+ // Every single `WindowsTextInputShadowNode` will have a reference to
46
+ // a shared `TextLayoutManager`.
47
+ textLayoutManager_ = std::make_shared<TextLayoutManager>(contextContainer_);
48
+ }
49
+
50
+ virtual State::Shared createInitialState(ShadowNodeFragment const &fragment, ShadowNodeFamily::Shared const &family)
51
+ const override {
52
+ /*
53
+ int surfaceId = family->getSurfaceId();
54
+
55
+ YGStyle::Edges theme;
56
+ // TODO: figure out RTL/start/end/left/right stuff here
57
+ if (surfaceIdToThemePaddingMap_.find(surfaceId) !=
58
+ surfaceIdToThemePaddingMap_.end()) {
59
+ theme = surfaceIdToThemePaddingMap_[surfaceId];
60
+ } else {
61
+ const jni::global_ref<jobject> &fabricUIManager =
62
+ contextContainer_->at<jni::global_ref<jobject>>("FabricUIManager");
63
+
64
+ auto env = jni::Environment::current();
65
+ auto defaultTextInputPaddingArray = env->NewFloatArray(4);
66
+ static auto getThemeData =
67
+ jni::findClassStatic(UIManagerJavaDescriptor)
68
+ ->getMethod<jboolean(jint, jfloatArray)>("getThemeData");
69
+
70
+ if (getThemeData(
71
+ fabricUIManager, surfaceId, defaultTextInputPaddingArray)) {
72
+ jfloat *defaultTextInputPadding =
73
+ env->GetFloatArrayElements(defaultTextInputPaddingArray, 0);
74
+ theme[YGEdgeStart] = (YGValue){defaultTextInputPadding[0], YGUnitPoint};
75
+ theme[YGEdgeEnd] = (YGValue){defaultTextInputPadding[1], YGUnitPoint};
76
+ theme[YGEdgeTop] = (YGValue){defaultTextInputPadding[2], YGUnitPoint};
77
+ theme[YGEdgeBottom] =
78
+ (YGValue){defaultTextInputPadding[3], YGUnitPoint};
79
+ surfaceIdToThemePaddingMap_.emplace(std::make_pair(surfaceId, theme));
80
+ env->ReleaseFloatArrayElements(
81
+ defaultTextInputPaddingArray, defaultTextInputPadding, JNI_ABORT);
82
+ }
83
+ env->DeleteLocalRef(defaultTextInputPaddingArray);
84
+ }
85
+ */
86
+
87
+ auto theme = PaddingFromContext(*contextContainer_); // [Windows]
88
+
89
+ return std::make_shared<WindowsTextInputShadowNode::ConcreteState>(
90
+ std::make_shared<WindowsTextInputState const>(WindowsTextInputState(
91
+ 0,
92
+ {},
93
+ {},
94
+ {},
95
+ {},
96
+ {},
97
+ ((YGValue)theme[YGEdgeStart]).value,
98
+ ((YGValue)theme[YGEdgeEnd]).value,
99
+ ((YGValue)theme[YGEdgeTop]).value,
100
+ ((YGValue)theme[YGEdgeBottom]).value)),
101
+ family);
102
+ }
103
+
104
+ protected:
105
+ void adopt(ShadowNode::Unshared const &shadowNode) const override {
106
+ auto textInputShadowNode = std::static_pointer_cast<WindowsTextInputShadowNode>(shadowNode);
107
+
108
+ // `ParagraphShadowNode` uses `TextLayoutManager` to measure text content
109
+ // and communicate text rendering metrics to mounting layer.
110
+ textInputShadowNode->setTextLayoutManager(textLayoutManager_);
111
+
112
+ textInputShadowNode->setContextContainer(const_cast<ContextContainer *>(getContextContainer().get()));
113
+
114
+ /*
115
+ int surfaceId = textInputShadowNode->getSurfaceId();
116
+ if (surfaceIdToThemePaddingMap_.find(surfaceId) !=
117
+ surfaceIdToThemePaddingMap_.end()) */
118
+ {
119
+ // YGStyle::Edges theme = surfaceIdToThemePaddingMap_[surfaceId];
120
+
121
+ auto theme = PaddingFromContext(*contextContainer_); // [Windows]
122
+
123
+ // Override padding
124
+ // Node is still unsealed during adoption, before layout is complete
125
+ // TODO: T62959168 account for RTL and paddingLeft when setting default
126
+ // paddingStart, and vice-versa with paddingRight/paddingEnd.
127
+ // For now this assumes no RTL.
128
+ YGStyle::Edges result = textInputShadowNode->getConcreteProps().yogaStyle.padding();
129
+ bool changedPadding = false;
130
+ if (!textInputShadowNode->getConcreteProps().hasPadding &&
131
+ !textInputShadowNode->getConcreteProps().hasPaddingStart &&
132
+ !textInputShadowNode->getConcreteProps().hasPaddingLeft &&
133
+ !textInputShadowNode->getConcreteProps().hasPaddingHorizontal) {
134
+ changedPadding = true;
135
+ result[YGEdgeStart] = theme[YGEdgeStart];
136
+ }
137
+ if (!textInputShadowNode->getConcreteProps().hasPadding &&
138
+ !textInputShadowNode->getConcreteProps().hasPaddingEnd &&
139
+ !textInputShadowNode->getConcreteProps().hasPaddingRight &&
140
+ !textInputShadowNode->getConcreteProps().hasPaddingHorizontal) {
141
+ changedPadding = true;
142
+ result[YGEdgeEnd] = theme[YGEdgeEnd];
143
+ }
144
+ if (!textInputShadowNode->getConcreteProps().hasPadding &&
145
+ !textInputShadowNode->getConcreteProps().hasPaddingTop &&
146
+ !textInputShadowNode->getConcreteProps().hasPaddingVertical) {
147
+ changedPadding = true;
148
+ result[YGEdgeTop] = theme[YGEdgeTop];
149
+ }
150
+ if (!textInputShadowNode->getConcreteProps().hasPadding &&
151
+ !textInputShadowNode->getConcreteProps().hasPaddingBottom &&
152
+ !textInputShadowNode->getConcreteProps().hasPaddingVertical) {
153
+ changedPadding = true;
154
+ result[YGEdgeBottom] = theme[YGEdgeBottom];
155
+ }
156
+
157
+ // If the TextInput initially does not have paddingLeft or paddingStart, a
158
+ // paddingStart may be set from the theme. If that happens, when there's a
159
+ // paddingLeft update, we must explicitly unset paddingStart... (same with
160
+ // paddingEnd)
161
+ // TODO: support RTL
162
+ if ((textInputShadowNode->getConcreteProps().hasPadding ||
163
+ textInputShadowNode->getConcreteProps().hasPaddingLeft ||
164
+ textInputShadowNode->getConcreteProps().hasPaddingHorizontal) &&
165
+ !textInputShadowNode->getConcreteProps().hasPaddingStart) {
166
+ result[YGEdgeStart] = YGValueUndefined;
167
+ }
168
+ if ((textInputShadowNode->getConcreteProps().hasPadding ||
169
+ textInputShadowNode->getConcreteProps().hasPaddingRight ||
170
+ textInputShadowNode->getConcreteProps().hasPaddingHorizontal) &&
171
+ !textInputShadowNode->getConcreteProps().hasPaddingEnd) {
172
+ result[YGEdgeEnd] = YGValueUndefined;
173
+ }
174
+
175
+ // Note that this is expensive: on every adopt, we need to set the Yoga
176
+ // props again, which normally only happens during prop parsing. Every
177
+ // commit, state update, etc, will incur this cost.
178
+ if (changedPadding) {
179
+ // Set new props on node
180
+ const_cast<WindowsTextInputProps &>(textInputShadowNode->getConcreteProps()).yogaStyle.padding() = result;
181
+ // Communicate new props to Yoga part of the node
182
+ textInputShadowNode->updateYogaProps();
183
+ }
184
+ }
185
+
186
+ textInputShadowNode->dirtyLayout();
187
+ textInputShadowNode->enableMeasurement();
188
+
189
+ ConcreteComponentDescriptor::adopt(shadowNode);
190
+ }
191
+
192
+ private:
193
+ SharedTextLayoutManager textLayoutManager_;
194
+ };
195
+
196
+ } // namespace react
197
+ } // namespace facebook
@@ -0,0 +1,308 @@
1
+
2
+ // Copyright (c) Microsoft Corporation.
3
+ // Licensed under the MIT License.
4
+
5
+ #pragma once
6
+
7
+ #include "WindowsTextInputComponentView.h"
8
+
9
+ #include <UI.Xaml.Controls.h>
10
+ #include <Utils/ValueUtils.h>
11
+ #include <unicode.h>
12
+ #include "WindowsTextInputShadowNode.h"
13
+ #include "WindowsTextInputState.h"
14
+
15
+ namespace Microsoft::ReactNative {
16
+
17
+ facebook::react::AttributedString WindowsTextInputComponentView::getAttributedString() const {
18
+ // Use BaseTextShadowNode to get attributed string from children
19
+
20
+ auto childTextAttributes = facebook::react::TextAttributes::defaultTextAttributes();
21
+
22
+ childTextAttributes.apply(m_props->textAttributes);
23
+
24
+ auto attributedString = facebook::react::AttributedString{};
25
+ // auto attachments = facebook::react::BaseTextShadowNode::Attachments{};
26
+
27
+ // BaseTextShadowNode only gets children. We must detect and prepend text
28
+ // value attributes manually.
29
+ auto text = winrt::to_string(m_element.Text());
30
+ if (!text.empty()) {
31
+ auto textAttributes = facebook::react::TextAttributes::defaultTextAttributes();
32
+ textAttributes.apply(m_props->textAttributes);
33
+ auto fragment = facebook::react::AttributedString::Fragment{};
34
+ fragment.string = text;
35
+ fragment.textAttributes = textAttributes;
36
+ fragment.textAttributes.backgroundColor = facebook::react::clearColor();
37
+ attributedString.prependFragment(fragment);
38
+ }
39
+
40
+ return attributedString;
41
+ }
42
+
43
+ WindowsTextInputComponentView::WindowsTextInputComponentView() {
44
+ static auto const defaultProps = std::make_shared<facebook::react::WindowsTextInputProps const>();
45
+ m_props = defaultProps;
46
+
47
+ m_textChangedRevoker =
48
+ m_element.TextChanged(winrt::auto_revoke, [this](auto sender, xaml::Controls::TextChangedEventArgs args) {
49
+ auto data = m_state->getData();
50
+ data.attributedString = getAttributedString();
51
+ data.mostRecentEventCount = m_nativeEventCount;
52
+ m_state->updateState(std::move(data));
53
+
54
+ if (m_eventEmitter && !m_comingFromJS) {
55
+ auto emitter = std::static_pointer_cast<const facebook::react::WindowsTextInputEventEmitter>(m_eventEmitter);
56
+ facebook::react::WindowsTextInputEventEmitter::OnChange onChangeArgs;
57
+ onChangeArgs.text = winrt::to_string(m_element.Text());
58
+ onChangeArgs.eventCount = ++m_nativeEventCount;
59
+ emitter->onChange(onChangeArgs);
60
+ }
61
+ });
62
+
63
+ m_SelectionChangedRevoker = m_element.SelectionChanged(winrt::auto_revoke, [this](auto sender, auto args) {
64
+ if (m_eventEmitter) {
65
+ auto emitter = std::static_pointer_cast<const facebook::react::WindowsTextInputEventEmitter>(m_eventEmitter);
66
+ facebook::react::WindowsTextInputEventEmitter::OnSelectionChange onSelectionChangeArgs;
67
+ onSelectionChangeArgs.selection.start = m_element.SelectionStart();
68
+ onSelectionChangeArgs.selection.end = m_element.SelectionStart() + m_element.SelectionLength();
69
+ emitter->onSelectionChange(onSelectionChangeArgs);
70
+ }
71
+ });
72
+ }
73
+
74
+ void WindowsTextInputComponentView::handleCommand(std::string const &commandName, folly::dynamic const &arg) noexcept {
75
+ if (commandName == "setTextAndSelection") {
76
+ auto eventCount = arg[0].asInt();
77
+
78
+ if (eventCount >= m_nativeEventCount) {
79
+ auto text = arg[1].asString();
80
+ auto begin = arg[2].asInt();
81
+ auto end = arg[3].asInt();
82
+ m_comingFromJS = true;
83
+ SetText(winrt::to_hstring(text));
84
+
85
+ if (!(begin < 0 || end < 0 || begin > end)) {
86
+ m_element.Select(static_cast<int32_t>(begin), static_cast<int32_t>(end - begin));
87
+ }
88
+ m_comingFromJS = false;
89
+ }
90
+ } else {
91
+ Super::handleCommand(commandName, arg);
92
+ }
93
+ }
94
+
95
+ std::vector<facebook::react::ComponentDescriptorProvider>
96
+ WindowsTextInputComponentView::supplementalComponentDescriptorProviders() noexcept {
97
+ return {};
98
+ }
99
+
100
+ void WindowsTextInputComponentView::mountChildComponentView(
101
+ const IComponentView &childComponentView,
102
+ uint32_t index) noexcept {
103
+ assert(false);
104
+ }
105
+
106
+ void WindowsTextInputComponentView::unmountChildComponentView(
107
+ const IComponentView &childComponentView,
108
+ uint32_t index) noexcept {
109
+ assert(false);
110
+ }
111
+
112
+ void WindowsTextInputComponentView::updateProps(
113
+ facebook::react::Props::Shared const &props,
114
+ facebook::react::Props::Shared const &oldProps) noexcept {
115
+ const auto &oldTextInputProps = *std::static_pointer_cast<const facebook::react::WindowsTextInputProps>(m_props);
116
+ const auto &newTextInputProps = *std::static_pointer_cast<const facebook::react::WindowsTextInputProps>(props);
117
+
118
+ if (oldTextInputProps.textAttributes.foregroundColor != newTextInputProps.textAttributes.foregroundColor) {
119
+ if (newTextInputProps.textAttributes.foregroundColor)
120
+ m_element.Foreground(newTextInputProps.textAttributes.foregroundColor.AsWindowsBrush());
121
+ else
122
+ m_element.ClearValue(::xaml::Controls::TextBlock::ForegroundProperty());
123
+ }
124
+
125
+ if (oldTextInputProps.textAttributes.fontSize != newTextInputProps.textAttributes.fontSize) {
126
+ if (std::isnan(newTextInputProps.textAttributes.fontSize)) {
127
+ m_element.FontSize(facebook::react::TextAttributes::defaultTextAttributes().fontSize);
128
+ } else {
129
+ m_element.FontSize(newTextInputProps.textAttributes.fontSize);
130
+ }
131
+ }
132
+
133
+ if (oldTextInputProps.textAttributes.fontWeight != newTextInputProps.textAttributes.fontWeight) {
134
+ m_element.FontWeight(winrt::Windows::UI::Text::FontWeight{static_cast<uint16_t>(
135
+ newTextInputProps.textAttributes.fontWeight.value_or(static_cast<facebook::react::FontWeight>(400)))});
136
+ }
137
+
138
+ if (oldTextInputProps.textAttributes.fontStyle != newTextInputProps.textAttributes.fontStyle) {
139
+ switch (newTextInputProps.textAttributes.fontStyle.value_or(facebook::react::FontStyle::Normal)) {
140
+ case facebook::react::FontStyle::Italic:
141
+ m_element.FontStyle(winrt::Windows::UI::Text::FontStyle::Italic);
142
+ break;
143
+ case facebook::react::FontStyle::Normal:
144
+ m_element.FontStyle(winrt::Windows::UI::Text::FontStyle::Normal);
145
+ break;
146
+ case facebook::react::FontStyle::Oblique:
147
+ m_element.FontStyle(winrt::Windows::UI::Text::FontStyle::Oblique);
148
+ break;
149
+ default:
150
+ assert(false);
151
+ }
152
+ }
153
+
154
+ if (oldTextInputProps.textAttributes.fontFamily != newTextInputProps.textAttributes.fontFamily) {
155
+ if (newTextInputProps.textAttributes.fontFamily.empty())
156
+ m_element.FontFamily(xaml::Media::FontFamily(L"Segoe UI"));
157
+ else
158
+ m_element.FontFamily(xaml::Media::FontFamily(
159
+ Microsoft::Common::Unicode::Utf8ToUtf16(newTextInputProps.textAttributes.fontFamily)));
160
+ }
161
+
162
+ if (oldTextInputProps.allowFontScaling != newTextInputProps.allowFontScaling) {
163
+ m_element.IsTextScaleFactorEnabled(newTextInputProps.allowFontScaling);
164
+ }
165
+
166
+ if (oldTextInputProps.maxLength != newTextInputProps.maxLength) {
167
+ m_element.MaxLength(newTextInputProps.maxLength);
168
+ }
169
+
170
+ if (oldTextInputProps.placeholder != newTextInputProps.placeholder) {
171
+ m_element.PlaceholderText(winrt::to_hstring(newTextInputProps.placeholder));
172
+ }
173
+
174
+ if (oldTextInputProps.editable != newTextInputProps.editable) {
175
+ m_element.IsReadOnly(!newTextInputProps.editable);
176
+ }
177
+
178
+ /*
179
+ if (oldTextInputProps.multiline != newTextInputProps.multiline) {
180
+ m_element.TextWrapping(newTextInputProps.multiline ? xaml::TextWrapping::Wrap : xaml::TextWrapping::NoWrap);
181
+ m_element.AcceptsReturn(newTextInputProps.multiline);
182
+ }
183
+ */
184
+
185
+ if (oldTextInputProps.selection.start != newTextInputProps.selection.start ||
186
+ oldTextInputProps.selection.end != newTextInputProps.selection.end) {
187
+ m_element.Select(
188
+ newTextInputProps.selection.start, newTextInputProps.selection.end - newTextInputProps.selection.start);
189
+ }
190
+
191
+ if (oldTextInputProps.autoCapitalize != newTextInputProps.autoCapitalize) {
192
+ if (newTextInputProps.autoCapitalize == "characters") {
193
+ m_element.CharacterCasing(xaml::Controls::CharacterCasing::Upper);
194
+ } else { // anything else turns off autoCap (should be "None" but
195
+ // we don't support "words"/"senetences" yet)
196
+ m_element.CharacterCasing(xaml::Controls::CharacterCasing::Normal);
197
+ }
198
+ }
199
+
200
+ if (oldTextInputProps.backgroundColor != newTextInputProps.backgroundColor) {
201
+ if (newTextInputProps.backgroundColor) {
202
+ m_element.Background(newTextInputProps.backgroundColor.AsWindowsBrush());
203
+ } else {
204
+ m_element.ClearValue(xaml::Controls::Control::BackgroundProperty());
205
+ }
206
+ }
207
+
208
+ if (oldTextInputProps.borderColors != newTextInputProps.borderColors) {
209
+ if (newTextInputProps.borderColors.all) {
210
+ m_element.BorderBrush(newTextInputProps.borderColors.all->AsWindowsBrush());
211
+ } else {
212
+ m_element.ClearValue(xaml::Controls::Control::BorderBrushProperty());
213
+ }
214
+ }
215
+
216
+ m_props = std::static_pointer_cast<facebook::react::WindowsTextInputProps const>(props);
217
+ }
218
+
219
+ void WindowsTextInputComponentView::updateState(
220
+ facebook::react::State::Shared const &state,
221
+ facebook::react::State::Shared const &oldState) noexcept {
222
+ m_state = std::static_pointer_cast<facebook::react::WindowsTextInputShadowNode::ConcreteState const>(state);
223
+
224
+ if (!m_state) {
225
+ assert(false && "State is `null` for <TextInput> component.");
226
+ m_element.Text(L"");
227
+ return;
228
+ }
229
+
230
+ auto data = m_state->getData();
231
+
232
+ if (!oldState) {
233
+ m_mostRecentEventCount = m_state->getData().mostRecentEventCount;
234
+ }
235
+
236
+ if (m_mostRecentEventCount == m_state->getData().mostRecentEventCount) {
237
+ m_comingFromState = true;
238
+ // Only handle single/empty fragments right now -- ignore the other fragments
239
+ SetText(
240
+ m_state->getData().attributedString.getFragments().size()
241
+ ? winrt::to_hstring(m_state->getData().attributedString.getFragments()[0].string)
242
+ : L"");
243
+ m_comingFromState = false;
244
+ }
245
+ }
246
+
247
+ void WindowsTextInputComponentView::SetText(winrt::hstring text) noexcept {
248
+ auto oldCursor = m_element.SelectionStart();
249
+ auto oldSelectionLength = m_element.SelectionLength();
250
+ auto oldValue = m_element.Text();
251
+ auto newValue = text;
252
+ if (oldValue != newValue) {
253
+ m_element.Text(newValue);
254
+ if (oldValue.size() == newValue.size()) {
255
+ m_element.SelectionStart(oldCursor);
256
+ } else {
257
+ m_element.SelectionStart(newValue.size());
258
+ }
259
+ }
260
+ }
261
+
262
+ void WindowsTextInputComponentView::updateLayoutMetrics(
263
+ facebook::react::LayoutMetrics const &layoutMetrics,
264
+ facebook::react::LayoutMetrics const &oldLayoutMetrics) noexcept {
265
+ // Set Position & Size Properties
266
+
267
+ m_layoutMetrics = layoutMetrics;
268
+
269
+ m_element.BorderThickness(
270
+ {m_layoutMetrics.borderWidth.left,
271
+ m_layoutMetrics.borderWidth.top,
272
+ m_layoutMetrics.borderWidth.right,
273
+ m_layoutMetrics.borderWidth.bottom});
274
+
275
+ winrt::Microsoft::ReactNative::ViewPanel::SetLeft(m_element, layoutMetrics.frame.origin.x);
276
+ winrt::Microsoft::ReactNative::ViewPanel::SetTop(m_element, layoutMetrics.frame.origin.y);
277
+
278
+ m_element.MinHeight(0);
279
+
280
+ m_element.Padding({
281
+ layoutMetrics.contentInsets.left - layoutMetrics.borderWidth.left,
282
+ layoutMetrics.contentInsets.top - layoutMetrics.borderWidth.top,
283
+ layoutMetrics.contentInsets.right - layoutMetrics.borderWidth.right,
284
+ layoutMetrics.contentInsets.bottom - layoutMetrics.borderWidth.bottom,
285
+ });
286
+
287
+ m_element.ClearValue(xaml::FrameworkElement::HeightProperty());
288
+ m_element.ClearValue(xaml::FrameworkElement::WidthProperty());
289
+ m_element.Measure({std::numeric_limits<float>::infinity(), std::numeric_limits<float>::infinity()});
290
+ auto ds = m_element.DesiredSize();
291
+
292
+ m_element.Width(layoutMetrics.frame.size.width);
293
+ m_element.Height(layoutMetrics.frame.size.height);
294
+ }
295
+ void WindowsTextInputComponentView::finalizeUpdates(RNComponentViewUpdateMask updateMask) noexcept {
296
+ // m_element.FinalizeProperties();
297
+ }
298
+ void WindowsTextInputComponentView::prepareForRecycle() noexcept {}
299
+ facebook::react::SharedProps WindowsTextInputComponentView::props() noexcept {
300
+ assert(false);
301
+ return {};
302
+ }
303
+
304
+ const xaml::FrameworkElement WindowsTextInputComponentView::Element() const noexcept {
305
+ return m_element;
306
+ }
307
+
308
+ } // namespace Microsoft::ReactNative
@@ -0,0 +1,52 @@
1
+
2
+ // Copyright (c) Microsoft Corporation.
3
+ // Licensed under the MIT License.
4
+
5
+ #pragma once
6
+
7
+ #include "../ComponentView.h"
8
+ #include "../ViewComponentView.h"
9
+ #include "WindowsTextInputProps.h"
10
+ #include "WindowsTextInputShadowNode.h"
11
+
12
+ namespace Microsoft::ReactNative {
13
+
14
+ struct WindowsTextInputComponentView : BaseComponentView {
15
+ using Super = BaseComponentView;
16
+ WindowsTextInputComponentView();
17
+
18
+ std::vector<facebook::react::ComponentDescriptorProvider> supplementalComponentDescriptorProviders() noexcept
19
+ override;
20
+ void mountChildComponentView(const IComponentView &childComponentView, uint32_t index) noexcept override;
21
+ void unmountChildComponentView(const IComponentView &childComponentView, uint32_t index) noexcept override;
22
+ void updateProps(facebook::react::Props::Shared const &props, facebook::react::Props::Shared const &oldProps) noexcept
23
+ override;
24
+ void updateState(facebook::react::State::Shared const &state, facebook::react::State::Shared const &oldState) noexcept
25
+ override;
26
+ void updateLayoutMetrics(
27
+ facebook::react::LayoutMetrics const &layoutMetrics,
28
+ facebook::react::LayoutMetrics const &oldLayoutMetrics) noexcept override;
29
+ void finalizeUpdates(RNComponentViewUpdateMask updateMask) noexcept override;
30
+ void prepareForRecycle() noexcept override;
31
+ facebook::react::SharedProps props() noexcept override;
32
+ void handleCommand(std::string const &commandName, folly::dynamic const &arg) noexcept override;
33
+
34
+ virtual const xaml::FrameworkElement Element() const noexcept override;
35
+
36
+ private:
37
+ void SetText(winrt::hstring text) noexcept;
38
+ facebook::react::AttributedString getAttributedString() const;
39
+
40
+ facebook::react::LayoutMetrics m_layoutMetrics;
41
+ xaml::Controls::TextBox m_element;
42
+ xaml::Controls::TextBox::TextChanged_revoker m_textChangedRevoker;
43
+ xaml::Controls::TextBox::SelectionChanged_revoker m_SelectionChangedRevoker;
44
+ std::shared_ptr<facebook::react::WindowsTextInputProps const> m_props;
45
+ std::shared_ptr<facebook::react::WindowsTextInputShadowNode::ConcreteState const> m_state;
46
+ int64_t m_mostRecentEventCount{0};
47
+ int m_nativeEventCount{0};
48
+ bool m_comingFromJS{false};
49
+ bool m_comingFromState{false};
50
+ };
51
+
52
+ } // namespace Microsoft::ReactNative
@@ -0,0 +1,31 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+
4
+ #pragma once
5
+
6
+ #include "WindowsTextInputEventEmitter.h"
7
+
8
+ namespace facebook::react {
9
+
10
+ void WindowsTextInputEventEmitter::onChange(OnChange event) const {
11
+ dispatchEvent("change", [event = std::move(event)](jsi::Runtime &runtime) {
12
+ auto payload = jsi::Object(runtime);
13
+ payload.setProperty(runtime, "eventCount", event.eventCount);
14
+ payload.setProperty(runtime, "target", event.target);
15
+ payload.setProperty(runtime, "text", event.text);
16
+ return payload;
17
+ });
18
+ }
19
+
20
+ void WindowsTextInputEventEmitter::onSelectionChange(const OnSelectionChange &event) const {
21
+ dispatchEvent("textInputSelectionChange", [event = std::move(event)](jsi::Runtime &runtime) {
22
+ auto payload = jsi::Object(runtime);
23
+ auto selection = jsi::Object(runtime);
24
+ selection.setProperty(runtime, "start", event.selection.start);
25
+ selection.setProperty(runtime, "end", event.selection.end);
26
+ payload.setProperty(runtime, "selection", selection);
27
+ return payload;
28
+ });
29
+ }
30
+
31
+ } // namespace facebook::react
@@ -0,0 +1,33 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+
4
+ #pragma once
5
+
6
+ #include <react/renderer/components/view/ViewEventEmitter.h>
7
+
8
+ namespace facebook::react {
9
+
10
+ class WindowsTextInputEventEmitter : public ViewEventEmitter {
11
+ public:
12
+ using ViewEventEmitter::ViewEventEmitter;
13
+
14
+ struct Selection {
15
+ int start;
16
+ int end;
17
+ };
18
+
19
+ struct OnChange {
20
+ int eventCount;
21
+ int target;
22
+ std::string text;
23
+ };
24
+
25
+ struct OnSelectionChange {
26
+ Selection selection;
27
+ };
28
+
29
+ void onChange(OnChange value) const;
30
+ void onSelectionChange(const OnSelectionChange &value) const;
31
+ };
32
+
33
+ } // namespace facebook::react