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