react-native-windows 0.81.1 → 0.82.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 (724) hide show
  1. package/.flowconfig +11 -10
  2. package/Directory.Build.props +3 -3
  3. package/Folly/Folly.vcxproj +1 -3
  4. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +7 -3
  5. package/Libraries/Alert/RCTAlertManager.android.js +4 -2
  6. package/Libraries/Animated/Animated.d.ts +2 -0
  7. package/Libraries/Animated/AnimatedEvent.js +1 -1
  8. package/Libraries/Animated/AnimatedExports.js.flow +1 -0
  9. package/Libraries/Animated/AnimatedImplementation.js +4 -2
  10. package/Libraries/Animated/AnimatedMock.js +1 -1
  11. package/Libraries/Animated/Easing.js +2 -0
  12. package/Libraries/Animated/NativeAnimatedAllowlist.js +1 -0
  13. package/Libraries/Animated/animations/Animation.js +19 -20
  14. package/Libraries/Animated/animations/TimingAnimation.js +2 -0
  15. package/Libraries/Animated/components/AnimatedScrollView.js +3 -2
  16. package/Libraries/Animated/components/AnimatedSectionList.js +1 -1
  17. package/Libraries/Animated/nodes/AnimatedColor.js +9 -9
  18. package/Libraries/Animated/nodes/AnimatedInterpolation.js +4 -4
  19. package/Libraries/Animated/nodes/AnimatedNode.js +14 -7
  20. package/Libraries/Animated/nodes/AnimatedObject.js +7 -7
  21. package/Libraries/Animated/nodes/AnimatedProps.js +32 -32
  22. package/Libraries/Animated/nodes/AnimatedStyle.js +23 -21
  23. package/Libraries/Animated/nodes/AnimatedTransform.js +6 -6
  24. package/Libraries/Animated/nodes/AnimatedValue.js +18 -18
  25. package/Libraries/AppState/AppState.js +8 -4
  26. package/Libraries/BatchedBridge/MessageQueue.js +4 -0
  27. package/Libraries/BatchedBridge/NativeModules.js +1 -1
  28. package/Libraries/Blob/BlobManager.js +1 -1
  29. package/Libraries/Blob/URLSearchParams.js +2 -0
  30. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +2 -2
  31. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js +2 -2
  32. package/Libraries/Components/Button.js +1 -1
  33. package/Libraries/Components/Button.windows.js +1 -1
  34. package/Libraries/Components/Flyout/FlyoutNativeComponent.js +2 -2
  35. package/Libraries/Components/Glyph/GlyphNativeComponent.js +1 -1
  36. package/Libraries/Components/Popup/PopupNativeComponent.js +1 -0
  37. package/Libraries/Components/Pressable/Pressable.d.ts +8 -0
  38. package/Libraries/Components/Pressable/Pressable.js +10 -1
  39. package/Libraries/Components/Pressable/Pressable.windows.js +30 -2
  40. package/Libraries/Components/Pressable/useAndroidRippleForView.js +2 -2
  41. package/Libraries/Components/ScrollView/ScrollView.js +13 -4
  42. package/Libraries/Components/ScrollView/ScrollView.windows.js +14 -5
  43. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +1 -1
  44. package/Libraries/Components/StatusBar/StatusBar.js +2 -2
  45. package/Libraries/Components/Switch/Switch.js +2 -2
  46. package/Libraries/Components/Switch/Switch.windows.js +2 -2
  47. package/Libraries/Components/TextInput/TextInput.flow.js +12 -5
  48. package/Libraries/Components/TextInput/TextInput.flow.windows.js +12 -5
  49. package/Libraries/Components/TextInput/TextInput.js +14 -5
  50. package/Libraries/Components/TextInput/TextInput.windows.js +23 -11
  51. package/Libraries/Components/TextInput/TextInputState.js +1 -1
  52. package/Libraries/Components/TextInput/TextInputState.windows.js +1 -1
  53. package/Libraries/Components/Touchable/TouchableBounce.js +1 -1
  54. package/Libraries/Components/Touchable/TouchableHighlight.js +1 -1
  55. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +1 -1
  56. package/Libraries/Components/Touchable/TouchableOpacity.js +1 -1
  57. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +3 -3
  58. package/Libraries/Components/Touchable/TouchableWithoutFeedback.windows.js +1 -1
  59. package/Libraries/Components/View/View.js +81 -167
  60. package/Libraries/Components/View/View.windows.js +202 -302
  61. package/Libraries/Core/Devtools/loadBundleFromServer.js +1 -1
  62. package/Libraries/Core/Devtools/loadBundleFromServer.windows.js +1 -1
  63. package/Libraries/Core/ExceptionsManager.js +4 -2
  64. package/Libraries/Core/ReactFiberErrorDialog.js +3 -3
  65. package/Libraries/Core/ReactNativeVersion.js +37 -10
  66. package/Libraries/Core/Timers/JSTimers.js +3 -1
  67. package/Libraries/Core/Timers/immediateShim.js +1 -1
  68. package/Libraries/Core/Timers/queueMicrotask.js +1 -0
  69. package/Libraries/Core/setUpPerformance.js +2 -1
  70. package/Libraries/Debugging/DebuggingOverlayRegistry.js +5 -3
  71. package/Libraries/Image/AssetSourceResolver.windows.js +2 -2
  72. package/Libraries/Image/Image.android.js +327 -111
  73. package/Libraries/Image/Image.ios.js +6 -1
  74. package/Libraries/Image/Image.windows.js +28 -61
  75. package/Libraries/Image/ImageSourceUtils.js +8 -2
  76. package/Libraries/Image/resolveAssetSource.js +1 -1
  77. package/Libraries/Image/resolveAssetSource.windows.js +1 -1
  78. package/Libraries/Interaction/InteractionManager.js +118 -167
  79. package/Libraries/Interaction/PanResponder.js +1 -1
  80. package/Libraries/LayoutAnimation/LayoutAnimation.js +2 -0
  81. package/Libraries/Lists/FlatList.js +5 -6
  82. package/Libraries/LogBox/Data/LogBoxData.js +5 -2
  83. package/Libraries/LogBox/Data/parseLogBoxLog.js +1 -1
  84. package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +1 -1
  85. package/Libraries/Modal/Modal.js +3 -3
  86. package/Libraries/Modal/Modal.windows.js +2 -2
  87. package/Libraries/NativeComponent/NativeComponentRegistry.js +1 -1
  88. package/Libraries/NativeComponent/ViewConfig.js +2 -2
  89. package/Libraries/Network/RCTNetworking.android.js +1 -1
  90. package/Libraries/Network/RCTNetworking.ios.js +1 -1
  91. package/Libraries/Network/RCTNetworking.windows.js +1 -1
  92. package/Libraries/Network/XMLHttpRequest.js +20 -5
  93. package/Libraries/Network/convertRequestBody.js +1 -1
  94. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +10 -9
  95. package/Libraries/Pressability/HoverState.js +2 -0
  96. package/Libraries/Pressability/Pressability.js +1 -1
  97. package/Libraries/Pressability/Pressability.windows.js +5 -5
  98. package/Libraries/PushNotificationIOS/PushNotificationIOS.js +2 -2
  99. package/Libraries/ReactNative/AppRegistryImpl.js +4 -2
  100. package/Libraries/ReactNative/PaperUIManager.windows.js +4 -4
  101. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +2 -0
  102. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +3 -3
  103. package/Libraries/ReactNative/RendererImplementation.js +116 -116
  104. package/Libraries/ReactNative/UIManager.js +3 -3
  105. package/Libraries/ReactNative/renderApplication.js +1 -0
  106. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +1 -1
  107. package/Libraries/Renderer/implementations/ReactFabric-dev.js +38 -35
  108. package/Libraries/Renderer/implementations/ReactFabric-prod.js +51 -22
  109. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +54 -24
  110. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +36 -33
  111. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +5 -5
  112. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +5 -5
  113. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +3 -1
  114. package/Libraries/Share/Share.js +4 -0
  115. package/Libraries/StyleSheet/PlatformColorValueTypes.android.js +2 -2
  116. package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +2 -2
  117. package/Libraries/StyleSheet/PlatformColorValueTypes.windows.js +2 -0
  118. package/Libraries/StyleSheet/StyleSheet.d.ts +7 -22
  119. package/Libraries/StyleSheet/StyleSheetExports.js +2 -8
  120. package/Libraries/StyleSheet/StyleSheetExports.js.flow +11 -18
  121. package/Libraries/StyleSheet/flattenStyle.js +2 -2
  122. package/Libraries/StyleSheet/processAspectRatio.js +2 -0
  123. package/Libraries/StyleSheet/processFilter.js +5 -5
  124. package/Libraries/StyleSheet/splitLayoutProps.js +2 -2
  125. package/Libraries/Text/Text.js +534 -234
  126. package/Libraries/Text/Text.windows.js +622 -265
  127. package/Libraries/Text/TextNativeComponent.js +2 -2
  128. package/Libraries/Utilities/Appearance.d.ts +3 -5
  129. package/Libraries/Utilities/Appearance.js +5 -17
  130. package/Libraries/Utilities/HMRClient.js +2 -1
  131. package/Libraries/Utilities/Platform.android.js +3 -3
  132. package/Libraries/Utilities/Platform.d.ts +1 -0
  133. package/Libraries/Utilities/Platform.ios.js +1 -1
  134. package/Libraries/Utilities/Platform.windows.js +3 -3
  135. package/Libraries/Utilities/PlatformTypes.js +1 -1
  136. package/Libraries/Utilities/ReactNativeTestTools.js +12 -0
  137. package/Libraries/Utilities/SceneTracker.js +1 -1
  138. package/Libraries/Utilities/codegenNativeCommands.js +1 -1
  139. package/Libraries/Utilities/codegenNativeComponent.js +1 -1
  140. package/Libraries/Utilities/createPerformanceLogger.js +32 -0
  141. package/Libraries/Utilities/deepFreezeAndThrowOnMutationInDev.js +2 -0
  142. package/Libraries/Utilities/differ/pointsDiffer.js +1 -1
  143. package/Libraries/Utilities/useMergeRefs.js +1 -1
  144. package/Libraries/WebSocket/WebSocketInterceptor.js +2 -0
  145. package/Libraries/promiseRejectionTrackingOptions.js +17 -31
  146. package/Libraries/vendor/emitter/EventEmitter.js +1 -1
  147. package/Microsoft.ReactNative/App.xaml +5 -0
  148. package/Microsoft.ReactNative/Base/CxxReactIncludes.h +0 -3
  149. package/Microsoft.ReactNative/CompositionContext.idl +0 -2
  150. package/Microsoft.ReactNative/Fabric/AbiViewProps.cpp +2 -2
  151. package/Microsoft.ReactNative/Fabric/AbiViewProps.h +0 -2
  152. package/Microsoft.ReactNative/Fabric/ComponentView.cpp +26 -0
  153. package/Microsoft.ReactNative/Fabric/ComponentView.h +2 -0
  154. package/Microsoft.ReactNative/Fabric/Composition/ActivityIndicatorComponentView.cpp +0 -1
  155. package/Microsoft.ReactNative/Fabric/Composition/Composition.Input.cpp +0 -69
  156. package/Microsoft.ReactNative/Fabric/Composition/Composition.Input.h +1 -15
  157. package/Microsoft.ReactNative/Fabric/Composition/CompositionAnnotationProvider.cpp +2 -5
  158. package/Microsoft.ReactNative/Fabric/Composition/CompositionAnnotationProvider.h +1 -4
  159. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.cpp +0 -31
  160. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.h +0 -10
  161. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper_emptyimpl.cpp +0 -4
  162. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +65 -32
  163. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.h +9 -0
  164. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +8 -6
  165. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.h +0 -2
  166. package/Microsoft.ReactNative/Fabric/Composition/CompositionHelpers.h +0 -2
  167. package/Microsoft.ReactNative/Fabric/Composition/CompositionHwndHost.cpp +0 -9
  168. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootAutomationProvider.cpp +2 -11
  169. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootAutomationProvider.h +0 -4
  170. package/Microsoft.ReactNative/Fabric/Composition/CompositionTextProvider.cpp +4 -7
  171. package/Microsoft.ReactNative/Fabric/Composition/CompositionTextProvider.h +1 -5
  172. package/Microsoft.ReactNative/Fabric/Composition/CompositionTextRangeProvider.cpp +68 -53
  173. package/Microsoft.ReactNative/Fabric/Composition/CompositionTextRangeProvider.h +1 -5
  174. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +20 -18
  175. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.h +10 -3
  176. package/Microsoft.ReactNative/Fabric/Composition/ContentIslandComponentView.cpp +30 -9
  177. package/Microsoft.ReactNative/Fabric/Composition/ContentIslandComponentView.h +4 -1
  178. package/Microsoft.ReactNative/Fabric/Composition/DebuggingOverlayComponentView.cpp +3 -2
  179. package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.cpp +0 -2
  180. package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.h +0 -1
  181. package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +550 -4
  182. package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.h +52 -0
  183. package/Microsoft.ReactNative/Fabric/Composition/ReactCompositionViewComponentBuilder.cpp +16 -0
  184. package/Microsoft.ReactNative/Fabric/Composition/ReactCompositionViewComponentBuilder.h +6 -0
  185. package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.cpp +0 -6
  186. package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.h +0 -2
  187. package/Microsoft.ReactNative/Fabric/Composition/RootComponentView.cpp +53 -2
  188. package/Microsoft.ReactNative/Fabric/Composition/RootComponentView.h +8 -1
  189. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +0 -2
  190. package/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.cpp +0 -1
  191. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +5 -2
  192. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.cpp +4 -1
  193. package/Microsoft.ReactNative/Fabric/Composition/Theme.cpp +6 -30
  194. package/Microsoft.ReactNative/Fabric/Composition/Theme.h +1 -3
  195. package/Microsoft.ReactNative/Fabric/Composition/TooltipService.cpp +1 -1
  196. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +36 -14
  197. package/Microsoft.ReactNative/Fabric/Composition/UnimplementedNativeViewComponentView.cpp +0 -1
  198. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +0 -1
  199. package/Microsoft.ReactNative/Fabric/ImageManager.cpp +0 -4
  200. package/Microsoft.ReactNative/Fabric/ReactTaggedView.h +1 -1
  201. package/Microsoft.ReactNative/Fabric/WindowsComponentDescriptorRegistry.cpp +8 -0
  202. package/Microsoft.ReactNative/Fabric/WindowsComponentDescriptorRegistry.h +3 -0
  203. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/PlatformColorUtils.cpp +0 -11
  204. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/WindowsTextLayoutManager.h +2 -1
  205. package/Microsoft.ReactNative/IReactContext.cpp +2 -25
  206. package/Microsoft.ReactNative/IReactContext.h +0 -7
  207. package/Microsoft.ReactNative/IReactContext.idl +4 -29
  208. package/Microsoft.ReactNative/IReactModuleBuilder.cpp +24 -140
  209. package/Microsoft.ReactNative/IReactModuleBuilder.h +0 -11
  210. package/Microsoft.ReactNative/IReactPackageBuilder.idl +1 -16
  211. package/Microsoft.ReactNative/IReactPackageProvider.idl +0 -1
  212. package/Microsoft.ReactNative/IReactViewComponentBuilder.idl +10 -0
  213. package/Microsoft.ReactNative/JsiApi.cpp +4 -3
  214. package/Microsoft.ReactNative/JsiApi.h +2 -3
  215. package/Microsoft.ReactNative/JsiApi.idl +3 -2
  216. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +6 -214
  217. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -252
  218. package/Microsoft.ReactNative/Modules/AccessibilityInfoModule.cpp +0 -37
  219. package/Microsoft.ReactNative/Modules/AlertModule.cpp +2 -140
  220. package/Microsoft.ReactNative/Modules/AlertModule.h +0 -2
  221. package/Microsoft.ReactNative/Modules/Animated/NativeAnimatedNodeManager.cpp +5 -10
  222. package/Microsoft.ReactNative/Modules/Animated/NativeAnimatedNodeManager.h +0 -1
  223. package/Microsoft.ReactNative/Modules/Animated/PropsAnimatedNode.cpp +1 -96
  224. package/Microsoft.ReactNative/Modules/Animated/PropsAnimatedNode.h +0 -14
  225. package/Microsoft.ReactNative/Modules/AppStateModule.cpp +0 -53
  226. package/Microsoft.ReactNative/Modules/AppStateModule.h +0 -5
  227. package/Microsoft.ReactNative/Modules/AppThemeModuleUwp.cpp +5 -14
  228. package/Microsoft.ReactNative/Modules/AppThemeModuleUwp.h +0 -2
  229. package/Microsoft.ReactNative/Modules/AppearanceModule.cpp +1 -9
  230. package/Microsoft.ReactNative/Modules/DevSettingsModule.cpp +0 -4
  231. package/Microsoft.ReactNative/Modules/DevSettingsModule.h +0 -2
  232. package/Microsoft.ReactNative/Modules/DeviceInfoModule.cpp +16 -90
  233. package/Microsoft.ReactNative/Modules/I18nManagerModule.cpp +3 -8
  234. package/Microsoft.ReactNative/Modules/ImageViewManagerModule.cpp +11 -48
  235. package/Microsoft.ReactNative/Modules/LinkingManagerModule.cpp +0 -3
  236. package/Microsoft.ReactNative/Modules/LogBoxModule.cpp +30 -102
  237. package/Microsoft.ReactNative/Modules/LogBoxModule.h +0 -7
  238. package/Microsoft.ReactNative/Modules/Timing.cpp +7 -9
  239. package/Microsoft.ReactNative/Pch/pch.h +0 -28
  240. package/Microsoft.ReactNative/ReactCoreInjection.h +0 -1
  241. package/Microsoft.ReactNative/ReactHost/IReactInstance.h +0 -8
  242. package/Microsoft.ReactNative/ReactHost/MsoReactContext.cpp +0 -15
  243. package/Microsoft.ReactNative/ReactHost/MsoReactContext.h +0 -2
  244. package/Microsoft.ReactNative/ReactHost/React.h +0 -44
  245. package/Microsoft.ReactNative/ReactHost/ReactHost.cpp +10 -47
  246. package/Microsoft.ReactNative/ReactHost/ReactHost.h +1 -1
  247. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +30 -586
  248. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.h +2 -37
  249. package/Microsoft.ReactNative/ReactHost/ReactNativeHeaders.h +0 -13
  250. package/Microsoft.ReactNative/ReactHost/React_Win.h +0 -1
  251. package/Microsoft.ReactNative/ReactInstanceSettings.cpp +0 -8
  252. package/Microsoft.ReactNative/ReactInstanceSettings.h +0 -13
  253. package/Microsoft.ReactNative/ReactInstanceSettings.idl +7 -23
  254. package/Microsoft.ReactNative/ReactNativeHost.cpp +10 -35
  255. package/Microsoft.ReactNative/ReactNativeHost.h +0 -1
  256. package/Microsoft.ReactNative/ReactNativeIsland.idl +0 -4
  257. package/Microsoft.ReactNative/ReactPackageBuilder.cpp +9 -36
  258. package/Microsoft.ReactNative/ReactPackageBuilder.h +4 -38
  259. package/Microsoft.ReactNative/RedBox.cpp +9 -362
  260. package/Microsoft.ReactNative/Theme.idl +0 -2
  261. package/Microsoft.ReactNative/Timer.cpp +3 -2
  262. package/Microsoft.ReactNative/Utils/Helpers.cpp +0 -47
  263. package/Microsoft.ReactNative/Utils/Helpers.h +0 -5
  264. package/Microsoft.ReactNative/Utils/IcuUtils.cpp +84 -0
  265. package/Microsoft.ReactNative/Utils/IcuUtils.h +42 -0
  266. package/Microsoft.ReactNative/Utils/KeyboardUtils.cpp +0 -11
  267. package/Microsoft.ReactNative/Utils/ThemeUtils.cpp +0 -4
  268. package/Microsoft.ReactNative/Utils/ThemeUtils.h +1 -5
  269. package/Microsoft.ReactNative/Utils/UwpPreparedScriptStore.h +0 -2
  270. package/Microsoft.ReactNative/Utils/ValueUtils.cpp +0 -245
  271. package/Microsoft.ReactNative/Utils/ValueUtils.h +0 -23
  272. package/Microsoft.ReactNative/ViewProps.idl +0 -2
  273. package/Microsoft.ReactNative/Views/DevMenu.cpp +2 -278
  274. package/Microsoft.ReactNative/Views/DevMenu.h +0 -5
  275. package/Microsoft.ReactNative/XamlApplication.cpp +71 -0
  276. package/Microsoft.ReactNative/XamlApplication.h +47 -0
  277. package/Microsoft.ReactNative/XamlApplication.idl +19 -0
  278. package/Microsoft.ReactNative/XamlUIService.cpp +0 -54
  279. package/Microsoft.ReactNative/XamlUIService.h +0 -12
  280. package/Microsoft.ReactNative/XamlUIService.idl +0 -12
  281. package/Microsoft.ReactNative.Cxx/CppWinRTIncludes.h +0 -19
  282. package/Microsoft.ReactNative.Cxx/DesktopWindowBridge.h +1 -1
  283. package/Microsoft.ReactNative.Cxx/JSI/decorator.h +191 -114
  284. package/Microsoft.ReactNative.Cxx/JSI/instrumentation.h +5 -0
  285. package/Microsoft.ReactNative.Cxx/JSI/jsi-inl.h +37 -0
  286. package/Microsoft.ReactNative.Cxx/JSI/jsi.cpp +68 -0
  287. package/Microsoft.ReactNative.Cxx/JSI/jsi.h +77 -11
  288. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +2 -2
  289. package/Microsoft.ReactNative.Cxx/NamespaceRedirect.h +0 -5
  290. package/Microsoft.ReactNative.Cxx/NodeApiJsiRuntime.cpp +93 -1
  291. package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModule.cpp +4 -3
  292. package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModule.h +2 -2
  293. package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModuleUtils.cpp +2 -55
  294. package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModuleUtils.h +4 -8
  295. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Class.h +5 -0
  296. package/Microsoft.ReactNative.Cxx/ReactCommon/react/timing/primitives.h +32 -4
  297. package/Microsoft.ReactNative.Cxx/ReactContext.h +0 -13
  298. package/Microsoft.ReactNative.Cxx/StructInfo.h +8 -1
  299. package/Microsoft.ReactNative.Cxx/UI.Composition.Effects.h +0 -4
  300. package/Microsoft.ReactNative.Cxx/UI.Composition.h +0 -4
  301. package/Microsoft.ReactNative.Cxx/UI.Input.h +0 -4
  302. package/Microsoft.ReactNative.Cxx/UI.Popups.h +0 -4
  303. package/Microsoft.ReactNative.Cxx/UI.Text.h +0 -4
  304. package/Microsoft.ReactNative.Cxx/XamlUtils.h +0 -33
  305. package/Microsoft.ReactNative.Managed/JSValueReader.cs +0 -4
  306. package/Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj +0 -3
  307. package/Microsoft.ReactNative.Managed/ReactContext.cs +0 -5
  308. package/Microsoft.ReactNative.Managed/ReactContextGenerator.cs +0 -4
  309. package/Microsoft.ReactNative.Managed/ReactPackageBuilderExtensions.cs +0 -25
  310. package/Microsoft.ReactNative.Managed/ReactSettingsSnapshot.cs +0 -4
  311. package/Microsoft.ReactNative.Managed/ReflectionReactPackageProvider.cs +1 -2
  312. package/Microsoft.ReactNative.Managed.CodeGen/CodeAnalyzer.cs +0 -10
  313. package/Microsoft.ReactNative.Managed.CodeGen/CodeGenerator.ViewManager.cs +0 -36
  314. package/Microsoft.ReactNative.Managed.CodeGen/CodeGenerator.cs +0 -6
  315. package/Microsoft.ReactNative.Managed.CodeGen/Model/ReactAssembly.cs +0 -2
  316. package/Microsoft.ReactNative.Managed.CodeGen/Model/ReactTypes.cs +0 -2
  317. package/Microsoft.ReactNative.Managed.CodeGen/ReactNativeNames.cs +0 -2
  318. package/Mso/src/dispatchQueue/queueService.cpp +3 -1
  319. package/Mso/src/dispatchQueue/uiScheduler_winrt.cpp +2 -10
  320. package/PropertySheets/Bundle.Common.targets +1 -1
  321. package/PropertySheets/Bundle.props +3 -4
  322. package/PropertySheets/External/Microsoft.ReactNative.Common.props +0 -1
  323. package/PropertySheets/External/Microsoft.ReactNative.Uwp.CSharpApp.targets +1 -1
  324. package/PropertySheets/External/Microsoft.ReactNative.Uwp.CppApp.targets +1 -1
  325. package/PropertySheets/Generated/PackageVersion.g.props +4 -4
  326. package/PropertySheets/JSEngine.props +1 -1
  327. package/PropertySheets/NuGet.LockFile.props +0 -8
  328. package/PropertySheets/OutputMSBuildProperties.targets +0 -1
  329. package/PropertySheets/React.Cpp.props +3 -5
  330. package/PropertySheets/WinUI.props +3 -3
  331. package/README.md +1 -5
  332. package/ReactCommon/ReactCommon.vcxproj +12 -31
  333. package/ReactCommon/ReactCommon.vcxproj.filters +0 -3
  334. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/CxxNativeModule.cpp +3 -2
  335. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/NativeToJsBridge.cpp +5 -2
  336. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/TraceSection.h +20 -4
  337. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +113 -1
  338. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.cpp +14 -6
  339. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/Utf8.h +1 -0
  340. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/tracing/RuntimeSamplingProfileTraceEventSerializer.cpp +351 -0
  341. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.h +2 -2
  342. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/dom/NativeDOM.cpp +42 -36
  343. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/dom/NativeDOM.h +15 -3
  344. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +1 -1
  345. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/image/conversions.h +174 -0
  346. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/text/ParagraphShadowNode.cpp +1 -0
  347. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityPrimitives.h +26 -3
  348. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/conversions.h +1 -1
  349. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/core/ShadowNode.cpp +1 -1
  350. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/imagemanager/primitives.h +189 -0
  351. package/ReactCommon/TEMP_UntilReactCommonUpdate/reactperflogger/reactperflogger/ReactPerfettoLogger.cpp +27 -8
  352. package/ReactCommon/cgmanifest.json +1 -1
  353. package/Scripts/Microsoft.ReactNative.nuspec +15 -33
  354. package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +23 -23
  355. package/Scripts/OfficeReact.Win32.nuspec +0 -3
  356. package/Scripts/creaternwapp.cmd +1 -1
  357. package/Shared/DevServerHelper.h +17 -21
  358. package/Shared/DevSettings.h +1 -25
  359. package/Shared/DevSupportManager.cpp +0 -50
  360. package/Shared/DevSupportManager.h +0 -4
  361. package/Shared/Hermes/HermesRuntimeTargetDelegate.cpp +5 -1
  362. package/Shared/HermesRuntimeHolder.cpp +0 -31
  363. package/Shared/HermesRuntimeHolder.h +0 -14
  364. package/Shared/IDevSupportManager.h +0 -6
  365. package/Shared/InstanceManager.cpp +0 -97
  366. package/Shared/InstanceManager.h +0 -53
  367. package/Shared/JSI/ScriptStore.h +1 -1
  368. package/Shared/Logging.cpp +1 -12
  369. package/Shared/Modules/CxxModuleUtilities.cpp +0 -9
  370. package/Shared/Modules/CxxModuleUtilities.h +0 -8
  371. package/Shared/Networking/OriginPolicyHttpFilter.cpp +9 -1
  372. package/Shared/OInstance.cpp +144 -424
  373. package/Shared/OInstance.h +0 -81
  374. package/Shared/Shared.vcxitems +83 -203
  375. package/Shared/Shared.vcxitems.filters +8 -67
  376. package/Shared/Threading/MessageQueueThreadFactory.cpp +0 -6
  377. package/Shared/Threading/MessageQueueThreadFactory.h +0 -4
  378. package/Shared/TurboModuleManager.cpp +0 -4
  379. package/Shared/Utils.cpp +26 -0
  380. package/Shared/Utils.h +3 -0
  381. package/codegen/NativeDOMSpec.g.h +41 -35
  382. package/codegen/NativeIntersectionObserverSpec.g.h +9 -21
  383. package/codegen/NativePerformanceSpec.g.h +47 -35
  384. package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +177 -129
  385. package/codegen/react/components/rnwcore/ActivityIndicatorView.g.h +14 -0
  386. package/codegen/react/components/rnwcore/AndroidDrawerLayout.g.h +14 -0
  387. package/codegen/react/components/rnwcore/AndroidHorizontalScrollContentView.g.h +14 -0
  388. package/codegen/react/components/rnwcore/AndroidProgressBar.g.h +14 -0
  389. package/codegen/react/components/rnwcore/AndroidSwipeRefreshLayout.g.h +14 -0
  390. package/codegen/react/components/rnwcore/AndroidSwitch.g.h +14 -0
  391. package/codegen/react/components/rnwcore/DebuggingOverlay.g.h +14 -0
  392. package/codegen/react/components/rnwcore/EventEmitters.cpp +25 -0
  393. package/codegen/react/components/rnwcore/EventEmitters.h +25 -0
  394. package/codegen/react/components/rnwcore/InputAccessory.g.h +14 -0
  395. package/codegen/react/components/rnwcore/ModalHostView.g.h +14 -0
  396. package/codegen/react/components/rnwcore/Props.cpp +41 -2
  397. package/codegen/react/components/rnwcore/Props.h +51 -2
  398. package/codegen/react/components/rnwcore/PullToRefreshView.g.h +14 -0
  399. package/codegen/react/components/rnwcore/SafeAreaView.g.h +14 -0
  400. package/codegen/react/components/rnwcore/Switch.g.h +14 -0
  401. package/codegen/react/components/rnwcore/UnimplementedNativeView.g.h +14 -0
  402. package/codegen/react/components/rnwcore/VirtualView.g.h +18 -0
  403. package/codegen/react/components/rnwcore/VirtualViewExperimental.g.h +240 -0
  404. package/codegen/rnwcoreJSI-generated.cpp +106 -51
  405. package/codegen/rnwcoreJSI.h +148 -67
  406. package/fmt/cgmanifest.json +1 -1
  407. package/fmt/fmt.vcxproj +0 -8
  408. package/index.js +8 -2
  409. package/index.windows.js +8 -2
  410. package/jest/local-setup.js +2 -2
  411. package/jest/mock.js +1 -1
  412. package/jest/mockComponent.js +9 -9
  413. package/jest/mockNativeComponent.js +3 -2
  414. package/jest/mocks/Modal.js +1 -1
  415. package/jest/mocks/ScrollView.js +1 -1
  416. package/jest/mocks/ViewNativeComponent.js +1 -1
  417. package/jest/setup.js +23 -12
  418. package/just-task.js +14 -0
  419. package/package.json +31 -32
  420. package/src/private/animated/NativeAnimatedHelper.js +16 -5
  421. package/src/private/animated/createAnimatedPropsHook.js +11 -60
  422. package/src/private/animated/createAnimatedPropsMemoHook.js +8 -54
  423. package/src/private/components/virtualview/VirtualView.js +43 -12
  424. package/src/private/components/virtualview/VirtualViewExperimentalNativeComponent.js +93 -0
  425. package/src/private/components/virtualview/VirtualViewNativeComponent.js +6 -0
  426. package/src/private/devsupport/devmenu/elementinspector/Inspector.js +2 -2
  427. package/src/private/devsupport/devmenu/elementinspector/ReactDevToolsOverlay.js +2 -2
  428. package/src/private/featureflags/ReactNativeFeatureFlags.js +80 -52
  429. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +23 -4
  430. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +14 -6
  431. package/src/private/renderer/errorhandling/ErrorHandlers.js +3 -3
  432. package/src/private/specs_DEPRECATED/components/SwitchNativeComponent.js +0 -1
  433. package/src/private/types/HostInstance.js +4 -1
  434. package/src/private/webapis/dom/nodes/ReactNativeDocument.js +22 -2
  435. package/src/private/webapis/dom/nodes/ReactNativeElement.js +1 -1
  436. package/src/private/webapis/dom/nodes/ReadOnlyElement.js +5 -3
  437. package/src/private/webapis/dom/nodes/ReadOnlyNode.js +16 -13
  438. package/src/private/webapis/dom/nodes/internals/NodeInternals.js +45 -22
  439. package/src/private/webapis/dom/nodes/internals/ReactNativeDocumentInstanceHandle.js +1 -1
  440. package/src/private/webapis/dom/nodes/specs/NativeDOM.js +26 -192
  441. package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +15 -12
  442. package/src/private/webapis/dom/oldstylecollections/NodeList.js +14 -11
  443. package/src/private/webapis/geometry/DOMRectList.js +2 -2
  444. package/src/private/webapis/intersectionobserver/internals/IntersectionObserverManager.js +19 -74
  445. package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +0 -4
  446. package/src/private/webapis/mutationobserver/internals/MutationObserverManager.js +1 -1
  447. package/src/private/webapis/performance/EventTiming.js +6 -10
  448. package/src/private/webapis/performance/Performance.js +309 -164
  449. package/src/private/webapis/performance/PerformanceEntry.js +20 -16
  450. package/src/private/webapis/performance/PerformanceObserver.js +8 -29
  451. package/src/private/webapis/performance/UserTiming.js +71 -18
  452. package/src/private/webapis/performance/UserTimingExtensibility.js.flow +38 -0
  453. package/src/private/webapis/performance/internals/Utilities.js +9 -0
  454. package/src/private/webapis/performance/specs/NativePerformance.js +21 -23
  455. package/src/private/webapis/structuredClone/structuredClone.js +10 -10
  456. package/stubs/double-conversion/README.md +1 -1
  457. package/template/cpp-lib/proj/MyLib.sln +0 -5
  458. package/template/cpp-lib/src/pch.h +0 -5
  459. package/template/cs-lib/proj/MyLib.sln +0 -5
  460. package/template/metro.config.js +1 -0
  461. package/templates/cpp-app/metro.config.js +2 -1
  462. package/templates/cpp-app/windows/MyApp.sln +0 -5
  463. package/templates/cpp-lib/example/metro.config.js +3 -4
  464. package/templates/cpp-lib/windows/MyLib.sln +0 -5
  465. package/Chakra/Chakra.vcxitems +0 -32
  466. package/Chakra/Chakra.vcxitems.filters +0 -54
  467. package/Chakra/ChakraHelpers.cpp +0 -468
  468. package/Chakra/ChakraHelpers.h +0 -146
  469. package/Chakra/ChakraInstanceArgs.h +0 -52
  470. package/Chakra/ChakraPlatform.cpp +0 -42
  471. package/Chakra/ChakraPlatform.h +0 -51
  472. package/Chakra/ChakraTracing.cpp +0 -275
  473. package/Chakra/ChakraTracing.h +0 -11
  474. package/Chakra/ChakraUtils.cpp +0 -190
  475. package/Chakra/ChakraUtils.h +0 -72
  476. package/Chakra/ChakraValue.cpp +0 -257
  477. package/Chakra/ChakraValue.h +0 -308
  478. package/Chakra/Utf8DebugExtensions.cpp +0 -62
  479. package/Chakra/Utf8DebugExtensions.h +0 -29
  480. package/Libraries/Interaction/InteractionManagerStub.js +0 -184
  481. package/Libraries/Interaction/TaskQueue.js +0 -183
  482. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +0 -31
  483. package/Microsoft.ReactNative/ABICxxModule.cpp +0 -51
  484. package/Microsoft.ReactNative/ABICxxModule.h +0 -38
  485. package/Microsoft.ReactNative/ABIViewManager.cpp +0 -263
  486. package/Microsoft.ReactNative/ABIViewManager.h +0 -100
  487. package/Microsoft.ReactNative/Base/CoreUIManagers.cpp +0 -55
  488. package/Microsoft.ReactNative/DevMenuControl.cpp +0 -14
  489. package/Microsoft.ReactNative/DevMenuControl.h +0 -20
  490. package/Microsoft.ReactNative/DevMenuControl.idl +0 -28
  491. package/Microsoft.ReactNative/DevMenuControl.xaml +0 -139
  492. package/Microsoft.ReactNative/GlyphViewManager.cpp +0 -167
  493. package/Microsoft.ReactNative/GlyphViewManager.h +0 -24
  494. package/Microsoft.ReactNative/INativeUIManager.h +0 -75
  495. package/Microsoft.ReactNative/IViewManager.idl +0 -120
  496. package/Microsoft.ReactNative/IViewManagerCore.idl +0 -45
  497. package/Microsoft.ReactNative/LayoutService.cpp +0 -51
  498. package/Microsoft.ReactNative/LayoutService.h +0 -32
  499. package/Microsoft.ReactNative/LayoutService.idl +0 -41
  500. package/Microsoft.ReactNative/Modules/NativeUIManager.cpp +0 -1187
  501. package/Microsoft.ReactNative/Modules/NativeUIManager.h +0 -128
  502. package/Microsoft.ReactNative/Modules/PaperUIManagerModule.cpp +0 -891
  503. package/Microsoft.ReactNative/Modules/PaperUIManagerModule.h +0 -185
  504. package/Microsoft.ReactNative/NativeModulesProvider.cpp +0 -49
  505. package/Microsoft.ReactNative/NativeModulesProvider.h +0 -25
  506. package/Microsoft.ReactNative/ReactApplication.cpp +0 -276
  507. package/Microsoft.ReactNative/ReactApplication.h +0 -156
  508. package/Microsoft.ReactNative/ReactApplication.idl +0 -48
  509. package/Microsoft.ReactNative/ReactHost/ViewManagerProvider.h +0 -19
  510. package/Microsoft.ReactNative/ReactPointerEventArgs.cpp +0 -55
  511. package/Microsoft.ReactNative/ReactPointerEventArgs.h +0 -32
  512. package/Microsoft.ReactNative/ReactPointerEventArgs.idl +0 -79
  513. package/Microsoft.ReactNative/ReactRootView.cpp +0 -592
  514. package/Microsoft.ReactNative/ReactRootView.h +0 -127
  515. package/Microsoft.ReactNative/ReactRootView.idl +0 -40
  516. package/Microsoft.ReactNative/TestHook.cpp +0 -99
  517. package/Microsoft.ReactNative/TestHook.h +0 -15
  518. package/Microsoft.ReactNative/Utils/AccessibilityUtils.cpp +0 -36
  519. package/Microsoft.ReactNative/Utils/AccessibilityUtils.h +0 -15
  520. package/Microsoft.ReactNative/Utils/BatchingEventEmitter.cpp +0 -171
  521. package/Microsoft.ReactNative/Utils/BatchingEventEmitter.h +0 -72
  522. package/Microsoft.ReactNative/Utils/PropertyHandlerUtils.h +0 -87
  523. package/Microsoft.ReactNative/Utils/PropertyUtils.h +0 -568
  524. package/Microsoft.ReactNative/Utils/ResourceBrushUtils.cpp +0 -182
  525. package/Microsoft.ReactNative/Utils/ResourceBrushUtils.h +0 -58
  526. package/Microsoft.ReactNative/Utils/ShadowNodeTypeUtils.h +0 -26
  527. package/Microsoft.ReactNative/Utils/XamlIslandUtils.cpp +0 -93
  528. package/Microsoft.ReactNative/Utils/XamlIslandUtils.h +0 -48
  529. package/Microsoft.ReactNative/ViewManagersProvider.cpp +0 -39
  530. package/Microsoft.ReactNative/ViewManagersProvider.h +0 -27
  531. package/Microsoft.ReactNative/Views/ActivityIndicatorViewManager.cpp +0 -62
  532. package/Microsoft.ReactNative/Views/ActivityIndicatorViewManager.h +0 -29
  533. package/Microsoft.ReactNative/Views/ConfigureBundlerDlg.cpp +0 -186
  534. package/Microsoft.ReactNative/Views/ConfigureBundlerDlg.h +0 -11
  535. package/Microsoft.ReactNative/Views/ControlViewManager.cpp +0 -143
  536. package/Microsoft.ReactNative/Views/ControlViewManager.h +0 -38
  537. package/Microsoft.ReactNative/Views/DebuggingOverlayViewManager.cpp +0 -53
  538. package/Microsoft.ReactNative/Views/DebuggingOverlayViewManager.h +0 -30
  539. package/Microsoft.ReactNative/Views/DynamicAutomationPeer.cpp +0 -586
  540. package/Microsoft.ReactNative/Views/DynamicAutomationPeer.h +0 -104
  541. package/Microsoft.ReactNative/Views/DynamicAutomationProperties.cpp +0 -330
  542. package/Microsoft.ReactNative/Views/DynamicAutomationProperties.h +0 -111
  543. package/Microsoft.ReactNative/Views/DynamicValueProvider.cpp +0 -59
  544. package/Microsoft.ReactNative/Views/DynamicValueProvider.h +0 -32
  545. package/Microsoft.ReactNative/Views/ExpressionAnimationStore.cpp +0 -61
  546. package/Microsoft.ReactNative/Views/ExpressionAnimationStore.h +0 -26
  547. package/Microsoft.ReactNative/Views/FlyoutViewManager.cpp +0 -559
  548. package/Microsoft.ReactNative/Views/FlyoutViewManager.h +0 -34
  549. package/Microsoft.ReactNative/Views/FrameworkElementTransferProperties.cpp +0 -126
  550. package/Microsoft.ReactNative/Views/FrameworkElementTransferProperties.h +0 -23
  551. package/Microsoft.ReactNative/Views/FrameworkElementViewManager.cpp +0 -957
  552. package/Microsoft.ReactNative/Views/FrameworkElementViewManager.h +0 -41
  553. package/Microsoft.ReactNative/Views/IXamlRootView.h +0 -17
  554. package/Microsoft.ReactNative/Views/Image/ImageViewManager.cpp +0 -245
  555. package/Microsoft.ReactNative/Views/Image/ImageViewManager.h +0 -45
  556. package/Microsoft.ReactNative/Views/Image/ReactImage.cpp +0 -469
  557. package/Microsoft.ReactNative/Views/Image/ReactImage.h +0 -80
  558. package/Microsoft.ReactNative/Views/Image/ReactImageBrush.cpp +0 -247
  559. package/Microsoft.ReactNative/Views/Image/ReactImageBrush.h +0 -67
  560. package/Microsoft.ReactNative/Views/KeyboardEventHandler.cpp +0 -261
  561. package/Microsoft.ReactNative/Views/KeyboardEventHandler.h +0 -132
  562. package/Microsoft.ReactNative/Views/PaperShadowNode.cpp +0 -18
  563. package/Microsoft.ReactNative/Views/PaperShadowNode.h +0 -38
  564. package/Microsoft.ReactNative/Views/PopupViewManager.cpp +0 -349
  565. package/Microsoft.ReactNative/Views/PopupViewManager.h +0 -36
  566. package/Microsoft.ReactNative/Views/RawTextViewManager.cpp +0 -69
  567. package/Microsoft.ReactNative/Views/RawTextViewManager.h +0 -46
  568. package/Microsoft.ReactNative/Views/ReactViewInstance.cpp +0 -43
  569. package/Microsoft.ReactNative/Views/ReactViewInstance.h +0 -53
  570. package/Microsoft.ReactNative/Views/RefreshControlManager.cpp +0 -116
  571. package/Microsoft.ReactNative/Views/RefreshControlManager.h +0 -28
  572. package/Microsoft.ReactNative/Views/RootViewManager.cpp +0 -65
  573. package/Microsoft.ReactNative/Views/RootViewManager.h +0 -36
  574. package/Microsoft.ReactNative/Views/SIPEventHandler.cpp +0 -117
  575. package/Microsoft.ReactNative/Views/SIPEventHandler.h +0 -45
  576. package/Microsoft.ReactNative/Views/ScrollContentViewManager.cpp +0 -16
  577. package/Microsoft.ReactNative/Views/ScrollContentViewManager.h +0 -19
  578. package/Microsoft.ReactNative/Views/ScrollViewManager.cpp +0 -540
  579. package/Microsoft.ReactNative/Views/ScrollViewManager.h +0 -42
  580. package/Microsoft.ReactNative/Views/ShadowNodeBase.cpp +0 -228
  581. package/Microsoft.ReactNative/Views/ShadowNodeBase.h +0 -169
  582. package/Microsoft.ReactNative/Views/ShadowNodeRegistry.cpp +0 -68
  583. package/Microsoft.ReactNative/Views/ShadowNodeRegistry.h +0 -40
  584. package/Microsoft.ReactNative/Views/SliderViewManager.cpp +0 -97
  585. package/Microsoft.ReactNative/Views/SliderViewManager.h +0 -32
  586. package/Microsoft.ReactNative/Views/SwitchViewManager.cpp +0 -227
  587. package/Microsoft.ReactNative/Views/SwitchViewManager.h +0 -31
  588. package/Microsoft.ReactNative/Views/Text/TextHighlighterVisitor.cpp +0 -52
  589. package/Microsoft.ReactNative/Views/Text/TextHighlighterVisitor.h +0 -37
  590. package/Microsoft.ReactNative/Views/Text/TextHitTestUtils.cpp +0 -348
  591. package/Microsoft.ReactNative/Views/Text/TextHitTestUtils.h +0 -13
  592. package/Microsoft.ReactNative/Views/Text/TextHitTestVisitor.cpp +0 -76
  593. package/Microsoft.ReactNative/Views/Text/TextHitTestVisitor.h +0 -32
  594. package/Microsoft.ReactNative/Views/Text/TextParentVisitor.cpp +0 -12
  595. package/Microsoft.ReactNative/Views/Text/TextParentVisitor.h +0 -19
  596. package/Microsoft.ReactNative/Views/Text/TextPropertyChangedParentVisitor.cpp +0 -75
  597. package/Microsoft.ReactNative/Views/Text/TextPropertyChangedParentVisitor.h +0 -43
  598. package/Microsoft.ReactNative/Views/Text/TextTransformParentVisitor.cpp +0 -21
  599. package/Microsoft.ReactNative/Views/Text/TextTransformParentVisitor.h +0 -23
  600. package/Microsoft.ReactNative/Views/Text/TextTransformVisitor.cpp +0 -70
  601. package/Microsoft.ReactNative/Views/Text/TextTransformVisitor.h +0 -34
  602. package/Microsoft.ReactNative/Views/Text/TextVisitor.cpp +0 -56
  603. package/Microsoft.ReactNative/Views/Text/TextVisitor.h +0 -34
  604. package/Microsoft.ReactNative/Views/Text/TextVisitorScope.h +0 -35
  605. package/Microsoft.ReactNative/Views/Text/TextVisitors.h +0 -47
  606. package/Microsoft.ReactNative/Views/TextInputViewManager.cpp +0 -1003
  607. package/Microsoft.ReactNative/Views/TextInputViewManager.h +0 -33
  608. package/Microsoft.ReactNative/Views/TextViewManager.cpp +0 -414
  609. package/Microsoft.ReactNative/Views/TextViewManager.h +0 -47
  610. package/Microsoft.ReactNative/Views/TouchEventHandler.cpp +0 -608
  611. package/Microsoft.ReactNative/Views/TouchEventHandler.h +0 -116
  612. package/Microsoft.ReactNative/Views/UnimplementedViewManager.cpp +0 -79
  613. package/Microsoft.ReactNative/Views/UnimplementedViewManager.h +0 -27
  614. package/Microsoft.ReactNative/Views/ViewControl.cpp +0 -43
  615. package/Microsoft.ReactNative/Views/ViewControl.h +0 -32
  616. package/Microsoft.ReactNative/Views/ViewManager.h +0 -33
  617. package/Microsoft.ReactNative/Views/ViewManagerBase.cpp +0 -487
  618. package/Microsoft.ReactNative/Views/ViewManagerBase.h +0 -121
  619. package/Microsoft.ReactNative/Views/ViewPanel.cpp +0 -164
  620. package/Microsoft.ReactNative/Views/ViewPanel.h +0 -82
  621. package/Microsoft.ReactNative/Views/ViewViewManager.cpp +0 -507
  622. package/Microsoft.ReactNative/Views/ViewViewManager.h +0 -52
  623. package/Microsoft.ReactNative/Views/VirtualTextViewManager.cpp +0 -143
  624. package/Microsoft.ReactNative/Views/VirtualTextViewManager.h +0 -57
  625. package/Microsoft.ReactNative/Views/XamlFeatures.cpp +0 -11
  626. package/Microsoft.ReactNative/Views/XamlFeatures.h +0 -11
  627. package/Microsoft.ReactNative/Views/cppwinrt/AccessibilityAction.idl +0 -12
  628. package/Microsoft.ReactNative/Views/cppwinrt/DynamicAutomationPeer.idl +0 -231
  629. package/Microsoft.ReactNative/Views/cppwinrt/ViewPanel.idl +0 -48
  630. package/Microsoft.ReactNative/XamlHelper.cpp +0 -78
  631. package/Microsoft.ReactNative/XamlHelper.h +0 -54
  632. package/Microsoft.ReactNative/XamlHelper.idl +0 -30
  633. package/Microsoft.ReactNative/XamlLoadState.cpp +0 -217
  634. package/Microsoft.ReactNative/XamlLoadState.h +0 -44
  635. package/Microsoft.ReactNative/XamlView.cpp +0 -59
  636. package/Microsoft.ReactNative/XamlView.h +0 -58
  637. package/Microsoft.ReactNative/getLayoutProps.ps1 +0 -5
  638. package/Microsoft.ReactNative.Cxx/UI.Xaml.Automation.Peers.h +0 -10
  639. package/Microsoft.ReactNative.Cxx/UI.Xaml.Automation.h +0 -10
  640. package/Microsoft.ReactNative.Cxx/UI.Xaml.Controls.Primitives.h +0 -10
  641. package/Microsoft.ReactNative.Cxx/UI.Xaml.Controls.h +0 -13
  642. package/Microsoft.ReactNative.Cxx/UI.Xaml.Documents.h +0 -10
  643. package/Microsoft.ReactNative.Cxx/UI.Xaml.Hosting.DesktopWindowXamlSource.h +0 -11
  644. package/Microsoft.ReactNative.Cxx/UI.Xaml.Hosting.h +0 -10
  645. package/Microsoft.ReactNative.Cxx/UI.Xaml.Input.h +0 -10
  646. package/Microsoft.ReactNative.Cxx/UI.Xaml.Markup.h +0 -10
  647. package/Microsoft.ReactNative.Cxx/UI.Xaml.Media.Imaging.h +0 -10
  648. package/Microsoft.ReactNative.Cxx/UI.Xaml.Media.Media3D.h +0 -10
  649. package/Microsoft.ReactNative.Cxx/UI.Xaml.Media.h +0 -10
  650. package/Microsoft.ReactNative.Cxx/UI.Xaml.Navigation.h +0 -10
  651. package/Microsoft.ReactNative.Cxx/UI.Xaml.Shapes.h +0 -10
  652. package/Microsoft.ReactNative.Managed/AttributedViewManager.cs +0 -527
  653. package/Microsoft.ReactNative.Managed/ViewManagerAttributes.cs +0 -91
  654. package/Microsoft.ReactNative.Managed/ViewManagerEvent.cs +0 -13
  655. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityProps.cpp +0 -344
  656. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/core/DynamicEventPayload.cpp +0 -42
  657. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/YGEnums.h +0 -146
  658. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/algorithm/CalculateLayout.cpp +0 -2435
  659. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/enums/ExperimentalFeature.h +0 -40
  660. package/Shared/BatchingMessageQueueThread.h +0 -20
  661. package/Shared/ChakraRuntimeHolder.cpp +0 -62
  662. package/Shared/ChakraRuntimeHolder.h +0 -46
  663. package/Shared/CreateInstance.h +0 -25
  664. package/Shared/Executors/WebSocketJSExecutor.cpp +0 -294
  665. package/Shared/Executors/WebSocketJSExecutor.h +0 -123
  666. package/Shared/Executors/WebSocketJSExecutorFactory.cpp +0 -25
  667. package/Shared/Hermes/HermesSamplingProfiler.cpp +0 -114
  668. package/Shared/Hermes/HermesSamplingProfiler.h +0 -26
  669. package/Shared/JSI/ChakraApi.cpp +0 -436
  670. package/Shared/JSI/ChakraApi.h +0 -474
  671. package/Shared/JSI/ChakraJsiRuntime_edgemode.cpp +0 -100
  672. package/Shared/JSI/ChakraRuntime.cpp +0 -1132
  673. package/Shared/JSI/ChakraRuntime.h +0 -512
  674. package/Shared/JSI/ChakraRuntimeArgs.h +0 -45
  675. package/Shared/JSI/ChakraRuntimeFactory.h +0 -15
  676. package/Shared/JSI/JSExecutorFactoryDelegate.h +0 -12
  677. package/Shared/JSI/JSExecutorFactorySettings.cpp +0 -30
  678. package/Shared/JSI/JSExecutorFactorySettings.h +0 -21
  679. package/Shared/NativeModuleProvider.h +0 -40
  680. package/Shared/SystemChakraRuntime.h +0 -38
  681. package/Shared/Threading/BatchingQueueThread.cpp +0 -128
  682. package/Shared/Threading/BatchingQueueThread.h +0 -59
  683. package/Shared/WebSocketJSExecutorFactory.h +0 -27
  684. package/fmt/TEMP_UntilFmtUpdate/core.h +0 -2925
  685. package/template/cpp-app/proj/MyApp.sln +0 -166
  686. package/template/cpp-app/proj/MyApp.vcxproj +0 -176
  687. package/template/cpp-app/proj/MyApp.vcxproj.filters +0 -62
  688. package/template/cpp-app/src/App.cpp +0 -93
  689. package/template/cpp-app/src/App.h +0 -21
  690. package/template/cpp-app/src/App.idl +0 -3
  691. package/template/cpp-app/src/AutolinkedNativeModules.g.cpp +0 -13
  692. package/template/cpp-app/src/AutolinkedNativeModules.g.h +0 -10
  693. package/template/cpp-app/src/MainPage.cpp +0 -20
  694. package/template/cpp-app/src/MainPage.h +0 -19
  695. package/template/cpp-app/src/MainPage.idl +0 -10
  696. package/template/cpp-app/src/PropertySheet.props +0 -16
  697. package/template/cpp-app/src/ReactPackageProvider.cpp +0 -15
  698. package/template/cpp-app/src/ReactPackageProvider.h +0 -13
  699. package/template/cpp-app/src/pch.cpp +0 -1
  700. package/template/cpp-app/src/pch.h +0 -24
  701. package/template/cs-app/proj/MyApp.csproj +0 -162
  702. package/template/cs-app/proj/MyApp.sln +0 -191
  703. package/template/cs-app/src/App.xaml.cs +0 -62
  704. package/template/cs-app/src/AutolinkedNativeModules.g.cs +0 -13
  705. package/template/cs-app/src/MainPage.xaml.cs +0 -34
  706. package/template/cs-app/src/Properties/AssemblyInfo.cs +0 -29
  707. package/template/cs-app/src/Properties/Default.rd.xml +0 -32
  708. package/template/cs-app/src/ReactPackageProvider.cs +0 -17
  709. package/template/shared-app/assets/LockScreenLogo.scale-200.png +0 -0
  710. package/template/shared-app/assets/SplashScreen.scale-200.png +0 -0
  711. package/template/shared-app/assets/Square150x150Logo.scale-200.png +0 -0
  712. package/template/shared-app/assets/Square44x44Logo.scale-200.png +0 -0
  713. package/template/shared-app/assets/Square44x44Logo.targetsize-24_altform-unplated.png +0 -0
  714. package/template/shared-app/assets/StoreLogo.png +0 -0
  715. package/template/shared-app/assets/Wide310x150Logo.scale-200.png +0 -0
  716. package/template/shared-app/proj/ExperimentalFeatures.props +0 -32
  717. package/template/shared-app/proj/NuGet_Config +0 -19
  718. package/template/shared-app/src/App.xaml +0 -10
  719. package/template/shared-app/src/AutolinkedNativeModules.g.props +0 -6
  720. package/template/shared-app/src/AutolinkedNativeModules.g.targets +0 -6
  721. package/template/shared-app/src/MainPage.xaml +0 -21
  722. package/template/shared-app/src/Package.appxmanifest +0 -50
  723. package/templates/old/uwp-cpp-app/template.config.js +0 -15
  724. package/templates/old/uwp-cs-app/template.config.js +0 -15
@@ -1,1003 +0,0 @@
1
- // Copyright (c) Microsoft Corporation.
2
- // Licensed under the MIT License.
3
-
4
- #include "pch.h"
5
-
6
- #include "TextInputViewManager.h"
7
-
8
- #include "Unicode.h"
9
- #include "Utils/XamlIslandUtils.h"
10
-
11
- #include <UI.Xaml.Controls.h>
12
- #include <UI.Xaml.Input.h>
13
- #include <UI.Xaml.Shapes.h>
14
- #include <Utils/PropertyHandlerUtils.h>
15
- #include <Utils/PropertyUtils.h>
16
- #include <Utils/ValueUtils.h>
17
-
18
- #include <INativeUIManager.h>
19
- #include <IReactInstance.h>
20
- #include <Modules/NativeUIManager.h>
21
- #include <Modules/PaperUIManagerModule.h>
22
- #include <Views/FrameworkElementTransferProperties.h>
23
-
24
- #ifdef USE_WINUI3
25
- namespace winrt::Microsoft::UI::Xaml::Controls {
26
- using IPasswordBox4 = ::xaml::Controls::IPasswordBox;
27
- using ITextBox6 = ::xaml::Controls::ITextBox;
28
- }; // namespace winrt::Microsoft::UI::Xaml::Controls
29
- #endif
30
-
31
- namespace winrt {
32
- using namespace xaml;
33
- using namespace xaml::Media;
34
- using namespace xaml::Shapes;
35
- } // namespace winrt
36
-
37
- namespace Microsoft::ReactNative {
38
- struct Selection {
39
- int64_t start = -1;
40
- int64_t end = -1;
41
- };
42
- } // namespace Microsoft::ReactNative
43
-
44
- // Such code is better to move to a separate parser layer
45
- template <>
46
- struct json_type_traits<Microsoft::ReactNative::Selection> {
47
- static Microsoft::ReactNative::Selection parseJson(const winrt::Microsoft::ReactNative::JSValue &json) {
48
- Microsoft::ReactNative::Selection selection;
49
- for (auto &item : json.AsObject()) {
50
- if (item.first == "start") {
51
- auto start = item.second.AsInt64();
52
- if (start == start)
53
- selection.start = start;
54
- } else if (item.first == "end") {
55
- auto end = item.second.AsInt64();
56
- if (end == end)
57
- selection.end = end;
58
- }
59
- }
60
- return selection;
61
- }
62
- };
63
-
64
- static const std::unordered_map<std::string, xaml::Input::InputScopeNameValue> textBoxKeyboardTypeMap = {
65
- {"default", xaml::Input::InputScopeNameValue::Default},
66
- {"number-pad", xaml::Input::InputScopeNameValue::TelephoneNumber},
67
- {"decimal-pad", xaml::Input::InputScopeNameValue::Digits},
68
- {"email-address", xaml::Input::InputScopeNameValue::EmailNameOrAddress},
69
- {"phone-pad", xaml::Input::InputScopeNameValue::TelephoneNumber},
70
- {"numeric", xaml::Input::InputScopeNameValue::Number},
71
- {"url", xaml::Input::InputScopeNameValue::Url},
72
- {"web-search", xaml::Input::InputScopeNameValue::Search}};
73
-
74
- static const std::unordered_map<std::string, xaml::Input::InputScopeNameValue> passwordBoxKeyboardTypeMap = {
75
- {"default", xaml::Input::InputScopeNameValue::Password},
76
- {"numeric", xaml::Input::InputScopeNameValue::NumericPin}};
77
-
78
- static xaml::Input::InputScopeNameValue parseKeyboardType(
79
- const winrt::Microsoft::ReactNative::JSValue &val,
80
- const bool isTextBox) {
81
- auto keyboardTypeMap = isTextBox ? textBoxKeyboardTypeMap : passwordBoxKeyboardTypeMap;
82
-
83
- auto iter = keyboardTypeMap.find(val.AsString());
84
-
85
- if (iter != keyboardTypeMap.end()) {
86
- return iter->second;
87
- }
88
-
89
- return isTextBox ? xaml::Input::InputScopeNameValue::Default : xaml::Input::InputScopeNameValue::Password;
90
- }
91
-
92
- namespace Microsoft::ReactNative {
93
-
94
- class TextInputShadowNode : public ShadowNodeBase {
95
- using Super = ShadowNodeBase;
96
-
97
- public:
98
- TextInputShadowNode() = default;
99
- void createView(const winrt::Microsoft::ReactNative::JSValueObject &) override;
100
- void updateProperties(winrt::Microsoft::ReactNative::JSValueObject &props) override;
101
-
102
- void dispatchCommand(const std::string &commandId, winrt::Microsoft::ReactNative::JSValueArray &&commandArgs)
103
- override;
104
-
105
- void AddView(ShadowNode & /*child*/, int64_t /*index*/) override {
106
- // NYI #5689
107
- YellowBox("Nested elements in TextInput are currently unsupported on Windows");
108
- }
109
- void RemoveChildAt(int64_t /*indexToRemove*/) override {
110
- // NYI #5689
111
- YellowBox("Nested elements in TextInput are currently unsupported on Windows");
112
- }
113
- void ReplaceChild(const XamlView & /*oldChildView*/, const XamlView & /*newChildView*/) override {
114
- // NYI #5689
115
- YellowBox("Nested elements in TextInput are currently unsupported on Windows");
116
- }
117
-
118
- bool ImplementsPadding() override {
119
- return true;
120
- }
121
-
122
- virtual bool NeedsForceLayout() override {
123
- return true;
124
- }
125
-
126
- private:
127
- void dispatchTextInputChangeEvent(winrt::hstring newText);
128
- void registerEvents();
129
- void registerPreviewKeyDown();
130
- void UpdateCaretColorOrHideIfNeeded();
131
- void setPasswordBoxPlaceholderForeground(
132
- xaml::Controls::PasswordBox passwordBox,
133
- const winrt::Microsoft::ReactNative::JSValue &color);
134
- void SetText(const winrt::Microsoft::ReactNative::JSValue &text);
135
- void SetSelection(int64_t start, int64_t end);
136
- winrt::Shape FindCaret(xaml::DependencyObject element);
137
- bool IsTextBox();
138
-
139
- bool m_initialUpdateComplete = false;
140
- bool m_autoFocus = false;
141
- bool m_shouldClearTextOnFocus = false;
142
- bool m_shouldSelectTextOnFocus = false;
143
- bool m_contextMenuHidden = false;
144
- bool m_hideCaret = false;
145
- bool m_shouldClearTextOnSubmit = false;
146
-
147
- winrt::Microsoft::ReactNative::JSValue m_cursorColor;
148
-
149
- winrt::Microsoft::ReactNative::JSValue m_placeholderTextColor;
150
- std::vector<HandledKeyboardEvent> m_submitKeyEvents{};
151
-
152
- // Javascripts is running in a different thread. If the typing is very fast,
153
- // It's possible that two TextChanged are raised but TextInput just got the
154
- // first response from Javascript. So the first response should be dropped.
155
- // EventCount is introduced to resolve this problem
156
- uint32_t m_nativeEventCount{0}; // EventCount to javascript
157
- uint32_t m_mostRecentEventCount{0}; // EventCount from javascript
158
-
159
- private:
160
- xaml::Controls::TextBox::TextChanging_revoker m_textBoxTextChangingRevoker{};
161
- xaml::Controls::TextBox::SelectionChanged_revoker m_textBoxSelectionChangedRevoker{};
162
- xaml::Controls::TextBox::ContextMenuOpening_revoker m_textBoxContextMenuOpeningRevoker{};
163
-
164
- xaml::Controls::PasswordBox::PasswordChanging_revoker m_passwordBoxPasswordChangingRevoker{};
165
- xaml::Controls::PasswordBox::PasswordChanged_revoker m_passwordBoxPasswordChangedRevoker{};
166
- xaml::Controls::PasswordBox::ContextMenuOpening_revoker m_passwordBoxContextMenuOpeningRevoker{};
167
-
168
- xaml::Controls::Control::GotFocus_revoker m_controlGotFocusRevoker{};
169
- xaml::Controls::Control::LostFocus_revoker m_controlLostFocusRevoker{};
170
- xaml::Controls::Control::PreviewKeyDown_revoker m_controlPreviewKeyDownRevoker{};
171
- xaml::Controls::Control::SizeChanged_revoker m_controlSizeChangedRevoker{};
172
- xaml::Controls::Control::CharacterReceived_revoker m_controlCharacterReceivedRevoker{};
173
- xaml::Controls::ScrollViewer::ViewChanging_revoker m_scrollViewerViewChangingRevoker{};
174
- xaml::Controls::Control::Loaded_revoker m_controlLoadedRevoker{};
175
- };
176
-
177
- void TextInputShadowNode::createView(const winrt::Microsoft::ReactNative::JSValueObject &props) {
178
- Super::createView(props);
179
- registerEvents();
180
- }
181
-
182
- void TextInputShadowNode::dispatchTextInputChangeEvent(winrt::hstring newText) {
183
- if (!m_initialUpdateComplete) {
184
- return;
185
- }
186
- m_nativeEventCount++;
187
- folly::dynamic eventData =
188
- folly::dynamic::object("target", m_tag)("text", HstringToDynamic(newText))("eventCount", m_nativeEventCount);
189
- GetViewManager()->GetReactContext().DispatchEvent(m_tag, "topTextInputChange", std::move(eventData));
190
- }
191
-
192
- void TextInputShadowNode::registerEvents() {
193
- auto control = GetView().as<xaml::Controls::Control>();
194
- auto tag = m_tag;
195
- auto isTextBox = IsTextBox();
196
-
197
- // TextChanged is implemented as async event in Xaml. If Javascript is like
198
- // this:
199
- // onChangeText={text => this.setState({text})}
200
- // And user type 'AB' very fast, then 'B' is possible to be lost in below
201
- // situation.
202
- // Input 'A' -> TextChanged for 'A' -> Javascript processing 'A' -> Input
203
- // becomes 'AB' -> Processing javascript response and set text to 'A'
204
- // TextChanged for 'AB' but textbox.Text is 'A' -> Javascript processing
205
- // 'A'
206
- //
207
- // TextChanging is used to drop the Javascript response of 'A' and expect
208
- // another TextChanged event with correct event count.
209
- if (isTextBox) {
210
- m_passwordBoxPasswordChangedRevoker = {};
211
- m_passwordBoxPasswordChangingRevoker = {};
212
- auto textBox = control.as<xaml::Controls::TextBox>();
213
- EnsureUniqueTextFlyoutForXamlIsland(textBox);
214
- m_textBoxTextChangingRevoker = textBox.TextChanging(
215
- winrt::auto_revoke, [=](auto &&, auto &&) { dispatchTextInputChangeEvent(textBox.Text()); });
216
- } else {
217
- m_textBoxTextChangingRevoker = {};
218
- auto passwordBox = control.as<xaml::Controls::PasswordBox>();
219
- EnsureUniqueTextFlyoutForXamlIsland(passwordBox);
220
- if (control.try_as<xaml::Controls::IPasswordBox4>()) {
221
- m_passwordBoxPasswordChangingRevoker = passwordBox.PasswordChanging(
222
- winrt::auto_revoke, [=](auto &&, auto &&) { dispatchTextInputChangeEvent(passwordBox.Password()); });
223
- } else {
224
- m_passwordBoxPasswordChangedRevoker = passwordBox.PasswordChanged(
225
- winrt::auto_revoke, [=](auto &&, auto &&) { dispatchTextInputChangeEvent(passwordBox.Password()); });
226
- }
227
- }
228
-
229
- if (isTextBox) {
230
- m_passwordBoxContextMenuOpeningRevoker = {};
231
- auto textBox = control.as<xaml::Controls::TextBox>();
232
- m_textBoxContextMenuOpeningRevoker =
233
- textBox.ContextMenuOpening(winrt::auto_revoke, [=](auto &&, xaml::Controls::ContextMenuEventArgs const &e) {
234
- if (m_contextMenuHidden) {
235
- e.Handled(true);
236
- }
237
- });
238
- } else {
239
- m_textBoxContextMenuOpeningRevoker = {};
240
- auto passwordBox = control.as<xaml::Controls::PasswordBox>();
241
- m_passwordBoxContextMenuOpeningRevoker =
242
- passwordBox.ContextMenuOpening(winrt::auto_revoke, [=](auto &&, xaml::Controls::ContextMenuEventArgs const &e) {
243
- if (m_contextMenuHidden) {
244
- e.Handled(true);
245
- }
246
- });
247
- }
248
-
249
- m_controlGotFocusRevoker = control.GotFocus(winrt::auto_revoke, [=](auto &&, auto &&) {
250
- if (m_shouldClearTextOnFocus) {
251
- if (isTextBox) {
252
- control.as<xaml::Controls::TextBox>().ClearValue(xaml::Controls::TextBox::TextProperty());
253
- } else {
254
- control.as<xaml::Controls::PasswordBox>().ClearValue(xaml::Controls::PasswordBox::PasswordProperty());
255
- }
256
- }
257
-
258
- if (m_shouldSelectTextOnFocus) {
259
- if (isTextBox) {
260
- control.as<xaml::Controls::TextBox>().SelectAll();
261
- } else {
262
- control.as<xaml::Controls::PasswordBox>().SelectAll();
263
- }
264
- }
265
- UpdateCaretColorOrHideIfNeeded();
266
-
267
- folly::dynamic eventData = folly::dynamic::object("target", tag);
268
- if (!m_updating)
269
- GetViewManager()->GetReactContext().DispatchEvent(tag, "topTextInputFocus", std::move(eventData));
270
- });
271
-
272
- m_controlLostFocusRevoker = control.LostFocus(winrt::auto_revoke, [=](auto &&, auto &&) {
273
- folly::dynamic eventDataBlur = folly::dynamic::object("target", tag);
274
- folly::dynamic eventDataEndEditing = {};
275
- if (isTextBox) {
276
- eventDataEndEditing =
277
- folly::dynamic::object("target", tag)("text", HstringToDynamic(control.as<xaml::Controls::TextBox>().Text()));
278
- } else {
279
- eventDataEndEditing = folly::dynamic::object("target", tag)(
280
- "text", HstringToDynamic(control.as<xaml::Controls::PasswordBox>().Password()));
281
- }
282
- if (!m_updating) {
283
- GetViewManager()->GetReactContext().DispatchEvent(tag, "topTextInputBlur", std::move(eventDataBlur));
284
- GetViewManager()->GetReactContext().DispatchEvent(tag, "topTextInputEndEditing", std::move(eventDataEndEditing));
285
- }
286
- });
287
-
288
- registerPreviewKeyDown();
289
-
290
- if (isTextBox) {
291
- auto textBox = control.as<xaml::Controls::TextBox>();
292
- m_textBoxSelectionChangedRevoker = textBox.SelectionChanged(winrt::auto_revoke, [=](auto &&, auto &&) {
293
- folly::dynamic selectionData = folly::dynamic::object("start", textBox.SelectionStart())(
294
- "end", textBox.SelectionStart() + textBox.SelectionLength());
295
- folly::dynamic eventData = folly::dynamic::object("target", tag)("selection", std::move(selectionData));
296
- if (!m_updating)
297
- GetViewManager()->GetReactContext().DispatchEvent(tag, "topTextInputSelectionChange", std::move(eventData));
298
- });
299
- }
300
-
301
- m_controlSizeChangedRevoker =
302
- control.SizeChanged(winrt::auto_revoke, [=](auto &&, winrt::SizeChangedEventArgs const &args) {
303
- if (isTextBox) {
304
- if (control.as<xaml::Controls::TextBox>().TextWrapping() == xaml::TextWrapping::Wrap) {
305
- folly::dynamic contentSizeData =
306
- folly::dynamic::object("width", args.NewSize().Width)("height", args.NewSize().Height);
307
- folly::dynamic eventData = folly::dynamic::object("target", tag)("contentSize", std::move(contentSizeData));
308
- if (!m_updating)
309
- GetViewManager()->GetReactContext().DispatchEvent(
310
- tag, "topTextInputContentSizeChange", std::move(eventData));
311
- }
312
- }
313
- });
314
-
315
- m_controlLoadedRevoker = control.Loaded(winrt::auto_revoke, [=](auto &&, auto &&) {
316
- if (m_autoFocus) {
317
- if (auto uiManager = GetNativeUIManager(GetViewManager()->GetReactContext()).lock()) {
318
- uiManager->focus(m_tag);
319
- }
320
- }
321
-
322
- auto contentElement = control.as<xaml::Controls::IControlProtected>().GetTemplateChild(L"ContentElement");
323
- auto textBoxView = contentElement.as<xaml::Controls::ScrollViewer>();
324
- if (textBoxView) {
325
- m_scrollViewerViewChangingRevoker = textBoxView.ViewChanging(
326
- winrt::auto_revoke, [=](auto &&, xaml::Controls::ScrollViewerViewChangingEventArgs const &args) {
327
- if (!m_updating) {
328
- folly::dynamic offsetData = folly::dynamic::object("x", args.FinalView().HorizontalOffset())(
329
- "y", args.FinalView().VerticalOffset());
330
- folly::dynamic eventData = folly::dynamic::object("target", tag)("contentOffset", std::move(offsetData));
331
- GetViewManager()->GetReactContext().DispatchEvent(tag, "topTextInputScroll", std::move(eventData));
332
- }
333
- });
334
- }
335
- UpdateCaretColorOrHideIfNeeded();
336
- });
337
-
338
- if (control.try_as<xaml::IUIElement7>()) {
339
- m_controlCharacterReceivedRevoker = control.CharacterReceived(
340
- winrt::auto_revoke, [=](auto &&, xaml::Input::CharacterReceivedRoutedEventArgs const &args) {
341
- std::string key;
342
- wchar_t s[2] = L" ";
343
- s[0] = args.Character();
344
- key = Microsoft::Common::Unicode::Utf16ToUtf8(s, 1);
345
-
346
- if (key.compare("\r") == 0) {
347
- key = "Enter";
348
- } else if (key.compare("\b") == 0) {
349
- key = "Backspace";
350
- }
351
-
352
- if (!m_updating) {
353
- folly::dynamic eventData = folly::dynamic::object("target", tag)("key", folly::dynamic(key));
354
- GetViewManager()->GetReactContext().DispatchEvent(tag, "topTextInputKeyPress", std::move(eventData));
355
- }
356
- });
357
- }
358
-
359
- control.as<xaml::UIElement>().AddHandler(
360
- xaml::UIElement::PointerPressedEvent(),
361
- winrt::box_value(xaml::Input::PointerEventHandler([=](auto &&, xaml::Input::PointerRoutedEventArgs const &args) {
362
- folly::dynamic eventData = folly::dynamic::object("target", tag);
363
- GetViewManager()->GetReactContext().DispatchEvent(tag, "topTextInputPressIn", std::move(eventData));
364
- })),
365
- true);
366
-
367
- control.as<xaml::UIElement>().AddHandler(
368
- xaml::UIElement::PointerReleasedEvent(),
369
- winrt::box_value(xaml::Input::PointerEventHandler([=](auto &&, xaml::Input::PointerRoutedEventArgs const &args) {
370
- folly::dynamic eventData = folly::dynamic::object("target", tag);
371
- GetViewManager()->GetReactContext().DispatchEvent(tag, "topTextInputPressOut", std::move(eventData));
372
- })),
373
- true);
374
- }
375
-
376
- void TextInputShadowNode::registerPreviewKeyDown() {
377
- auto control = GetView().as<xaml::Controls::Control>();
378
- auto tag = m_tag;
379
- auto isTextBox = IsTextBox();
380
- m_controlPreviewKeyDownRevoker =
381
- control.PreviewKeyDown(winrt::auto_revoke, [=](auto &&, xaml::Input::KeyRoutedEventArgs const &args) {
382
- auto isMultiline = isTextBox && control.as<xaml::Controls::TextBox>().AcceptsReturn();
383
- auto shouldSubmit = !args.Handled();
384
- if (shouldSubmit) {
385
- if (!isMultiline && m_submitKeyEvents.size() == 0) {
386
- // If no 'submitKeyEvents' are supplied, use the default behavior for single-line TextInput
387
- shouldSubmit = args.Key() == winrt::Windows::System::VirtualKey::Enter;
388
- } else if (m_submitKeyEvents.size() > 0) {
389
- // If 'submitKeyEvents' are supplied, use them to determine whether to emit
390
- // 'onSubmitEditing' for either single-line or multi-line TextInput
391
-
392
- // This must be kept in sync with the default value for HandledKeyboardEvent.handledEventPhase
393
- auto defaultEventPhase = HandledEventPhase::Bubbling;
394
- auto currentEvent = KeyboardHelper::CreateKeyboardEvent(defaultEventPhase, args);
395
- shouldSubmit = KeyboardHelper::ShouldMarkKeyboardHandled(m_submitKeyEvents, currentEvent);
396
- } else {
397
- // If no 'submitKeyEvents' are supplied, do not emit 'onSubmitEditing' for multi-line TextInput
398
- shouldSubmit = false;
399
- }
400
- }
401
-
402
- if (shouldSubmit) {
403
- folly::dynamic eventDataSubmitEditing = {};
404
- if (isTextBox) {
405
- eventDataSubmitEditing = folly::dynamic::object("target", tag)(
406
- "text", HstringToDynamic(control.as<xaml::Controls::TextBox>().Text()));
407
- } else {
408
- eventDataSubmitEditing = folly::dynamic::object("target", tag)(
409
- "text", HstringToDynamic(control.as<xaml::Controls::PasswordBox>().Password()));
410
- }
411
-
412
- GetViewManager()->GetReactContext().DispatchEvent(
413
- tag, "topTextInputSubmitEditing", std::move(eventDataSubmitEditing));
414
-
415
- if (m_shouldClearTextOnSubmit) {
416
- if (isTextBox) {
417
- control.as<xaml::Controls::TextBox>().ClearValue(xaml::Controls::TextBox::TextProperty());
418
- } else {
419
- control.as<xaml::Controls::PasswordBox>().ClearValue(xaml::Controls::PasswordBox::PasswordProperty());
420
- }
421
- }
422
-
423
- // For multi-line TextInput, we have to mark the PreviewKeyDown event as
424
- // handled to prevent the TextInput from adding a newline character
425
- if (isMultiline) {
426
- args.Handled(true);
427
- }
428
- }
429
- });
430
- }
431
-
432
- xaml::Shapes::Shape TextInputShadowNode::FindCaret(xaml::DependencyObject element) {
433
- if (element == nullptr)
434
- return nullptr;
435
-
436
- if (auto shape = element.try_as<winrt::Shape>())
437
- return shape;
438
-
439
- int childrenCount = winrt::VisualTreeHelper::GetChildrenCount(element);
440
- for (int i = 0; i < childrenCount; i++) {
441
- auto result = FindCaret(winrt::VisualTreeHelper::GetChild(element, i));
442
- if (result != nullptr)
443
- return result;
444
- }
445
-
446
- return nullptr;
447
- }
448
-
449
- bool TextInputShadowNode::IsTextBox() {
450
- return !!GetView().try_as<xaml::Controls::TextBox>();
451
- }
452
-
453
- // hacking solution to hide the caret or change its color
454
- void TextInputShadowNode::UpdateCaretColorOrHideIfNeeded() {
455
- bool updateRequired = false;
456
- xaml::Media::SolidColorBrush color;
457
-
458
- if (m_hideCaret) {
459
- updateRequired = true;
460
- color = xaml::Media::SolidColorBrush(winrt::Colors::Transparent());
461
- } else if (!m_cursorColor.IsNull()) {
462
- updateRequired = true;
463
- color = SolidColorBrushFrom(m_cursorColor);
464
- }
465
-
466
- if (updateRequired) {
467
- auto control = GetView().as<xaml::Controls::Control>();
468
- if (auto caret = FindCaret(control)) {
469
- caret.CompositeMode(xaml::Media::ElementCompositeMode::Inherit);
470
- caret.Fill(color);
471
- }
472
- }
473
- }
474
-
475
- void TextInputShadowNode::setPasswordBoxPlaceholderForeground(
476
- xaml::Controls::PasswordBox passwordBox,
477
- const winrt::Microsoft::ReactNative::JSValue &color) {
478
- m_placeholderTextColor = color.Copy();
479
- auto defaultRD = xaml::ResourceDictionary();
480
- auto solidColorBrush = ColorFrom(m_placeholderTextColor);
481
- defaultRD.Insert(winrt::box_value(L"TextControlPlaceholderForeground"), winrt::box_value(solidColorBrush));
482
- defaultRD.Insert(winrt::box_value(L"TextControlPlaceholderForegroundFocused"), winrt::box_value(solidColorBrush));
483
- defaultRD.Insert(winrt::box_value(L"TextControlPlaceholderForegroundPointerOver"), winrt::box_value(solidColorBrush));
484
- defaultRD.Insert(winrt::box_value(L"TextControlPlaceholderForegroundDisabled"), winrt::box_value(solidColorBrush));
485
- auto passwordBoxResource = xaml::ResourceDictionary();
486
- auto themeDictionaries = passwordBoxResource.ThemeDictionaries();
487
- themeDictionaries.Insert(winrt::box_value(L"Default"), defaultRD);
488
- passwordBoxResource.Insert(winrt::box_value(L"ThemeDictionaries"), themeDictionaries);
489
- passwordBox.Resources(passwordBoxResource);
490
- }
491
-
492
- void TextInputShadowNode::updateProperties(winrt::Microsoft::ReactNative::JSValueObject &props) {
493
- m_updating = true;
494
- auto control = GetView().as<xaml::Controls::Control>();
495
- auto textBox = control.try_as<xaml::Controls::TextBox>();
496
- auto passwordBox = control.try_as<xaml::Controls::PasswordBox>();
497
- auto hasKeyDownEvents = false;
498
-
499
- auto markDirty = false;
500
- auto isTextBox = IsTextBox();
501
- for (auto &pair : props) {
502
- const std::string &propertyName = pair.first;
503
- const auto &propertyValue = pair.second;
504
-
505
- // Applicable properties for both TextBox and PasswordBox
506
- if (TryUpdateFontProperties(control, propertyName, propertyValue)) {
507
- markDirty = true;
508
- continue;
509
- } else if (TryUpdateCharacterSpacing(control, propertyName, propertyValue)) {
510
- markDirty = true;
511
- continue;
512
- } else if (propertyName == "allowFontScaling") {
513
- markDirty = true;
514
- if (propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Boolean)
515
- control.IsTextScaleFactorEnabled(propertyValue.AsBoolean());
516
- else if (propertyValue.IsNull())
517
- control.ClearValue(xaml::Controls::Control::IsTextScaleFactorEnabledProperty());
518
- } else if (propertyName == "clearTextOnFocus") {
519
- if (propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Boolean)
520
- m_shouldClearTextOnFocus = propertyValue.AsBoolean();
521
- } else if (propertyName == "selectTextOnFocus") {
522
- if (propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Boolean)
523
- m_shouldSelectTextOnFocus = propertyValue.AsBoolean();
524
- } else if (propertyName == "mostRecentEventCount") {
525
- if (propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Double ||
526
- propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Int64) {
527
- m_mostRecentEventCount = propertyValue.AsInt32();
528
- }
529
- } else if (propertyName == "contextMenuHidden") {
530
- if (propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Boolean)
531
- m_contextMenuHidden = propertyValue.AsBoolean();
532
- } else if (propertyName == "caretHidden") {
533
- if (propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Boolean) {
534
- m_hideCaret = propertyValue.AsBoolean();
535
- UpdateCaretColorOrHideIfNeeded();
536
- }
537
- } else if (propertyName == "focusable") {
538
- // parent class also sets isTabStop
539
- if (propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Boolean) {
540
- control.IsEnabled(propertyValue.AsBoolean());
541
- } else if (propertyValue.IsNull()) {
542
- control.ClearValue(xaml::Controls::Control::IsEnabledProperty());
543
- }
544
- } else if (propertyName == "secureTextEntry") {
545
- markDirty = true;
546
- if (propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Boolean) {
547
- if (propertyValue.AsBoolean()) {
548
- if (isTextBox) {
549
- xaml::Controls::PasswordBox newPasswordBox;
550
- ReparentView(newPasswordBox);
551
- isTextBox = false;
552
- registerEvents();
553
- control = newPasswordBox.as<xaml::Controls::Control>();
554
- passwordBox = newPasswordBox;
555
- if (!m_placeholderTextColor.IsNull()) {
556
- setPasswordBoxPlaceholderForeground(newPasswordBox, m_placeholderTextColor);
557
- }
558
- }
559
- } else {
560
- if (!isTextBox) {
561
- xaml::Controls::TextBox newTextBox;
562
- ReparentView(newTextBox);
563
- isTextBox = true;
564
- registerEvents();
565
- control = newTextBox.as<xaml::Controls::Control>();
566
- textBox = newTextBox;
567
- if (!m_placeholderTextColor.IsNull()) {
568
- textBox.PlaceholderForeground(SolidColorBrushFrom(m_placeholderTextColor));
569
- }
570
- }
571
- }
572
- }
573
- } else if (propertyName == "maxLength") {
574
- markDirty = true;
575
- if (propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Double ||
576
- propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Int64) {
577
- control.SetValue(
578
- isTextBox ? xaml::Controls::TextBox::MaxLengthProperty() : xaml::Controls::PasswordBox::MaxLengthProperty(),
579
- winrt::PropertyValue::CreateInt32(propertyValue.AsInt32()));
580
- } else if (propertyValue.IsNull()) {
581
- control.ClearValue(
582
- isTextBox ? xaml::Controls::TextBox::MaxLengthProperty()
583
- : xaml::Controls::PasswordBox::MaxLengthProperty());
584
- }
585
- } else if (propertyName == "placeholder") {
586
- if (propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::String) {
587
- control.SetValue(
588
- isTextBox ? xaml::Controls::TextBox::PlaceholderTextProperty()
589
- : xaml::Controls::PasswordBox::PlaceholderTextProperty(),
590
- winrt::PropertyValue::CreateString(asHstring(propertyValue)));
591
- } else if (propertyValue.IsNull()) {
592
- control.ClearValue(
593
- isTextBox ? xaml::Controls::TextBox::PlaceholderTextProperty()
594
- : xaml::Controls::PasswordBox::PlaceholderTextProperty());
595
- }
596
- } else if (propertyName == "cursorColor") {
597
- m_cursorColor = nullptr;
598
- if (IsValidColorValue(propertyValue)) {
599
- m_cursorColor = propertyValue.Copy();
600
- }
601
- } else if (propertyName == "selectionColor") {
602
- if (IsValidColorValue(propertyValue)) {
603
- control.SetValue(
604
- isTextBox ? xaml::Controls::TextBox::SelectionHighlightColorProperty()
605
- : xaml::Controls::PasswordBox::SelectionHighlightColorProperty(),
606
- SolidColorBrushFrom(propertyValue));
607
- } else if (propertyValue.IsNull())
608
- control.ClearValue(
609
- isTextBox ? xaml::Controls::TextBox::SelectionHighlightColorProperty()
610
- : xaml::Controls::PasswordBox::SelectionHighlightColorProperty());
611
- } else if (propertyName == "keyboardType") {
612
- if (propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::String) {
613
- auto inputScopeNameValue = parseKeyboardType(propertyValue, isTextBox);
614
- auto scope = xaml::Input::InputScope();
615
- auto scopeName = xaml::Input::InputScopeName(inputScopeNameValue);
616
- auto names = scope.Names();
617
- names.Append(scopeName);
618
- control.SetValue(
619
- isTextBox ? xaml::Controls::TextBox::InputScopeProperty()
620
- : xaml::Controls::PasswordBox::InputScopeProperty(),
621
- scope);
622
- } else if (propertyValue.IsNull())
623
- control.ClearValue(
624
- isTextBox ? xaml::Controls::TextBox::InputScopeProperty()
625
- : xaml::Controls::PasswordBox::InputScopeProperty());
626
- } else if (propertyName == "placeholderTextColor") {
627
- m_placeholderTextColor = nullptr;
628
- if (textBox.try_as<xaml::Controls::ITextBox6>() && isTextBox) {
629
- if (IsValidColorValue(propertyValue)) {
630
- m_placeholderTextColor = propertyValue.Copy();
631
- textBox.PlaceholderForeground(SolidColorBrushFrom(propertyValue));
632
- } else if (propertyValue.IsNull())
633
- textBox.ClearValue(xaml::Controls::TextBox::PlaceholderForegroundProperty());
634
- } else if (isTextBox != true && IsValidColorValue(propertyValue)) {
635
- setPasswordBoxPlaceholderForeground(passwordBox, propertyValue);
636
- }
637
- } else if (propertyName == "clearTextOnSubmit") {
638
- if (propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Boolean)
639
- m_shouldClearTextOnSubmit = propertyValue.AsBoolean();
640
- } else if (propertyName == "submitKeyEvents") {
641
- if (propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Array)
642
- m_submitKeyEvents = KeyboardHelper::FromJS(propertyValue);
643
- else if (propertyValue.IsNull())
644
- m_submitKeyEvents.clear();
645
- } else if (propertyName == "keyDownEvents") {
646
- hasKeyDownEvents = propertyValue.ItemCount() > 0;
647
- } else if (propertyName == "autoFocus") {
648
- if (propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Boolean)
649
- m_autoFocus = propertyValue.AsBoolean();
650
- } else if (propertyName == "editable") {
651
- if (propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Boolean) {
652
- isTextBox ? textBox.IsReadOnly(!propertyValue.AsBoolean()) : passwordBox.IsEnabled(propertyValue.AsBoolean());
653
- } else if (propertyValue.IsNull()) {
654
- isTextBox ? textBox.ClearValue(xaml::Controls::TextBox::IsReadOnlyProperty())
655
- : passwordBox.ClearValue(xaml::Controls::Control::IsEnabledProperty());
656
- }
657
- } else {
658
- if (isTextBox) { // Applicable properties for TextBox
659
- if (TryUpdateTextAlignment(textBox, propertyName, propertyValue)) {
660
- continue;
661
- } else if (propertyName == "multiline") {
662
- markDirty = true;
663
- if (propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Boolean) {
664
- const bool isMultiline = propertyValue.AsBoolean();
665
- textBox.TextWrapping(isMultiline ? xaml::TextWrapping::Wrap : xaml::TextWrapping::NoWrap);
666
- textBox.AcceptsReturn(isMultiline);
667
- } else if (propertyValue.IsNull())
668
- textBox.ClearValue(xaml::Controls::TextBox::TextWrappingProperty());
669
- } else if (propertyName == "scrollEnabled") {
670
- if (propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Boolean &&
671
- textBox.TextWrapping() == xaml::TextWrapping::Wrap) {
672
- auto scrollMode =
673
- propertyValue.AsBoolean() ? xaml::Controls::ScrollMode::Auto : xaml::Controls::ScrollMode::Disabled;
674
- xaml::Controls::ScrollViewer::SetVerticalScrollMode(textBox, scrollMode);
675
- xaml::Controls::ScrollViewer::SetHorizontalScrollMode(textBox, scrollMode);
676
- }
677
- } else if (propertyName == "spellCheck") {
678
- if (propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::Boolean)
679
- textBox.IsSpellCheckEnabled(propertyValue.AsBoolean());
680
- else if (propertyValue.IsNull())
681
- textBox.ClearValue(xaml::Controls::TextBox::IsSpellCheckEnabledProperty());
682
- } else if (propertyName == "text") {
683
- markDirty = true;
684
- SetText(propertyValue);
685
- } else if (propertyName == "autoCapitalize") {
686
- if (textBox.try_as<xaml::Controls::ITextBox6>()) {
687
- if (propertyValue.Type() == winrt::Microsoft::ReactNative::JSValueType::String) {
688
- if (propertyValue.AsString() == "characters") {
689
- textBox.CharacterCasing(xaml::Controls::CharacterCasing::Upper);
690
- } else { // anything else turns off autoCap (should be "None" but
691
- // we don't support "words"/"sentences" yet)
692
- textBox.CharacterCasing(xaml::Controls::CharacterCasing::Normal);
693
- }
694
- } else if (propertyValue.IsNull())
695
- textBox.ClearValue(xaml::Controls::TextBox::CharacterCasingProperty());
696
- }
697
- }
698
- } else { // Applicable properties for PasswordBox
699
- if (propertyName == "text" && !isTextBox) {
700
- markDirty = true;
701
- SetText(propertyValue);
702
- }
703
- }
704
- }
705
- }
706
-
707
- if (markDirty) {
708
- GetViewManager()->MarkDirty(m_tag);
709
- }
710
-
711
- Super::updateProperties(props);
712
-
713
- // We need to re-register the PreviewKeyDown handler so it is invoked after the ShadowNodeBase handler
714
- if (hasKeyDownEvents) {
715
- m_controlPreviewKeyDownRevoker.revoke();
716
- registerPreviewKeyDown();
717
- }
718
-
719
- m_updating = false;
720
- m_initialUpdateComplete = true;
721
- }
722
-
723
- void TextInputShadowNode::SetText(const winrt::Microsoft::ReactNative::JSValue &text) {
724
- auto textBox = this->GetView().try_as<xaml::Controls::TextBox>();
725
- auto passwordBox = this->GetView().try_as<xaml::Controls::PasswordBox>();
726
-
727
- if (m_mostRecentEventCount == m_nativeEventCount) {
728
- if (textBox) {
729
- if (text.Type() == winrt::Microsoft::ReactNative::JSValueType::String) {
730
- auto oldCursor = textBox.SelectionStart();
731
- auto oldSelectionLength = textBox.SelectionLength();
732
- auto oldValue = textBox.Text();
733
- auto newValue = asHstring(text);
734
- if (oldValue != newValue) {
735
- if (!textBox.IsReadOnly()) {
736
- uint32_t diffStartIndex = 0;
737
- uint32_t diffEndIndex = 0;
738
- // Replacing the entire string with the new value resets the text history.
739
- // Generally speaking, this is undesirable. To mitigate this issue, we can
740
- // replace text using the XAML TextBox::SelectedText property, which retains
741
- // undo / redo history. To do so, we use a simple algorithm that finds a
742
- // single diff in the values:
743
- // 1. Find first character that mismatches iterating forwards
744
- while (diffStartIndex < oldValue.size() && diffStartIndex < newValue.size() &&
745
- oldValue[diffStartIndex] == newValue[diffStartIndex]) {
746
- diffStartIndex++;
747
- }
748
- // 2. Find last character the mismatches beyond the first mismatch iterating backwards
749
- while (diffEndIndex < oldValue.size() - diffStartIndex && diffEndIndex < newValue.size() - diffStartIndex &&
750
- oldValue[oldValue.size() - diffEndIndex - 1] == newValue[newValue.size() - diffEndIndex - 1]) {
751
- diffEndIndex++;
752
- }
753
- // 3. Select the range between the start and end index in the "old value"
754
- textBox.SelectionStart(diffStartIndex);
755
- textBox.SelectionLength(oldValue.size() - diffStartIndex - diffEndIndex);
756
- // 4. Replace the selected text with the range between start and end index in the "new value"
757
- // Copies the substring view into a new winrt::hstring due to occasional crash
758
- winrt::hstring replacementValue{
759
- std::wstring_view{newValue}.substr(diffStartIndex, newValue.size() - diffStartIndex - diffEndIndex)};
760
- textBox.SelectedText(replacementValue);
761
- } else {
762
- textBox.Text(newValue);
763
- }
764
-
765
- // Update selection based on the following algorithm:
766
- // 1. If the new value is the same length as the old value, retain the selection state (start and length)
767
- // 2. Else set the selection start to the end of the string
768
- if (oldValue.size() == newValue.size()) {
769
- textBox.SelectionStart(oldCursor);
770
- textBox.SelectionLength(oldSelectionLength);
771
- } else {
772
- textBox.SelectionStart(newValue.size());
773
- }
774
- }
775
- } else if (text.IsNull())
776
- textBox.ClearValue(xaml::Controls::TextBox::TextProperty());
777
- } else {
778
- if (text.Type() == winrt::Microsoft::ReactNative::JSValueType::String) {
779
- auto oldValue = passwordBox.Password();
780
- auto newValue = asHstring(text);
781
- if (oldValue != newValue) {
782
- passwordBox.Password(newValue);
783
- }
784
- } else if (text.IsNull())
785
- passwordBox.ClearValue(xaml::Controls::PasswordBox::PasswordProperty());
786
- }
787
- }
788
- }
789
-
790
- void TextInputShadowNode::SetSelection(int64_t start, int64_t end) {
791
- if (start < 0 || end < 0 || start > end) {
792
- return;
793
- }
794
-
795
- if (auto textBox = this->GetView().try_as<xaml::Controls::TextBox>()) {
796
- textBox.Select(static_cast<int32_t>(start), static_cast<int32_t>(end - start));
797
- }
798
- }
799
-
800
- void TextInputShadowNode::dispatchCommand(
801
- const std::string &commandId,
802
- winrt::Microsoft::ReactNative::JSValueArray &&commandArgs) {
803
- if (commandId == "focus") {
804
- if (auto uiManager = GetNativeUIManager(GetViewManager()->GetReactContext()).lock()) {
805
- uiManager->focus(m_tag);
806
- }
807
- } else if (commandId == "blur") {
808
- if (auto uiManager = GetNativeUIManager(GetViewManager()->GetReactContext()).lock()) {
809
- uiManager->blur(m_tag);
810
- }
811
- } else if (commandId == "setTextAndSelection") {
812
- m_mostRecentEventCount = commandArgs[0].AsInt32();
813
- SetText(commandArgs[1]);
814
- SetSelection(commandArgs[2].AsInt64(), commandArgs[3].AsInt64());
815
- } else {
816
- Super::dispatchCommand(commandId, std::move(commandArgs));
817
- }
818
- }
819
-
820
- TextInputViewManager::TextInputViewManager(const Mso::React::IReactContext &context) : Super(context) {}
821
-
822
- const wchar_t *TextInputViewManager::GetName() const {
823
- return L"WindowsTextInput";
824
- }
825
-
826
- void TextInputViewManager::GetNativeProps(const winrt::Microsoft::ReactNative::IJSValueWriter &writer) const {
827
- Super::GetNativeProps(writer);
828
-
829
- React::WriteProperty(writer, L"allowFontScaling", L"boolean");
830
- React::WriteProperty(writer, L"clearTextOnFocus", L"boolean");
831
- React::WriteProperty(writer, L"editable", L"boolean");
832
- React::WriteProperty(writer, L"maxLength", L"int");
833
- React::WriteProperty(writer, L"multiline", L"boolean");
834
- React::WriteProperty(writer, L"placeholder", L"string");
835
- React::WriteProperty(writer, L"placeholderTextColor", L"Color");
836
- React::WriteProperty(writer, L"scrollEnabled", L"boolean");
837
- React::WriteProperty(writer, L"cursorColor", L"Color");
838
- React::WriteProperty(writer, L"selectionColor", L"Color");
839
- React::WriteProperty(writer, L"selectTextOnFocus", L"boolean");
840
- React::WriteProperty(writer, L"spellCheck", L"boolean");
841
- React::WriteProperty(writer, L"submitBehavior", L"string");
842
- React::WriteProperty(writer, L"text", L"string");
843
- React::WriteProperty(writer, L"mostRecentEventCount", L"int");
844
- React::WriteProperty(writer, L"secureTextEntry", L"boolean");
845
- React::WriteProperty(writer, L"keyboardType", L"string");
846
- React::WriteProperty(writer, L"contextMenuHidden", L"boolean");
847
- React::WriteProperty(writer, L"caretHidden", L"boolean");
848
- React::WriteProperty(writer, L"autoCapitalize", L"string");
849
- React::WriteProperty(writer, L"clearTextOnSubmit", L"boolean");
850
- React::WriteProperty(writer, L"submitKeyEvents", L"array");
851
- React::WriteProperty(writer, L"autoFocus", L"boolean");
852
- }
853
-
854
- void TextInputViewManager::GetExportedCustomDirectEventTypeConstants(
855
- const winrt::Microsoft::ReactNative::IJSValueWriter &writer) const {
856
- Super::GetExportedCustomDirectEventTypeConstants(writer);
857
-
858
- const PCWSTR eventNames[] = {// Generic events
859
- L"Change",
860
- L"Focus",
861
- L"Blur",
862
- L"EndEditing",
863
- L"SelectionChange",
864
- L"ContentSizeChange",
865
- L"KeyPress",
866
- L"PressIn",
867
- L"PressOut",
868
- L"Scroll",
869
- L"SubmitEditing"};
870
-
871
- for (auto &eventBaseName : eventNames) {
872
- using namespace std::string_literals;
873
- writer.WritePropertyName(L"topTextInput"s + eventBaseName);
874
- writer.WriteObjectBegin();
875
- writer.WritePropertyName(L"registrationName");
876
- writer.WriteString(L"on"s + eventBaseName);
877
- writer.WriteObjectEnd();
878
- }
879
- }
880
-
881
- ShadowNode *TextInputViewManager::createShadow() const {
882
- return new TextInputShadowNode();
883
- }
884
-
885
- XamlView TextInputViewManager::CreateViewCore(
886
- int64_t /*tag*/,
887
- const winrt::Microsoft::ReactNative::JSValueObject &props) {
888
- const auto secureTextEntry = props.find("secureTextEntry");
889
- if (secureTextEntry != props.end() &&
890
- secureTextEntry->second.Type() == winrt::Microsoft::ReactNative::JSValueType::Boolean &&
891
- secureTextEntry->second.AsBoolean()) {
892
- xaml::Controls::PasswordBox passwordBox;
893
- return passwordBox;
894
- } else {
895
- xaml::Controls::TextBox textBox;
896
- return textBox;
897
- }
898
- }
899
-
900
- YGMeasureFunc TextInputViewManager::GetYogaCustomMeasureFunc() const {
901
- return DefaultYogaSelfMeasureFunc;
902
- }
903
-
904
- void TextInputViewManager::TransferInputScope(
905
- const XamlView &oldView,
906
- const XamlView &newView,
907
- const bool copyToPasswordBox) {
908
- // transfer input scope, only common keyboardType between secureTextEntry
909
- // on/off is numeric, so only need to transfer input scope "Number" <=>
910
- // "NumericPin", everything else leave it as default.
911
- xaml::Input::InputScope inputScope;
912
- if (copyToPasswordBox) {
913
- inputScope = oldView.try_as<xaml::Controls::TextBox>().InputScope();
914
- } else {
915
- inputScope = oldView.try_as<xaml::Controls::PasswordBox>().InputScope();
916
- }
917
-
918
- if (inputScope != nullptr) {
919
- auto nameValue = inputScope.Names().GetAt(0).NameValue();
920
-
921
- if ((nameValue == xaml::Input::InputScopeNameValue::Number && copyToPasswordBox) ||
922
- (nameValue == xaml::Input::InputScopeNameValue::NumericPin && !copyToPasswordBox)) {
923
- auto newScope = xaml::Input::InputScope();
924
- auto scopeName = xaml::Input::InputScopeName(
925
- copyToPasswordBox ? xaml::Input::InputScopeNameValue::NumericPin : xaml::Input::InputScopeNameValue::Number);
926
- auto names = newScope.Names();
927
- names.Append(scopeName);
928
- newView.SetValue(
929
- copyToPasswordBox ? xaml::Controls::PasswordBox::InputScopeProperty()
930
- : xaml::Controls::TextBox::InputScopeProperty(),
931
- newScope);
932
- }
933
- }
934
- }
935
-
936
- void TextInputViewManager::TransferProperties(const XamlView &oldView, const XamlView &newView) {
937
- if ((oldView.try_as<xaml::Controls::TextBox>() != nullptr &&
938
- newView.try_as<xaml::Controls::PasswordBox>() != nullptr) ||
939
- (oldView.try_as<xaml::Controls::PasswordBox>() != nullptr &&
940
- newView.try_as<xaml::Controls::TextBox>() != nullptr)) {
941
- bool copyToPasswordBox = oldView.try_as<xaml::Controls::TextBox>() != nullptr;
942
-
943
- // sync common properties between TextBox and PasswordBox
944
- if (copyToPasswordBox) {
945
- TransferProperty(
946
- oldView,
947
- newView,
948
- xaml::Controls::TextBox::MaxLengthProperty(),
949
- xaml::Controls::PasswordBox::MaxLengthProperty());
950
- TransferProperty(
951
- oldView,
952
- newView,
953
- xaml::Controls::TextBox::PlaceholderTextProperty(),
954
- xaml::Controls::PasswordBox::PlaceholderTextProperty());
955
- TransferProperty(
956
- oldView,
957
- newView,
958
- xaml::Controls::TextBox::SelectionHighlightColorProperty(),
959
- xaml::Controls::PasswordBox::SelectionHighlightColorProperty());
960
- newView.as<xaml::Controls::PasswordBox>().Password(oldView.as<xaml::Controls::TextBox>().Text());
961
- // Since both focusable/editable affect isEnabled for PasswordBox, if the oldView is enabled we still need to
962
- // check isReadOnly
963
- if (oldView.as<xaml::Controls::TextBox>().IsEnabled()) {
964
- newView.as<xaml::Controls::PasswordBox>().IsEnabled(!oldView.as<xaml::Controls::TextBox>().IsReadOnly());
965
- } else {
966
- newView.as<xaml::Controls::PasswordBox>().IsEnabled(oldView.as<xaml::Controls::TextBox>().IsEnabled());
967
- }
968
- } else {
969
- TransferProperty(
970
- oldView,
971
- newView,
972
- xaml::Controls::PasswordBox::MaxLengthProperty(),
973
- xaml::Controls::TextBox::MaxLengthProperty());
974
- TransferProperty(
975
- oldView,
976
- newView,
977
- xaml::Controls::PasswordBox::PlaceholderTextProperty(),
978
- xaml::Controls::TextBox::PlaceholderTextProperty());
979
- TransferProperty(
980
- oldView,
981
- newView,
982
- xaml::Controls::PasswordBox::SelectionHighlightColorProperty(),
983
- xaml::Controls::TextBox::SelectionHighlightColorProperty());
984
- newView.as<xaml::Controls::TextBox>().Text(oldView.as<xaml::Controls::PasswordBox>().Password());
985
- // Since both focusable/editable affect isEnabled for PasswordBox, if the oldView is enabled we still need to
986
- // check isReadOnly
987
- if (oldView.as<xaml::Controls::PasswordBox>().IsEnabled()) {
988
- newView.as<xaml::Controls::TextBox>().IsReadOnly(!oldView.as<xaml::Controls::PasswordBox>().IsEnabled());
989
- } else {
990
- newView.as<xaml::Controls::TextBox>().IsEnabled(oldView.as<xaml::Controls::PasswordBox>().IsEnabled());
991
- }
992
- }
993
-
994
- TransferInputScope(oldView, newView, copyToPasswordBox);
995
- // Set focus if current control has focus
996
- auto focusState = oldView.as<xaml::Controls::Control>().FocusState();
997
- if (focusState != winrt::FocusState::Unfocused) {
998
- newView.as<xaml::Controls::Control>().Focus(focusState);
999
- }
1000
- }
1001
- Super::TransferProperties(oldView, newView);
1002
- }
1003
- } // namespace Microsoft::ReactNative