react-native-windows 0.79.5 → 0.80.0-preview.10
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 +12 -3
- package/Directory.Build.props +11 -2
- package/Folly/TEMP_UntilFollyUpdate/json/json.cpp +1 -1
- package/Libraries/Alert/Alert.d.ts +4 -1
- package/Libraries/Alert/Alert.js +3 -0
- package/Libraries/Alert/Alert.windows.js +3 -0
- package/Libraries/Alert/RCTAlertManager.js +17 -0
- package/Libraries/Animated/Animated.js.flow +1 -3
- package/Libraries/Animated/AnimatedEvent.js +4 -3
- package/Libraries/Animated/AnimatedExports.js +2 -2
- package/Libraries/Animated/AnimatedExports.js.flow +140 -0
- package/Libraries/Animated/AnimatedImplementation.js +2 -123
- package/Libraries/Animated/Easing.js +13 -15
- package/Libraries/Animated/animations/Animation.js +8 -4
- package/Libraries/Animated/components/AnimatedFlatList.js +7 -6
- package/Libraries/Animated/components/AnimatedScrollView.js +48 -42
- package/Libraries/Animated/components/AnimatedSectionList.js +11 -7
- package/Libraries/Animated/createAnimatedComponent.js +105 -57
- package/Libraries/Animated/nodes/AnimatedNode.js +4 -3
- package/Libraries/Animated/nodes/AnimatedProps.js +46 -26
- package/Libraries/Animated/nodes/AnimatedValue.js +16 -7
- package/Libraries/Animated/nodes/AnimatedValueXY.js +3 -1
- package/Libraries/AppState/AppState.js +7 -2
- package/Libraries/BatchedBridge/MessageQueue.js +2 -2
- package/Libraries/BatchedBridge/NativeModules.js +2 -0
- package/Libraries/Blob/BlobManager.js +1 -0
- package/Libraries/Blob/FileReader.js +219 -8
- package/Libraries/Blob/URL.js +37 -12
- package/Libraries/Blob/URLSearchParams.js +106 -31
- package/Libraries/Blob/URLSearchParams.js.flow +12 -7
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +1 -1
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js +1 -1
- package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.js +17 -0
- package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +1 -0
- package/Libraries/Components/Button.d.ts +3 -0
- package/Libraries/Components/Button.js +1 -1
- package/Libraries/Components/Button.windows.js +27 -1
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +1 -3
- package/Libraries/{NewAppScreen/components/Colors.js → Components/DrawerAndroid/DrawerLayoutAndroid.ios.js} +6 -10
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +6 -66
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js.flow +18 -0
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroidFallback.js +71 -0
- package/Libraries/Components/Flyout/Flyout.js +11 -0
- package/Libraries/Components/Keyboard/Keyboard.js +5 -3
- package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +6 -3
- package/Libraries/Components/Keyboard/KeyboardExt.js.map +1 -1
- package/Libraries/Components/Popup/Popup.js +11 -0
- package/Libraries/Components/Pressable/Pressable.js +20 -4
- package/Libraries/Components/Pressable/Pressable.windows.js +20 -4
- package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js +25 -3
- package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidTypes.js +29 -20
- package/Libraries/Components/RefreshControl/RefreshControl.js +1 -1
- package/Libraries/Components/RefreshControl/RefreshControl.windows.js +1 -1
- package/Libraries/Components/ScrollView/ScrollView.d.ts +3 -3
- package/Libraries/Components/ScrollView/ScrollView.js +132 -122
- package/Libraries/Components/ScrollView/ScrollView.windows.js +131 -122
- package/Libraries/Components/StaticRenderer.js +1 -1
- package/Libraries/Components/Switch/Switch.d.ts +3 -0
- package/Libraries/Components/Switch/Switch.js +8 -4
- package/Libraries/Components/Switch/Switch.windows.js +17 -4
- package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +2 -1
- package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +2 -4
- package/Libraries/Components/TextInput/TextInput.d.ts +70 -33
- package/Libraries/Components/TextInput/TextInput.flow.js +100 -51
- package/Libraries/Components/TextInput/TextInput.flow.windows.js +1246 -0
- package/Libraries/Components/TextInput/TextInput.js +88 -1027
- package/Libraries/Components/TextInput/TextInput.windows.js +104 -1092
- package/Libraries/Components/TextInput/TextInputState.js +1 -1
- package/Libraries/Components/TextInput/TextInputState.windows.js +1 -1
- package/Libraries/Components/TextInput/WindowsTextInputNativeComponent.js +2 -1
- package/Libraries/{Modal/ModalInjection.js → Components/ToastAndroid/ToastAndroid.ios.js} +3 -5
- package/Libraries/Components/ToastAndroid/ToastAndroid.js +4 -32
- package/Libraries/Components/ToastAndroid/ToastAndroid.js.flow +109 -0
- package/Libraries/Components/ToastAndroid/ToastAndroidFallback.js +45 -0
- package/Libraries/Components/Touchable/Touchable.js +5 -5
- package/Libraries/Components/Touchable/Touchable.windows.js +5 -5
- package/Libraries/Components/Touchable/TouchableBounce.js +14 -7
- package/Libraries/Components/Touchable/TouchableBounce.windows.js +14 -7
- package/Libraries/Components/Touchable/TouchableHighlight.js +10 -7
- package/Libraries/Components/Touchable/TouchableHighlight.windows.js +10 -7
- package/Libraries/Components/Touchable/TouchableNativeFeedback.js +6 -6
- package/Libraries/Components/Touchable/TouchableNativeFeedback.windows.js +6 -6
- package/Libraries/Components/Touchable/TouchableOpacity.js +13 -6
- package/Libraries/Components/Touchable/TouchableOpacity.windows.js +13 -6
- package/Libraries/Components/View/View.js +18 -21
- package/Libraries/Components/View/View.windows.js +39 -41
- package/Libraries/Components/View/ViewAccessibility.d.ts +8 -0
- package/Libraries/Components/View/ViewAccessibility.js +25 -1
- package/Libraries/Components/View/ViewAccessibility.windows.js +9 -1
- package/Libraries/Components/View/ViewPropTypes.js +49 -3
- package/Libraries/Components/View/ViewPropTypes.windows.js +50 -2
- package/Libraries/Core/ReactNativeVersion.js +1 -1
- package/Libraries/Core/setUpReactDevTools.js +5 -5
- package/Libraries/Debugging/DebuggingOverlayRegistry.js +3 -3
- package/Libraries/EventEmitter/NativeEventEmitter.js +9 -4
- package/Libraries/Image/AssetSourceResolver.js +17 -4
- package/Libraries/Image/AssetSourceResolver.windows.js +17 -4
- package/Libraries/Image/Image.d.ts +26 -10
- package/Libraries/Image/Image.js +17 -0
- package/Libraries/Image/Image.js.flow +5 -5
- package/Libraries/Image/Image.windows.js +13 -1
- package/Libraries/Image/ImageBackground.js +2 -0
- package/Libraries/Image/ImageInjection.js +1 -1
- package/Libraries/Image/ImageProps.js +22 -17
- package/Libraries/Image/ImageSource.js +3 -1
- package/Libraries/Image/ImageSourceUtils.js +4 -2
- package/Libraries/Image/ImageTypes.flow.js +1 -1
- package/Libraries/Interaction/InteractionManager.d.ts +13 -0
- package/Libraries/Interaction/InteractionManager.js +1 -1
- package/Libraries/Interaction/PanResponder.js +3 -3
- package/Libraries/Interaction/TaskQueue.js +1 -0
- package/Libraries/LayoutAnimation/LayoutAnimation.js +2 -2
- package/Libraries/Linking/Linking.js +1 -1
- package/Libraries/Lists/FlatList.d.ts +2 -2
- package/Libraries/Lists/FlatList.js +8 -11
- package/Libraries/Lists/SectionList.js +39 -42
- package/Libraries/Lists/SectionListModern.js +25 -34
- package/Libraries/Lists/VirtualizedList.js +1 -0
- package/Libraries/Lists/VirtualizedSectionList.js +1 -0
- package/Libraries/LogBox/Data/LogBoxData.js +1 -1
- package/Libraries/LogBox/LogBoxNotificationContainer.js +1 -1
- package/Libraries/Modal/Modal.js +33 -7
- package/Libraries/Modal/Modal.windows.js +33 -10
- package/Libraries/NativeComponent/BaseViewConfig.android.js +2 -0
- package/Libraries/NativeComponent/BaseViewConfig.ios.js +2 -0
- package/Libraries/NativeComponent/BaseViewConfig.js +17 -0
- package/Libraries/NativeComponent/BaseViewConfig.windows.js +3 -0
- package/Libraries/NativeComponent/PlatformBaseViewConfig.js +2 -2
- package/Libraries/NativeModules/specs/NativeDevMenu.js +2 -2
- package/Libraries/Network/RCTNetworking.android.js +1 -1
- package/Libraries/Network/RCTNetworking.ios.js +1 -1
- package/Libraries/Network/RCTNetworking.js +17 -0
- package/Libraries/Network/RCTNetworking.js.flow +1 -1
- package/Libraries/Network/RCTNetworking.windows.js +1 -1
- package/Libraries/Network/XMLHttpRequest.js +781 -10
- package/Libraries/Performance/Systrace.js +7 -7
- package/Libraries/Pressability/Pressability.js +1 -1
- package/Libraries/Pressability/Pressability.windows.js +1 -1
- package/Libraries/ReactNative/AppContainer-dev.js +5 -4
- package/Libraries/ReactNative/AppRegistry.flow.js +49 -0
- package/Libraries/ReactNative/AppRegistry.js +2 -322
- package/Libraries/ReactNative/AppRegistry.js.flow +23 -0
- package/Libraries/ReactNative/AppRegistryImpl.js +316 -0
- package/Libraries/ReactNative/FabricUIManager.js +10 -0
- package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +2 -4
- package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +1 -4
- package/Libraries/ReactNative/RendererImplementation.js +10 -5
- package/Libraries/ReactNative/getNativeComponentAttributes.js +1 -0
- package/Libraries/ReactNative/renderApplication.js +9 -0
- package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +3 -3
- package/Libraries/ReactPrivate/ReactNativePrivateInterface.js.flow +51 -0
- package/Libraries/Renderer/implementations/ReactFabric-dev.js +4840 -4748
- package/Libraries/Renderer/implementations/ReactFabric-prod.js +4947 -4829
- package/Libraries/Renderer/implementations/ReactFabric-profiling.js +3998 -3888
- package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +5005 -4948
- package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +2744 -2652
- package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +5020 -4933
- package/Libraries/Renderer/shims/ReactNativeTypes.js +3 -3
- package/Libraries/Settings/Settings.ios.js +1 -0
- package/Libraries/Settings/Settings.js +13 -19
- package/Libraries/Settings/SettingsFallback.js +33 -0
- package/Libraries/StyleSheet/PlatformColorValueTypes.js +15 -0
- package/Libraries/StyleSheet/PlatformColorValueTypesIOS.js +6 -0
- package/Libraries/StyleSheet/Rect.js +1 -0
- package/Libraries/StyleSheet/StyleSheet.js +31 -200
- package/Libraries/StyleSheet/StyleSheet.js.flow +188 -0
- package/Libraries/StyleSheet/StyleSheetExports.js +210 -0
- package/Libraries/StyleSheet/StyleSheetExports.js.flow +112 -0
- package/Libraries/StyleSheet/StyleSheetTypes.d.ts +1 -1
- package/Libraries/StyleSheet/StyleSheetTypes.js +130 -52
- package/Libraries/StyleSheet/flattenStyle.js +14 -4
- package/Libraries/StyleSheet/private/_TransformStyle.js +49 -21
- package/Libraries/StyleSheet/processBackgroundImage.js +670 -214
- package/Libraries/Text/Text.d.ts +2 -5
- package/Libraries/Text/Text.js +3 -3
- package/Libraries/Text/Text.windows.js +3 -3
- package/Libraries/Text/TextNativeComponent.js +0 -4
- package/Libraries/Text/TextProps.js +5 -33
- package/Libraries/Text/TextProps.windows.js +5 -32
- package/Libraries/Types/CodegenTypesNamespace.d.ts +45 -0
- package/Libraries/{Blob/__mocks__/BlobModule.js → Types/CodegenTypesNamespace.js} +4 -6
- package/Libraries/Types/CoreEventTypes.d.ts +6 -1
- package/Libraries/Types/CoreEventTypes.js +1 -1
- package/Libraries/Types/CoreEventTypes.windows.js +1 -1
- package/Libraries/Utilities/Appearance.js +2 -0
- package/Libraries/Utilities/BackHandler.js +17 -0
- package/Libraries/Utilities/DeviceInfo.js +2 -0
- package/Libraries/Utilities/Dimensions.js +1 -1
- package/Libraries/Utilities/Platform.js +17 -0
- package/Libraries/Utilities/PlatformTypes.js +11 -3
- package/Libraries/Utilities/ReactNativeTestTools.js +2 -2
- package/Libraries/Utilities/codegenNativeCommands.d.ts +18 -0
- package/Libraries/Utilities/codegenNativeComponent.d.ts +26 -0
- package/Libraries/WebSocket/WebSocket.js +313 -8
- package/Libraries/vendor/core/ErrorUtils.js +28 -2
- package/Libraries/vendor/emitter/EventEmitter.js +6 -2
- package/Microsoft.ReactNative/CompositionSwitcher.idl +3 -0
- package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.cpp +0 -6
- package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.cpp +248 -6
- package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +55 -160
- package/Microsoft.ReactNative/Fabric/Composition/CompositionTextRangeProvider.cpp +30 -9
- package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +36 -0
- package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +36 -33
- package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.cpp +22 -0
- package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.h +3 -0
- package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +46 -0
- package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.h +4 -1
- package/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.cpp +11 -0
- package/Microsoft.ReactNative/Fabric/Composition/TextDrawing.cpp +37 -5
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +177 -25
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.h +4 -0
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputEventEmitter.cpp +29 -0
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputEventEmitter.h +2 -0
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.cpp +17 -34
- package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +225 -0
- package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +23 -0
- package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +9 -3
- package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +2 -0
- package/Microsoft.ReactNative/Fabric/ImageManager.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewEventEmitter.cpp +16 -0
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewEventEmitter.h +1 -0
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.cpp +9 -0
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.h +1 -0
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewTraitsInitializer.h +4 -0
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/PlatformColorUtils.cpp +64 -0
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/PlatformColorUtils.h +11 -0
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/WindowsTextLayoutManager.cpp +36 -96
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/WindowsTextLayoutManager.h +1 -1
- package/Microsoft.ReactNative/Modules/AccessibilityInfoModule.cpp +29 -0
- package/Microsoft.ReactNative/Modules/SampleTurboModule.cpp +4 -0
- package/Microsoft.ReactNative/Modules/SampleTurboModule.h +3 -0
- package/Microsoft.ReactNative/TurboModulesProvider.h +1 -1
- package/Microsoft.ReactNative/Utils/ThemeUtils.cpp +49 -0
- package/Microsoft.ReactNative/Utils/ThemeUtils.h +31 -0
- package/Microsoft.ReactNative.Cxx/JSI/JsiApiContext.h +1 -1
- package/Microsoft.ReactNative.Cxx/JSI/LongLivedJsiValue.h +1 -1
- package/PropertySheets/Generated/PackageVersion.g.props +4 -4
- package/PropertySheets/JSEngine.props +1 -1
- package/PropertySheets/React.Cpp.props +4 -0
- package/PropertySheets/Warnings.props +45 -0
- package/README.md +6 -2
- package/ReactCommon/ReactCommon.vcxproj +9 -4
- package/ReactCommon/ReactCommon.vcxproj.filters +6 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/CxxNativeModule.cpp +253 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSExecutor.cpp +5 -2
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/NativeToJsBridge.cpp +4 -8
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/TraceSection.h +184 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.cpp +22 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.h +2 -4
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleWithJSIBindings.cpp +27 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +3 -2
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityPrimitives.h +1 -1
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityProps.cpp +308 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/core/DynamicEventPayload.cpp +42 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/css/CSSTokenizer.h +7 -51
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/ReactInstance.cpp +10 -5
- package/Scripts/creaternwapp.cmd +9 -3
- package/Scripts/rnw-dependencies.ps1 +16 -3
- package/Shared/Shared.vcxitems +3 -2
- package/Shared/Shared.vcxitems.filters +2 -1
- package/codegen/NativeAnimatedModuleSpec.g.h +2 -0
- package/codegen/NativeAnimatedTurboModuleSpec.g.h +2 -0
- package/codegen/NativePerformanceSpec.g.h +14 -0
- package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +151 -127
- package/codegen/NativeSampleTurboModuleSpec.g.h +14 -8
- package/codegen/react/components/rnwcore/EventEmitters.cpp +48 -48
- package/codegen/rnwcoreJSI-generated.cpp +159 -129
- package/codegen/rnwcoreJSI.h +534 -408
- package/index.js +51 -331
- package/index.windows.js +70 -352
- package/interface.js +0 -4
- package/jest/resolver.js +31 -0
- package/jest/setup.js +6 -2
- package/package.json +29 -28
- package/src/private/animated/NativeAnimatedHelper.js +21 -8
- package/src/private/animated/createAnimatedPropsHook.js +11 -16
- package/src/private/animated/createAnimatedPropsMemoHook.js +1 -2
- package/src/private/components/{SafeAreaView_INTERNAL_DO_NOT_USE.js → safeareaview/SafeAreaView_INTERNAL_DO_NOT_USE.js} +6 -6
- package/src/private/components/{HScrollViewNativeComponents.js → scrollview/HScrollViewNativeComponents.js} +8 -8
- package/src/private/components/scrollview/VScrollViewNativeComponents.js +25 -0
- package/src/private/{devmenu → devsupport/devmenu}/DevMenu.js +1 -1
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/BorderBox.js +3 -3
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/BoxInspector.js +6 -5
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/ElementBox.js +8 -6
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/ElementProperties.js +11 -10
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/Inspector.js +14 -12
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/InspectorOverlay.js +5 -4
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/InspectorPanel.js +9 -8
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/NetworkOverlay.js +10 -9
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/ReactDevToolsOverlay.js +7 -7
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/StyleInspector.js +7 -6
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/XHRInterceptor.js +2 -2
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/getInspectorDataForViewAtPoint.js +4 -4
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/resolveBoxStyle.js +1 -1
- package/src/private/{inspector → devsupport/devmenu/perfmonitor}/PerformanceOverlay.js +6 -5
- package/src/private/{specs_DEPRECATED/modules → devsupport/devmenu/specs}/NativeDevMenu.js +2 -2
- package/src/private/{debugging → devsupport/rndevtools}/ReactDevToolsSettingsManager.android.js +1 -1
- package/src/private/{debugging → devsupport/rndevtools}/ReactDevToolsSettingsManager.ios.js +1 -1
- package/src/private/{debugging → devsupport/rndevtools}/ReactDevToolsSettingsManager.windows.js +1 -1
- package/src/private/{debugging → devsupport/rndevtools}/setUpFuseboxReactDevToolsDispatcher.js +1 -1
- package/src/private/{fusebox → devsupport/rndevtools}/specs/NativeReactDevToolsRuntimeSettingsModule.js +2 -2
- package/src/private/{specs_DEPRECATED/modules → devsupport/rndevtools/specs}/NativeReactDevToolsSettingsManager.js +2 -2
- package/src/private/featureflags/ReactNativeFeatureFlags.js +82 -80
- package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +12 -1
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +17 -13
- package/src/private/renderer/errorhandling/ErrorHandlers.js +2 -2
- package/src/private/specs_DEPRECATED/modules/NativeAnimatedModule.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeAnimatedTurboModule.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeSampleTurboModule.js +3 -0
- package/src/private/styles/composeStyles.js +12 -5
- package/src/private/types/HostComponent.js +1 -1
- package/src/private/types/HostInstance.js +67 -1
- package/src/private/webapis/dom/nodes/ReactNativeElement.js +2 -5
- package/src/private/webapis/dom/nodes/ReadOnlyNode.js +5 -18
- package/src/private/webapis/dom/nodes/internals/NodeInternals.js +6 -0
- package/src/private/webapis/performance/Performance.js +1 -3
- package/src/private/webapis/performance/PerformanceEntry.js +6 -1
- package/src/private/webapis/performance/internals/RawPerformanceEntry.js +3 -0
- package/src/private/webapis/performance/specs/NativePerformance.js +10 -1
- package/src/types/globals.d.ts +42 -0
- package/stubs/double-conversion/double-conversion.h +3 -1
- package/templates/cpp-app/template.config.js +2 -1
- package/templates/cpp-app/windows/MyApp/MyApp.vcxproj +4 -0
- package/templates/cpp-lib/example/metro.config.js +1 -1
- package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj +4 -0
- package/templates/old/generateWrapper.js +1 -1
- package/templates/old/uwp-cpp-app/template.config.js +1 -1
- package/types/index.d.ts +6 -3
- package/types/public/ReactNativeTypes.d.ts +2 -2
- package/Libraries/BatchedBridge/__mocks__/MessageQueueTestConfig.js +0 -38
- package/Libraries/BatchedBridge/__mocks__/MessageQueueTestModule.js +0 -22
- package/Libraries/Blob/FileReader_new.js +0 -231
- package/Libraries/Blob/FileReader_old.js +0 -186
- package/Libraries/Blob/__mocks__/FileReaderModule.js +0 -20
- package/Libraries/Components/RefreshControl/__mocks__/RefreshControlMock.js +0 -32
- package/Libraries/Core/__mocks__/ErrorUtils.js +0 -33
- package/Libraries/Core/__mocks__/NativeExceptionsManager.js +0 -19
- package/Libraries/EventEmitter/__mocks__/NativeEventEmitter.js +0 -49
- package/Libraries/Events/CustomEvent.js +0 -32
- package/Libraries/Events/EventPolyfill.js +0 -239
- package/Libraries/Lists/__flowtests__/FlatList-flowtest.js +0 -118
- package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +0 -134
- package/Libraries/Network/XMLHttpRequest_new.js +0 -794
- package/Libraries/Network/XMLHttpRequest_old.js +0 -701
- package/Libraries/NewAppScreen/components/DebugInstructions.js +0 -41
- package/Libraries/NewAppScreen/components/DebugInstructions.windows.js +0 -30
- package/Libraries/NewAppScreen/components/Header.js +0 -77
- package/Libraries/NewAppScreen/components/HermesBadge.js +0 -53
- package/Libraries/NewAppScreen/components/LearnMoreLinks.js +0 -148
- package/Libraries/NewAppScreen/components/ReloadInstructions.js +0 -39
- package/Libraries/NewAppScreen/components/ReloadInstructions.windows.js +0 -31
- package/Libraries/NewAppScreen/components/logo.png +0 -0
- package/Libraries/NewAppScreen/index.js +0 -25
- package/Libraries/StyleSheet/__flowtests__/StyleSheet-flowtest.js +0 -58
- package/Libraries/Utilities/__mocks__/BackHandler.js +0 -45
- package/Libraries/Utilities/__mocks__/GlobalPerformanceLogger.js +0 -16
- package/Libraries/Utilities/__mocks__/PixelRatio.js +0 -25
- package/Libraries/WebSocket/WebSocketEvent.js +0 -30
- package/Libraries/WebSocket/WebSocket_new.js +0 -325
- package/Libraries/WebSocket/WebSocket_old.js +0 -297
- package/Libraries/WebSocket/__mocks__/event-target-shim.js +0 -27
- package/Libraries/__flowtests__/ReactNativeTypes-flowtest.js +0 -30
- package/Libraries/vendor/emitter/__flowtests__/EventEmitter-flowtest.js +0 -81
- package/jest/__tests__/setup-test.js +0 -18
- package/src/private/components/VScrollViewNativeComponents.js +0 -25
- package/src/private/utilities/ensureInstance.js +0 -21
- package/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js +0 -267
- package/types/modules/LaunchScreen.d.ts +0 -18
- /package/src/private/{devmenu → devsupport/devmenu}/DevMenu.d.ts +0 -0
- /package/src/private/{debugging → devsupport/rndevtools}/FuseboxSessionObserver.js +0 -0
|
@@ -166,6 +166,24 @@ void UpdateUiaProperty(winrt::IInspectable provider, PROPERTYID propId, bool old
|
|
|
166
166
|
UiaRaiseAutomationPropertyChangedEvent(spProviderSimple.get(), propId, CComVariant(oldValue), CComVariant(newValue));
|
|
167
167
|
}
|
|
168
168
|
|
|
169
|
+
void UpdateUiaProperty(winrt::IInspectable provider, PROPERTYID propId, int oldValue, int newValue) noexcept {
|
|
170
|
+
auto spProviderSimple = provider.try_as<IRawElementProviderSimple>();
|
|
171
|
+
|
|
172
|
+
if (spProviderSimple == nullptr || oldValue == newValue || !WasUiaPropertyAdvised(spProviderSimple, propId))
|
|
173
|
+
return;
|
|
174
|
+
|
|
175
|
+
UiaRaiseAutomationPropertyChangedEvent(spProviderSimple.get(), propId, CComVariant(oldValue), CComVariant(newValue));
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
void UpdateUiaProperty(winrt::IInspectable provider, PROPERTYID propId, long oldValue, long newValue) noexcept {
|
|
179
|
+
auto spProviderSimple = provider.try_as<IRawElementProviderSimple>();
|
|
180
|
+
|
|
181
|
+
if (spProviderSimple == nullptr || oldValue == newValue || !WasUiaPropertyAdvised(spProviderSimple, propId))
|
|
182
|
+
return;
|
|
183
|
+
|
|
184
|
+
UiaRaiseAutomationPropertyChangedEvent(spProviderSimple.get(), propId, CComVariant(oldValue), CComVariant(newValue));
|
|
185
|
+
}
|
|
186
|
+
|
|
169
187
|
void UpdateUiaProperty(
|
|
170
188
|
winrt::IInspectable provider,
|
|
171
189
|
PROPERTYID propId,
|
|
@@ -190,6 +208,29 @@ void UpdateUiaProperty(
|
|
|
190
208
|
UpdateUiaProperty(provider, propId, oldData, newData);
|
|
191
209
|
}
|
|
192
210
|
|
|
211
|
+
void UpdateUiaPropertiesForAnnotation(
|
|
212
|
+
winrt::IInspectable provider,
|
|
213
|
+
const std::optional<facebook::react::AccessibilityAnnotation> &oldAnnotation,
|
|
214
|
+
const std::optional<facebook::react::AccessibilityAnnotation> &newAnnotation) noexcept {
|
|
215
|
+
// if no value fall back to a default value.
|
|
216
|
+
const auto &old_annotation = oldAnnotation.value_or(facebook::react::AccessibilityAnnotation());
|
|
217
|
+
const auto &new_annotation = newAnnotation.value_or(facebook::react::AccessibilityAnnotation());
|
|
218
|
+
|
|
219
|
+
// Update all annotation properties
|
|
220
|
+
UpdateUiaProperty(
|
|
221
|
+
provider,
|
|
222
|
+
UIA_AnnotationAnnotationTypeIdPropertyId,
|
|
223
|
+
GetAnnotationTypeId(old_annotation.typeID),
|
|
224
|
+
GetAnnotationTypeId(new_annotation.typeID));
|
|
225
|
+
|
|
226
|
+
UpdateUiaProperty(
|
|
227
|
+
provider, UIA_AnnotationAnnotationTypeNamePropertyId, old_annotation.typeName, new_annotation.typeName);
|
|
228
|
+
|
|
229
|
+
UpdateUiaProperty(provider, UIA_AnnotationAuthorPropertyId, old_annotation.author, new_annotation.author);
|
|
230
|
+
|
|
231
|
+
UpdateUiaProperty(provider, UIA_AnnotationDateTimePropertyId, old_annotation.dateTime, new_annotation.dateTime);
|
|
232
|
+
}
|
|
233
|
+
|
|
193
234
|
long GetLiveSetting(const std::string &liveRegion) noexcept {
|
|
194
235
|
if (liveRegion == "polite") {
|
|
195
236
|
return LiveSetting::Polite;
|
|
@@ -250,6 +291,190 @@ long GetAnnotationTypeId(const std::string &annotationType) noexcept {
|
|
|
250
291
|
return AnnotationType_Unknown;
|
|
251
292
|
}
|
|
252
293
|
|
|
294
|
+
long GetControlTypeFromString(const std::string &role) noexcept {
|
|
295
|
+
if (role == "adjustable") {
|
|
296
|
+
return UIA_SliderControlTypeId;
|
|
297
|
+
} else if (role == "group" || role == "search" || role == "radiogroup" || role == "timer" || role.empty()) {
|
|
298
|
+
return UIA_GroupControlTypeId;
|
|
299
|
+
} else if (role == "button" || role == "imagebutton" || role == "switch" || role == "togglebutton") {
|
|
300
|
+
return UIA_ButtonControlTypeId;
|
|
301
|
+
} else if (role == "checkbox") {
|
|
302
|
+
return UIA_CheckBoxControlTypeId;
|
|
303
|
+
} else if (role == "combobox") {
|
|
304
|
+
return UIA_ComboBoxControlTypeId;
|
|
305
|
+
} else if (role == "alert" || role == "header" || role == "summary" || role == "text") {
|
|
306
|
+
return UIA_TextControlTypeId;
|
|
307
|
+
} else if (role == "image") {
|
|
308
|
+
return UIA_ImageControlTypeId;
|
|
309
|
+
} else if (role == "keyboardkey") {
|
|
310
|
+
return UIA_CustomControlTypeId;
|
|
311
|
+
} else if (role == "link") {
|
|
312
|
+
return UIA_HyperlinkControlTypeId;
|
|
313
|
+
}
|
|
314
|
+
// list and listitem were added by RNW to better support UIA Control Types
|
|
315
|
+
else if (role == "list") {
|
|
316
|
+
return UIA_ListControlTypeId;
|
|
317
|
+
} else if (role == "listitem") {
|
|
318
|
+
return UIA_ListItemControlTypeId;
|
|
319
|
+
} else if (role == "menu") {
|
|
320
|
+
return UIA_MenuControlTypeId;
|
|
321
|
+
} else if (role == "menubar") {
|
|
322
|
+
return UIA_MenuBarControlTypeId;
|
|
323
|
+
} else if (role == "menuitem") {
|
|
324
|
+
return UIA_MenuItemControlTypeId;
|
|
325
|
+
}
|
|
326
|
+
// If role is "none", remove the element from the control tree
|
|
327
|
+
// and expose it as a plain element would in the raw tree.
|
|
328
|
+
else if (role == "none") {
|
|
329
|
+
return UIA_GroupControlTypeId;
|
|
330
|
+
} else if (role == "progressbar") {
|
|
331
|
+
return UIA_ProgressBarControlTypeId;
|
|
332
|
+
} else if (role == "radio") {
|
|
333
|
+
return UIA_RadioButtonControlTypeId;
|
|
334
|
+
} else if (role == "scrollbar") {
|
|
335
|
+
return UIA_ScrollBarControlTypeId;
|
|
336
|
+
} else if (role == "spinbutton") {
|
|
337
|
+
return UIA_SpinnerControlTypeId;
|
|
338
|
+
} else if (role == "splitbutton") {
|
|
339
|
+
return UIA_SplitButtonControlTypeId;
|
|
340
|
+
} else if (role == "tab") {
|
|
341
|
+
return UIA_TabItemControlTypeId;
|
|
342
|
+
} else if (role == "tablist") {
|
|
343
|
+
return UIA_TabControlTypeId;
|
|
344
|
+
} else if (role == "textinput" || role == "searchbox") {
|
|
345
|
+
return UIA_EditControlTypeId;
|
|
346
|
+
} else if (role == "toolbar") {
|
|
347
|
+
return UIA_ToolBarControlTypeId;
|
|
348
|
+
} else if (role == "tree") {
|
|
349
|
+
return UIA_TreeControlTypeId;
|
|
350
|
+
} else if (role == "treeitem") {
|
|
351
|
+
return UIA_TreeItemControlTypeId;
|
|
352
|
+
} else if (role == "pane") {
|
|
353
|
+
return UIA_PaneControlTypeId;
|
|
354
|
+
}
|
|
355
|
+
assert(false);
|
|
356
|
+
return UIA_GroupControlTypeId;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
long GetControlTypeFromRole(const facebook::react::Role &role) noexcept {
|
|
360
|
+
switch (role) {
|
|
361
|
+
case facebook::react::Role::Alert:
|
|
362
|
+
return UIA_TextControlTypeId;
|
|
363
|
+
case facebook::react::Role::Application:
|
|
364
|
+
return UIA_WindowControlTypeId;
|
|
365
|
+
case facebook::react::Role::Button:
|
|
366
|
+
return UIA_ButtonControlTypeId;
|
|
367
|
+
case facebook::react::Role::Checkbox:
|
|
368
|
+
return UIA_CheckBoxControlTypeId;
|
|
369
|
+
case facebook::react::Role::Columnheader:
|
|
370
|
+
return UIA_HeaderControlTypeId;
|
|
371
|
+
case facebook::react::Role::Combobox:
|
|
372
|
+
return UIA_ComboBoxControlTypeId;
|
|
373
|
+
case facebook::react::Role::Document:
|
|
374
|
+
return UIA_DocumentControlTypeId;
|
|
375
|
+
case facebook::react::Role::Grid:
|
|
376
|
+
return UIA_GroupControlTypeId;
|
|
377
|
+
case facebook::react::Role::Group:
|
|
378
|
+
return UIA_GroupControlTypeId;
|
|
379
|
+
case facebook::react::Role::Heading:
|
|
380
|
+
return UIA_TextControlTypeId;
|
|
381
|
+
case facebook::react::Role::Img:
|
|
382
|
+
return UIA_ImageControlTypeId;
|
|
383
|
+
case facebook::react::Role::Link:
|
|
384
|
+
return UIA_HyperlinkControlTypeId;
|
|
385
|
+
case facebook::react::Role::List:
|
|
386
|
+
return UIA_ListControlTypeId;
|
|
387
|
+
case facebook::react::Role::Listitem:
|
|
388
|
+
return UIA_ListItemControlTypeId;
|
|
389
|
+
case facebook::react::Role::Menu:
|
|
390
|
+
return UIA_MenuControlTypeId;
|
|
391
|
+
case facebook::react::Role::Menubar:
|
|
392
|
+
return UIA_MenuBarControlTypeId;
|
|
393
|
+
case facebook::react::Role::Menuitem:
|
|
394
|
+
return UIA_MenuItemControlTypeId;
|
|
395
|
+
case facebook::react::Role::None:
|
|
396
|
+
return UIA_GroupControlTypeId;
|
|
397
|
+
case facebook::react::Role::Presentation:
|
|
398
|
+
return UIA_GroupControlTypeId;
|
|
399
|
+
case facebook::react::Role::Progressbar:
|
|
400
|
+
return UIA_ProgressBarControlTypeId;
|
|
401
|
+
case facebook::react::Role::Radio:
|
|
402
|
+
return UIA_RadioButtonControlTypeId;
|
|
403
|
+
case facebook::react::Role::Radiogroup:
|
|
404
|
+
return UIA_GroupControlTypeId;
|
|
405
|
+
case facebook::react::Role::Rowgroup:
|
|
406
|
+
return UIA_GroupControlTypeId;
|
|
407
|
+
case facebook::react::Role::Rowheader:
|
|
408
|
+
return UIA_HeaderControlTypeId;
|
|
409
|
+
case facebook::react::Role::Scrollbar:
|
|
410
|
+
return UIA_ScrollBarControlTypeId;
|
|
411
|
+
case facebook::react::Role::Searchbox:
|
|
412
|
+
return UIA_EditControlTypeId;
|
|
413
|
+
case facebook::react::Role::Separator:
|
|
414
|
+
return UIA_SeparatorControlTypeId;
|
|
415
|
+
case facebook::react::Role::Slider:
|
|
416
|
+
return UIA_SliderControlTypeId;
|
|
417
|
+
case facebook::react::Role::Spinbutton:
|
|
418
|
+
return UIA_SpinnerControlTypeId;
|
|
419
|
+
case facebook::react::Role::Status:
|
|
420
|
+
return UIA_StatusBarControlTypeId;
|
|
421
|
+
case facebook::react::Role::Summary:
|
|
422
|
+
return UIA_GroupControlTypeId;
|
|
423
|
+
case facebook::react::Role::Switch:
|
|
424
|
+
return UIA_ButtonControlTypeId;
|
|
425
|
+
case facebook::react::Role::Tab:
|
|
426
|
+
return UIA_TabItemControlTypeId;
|
|
427
|
+
case facebook::react::Role::Table:
|
|
428
|
+
return UIA_TableControlTypeId;
|
|
429
|
+
case facebook::react::Role::Tablist:
|
|
430
|
+
return UIA_TabControlTypeId;
|
|
431
|
+
case facebook::react::Role::Tabpanel:
|
|
432
|
+
return UIA_TabControlTypeId;
|
|
433
|
+
case facebook::react::Role::Timer:
|
|
434
|
+
return UIA_ButtonControlTypeId;
|
|
435
|
+
case facebook::react::Role::Toolbar:
|
|
436
|
+
return UIA_ToolBarControlTypeId;
|
|
437
|
+
case facebook::react::Role::Tooltip:
|
|
438
|
+
return UIA_ToolTipControlTypeId;
|
|
439
|
+
case facebook::react::Role::Tree:
|
|
440
|
+
return UIA_TreeControlTypeId;
|
|
441
|
+
case facebook::react::Role::Treegrid:
|
|
442
|
+
return UIA_TreeControlTypeId;
|
|
443
|
+
case facebook::react::Role::Treeitem:
|
|
444
|
+
return UIA_TreeItemControlTypeId;
|
|
445
|
+
}
|
|
446
|
+
return UIA_GroupControlTypeId;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
long GetHeadingLevel(int headingLevel, const std::string &strRole, const facebook::react::Role &role) noexcept {
|
|
450
|
+
if (strRole != "header" && role != facebook::react::Role::Heading) {
|
|
451
|
+
return HeadingLevel_None;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
switch (headingLevel) {
|
|
455
|
+
case 1:
|
|
456
|
+
return HeadingLevel1;
|
|
457
|
+
case 2:
|
|
458
|
+
return HeadingLevel2;
|
|
459
|
+
case 3:
|
|
460
|
+
return HeadingLevel3;
|
|
461
|
+
case 4:
|
|
462
|
+
return HeadingLevel4;
|
|
463
|
+
case 5:
|
|
464
|
+
return HeadingLevel5;
|
|
465
|
+
case 6:
|
|
466
|
+
return HeadingLevel6;
|
|
467
|
+
case 7:
|
|
468
|
+
return HeadingLevel7;
|
|
469
|
+
case 8:
|
|
470
|
+
return HeadingLevel8;
|
|
471
|
+
case 9:
|
|
472
|
+
return HeadingLevel9;
|
|
473
|
+
default:
|
|
474
|
+
return HeadingLevel_None;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
|
|
253
478
|
bool accessibilityAnnotationHasValue(
|
|
254
479
|
const std::optional<facebook::react::AccessibilityAnnotation> &annotation) noexcept {
|
|
255
480
|
return annotation.has_value() &&
|
|
@@ -29,6 +29,18 @@ void UpdateUiaProperty(
|
|
|
29
29
|
bool oldValue,
|
|
30
30
|
bool newValue) noexcept;
|
|
31
31
|
|
|
32
|
+
void UpdateUiaProperty(
|
|
33
|
+
winrt::Windows::Foundation::IInspectable provider,
|
|
34
|
+
PROPERTYID propId,
|
|
35
|
+
int oldValue,
|
|
36
|
+
int newValue) noexcept;
|
|
37
|
+
|
|
38
|
+
void UpdateUiaProperty(
|
|
39
|
+
winrt::Windows::Foundation::IInspectable provider,
|
|
40
|
+
PROPERTYID propId,
|
|
41
|
+
long oldValue,
|
|
42
|
+
long newValue) noexcept;
|
|
43
|
+
|
|
32
44
|
void UpdateUiaProperty(
|
|
33
45
|
winrt::Windows::Foundation::IInspectable provider,
|
|
34
46
|
PROPERTYID propId,
|
|
@@ -41,10 +53,21 @@ void UpdateUiaProperty(
|
|
|
41
53
|
const std::optional<std::string> &oldValue,
|
|
42
54
|
const std::optional<std::string> &newValue) noexcept;
|
|
43
55
|
|
|
56
|
+
void UpdateUiaPropertiesForAnnotation(
|
|
57
|
+
winrt::Windows::Foundation::IInspectable provider,
|
|
58
|
+
const std::optional<facebook::react::AccessibilityAnnotation> &oldAnnotation,
|
|
59
|
+
const std::optional<facebook::react::AccessibilityAnnotation> &newAnnotation) noexcept;
|
|
60
|
+
|
|
44
61
|
long GetLiveSetting(const std::string &liveRegion) noexcept;
|
|
45
62
|
|
|
46
63
|
long GetAnnotationTypeId(const std::string &annotationType) noexcept;
|
|
47
64
|
|
|
65
|
+
long GetControlTypeFromRole(const facebook::react::Role &role) noexcept;
|
|
66
|
+
|
|
67
|
+
long GetControlTypeFromString(const std::string &role) noexcept;
|
|
68
|
+
|
|
69
|
+
long GetHeadingLevel(int headingLevel, const std::string &strRole, const facebook::react::Role &role) noexcept;
|
|
70
|
+
|
|
48
71
|
bool accessibilityAnnotationHasValue(
|
|
49
72
|
const std::optional<facebook::react::AccessibilityAnnotation> &annotation) noexcept;
|
|
50
73
|
|
|
@@ -66,7 +66,8 @@ FabricUIManager::~FabricUIManager() {
|
|
|
66
66
|
void FabricUIManager::installFabricUIManager() noexcept {
|
|
67
67
|
std::lock_guard<std::mutex> schedulerLock(m_schedulerMutex);
|
|
68
68
|
|
|
69
|
-
facebook::react::ContextContainer
|
|
69
|
+
std::shared_ptr<const facebook::react::ContextContainer> contextContainer =
|
|
70
|
+
std::make_shared<facebook::react::ContextContainer>();
|
|
70
71
|
|
|
71
72
|
// This allows access to our ReactContext from the contextContainer thats passed around the fabric codebase
|
|
72
73
|
contextContainer->insert("MSRN.ReactContext", m_context);
|
|
@@ -97,8 +98,9 @@ void FabricUIManager::installFabricUIManager() noexcept {
|
|
|
97
98
|
};
|
|
98
99
|
|
|
99
100
|
toolbox.contextContainer = contextContainer;
|
|
100
|
-
toolbox.componentRegistryFactory =
|
|
101
|
-
|
|
101
|
+
toolbox.componentRegistryFactory =
|
|
102
|
+
[](facebook::react::EventDispatcher::Weak const &eventDispatcher,
|
|
103
|
+
std::shared_ptr<const facebook::react::ContextContainer> const &contextContainer)
|
|
102
104
|
-> facebook::react::ComponentDescriptorRegistry::Shared {
|
|
103
105
|
auto providerRegistry =
|
|
104
106
|
WindowsComponentDescriptorRegistry::FromProperties(
|
|
@@ -465,6 +467,10 @@ void FabricUIManager::schedulerDidSetIsJSResponder(
|
|
|
465
467
|
bool isJSResponder,
|
|
466
468
|
bool blockNativeResponder) {}
|
|
467
469
|
|
|
470
|
+
void FabricUIManager::schedulerShouldSynchronouslyUpdateViewOnUIThread(
|
|
471
|
+
facebook::react::Tag tag,
|
|
472
|
+
const folly::dynamic &props) {}
|
|
473
|
+
|
|
468
474
|
void FabricUIManager::schedulerDidSendAccessibilityEvent(
|
|
469
475
|
const facebook::react::ShadowView &shadowView,
|
|
470
476
|
std::string const &eventType) {
|
|
@@ -99,6 +99,8 @@ struct FabricUIManager final : public std::enable_shared_from_this<FabricUIManag
|
|
|
99
99
|
facebook::react::ShadowView const &shadowView,
|
|
100
100
|
bool isJSResponder,
|
|
101
101
|
bool blockNativeResponder) override;
|
|
102
|
+
virtual void schedulerShouldSynchronouslyUpdateViewOnUIThread(facebook::react::Tag tag, const folly::dynamic &props)
|
|
103
|
+
override;
|
|
102
104
|
virtual void schedulerDidSendAccessibilityEvent(
|
|
103
105
|
const facebook::react::ShadowView &shadowView,
|
|
104
106
|
std::string const &eventType) override;
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
namespace facebook {
|
|
10
10
|
namespace react {
|
|
11
11
|
|
|
12
|
-
ImageManager::ImageManager(
|
|
12
|
+
ImageManager::ImageManager(std::shared_ptr<const ContextContainer> const &contextContainer) {
|
|
13
13
|
auto reactContext = *contextContainer->find<winrt::Microsoft::ReactNative::ReactContext>("MSRN.ReactContext");
|
|
14
14
|
self_ = new Microsoft::ReactNative::WindowsImageManager(reactContext);
|
|
15
15
|
}
|
|
@@ -64,4 +64,20 @@ void HostPlatformViewEventEmitter::onPressIn(GestureResponderEvent event) const
|
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
void HostPlatformViewEventEmitter::onPressOut(GestureResponderEvent event) const {
|
|
68
|
+
dispatchEvent("pressOut", [event](jsi::Runtime &runtime) {
|
|
69
|
+
auto payload = jsi::Object(runtime);
|
|
70
|
+
auto nativeEvent = jsi::Object(runtime);
|
|
71
|
+
nativeEvent.setProperty(runtime, "target", static_cast<double>(event.target));
|
|
72
|
+
nativeEvent.setProperty(runtime, "pageX", event.pagePoint.x);
|
|
73
|
+
nativeEvent.setProperty(runtime, "pageY", event.pagePoint.y);
|
|
74
|
+
nativeEvent.setProperty(runtime, "locationX", event.offsetPoint.x);
|
|
75
|
+
nativeEvent.setProperty(runtime, "locationY", event.offsetPoint.y);
|
|
76
|
+
nativeEvent.setProperty(runtime, "timestamp", event.timestamp);
|
|
77
|
+
nativeEvent.setProperty(runtime, "identifier", event.identifier);
|
|
78
|
+
payload.setProperty(runtime, "nativeEvent", nativeEvent);
|
|
79
|
+
return payload;
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
67
83
|
} // namespace facebook::react
|
|
@@ -39,6 +39,7 @@ class HostPlatformViewEventEmitter : public BaseViewEventEmitter {
|
|
|
39
39
|
#pragma mark - Touch Events
|
|
40
40
|
|
|
41
41
|
virtual void onPressIn(GestureResponderEvent event) const;
|
|
42
|
+
virtual void onPressOut(GestureResponderEvent event) const;
|
|
42
43
|
};
|
|
43
44
|
|
|
44
45
|
} // namespace facebook::react
|
|
@@ -56,6 +56,14 @@ HostPlatformViewProps::HostPlatformViewProps(
|
|
|
56
56
|
ReactNativeFeatureFlags::enableCppPropsIteratorSetter()
|
|
57
57
|
? sourceProps.accessibilityAccessKey
|
|
58
58
|
: convertRawProp(context, rawProps, "accessibilityAccessKey", sourceProps.accessibilityAccessKey, {})),
|
|
59
|
+
accessibilityDescription(
|
|
60
|
+
ReactNativeFeatureFlags::enableCppPropsIteratorSetter() ? sourceProps.accessibilityDescription
|
|
61
|
+
: convertRawProp(
|
|
62
|
+
context,
|
|
63
|
+
rawProps,
|
|
64
|
+
"accessibilityDescription",
|
|
65
|
+
sourceProps.accessibilityDescription,
|
|
66
|
+
{})),
|
|
59
67
|
accessibilityLiveRegion(
|
|
60
68
|
ReactNativeFeatureFlags::enableCppPropsIteratorSetter() ? sourceProps.accessibilityLiveRegion
|
|
61
69
|
: convertRawProp(
|
|
@@ -104,6 +112,7 @@ void HostPlatformViewProps::setProp(
|
|
|
104
112
|
RAW_SET_PROP_SWITCH_CASE_BASIC(accessibilityLevel);
|
|
105
113
|
RAW_SET_PROP_SWITCH_CASE_BASIC(accessibilityItemType);
|
|
106
114
|
RAW_SET_PROP_SWITCH_CASE_BASIC(accessibilityAccessKey);
|
|
115
|
+
RAW_SET_PROP_SWITCH_CASE_BASIC(accessibilityDescription);
|
|
107
116
|
RAW_SET_PROP_SWITCH_CASE_BASIC(accessibilityLiveRegion);
|
|
108
117
|
RAW_SET_PROP_SWITCH_CASE_BASIC(keyDownEvents);
|
|
109
118
|
RAW_SET_PROP_SWITCH_CASE_BASIC(keyUpEvents);
|
package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.h
CHANGED
|
@@ -32,6 +32,7 @@ class HostPlatformViewProps : public BaseViewProps {
|
|
|
32
32
|
std::optional<AccessibilityAnnotation> accessibilityAnnotation{};
|
|
33
33
|
std::optional<std::string> accessibilityItemType{};
|
|
34
34
|
std::optional<std::string> accessibilityAccessKey{};
|
|
35
|
+
std::optional<std::string> accessibilityDescription{};
|
|
35
36
|
|
|
36
37
|
// std::optional<std::string> overflowAnchor{};
|
|
37
38
|
std::optional<std::string> tooltip{};
|
package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/PlatformColorUtils.cpp
CHANGED
|
@@ -3,11 +3,14 @@
|
|
|
3
3
|
|
|
4
4
|
#include "PlatformColorUtils.h"
|
|
5
5
|
#include <UI.Xaml.Media.h>
|
|
6
|
+
#include <Utils/ThemeUtils.h>
|
|
6
7
|
#include <Utils/ValueUtils.h>
|
|
7
8
|
#ifndef CORE_ABI
|
|
8
9
|
#include <XamlUtils.h>
|
|
9
10
|
#endif // CORE_ABI
|
|
11
|
+
#include <react/renderer/graphics/Color.h>
|
|
10
12
|
#include <winrt/Windows.UI.ViewManagement.h>
|
|
13
|
+
#include "HostPlatformColor.h"
|
|
11
14
|
|
|
12
15
|
namespace facebook::react {
|
|
13
16
|
|
|
@@ -142,4 +145,65 @@ winrt::Windows::UI::Color ResolvePlatformColor(const std::vector<std::string> &s
|
|
|
142
145
|
return {};
|
|
143
146
|
}
|
|
144
147
|
|
|
148
|
+
SharedColor GetTextInputPlaceholderColor(bool isFocused, const winrt::Windows::UI::Color &backgroundColor) {
|
|
149
|
+
// In high contrast mode, always use system GrayText for accessibility
|
|
150
|
+
auto accessibilitySettings{winrt::Windows::UI::ViewManagement::AccessibilitySettings()};
|
|
151
|
+
if (accessibilitySettings.HighContrast()) {
|
|
152
|
+
auto uiSettings{winrt::Windows::UI::ViewManagement::UISettings()};
|
|
153
|
+
auto grayText = uiSettings.UIElementColor(winrt::Windows::UI::ViewManagement::UIElementType::GrayText);
|
|
154
|
+
return hostPlatformColorFromRGBA(grayText.R, grayText.G, grayText.B, grayText.A);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// When no background color provided (transparent), use Windows system default
|
|
158
|
+
if (backgroundColor.A == 0) {
|
|
159
|
+
// Use system WindowText for default placeholder - matches RN Core behavior
|
|
160
|
+
auto uiSettings{winrt::Windows::UI::ViewManagement::UISettings()};
|
|
161
|
+
auto windowText = uiSettings.UIElementColor(winrt::Windows::UI::ViewManagement::UIElementType::WindowText);
|
|
162
|
+
// Make placeholder text lighter (60% opacity)
|
|
163
|
+
return hostPlatformColorFromRGBA(
|
|
164
|
+
windowText.R, windowText.G, windowText.B, static_cast<uint8_t>(windowText.A * 0.6f));
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// Use ITU-R BT.601 luminance calculation to determine background brightness
|
|
168
|
+
bool isLightBackground = Microsoft::ReactNative::IsColorLight(backgroundColor);
|
|
169
|
+
|
|
170
|
+
// Use Windows 11 design system semantic colors for optimal contrast and consistency
|
|
171
|
+
// Light backgrounds: TextFillColorPrimary (darker) for focus, TextFillColorSecondary for unfocused
|
|
172
|
+
// Dark backgrounds: TextFillColorPrimary (lighter) for focus, TextFillColorSecondary for unfocused
|
|
173
|
+
if (isLightBackground) {
|
|
174
|
+
if (isFocused) {
|
|
175
|
+
auto color = ResolvePlatformColor({"TextFillColorPrimary"});
|
|
176
|
+
return hostPlatformColorFromRGBA(color.R, color.G, color.B, color.A);
|
|
177
|
+
} else {
|
|
178
|
+
auto color = ResolvePlatformColor({"TextFillColorSecondary"});
|
|
179
|
+
return hostPlatformColorFromRGBA(color.R, color.G, color.B, color.A);
|
|
180
|
+
}
|
|
181
|
+
} else {
|
|
182
|
+
if (isFocused) {
|
|
183
|
+
auto color = ResolvePlatformColor({"TextFillColorPrimary"});
|
|
184
|
+
return hostPlatformColorFromRGBA(color.R, color.G, color.B, color.A);
|
|
185
|
+
} else {
|
|
186
|
+
auto color = ResolvePlatformColor({"TextFillColorSecondary"});
|
|
187
|
+
return hostPlatformColorFromRGBA(color.R, color.G, color.B, color.A);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
SharedColor GetDefaultTextColor() {
|
|
193
|
+
// In high contrast mode, always use system WindowText for accessibility
|
|
194
|
+
auto accessibilitySettings{winrt::Windows::UI::ViewManagement::AccessibilitySettings()};
|
|
195
|
+
if (accessibilitySettings.HighContrast()) {
|
|
196
|
+
auto uiSettings{winrt::Windows::UI::ViewManagement::UISettings()};
|
|
197
|
+
auto windowText = uiSettings.UIElementColor(winrt::Windows::UI::ViewManagement::UIElementType::WindowText);
|
|
198
|
+
return hostPlatformColorFromRGBA(windowText.R, windowText.G, windowText.B, windowText.A);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// Use Windows 11 design system semantic color TextFillColorPrimary
|
|
202
|
+
// This automatically adapts to light/dark mode themes:
|
|
203
|
+
// - Light mode: rgba(0, 0, 0, 0.894) - nearly black for good contrast
|
|
204
|
+
// - Dark mode: rgba(255, 255, 255, 1.0) - white for readability
|
|
205
|
+
auto color = ResolvePlatformColor({"TextFillColorPrimary"});
|
|
206
|
+
return hostPlatformColorFromRGBA(color.R, color.G, color.B, color.A);
|
|
207
|
+
}
|
|
208
|
+
|
|
145
209
|
} // namespace facebook::react
|
|
@@ -5,8 +5,19 @@
|
|
|
5
5
|
|
|
6
6
|
#include <winrt/Windows.UI.h>
|
|
7
7
|
|
|
8
|
+
// Forward declaration to avoid circular dependencies
|
|
9
|
+
namespace facebook::react {
|
|
10
|
+
class SharedColor;
|
|
11
|
+
}
|
|
12
|
+
|
|
8
13
|
namespace facebook::react {
|
|
9
14
|
|
|
10
15
|
winrt::Windows::UI::Color ResolvePlatformColor(const std::vector<std::string> &semanticItems);
|
|
11
16
|
|
|
17
|
+
// Get appropriate placeholder text color for TextInput based on focus state and background
|
|
18
|
+
SharedColor GetTextInputPlaceholderColor(bool isFocused, const winrt::Windows::UI::Color &backgroundColor = {});
|
|
19
|
+
|
|
20
|
+
// Get default text foreground color for Text component (theme-aware)
|
|
21
|
+
SharedColor GetDefaultTextColor();
|
|
22
|
+
|
|
12
23
|
} // namespace facebook::react
|
|
@@ -66,12 +66,10 @@ class AttachmentInlineObject : public winrt::implements<AttachmentInlineObject,
|
|
|
66
66
|
float m_height;
|
|
67
67
|
};
|
|
68
68
|
|
|
69
|
-
TextLayoutManager::TextLayoutManager(const
|
|
70
|
-
: contextContainer_(contextContainer),
|
|
71
|
-
textMeasureCache_(kSimpleThreadSafeCacheSizeCap),
|
|
72
|
-
lineMeasureCache_(kSimpleThreadSafeCacheSizeCap) {}
|
|
69
|
+
TextLayoutManager::TextLayoutManager(const std::shared_ptr<const ContextContainer> &contextContainer)
|
|
70
|
+
: contextContainer_(contextContainer), textMeasureCache_(kSimpleThreadSafeCacheSizeCap) {}
|
|
73
71
|
|
|
74
|
-
WindowsTextLayoutManager::WindowsTextLayoutManager(const
|
|
72
|
+
WindowsTextLayoutManager::WindowsTextLayoutManager(const std::shared_ptr<const ContextContainer> &contextContainer)
|
|
75
73
|
: TextLayoutManager(contextContainer) {}
|
|
76
74
|
|
|
77
75
|
void WindowsTextLayoutManager::GetTextLayout(
|
|
@@ -160,7 +158,6 @@ void WindowsTextLayoutManager::GetTextLayout(
|
|
|
160
158
|
|
|
161
159
|
// Get text with Object Replacement Characters for attachments
|
|
162
160
|
auto str = GetTransformedText(attributedStringBox);
|
|
163
|
-
|
|
164
161
|
winrt::check_hresult(Microsoft::ReactNative::DWriteFactory()->CreateTextLayout(
|
|
165
162
|
str.c_str(), // The string to be laid out and formatted.
|
|
166
163
|
static_cast<UINT32>(str.size()), // The length of the string.
|
|
@@ -170,6 +167,39 @@ void WindowsTextLayoutManager::GetTextLayout(
|
|
|
170
167
|
spTextLayout.put() // The IDWriteTextLayout interface pointer.
|
|
171
168
|
));
|
|
172
169
|
|
|
170
|
+
// Apply max width constraint and ellipsis trimming to ensure consistency with rendering
|
|
171
|
+
DWRITE_TEXT_METRICS metrics;
|
|
172
|
+
winrt::check_hresult(spTextLayout->GetMetrics(&metrics));
|
|
173
|
+
|
|
174
|
+
if (metrics.width > size.width) {
|
|
175
|
+
spTextLayout->SetMaxWidth(size.width);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// Apply DWRITE_TRIMMING for ellipsizeMode
|
|
179
|
+
DWRITE_TRIMMING trimming = {};
|
|
180
|
+
winrt::com_ptr<IDWriteInlineObject> ellipsisSign;
|
|
181
|
+
|
|
182
|
+
switch (paragraphAttributes.ellipsizeMode) {
|
|
183
|
+
case facebook::react::EllipsizeMode::Tail:
|
|
184
|
+
trimming.granularity = DWRITE_TRIMMING_GRANULARITY_CHARACTER;
|
|
185
|
+
break;
|
|
186
|
+
case facebook::react::EllipsizeMode::Clip:
|
|
187
|
+
trimming.granularity = DWRITE_TRIMMING_GRANULARITY_NONE;
|
|
188
|
+
break;
|
|
189
|
+
default:
|
|
190
|
+
trimming.granularity = DWRITE_TRIMMING_GRANULARITY_CHARACTER; // Default to tail behavior
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Use DWriteFactory to create the ellipsis trimming sign
|
|
195
|
+
if (trimming.granularity != DWRITE_TRIMMING_GRANULARITY_NONE) {
|
|
196
|
+
auto dwriteFactory = Microsoft::ReactNative::DWriteFactory();
|
|
197
|
+
HRESULT hr = dwriteFactory->CreateEllipsisTrimmingSign(spTextLayout.get(), ellipsisSign.put());
|
|
198
|
+
if (SUCCEEDED(hr)) {
|
|
199
|
+
spTextLayout->SetTrimming(&trimming, ellipsisSign.get());
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
173
203
|
// Calculate positions for attachments and set inline objects
|
|
174
204
|
unsigned int position = 0;
|
|
175
205
|
for (const auto &fragment : fragments) {
|
|
@@ -408,96 +438,6 @@ Microsoft::ReactNative::TextTransform ConvertTextTransform(std::optional<TextTra
|
|
|
408
438
|
return Microsoft::ReactNative::TextTransform::Undefined;
|
|
409
439
|
}
|
|
410
440
|
|
|
411
|
-
LinesMeasurements TextLayoutManager::measureLines(
|
|
412
|
-
const AttributedStringBox &attributedStringBox,
|
|
413
|
-
const ParagraphAttributes ¶graphAttributes,
|
|
414
|
-
const Size &size) const {
|
|
415
|
-
LinesMeasurements lineMeasurements{};
|
|
416
|
-
|
|
417
|
-
winrt::com_ptr<IDWriteTextLayout> spTextLayout;
|
|
418
|
-
TextMeasurement::Attachments attachments;
|
|
419
|
-
WindowsTextLayoutManager::GetTextLayout(attributedStringBox, paragraphAttributes, size, spTextLayout, attachments);
|
|
420
|
-
|
|
421
|
-
if (spTextLayout) {
|
|
422
|
-
std::vector<DWRITE_LINE_METRICS> lineMetrics;
|
|
423
|
-
uint32_t actualLineCount;
|
|
424
|
-
spTextLayout->GetLineMetrics(nullptr, 0, &actualLineCount);
|
|
425
|
-
lineMetrics.resize(static_cast<size_t>(actualLineCount));
|
|
426
|
-
winrt::check_hresult(spTextLayout->GetLineMetrics(lineMetrics.data(), actualLineCount, &actualLineCount));
|
|
427
|
-
uint32_t startRange = 0;
|
|
428
|
-
const auto count = (paragraphAttributes.maximumNumberOfLines > 0)
|
|
429
|
-
? std::min(static_cast<uint32_t>(paragraphAttributes.maximumNumberOfLines), actualLineCount)
|
|
430
|
-
: actualLineCount;
|
|
431
|
-
for (uint32_t i = 0; i < count; ++i) {
|
|
432
|
-
UINT32 actualHitTestCount = 0;
|
|
433
|
-
spTextLayout->HitTestTextRange(
|
|
434
|
-
startRange,
|
|
435
|
-
lineMetrics[i].length,
|
|
436
|
-
0, // x
|
|
437
|
-
0, // y
|
|
438
|
-
NULL,
|
|
439
|
-
0, // metrics count
|
|
440
|
-
&actualHitTestCount);
|
|
441
|
-
|
|
442
|
-
// Allocate enough room to return all hit-test metrics.
|
|
443
|
-
std::vector<DWRITE_HIT_TEST_METRICS> hitTestMetrics(actualHitTestCount);
|
|
444
|
-
spTextLayout->HitTestTextRange(
|
|
445
|
-
startRange,
|
|
446
|
-
lineMetrics[i].length,
|
|
447
|
-
0, // x
|
|
448
|
-
0, // y
|
|
449
|
-
&hitTestMetrics[0],
|
|
450
|
-
static_cast<UINT32>(hitTestMetrics.size()),
|
|
451
|
-
&actualHitTestCount);
|
|
452
|
-
|
|
453
|
-
float width = 0;
|
|
454
|
-
for (auto tm : hitTestMetrics) {
|
|
455
|
-
width += tm.width;
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
std::string str;
|
|
459
|
-
const auto &attributedString = attributedStringBox.getValue();
|
|
460
|
-
for (const auto &fragment : attributedString.getFragments()) {
|
|
461
|
-
str = str +
|
|
462
|
-
winrt::to_string(Microsoft::ReactNative::TransformableText::TransformText(
|
|
463
|
-
winrt::hstring{Microsoft::Common::Unicode::Utf8ToUtf16(fragment.string)},
|
|
464
|
-
ConvertTextTransform(fragment.textAttributes.textTransform)));
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
lineMeasurements.emplace_back(LineMeasurement(
|
|
468
|
-
str.substr(startRange, lineMetrics[i].length),
|
|
469
|
-
{{hitTestMetrics[0].left, hitTestMetrics[0].top}, // origin
|
|
470
|
-
{width, lineMetrics[i].height}},
|
|
471
|
-
0.0f, // TODO descender
|
|
472
|
-
0.0f, // TODO: capHeight
|
|
473
|
-
0.0f, // TODO ascender
|
|
474
|
-
0.0f // TODO: xHeight
|
|
475
|
-
));
|
|
476
|
-
|
|
477
|
-
startRange += lineMetrics[i].length;
|
|
478
|
-
}
|
|
479
|
-
}
|
|
480
|
-
|
|
481
|
-
return lineMeasurements;
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
Float TextLayoutManager::baseline(
|
|
485
|
-
const AttributedStringBox &attributedStringBox,
|
|
486
|
-
const ParagraphAttributes ¶graphAttributes,
|
|
487
|
-
const Size &size) const {
|
|
488
|
-
winrt::com_ptr<IDWriteTextLayout> spTextLayout;
|
|
489
|
-
TextMeasurement::Attachments attachments;
|
|
490
|
-
WindowsTextLayoutManager::GetTextLayout(attributedStringBox, paragraphAttributes, size, spTextLayout, attachments);
|
|
491
|
-
if (!spTextLayout) {
|
|
492
|
-
return 0;
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
DWRITE_TEXT_METRICS metrics;
|
|
496
|
-
winrt::check_hresult(spTextLayout->GetMetrics(&metrics));
|
|
497
|
-
return metrics.height *
|
|
498
|
-
0.8f; // https://learn.microsoft.com/en-us/windows/win32/api/dwrite/nf-dwrite-idwritetextformat-getlinespacing
|
|
499
|
-
}
|
|
500
|
-
|
|
501
441
|
winrt::hstring WindowsTextLayoutManager::GetTransformedText(const AttributedStringBox &attributedStringBox) {
|
|
502
442
|
winrt::hstring result{};
|
|
503
443
|
const auto &attributedString = attributedStringBox.getValue();
|