react-native-windows 0.68.3 → 0.69.0-preview.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.flowconfig +1 -3
- package/Chakra/ChakraHelpers.cpp +0 -1
- package/Directory.Build.props +3 -0
- package/Directory.Build.targets +1 -1
- package/Folly/TEMP_UntilFollyUpdate/dynamic-inl.h +1411 -0
- package/Folly/TEMP_UntilFollyUpdate/lang/ToAscii.cpp +336 -0
- package/Folly/TEMP_UntilFollyUpdate/lang/ToAscii.h +182 -0
- package/Libraries/ActionSheetIOS/ActionSheetIOS.js +7 -0
- package/Libraries/ActionSheetIOS/NativeActionSheetManager.js +1 -0
- package/Libraries/Alert/Alert.windows.js +2 -2
- package/Libraries/Animated/AnimatedImplementation.js +1 -1
- package/Libraries/Animated/NativeAnimatedHelper.js +55 -9
- package/Libraries/Animated/NativeAnimatedModule.js +1 -0
- package/Libraries/Animated/NativeAnimatedTurboModule.js +1 -0
- package/Libraries/Animated/animations/TimingAnimation.js +6 -11
- package/Libraries/Animated/createAnimatedComponent.js +2 -2
- package/Libraries/Animated/nodes/AnimatedColor.js +95 -29
- package/Libraries/Animated/nodes/AnimatedInterpolation.js +19 -22
- package/Libraries/Animated/nodes/AnimatedNode.js +2 -2
- package/Libraries/Animated/nodes/AnimatedValue.js +1 -1
- package/Libraries/AppState/AppState.js +1 -1
- package/Libraries/Blob/URL.js +7 -1
- package/Libraries/Components/Button.js +3 -0
- package/Libraries/Components/Button.windows.js +4 -0
- package/Libraries/Components/DatePickerAndroid/NativeDatePickerAndroid.js +5 -0
- package/Libraries/Components/Pressable/Pressable.js +3 -3
- package/Libraries/Components/Pressable/Pressable.windows.js +3 -3
- package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +47 -38
- package/Libraries/Components/ScrollView/ScrollContentViewNativeComponent.js +15 -7
- package/Libraries/Components/ScrollView/ScrollView.js +1 -1
- package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +16 -3
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +3 -1
- package/Libraries/Components/Slider/Slider.js +0 -2
- package/Libraries/Components/Slider/SliderNativeComponent.js +0 -1
- package/Libraries/Components/StatusBar/StatusBar.js +6 -1
- package/Libraries/Components/Switch/Switch.js +11 -1
- package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +114 -109
- package/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent.js +17 -9
- package/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent.js +13 -5
- package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +10 -0
- package/Libraries/Components/TextInput/TextInput.js +1 -8
- package/Libraries/Components/TextInput/TextInput.windows.js +4 -9
- package/Libraries/Components/TextInput/TextInputState.js +10 -2
- package/Libraries/Components/TextInput/TextInputState.windows.js +10 -3
- package/Libraries/Components/TextInput/WindowsTextInputNativeComponent.js +1 -1
- package/Libraries/Components/Touchable/TouchableBounce.js +1 -0
- package/Libraries/Components/Touchable/TouchableHighlight.js +1 -0
- package/Libraries/Components/Touchable/TouchableHighlight.windows.js +6 -5
- package/Libraries/Components/Touchable/TouchableNativeFeedback.js +1 -0
- package/Libraries/Components/Touchable/TouchableOpacity.js +7 -1
- package/Libraries/Components/Touchable/TouchableOpacity.windows.js +11 -5
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +2 -0
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.windows.js +2 -0
- package/Libraries/Components/View/ReactNativeViewAttributes.js +1 -0
- package/Libraries/Components/View/ReactNativeViewAttributes.windows.js +1 -0
- package/Libraries/Components/View/View.windows.js +33 -1
- package/Libraries/Components/View/ViewNativeComponent.js +68 -8
- package/Libraries/Components/View/ViewPropTypes.js +36 -4
- package/Libraries/Components/View/ViewPropTypes.windows.js +36 -4
- package/Libraries/Core/Devtools/parseHermesStack.js +1 -1
- package/Libraries/Core/ExceptionsManager.js +1 -1
- package/Libraries/Core/RawEventEmitter.js +38 -0
- package/Libraries/Core/ReactNativeVersion.js +2 -2
- package/Libraries/Core/polyfillPromise.js +32 -0
- package/Libraries/Core/setUpReactDevTools.js +3 -2
- package/Libraries/EventEmitter/NativeEventEmitter.js +3 -3
- package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +2 -1
- package/Libraries/EventEmitter/__mocks__/NativeEventEmitter.js +3 -3
- package/Libraries/Events/CustomEvent.js +32 -0
- package/Libraries/Events/EventPolyfill.js +239 -0
- package/Libraries/Image/Image.android.js +0 -6
- package/Libraries/Image/Image.ios.js +0 -6
- package/Libraries/Image/Image.windows.js +2 -8
- package/Libraries/Image/ImageViewNativeComponent.js +18 -3
- package/Libraries/Image/TextInlineImageNativeComponent.js +23 -15
- package/Libraries/Inspector/Inspector.js +2 -4
- package/Libraries/Interaction/BridgeSpyStallHandler.js +4 -3
- package/Libraries/Interaction/InteractionManager.js +1 -12
- package/Libraries/Interaction/TaskQueue.js +5 -4
- package/Libraries/LayoutAnimation/LayoutAnimation.js +13 -0
- package/Libraries/Linking/Linking.js +1 -1
- package/Libraries/Lists/FlatList.js +27 -6
- package/Libraries/Lists/VirtualizedList.js +71 -55
- package/Libraries/Lists/VirtualizedListContext.js +7 -3
- package/Libraries/Lists/VirtualizedSectionList.js +2 -2
- package/Libraries/Lists/__tests__/{FillRateHelper-test.windows.js → FillRateHelper-test.js} +2 -2
- package/Libraries/Lists/__tests__/{FlatList-test.windows.js → FlatList-test.js} +2 -2
- package/Libraries/Lists/__tests__/{SectionList-test.windows.js → SectionList-test.js} +14 -14
- package/Libraries/Lists/__tests__/{VirtualizeUtils-test.windows.js → VirtualizeUtils-test.js} +3 -3
- package/Libraries/Lists/__tests__/{VirtualizedList-test.windows.js → VirtualizedList-test.js} +91 -42
- package/Libraries/Lists/__tests__/{VirtualizedSectionList-test.windows.js → VirtualizedSectionList-test.js} +13 -13
- package/Libraries/LogBox/Data/LogBoxData.js +2 -2
- package/Libraries/LogBox/Data/LogBoxLog.js +1 -1
- package/Libraries/LogBox/Data/LogBoxSymbolication.js +1 -1
- package/Libraries/LogBox/Data/parseLogBoxLog.js +1 -1
- package/Libraries/LogBox/LogBox.js +2 -21
- package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +1 -0
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +2 -1
- package/Libraries/NativeComponent/BaseViewConfig.android.js +295 -0
- package/Libraries/NativeComponent/BaseViewConfig.ios.js +333 -0
- package/Libraries/NativeComponent/BaseViewConfig.windows.js +334 -0
- package/Libraries/NativeComponent/NativeComponentRegistry.js +0 -2
- package/Libraries/NativeComponent/PlatformBaseViewConfig.js +24 -0
- package/Libraries/NativeComponent/StaticViewConfigValidator.js +7 -42
- package/Libraries/NativeComponent/ViewConfig.js +4 -4
- package/Libraries/NativeComponent/ViewConfigIgnore.js +54 -0
- package/Libraries/Network/FormData.js +7 -1
- package/Libraries/Pressability/Pressability.js +115 -46
- package/Libraries/Pressability/Pressability.windows.js +190 -74
- package/Libraries/Pressability/PressabilityDebug.js +5 -9
- package/Libraries/PushNotificationIOS/NativePushNotificationManagerIOS.js +1 -0
- package/Libraries/ReactNative/AppContainer.js +1 -1
- package/Libraries/ReactNative/{DummyUIManager.js → BridgelessUIManager.js} +62 -40
- package/Libraries/ReactNative/PaperUIManager.windows.js +5 -5
- package/Libraries/ReactNative/ReactNativeFeatureFlags.js +39 -0
- package/Libraries/ReactNative/UIManager.js +2 -3
- package/Libraries/ReactNative/renderApplication.js +4 -0
- package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +8 -0
- package/Libraries/Renderer/implementations/ReactFabric-dev.js +5908 -4906
- package/Libraries/Renderer/implementations/ReactFabric-prod.js +2100 -1918
- package/Libraries/Renderer/implementations/ReactFabric-profiling.js +2567 -2352
- package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +5610 -4844
- package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +1710 -1556
- package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +1830 -1639
- package/Libraries/Renderer/shims/ReactNativeTypes.js +2 -1
- package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +2 -1
- package/Libraries/StyleSheet/EdgeInsetsPropType.js +4 -1
- package/Libraries/StyleSheet/StyleSheetTypes.js +59 -66
- package/Libraries/StyleSheet/normalizeColor.js +1 -1
- package/Libraries/StyleSheet/private/_StyleSheetTypesOverrides.js +15 -0
- package/Libraries/StyleSheet/private/_TransformStyle.js +53 -0
- package/Libraries/StyleSheet/processTransform.windows.js +272 -0
- package/Libraries/Text/Text.js +13 -7
- package/Libraries/Text/Text.windows.js +16 -7
- package/Libraries/Text/TextNativeComponent.js +2 -0
- package/Libraries/Text/TextProps.js +10 -0
- package/Libraries/Types/CoreEventTypes.js +13 -1
- package/Libraries/Types/CoreEventTypes.windows.js +26 -1
- package/Libraries/Utilities/Appearance.js +0 -8
- package/Libraries/Utilities/HMRClient.js +1 -1
- package/Libraries/Utilities/ReactNativeTestTools.js +1 -0
- package/Libraries/Utilities/codegenNativeComponent.js +17 -6
- package/Libraries/Utilities/stringifySafe.js +4 -1
- package/Libraries/Utilities/verifyComponentAttributeEquivalence.js +3 -3
- package/Libraries/WebSocket/WebSocket.js +1 -1
- package/Libraries/vendor/emitter/_EmitterSubscription.js +1 -1
- package/Libraries/vendor/emitter/_EventEmitter.js +1 -1
- package/Libraries/vendor/emitter/_EventSubscription.js +1 -1
- package/Microsoft.ReactNative/DynamicReader.cpp +3 -3
- package/Microsoft.ReactNative/Fabric/ComponentView.h +1 -0
- package/Microsoft.ReactNative/Fabric/ComponentViewRegistry.cpp +36 -2
- package/Microsoft.ReactNative/Fabric/ComponentViewRegistry.h +1 -0
- package/Microsoft.ReactNative/Fabric/DWriteHelpers.cpp +19 -0
- package/Microsoft.ReactNative/Fabric/DWriteHelpers.h +13 -0
- package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +65 -19
- package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +2 -0
- package/Microsoft.ReactNative/Fabric/ParagraphComponentView.cpp +36 -10
- package/Microsoft.ReactNative/Fabric/ScrollViewComponentView.cpp +2 -0
- package/Microsoft.ReactNative/Fabric/SliderComponentView.cpp +107 -0
- package/Microsoft.ReactNative/Fabric/SliderComponentView.h +51 -0
- package/Microsoft.ReactNative/Fabric/SwitchComponentView.cpp +109 -0
- package/Microsoft.ReactNative/Fabric/SwitchComponentView.h +52 -0
- package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputComponentDescriptor.h +197 -0
- package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputComponentView.cpp +308 -0
- package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputComponentView.h +52 -0
- package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputEventEmitter.cpp +31 -0
- package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputEventEmitter.h +33 -0
- package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputProps.cpp +81 -0
- package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputProps.h +132 -0
- package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputShadowNode.cpp +193 -0
- package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputShadowNode.h +85 -0
- package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputState.cpp +76 -0
- package/Microsoft.ReactNative/Fabric/TextInput/WindowsTextInputState.h +99 -0
- package/Microsoft.ReactNative/Fabric/ViewComponentView.cpp +35 -3
- package/Microsoft.ReactNative/Fabric/ViewComponentView.h +1 -0
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rncore/EventEmitters.h +5 -0
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rncore/Props.h +5 -0
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/slider/SliderMeasurementsManager.cpp +46 -0
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/slider/SliderMeasurementsManager.h +30 -0
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/Color.cpp +2 -0
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/conversions.h +1 -9
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/platform/cxx/react/renderer/graphics/Color.h +3 -1
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.cpp +119 -57
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.h +18 -1
- package/Microsoft.ReactNative/IViewManager.idl +3 -3
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +13 -107
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +2 -2
- package/Microsoft.ReactNative/Modules/AppStateModule.cpp +2 -0
- package/Microsoft.ReactNative/Modules/AppStateModule.h +2 -0
- package/Microsoft.ReactNative/Modules/CreateModules.cpp +3 -3
- package/Microsoft.ReactNative/Modules/NativeUIManager.cpp +7 -5
- package/Microsoft.ReactNative/Modules/TimingModule.cpp +2 -2
- package/Microsoft.ReactNative/Modules/TimingModule.h +2 -2
- package/Microsoft.ReactNative/ReactHost/{ReactContext.cpp → MsoReactContext.cpp} +1 -1
- package/Microsoft.ReactNative/ReactHost/{ReactContext.h → MsoReactContext.h} +0 -0
- package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +14 -1
- package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.h +1 -1
- package/Microsoft.ReactNative/ReactHost/ReactNativeHeaders.h +1 -1
- package/Microsoft.ReactNative/ReactRootView.cpp +2 -1
- package/Microsoft.ReactNative/RedBox.cpp +3 -2
- package/Microsoft.ReactNative/Utils/ValueUtils.cpp +3 -2
- package/Microsoft.ReactNative/Views/ControlViewManager.cpp +32 -0
- package/Microsoft.ReactNative/Views/ControlViewManager.h +11 -0
- package/Microsoft.ReactNative/Views/DevMenu.cpp +2 -2
- package/Microsoft.ReactNative/Views/FrameworkElementTransferProperties.cpp +13 -2
- package/Microsoft.ReactNative/Views/FrameworkElementViewManager.cpp +149 -22
- package/Microsoft.ReactNative/Views/Image/ImageViewManager.cpp +1 -1
- package/Microsoft.ReactNative/Views/Image/Microsoft.UI.Composition.Effects_Impl.h +5 -11
- package/Microsoft.ReactNative/Views/Image/ReactImage.cpp +2 -1
- package/Microsoft.ReactNative/Views/SliderViewManager.cpp +12 -4
- package/Microsoft.ReactNative/Views/TextInputViewManager.cpp +1 -1
- package/Microsoft.ReactNative/Views/TextViewManager.cpp +2 -2
- package/Microsoft.ReactNative/Views/TouchEventHandler.cpp +163 -37
- package/Microsoft.ReactNative/Views/TouchEventHandler.h +11 -4
- package/Microsoft.ReactNative/Views/ViewPanel.cpp +3 -23
- package/Microsoft.ReactNative/Views/ViewPanel.h +2 -3
- package/Microsoft.ReactNative/Views/ViewViewManager.cpp +21 -0
- package/Microsoft.ReactNative/XamlUIService.cpp +1 -1
- package/Microsoft.ReactNative/XamlView.h +8 -3
- package/Microsoft.ReactNative.Cxx/CppWinRTIncludes.h +3 -5
- package/Microsoft.ReactNative.Cxx/DesktopWindowBridge.h +1 -1
- package/Microsoft.ReactNative.Cxx/JSI/JsiAbiApi.cpp +11 -2
- package/Microsoft.ReactNative.Cxx/JSI/JsiAbiApi.h +1 -0
- package/Microsoft.ReactNative.Cxx/JSI/NodeApiJsiRuntime.cpp +10 -1
- package/Microsoft.ReactNative.Cxx/JSValueReader.h +2 -2
- package/Microsoft.ReactNative.Cxx/JSValueWriter.h +5 -5
- package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +5 -1
- package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems.filters +2 -3
- package/Microsoft.ReactNative.Cxx/NativeModules.h +1 -1
- package/Microsoft.ReactNative.Cxx/ReactContext.h +3 -3
- package/Microsoft.ReactNative.Cxx/ReactNonAbiValue.h +3 -3
- package/Microsoft.ReactNative.Cxx/XamlUtils.h +44 -5
- package/Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj +0 -6
- package/Mso/activeObject/activeObject.h +2 -2
- package/Mso/compilerAdapters/cppMacros.h +3 -5
- package/Mso/errorCode/errorProvider.h +2 -2
- package/Mso/errorCode/maybe.h +4 -4
- package/Mso/functional/functor.h +6 -6
- package/Mso/functional/functorRef.h +2 -2
- package/Mso/future/details/executor.h +2 -2
- package/Mso/future/details/futureFuncInl.h +4 -4
- package/Mso/future/details/ifuture.h +3 -3
- package/Mso/future/details/maybeInvoker.h +6 -6
- package/Mso/future/details/promiseGroupInl.h +4 -4
- package/Mso/future/details/promiseInl.h +4 -4
- package/Mso/future/details/resultTraits.h +4 -4
- package/Mso/future/details/whenAllInl.h +1 -1
- package/Mso/future/future.h +13 -13
- package/Mso/guid/msoGuidDetails.h +1 -1
- package/Mso/memoryApi/memoryApi.h +13 -7
- package/Mso/motifCpp/gTestAdapter.h +1 -1
- package/Mso/motifCpp/testInfo.h +7 -9
- package/Mso/object/make.h +8 -8
- package/Mso/object/objectRefCount.h +3 -5
- package/Mso/object/objectWithWeakRef.h +10 -14
- package/Mso/object/queryCast.h +4 -4
- package/Mso/object/refCountedObject.h +4 -4
- package/Mso/object/unknownObject.h +7 -7
- package/Mso/platformAdapters/windowsFirst.h +1 -1
- package/Mso/smartPtr/cntPtr.h +8 -8
- package/Mso/src/dispatchQueue/uiScheduler_winrt.cpp +2 -2
- package/Mso/src/future/futureImpl.h +1 -1
- package/Mso/src/memoryApi/memoryApi.cpp +4 -4
- package/PropertySheets/CppAppConsumeCSharpModule.props +3 -0
- package/PropertySheets/External/Microsoft.ReactNative.WinAppSDK.CSharpApp.props +26 -0
- package/PropertySheets/External/Microsoft.ReactNative.WinAppSDK.Common.props +12 -0
- package/PropertySheets/Generated/PackageVersion.g.props +3 -3
- package/PropertySheets/React.Cpp.props +13 -0
- package/PropertySheets/WinUI.props +3 -6
- package/ReactCommon/ReactCommon.vcxproj +2 -4
- package/ReactCommon/ReactCommon.vcxproj.filters +4 -1
- package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/JSCRuntime.cpp +1480 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/decorator.h +753 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/jsi.h +1331 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +1431 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/CallbackWrapper.h +103 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.h +87 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleUtils.h +61 -0
- package/ReactCommon/Yoga.cpp +1 -1
- package/Scripts/{Microsoft.ReactNative.ProjectReunion.nuspec → Microsoft.ReactNative.WindowsAppSDK.nuspec} +7 -9
- package/Scripts/OfficeReact.Win32.nuspec +1 -3
- package/Scripts/Tfs/Layout-MSRN-Headers.ps1 +2 -1
- package/Scripts/copyRNLibraries.js +8 -8
- package/Scripts/just.js +1 -1
- package/Scripts/rnw-dependencies.ps1 +41 -10
- package/Scripts/run-desktop-integration-tests.js +6 -6
- package/Shared/AbiSafe.h +3 -3
- package/Shared/BaseScriptStoreImpl.cpp +1 -1
- package/Shared/CppRuntimeOptions.h +50 -0
- package/Shared/DevSupportManager.cpp +32 -36
- package/Shared/DevSupportManager.h +1 -2
- package/Shared/HermesRuntimeHolder.cpp +23 -14
- package/Shared/HermesRuntimeHolder.h +8 -2
- package/Shared/IDevSupportManager.h +1 -2
- package/Shared/InspectorPackagerConnection.cpp +7 -5
- package/Shared/InspectorPackagerConnection.h +2 -2
- package/Shared/JSI/ChakraApi.cpp +0 -1
- package/Shared/JSI/ChakraRuntime.cpp +1 -2
- package/Shared/JSI/RuntimeHolder.h +2 -0
- package/Shared/Modules/HttpModule.cpp +1 -1
- package/Shared/Modules/HttpModule.h +2 -2
- package/Shared/Modules/WebSocketModule.cpp +1 -1
- package/Shared/Modules/WebSocketModule.h +8 -5
- package/Shared/{IHttpResource.h → Networking/IHttpResource.h} +4 -4
- package/Shared/{IWebSocketResource.h → Networking/IWebSocketResource.h} +2 -2
- package/Shared/Networking/OriginPolicy.h +15 -0
- package/Shared/Networking/OriginPolicyHttpFilter.cpp +746 -0
- package/Shared/Networking/OriginPolicyHttpFilter.h +112 -0
- package/Shared/{WinRTHttpResource.cpp → Networking/WinRTHttpResource.cpp} +129 -99
- package/Shared/{WinRTHttpResource.h → Networking/WinRTHttpResource.h} +8 -12
- package/Shared/Networking/WinRTTypes.h +30 -0
- package/Shared/{WinRTWebSocketResource.cpp → Networking/WinRTWebSocketResource.cpp} +2 -2
- package/Shared/{WinRTWebSocketResource.h → Networking/WinRTWebSocketResource.h} +3 -3
- package/Shared/OInstance.cpp +5 -5
- package/Shared/RuntimeOptions.cpp +93 -15
- package/Shared/RuntimeOptions.h +22 -9
- package/Shared/Shared.vcxitems +122 -7
- package/Shared/Shared.vcxitems.filters +40 -21
- package/Shared/Threading/BatchingQueueThread.cpp +1 -1
- package/Shared/tracing/fbsystrace.h +2 -2
- package/codegen/NativeActionSheetManagerSpec.g.h +6 -0
- package/codegen/NativeAnimatedModuleSpec.g.h +43 -37
- package/codegen/NativeAnimatedTurboModuleSpec.g.h +43 -37
- package/codegen/NativePushNotificationManagerIOSSpec.g.h +2 -0
- package/codegen/react/components/rnwcore/ComponentDescriptors.h +0 -1
- package/codegen/react/components/rnwcore/EventEmitters.cpp +133 -0
- package/codegen/react/components/rnwcore/EventEmitters.h +0 -18
- package/codegen/react/components/rnwcore/Props.cpp +0 -13
- package/codegen/react/components/rnwcore/Props.h +0 -16
- package/codegen/react/components/rnwcore/ShadowNodes.cpp +0 -1
- package/codegen/react/components/rnwcore/ShadowNodes.h +0 -10
- package/include/Shared/cdebug.h +9 -9
- package/index.js +30 -25
- package/index.windows.js +30 -25
- package/jest/preprocessor.js +24 -107
- package/jest/preprocessor_DO_NOT_USE.js +122 -0
- package/metro.config.js +3 -70
- package/package.json +29 -28
- package/react-native.config.js +40 -6
- package/rntypes/index.d.ts +19 -7
- package/stubs/glog/logging.h +1 -1
- package/template/cpp-app/src/App.h +0 -4
- package/template/cs-app/src/App.xaml.cs +0 -5
- package/template/cs-app/src/MainPage.xaml.cs +1 -10
- package/template/cs-app-WinAppSDK/MyApp/App.xaml +16 -0
- package/template/cs-app-WinAppSDK/MyApp/App.xaml.cs +70 -0
- package/template/cs-app-WinAppSDK/MyApp/MainWindow.xaml +14 -0
- package/template/cs-app-WinAppSDK/MyApp/MainWindow.xaml.cs +38 -0
- package/template/cs-app-WinAppSDK/MyApp/Package.appxmanifest +48 -0
- package/template/cs-app-WinAppSDK/MyApp/Properties/PublishProfiles/win10-arm64.pubxml +19 -0
- package/template/cs-app-WinAppSDK/MyApp/Properties/PublishProfiles/win10-x64.pubxml +19 -0
- package/template/cs-app-WinAppSDK/MyApp/Properties/PublishProfiles/win10-x86.pubxml +19 -0
- package/template/cs-app-WinAppSDK/MyApp/Properties/launchSettings.json +10 -0
- package/template/cs-app-WinAppSDK/MyApp/app.manifest +15 -0
- package/template/cs-app-WinAppSDK/proj/ExperimentalFeatures.props +23 -0
- package/template/cs-app-WinAppSDK/proj/MyApp.csproj +49 -0
- package/template/cs-app-WinAppSDK/proj/MyApp.sln +43 -0
- package/template/cs-app-WinAppSDK/proj/NuGet.Config +17 -0
- package/template/metro.devMode.config.js +2 -51
- package/typings-index.js +5 -1
- package/typings-index.js.map +1 -1
- package/Libraries/Components/SegmentedControlIOS/RCTSegmentedControlNativeComponent.js +0 -44
- package/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.android.js +0 -45
- package/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.ios.js +0 -123
- package/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.windows.js +0 -45
- package/Libraries/Components/View/ReactNativeViewViewConfig.js +0 -360
- package/Libraries/Components/View/ReactNativeViewViewConfig.windows.js +0 -390
- package/Libraries/Components/View/ReactNativeViewViewConfigAndroid.js +0 -83
- package/Libraries/ReactNative/UIManagerInjection.js +0 -15
- package/Libraries/Renderer/implementations/ReactFabric-dev.fb.js +0 -24527
- package/Libraries/Renderer/implementations/ReactFabric-prod.fb.js +0 -8309
- package/Libraries/Renderer/implementations/ReactFabric-profiling.fb.js +0 -8961
- package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.fb.js +0 -24948
- package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.fb.js +0 -8400
- package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.fb.js +0 -9049
- package/PropertySheets/CppEnablePackageReferences.props +0 -13
- package/Shared/cdebug.cpp +0 -6
- package/include/Shared/ViewManager.h +0 -34
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
|
|
4
|
+
#pragma once
|
|
5
|
+
|
|
6
|
+
#include "WindowsTextInputShadowNode.h"
|
|
7
|
+
|
|
8
|
+
#include <yoga/CompactValue.h>
|
|
9
|
+
#include <yoga/YGEnums.h>
|
|
10
|
+
#include <yoga/YGValue.h>
|
|
11
|
+
|
|
12
|
+
#include <react/renderer/core/ConcreteComponentDescriptor.h>
|
|
13
|
+
|
|
14
|
+
namespace facebook {
|
|
15
|
+
namespace react {
|
|
16
|
+
|
|
17
|
+
// [Windows
|
|
18
|
+
void InitTextInputThemeInfo(const Mso::React::IReactContext &reactContext) {
|
|
19
|
+
xaml::Thickness textBoxPadding;
|
|
20
|
+
xaml::Application::Current().Resources().TryLookup(winrt::box_value(L"TextControlThemePadding")).as(textBoxPadding);
|
|
21
|
+
winrt::Microsoft::ReactNative::ReactPropertyBag(reactContext.Properties())
|
|
22
|
+
.Set(winrt::Microsoft::ReactNative::ReactPropertyId<xaml::Thickness>(L"TextBoxDefaultPadding"), textBoxPadding);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
YGStyle::Edges PaddingFromContext(const facebook::react::ContextContainer &contextContainer) {
|
|
26
|
+
auto context = contextContainer.at<winrt::Microsoft::ReactNative::ReactContext>("MSRN.ReactContext");
|
|
27
|
+
auto defaultPadding = *context.Properties().Get(
|
|
28
|
+
winrt::Microsoft::ReactNative::ReactPropertyId<xaml::Thickness>(L"TextBoxDefaultPadding"));
|
|
29
|
+
YGStyle::Edges theme;
|
|
30
|
+
theme[YGEdgeStart] = YGValue{static_cast<float>(defaultPadding.Left), YGUnitPoint};
|
|
31
|
+
theme[YGEdgeEnd] = YGValue{static_cast<float>(defaultPadding.Right), YGUnitPoint};
|
|
32
|
+
theme[YGEdgeTop] = YGValue{static_cast<float>(defaultPadding.Top), YGUnitPoint};
|
|
33
|
+
theme[YGEdgeBottom] = YGValue{static_cast<float>(defaultPadding.Bottom), YGUnitPoint};
|
|
34
|
+
return theme;
|
|
35
|
+
}
|
|
36
|
+
// Windows]
|
|
37
|
+
|
|
38
|
+
/*
|
|
39
|
+
* Descriptor for <WindowsTextInput> component.
|
|
40
|
+
*/
|
|
41
|
+
class WindowsTextInputComponentDescriptor final : public ConcreteComponentDescriptor<WindowsTextInputShadowNode> {
|
|
42
|
+
public:
|
|
43
|
+
WindowsTextInputComponentDescriptor(ComponentDescriptorParameters const ¶meters)
|
|
44
|
+
: ConcreteComponentDescriptor<WindowsTextInputShadowNode>(parameters) {
|
|
45
|
+
// Every single `WindowsTextInputShadowNode` will have a reference to
|
|
46
|
+
// a shared `TextLayoutManager`.
|
|
47
|
+
textLayoutManager_ = std::make_shared<TextLayoutManager>(contextContainer_);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
virtual State::Shared createInitialState(ShadowNodeFragment const &fragment, ShadowNodeFamily::Shared const &family)
|
|
51
|
+
const override {
|
|
52
|
+
/*
|
|
53
|
+
int surfaceId = family->getSurfaceId();
|
|
54
|
+
|
|
55
|
+
YGStyle::Edges theme;
|
|
56
|
+
// TODO: figure out RTL/start/end/left/right stuff here
|
|
57
|
+
if (surfaceIdToThemePaddingMap_.find(surfaceId) !=
|
|
58
|
+
surfaceIdToThemePaddingMap_.end()) {
|
|
59
|
+
theme = surfaceIdToThemePaddingMap_[surfaceId];
|
|
60
|
+
} else {
|
|
61
|
+
const jni::global_ref<jobject> &fabricUIManager =
|
|
62
|
+
contextContainer_->at<jni::global_ref<jobject>>("FabricUIManager");
|
|
63
|
+
|
|
64
|
+
auto env = jni::Environment::current();
|
|
65
|
+
auto defaultTextInputPaddingArray = env->NewFloatArray(4);
|
|
66
|
+
static auto getThemeData =
|
|
67
|
+
jni::findClassStatic(UIManagerJavaDescriptor)
|
|
68
|
+
->getMethod<jboolean(jint, jfloatArray)>("getThemeData");
|
|
69
|
+
|
|
70
|
+
if (getThemeData(
|
|
71
|
+
fabricUIManager, surfaceId, defaultTextInputPaddingArray)) {
|
|
72
|
+
jfloat *defaultTextInputPadding =
|
|
73
|
+
env->GetFloatArrayElements(defaultTextInputPaddingArray, 0);
|
|
74
|
+
theme[YGEdgeStart] = (YGValue){defaultTextInputPadding[0], YGUnitPoint};
|
|
75
|
+
theme[YGEdgeEnd] = (YGValue){defaultTextInputPadding[1], YGUnitPoint};
|
|
76
|
+
theme[YGEdgeTop] = (YGValue){defaultTextInputPadding[2], YGUnitPoint};
|
|
77
|
+
theme[YGEdgeBottom] =
|
|
78
|
+
(YGValue){defaultTextInputPadding[3], YGUnitPoint};
|
|
79
|
+
surfaceIdToThemePaddingMap_.emplace(std::make_pair(surfaceId, theme));
|
|
80
|
+
env->ReleaseFloatArrayElements(
|
|
81
|
+
defaultTextInputPaddingArray, defaultTextInputPadding, JNI_ABORT);
|
|
82
|
+
}
|
|
83
|
+
env->DeleteLocalRef(defaultTextInputPaddingArray);
|
|
84
|
+
}
|
|
85
|
+
*/
|
|
86
|
+
|
|
87
|
+
auto theme = PaddingFromContext(*contextContainer_); // [Windows]
|
|
88
|
+
|
|
89
|
+
return std::make_shared<WindowsTextInputShadowNode::ConcreteState>(
|
|
90
|
+
std::make_shared<WindowsTextInputState const>(WindowsTextInputState(
|
|
91
|
+
0,
|
|
92
|
+
{},
|
|
93
|
+
{},
|
|
94
|
+
{},
|
|
95
|
+
{},
|
|
96
|
+
{},
|
|
97
|
+
((YGValue)theme[YGEdgeStart]).value,
|
|
98
|
+
((YGValue)theme[YGEdgeEnd]).value,
|
|
99
|
+
((YGValue)theme[YGEdgeTop]).value,
|
|
100
|
+
((YGValue)theme[YGEdgeBottom]).value)),
|
|
101
|
+
family);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
protected:
|
|
105
|
+
void adopt(ShadowNode::Unshared const &shadowNode) const override {
|
|
106
|
+
auto textInputShadowNode = std::static_pointer_cast<WindowsTextInputShadowNode>(shadowNode);
|
|
107
|
+
|
|
108
|
+
// `ParagraphShadowNode` uses `TextLayoutManager` to measure text content
|
|
109
|
+
// and communicate text rendering metrics to mounting layer.
|
|
110
|
+
textInputShadowNode->setTextLayoutManager(textLayoutManager_);
|
|
111
|
+
|
|
112
|
+
textInputShadowNode->setContextContainer(const_cast<ContextContainer *>(getContextContainer().get()));
|
|
113
|
+
|
|
114
|
+
/*
|
|
115
|
+
int surfaceId = textInputShadowNode->getSurfaceId();
|
|
116
|
+
if (surfaceIdToThemePaddingMap_.find(surfaceId) !=
|
|
117
|
+
surfaceIdToThemePaddingMap_.end()) */
|
|
118
|
+
{
|
|
119
|
+
// YGStyle::Edges theme = surfaceIdToThemePaddingMap_[surfaceId];
|
|
120
|
+
|
|
121
|
+
auto theme = PaddingFromContext(*contextContainer_); // [Windows]
|
|
122
|
+
|
|
123
|
+
// Override padding
|
|
124
|
+
// Node is still unsealed during adoption, before layout is complete
|
|
125
|
+
// TODO: T62959168 account for RTL and paddingLeft when setting default
|
|
126
|
+
// paddingStart, and vice-versa with paddingRight/paddingEnd.
|
|
127
|
+
// For now this assumes no RTL.
|
|
128
|
+
YGStyle::Edges result = textInputShadowNode->getConcreteProps().yogaStyle.padding();
|
|
129
|
+
bool changedPadding = false;
|
|
130
|
+
if (!textInputShadowNode->getConcreteProps().hasPadding &&
|
|
131
|
+
!textInputShadowNode->getConcreteProps().hasPaddingStart &&
|
|
132
|
+
!textInputShadowNode->getConcreteProps().hasPaddingLeft &&
|
|
133
|
+
!textInputShadowNode->getConcreteProps().hasPaddingHorizontal) {
|
|
134
|
+
changedPadding = true;
|
|
135
|
+
result[YGEdgeStart] = theme[YGEdgeStart];
|
|
136
|
+
}
|
|
137
|
+
if (!textInputShadowNode->getConcreteProps().hasPadding &&
|
|
138
|
+
!textInputShadowNode->getConcreteProps().hasPaddingEnd &&
|
|
139
|
+
!textInputShadowNode->getConcreteProps().hasPaddingRight &&
|
|
140
|
+
!textInputShadowNode->getConcreteProps().hasPaddingHorizontal) {
|
|
141
|
+
changedPadding = true;
|
|
142
|
+
result[YGEdgeEnd] = theme[YGEdgeEnd];
|
|
143
|
+
}
|
|
144
|
+
if (!textInputShadowNode->getConcreteProps().hasPadding &&
|
|
145
|
+
!textInputShadowNode->getConcreteProps().hasPaddingTop &&
|
|
146
|
+
!textInputShadowNode->getConcreteProps().hasPaddingVertical) {
|
|
147
|
+
changedPadding = true;
|
|
148
|
+
result[YGEdgeTop] = theme[YGEdgeTop];
|
|
149
|
+
}
|
|
150
|
+
if (!textInputShadowNode->getConcreteProps().hasPadding &&
|
|
151
|
+
!textInputShadowNode->getConcreteProps().hasPaddingBottom &&
|
|
152
|
+
!textInputShadowNode->getConcreteProps().hasPaddingVertical) {
|
|
153
|
+
changedPadding = true;
|
|
154
|
+
result[YGEdgeBottom] = theme[YGEdgeBottom];
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// If the TextInput initially does not have paddingLeft or paddingStart, a
|
|
158
|
+
// paddingStart may be set from the theme. If that happens, when there's a
|
|
159
|
+
// paddingLeft update, we must explicitly unset paddingStart... (same with
|
|
160
|
+
// paddingEnd)
|
|
161
|
+
// TODO: support RTL
|
|
162
|
+
if ((textInputShadowNode->getConcreteProps().hasPadding ||
|
|
163
|
+
textInputShadowNode->getConcreteProps().hasPaddingLeft ||
|
|
164
|
+
textInputShadowNode->getConcreteProps().hasPaddingHorizontal) &&
|
|
165
|
+
!textInputShadowNode->getConcreteProps().hasPaddingStart) {
|
|
166
|
+
result[YGEdgeStart] = YGValueUndefined;
|
|
167
|
+
}
|
|
168
|
+
if ((textInputShadowNode->getConcreteProps().hasPadding ||
|
|
169
|
+
textInputShadowNode->getConcreteProps().hasPaddingRight ||
|
|
170
|
+
textInputShadowNode->getConcreteProps().hasPaddingHorizontal) &&
|
|
171
|
+
!textInputShadowNode->getConcreteProps().hasPaddingEnd) {
|
|
172
|
+
result[YGEdgeEnd] = YGValueUndefined;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Note that this is expensive: on every adopt, we need to set the Yoga
|
|
176
|
+
// props again, which normally only happens during prop parsing. Every
|
|
177
|
+
// commit, state update, etc, will incur this cost.
|
|
178
|
+
if (changedPadding) {
|
|
179
|
+
// Set new props on node
|
|
180
|
+
const_cast<WindowsTextInputProps &>(textInputShadowNode->getConcreteProps()).yogaStyle.padding() = result;
|
|
181
|
+
// Communicate new props to Yoga part of the node
|
|
182
|
+
textInputShadowNode->updateYogaProps();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
textInputShadowNode->dirtyLayout();
|
|
187
|
+
textInputShadowNode->enableMeasurement();
|
|
188
|
+
|
|
189
|
+
ConcreteComponentDescriptor::adopt(shadowNode);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
private:
|
|
193
|
+
SharedTextLayoutManager textLayoutManager_;
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
} // namespace react
|
|
197
|
+
} // namespace facebook
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
|
|
2
|
+
// Copyright (c) Microsoft Corporation.
|
|
3
|
+
// Licensed under the MIT License.
|
|
4
|
+
|
|
5
|
+
#pragma once
|
|
6
|
+
|
|
7
|
+
#include "WindowsTextInputComponentView.h"
|
|
8
|
+
|
|
9
|
+
#include <UI.Xaml.Controls.h>
|
|
10
|
+
#include <Utils/ValueUtils.h>
|
|
11
|
+
#include <unicode.h>
|
|
12
|
+
#include "WindowsTextInputShadowNode.h"
|
|
13
|
+
#include "WindowsTextInputState.h"
|
|
14
|
+
|
|
15
|
+
namespace Microsoft::ReactNative {
|
|
16
|
+
|
|
17
|
+
facebook::react::AttributedString WindowsTextInputComponentView::getAttributedString() const {
|
|
18
|
+
// Use BaseTextShadowNode to get attributed string from children
|
|
19
|
+
|
|
20
|
+
auto childTextAttributes = facebook::react::TextAttributes::defaultTextAttributes();
|
|
21
|
+
|
|
22
|
+
childTextAttributes.apply(m_props->textAttributes);
|
|
23
|
+
|
|
24
|
+
auto attributedString = facebook::react::AttributedString{};
|
|
25
|
+
// auto attachments = facebook::react::BaseTextShadowNode::Attachments{};
|
|
26
|
+
|
|
27
|
+
// BaseTextShadowNode only gets children. We must detect and prepend text
|
|
28
|
+
// value attributes manually.
|
|
29
|
+
auto text = winrt::to_string(m_element.Text());
|
|
30
|
+
if (!text.empty()) {
|
|
31
|
+
auto textAttributes = facebook::react::TextAttributes::defaultTextAttributes();
|
|
32
|
+
textAttributes.apply(m_props->textAttributes);
|
|
33
|
+
auto fragment = facebook::react::AttributedString::Fragment{};
|
|
34
|
+
fragment.string = text;
|
|
35
|
+
fragment.textAttributes = textAttributes;
|
|
36
|
+
fragment.textAttributes.backgroundColor = facebook::react::clearColor();
|
|
37
|
+
attributedString.prependFragment(fragment);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return attributedString;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
WindowsTextInputComponentView::WindowsTextInputComponentView() {
|
|
44
|
+
static auto const defaultProps = std::make_shared<facebook::react::WindowsTextInputProps const>();
|
|
45
|
+
m_props = defaultProps;
|
|
46
|
+
|
|
47
|
+
m_textChangedRevoker =
|
|
48
|
+
m_element.TextChanged(winrt::auto_revoke, [this](auto sender, xaml::Controls::TextChangedEventArgs args) {
|
|
49
|
+
auto data = m_state->getData();
|
|
50
|
+
data.attributedString = getAttributedString();
|
|
51
|
+
data.mostRecentEventCount = m_nativeEventCount;
|
|
52
|
+
m_state->updateState(std::move(data));
|
|
53
|
+
|
|
54
|
+
if (m_eventEmitter && !m_comingFromJS) {
|
|
55
|
+
auto emitter = std::static_pointer_cast<const facebook::react::WindowsTextInputEventEmitter>(m_eventEmitter);
|
|
56
|
+
facebook::react::WindowsTextInputEventEmitter::OnChange onChangeArgs;
|
|
57
|
+
onChangeArgs.text = winrt::to_string(m_element.Text());
|
|
58
|
+
onChangeArgs.eventCount = ++m_nativeEventCount;
|
|
59
|
+
emitter->onChange(onChangeArgs);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
m_SelectionChangedRevoker = m_element.SelectionChanged(winrt::auto_revoke, [this](auto sender, auto args) {
|
|
64
|
+
if (m_eventEmitter) {
|
|
65
|
+
auto emitter = std::static_pointer_cast<const facebook::react::WindowsTextInputEventEmitter>(m_eventEmitter);
|
|
66
|
+
facebook::react::WindowsTextInputEventEmitter::OnSelectionChange onSelectionChangeArgs;
|
|
67
|
+
onSelectionChangeArgs.selection.start = m_element.SelectionStart();
|
|
68
|
+
onSelectionChangeArgs.selection.end = m_element.SelectionStart() + m_element.SelectionLength();
|
|
69
|
+
emitter->onSelectionChange(onSelectionChangeArgs);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
void WindowsTextInputComponentView::handleCommand(std::string const &commandName, folly::dynamic const &arg) noexcept {
|
|
75
|
+
if (commandName == "setTextAndSelection") {
|
|
76
|
+
auto eventCount = arg[0].asInt();
|
|
77
|
+
|
|
78
|
+
if (eventCount >= m_nativeEventCount) {
|
|
79
|
+
auto text = arg[1].asString();
|
|
80
|
+
auto begin = arg[2].asInt();
|
|
81
|
+
auto end = arg[3].asInt();
|
|
82
|
+
m_comingFromJS = true;
|
|
83
|
+
SetText(winrt::to_hstring(text));
|
|
84
|
+
|
|
85
|
+
if (!(begin < 0 || end < 0 || begin > end)) {
|
|
86
|
+
m_element.Select(static_cast<int32_t>(begin), static_cast<int32_t>(end - begin));
|
|
87
|
+
}
|
|
88
|
+
m_comingFromJS = false;
|
|
89
|
+
}
|
|
90
|
+
} else {
|
|
91
|
+
Super::handleCommand(commandName, arg);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
std::vector<facebook::react::ComponentDescriptorProvider>
|
|
96
|
+
WindowsTextInputComponentView::supplementalComponentDescriptorProviders() noexcept {
|
|
97
|
+
return {};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
void WindowsTextInputComponentView::mountChildComponentView(
|
|
101
|
+
const IComponentView &childComponentView,
|
|
102
|
+
uint32_t index) noexcept {
|
|
103
|
+
assert(false);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
void WindowsTextInputComponentView::unmountChildComponentView(
|
|
107
|
+
const IComponentView &childComponentView,
|
|
108
|
+
uint32_t index) noexcept {
|
|
109
|
+
assert(false);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
void WindowsTextInputComponentView::updateProps(
|
|
113
|
+
facebook::react::Props::Shared const &props,
|
|
114
|
+
facebook::react::Props::Shared const &oldProps) noexcept {
|
|
115
|
+
const auto &oldTextInputProps = *std::static_pointer_cast<const facebook::react::WindowsTextInputProps>(m_props);
|
|
116
|
+
const auto &newTextInputProps = *std::static_pointer_cast<const facebook::react::WindowsTextInputProps>(props);
|
|
117
|
+
|
|
118
|
+
if (oldTextInputProps.textAttributes.foregroundColor != newTextInputProps.textAttributes.foregroundColor) {
|
|
119
|
+
if (newTextInputProps.textAttributes.foregroundColor)
|
|
120
|
+
m_element.Foreground(newTextInputProps.textAttributes.foregroundColor.AsWindowsBrush());
|
|
121
|
+
else
|
|
122
|
+
m_element.ClearValue(::xaml::Controls::TextBlock::ForegroundProperty());
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (oldTextInputProps.textAttributes.fontSize != newTextInputProps.textAttributes.fontSize) {
|
|
126
|
+
if (std::isnan(newTextInputProps.textAttributes.fontSize)) {
|
|
127
|
+
m_element.FontSize(facebook::react::TextAttributes::defaultTextAttributes().fontSize);
|
|
128
|
+
} else {
|
|
129
|
+
m_element.FontSize(newTextInputProps.textAttributes.fontSize);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (oldTextInputProps.textAttributes.fontWeight != newTextInputProps.textAttributes.fontWeight) {
|
|
134
|
+
m_element.FontWeight(winrt::Windows::UI::Text::FontWeight{static_cast<uint16_t>(
|
|
135
|
+
newTextInputProps.textAttributes.fontWeight.value_or(static_cast<facebook::react::FontWeight>(400)))});
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (oldTextInputProps.textAttributes.fontStyle != newTextInputProps.textAttributes.fontStyle) {
|
|
139
|
+
switch (newTextInputProps.textAttributes.fontStyle.value_or(facebook::react::FontStyle::Normal)) {
|
|
140
|
+
case facebook::react::FontStyle::Italic:
|
|
141
|
+
m_element.FontStyle(winrt::Windows::UI::Text::FontStyle::Italic);
|
|
142
|
+
break;
|
|
143
|
+
case facebook::react::FontStyle::Normal:
|
|
144
|
+
m_element.FontStyle(winrt::Windows::UI::Text::FontStyle::Normal);
|
|
145
|
+
break;
|
|
146
|
+
case facebook::react::FontStyle::Oblique:
|
|
147
|
+
m_element.FontStyle(winrt::Windows::UI::Text::FontStyle::Oblique);
|
|
148
|
+
break;
|
|
149
|
+
default:
|
|
150
|
+
assert(false);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (oldTextInputProps.textAttributes.fontFamily != newTextInputProps.textAttributes.fontFamily) {
|
|
155
|
+
if (newTextInputProps.textAttributes.fontFamily.empty())
|
|
156
|
+
m_element.FontFamily(xaml::Media::FontFamily(L"Segoe UI"));
|
|
157
|
+
else
|
|
158
|
+
m_element.FontFamily(xaml::Media::FontFamily(
|
|
159
|
+
Microsoft::Common::Unicode::Utf8ToUtf16(newTextInputProps.textAttributes.fontFamily)));
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if (oldTextInputProps.allowFontScaling != newTextInputProps.allowFontScaling) {
|
|
163
|
+
m_element.IsTextScaleFactorEnabled(newTextInputProps.allowFontScaling);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
if (oldTextInputProps.maxLength != newTextInputProps.maxLength) {
|
|
167
|
+
m_element.MaxLength(newTextInputProps.maxLength);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (oldTextInputProps.placeholder != newTextInputProps.placeholder) {
|
|
171
|
+
m_element.PlaceholderText(winrt::to_hstring(newTextInputProps.placeholder));
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
if (oldTextInputProps.editable != newTextInputProps.editable) {
|
|
175
|
+
m_element.IsReadOnly(!newTextInputProps.editable);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/*
|
|
179
|
+
if (oldTextInputProps.multiline != newTextInputProps.multiline) {
|
|
180
|
+
m_element.TextWrapping(newTextInputProps.multiline ? xaml::TextWrapping::Wrap : xaml::TextWrapping::NoWrap);
|
|
181
|
+
m_element.AcceptsReturn(newTextInputProps.multiline);
|
|
182
|
+
}
|
|
183
|
+
*/
|
|
184
|
+
|
|
185
|
+
if (oldTextInputProps.selection.start != newTextInputProps.selection.start ||
|
|
186
|
+
oldTextInputProps.selection.end != newTextInputProps.selection.end) {
|
|
187
|
+
m_element.Select(
|
|
188
|
+
newTextInputProps.selection.start, newTextInputProps.selection.end - newTextInputProps.selection.start);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
if (oldTextInputProps.autoCapitalize != newTextInputProps.autoCapitalize) {
|
|
192
|
+
if (newTextInputProps.autoCapitalize == "characters") {
|
|
193
|
+
m_element.CharacterCasing(xaml::Controls::CharacterCasing::Upper);
|
|
194
|
+
} else { // anything else turns off autoCap (should be "None" but
|
|
195
|
+
// we don't support "words"/"senetences" yet)
|
|
196
|
+
m_element.CharacterCasing(xaml::Controls::CharacterCasing::Normal);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
if (oldTextInputProps.backgroundColor != newTextInputProps.backgroundColor) {
|
|
201
|
+
if (newTextInputProps.backgroundColor) {
|
|
202
|
+
m_element.Background(newTextInputProps.backgroundColor.AsWindowsBrush());
|
|
203
|
+
} else {
|
|
204
|
+
m_element.ClearValue(xaml::Controls::Control::BackgroundProperty());
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
if (oldTextInputProps.borderColors != newTextInputProps.borderColors) {
|
|
209
|
+
if (newTextInputProps.borderColors.all) {
|
|
210
|
+
m_element.BorderBrush(newTextInputProps.borderColors.all->AsWindowsBrush());
|
|
211
|
+
} else {
|
|
212
|
+
m_element.ClearValue(xaml::Controls::Control::BorderBrushProperty());
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
m_props = std::static_pointer_cast<facebook::react::WindowsTextInputProps const>(props);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
void WindowsTextInputComponentView::updateState(
|
|
220
|
+
facebook::react::State::Shared const &state,
|
|
221
|
+
facebook::react::State::Shared const &oldState) noexcept {
|
|
222
|
+
m_state = std::static_pointer_cast<facebook::react::WindowsTextInputShadowNode::ConcreteState const>(state);
|
|
223
|
+
|
|
224
|
+
if (!m_state) {
|
|
225
|
+
assert(false && "State is `null` for <TextInput> component.");
|
|
226
|
+
m_element.Text(L"");
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
auto data = m_state->getData();
|
|
231
|
+
|
|
232
|
+
if (!oldState) {
|
|
233
|
+
m_mostRecentEventCount = m_state->getData().mostRecentEventCount;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
if (m_mostRecentEventCount == m_state->getData().mostRecentEventCount) {
|
|
237
|
+
m_comingFromState = true;
|
|
238
|
+
// Only handle single/empty fragments right now -- ignore the other fragments
|
|
239
|
+
SetText(
|
|
240
|
+
m_state->getData().attributedString.getFragments().size()
|
|
241
|
+
? winrt::to_hstring(m_state->getData().attributedString.getFragments()[0].string)
|
|
242
|
+
: L"");
|
|
243
|
+
m_comingFromState = false;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
void WindowsTextInputComponentView::SetText(winrt::hstring text) noexcept {
|
|
248
|
+
auto oldCursor = m_element.SelectionStart();
|
|
249
|
+
auto oldSelectionLength = m_element.SelectionLength();
|
|
250
|
+
auto oldValue = m_element.Text();
|
|
251
|
+
auto newValue = text;
|
|
252
|
+
if (oldValue != newValue) {
|
|
253
|
+
m_element.Text(newValue);
|
|
254
|
+
if (oldValue.size() == newValue.size()) {
|
|
255
|
+
m_element.SelectionStart(oldCursor);
|
|
256
|
+
} else {
|
|
257
|
+
m_element.SelectionStart(newValue.size());
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
void WindowsTextInputComponentView::updateLayoutMetrics(
|
|
263
|
+
facebook::react::LayoutMetrics const &layoutMetrics,
|
|
264
|
+
facebook::react::LayoutMetrics const &oldLayoutMetrics) noexcept {
|
|
265
|
+
// Set Position & Size Properties
|
|
266
|
+
|
|
267
|
+
m_layoutMetrics = layoutMetrics;
|
|
268
|
+
|
|
269
|
+
m_element.BorderThickness(
|
|
270
|
+
{m_layoutMetrics.borderWidth.left,
|
|
271
|
+
m_layoutMetrics.borderWidth.top,
|
|
272
|
+
m_layoutMetrics.borderWidth.right,
|
|
273
|
+
m_layoutMetrics.borderWidth.bottom});
|
|
274
|
+
|
|
275
|
+
winrt::Microsoft::ReactNative::ViewPanel::SetLeft(m_element, layoutMetrics.frame.origin.x);
|
|
276
|
+
winrt::Microsoft::ReactNative::ViewPanel::SetTop(m_element, layoutMetrics.frame.origin.y);
|
|
277
|
+
|
|
278
|
+
m_element.MinHeight(0);
|
|
279
|
+
|
|
280
|
+
m_element.Padding({
|
|
281
|
+
layoutMetrics.contentInsets.left - layoutMetrics.borderWidth.left,
|
|
282
|
+
layoutMetrics.contentInsets.top - layoutMetrics.borderWidth.top,
|
|
283
|
+
layoutMetrics.contentInsets.right - layoutMetrics.borderWidth.right,
|
|
284
|
+
layoutMetrics.contentInsets.bottom - layoutMetrics.borderWidth.bottom,
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
m_element.ClearValue(xaml::FrameworkElement::HeightProperty());
|
|
288
|
+
m_element.ClearValue(xaml::FrameworkElement::WidthProperty());
|
|
289
|
+
m_element.Measure({std::numeric_limits<float>::infinity(), std::numeric_limits<float>::infinity()});
|
|
290
|
+
auto ds = m_element.DesiredSize();
|
|
291
|
+
|
|
292
|
+
m_element.Width(layoutMetrics.frame.size.width);
|
|
293
|
+
m_element.Height(layoutMetrics.frame.size.height);
|
|
294
|
+
}
|
|
295
|
+
void WindowsTextInputComponentView::finalizeUpdates(RNComponentViewUpdateMask updateMask) noexcept {
|
|
296
|
+
// m_element.FinalizeProperties();
|
|
297
|
+
}
|
|
298
|
+
void WindowsTextInputComponentView::prepareForRecycle() noexcept {}
|
|
299
|
+
facebook::react::SharedProps WindowsTextInputComponentView::props() noexcept {
|
|
300
|
+
assert(false);
|
|
301
|
+
return {};
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
const xaml::FrameworkElement WindowsTextInputComponentView::Element() const noexcept {
|
|
305
|
+
return m_element;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
} // namespace Microsoft::ReactNative
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
|
|
2
|
+
// Copyright (c) Microsoft Corporation.
|
|
3
|
+
// Licensed under the MIT License.
|
|
4
|
+
|
|
5
|
+
#pragma once
|
|
6
|
+
|
|
7
|
+
#include "../ComponentView.h"
|
|
8
|
+
#include "../ViewComponentView.h"
|
|
9
|
+
#include "WindowsTextInputProps.h"
|
|
10
|
+
#include "WindowsTextInputShadowNode.h"
|
|
11
|
+
|
|
12
|
+
namespace Microsoft::ReactNative {
|
|
13
|
+
|
|
14
|
+
struct WindowsTextInputComponentView : BaseComponentView {
|
|
15
|
+
using Super = BaseComponentView;
|
|
16
|
+
WindowsTextInputComponentView();
|
|
17
|
+
|
|
18
|
+
std::vector<facebook::react::ComponentDescriptorProvider> supplementalComponentDescriptorProviders() noexcept
|
|
19
|
+
override;
|
|
20
|
+
void mountChildComponentView(const IComponentView &childComponentView, uint32_t index) noexcept override;
|
|
21
|
+
void unmountChildComponentView(const IComponentView &childComponentView, uint32_t index) noexcept override;
|
|
22
|
+
void updateProps(facebook::react::Props::Shared const &props, facebook::react::Props::Shared const &oldProps) noexcept
|
|
23
|
+
override;
|
|
24
|
+
void updateState(facebook::react::State::Shared const &state, facebook::react::State::Shared const &oldState) noexcept
|
|
25
|
+
override;
|
|
26
|
+
void updateLayoutMetrics(
|
|
27
|
+
facebook::react::LayoutMetrics const &layoutMetrics,
|
|
28
|
+
facebook::react::LayoutMetrics const &oldLayoutMetrics) noexcept override;
|
|
29
|
+
void finalizeUpdates(RNComponentViewUpdateMask updateMask) noexcept override;
|
|
30
|
+
void prepareForRecycle() noexcept override;
|
|
31
|
+
facebook::react::SharedProps props() noexcept override;
|
|
32
|
+
void handleCommand(std::string const &commandName, folly::dynamic const &arg) noexcept override;
|
|
33
|
+
|
|
34
|
+
virtual const xaml::FrameworkElement Element() const noexcept override;
|
|
35
|
+
|
|
36
|
+
private:
|
|
37
|
+
void SetText(winrt::hstring text) noexcept;
|
|
38
|
+
facebook::react::AttributedString getAttributedString() const;
|
|
39
|
+
|
|
40
|
+
facebook::react::LayoutMetrics m_layoutMetrics;
|
|
41
|
+
xaml::Controls::TextBox m_element;
|
|
42
|
+
xaml::Controls::TextBox::TextChanged_revoker m_textChangedRevoker;
|
|
43
|
+
xaml::Controls::TextBox::SelectionChanged_revoker m_SelectionChangedRevoker;
|
|
44
|
+
std::shared_ptr<facebook::react::WindowsTextInputProps const> m_props;
|
|
45
|
+
std::shared_ptr<facebook::react::WindowsTextInputShadowNode::ConcreteState const> m_state;
|
|
46
|
+
int64_t m_mostRecentEventCount{0};
|
|
47
|
+
int m_nativeEventCount{0};
|
|
48
|
+
bool m_comingFromJS{false};
|
|
49
|
+
bool m_comingFromState{false};
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
} // namespace Microsoft::ReactNative
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
|
|
4
|
+
#pragma once
|
|
5
|
+
|
|
6
|
+
#include "WindowsTextInputEventEmitter.h"
|
|
7
|
+
|
|
8
|
+
namespace facebook::react {
|
|
9
|
+
|
|
10
|
+
void WindowsTextInputEventEmitter::onChange(OnChange event) const {
|
|
11
|
+
dispatchEvent("change", [event = std::move(event)](jsi::Runtime &runtime) {
|
|
12
|
+
auto payload = jsi::Object(runtime);
|
|
13
|
+
payload.setProperty(runtime, "eventCount", event.eventCount);
|
|
14
|
+
payload.setProperty(runtime, "target", event.target);
|
|
15
|
+
payload.setProperty(runtime, "text", event.text);
|
|
16
|
+
return payload;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
void WindowsTextInputEventEmitter::onSelectionChange(const OnSelectionChange &event) const {
|
|
21
|
+
dispatchEvent("textInputSelectionChange", [event = std::move(event)](jsi::Runtime &runtime) {
|
|
22
|
+
auto payload = jsi::Object(runtime);
|
|
23
|
+
auto selection = jsi::Object(runtime);
|
|
24
|
+
selection.setProperty(runtime, "start", event.selection.start);
|
|
25
|
+
selection.setProperty(runtime, "end", event.selection.end);
|
|
26
|
+
payload.setProperty(runtime, "selection", selection);
|
|
27
|
+
return payload;
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
} // namespace facebook::react
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
|
|
4
|
+
#pragma once
|
|
5
|
+
|
|
6
|
+
#include <react/renderer/components/view/ViewEventEmitter.h>
|
|
7
|
+
|
|
8
|
+
namespace facebook::react {
|
|
9
|
+
|
|
10
|
+
class WindowsTextInputEventEmitter : public ViewEventEmitter {
|
|
11
|
+
public:
|
|
12
|
+
using ViewEventEmitter::ViewEventEmitter;
|
|
13
|
+
|
|
14
|
+
struct Selection {
|
|
15
|
+
int start;
|
|
16
|
+
int end;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
struct OnChange {
|
|
20
|
+
int eventCount;
|
|
21
|
+
int target;
|
|
22
|
+
std::string text;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
struct OnSelectionChange {
|
|
26
|
+
Selection selection;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
void onChange(OnChange value) const;
|
|
30
|
+
void onSelectionChange(const OnSelectionChange &value) const;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
} // namespace facebook::react
|