react-native-windows 0.79.4 → 0.80.0-preview.2
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 +5 -2
- 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 +8 -0
- package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.cpp +0 -6
- package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.cpp +197 -1
- package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +34 -4
- package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +12 -0
- package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +36 -33
- package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +81 -0
- package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.h +5 -0
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +148 -14
- 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/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/textlayoutmanager/WindowsTextLayoutManager.cpp +36 -96
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/WindowsTextLayoutManager.h +1 -1
- 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.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/React.Cpp.props +4 -0
- package/README.md +2 -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/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/windows/MyApp/MyApp.vcxproj +4 -0
- package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj +4 -0
- 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
|
@@ -8,13 +8,318 @@
|
|
|
8
8
|
* @flow
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import
|
|
11
|
+
import type {EventCallback} from '../../src/private/webapis/dom/events/EventTarget';
|
|
12
|
+
import type {BlobData} from '../Blob/BlobTypes';
|
|
13
|
+
import type {EventSubscription} from '../vendor/emitter/EventEmitter';
|
|
12
14
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
import Event from '../../src/private/webapis/dom/events/Event';
|
|
16
|
+
import {
|
|
17
|
+
getEventHandlerAttribute,
|
|
18
|
+
setEventHandlerAttribute,
|
|
19
|
+
} from '../../src/private/webapis/dom/events/EventHandlerAttributes';
|
|
20
|
+
import EventTarget from '../../src/private/webapis/dom/events/EventTarget';
|
|
21
|
+
import MessageEvent from '../../src/private/webapis/html/events/MessageEvent';
|
|
22
|
+
import CloseEvent from '../../src/private/webapis/websockets/events/CloseEvent';
|
|
23
|
+
import Blob from '../Blob/Blob';
|
|
24
|
+
import BlobManager from '../Blob/BlobManager';
|
|
25
|
+
import NativeEventEmitter from '../EventEmitter/NativeEventEmitter';
|
|
26
|
+
import binaryToBase64 from '../Utilities/binaryToBase64';
|
|
27
|
+
import Platform from '../Utilities/Platform';
|
|
28
|
+
import NativeWebSocketModule from './NativeWebSocketModule';
|
|
29
|
+
import base64 from 'base64-js';
|
|
30
|
+
import invariant from 'invariant';
|
|
16
31
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
32
|
+
type ArrayBufferView =
|
|
33
|
+
| Int8Array
|
|
34
|
+
| Uint8Array
|
|
35
|
+
| Uint8ClampedArray
|
|
36
|
+
| Int16Array
|
|
37
|
+
| Uint16Array
|
|
38
|
+
| Int32Array
|
|
39
|
+
| Uint32Array
|
|
40
|
+
| Float32Array
|
|
41
|
+
| Float64Array
|
|
42
|
+
| DataView;
|
|
43
|
+
|
|
44
|
+
type BinaryType = 'blob' | 'arraybuffer';
|
|
45
|
+
|
|
46
|
+
const CONNECTING = 0;
|
|
47
|
+
const OPEN = 1;
|
|
48
|
+
const CLOSING = 2;
|
|
49
|
+
const CLOSED = 3;
|
|
50
|
+
|
|
51
|
+
const CLOSE_NORMAL = 1000;
|
|
52
|
+
|
|
53
|
+
// Abnormal closure where no code is provided in a control frame
|
|
54
|
+
// https://www.rfc-editor.org/rfc/rfc6455.html#section-7.1.5
|
|
55
|
+
const CLOSE_ABNORMAL = 1006;
|
|
56
|
+
|
|
57
|
+
let nextWebSocketId = 0;
|
|
58
|
+
|
|
59
|
+
type WebSocketEventDefinitions = {
|
|
60
|
+
websocketOpen: [{id: number, protocol: string}],
|
|
61
|
+
websocketClosed: [{id: number, code: number, reason: string}],
|
|
62
|
+
websocketMessage: [
|
|
63
|
+
| {type: 'binary', id: number, data: string}
|
|
64
|
+
| {type: 'text', id: number, data: string}
|
|
65
|
+
| {type: 'blob', id: number, data: BlobData},
|
|
66
|
+
],
|
|
67
|
+
websocketFailed: [{id: number, message: string}],
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Browser-compatible WebSockets implementation.
|
|
72
|
+
*
|
|
73
|
+
* See https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
|
|
74
|
+
* See https://github.com/websockets/ws
|
|
75
|
+
*/
|
|
76
|
+
class WebSocket extends EventTarget {
|
|
77
|
+
static CONNECTING: number = CONNECTING;
|
|
78
|
+
static OPEN: number = OPEN;
|
|
79
|
+
static CLOSING: number = CLOSING;
|
|
80
|
+
static CLOSED: number = CLOSED;
|
|
81
|
+
|
|
82
|
+
CONNECTING: number = CONNECTING;
|
|
83
|
+
OPEN: number = OPEN;
|
|
84
|
+
CLOSING: number = CLOSING;
|
|
85
|
+
CLOSED: number = CLOSED;
|
|
86
|
+
|
|
87
|
+
_socketId: number;
|
|
88
|
+
_eventEmitter: NativeEventEmitter<WebSocketEventDefinitions>;
|
|
89
|
+
_subscriptions: Array<EventSubscription>;
|
|
90
|
+
_binaryType: ?BinaryType;
|
|
91
|
+
|
|
92
|
+
bufferedAmount: number;
|
|
93
|
+
extension: ?string;
|
|
94
|
+
protocol: ?string;
|
|
95
|
+
readyState: number = CONNECTING;
|
|
96
|
+
url: ?string;
|
|
97
|
+
|
|
98
|
+
constructor(
|
|
99
|
+
url: string,
|
|
100
|
+
protocols: ?string | ?Array<string>,
|
|
101
|
+
options: ?{headers?: {origin?: string, ...}, ...},
|
|
102
|
+
) {
|
|
103
|
+
super();
|
|
104
|
+
this.url = url;
|
|
105
|
+
if (typeof protocols === 'string') {
|
|
106
|
+
protocols = [protocols];
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const {headers = {}, ...unrecognized} = options || {};
|
|
110
|
+
|
|
111
|
+
// Preserve deprecated backwards compatibility for the 'origin' option
|
|
112
|
+
// $FlowFixMe[prop-missing]
|
|
113
|
+
if (unrecognized && typeof unrecognized.origin === 'string') {
|
|
114
|
+
console.warn(
|
|
115
|
+
'Specifying `origin` as a WebSocket connection option is deprecated. Include it under `headers` instead.',
|
|
116
|
+
);
|
|
117
|
+
/* $FlowFixMe[prop-missing] (>=0.54.0 site=react_native_fb,react_native_
|
|
118
|
+
* oss) This comment suppresses an error found when Flow v0.54 was
|
|
119
|
+
* deployed. To see the error delete this comment and run Flow. */
|
|
120
|
+
headers.origin = unrecognized.origin;
|
|
121
|
+
/* $FlowFixMe[prop-missing] (>=0.54.0 site=react_native_fb,react_native_
|
|
122
|
+
* oss) This comment suppresses an error found when Flow v0.54 was
|
|
123
|
+
* deployed. To see the error delete this comment and run Flow. */
|
|
124
|
+
delete unrecognized.origin;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Warn about and discard anything else
|
|
128
|
+
if (Object.keys(unrecognized).length > 0) {
|
|
129
|
+
console.warn(
|
|
130
|
+
'Unrecognized WebSocket connection option(s) `' +
|
|
131
|
+
Object.keys(unrecognized).join('`, `') +
|
|
132
|
+
'`. ' +
|
|
133
|
+
'Did you mean to put these under `headers`?',
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (!Array.isArray(protocols)) {
|
|
138
|
+
protocols = null;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
this._eventEmitter = new NativeEventEmitter(
|
|
142
|
+
// T88715063: NativeEventEmitter only used this parameter on iOS. Now it uses it on all platforms, so this code was modified automatically to preserve its behavior
|
|
143
|
+
// If you want to use the native module on other platforms, please remove this condition and test its behavior
|
|
144
|
+
Platform.OS !== 'ios' ? null : NativeWebSocketModule,
|
|
145
|
+
);
|
|
146
|
+
this._socketId = nextWebSocketId++;
|
|
147
|
+
this._registerEvents();
|
|
148
|
+
NativeWebSocketModule.connect(url, protocols, {headers}, this._socketId);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
get binaryType(): ?BinaryType {
|
|
152
|
+
return this._binaryType;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
set binaryType(binaryType: BinaryType): void {
|
|
156
|
+
if (binaryType !== 'blob' && binaryType !== 'arraybuffer') {
|
|
157
|
+
throw new Error("binaryType must be either 'blob' or 'arraybuffer'");
|
|
158
|
+
}
|
|
159
|
+
if (this._binaryType === 'blob' || binaryType === 'blob') {
|
|
160
|
+
invariant(
|
|
161
|
+
BlobManager.isAvailable,
|
|
162
|
+
'Native module BlobModule is required for blob support',
|
|
163
|
+
);
|
|
164
|
+
if (binaryType === 'blob') {
|
|
165
|
+
BlobManager.addWebSocketHandler(this._socketId);
|
|
166
|
+
} else {
|
|
167
|
+
BlobManager.removeWebSocketHandler(this._socketId);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
this._binaryType = binaryType;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
close(code?: number, reason?: string): void {
|
|
174
|
+
if (this.readyState === this.CLOSING || this.readyState === this.CLOSED) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
this.readyState = this.CLOSING;
|
|
179
|
+
this._close(code, reason);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
send(data: string | ArrayBuffer | ArrayBufferView | Blob): void {
|
|
183
|
+
if (this.readyState === this.CONNECTING) {
|
|
184
|
+
throw new Error('INVALID_STATE_ERR');
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
if (data instanceof Blob) {
|
|
188
|
+
invariant(
|
|
189
|
+
BlobManager.isAvailable,
|
|
190
|
+
'Native module BlobModule is required for blob support',
|
|
191
|
+
);
|
|
192
|
+
BlobManager.sendOverSocket(data, this._socketId);
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
if (typeof data === 'string') {
|
|
197
|
+
NativeWebSocketModule.send(data, this._socketId);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
if (data instanceof ArrayBuffer || ArrayBuffer.isView(data)) {
|
|
202
|
+
NativeWebSocketModule.sendBinary(binaryToBase64(data), this._socketId);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
throw new Error('Unsupported data type');
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
ping(): void {
|
|
210
|
+
if (this.readyState === this.CONNECTING) {
|
|
211
|
+
throw new Error('INVALID_STATE_ERR');
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
NativeWebSocketModule.ping(this._socketId);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
_close(code?: number, reason?: string): void {
|
|
218
|
+
// See https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent
|
|
219
|
+
const statusCode = typeof code === 'number' ? code : CLOSE_NORMAL;
|
|
220
|
+
const closeReason = typeof reason === 'string' ? reason : '';
|
|
221
|
+
NativeWebSocketModule.close(statusCode, closeReason, this._socketId);
|
|
222
|
+
|
|
223
|
+
if (BlobManager.isAvailable && this._binaryType === 'blob') {
|
|
224
|
+
BlobManager.removeWebSocketHandler(this._socketId);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
_unregisterEvents(): void {
|
|
229
|
+
this._subscriptions.forEach(e => e.remove());
|
|
230
|
+
this._subscriptions = [];
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
_registerEvents(): void {
|
|
234
|
+
this._subscriptions = [
|
|
235
|
+
this._eventEmitter.addListener('websocketMessage', ev => {
|
|
236
|
+
if (ev.id !== this._socketId) {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
let data: Blob | BlobData | ArrayBuffer | string = ev.data;
|
|
240
|
+
switch (ev.type) {
|
|
241
|
+
case 'binary':
|
|
242
|
+
data = base64.toByteArray(ev.data).buffer;
|
|
243
|
+
break;
|
|
244
|
+
case 'blob':
|
|
245
|
+
data = BlobManager.createFromOptions(ev.data);
|
|
246
|
+
break;
|
|
247
|
+
}
|
|
248
|
+
this.dispatchEvent(new MessageEvent('message', {data}));
|
|
249
|
+
}),
|
|
250
|
+
this._eventEmitter.addListener('websocketOpen', ev => {
|
|
251
|
+
if (ev.id !== this._socketId) {
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
this.readyState = this.OPEN;
|
|
255
|
+
this.protocol = ev.protocol;
|
|
256
|
+
this.dispatchEvent(new Event('open'));
|
|
257
|
+
}),
|
|
258
|
+
this._eventEmitter.addListener('websocketClosed', ev => {
|
|
259
|
+
if (ev.id !== this._socketId) {
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
this.readyState = this.CLOSED;
|
|
263
|
+
this.dispatchEvent(
|
|
264
|
+
new CloseEvent('close', {
|
|
265
|
+
code: ev.code,
|
|
266
|
+
reason: ev.reason,
|
|
267
|
+
// TODO: missing `wasClean` (exposed on iOS as `clean` but missing on Android)
|
|
268
|
+
}),
|
|
269
|
+
);
|
|
270
|
+
this._unregisterEvents();
|
|
271
|
+
this.close();
|
|
272
|
+
}),
|
|
273
|
+
this._eventEmitter.addListener('websocketFailed', ev => {
|
|
274
|
+
if (ev.id !== this._socketId) {
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
this.readyState = this.CLOSED;
|
|
278
|
+
this.dispatchEvent(new Event('error'));
|
|
279
|
+
this.dispatchEvent(
|
|
280
|
+
new CloseEvent('close', {
|
|
281
|
+
code: CLOSE_ABNORMAL,
|
|
282
|
+
reason: ev.message,
|
|
283
|
+
// TODO: Expose `wasClean`
|
|
284
|
+
}),
|
|
285
|
+
);
|
|
286
|
+
this._unregisterEvents();
|
|
287
|
+
this.close();
|
|
288
|
+
}),
|
|
289
|
+
];
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
get onclose(): EventCallback | null {
|
|
293
|
+
return getEventHandlerAttribute(this, 'close');
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
set onclose(listener: ?EventCallback) {
|
|
297
|
+
setEventHandlerAttribute(this, 'close', listener);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
get onerror(): EventCallback | null {
|
|
301
|
+
return getEventHandlerAttribute(this, 'error');
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
set onerror(listener: ?EventCallback) {
|
|
305
|
+
setEventHandlerAttribute(this, 'error', listener);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
get onmessage(): EventCallback | null {
|
|
309
|
+
return getEventHandlerAttribute(this, 'message');
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
set onmessage(listener: ?EventCallback) {
|
|
313
|
+
setEventHandlerAttribute(this, 'message', listener);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
get onopen(): EventCallback | null {
|
|
317
|
+
return getEventHandlerAttribute(this, 'open');
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
set onopen(listener: ?EventCallback) {
|
|
321
|
+
setEventHandlerAttribute(this, 'open', listener);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
export default WebSocket;
|
|
@@ -8,7 +8,33 @@
|
|
|
8
8
|
* @flow strict
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
// From @react-native/js-polyfills
|
|
12
|
+
type ErrorHandler = (error: mixed, isFatal: boolean) => void;
|
|
13
|
+
type Fn<Args: $ReadOnlyArray<mixed>, Return> = (...Args) => Return;
|
|
14
|
+
export type ErrorUtils = {
|
|
15
|
+
applyWithGuard<TArgs: $ReadOnlyArray<mixed>, TOut>(
|
|
16
|
+
fun: Fn<TArgs, TOut>,
|
|
17
|
+
context?: mixed,
|
|
18
|
+
args?: ?TArgs,
|
|
19
|
+
unused_onError?: null,
|
|
20
|
+
unused_name?: ?string,
|
|
21
|
+
): ?TOut,
|
|
22
|
+
applyWithGuardIfNeeded<TArgs: $ReadOnlyArray<mixed>, TOut>(
|
|
23
|
+
fun: Fn<TArgs, TOut>,
|
|
24
|
+
context?: mixed,
|
|
25
|
+
args?: ?TArgs,
|
|
26
|
+
): ?TOut,
|
|
27
|
+
getGlobalHandler(): ErrorHandler,
|
|
28
|
+
guard<TArgs: $ReadOnlyArray<mixed>, TOut>(
|
|
29
|
+
fun: Fn<TArgs, TOut>,
|
|
30
|
+
name?: ?string,
|
|
31
|
+
context?: mixed,
|
|
32
|
+
): ?(...TArgs) => ?TOut,
|
|
33
|
+
inGuard(): boolean,
|
|
34
|
+
reportError(error: mixed): void,
|
|
35
|
+
reportFatalError(error: mixed): void,
|
|
36
|
+
setGlobalHandler(fun: ErrorHandler): void,
|
|
37
|
+
};
|
|
12
38
|
|
|
13
39
|
/**
|
|
14
40
|
* The particular require runtime that we are using looks for a global
|
|
@@ -22,4 +48,4 @@ import type {ErrorUtilsT} from '@react-native/js-polyfills/error-guard';
|
|
|
22
48
|
* that use it aren't just using a global variable, so simply export the global
|
|
23
49
|
* variable here. ErrorUtils is originally defined in a file named error-guard.js.
|
|
24
50
|
*/
|
|
25
|
-
export default
|
|
51
|
+
export default global.ErrorUtils as ErrorUtils;
|
|
@@ -72,8 +72,12 @@ export default class EventEmitter<
|
|
|
72
72
|
> = $ReadOnly<Record<string, $ReadOnlyArray<UnsafeObject>>>,
|
|
73
73
|
> implements IEventEmitter<TEventToArgsMap>
|
|
74
74
|
{
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
#registry: Registry<TEventToArgsMap>;
|
|
76
|
+
|
|
77
|
+
constructor() {
|
|
78
|
+
// $FlowFixMe[incompatible-type]
|
|
79
|
+
this.#registry = {};
|
|
80
|
+
}
|
|
77
81
|
|
|
78
82
|
/**
|
|
79
83
|
* Registers a listener that is called when the supplied event is emitted.
|
|
@@ -31,6 +31,13 @@ namespace Microsoft.ReactNative.Composition.Experimental
|
|
|
31
31
|
SwitchThumb,
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
+
enum SnapAlignment
|
|
35
|
+
{
|
|
36
|
+
Start,
|
|
37
|
+
Center,
|
|
38
|
+
End,
|
|
39
|
+
};
|
|
40
|
+
|
|
34
41
|
[webhosthidden]
|
|
35
42
|
[uuid("172def51-9e1a-4e3c-841a-e5a470065acc")] // uuid needed for empty interfaces
|
|
36
43
|
[version(0)]
|
|
@@ -120,6 +127,7 @@ namespace Microsoft.ReactNative.Composition.Experimental
|
|
|
120
127
|
void SetMaximumZoomScale(Single maximumZoomScale);
|
|
121
128
|
void SetMinimumZoomScale(Single minimumZoomScale);
|
|
122
129
|
Boolean Horizontal;
|
|
130
|
+
void SetSnapPoints(Boolean snapToStart, Boolean snapToEnd, Windows.Foundation.Collections.IVectorView<Single> offsets, SnapAlignment snapToAlignment);
|
|
123
131
|
}
|
|
124
132
|
|
|
125
133
|
[webhosthidden]
|
|
@@ -89,12 +89,6 @@ facebook::react::Props::Shared AbiComponentDescriptor::cloneProps(
|
|
|
89
89
|
return ShadowNodeT::defaultSharedProps();
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
if constexpr (std::is_base_of_v<facebook::react::YogaLayoutableShadowNode, ShadowNodeT>) {
|
|
93
|
-
if (facebook::react::ReactNativeFeatureFlags::excludeYogaFromRawProps()) {
|
|
94
|
-
rawProps.filterYogaStylePropsInDynamicConversion();
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
92
|
rawProps.parse(rawPropsParser_);
|
|
99
93
|
|
|
100
94
|
// Call old-style constructor
|
|
@@ -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
|
|
@@ -26,6 +27,8 @@
|
|
|
26
27
|
|
|
27
28
|
namespace Microsoft::ReactNative::Composition::Experimental {
|
|
28
29
|
|
|
30
|
+
using namespace winrt::Microsoft::ReactNative::Composition::Experimental;
|
|
31
|
+
|
|
29
32
|
template <typename TSpriteVisual>
|
|
30
33
|
struct CompositionTypeTraits {};
|
|
31
34
|
|
|
@@ -74,6 +77,10 @@ struct CompositionTypeTraits<WindowsTypeTag> {
|
|
|
74
77
|
winrt::Windows::UI::Composition::Interactions::InteractionTrackerRequestIgnoredArgs;
|
|
75
78
|
using InteractionTrackerValuesChangedArgs =
|
|
76
79
|
winrt::Windows::UI::Composition::Interactions::InteractionTrackerValuesChangedArgs;
|
|
80
|
+
using InteractionTrackerInertiaRestingValue =
|
|
81
|
+
winrt::Windows::UI::Composition::Interactions::InteractionTrackerInertiaRestingValue;
|
|
82
|
+
using InteractionTrackerInertiaModifier =
|
|
83
|
+
winrt::Windows::UI::Composition::Interactions::InteractionTrackerInertiaModifier;
|
|
77
84
|
using ScalarKeyFrameAnimation = winrt::Windows::UI::Composition::ScalarKeyFrameAnimation;
|
|
78
85
|
using ShapeVisual = winrt::Windows::UI::Composition::ShapeVisual;
|
|
79
86
|
using SpriteVisual = winrt::Windows::UI::Composition::SpriteVisual;
|
|
@@ -143,6 +150,10 @@ struct CompositionTypeTraits<MicrosoftTypeTag> {
|
|
|
143
150
|
winrt::Microsoft::UI::Composition::Interactions::InteractionTrackerRequestIgnoredArgs;
|
|
144
151
|
using InteractionTrackerValuesChangedArgs =
|
|
145
152
|
winrt::Microsoft::UI::Composition::Interactions::InteractionTrackerValuesChangedArgs;
|
|
153
|
+
using InteractionTrackerInertiaRestingValue =
|
|
154
|
+
winrt::Microsoft::UI::Composition::Interactions::InteractionTrackerInertiaRestingValue;
|
|
155
|
+
using InteractionTrackerInertiaModifier =
|
|
156
|
+
winrt::Microsoft::UI::Composition::Interactions::InteractionTrackerInertiaModifier;
|
|
146
157
|
using ScalarKeyFrameAnimation = winrt::Microsoft::UI::Composition::ScalarKeyFrameAnimation;
|
|
147
158
|
using ShapeVisual = winrt::Microsoft::UI::Composition::ShapeVisual;
|
|
148
159
|
using SpriteVisual = winrt::Microsoft::UI::Composition::SpriteVisual;
|
|
@@ -782,9 +793,13 @@ struct CompScrollerVisual : winrt::implements<
|
|
|
782
793
|
}
|
|
783
794
|
|
|
784
795
|
void Horizontal(bool value) noexcept {
|
|
796
|
+
bool previousHorizontal = m_horizontal;
|
|
785
797
|
m_horizontal = value;
|
|
786
798
|
|
|
787
|
-
|
|
799
|
+
if (previousHorizontal != m_horizontal) {
|
|
800
|
+
UpdateInteractionModes();
|
|
801
|
+
ConfigureSnapInertiaModifiers(); // Reconfigure modifiers when direction changes
|
|
802
|
+
}
|
|
788
803
|
}
|
|
789
804
|
|
|
790
805
|
void UpdateInteractionModes() noexcept {
|
|
@@ -855,6 +870,23 @@ struct CompScrollerVisual : winrt::implements<
|
|
|
855
870
|
m_interactionTracker.MinScale(minimumZoomScale);
|
|
856
871
|
}
|
|
857
872
|
|
|
873
|
+
void SetSnapPoints(
|
|
874
|
+
bool snapToStart,
|
|
875
|
+
bool snapToEnd,
|
|
876
|
+
winrt::Windows::Foundation::Collections::IVectorView<float> const &offsets,
|
|
877
|
+
SnapAlignment snapToAlignment) noexcept {
|
|
878
|
+
m_snapToStart = snapToStart;
|
|
879
|
+
m_snapToEnd = snapToEnd;
|
|
880
|
+
m_snapToAlignment = snapToAlignment;
|
|
881
|
+
m_snapToOffsets.clear();
|
|
882
|
+
if (offsets) {
|
|
883
|
+
for (auto const &offset : offsets) {
|
|
884
|
+
m_snapToOffsets.push_back(offset);
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
ConfigureSnapInertiaModifiers();
|
|
888
|
+
}
|
|
889
|
+
|
|
858
890
|
void Opacity(float opacity) noexcept {
|
|
859
891
|
m_visual.Opacity(opacity);
|
|
860
892
|
}
|
|
@@ -1050,8 +1082,172 @@ struct CompScrollerVisual : winrt::implements<
|
|
|
1050
1082
|
0});
|
|
1051
1083
|
}
|
|
1052
1084
|
|
|
1085
|
+
void ConfigureSnapInertiaModifiers() noexcept {
|
|
1086
|
+
if (!m_visual || !m_contentVisual || !m_interactionTracker) {
|
|
1087
|
+
return;
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
auto visualSize = m_visual.Size();
|
|
1091
|
+
auto contentSize = m_contentVisual.Size();
|
|
1092
|
+
if (visualSize.x <= 0 || visualSize.y <= 0 || contentSize.x <= 0 || contentSize.y <= 0) {
|
|
1093
|
+
OutputDebugStringW(L"Invalid visual/content size\n");
|
|
1094
|
+
return;
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1097
|
+
auto compositor = m_interactionTracker.Compositor();
|
|
1098
|
+
|
|
1099
|
+
// Collect and deduplicate all snap positions
|
|
1100
|
+
std::vector<float> snapPositions;
|
|
1101
|
+
|
|
1102
|
+
if (m_snapToStart) {
|
|
1103
|
+
snapPositions.push_back(0.0f);
|
|
1104
|
+
}
|
|
1105
|
+
|
|
1106
|
+
snapPositions.insert(snapPositions.end(), m_snapToOffsets.begin(), m_snapToOffsets.end());
|
|
1107
|
+
|
|
1108
|
+
// Adjust snap positions based on alignment
|
|
1109
|
+
const float viewportSize = m_horizontal ? visualSize.x : visualSize.y;
|
|
1110
|
+
if (m_snapToAlignment == SnapAlignment::Center) {
|
|
1111
|
+
// For center alignment, offset snap positions by half the viewport size
|
|
1112
|
+
for (auto &position : snapPositions) {
|
|
1113
|
+
position = std::max(0.0f, position - viewportSize / 2.0f);
|
|
1114
|
+
}
|
|
1115
|
+
} else if (m_snapToAlignment == SnapAlignment::End) {
|
|
1116
|
+
// For end alignment, offset snap positions by the full viewport size
|
|
1117
|
+
for (auto &position : snapPositions) {
|
|
1118
|
+
position = std::max(0.0f, position - viewportSize);
|
|
1119
|
+
}
|
|
1120
|
+
}
|
|
1121
|
+
// For Start alignment, no adjustment needed
|
|
1122
|
+
|
|
1123
|
+
std::sort(snapPositions.begin(), snapPositions.end());
|
|
1124
|
+
snapPositions.erase(std::unique(snapPositions.begin(), snapPositions.end()), snapPositions.end());
|
|
1125
|
+
|
|
1126
|
+
std::vector<typename TTypeRedirects::InteractionTrackerInertiaRestingValue> restingValues;
|
|
1127
|
+
|
|
1128
|
+
for (size_t i = 0; i < snapPositions.size(); ++i) {
|
|
1129
|
+
const auto position = snapPositions[i];
|
|
1130
|
+
auto restingValue = TTypeRedirects::InteractionTrackerInertiaRestingValue::Create(compositor);
|
|
1131
|
+
|
|
1132
|
+
winrt::hstring axisComponent = m_horizontal ? L"X" : L"Y";
|
|
1133
|
+
winrt::hstring conditionExpr;
|
|
1134
|
+
|
|
1135
|
+
// Build condition expression based on whether there's one or multiple snap points
|
|
1136
|
+
if (snapPositions.size() == 1) {
|
|
1137
|
+
conditionExpr = L"abs(this.Target.NaturalRestingPosition." + axisComponent + L" - snap) < 50";
|
|
1138
|
+
} else {
|
|
1139
|
+
if (i == 0) {
|
|
1140
|
+
conditionExpr = L"this.Target.NaturalRestingPosition." + axisComponent + L" < midpoint";
|
|
1141
|
+
} else if (i == snapPositions.size() - 1) {
|
|
1142
|
+
conditionExpr = L"this.Target.NaturalRestingPosition." + axisComponent + L" >= midpoint";
|
|
1143
|
+
} else {
|
|
1144
|
+
conditionExpr = L"this.Target.NaturalRestingPosition." + axisComponent +
|
|
1145
|
+
L" >= prevMidpoint && this.Target.NaturalRestingPosition." + axisComponent + L" < nextMidpoint";
|
|
1146
|
+
}
|
|
1147
|
+
}
|
|
1148
|
+
|
|
1149
|
+
auto conditionAnim = compositor.CreateExpressionAnimation();
|
|
1150
|
+
conditionAnim.Expression(conditionExpr);
|
|
1151
|
+
|
|
1152
|
+
if (snapPositions.size() == 1) {
|
|
1153
|
+
conditionAnim.SetScalarParameter(L"snap", position);
|
|
1154
|
+
} else {
|
|
1155
|
+
// Multiple snap points - use range-based conditions
|
|
1156
|
+
if (i == 0) {
|
|
1157
|
+
const auto nextPosition = snapPositions[i + 1];
|
|
1158
|
+
const auto midpoint = (position + nextPosition) / 2.0f;
|
|
1159
|
+
conditionAnim.SetScalarParameter(L"midpoint", midpoint);
|
|
1160
|
+
} else if (i == snapPositions.size() - 1) {
|
|
1161
|
+
const auto prevPosition = snapPositions[i - 1];
|
|
1162
|
+
const auto midpoint = (prevPosition + position) / 2.0f;
|
|
1163
|
+
conditionAnim.SetScalarParameter(L"midpoint", midpoint);
|
|
1164
|
+
} else {
|
|
1165
|
+
const auto prevPosition = snapPositions[i - 1];
|
|
1166
|
+
const auto nextPosition = snapPositions[i + 1];
|
|
1167
|
+
const auto prevMidpoint = (prevPosition + position) / 2.0f;
|
|
1168
|
+
const auto nextMidpoint = (position + nextPosition) / 2.0f;
|
|
1169
|
+
conditionAnim.SetScalarParameter(L"prevMidpoint", prevMidpoint);
|
|
1170
|
+
conditionAnim.SetScalarParameter(L"nextMidpoint", nextMidpoint);
|
|
1171
|
+
}
|
|
1172
|
+
}
|
|
1173
|
+
|
|
1174
|
+
restingValue.Condition(conditionAnim);
|
|
1175
|
+
|
|
1176
|
+
// Resting value simply snaps to this position
|
|
1177
|
+
auto restingAnim = compositor.CreateExpressionAnimation();
|
|
1178
|
+
restingAnim.Expression(L"snap");
|
|
1179
|
+
restingAnim.SetScalarParameter(L"snap", position);
|
|
1180
|
+
restingValue.RestingValue(restingAnim);
|
|
1181
|
+
|
|
1182
|
+
restingValues.push_back(restingValue);
|
|
1183
|
+
}
|
|
1184
|
+
|
|
1185
|
+
if (m_snapToEnd) {
|
|
1186
|
+
auto endRestingValue = TTypeRedirects::InteractionTrackerInertiaRestingValue::Create(compositor);
|
|
1187
|
+
|
|
1188
|
+
// Create property sets to dynamically compute content - visual size
|
|
1189
|
+
auto contentSizePropertySet = compositor.CreatePropertySet();
|
|
1190
|
+
contentSizePropertySet.InsertVector2(L"Size", m_contentVisual.Size());
|
|
1191
|
+
|
|
1192
|
+
auto visualSizePropertySet = compositor.CreatePropertySet();
|
|
1193
|
+
visualSizePropertySet.InsertVector2(L"Size", m_visual.Size());
|
|
1194
|
+
|
|
1195
|
+
winrt::hstring endPositionExpr = m_horizontal ? L"max(contentSize.Size.x - visualSize.Size.x, 0)"
|
|
1196
|
+
: L"max(contentSize.Size.y - visualSize.Size.y, 0)";
|
|
1197
|
+
|
|
1198
|
+
float prevPosition = snapPositions.empty() ? 0.0f : snapPositions.back();
|
|
1199
|
+
|
|
1200
|
+
winrt::hstring endConditionExpr = m_horizontal
|
|
1201
|
+
? L"this.Target.NaturalRestingPosition.X >= ((max(contentSize.Size.x - visualSize.Size.x, 0) + prevSnap) / 2.0)"
|
|
1202
|
+
: L"this.Target.NaturalRestingPosition.Y >= ((max(contentSize.Size.y - visualSize.Size.y, 0) + prevSnap) / 2.0)";
|
|
1203
|
+
|
|
1204
|
+
auto endCondition = compositor.CreateExpressionAnimation();
|
|
1205
|
+
endCondition.Expression(endConditionExpr);
|
|
1206
|
+
endCondition.SetReferenceParameter(L"contentSize", contentSizePropertySet);
|
|
1207
|
+
endCondition.SetReferenceParameter(L"visualSize", visualSizePropertySet);
|
|
1208
|
+
endCondition.SetScalarParameter(L"prevSnap", prevPosition);
|
|
1209
|
+
|
|
1210
|
+
auto endResting = compositor.CreateExpressionAnimation();
|
|
1211
|
+
endResting.Expression(endPositionExpr);
|
|
1212
|
+
endResting.SetReferenceParameter(L"contentSize", contentSizePropertySet);
|
|
1213
|
+
endResting.SetReferenceParameter(L"visualSize", visualSizePropertySet);
|
|
1214
|
+
|
|
1215
|
+
endRestingValue.Condition(endCondition);
|
|
1216
|
+
endRestingValue.RestingValue(endResting);
|
|
1217
|
+
|
|
1218
|
+
restingValues.push_back(endRestingValue);
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1221
|
+
if (!restingValues.empty()) {
|
|
1222
|
+
auto modifiers = winrt::single_threaded_vector<typename TTypeRedirects::InteractionTrackerInertiaModifier>();
|
|
1223
|
+
for (auto &v : restingValues) {
|
|
1224
|
+
auto modifier = v.as<typename TTypeRedirects::InteractionTrackerInertiaModifier>();
|
|
1225
|
+
if (modifier) {
|
|
1226
|
+
modifiers.Append(modifier);
|
|
1227
|
+
}
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
if (m_horizontal) {
|
|
1231
|
+
m_interactionTracker.ConfigurePositionXInertiaModifiers(modifiers);
|
|
1232
|
+
} else {
|
|
1233
|
+
m_interactionTracker.ConfigurePositionYInertiaModifiers(modifiers);
|
|
1234
|
+
}
|
|
1235
|
+
} else {
|
|
1236
|
+
// Clear inertia modifiers when no snapping is configured
|
|
1237
|
+
if (m_horizontal) {
|
|
1238
|
+
m_interactionTracker.ConfigurePositionXInertiaModifiers({});
|
|
1239
|
+
} else {
|
|
1240
|
+
m_interactionTracker.ConfigurePositionYInertiaModifiers({});
|
|
1241
|
+
}
|
|
1242
|
+
}
|
|
1243
|
+
}
|
|
1244
|
+
|
|
1053
1245
|
bool m_isScrollEnabled{true};
|
|
1054
1246
|
bool m_horizontal{false};
|
|
1247
|
+
bool m_snapToStart{true};
|
|
1248
|
+
bool m_snapToEnd{true};
|
|
1249
|
+
std::vector<float> m_snapToOffsets;
|
|
1250
|
+
SnapAlignment m_snapToAlignment{SnapAlignment::Start};
|
|
1055
1251
|
bool m_inertia{false};
|
|
1056
1252
|
bool m_custom{false};
|
|
1057
1253
|
winrt::Windows::Foundation::Numerics::float3 m_targetPosition;
|