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
@@ -0,0 +1,81 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+
4
+ #pragma once
5
+
6
+ #include "WindowsTextInputProps.h"
7
+
8
+ namespace facebook::react {
9
+
10
+ static bool
11
+ hasValue(const RawProps &rawProps, bool defaultValue, const char *name, const char *prefix, const char *suffix) {
12
+ auto rawValue = rawProps.at(name, prefix, suffix);
13
+
14
+ // No change to prop - use default
15
+ if (rawValue == nullptr) {
16
+ return defaultValue;
17
+ }
18
+
19
+ // Value passed from JS
20
+ if (rawValue->hasValue()) {
21
+ return true;
22
+ }
23
+
24
+ // Null/undefined passed in, indicating that we should use the default
25
+ // platform value - thereby resetting this
26
+ return false;
27
+ }
28
+
29
+ WindowsTextInputProps::WindowsTextInputProps(
30
+ const PropsParserContext &context,
31
+ const WindowsTextInputProps &sourceProps,
32
+ const RawProps &rawProps)
33
+ : ViewProps(context, sourceProps, rawProps),
34
+ BaseTextProps(context, sourceProps, rawProps),
35
+
36
+ /*
37
+ traits(convertRawProp(context, rawProps, sourceProps.traits, {})),
38
+ paragraphAttributes(convertRawProp(
39
+ context,
40
+ rawProps,
41
+ sourceProps.paragraphAttributes,
42
+ {})),
43
+ */
44
+
45
+ allowFontScaling(convertRawProp(context, rawProps, "allowFontScaling", sourceProps.allowFontScaling, {true})),
46
+ clearTextOnFocus(convertRawProp(context, rawProps, "clearTextOnFocus", sourceProps.clearTextOnFocus, {false})),
47
+ editable(convertRawProp(context, rawProps, "editable", sourceProps.editable, {true})),
48
+ maxLength(convertRawProp(context, rawProps, "maxLength", sourceProps.maxLength, {0})),
49
+ multiline(convertRawProp(context, rawProps, "multiline", sourceProps.multiline, {false})),
50
+ placeholder(convertRawProp(context, rawProps, "placeholder", sourceProps.placeholder, {})),
51
+ placeholderTextColor(
52
+ convertRawProp(context, rawProps, "placeholderTextColor", sourceProps.placeholderTextColor, {})),
53
+ scrollEnabled(convertRawProp(context, rawProps, "scrollEnabled", sourceProps.scrollEnabled, {true})),
54
+ selection(convertRawProp(context, rawProps, "selection", sourceProps.selection, {})),
55
+ selectionColor(convertRawProp(context, rawProps, "selectionColor", sourceProps.selectionColor, {})),
56
+ selectTextOnFocus(convertRawProp(context, rawProps, "selectTextOnFocus", sourceProps.selectTextOnFocus, {false})),
57
+ spellCheck(convertRawProp(context, rawProps, "spellCheck", sourceProps.spellCheck, {false})),
58
+ text(convertRawProp(context, rawProps, "text", sourceProps.text, {})),
59
+ mostRecentEventCount(
60
+ convertRawProp(context, rawProps, "mostRecentEventCount", sourceProps.mostRecentEventCount, {0})),
61
+ secureTextEntry(convertRawProp(context, rawProps, "secureTextEntry", sourceProps.secureTextEntry, {false})),
62
+ keyboardType(convertRawProp(context, rawProps, "keyboardType", sourceProps.keyboardType, {})),
63
+ contextMenuHidden(convertRawProp(context, rawProps, "contextMenuHidden", sourceProps.contextMenuHidden, {false})),
64
+ caretHidden(convertRawProp(context, rawProps, "caretHidden", sourceProps.caretHidden, {false})),
65
+ autoCapitalize(convertRawProp(context, rawProps, "autoCapitalize", sourceProps.autoCapitalize, {})),
66
+ clearTextOnSubmit(convertRawProp(context, rawProps, "clearTextOnSubmit", sourceProps.clearTextOnSubmit, {false})),
67
+ submitKeyEvents(convertRawProp(context, rawProps, "submitKeyEvents", sourceProps.submitKeyEvents, {})),
68
+ autoFocus(convertRawProp(context, rawProps, "autoFocus", sourceProps.autoFocus, {false})),
69
+ // See AndroidTextInputComponentDescriptor for usage
70
+ // TODO T63008435: can these, and this feature, be removed entirely?
71
+ hasPadding(hasValue(rawProps, sourceProps.hasPadding, "", "padding", "")),
72
+ hasPaddingHorizontal(hasValue(rawProps, sourceProps.hasPaddingHorizontal, "Horizontal", "padding", "")),
73
+ hasPaddingVertical(hasValue(rawProps, sourceProps.hasPaddingVertical, "Vertical", "padding", "")),
74
+ hasPaddingLeft(hasValue(rawProps, sourceProps.hasPaddingLeft, "Left", "padding", "")),
75
+ hasPaddingTop(hasValue(rawProps, sourceProps.hasPaddingTop, "Top", "padding", "")),
76
+ hasPaddingRight(hasValue(rawProps, sourceProps.hasPaddingRight, "Right", "padding", "")),
77
+ hasPaddingBottom(hasValue(rawProps, sourceProps.hasPaddingBottom, "Bottom", "padding", "")),
78
+ hasPaddingStart(hasValue(rawProps, sourceProps.hasPaddingStart, "Start", "padding", "")),
79
+ hasPaddingEnd(hasValue(rawProps, sourceProps.hasPaddingEnd, "End", "padding", "")) {}
80
+
81
+ } // namespace facebook::react
@@ -0,0 +1,132 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+
4
+ #pragma once
5
+
6
+ #include <react/renderer/components/rnwcore/Props.h>
7
+ #include <react/renderer/components/text/BaseTextProps.h>
8
+ #include <react/renderer/core/propsConversions.h>
9
+
10
+ namespace facebook::react {
11
+
12
+ struct WindowsTextInputSelectionStruct {
13
+ int start;
14
+ int end;
15
+ };
16
+
17
+ static inline void
18
+ fromRawValue(const PropsParserContext &context, const RawValue &value, WindowsTextInputSelectionStruct &result) {
19
+ auto map = (butter::map<std::string, RawValue>)value;
20
+
21
+ auto tmp_start = map.find("start");
22
+ if (tmp_start != map.end()) {
23
+ fromRawValue(context, tmp_start->second, result.start);
24
+ }
25
+ auto tmp_end = map.find("end");
26
+ if (tmp_end != map.end()) {
27
+ fromRawValue(context, tmp_end->second, result.end);
28
+ }
29
+ }
30
+
31
+ static inline std::string toString(const WindowsTextInputSelectionStruct &value) {
32
+ return "[Object WindowsTextInputSelectionStruct]";
33
+ }
34
+
35
+ struct WindowsTextInputSubmitKeyEventsStruct {
36
+ bool altKey;
37
+ bool ctrlKey;
38
+ bool metaKey;
39
+ bool shiftKey;
40
+ std::string code;
41
+ };
42
+
43
+ static inline void
44
+ fromRawValue(const PropsParserContext &context, const RawValue &value, WindowsTextInputSubmitKeyEventsStruct &result) {
45
+ auto map = (butter::map<std::string, RawValue>)value;
46
+
47
+ auto tmp_altKey = map.find("altKey");
48
+ if (tmp_altKey != map.end()) {
49
+ fromRawValue(context, tmp_altKey->second, result.altKey);
50
+ }
51
+ auto tmp_ctrlKey = map.find("ctrlKey");
52
+ if (tmp_ctrlKey != map.end()) {
53
+ fromRawValue(context, tmp_ctrlKey->second, result.ctrlKey);
54
+ }
55
+ auto tmp_metaKey = map.find("metaKey");
56
+ if (tmp_metaKey != map.end()) {
57
+ fromRawValue(context, tmp_metaKey->second, result.metaKey);
58
+ }
59
+ auto tmp_shiftKey = map.find("shiftKey");
60
+ if (tmp_shiftKey != map.end()) {
61
+ fromRawValue(context, tmp_shiftKey->second, result.shiftKey);
62
+ }
63
+ auto tmp_code = map.find("code");
64
+ if (tmp_code != map.end()) {
65
+ fromRawValue(context, tmp_code->second, result.code);
66
+ }
67
+ }
68
+
69
+ static inline std::string toString(const WindowsTextInputSubmitKeyEventsStruct &value) {
70
+ return "[Object WindowsTextInputSubmitKeyEventsStruct]";
71
+ }
72
+
73
+ static inline void fromRawValue(
74
+ const PropsParserContext &context,
75
+ const RawValue &value,
76
+ std::vector<WindowsTextInputSubmitKeyEventsStruct> &result) {
77
+ auto items = (std::vector<RawValue>)value;
78
+ for (const auto &item : items) {
79
+ WindowsTextInputSubmitKeyEventsStruct newItem;
80
+ fromRawValue(context, item, newItem);
81
+ result.emplace_back(newItem);
82
+ }
83
+ }
84
+
85
+ class WindowsTextInputProps final : public ViewProps, public BaseTextProps {
86
+ public:
87
+ WindowsTextInputProps() = default;
88
+ WindowsTextInputProps(
89
+ const PropsParserContext &context,
90
+ const WindowsTextInputProps &sourceProps,
91
+ const RawProps &rawProps);
92
+
93
+ bool allowFontScaling{true};
94
+ bool clearTextOnFocus{false};
95
+ bool editable{true};
96
+ int maxLength{0};
97
+ bool multiline{false};
98
+ std::string placeholder{};
99
+ SharedColor placeholderTextColor{};
100
+ bool scrollEnabled{true};
101
+ WindowsTextInputSelectionStruct selection{};
102
+ SharedColor selectionColor{};
103
+ bool selectTextOnFocus{false};
104
+ bool spellCheck{false};
105
+ std::string text{};
106
+ int mostRecentEventCount{0};
107
+ bool secureTextEntry{false};
108
+ std::string keyboardType{};
109
+ bool contextMenuHidden{false};
110
+ bool caretHidden{false};
111
+ std::string autoCapitalize{};
112
+ bool clearTextOnSubmit{false};
113
+ std::vector<WindowsTextInputSubmitKeyEventsStruct> submitKeyEvents{};
114
+ bool autoFocus{false};
115
+
116
+ /**
117
+ * Auxiliary information to detect if these props are set or not.
118
+ * See AndroidTextInputComponentDescriptor for usage.
119
+ * TODO T63008435: can these, and this feature, be removed entirely?
120
+ */
121
+ const bool hasPadding{};
122
+ const bool hasPaddingHorizontal{};
123
+ const bool hasPaddingVertical{};
124
+ const bool hasPaddingLeft{};
125
+ const bool hasPaddingTop{};
126
+ const bool hasPaddingRight{};
127
+ const bool hasPaddingBottom{};
128
+ const bool hasPaddingStart{};
129
+ const bool hasPaddingEnd{};
130
+ };
131
+
132
+ } // namespace facebook::react
@@ -0,0 +1,193 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+
4
+ #include "WindowsTextInputShadowNode.h"
5
+
6
+ #include <react/debug/react_native_assert.h>
7
+ #include <react/renderer/attributedstring/AttributedStringBox.h>
8
+ #include <react/renderer/attributedstring/TextAttributes.h>
9
+ #include <react/renderer/components/text/BaseTextShadowNode.h>
10
+ #include <react/renderer/core/LayoutConstraints.h>
11
+ #include <react/renderer/core/LayoutContext.h>
12
+ #include <react/renderer/core/conversions.h>
13
+
14
+ #include <utility>
15
+
16
+ namespace facebook {
17
+ namespace react {
18
+
19
+ extern const char WindowsTextInputComponentName[] = "WindowsTextInput";
20
+
21
+ void WindowsTextInputShadowNode::setContextContainer(ContextContainer *contextContainer) {
22
+ ensureUnsealed();
23
+ contextContainer_ = contextContainer;
24
+ }
25
+
26
+ AttributedString WindowsTextInputShadowNode::getAttributedString() const {
27
+ // Use BaseTextShadowNode to get attributed string from children
28
+ auto childTextAttributes = TextAttributes::defaultTextAttributes();
29
+ childTextAttributes.apply(getConcreteProps().textAttributes);
30
+
31
+ auto attributedString = AttributedString{};
32
+ auto attachments = BaseTextShadowNode::Attachments{};
33
+ BaseTextShadowNode::buildAttributedString(childTextAttributes, *this, attributedString, attachments);
34
+
35
+ // BaseTextShadowNode only gets children. We must detect and prepend text
36
+ // value attributes manually.
37
+ if (!getConcreteProps().text.empty()) {
38
+ auto textAttributes = TextAttributes::defaultTextAttributes();
39
+ textAttributes.apply(getConcreteProps().textAttributes);
40
+ auto fragment = AttributedString::Fragment{};
41
+ fragment.string = getConcreteProps().text;
42
+ fragment.textAttributes = textAttributes;
43
+ // If the TextInput opacity is 0 < n < 1, the opacity of the TextInput and
44
+ // text value's background will stack. This is a hack/workaround to prevent
45
+ // that effect.
46
+ fragment.textAttributes.backgroundColor = clearColor();
47
+ fragment.parentShadowView = ShadowView(*this);
48
+ attributedString.prependFragment(fragment);
49
+ }
50
+
51
+ return attributedString;
52
+ }
53
+
54
+ // For measurement purposes, we want to make sure that there's at least a
55
+ // single character in the string so that the measured height is greater
56
+ // than zero. Otherwise, empty TextInputs with no placeholder don't
57
+ // display at all.
58
+ // TODO T67606511: We will redefine the measurement of empty strings as part
59
+ // of T67606511
60
+ AttributedString WindowsTextInputShadowNode::getPlaceholderAttributedString() const {
61
+ // Return placeholder text, since text and children are empty.
62
+ auto textAttributedString = AttributedString{};
63
+ auto fragment = AttributedString::Fragment{};
64
+ fragment.string = getConcreteProps().placeholder;
65
+
66
+ if (fragment.string.empty()) {
67
+ fragment.string = BaseTextShadowNode::getEmptyPlaceholder();
68
+ }
69
+
70
+ auto textAttributes = TextAttributes::defaultTextAttributes();
71
+ textAttributes.apply(getConcreteProps().textAttributes);
72
+
73
+ // If there's no text, it's possible that this Fragment isn't actually
74
+ // appended to the AttributedString (see implementation of appendFragment)
75
+ fragment.textAttributes = textAttributes;
76
+ fragment.parentShadowView = ShadowView(*this);
77
+ textAttributedString.appendFragment(fragment);
78
+
79
+ return textAttributedString;
80
+ }
81
+
82
+ void WindowsTextInputShadowNode::setTextLayoutManager(SharedTextLayoutManager textLayoutManager) {
83
+ ensureUnsealed();
84
+ textLayoutManager_ = std::move(textLayoutManager);
85
+ }
86
+
87
+ AttributedString WindowsTextInputShadowNode::getMostRecentAttributedString() const {
88
+ auto const &state = getStateData();
89
+
90
+ auto reactTreeAttributedString = getAttributedString();
91
+
92
+ // Sometimes the treeAttributedString will only differ from the state
93
+ // not by inherent properties (string or prop attributes), but by the frame of
94
+ // the parent which has changed Thus, we can't directly compare the entire
95
+ // AttributedString
96
+ bool treeAttributedStringChanged =
97
+ !state.reactTreeAttributedString.compareTextAttributesWithoutFrame(reactTreeAttributedString);
98
+
99
+ return (!treeAttributedStringChanged ? state.attributedString : reactTreeAttributedString);
100
+ }
101
+
102
+ void WindowsTextInputShadowNode::updateStateIfNeeded() {
103
+ ensureUnsealed();
104
+
105
+ auto reactTreeAttributedString = getAttributedString();
106
+ auto const &state = getStateData();
107
+
108
+ // Tree is often out of sync with the value of the TextInput.
109
+ // This is by design - don't change the value of the TextInput in the State,
110
+ // and therefore in Java, unless the tree itself changes.
111
+ if (state.reactTreeAttributedString == reactTreeAttributedString) {
112
+ return;
113
+ }
114
+
115
+ // If props event counter is less than what we already have in state, skip it
116
+ if (getConcreteProps().mostRecentEventCount < state.mostRecentEventCount) {
117
+ return;
118
+ }
119
+
120
+ // Store default TextAttributes in state.
121
+ // In the case where the TextInput is completely empty (no value, no
122
+ // defaultValue, no placeholder, no children) there are therefore no fragments
123
+ // in the AttributedString, and when State is updated, it needs some way to
124
+ // reconstruct a Fragment with default TextAttributes.
125
+ auto defaultTextAttributes = TextAttributes::defaultTextAttributes();
126
+ defaultTextAttributes.apply(getConcreteProps().textAttributes);
127
+
128
+ auto newEventCount =
129
+ (state.reactTreeAttributedString == reactTreeAttributedString ? 0 : getConcreteProps().mostRecentEventCount);
130
+ auto newAttributedString = getMostRecentAttributedString();
131
+
132
+ // Even if we're here and updating state, it may be only to update the layout
133
+ // manager If that is the case, make sure we don't update text: pass in the
134
+ // current attributedString unchanged, and pass in zero for the "event count"
135
+ // so no changes are applied There's no way to prevent a state update from
136
+ // flowing to Java, so we just ensure it's a noop in those cases.
137
+ setStateData(WindowsTextInputState{
138
+ newEventCount,
139
+ newAttributedString,
140
+ reactTreeAttributedString,
141
+ {}, // [Windows] getConcreteProps().paragraphAttributes,
142
+ defaultTextAttributes,
143
+ ShadowView(*this),
144
+ state.defaultThemePaddingStart,
145
+ state.defaultThemePaddingEnd,
146
+ state.defaultThemePaddingTop,
147
+ state.defaultThemePaddingBottom});
148
+ }
149
+
150
+ #pragma mark - LayoutableShadowNode
151
+
152
+ Size WindowsTextInputShadowNode::measureContent(
153
+ LayoutContext const &layoutContext,
154
+ LayoutConstraints const &layoutConstraints) const {
155
+ if (getStateData().cachedAttributedStringId != 0) {
156
+ return textLayoutManager_
157
+ ->measureCachedSpannableById(
158
+ getStateData().cachedAttributedStringId,
159
+ {}, // [Windows] getConcreteProps().paragraphAttributes,
160
+ layoutConstraints)
161
+ .size;
162
+ }
163
+
164
+ // Layout is called right after measure.
165
+ // Measure is marked as `const`, and `layout` is not; so State can be updated
166
+ // during layout, but not during `measure`. If State is out-of-date in layout,
167
+ // it's too late: measure will have already operated on old State. Thus, we
168
+ // use the same value here that we *will* use in layout to update the state.
169
+ AttributedString attributedString = getMostRecentAttributedString();
170
+
171
+ if (attributedString.isEmpty()) {
172
+ attributedString = getPlaceholderAttributedString();
173
+ }
174
+
175
+ if (attributedString.isEmpty() && getStateData().mostRecentEventCount != 0) {
176
+ return {0, 0};
177
+ }
178
+
179
+ return textLayoutManager_
180
+ ->measure(
181
+ AttributedStringBox{attributedString},
182
+ {}, // TODO getConcreteProps().paragraphAttributes,
183
+ layoutConstraints)
184
+ .size;
185
+ }
186
+
187
+ void WindowsTextInputShadowNode::layout(LayoutContext layoutContext) {
188
+ updateStateIfNeeded();
189
+ ConcreteViewShadowNode::layout(layoutContext);
190
+ }
191
+
192
+ } // namespace react
193
+ } // namespace facebook
@@ -0,0 +1,85 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+
4
+ #pragma once
5
+
6
+ #include <butter/map.h>
7
+ #include <react/renderer/components/rnwcore/EventEmitters.h>
8
+ #include "WindowsTextInputEventEmitter.h"
9
+ #include "WindowsTextInputProps.h"
10
+ #include "WindowsTextInputState.h"
11
+
12
+ #include <react/renderer/components/view/ConcreteViewShadowNode.h>
13
+ #include <react/utils/ContextContainer.h>
14
+
15
+ #include <react/renderer/attributedstring/AttributedString.h>
16
+ #include <react/renderer/textlayoutmanager/TextLayoutManager.h>
17
+
18
+ namespace facebook {
19
+ namespace react {
20
+
21
+ extern const char WindowsTextInputComponentName[];
22
+
23
+ /*
24
+ * `ShadowNode` for <WindowsTextInput> component.
25
+ */
26
+ class WindowsTextInputShadowNode final : public ConcreteViewShadowNode<
27
+ WindowsTextInputComponentName,
28
+ WindowsTextInputProps,
29
+ WindowsTextInputEventEmitter,
30
+ WindowsTextInputState> {
31
+ public:
32
+ static ShadowNodeTraits BaseTraits() {
33
+ auto traits = ConcreteViewShadowNode::BaseTraits();
34
+ traits.set(ShadowNodeTraits::Trait::TextKind);
35
+ traits.set(ShadowNodeTraits::Trait::LeafYogaNode);
36
+ return traits;
37
+ }
38
+
39
+ using ConcreteViewShadowNode::ConcreteViewShadowNode;
40
+
41
+ void setContextContainer(ContextContainer *contextContainer);
42
+
43
+ /*
44
+ * Returns a `AttributedString` which represents text content of the node.
45
+ */
46
+ AttributedString getAttributedString() const;
47
+ AttributedString getPlaceholderAttributedString() const;
48
+
49
+ /*
50
+ * Associates a shared TextLayoutManager with the node.
51
+ * `ParagraphShadowNode` uses the manager to measure text content
52
+ * and construct `ParagraphState` objects.
53
+ */
54
+ void setTextLayoutManager(SharedTextLayoutManager textLayoutManager);
55
+
56
+ #pragma mark - LayoutableShadowNode
57
+
58
+ Size measureContent(LayoutContext const &layoutContext, LayoutConstraints const &layoutConstraints) const override;
59
+ void layout(LayoutContext layoutContext) override;
60
+
61
+ private:
62
+ ContextContainer *contextContainer_{};
63
+
64
+ /**
65
+ * Get the most up-to-date attributed string for measurement and State.
66
+ */
67
+ AttributedString getMostRecentAttributedString() const;
68
+
69
+ /*
70
+ * Creates a `State` object (with `AttributedText` and
71
+ * `TextLayoutManager`) if needed.
72
+ */
73
+ void updateStateIfNeeded();
74
+
75
+ SharedTextLayoutManager textLayoutManager_;
76
+
77
+ /*
78
+ * Cached attributed string that represents the content of the subtree started
79
+ * from the node.
80
+ */
81
+ mutable std::optional<AttributedString> cachedAttributedString_{};
82
+ };
83
+
84
+ } // namespace react
85
+ } // namespace facebook
@@ -0,0 +1,76 @@
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 "WindowsTextInputState.h"
9
+
10
+ #include <react/renderer/components/text/conversions.h>
11
+ #include <react/renderer/debug/debugStringConvertibleUtils.h>
12
+
13
+ #include <utility>
14
+
15
+ namespace facebook {
16
+ namespace react {
17
+
18
+ WindowsTextInputState::WindowsTextInputState(
19
+ int64_t mostRecentEventCount,
20
+ AttributedString attributedString,
21
+ AttributedString reactTreeAttributedString,
22
+ ParagraphAttributes paragraphAttributes,
23
+ TextAttributes defaultTextAttributes,
24
+ ShadowView defaultParentShadowView,
25
+ float defaultThemePaddingStart,
26
+ float defaultThemePaddingEnd,
27
+ float defaultThemePaddingTop,
28
+ float defaultThemePaddingBottom)
29
+ : mostRecentEventCount(mostRecentEventCount),
30
+ attributedString(std::move(attributedString)),
31
+ reactTreeAttributedString(std::move(reactTreeAttributedString)),
32
+ paragraphAttributes(std::move(paragraphAttributes)),
33
+ defaultTextAttributes(std::move(defaultTextAttributes)),
34
+ defaultParentShadowView(std::move(defaultParentShadowView)),
35
+ defaultThemePaddingStart(defaultThemePaddingStart),
36
+ defaultThemePaddingEnd(defaultThemePaddingEnd),
37
+ defaultThemePaddingTop(defaultThemePaddingTop),
38
+ defaultThemePaddingBottom(defaultThemePaddingBottom) {}
39
+
40
+ WindowsTextInputState::WindowsTextInputState(WindowsTextInputState const &previousState, folly::dynamic const &data)
41
+ : mostRecentEventCount(data.getDefault("mostRecentEventCount", previousState.mostRecentEventCount).getInt()),
42
+ cachedAttributedStringId(data.getDefault("opaqueCacheId", previousState.cachedAttributedStringId).getInt()),
43
+ attributedString(previousState.attributedString),
44
+ reactTreeAttributedString(previousState.reactTreeAttributedString),
45
+ paragraphAttributes(previousState.paragraphAttributes),
46
+ defaultTextAttributes(previousState.defaultTextAttributes),
47
+ defaultParentShadowView(previousState.defaultParentShadowView),
48
+ defaultThemePaddingStart(
49
+ data.getDefault("themePaddingStart", previousState.defaultThemePaddingStart).getDouble()),
50
+ defaultThemePaddingEnd(data.getDefault("themePaddingEnd", previousState.defaultThemePaddingEnd).getDouble()),
51
+ defaultThemePaddingTop(data.getDefault("themePaddingTop", previousState.defaultThemePaddingTop).getDouble()),
52
+ defaultThemePaddingBottom(
53
+ data.getDefault("themePaddingBottom", previousState.defaultThemePaddingBottom).getDouble()){};
54
+
55
+ #ifdef ANDROID
56
+ folly::dynamic AndroidTextInputState::getDynamic() const {
57
+ // Java doesn't need all fields, so we don't pass them all along.
58
+ folly::dynamic newState = folly::dynamic::object();
59
+
60
+ // If we have a `cachedAttributedStringId` we know that we're (1) not trying
61
+ // to set a new string, so we don't need to pass it along; (2) setState was
62
+ // called from Java to trigger a relayout with a `cachedAttributedStringId`,
63
+ // so Java has all up-to-date information and we should pass an empty map
64
+ // through.
65
+ if (cachedAttributedStringId == 0) {
66
+ newState["mostRecentEventCount"] = mostRecentEventCount;
67
+ newState["attributedString"] = toDynamic(attributedString);
68
+ newState["hash"] = newState["attributedString"]["hash"];
69
+ newState["paragraphAttributes"] = toDynamic(paragraphAttributes); // TODO: can we memoize this in Java?
70
+ }
71
+ return newState;
72
+ }
73
+ #endif
74
+
75
+ } // namespace react
76
+ } // namespace facebook
@@ -0,0 +1,99 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+
4
+ #pragma once
5
+
6
+ #include <react/renderer/attributedstring/AttributedString.h>
7
+ #include <react/renderer/attributedstring/ParagraphAttributes.h>
8
+ #include <react/renderer/textlayoutmanager/TextLayoutManager.h>
9
+
10
+ #ifdef ANDROID
11
+ #include <folly/dynamic.h>
12
+ #include <react/renderer/mapbuffer/MapBuffer.h>
13
+ #include <react/renderer/mapbuffer/MapBufferBuilder.h>
14
+ #endif
15
+
16
+ namespace facebook {
17
+ namespace react {
18
+
19
+ /*
20
+ * State for <WindowsTextInput> component.
21
+ */
22
+ class WindowsTextInputState final {
23
+ public:
24
+ int64_t mostRecentEventCount{0};
25
+
26
+ /**
27
+ * Stores an opaque cache ID used on the Java side to refer to a specific
28
+ * AttributedString for measurement purposes only.
29
+ */
30
+ int64_t cachedAttributedStringId{0};
31
+
32
+ /*
33
+ * All content of <TextInput> component represented as an `AttributedString`.
34
+ * Only set if changed from the React tree's perspective.
35
+ */
36
+ AttributedString attributedString{};
37
+
38
+ /*
39
+ * All content of <TextInput> component represented as an `AttributedString`.
40
+ * This stores the previous computed *from the React tree*. This usually
41
+ * doesn't change as the TextInput contents are being updated. If it does
42
+ * change, we need to wipe out current contents of the TextInput and replace
43
+ * with the new value from the tree.
44
+ */
45
+ AttributedString reactTreeAttributedString{};
46
+
47
+ /*
48
+ * Represents all visual attributes of a paragraph of text represented as
49
+ * a ParagraphAttributes.
50
+ */
51
+ ParagraphAttributes paragraphAttributes{};
52
+
53
+ /**
54
+ * Default TextAttributes used if we need to construct a new Fragment.
55
+ * Only used if text is inserted into an AttributedString with no existing
56
+ * Fragments.
57
+ */
58
+ TextAttributes defaultTextAttributes;
59
+
60
+ /**
61
+ * Default parent ShadowView used if we need to construct a new Fragment.
62
+ * Only used if text is inserted into an AttributedString with no existing
63
+ * Fragments.
64
+ */
65
+ ShadowView defaultParentShadowView;
66
+
67
+ /**
68
+ * Communicates Android theme padding back to the ShadowNode / Component
69
+ * Descriptor for layout.
70
+ */
71
+ float defaultThemePaddingStart{NAN};
72
+ float defaultThemePaddingEnd{NAN};
73
+ float defaultThemePaddingTop{NAN};
74
+ float defaultThemePaddingBottom{NAN};
75
+
76
+ WindowsTextInputState(
77
+ int64_t mostRecentEventCount,
78
+ AttributedString attributedString,
79
+ AttributedString reactTreeAttributedString,
80
+ ParagraphAttributes paragraphAttributes,
81
+ TextAttributes defaultTextAttributes,
82
+ ShadowView defaultParentShadowView,
83
+ float defaultThemePaddingStart,
84
+ float defaultThemePaddingEnd,
85
+ float defaultThemePaddingTop,
86
+ float defaultThemePaddingBottom);
87
+
88
+ WindowsTextInputState() = default;
89
+ WindowsTextInputState(WindowsTextInputState const &previousState, folly::dynamic const &data);
90
+ folly::dynamic getDynamic() const;
91
+ /* [Windows
92
+ MapBuffer getMapBuffer() const {
93
+ return MapBufferBuilder::EMPTY();
94
+ };
95
+ Windows] */
96
+ };
97
+
98
+ } // namespace react
99
+ } // namespace facebook