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
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
#include "pch.h"
|
|
3
3
|
#include "CompositionContextHelper.h"
|
|
4
|
+
#include <algorithm>
|
|
4
5
|
#if __has_include("Composition.Experimental.SystemCompositionContextHelper.g.cpp")
|
|
5
6
|
#include "Composition.Experimental.SystemCompositionContextHelper.g.cpp"
|
|
6
7
|
#endif
|
|
@@ -74,6 +75,10 @@ struct CompositionTypeTraits<WindowsTypeTag> {
|
|
|
74
75
|
winrt::Windows::UI::Composition::Interactions::InteractionTrackerRequestIgnoredArgs;
|
|
75
76
|
using InteractionTrackerValuesChangedArgs =
|
|
76
77
|
winrt::Windows::UI::Composition::Interactions::InteractionTrackerValuesChangedArgs;
|
|
78
|
+
using InteractionTrackerInertiaRestingValue =
|
|
79
|
+
winrt::Windows::UI::Composition::Interactions::InteractionTrackerInertiaRestingValue;
|
|
80
|
+
using InteractionTrackerInertiaModifier =
|
|
81
|
+
winrt::Windows::UI::Composition::Interactions::InteractionTrackerInertiaModifier;
|
|
77
82
|
using ScalarKeyFrameAnimation = winrt::Windows::UI::Composition::ScalarKeyFrameAnimation;
|
|
78
83
|
using ShapeVisual = winrt::Windows::UI::Composition::ShapeVisual;
|
|
79
84
|
using SpriteVisual = winrt::Windows::UI::Composition::SpriteVisual;
|
|
@@ -143,6 +148,10 @@ struct CompositionTypeTraits<MicrosoftTypeTag> {
|
|
|
143
148
|
winrt::Microsoft::UI::Composition::Interactions::InteractionTrackerRequestIgnoredArgs;
|
|
144
149
|
using InteractionTrackerValuesChangedArgs =
|
|
145
150
|
winrt::Microsoft::UI::Composition::Interactions::InteractionTrackerValuesChangedArgs;
|
|
151
|
+
using InteractionTrackerInertiaRestingValue =
|
|
152
|
+
winrt::Microsoft::UI::Composition::Interactions::InteractionTrackerInertiaRestingValue;
|
|
153
|
+
using InteractionTrackerInertiaModifier =
|
|
154
|
+
winrt::Microsoft::UI::Composition::Interactions::InteractionTrackerInertiaModifier;
|
|
146
155
|
using ScalarKeyFrameAnimation = winrt::Microsoft::UI::Composition::ScalarKeyFrameAnimation;
|
|
147
156
|
using ShapeVisual = winrt::Microsoft::UI::Composition::ShapeVisual;
|
|
148
157
|
using SpriteVisual = winrt::Microsoft::UI::Composition::SpriteVisual;
|
|
@@ -700,8 +709,23 @@ struct CompScrollerVisual : winrt::implements<
|
|
|
700
709
|
void IdleStateEntered(
|
|
701
710
|
typename TTypeRedirects::InteractionTracker sender,
|
|
702
711
|
typename TTypeRedirects::InteractionTrackerIdleStateEnteredArgs args) noexcept {
|
|
712
|
+
// If we were in inertia and are now idle, momentum has ended
|
|
713
|
+
if (m_outer->m_inertia) {
|
|
714
|
+
m_outer->FireScrollMomentumEnd({sender.Position().x, sender.Position().y});
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
// If we were interacting but never entered inertia (Interacting -> Idle),
|
|
718
|
+
// and the interaction was user-driven (requestId == 0), fire end-drag here.
|
|
719
|
+
// Note: if the interactionRequestId was non-zero it was caused by a Try* call
|
|
720
|
+
// (programmatic), so we should not fire onScrollEndDrag.
|
|
721
|
+
if (m_outer->m_interacting && args.RequestId() == 0) {
|
|
722
|
+
m_outer->FireScrollEndDrag({sender.Position().x, sender.Position().y});
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
// Clear state flags
|
|
703
726
|
m_outer->m_custom = false;
|
|
704
727
|
m_outer->m_inertia = false;
|
|
728
|
+
m_outer->m_interacting = false;
|
|
705
729
|
}
|
|
706
730
|
void InertiaStateEntered(
|
|
707
731
|
typename TTypeRedirects::InteractionTracker sender,
|
|
@@ -709,15 +733,26 @@ struct CompScrollerVisual : winrt::implements<
|
|
|
709
733
|
m_outer->m_custom = false;
|
|
710
734
|
m_outer->m_inertia = true;
|
|
711
735
|
m_outer->m_currentPosition = args.NaturalRestingPosition();
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
736
|
+
|
|
737
|
+
if (!m_outer->m_interacting && args.RequestId() == 0) {
|
|
738
|
+
m_outer->FireScrollBeginDrag({args.NaturalRestingPosition().x, args.NaturalRestingPosition().y});
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
// If interaction was user-driven (requestId == 0),
|
|
742
|
+
// fire ScrollEndDrag here (Interacting -> Inertia caused by user lift).
|
|
743
|
+
if (m_outer->m_interacting && args.RequestId() == 0) {
|
|
744
|
+
m_outer->FireScrollEndDrag({args.NaturalRestingPosition().x, args.NaturalRestingPosition().y});
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
// Fire momentum scroll begin when we enter inertia (user or programmatic)
|
|
748
|
+
m_outer->FireScrollMomentumBegin({args.NaturalRestingPosition().x, args.NaturalRestingPosition().y});
|
|
717
749
|
}
|
|
718
750
|
void InteractingStateEntered(
|
|
719
751
|
typename TTypeRedirects::InteractionTracker sender,
|
|
720
752
|
typename TTypeRedirects::InteractionTrackerInteractingStateEnteredArgs args) noexcept {
|
|
753
|
+
// Mark that we're now interacting and remember the requestId (user manipulations => 0)
|
|
754
|
+
m_outer->m_interacting = true;
|
|
755
|
+
|
|
721
756
|
// Fire when the user starts dragging the object
|
|
722
757
|
m_outer->FireScrollBeginDrag({sender.Position().x, sender.Position().y});
|
|
723
758
|
}
|
|
@@ -727,6 +762,10 @@ struct CompScrollerVisual : winrt::implements<
|
|
|
727
762
|
void ValuesChanged(
|
|
728
763
|
typename TTypeRedirects::InteractionTracker sender,
|
|
729
764
|
typename TTypeRedirects::InteractionTrackerValuesChangedArgs args) noexcept {
|
|
765
|
+
if (!m_outer->m_interacting && args.RequestId() == 0) {
|
|
766
|
+
m_outer->FireScrollBeginDrag({args.Position().x, args.Position().y});
|
|
767
|
+
}
|
|
768
|
+
m_outer->m_interacting = true;
|
|
730
769
|
m_outer->m_currentPosition = args.Position();
|
|
731
770
|
m_outer->FireScrollPositionChanged({args.Position().x, args.Position().y});
|
|
732
771
|
}
|
|
@@ -782,9 +821,13 @@ struct CompScrollerVisual : winrt::implements<
|
|
|
782
821
|
}
|
|
783
822
|
|
|
784
823
|
void Horizontal(bool value) noexcept {
|
|
824
|
+
bool previousHorizontal = m_horizontal;
|
|
785
825
|
m_horizontal = value;
|
|
786
826
|
|
|
787
|
-
|
|
827
|
+
if (previousHorizontal != m_horizontal) {
|
|
828
|
+
UpdateInteractionModes();
|
|
829
|
+
ConfigureSnapInertiaModifiers(); // Reconfigure modifiers when direction changes
|
|
830
|
+
}
|
|
788
831
|
}
|
|
789
832
|
|
|
790
833
|
void UpdateInteractionModes() noexcept {
|
|
@@ -855,6 +898,21 @@ struct CompScrollerVisual : winrt::implements<
|
|
|
855
898
|
m_interactionTracker.MinScale(minimumZoomScale);
|
|
856
899
|
}
|
|
857
900
|
|
|
901
|
+
void SetSnapPoints(
|
|
902
|
+
bool snapToStart,
|
|
903
|
+
bool snapToEnd,
|
|
904
|
+
winrt::Windows::Foundation::Collections::IVectorView<float> const &offsets) noexcept {
|
|
905
|
+
m_snapToStart = snapToStart;
|
|
906
|
+
m_snapToEnd = snapToEnd;
|
|
907
|
+
m_snapToOffsets.clear();
|
|
908
|
+
if (offsets) {
|
|
909
|
+
for (auto const &offset : offsets) {
|
|
910
|
+
m_snapToOffsets.push_back(offset);
|
|
911
|
+
}
|
|
912
|
+
}
|
|
913
|
+
ConfigureSnapInertiaModifiers();
|
|
914
|
+
}
|
|
915
|
+
|
|
858
916
|
void Opacity(float opacity) noexcept {
|
|
859
917
|
m_visual.Opacity(opacity);
|
|
860
918
|
}
|
|
@@ -953,6 +1011,20 @@ struct CompScrollerVisual : winrt::implements<
|
|
|
953
1011
|
return m_scrollEndDragEvent.add(handler);
|
|
954
1012
|
}
|
|
955
1013
|
|
|
1014
|
+
winrt::event_token ScrollMomentumBegin(
|
|
1015
|
+
winrt::Windows::Foundation::EventHandler<
|
|
1016
|
+
winrt::Microsoft::ReactNative::Composition::Experimental::IScrollPositionChangedArgs> const
|
|
1017
|
+
&handler) noexcept {
|
|
1018
|
+
return m_scrollMomentumBeginEvent.add(handler);
|
|
1019
|
+
}
|
|
1020
|
+
|
|
1021
|
+
winrt::event_token ScrollMomentumEnd(
|
|
1022
|
+
winrt::Windows::Foundation::EventHandler<
|
|
1023
|
+
winrt::Microsoft::ReactNative::Composition::Experimental::IScrollPositionChangedArgs> const
|
|
1024
|
+
&handler) noexcept {
|
|
1025
|
+
return m_scrollMomentumEndEvent.add(handler);
|
|
1026
|
+
}
|
|
1027
|
+
|
|
956
1028
|
void ScrollPositionChanged(winrt::event_token const &token) noexcept {
|
|
957
1029
|
m_scrollPositionChangedEvent.remove(token);
|
|
958
1030
|
}
|
|
@@ -965,6 +1037,14 @@ struct CompScrollerVisual : winrt::implements<
|
|
|
965
1037
|
m_scrollEndDragEvent.remove(token);
|
|
966
1038
|
}
|
|
967
1039
|
|
|
1040
|
+
void ScrollMomentumBegin(winrt::event_token const &token) noexcept {
|
|
1041
|
+
m_scrollMomentumBeginEvent.remove(token);
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1044
|
+
void ScrollMomentumEnd(winrt::event_token const &token) noexcept {
|
|
1045
|
+
m_scrollMomentumEndEvent.remove(token);
|
|
1046
|
+
}
|
|
1047
|
+
|
|
968
1048
|
void ContentSize(winrt::Windows::Foundation::Numerics::float2 const &size) noexcept {
|
|
969
1049
|
m_contentSize = size;
|
|
970
1050
|
m_contentVisual.Size(size);
|
|
@@ -1043,6 +1123,14 @@ struct CompScrollerVisual : winrt::implements<
|
|
|
1043
1123
|
m_scrollEndDragEvent(*this, winrt::make<CompScrollPositionChangedArgs>(position));
|
|
1044
1124
|
}
|
|
1045
1125
|
|
|
1126
|
+
void FireScrollMomentumBegin(winrt::Windows::Foundation::Numerics::float2 position) noexcept {
|
|
1127
|
+
m_scrollMomentumBeginEvent(*this, winrt::make<CompScrollPositionChangedArgs>(position));
|
|
1128
|
+
}
|
|
1129
|
+
|
|
1130
|
+
void FireScrollMomentumEnd(winrt::Windows::Foundation::Numerics::float2 position) noexcept {
|
|
1131
|
+
m_scrollMomentumEndEvent(*this, winrt::make<CompScrollPositionChangedArgs>(position));
|
|
1132
|
+
}
|
|
1133
|
+
|
|
1046
1134
|
void UpdateMaxPosition() noexcept {
|
|
1047
1135
|
m_interactionTracker.MaxPosition(
|
|
1048
1136
|
{std::max<float>(m_contentSize.x - m_visualSize.x, 0),
|
|
@@ -1050,10 +1138,158 @@ struct CompScrollerVisual : winrt::implements<
|
|
|
1050
1138
|
0});
|
|
1051
1139
|
}
|
|
1052
1140
|
|
|
1141
|
+
void ConfigureSnapInertiaModifiers() noexcept {
|
|
1142
|
+
if (!m_visual || !m_contentVisual || !m_interactionTracker) {
|
|
1143
|
+
return;
|
|
1144
|
+
}
|
|
1145
|
+
|
|
1146
|
+
auto visualSize = m_visual.Size();
|
|
1147
|
+
auto contentSize = m_contentVisual.Size();
|
|
1148
|
+
if (visualSize.x <= 0 || visualSize.y <= 0 || contentSize.x <= 0 || contentSize.y <= 0) {
|
|
1149
|
+
OutputDebugStringW(L"Invalid visual/content size\n");
|
|
1150
|
+
return;
|
|
1151
|
+
}
|
|
1152
|
+
|
|
1153
|
+
auto compositor = m_interactionTracker.Compositor();
|
|
1154
|
+
|
|
1155
|
+
// Collect and deduplicate all snap positions
|
|
1156
|
+
std::vector<float> snapPositions;
|
|
1157
|
+
|
|
1158
|
+
if (m_snapToStart) {
|
|
1159
|
+
snapPositions.push_back(0.0f);
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1162
|
+
snapPositions.insert(snapPositions.end(), m_snapToOffsets.begin(), m_snapToOffsets.end());
|
|
1163
|
+
std::sort(snapPositions.begin(), snapPositions.end());
|
|
1164
|
+
snapPositions.erase(std::unique(snapPositions.begin(), snapPositions.end()), snapPositions.end());
|
|
1165
|
+
|
|
1166
|
+
std::vector<typename TTypeRedirects::InteractionTrackerInertiaRestingValue> restingValues;
|
|
1167
|
+
|
|
1168
|
+
for (size_t i = 0; i < snapPositions.size(); ++i) {
|
|
1169
|
+
const auto position = snapPositions[i];
|
|
1170
|
+
auto restingValue = TTypeRedirects::InteractionTrackerInertiaRestingValue::Create(compositor);
|
|
1171
|
+
|
|
1172
|
+
winrt::hstring axisComponent = m_horizontal ? L"X" : L"Y";
|
|
1173
|
+
winrt::hstring conditionExpr;
|
|
1174
|
+
|
|
1175
|
+
// Build condition expression based on whether there's one or multiple snap points
|
|
1176
|
+
if (snapPositions.size() == 1) {
|
|
1177
|
+
conditionExpr = L"abs(this.Target.NaturalRestingPosition." + axisComponent + L" - snap) < 50";
|
|
1178
|
+
} else {
|
|
1179
|
+
if (i == 0) {
|
|
1180
|
+
conditionExpr = L"this.Target.NaturalRestingPosition." + axisComponent + L" < midpoint";
|
|
1181
|
+
} else if (i == snapPositions.size() - 1) {
|
|
1182
|
+
conditionExpr = L"this.Target.NaturalRestingPosition." + axisComponent + L" >= midpoint";
|
|
1183
|
+
} else {
|
|
1184
|
+
conditionExpr = L"this.Target.NaturalRestingPosition." + axisComponent +
|
|
1185
|
+
L" >= prevMidpoint && this.Target.NaturalRestingPosition." + axisComponent + L" < nextMidpoint";
|
|
1186
|
+
}
|
|
1187
|
+
}
|
|
1188
|
+
|
|
1189
|
+
auto conditionAnim = compositor.CreateExpressionAnimation();
|
|
1190
|
+
conditionAnim.Expression(conditionExpr);
|
|
1191
|
+
|
|
1192
|
+
if (snapPositions.size() == 1) {
|
|
1193
|
+
conditionAnim.SetScalarParameter(L"snap", position);
|
|
1194
|
+
} else {
|
|
1195
|
+
// Multiple snap points - use range-based conditions
|
|
1196
|
+
if (i == 0) {
|
|
1197
|
+
const auto nextPosition = snapPositions[i + 1];
|
|
1198
|
+
const auto midpoint = (position + nextPosition) / 2.0f;
|
|
1199
|
+
conditionAnim.SetScalarParameter(L"midpoint", midpoint);
|
|
1200
|
+
} else if (i == snapPositions.size() - 1) {
|
|
1201
|
+
const auto prevPosition = snapPositions[i - 1];
|
|
1202
|
+
const auto midpoint = (prevPosition + position) / 2.0f;
|
|
1203
|
+
conditionAnim.SetScalarParameter(L"midpoint", midpoint);
|
|
1204
|
+
} else {
|
|
1205
|
+
const auto prevPosition = snapPositions[i - 1];
|
|
1206
|
+
const auto nextPosition = snapPositions[i + 1];
|
|
1207
|
+
const auto prevMidpoint = (prevPosition + position) / 2.0f;
|
|
1208
|
+
const auto nextMidpoint = (position + nextPosition) / 2.0f;
|
|
1209
|
+
conditionAnim.SetScalarParameter(L"prevMidpoint", prevMidpoint);
|
|
1210
|
+
conditionAnim.SetScalarParameter(L"nextMidpoint", nextMidpoint);
|
|
1211
|
+
}
|
|
1212
|
+
}
|
|
1213
|
+
|
|
1214
|
+
restingValue.Condition(conditionAnim);
|
|
1215
|
+
|
|
1216
|
+
// Resting value simply snaps to this position
|
|
1217
|
+
auto restingAnim = compositor.CreateExpressionAnimation();
|
|
1218
|
+
restingAnim.Expression(L"snap");
|
|
1219
|
+
restingAnim.SetScalarParameter(L"snap", position);
|
|
1220
|
+
restingValue.RestingValue(restingAnim);
|
|
1221
|
+
|
|
1222
|
+
restingValues.push_back(restingValue);
|
|
1223
|
+
}
|
|
1224
|
+
|
|
1225
|
+
if (m_snapToEnd) {
|
|
1226
|
+
auto endRestingValue = TTypeRedirects::InteractionTrackerInertiaRestingValue::Create(compositor);
|
|
1227
|
+
|
|
1228
|
+
// Create property sets to dynamically compute content - visual size
|
|
1229
|
+
auto contentSizePropertySet = compositor.CreatePropertySet();
|
|
1230
|
+
contentSizePropertySet.InsertVector2(L"Size", m_contentVisual.Size());
|
|
1231
|
+
|
|
1232
|
+
auto visualSizePropertySet = compositor.CreatePropertySet();
|
|
1233
|
+
visualSizePropertySet.InsertVector2(L"Size", m_visual.Size());
|
|
1234
|
+
|
|
1235
|
+
winrt::hstring endPositionExpr = m_horizontal ? L"max(contentSize.Size.x - visualSize.Size.x, 0)"
|
|
1236
|
+
: L"max(contentSize.Size.y - visualSize.Size.y, 0)";
|
|
1237
|
+
|
|
1238
|
+
float prevPosition = snapPositions.empty() ? 0.0f : snapPositions.back();
|
|
1239
|
+
|
|
1240
|
+
winrt::hstring endConditionExpr = m_horizontal
|
|
1241
|
+
? L"this.Target.NaturalRestingPosition.X >= ((max(contentSize.Size.x - visualSize.Size.x, 0) + prevSnap) / 2.0)"
|
|
1242
|
+
: L"this.Target.NaturalRestingPosition.Y >= ((max(contentSize.Size.y - visualSize.Size.y, 0) + prevSnap) / 2.0)";
|
|
1243
|
+
|
|
1244
|
+
auto endCondition = compositor.CreateExpressionAnimation();
|
|
1245
|
+
endCondition.Expression(endConditionExpr);
|
|
1246
|
+
endCondition.SetReferenceParameter(L"contentSize", contentSizePropertySet);
|
|
1247
|
+
endCondition.SetReferenceParameter(L"visualSize", visualSizePropertySet);
|
|
1248
|
+
endCondition.SetScalarParameter(L"prevSnap", prevPosition);
|
|
1249
|
+
|
|
1250
|
+
auto endResting = compositor.CreateExpressionAnimation();
|
|
1251
|
+
endResting.Expression(endPositionExpr);
|
|
1252
|
+
endResting.SetReferenceParameter(L"contentSize", contentSizePropertySet);
|
|
1253
|
+
endResting.SetReferenceParameter(L"visualSize", visualSizePropertySet);
|
|
1254
|
+
|
|
1255
|
+
endRestingValue.Condition(endCondition);
|
|
1256
|
+
endRestingValue.RestingValue(endResting);
|
|
1257
|
+
|
|
1258
|
+
restingValues.push_back(endRestingValue);
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1261
|
+
if (!restingValues.empty()) {
|
|
1262
|
+
auto modifiers = winrt::single_threaded_vector<typename TTypeRedirects::InteractionTrackerInertiaModifier>();
|
|
1263
|
+
for (auto &v : restingValues) {
|
|
1264
|
+
auto modifier = v.as<typename TTypeRedirects::InteractionTrackerInertiaModifier>();
|
|
1265
|
+
if (modifier) {
|
|
1266
|
+
modifiers.Append(modifier);
|
|
1267
|
+
}
|
|
1268
|
+
}
|
|
1269
|
+
|
|
1270
|
+
if (m_horizontal) {
|
|
1271
|
+
m_interactionTracker.ConfigurePositionXInertiaModifiers(modifiers);
|
|
1272
|
+
} else {
|
|
1273
|
+
m_interactionTracker.ConfigurePositionYInertiaModifiers(modifiers);
|
|
1274
|
+
}
|
|
1275
|
+
} else {
|
|
1276
|
+
// Clear inertia modifiers when no snapping is configured
|
|
1277
|
+
if (m_horizontal) {
|
|
1278
|
+
m_interactionTracker.ConfigurePositionXInertiaModifiers({});
|
|
1279
|
+
} else {
|
|
1280
|
+
m_interactionTracker.ConfigurePositionYInertiaModifiers({});
|
|
1281
|
+
}
|
|
1282
|
+
}
|
|
1283
|
+
}
|
|
1284
|
+
|
|
1053
1285
|
bool m_isScrollEnabled{true};
|
|
1054
1286
|
bool m_horizontal{false};
|
|
1287
|
+
bool m_snapToStart{true};
|
|
1288
|
+
bool m_snapToEnd{true};
|
|
1289
|
+
std::vector<float> m_snapToOffsets;
|
|
1055
1290
|
bool m_inertia{false};
|
|
1056
1291
|
bool m_custom{false};
|
|
1292
|
+
bool m_interacting{false};
|
|
1057
1293
|
winrt::Windows::Foundation::Numerics::float3 m_targetPosition;
|
|
1058
1294
|
winrt::Windows::Foundation::Numerics::float3 m_currentPosition;
|
|
1059
1295
|
winrt::Windows::Foundation::Numerics::float2 m_contentSize{0};
|
|
@@ -1067,6 +1303,12 @@ struct CompScrollerVisual : winrt::implements<
|
|
|
1067
1303
|
winrt::event<winrt::Windows::Foundation::EventHandler<
|
|
1068
1304
|
winrt::Microsoft::ReactNative::Composition::Experimental::IScrollPositionChangedArgs>>
|
|
1069
1305
|
m_scrollEndDragEvent;
|
|
1306
|
+
winrt::event<winrt::Windows::Foundation::EventHandler<
|
|
1307
|
+
winrt::Microsoft::ReactNative::Composition::Experimental::IScrollPositionChangedArgs>>
|
|
1308
|
+
m_scrollMomentumBeginEvent;
|
|
1309
|
+
winrt::event<winrt::Windows::Foundation::EventHandler<
|
|
1310
|
+
winrt::Microsoft::ReactNative::Composition::Experimental::IScrollPositionChangedArgs>>
|
|
1311
|
+
m_scrollMomentumEndEvent;
|
|
1070
1312
|
typename TTypeRedirects::SpriteVisual m_visual{nullptr};
|
|
1071
1313
|
typename TTypeRedirects::SpriteVisual m_contentVisual{nullptr};
|
|
1072
1314
|
typename TTypeRedirects::InteractionTracker m_interactionTracker{nullptr};
|
|
@@ -14,6 +14,21 @@
|
|
|
14
14
|
|
|
15
15
|
namespace winrt::Microsoft::ReactNative::implementation {
|
|
16
16
|
|
|
17
|
+
// Helper function to check if any parent has NoHideDescendants
|
|
18
|
+
bool IsHiddenByParent(const winrt::Microsoft::ReactNative::ComponentView &view) {
|
|
19
|
+
auto parent = view.Parent();
|
|
20
|
+
while (parent) {
|
|
21
|
+
auto parentProps = std::static_pointer_cast<const facebook::react::ViewProps>(
|
|
22
|
+
winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(parent)->props());
|
|
23
|
+
if (parentProps &&
|
|
24
|
+
parentProps->importantForAccessibility == facebook::react::ImportantForAccessibility::NoHideDescendants) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
parent = parent.Parent();
|
|
28
|
+
}
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
|
|
17
32
|
CompositionDynamicAutomationProvider::CompositionDynamicAutomationProvider(
|
|
18
33
|
const winrt::Microsoft::ReactNative::Composition::ComponentView &componentView) noexcept
|
|
19
34
|
: m_view{componentView} {
|
|
@@ -298,161 +313,6 @@ HRESULT __stdcall CompositionDynamicAutomationProvider::GetPatternProvider(PATTE
|
|
|
298
313
|
return S_OK;
|
|
299
314
|
}
|
|
300
315
|
|
|
301
|
-
long GetControlTypeFromString(const std::string &role) noexcept {
|
|
302
|
-
if (role == "adjustable") {
|
|
303
|
-
return UIA_SliderControlTypeId;
|
|
304
|
-
} else if (role == "group" || role == "search" || role == "radiogroup" || role == "timer" || role.empty()) {
|
|
305
|
-
return UIA_GroupControlTypeId;
|
|
306
|
-
} else if (role == "button" || role == "imagebutton" || role == "switch" || role == "togglebutton") {
|
|
307
|
-
return UIA_ButtonControlTypeId;
|
|
308
|
-
} else if (role == "checkbox") {
|
|
309
|
-
return UIA_CheckBoxControlTypeId;
|
|
310
|
-
} else if (role == "combobox") {
|
|
311
|
-
return UIA_ComboBoxControlTypeId;
|
|
312
|
-
} else if (role == "alert" || role == "header" || role == "summary" || role == "text") {
|
|
313
|
-
return UIA_TextControlTypeId;
|
|
314
|
-
} else if (role == "image") {
|
|
315
|
-
return UIA_ImageControlTypeId;
|
|
316
|
-
} else if (role == "keyboardkey") {
|
|
317
|
-
return UIA_CustomControlTypeId;
|
|
318
|
-
} else if (role == "link") {
|
|
319
|
-
return UIA_HyperlinkControlTypeId;
|
|
320
|
-
}
|
|
321
|
-
// list and listitem were added by RNW to better support UIA Control Types
|
|
322
|
-
else if (role == "list") {
|
|
323
|
-
return UIA_ListControlTypeId;
|
|
324
|
-
} else if (role == "listitem") {
|
|
325
|
-
return UIA_ListItemControlTypeId;
|
|
326
|
-
} else if (role == "menu") {
|
|
327
|
-
return UIA_MenuControlTypeId;
|
|
328
|
-
} else if (role == "menubar") {
|
|
329
|
-
return UIA_MenuBarControlTypeId;
|
|
330
|
-
} else if (role == "menuitem") {
|
|
331
|
-
return UIA_MenuItemControlTypeId;
|
|
332
|
-
}
|
|
333
|
-
// If role is "none", remove the element from the control tree
|
|
334
|
-
// and expose it as a plain element would in the raw tree.
|
|
335
|
-
else if (role == "none") {
|
|
336
|
-
return UIA_GroupControlTypeId;
|
|
337
|
-
} else if (role == "progressbar") {
|
|
338
|
-
return UIA_ProgressBarControlTypeId;
|
|
339
|
-
} else if (role == "radio") {
|
|
340
|
-
return UIA_RadioButtonControlTypeId;
|
|
341
|
-
} else if (role == "scrollbar") {
|
|
342
|
-
return UIA_ScrollBarControlTypeId;
|
|
343
|
-
} else if (role == "spinbutton") {
|
|
344
|
-
return UIA_SpinnerControlTypeId;
|
|
345
|
-
} else if (role == "splitbutton") {
|
|
346
|
-
return UIA_SplitButtonControlTypeId;
|
|
347
|
-
} else if (role == "tab") {
|
|
348
|
-
return UIA_TabItemControlTypeId;
|
|
349
|
-
} else if (role == "tablist") {
|
|
350
|
-
return UIA_TabControlTypeId;
|
|
351
|
-
} else if (role == "textinput" || role == "searchbox") {
|
|
352
|
-
return UIA_EditControlTypeId;
|
|
353
|
-
} else if (role == "toolbar") {
|
|
354
|
-
return UIA_ToolBarControlTypeId;
|
|
355
|
-
} else if (role == "tree") {
|
|
356
|
-
return UIA_TreeControlTypeId;
|
|
357
|
-
} else if (role == "treeitem") {
|
|
358
|
-
return UIA_TreeItemControlTypeId;
|
|
359
|
-
} else if (role == "pane") {
|
|
360
|
-
return UIA_PaneControlTypeId;
|
|
361
|
-
}
|
|
362
|
-
assert(false);
|
|
363
|
-
return UIA_GroupControlTypeId;
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
long GetControlTypeFromRole(const facebook::react::Role &role) noexcept {
|
|
367
|
-
switch (role) {
|
|
368
|
-
case facebook::react::Role::Alert:
|
|
369
|
-
return UIA_TextControlTypeId;
|
|
370
|
-
case facebook::react::Role::Application:
|
|
371
|
-
return UIA_WindowControlTypeId;
|
|
372
|
-
case facebook::react::Role::Button:
|
|
373
|
-
return UIA_ButtonControlTypeId;
|
|
374
|
-
case facebook::react::Role::Checkbox:
|
|
375
|
-
return UIA_CheckBoxControlTypeId;
|
|
376
|
-
case facebook::react::Role::Columnheader:
|
|
377
|
-
return UIA_HeaderControlTypeId;
|
|
378
|
-
case facebook::react::Role::Combobox:
|
|
379
|
-
return UIA_ComboBoxControlTypeId;
|
|
380
|
-
case facebook::react::Role::Document:
|
|
381
|
-
return UIA_DocumentControlTypeId;
|
|
382
|
-
case facebook::react::Role::Grid:
|
|
383
|
-
return UIA_GroupControlTypeId;
|
|
384
|
-
case facebook::react::Role::Group:
|
|
385
|
-
return UIA_GroupControlTypeId;
|
|
386
|
-
case facebook::react::Role::Heading:
|
|
387
|
-
return UIA_TextControlTypeId;
|
|
388
|
-
case facebook::react::Role::Img:
|
|
389
|
-
return UIA_ImageControlTypeId;
|
|
390
|
-
case facebook::react::Role::Link:
|
|
391
|
-
return UIA_HyperlinkControlTypeId;
|
|
392
|
-
case facebook::react::Role::List:
|
|
393
|
-
return UIA_ListControlTypeId;
|
|
394
|
-
case facebook::react::Role::Listitem:
|
|
395
|
-
return UIA_ListItemControlTypeId;
|
|
396
|
-
case facebook::react::Role::Menu:
|
|
397
|
-
return UIA_MenuControlTypeId;
|
|
398
|
-
case facebook::react::Role::Menubar:
|
|
399
|
-
return UIA_MenuBarControlTypeId;
|
|
400
|
-
case facebook::react::Role::Menuitem:
|
|
401
|
-
return UIA_MenuItemControlTypeId;
|
|
402
|
-
case facebook::react::Role::None:
|
|
403
|
-
return UIA_GroupControlTypeId;
|
|
404
|
-
case facebook::react::Role::Presentation:
|
|
405
|
-
return UIA_GroupControlTypeId;
|
|
406
|
-
case facebook::react::Role::Progressbar:
|
|
407
|
-
return UIA_ProgressBarControlTypeId;
|
|
408
|
-
case facebook::react::Role::Radio:
|
|
409
|
-
return UIA_RadioButtonControlTypeId;
|
|
410
|
-
case facebook::react::Role::Radiogroup:
|
|
411
|
-
return UIA_GroupControlTypeId;
|
|
412
|
-
case facebook::react::Role::Rowgroup:
|
|
413
|
-
return UIA_GroupControlTypeId;
|
|
414
|
-
case facebook::react::Role::Rowheader:
|
|
415
|
-
return UIA_HeaderControlTypeId;
|
|
416
|
-
case facebook::react::Role::Scrollbar:
|
|
417
|
-
return UIA_ScrollBarControlTypeId;
|
|
418
|
-
case facebook::react::Role::Searchbox:
|
|
419
|
-
return UIA_EditControlTypeId;
|
|
420
|
-
case facebook::react::Role::Separator:
|
|
421
|
-
return UIA_SeparatorControlTypeId;
|
|
422
|
-
case facebook::react::Role::Slider:
|
|
423
|
-
return UIA_SliderControlTypeId;
|
|
424
|
-
case facebook::react::Role::Spinbutton:
|
|
425
|
-
return UIA_SpinnerControlTypeId;
|
|
426
|
-
case facebook::react::Role::Status:
|
|
427
|
-
return UIA_StatusBarControlTypeId;
|
|
428
|
-
case facebook::react::Role::Summary:
|
|
429
|
-
return UIA_GroupControlTypeId;
|
|
430
|
-
case facebook::react::Role::Switch:
|
|
431
|
-
return UIA_ButtonControlTypeId;
|
|
432
|
-
case facebook::react::Role::Tab:
|
|
433
|
-
return UIA_TabItemControlTypeId;
|
|
434
|
-
case facebook::react::Role::Table:
|
|
435
|
-
return UIA_TableControlTypeId;
|
|
436
|
-
case facebook::react::Role::Tablist:
|
|
437
|
-
return UIA_TabControlTypeId;
|
|
438
|
-
case facebook::react::Role::Tabpanel:
|
|
439
|
-
return UIA_TabControlTypeId;
|
|
440
|
-
case facebook::react::Role::Timer:
|
|
441
|
-
return UIA_ButtonControlTypeId;
|
|
442
|
-
case facebook::react::Role::Toolbar:
|
|
443
|
-
return UIA_ToolBarControlTypeId;
|
|
444
|
-
case facebook::react::Role::Tooltip:
|
|
445
|
-
return UIA_ToolTipControlTypeId;
|
|
446
|
-
case facebook::react::Role::Tree:
|
|
447
|
-
return UIA_TreeControlTypeId;
|
|
448
|
-
case facebook::react::Role::Treegrid:
|
|
449
|
-
return UIA_TreeControlTypeId;
|
|
450
|
-
case facebook::react::Role::Treeitem:
|
|
451
|
-
return UIA_TreeItemControlTypeId;
|
|
452
|
-
}
|
|
453
|
-
return UIA_GroupControlTypeId;
|
|
454
|
-
}
|
|
455
|
-
|
|
456
316
|
HRESULT __stdcall CompositionDynamicAutomationProvider::GetPropertyValue(PROPERTYID propertyId, VARIANT *pRetVal) {
|
|
457
317
|
if (pRetVal == nullptr)
|
|
458
318
|
return E_POINTER;
|
|
@@ -521,23 +381,43 @@ HRESULT __stdcall CompositionDynamicAutomationProvider::GetPropertyValue(PROPERT
|
|
|
521
381
|
}
|
|
522
382
|
case UIA_IsContentElementPropertyId: {
|
|
523
383
|
pRetVal->vt = VT_BOOL;
|
|
524
|
-
|
|
525
|
-
|
|
384
|
+
// Check if this element or any parent has NoHideDescendants
|
|
385
|
+
bool isHidden =
|
|
386
|
+
props->importantForAccessibility == facebook::react::ImportantForAccessibility::NoHideDescendants ||
|
|
387
|
+
IsHiddenByParent(strongView);
|
|
388
|
+
pRetVal->boolVal = (!isHidden && props->accessible &&
|
|
389
|
+
(props->accessibilityRole != "none" || props->role != facebook::react::Role::None))
|
|
526
390
|
? VARIANT_TRUE
|
|
527
391
|
: VARIANT_FALSE;
|
|
528
392
|
break;
|
|
529
393
|
}
|
|
394
|
+
|
|
530
395
|
case UIA_IsControlElementPropertyId: {
|
|
531
396
|
pRetVal->vt = VT_BOOL;
|
|
532
|
-
|
|
533
|
-
|
|
397
|
+
// Check if this element or any parent has NoHideDescendants
|
|
398
|
+
bool isHidden =
|
|
399
|
+
props->importantForAccessibility == facebook::react::ImportantForAccessibility::NoHideDescendants ||
|
|
400
|
+
IsHiddenByParent(strongView);
|
|
401
|
+
pRetVal->boolVal = (!isHidden && props->accessible &&
|
|
402
|
+
(props->accessibilityRole != "none" || props->role != facebook::react::Role::None))
|
|
534
403
|
? VARIANT_TRUE
|
|
535
404
|
: VARIANT_FALSE;
|
|
536
405
|
break;
|
|
537
406
|
}
|
|
538
407
|
case UIA_IsOffscreenPropertyId: {
|
|
539
408
|
pRetVal->vt = VT_BOOL;
|
|
540
|
-
|
|
409
|
+
|
|
410
|
+
// Check if element is offscreen - consider modal content special case
|
|
411
|
+
bool isOffscreen = (compositionView->getClipState() == ClipState::FullyClipped);
|
|
412
|
+
|
|
413
|
+
// Modal content may appear clipped but is visible in its own window
|
|
414
|
+
if (isOffscreen) {
|
|
415
|
+
if (const auto hwnd = compositionView->GetHwndForParenting()) {
|
|
416
|
+
isOffscreen = !(IsWindowVisible(hwnd) && !IsIconic(hwnd));
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
pRetVal->boolVal = isOffscreen ? VARIANT_TRUE : VARIANT_FALSE;
|
|
541
421
|
break;
|
|
542
422
|
}
|
|
543
423
|
case UIA_HelpTextPropertyId: {
|
|
@@ -588,6 +468,17 @@ HRESULT __stdcall CompositionDynamicAutomationProvider::GetPropertyValue(PROPERT
|
|
|
588
468
|
pRetVal->bstrVal = SysAllocString(itemtype.c_str());
|
|
589
469
|
break;
|
|
590
470
|
}
|
|
471
|
+
case UIA_FullDescriptionPropertyId: {
|
|
472
|
+
pRetVal->vt = VT_BSTR;
|
|
473
|
+
auto desc = ::Microsoft::Common::Unicode::Utf8ToUtf16(props->accessibilityDescription.value_or(""));
|
|
474
|
+
pRetVal->bstrVal = SysAllocString(desc.c_str());
|
|
475
|
+
break;
|
|
476
|
+
}
|
|
477
|
+
case UIA_HeadingLevelPropertyId: {
|
|
478
|
+
pRetVal->vt = VT_I4;
|
|
479
|
+
pRetVal->lVal = GetHeadingLevel(props->accessibilityLevel, props->accessibilityRole, props->role);
|
|
480
|
+
break;
|
|
481
|
+
}
|
|
591
482
|
}
|
|
592
483
|
return hr;
|
|
593
484
|
}
|
|
@@ -979,7 +870,9 @@ HRESULT __stdcall CompositionDynamicAutomationProvider::Expand() {
|
|
|
979
870
|
|
|
980
871
|
if (!strongView)
|
|
981
872
|
return UIA_E_ELEMENTNOTAVAILABLE;
|
|
873
|
+
|
|
982
874
|
DispatchAccessibilityAction(m_view, "expand");
|
|
875
|
+
|
|
983
876
|
return S_OK;
|
|
984
877
|
}
|
|
985
878
|
|
|
@@ -988,7 +881,9 @@ HRESULT __stdcall CompositionDynamicAutomationProvider::Collapse() {
|
|
|
988
881
|
|
|
989
882
|
if (!strongView)
|
|
990
883
|
return UIA_E_ELEMENTNOTAVAILABLE;
|
|
884
|
+
|
|
991
885
|
DispatchAccessibilityAction(m_view, "collapse");
|
|
886
|
+
|
|
992
887
|
return S_OK;
|
|
993
888
|
}
|
|
994
889
|
|