@office-iss/react-native-win32 0.76.2 → 0.77.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/.eslintignore +1 -1
- package/.flowconfig +5 -1
- package/CHANGELOG.json +179 -53
- package/CHANGELOG.md +82 -28
- package/Libraries/ActionSheetIOS/ActionSheetIOS.d.ts +1 -0
- package/Libraries/ActionSheetIOS/ActionSheetIOS.js +13 -0
- package/Libraries/Animated/AnimatedEvent.js +1 -1
- package/Libraries/Animated/AnimatedImplementation.js +2 -2
- package/Libraries/Animated/NativeAnimatedAllowlist.js +20 -9
- package/Libraries/Animated/animations/Animation.js +60 -25
- package/Libraries/Animated/animations/DecayAnimation.js +26 -38
- package/Libraries/Animated/animations/SpringAnimation.js +33 -39
- package/Libraries/Animated/animations/TimingAnimation.js +34 -42
- package/Libraries/Animated/components/AnimatedFlatList.js +1 -1
- package/Libraries/Animated/components/AnimatedSectionList.js +3 -1
- package/Libraries/Animated/createAnimatedComponent.js +60 -33
- package/Libraries/Animated/nodes/AnimatedColor.js +1 -1
- package/Libraries/Animated/nodes/AnimatedInterpolation.js +1 -1
- package/Libraries/Animated/nodes/AnimatedNode.js +39 -45
- package/Libraries/Animated/nodes/AnimatedObject.js +13 -3
- package/Libraries/Animated/nodes/AnimatedProps.js +104 -46
- package/Libraries/Animated/nodes/AnimatedStyle.js +116 -39
- package/Libraries/Animated/nodes/AnimatedTransform.js +56 -23
- package/Libraries/Animated/nodes/AnimatedValue.js +1 -1
- package/Libraries/Animated/nodes/AnimatedWithChildren.js +1 -3
- package/Libraries/Animated/useAnimatedProps.js +41 -35
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +19 -3
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +77 -5
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js +82 -5
- package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +4 -4
- package/Libraries/Components/Button.js +9 -4
- package/Libraries/Components/Button.win32.js +12 -4
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +3 -1
- package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +7 -0
- package/Libraries/Components/Pressable/Pressable.js +4 -4
- package/Libraries/Components/Pressable/Pressable.win32.js +4 -4
- package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +13 -7
- package/Libraries/Components/RefreshControl/__mocks__/RefreshControlMock.js +3 -2
- package/Libraries/Components/SafeAreaView/SafeAreaView.js +4 -4
- package/Libraries/Components/SafeAreaView/SafeAreaView.win32.js +4 -4
- package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +0 -1
- package/Libraries/Components/ScrollView/ScrollView.js +49 -88
- package/Libraries/Components/ScrollView/ScrollViewCommands.js +1 -1
- package/Libraries/Components/ScrollView/ScrollViewContext.js +2 -0
- package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +0 -2
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +8 -9
- package/Libraries/Components/Switch/Switch.js +8 -6
- package/Libraries/Components/TextInput/InputAccessoryView.js +1 -1
- package/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent.js +4 -4
- package/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent.js +6 -4
- package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +2 -1
- package/Libraries/Components/TextInput/TextInput.d.ts +27 -4
- package/Libraries/Components/TextInput/TextInput.flow.js +36 -19
- package/Libraries/Components/TextInput/TextInput.js +37 -13
- package/Libraries/Components/TextInput/TextInput.win32.js +40 -15
- package/Libraries/Components/TextInput/TextInputState.js +11 -13
- package/Libraries/Components/TextInput/TextInputState.win32.js +13 -16
- package/Libraries/Components/TextInput/Win32TextInputNativeComponent.js +3 -0
- package/Libraries/Components/Touchable/BoundingDimensions.js +11 -3
- package/Libraries/Components/Touchable/Position.js +7 -2
- package/Libraries/Components/Touchable/Touchable.js +4 -0
- package/Libraries/Components/Touchable/Touchable.win32.js +4 -0
- package/Libraries/Components/Touchable/TouchableBounce.js +6 -2
- package/Libraries/Components/Touchable/TouchableHighlight.js +5 -5
- package/Libraries/Components/Touchable/TouchableOpacity.js +6 -5
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +1 -2
- package/Libraries/Components/View/ReactNativeStyleAttributes.js +6 -1
- package/Libraries/Components/View/View.js +4 -4
- package/Libraries/Components/View/View.win32.js +4 -4
- package/Libraries/Components/View/ViewNativeComponent.js +6 -98
- package/Libraries/Components/View/ViewPropTypes.d.ts +7 -0
- package/Libraries/Components/View/ViewPropTypes.js +0 -3
- package/Libraries/Components/View/ViewPropTypes.win32.js +0 -3
- package/Libraries/Components/View/ViewWin32.js +1 -0
- package/Libraries/Core/ExceptionsManager.js +50 -29
- package/Libraries/Core/ReactNativeVersion.js +3 -3
- package/Libraries/Core/__mocks__/NativeExceptionsManager.js +0 -1
- package/Libraries/Core/setUpBatchedBridge.js +1 -10
- package/Libraries/Core/setUpDeveloperTools.js +1 -5
- package/Libraries/Core/setUpErrorHandling.js +20 -18
- package/Libraries/Core/setUpReactDevTools.js +107 -8
- package/Libraries/Core/setUpSegmentFetcher.js +1 -0
- package/Libraries/Core/setUpTimers.js +21 -18
- package/Libraries/Debugging/DebuggingOverlay.js +4 -5
- package/Libraries/Image/AssetSourceResolver.js +12 -1
- package/Libraries/Image/Image.android.js +1 -5
- package/Libraries/Image/Image.d.ts +20 -29
- package/Libraries/Image/Image.ios.js +0 -2
- package/Libraries/Image/Image.win32.js +0 -2
- package/Libraries/Image/ImageBackground.js +2 -5
- package/Libraries/Image/ImageProps.js +7 -6
- package/Libraries/Image/ImageResizeMode.d.ts +8 -1
- package/Libraries/Image/ImageResizeMode.js +4 -1
- package/Libraries/Image/ImageSource.d.ts +0 -2
- package/Libraries/Image/ImageSource.js +0 -2
- package/Libraries/Image/ImageTypes.flow.js +11 -9
- package/Libraries/Image/ImageUtils.js +6 -3
- package/Libraries/Image/ImageViewNativeComponent.js +5 -3
- package/Libraries/Inspector/Inspector.js +1 -0
- package/Libraries/Inspector/Inspector.win32.js +2 -1
- package/Libraries/Inspector/NetworkOverlay.js +4 -0
- package/Libraries/Inspector/ReactDevToolsOverlay.js +8 -14
- package/Libraries/Inspector/getInspectorDataForViewAtPoint.js +3 -5
- package/Libraries/Interaction/InteractionManager.js +6 -1
- package/Libraries/Interaction/InteractionManagerStub.js +176 -0
- package/Libraries/Interaction/TouchHistoryMath.js +22 -19
- package/Libraries/JSInspector/NetworkAgent.js +1 -1
- package/Libraries/Lists/FlatList.d.ts +1 -2
- package/Libraries/Lists/FlatList.js +2 -2
- package/Libraries/Lists/SectionListModern.js +7 -7
- package/Libraries/Lists/__flowtests__/FlatList-flowtest.js +2 -2
- package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +1 -1
- package/Libraries/LogBox/Data/LogBoxData.js +3 -3
- package/Libraries/LogBox/LogBox.js +18 -5
- package/Libraries/LogBox/LogBoxInspectorContainer.js +1 -1
- package/Libraries/LogBox/LogBoxNotificationContainer.js +2 -2
- package/Libraries/LogBox/UI/AnsiHighlight.js +26 -17
- package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +6 -1
- package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.win32.js +6 -1
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.win32.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +1 -1
- package/Libraries/LogBox/UI/LogBoxMessage.js +2 -2
- package/Libraries/Modal/Modal.d.ts +12 -0
- package/Libraries/Modal/Modal.js +31 -4
- package/Libraries/NativeComponent/BaseViewConfig.android.js +72 -1
- package/Libraries/NativeComponent/BaseViewConfig.ios.js +2 -1
- package/Libraries/NativeComponent/BaseViewConfig.win32.js +3 -11
- package/Libraries/NativeComponent/NativeComponentRegistry.js +3 -3
- package/Libraries/NativeComponent/StaticViewConfigValidator.js +0 -1
- package/Libraries/Network/FormData.js +11 -3
- package/Libraries/Network/XHRInterceptor.js +63 -14
- package/Libraries/Network/XMLHttpRequest.js +26 -1
- package/Libraries/NewAppScreen/components/HermesBadge.js +1 -1
- package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +49 -2
- package/Libraries/PermissionsAndroid/PermissionsAndroid.js +4 -4
- package/Libraries/Pressability/HoverState.js +2 -0
- package/Libraries/Pressability/HoverState.win32.js +2 -0
- package/Libraries/Pressability/Pressability.js +2 -3
- package/Libraries/Pressability/Pressability.win32.js +2 -3
- package/Libraries/Pressability/usePressability.js +4 -1
- package/Libraries/ReactNative/AppContainer.js +1 -1
- package/Libraries/ReactNative/AppRegistry.js +1 -11
- package/Libraries/ReactNative/DisplayMode.js +1 -1
- package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +2 -3
- package/Libraries/ReactNative/RendererImplementation.js +18 -17
- package/Libraries/ReactNative/getCachedComponentWithDebugName.js +1 -3
- package/Libraries/ReactNative/renderApplication.js +9 -8
- package/Libraries/ReactNative/requireNativeComponent.js +5 -2
- package/Libraries/Renderer/shims/ReactFabric.js +3 -3
- package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -2
- package/Libraries/Renderer/shims/ReactNative.js +3 -3
- package/Libraries/Renderer/shims/ReactNativeTypes.js +22 -35
- package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +5 -6
- package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
- package/Libraries/StyleSheet/StyleSheet.js +7 -1
- package/Libraries/StyleSheet/StyleSheet.win32.js +7 -1
- package/Libraries/StyleSheet/StyleSheetTypes.d.ts +13 -2
- package/Libraries/StyleSheet/StyleSheetTypes.js +24 -6
- package/Libraries/StyleSheet/processBackgroundImage.js +87 -110
- package/Libraries/StyleSheet/processTransform.js +3 -34
- package/Libraries/Text/Text.js +248 -249
- package/Libraries/Text/Text.win32.js +282 -295
- package/Libraries/Text/TextNativeComponent.js +0 -1
- package/Libraries/TurboModule/TurboModuleRegistry.js +5 -5
- package/Libraries/Types/CoreEventTypes.d.ts +3 -10
- package/Libraries/Types/CoreEventTypes.js +4 -6
- package/Libraries/Types/CoreEventTypes.win32.js +4 -6
- package/Libraries/Utilities/Appearance.js +3 -1
- package/Libraries/Utilities/BackHandler.android.js +6 -18
- package/Libraries/Utilities/BackHandler.d.ts +0 -4
- package/Libraries/Utilities/BackHandler.ios.js +0 -7
- package/Libraries/Utilities/BackHandler.win32.js +6 -18
- package/Libraries/Utilities/FocusManager.win32.js +1 -1
- package/Libraries/Utilities/HMRClient.js +3 -4
- package/Libraries/Utilities/Platform.flow.js +2 -2
- package/Libraries/Utilities/Platform.flow.win32.js +3 -2
- package/Libraries/Utilities/__mocks__/BackHandler.js +3 -8
- package/Libraries/Utilities/codegenNativeComponent.js +1 -1
- package/Libraries/Utilities/useMergeRefs.js +26 -7
- package/Libraries/WebSocket/WebSocketEvent.js +4 -1
- package/Libraries/WebSocket/WebSocketInterceptor.js +31 -13
- package/Libraries/__flowtests__/ReactNativeTypes-flowtest.js +6 -5
- package/Libraries/promiseRejectionTrackingOptions.js +1 -1
- package/index.js +10 -3
- package/index.win32.js +10 -3
- package/jest/setup.js +36 -1
- package/overrides.json +37 -37
- package/package.json +20 -20
- package/src/private/animated/NativeAnimatedHelper.js +18 -16
- package/src/private/animated/NativeAnimatedHelper.win32.js +18 -15
- package/src/private/animated/useAnimatedPropsMemo.js +356 -0
- package/src/private/components/HScrollViewNativeComponents.js +1 -27
- package/src/private/components/SafeAreaView_INTERNAL_DO_NOT_USE.js +11 -8
- package/src/private/components/VScrollViewNativeComponents.js +2 -25
- package/src/private/debugging/ReactDevToolsSettingsManager.android.js +20 -0
- package/src/private/debugging/ReactDevToolsSettingsManager.ios.js +30 -0
- package/src/private/debugging/ReactDevToolsSettingsManager.win32.js +20 -0
- package/src/private/{fusebox → debugging}/setUpFuseboxReactDevToolsDispatcher.js +6 -0
- package/src/private/devmenu/DevMenu.d.ts +20 -0
- package/src/private/devmenu/DevMenu.js +31 -0
- package/src/private/featureflags/ReactNativeFeatureFlags.js +95 -86
- package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +8 -2
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +17 -19
- package/src/private/fusebox/specs/NativeReactDevToolsRuntimeSettingsModule.js +34 -0
- package/src/private/setup/setUpDOM.js +14 -6
- package/src/private/setup/setUpMutationObserver.js +5 -0
- package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +1 -0
- package/src/private/specs/components/RCTModalHostViewNativeComponent.js +8 -0
- package/src/private/specs/modules/NativeAccessibilityInfo.js +9 -0
- package/src/private/specs/modules/NativeAccessibilityInfoWin32.js +9 -0
- package/src/private/specs/modules/NativeAccessibilityManager.js +4 -0
- package/src/private/specs/modules/NativeActionSheetManager.js +2 -0
- package/src/private/specs/modules/NativeAppearance.js +4 -10
- package/src/private/specs/modules/NativeExceptionsManager.js +0 -12
- package/src/private/specs/modules/{NativeDevToolsSettingsManager.js → NativeReactDevToolsSettingsManager.js} +3 -5
- package/src/private/webapis/dom/geometry/DOMRect.js +2 -2
- package/src/private/webapis/dom/geometry/DOMRectReadOnly.js +2 -2
- package/src/private/webapis/dom/nodes/ReactNativeElement.js +2 -3
- package/src/private/webapis/intersectionobserver/IntersectionObserver.js +102 -11
- package/src/private/webapis/intersectionobserver/IntersectionObserverEntry.js +26 -0
- package/src/private/webapis/intersectionobserver/IntersectionObserverManager.js +1 -0
- package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +1 -0
- package/src/private/webapis/intersectionobserver/specs/__mocks__/NativeIntersectionObserver.js +9 -0
- package/src/private/webapis/performance/EventTiming.js +13 -8
- package/src/private/webapis/performance/Performance.js +66 -73
- package/src/private/webapis/performance/PerformanceEntry.js +2 -5
- package/src/private/webapis/performance/PerformanceObserver.js +65 -164
- package/src/private/webapis/performance/RawPerformanceEntry.js +1 -1
- package/src/private/webapis/performance/UserTiming.js +11 -7
- package/src/private/webapis/performance/Utilities.js +18 -0
- package/src/private/webapis/performance/specs/NativePerformance.js +71 -2
- package/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js +267 -0
- package/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +19 -3
- package/src-win/Libraries/Components/View/ViewPropTypes.d.ts +7 -0
- package/types/index.d.ts +1 -1
- package/types/public/ReactNativeTypes.d.ts +4 -8
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.android.js +0 -35
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.d.ts +0 -20
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.ios.js +0 -49
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.win32.js +0 -35
- package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +0 -13
- package/Libraries/ReactNative/ReactFabricInternals.js +0 -17
- package/src/private/components/useSyncOnScroll.js +0 -48
- package/src/private/webapis/performance/specs/NativePerformanceObserver.js +0 -61
- package/src/private/webapis/performance/specs/__mocks__/NativePerformance.js +0 -67
- package/src/private/webapis/performance/specs/__mocks__/NativePerformanceObserver.js +0 -127
- package/types/experimental.d.ts +0 -59
- /package/src/private/{fusebox → debugging}/FuseboxSessionObserver.js +0 -0
|
@@ -16,6 +16,12 @@ export interface Spec extends TurboModule {
|
|
|
16
16
|
+isReduceMotionEnabled: (
|
|
17
17
|
onSuccess: (isReduceMotionEnabled: boolean) => void,
|
|
18
18
|
) => void;
|
|
19
|
+
+isInvertColorsEnabled?: (
|
|
20
|
+
onSuccess: (isInvertColorsEnabled: boolean) => void,
|
|
21
|
+
) => void;
|
|
22
|
+
+isHighTextContrastEnabled?: (
|
|
23
|
+
onSuccess: (isHighTextContrastEnabled: boolean) => void,
|
|
24
|
+
) => void;
|
|
19
25
|
+isTouchExplorationEnabled: (
|
|
20
26
|
onSuccess: (isScreenReaderEnabled: boolean) => void,
|
|
21
27
|
) => void;
|
|
@@ -34,6 +40,9 @@ export interface Spec extends TurboModule {
|
|
|
34
40
|
mSec: number,
|
|
35
41
|
onSuccess: (recommendedTimeoutMillis: number) => void,
|
|
36
42
|
) => void;
|
|
43
|
+
+isGrayscaleEnabled?: (
|
|
44
|
+
onSuccess: (isGrayscaleEnabled: boolean) => void,
|
|
45
|
+
) => void;
|
|
37
46
|
}
|
|
38
47
|
|
|
39
48
|
export default (TurboModuleRegistry.get<Spec>('AccessibilityInfo'): ?Spec);
|
|
@@ -29,6 +29,10 @@ export interface Spec extends TurboModule {
|
|
|
29
29
|
onSuccess: (isReduceMotionEnabled: boolean) => void,
|
|
30
30
|
onError: (error: Object) => void,
|
|
31
31
|
) => void;
|
|
32
|
+
+getCurrentDarkerSystemColorsState?: (
|
|
33
|
+
onSuccess: (isDarkerSystemColorsEnabled: boolean) => void,
|
|
34
|
+
onError: (error: Object) => void,
|
|
35
|
+
) => void;
|
|
32
36
|
+getCurrentPrefersCrossFadeTransitionsState?: (
|
|
33
37
|
onSuccess: (prefersCrossFadeTransitions: boolean) => void,
|
|
34
38
|
onError: (error: Object) => void,
|
|
@@ -24,6 +24,7 @@ export interface Spec extends TurboModule {
|
|
|
24
24
|
+anchor?: ?number,
|
|
25
25
|
+tintColor?: ?number,
|
|
26
26
|
+cancelButtonTintColor?: ?number,
|
|
27
|
+
+disabledButtonTintColor?: ?number,
|
|
27
28
|
+userInterfaceStyle?: ?string,
|
|
28
29
|
+disabledButtonIndices?: Array<number>,
|
|
29
30
|
|},
|
|
@@ -37,6 +38,7 @@ export interface Spec extends TurboModule {
|
|
|
37
38
|
+anchor?: ?number,
|
|
38
39
|
+tintColor?: ?number,
|
|
39
40
|
+cancelButtonTintColor?: ?number,
|
|
41
|
+
+disabledButtonTintColor?: ?number,
|
|
40
42
|
+excludedActivityTypes?: ?Array<string>,
|
|
41
43
|
+userInterfaceStyle?: ?string,
|
|
42
44
|
|},
|
|
@@ -12,21 +12,15 @@ import type {TurboModule} from '../../../../Libraries/TurboModule/RCTExport';
|
|
|
12
12
|
|
|
13
13
|
import * as TurboModuleRegistry from '../../../../Libraries/TurboModule/TurboModuleRegistry';
|
|
14
14
|
|
|
15
|
-
export type ColorSchemeName = 'light' | 'dark';
|
|
15
|
+
export type ColorSchemeName = 'light' | 'dark' | 'unspecified';
|
|
16
16
|
|
|
17
17
|
export type AppearancePreferences = {
|
|
18
|
-
|
|
19
|
-
// types.
|
|
20
|
-
/* 'light' | 'dark' */
|
|
21
|
-
colorScheme?: ?string,
|
|
18
|
+
colorScheme?: ?ColorSchemeName,
|
|
22
19
|
};
|
|
23
20
|
|
|
24
21
|
export interface Spec extends TurboModule {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
/* 'light' | 'dark' */
|
|
28
|
-
+getColorScheme: () => ?string;
|
|
29
|
-
+setColorScheme: (colorScheme: string) => void;
|
|
22
|
+
+getColorScheme: () => ?ColorSchemeName;
|
|
23
|
+
+setColorScheme: (colorScheme: ColorSchemeName) => void;
|
|
30
24
|
|
|
31
25
|
// RCTEventEmitter
|
|
32
26
|
+addListener: (eventName: string) => void;
|
|
@@ -47,11 +47,6 @@ export interface Spec extends TurboModule {
|
|
|
47
47
|
exceptionId: number,
|
|
48
48
|
) => void;
|
|
49
49
|
+reportException?: (data: ExceptionData) => void;
|
|
50
|
-
+updateExceptionMessage: (
|
|
51
|
-
message: string,
|
|
52
|
-
stack: Array<StackFrame>,
|
|
53
|
-
exceptionId: number,
|
|
54
|
-
) => void;
|
|
55
50
|
// TODO(T53311281): This is a noop on iOS now. Implement it.
|
|
56
51
|
+dismissRedbox?: () => void;
|
|
57
52
|
}
|
|
@@ -74,13 +69,6 @@ const ExceptionsManager = {
|
|
|
74
69
|
) {
|
|
75
70
|
NativeModule.reportSoftException(message, stack, exceptionId);
|
|
76
71
|
},
|
|
77
|
-
updateExceptionMessage(
|
|
78
|
-
message: string,
|
|
79
|
-
stack: Array<StackFrame>,
|
|
80
|
-
exceptionId: number,
|
|
81
|
-
) {
|
|
82
|
-
NativeModule.updateExceptionMessage(message, stack, exceptionId);
|
|
83
|
-
},
|
|
84
72
|
dismissRedbox(): void {
|
|
85
73
|
if (Platform.OS !== 'ios' && NativeModule.dismissRedbox) {
|
|
86
74
|
// TODO(T53311281): This is a noop on iOS now. Implement it.
|
|
@@ -13,12 +13,10 @@ import type {TurboModule} from '../../../../Libraries/TurboModule/RCTExport';
|
|
|
13
13
|
import * as TurboModuleRegistry from '../../../../Libraries/TurboModule/TurboModuleRegistry';
|
|
14
14
|
|
|
15
15
|
export interface Spec extends TurboModule {
|
|
16
|
-
+
|
|
17
|
-
+
|
|
18
|
-
+setProfilingSettings?: (newProfilingSettings: string) => void;
|
|
19
|
-
+getProfilingSettings?: () => ?string;
|
|
16
|
+
+setGlobalHookSettings: (settings: string) => void;
|
|
17
|
+
+getGlobalHookSettings: () => ?string;
|
|
20
18
|
}
|
|
21
19
|
|
|
22
20
|
export default (TurboModuleRegistry.get<Spec>(
|
|
23
|
-
'
|
|
21
|
+
'ReactDevToolsSettingsManager',
|
|
24
22
|
): ?Spec);
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* licensed under [CC-BY-SA 2.5](https://creativecommons.org/licenses/by-sa/2.5/).
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import DOMRectReadOnly, {type
|
|
17
|
+
import DOMRectReadOnly, {type DOMRectInit} from './DOMRectReadOnly';
|
|
18
18
|
|
|
19
19
|
// flowlint unsafe-getters-setters:off
|
|
20
20
|
|
|
@@ -72,7 +72,7 @@ export default class DOMRect extends DOMRectReadOnly {
|
|
|
72
72
|
/**
|
|
73
73
|
* Creates a new `DOMRect` object with a given location and dimensions.
|
|
74
74
|
*/
|
|
75
|
-
static fromRect(rect?: ?
|
|
75
|
+
static fromRect(rect?: ?DOMRectInit): DOMRect {
|
|
76
76
|
if (!rect) {
|
|
77
77
|
return new DOMRect();
|
|
78
78
|
}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
// flowlint sketchy-null:off, unsafe-getters-setters:off
|
|
18
18
|
|
|
19
|
-
export interface
|
|
19
|
+
export interface DOMRectInit {
|
|
20
20
|
x?: ?number;
|
|
21
21
|
y?: ?number;
|
|
22
22
|
width?: ?number;
|
|
@@ -146,7 +146,7 @@ export default class DOMRectReadOnly {
|
|
|
146
146
|
/**
|
|
147
147
|
* Creates a new `DOMRectReadOnly` object with a given location and dimensions.
|
|
148
148
|
*/
|
|
149
|
-
static fromRect(rect?: ?
|
|
149
|
+
static fromRect(rect?: ?DOMRectInit): DOMRectReadOnly {
|
|
150
150
|
if (!rect) {
|
|
151
151
|
return new DOMRectReadOnly();
|
|
152
152
|
}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// flowlint unsafe-getters-setters:off
|
|
12
12
|
|
|
13
13
|
import type {
|
|
14
|
-
|
|
14
|
+
HostInstance,
|
|
15
15
|
INativeMethods,
|
|
16
16
|
InternalInstanceHandle,
|
|
17
17
|
MeasureInWindowOnSuccessCallback,
|
|
@@ -19,7 +19,6 @@ import type {
|
|
|
19
19
|
MeasureOnSuccessCallback,
|
|
20
20
|
ViewConfig,
|
|
21
21
|
} from '../../../../../Libraries/Renderer/shims/ReactNativeTypes';
|
|
22
|
-
import type {ElementRef} from 'react';
|
|
23
22
|
|
|
24
23
|
import TextInputState from '../../../../../Libraries/Components/TextInput/TextInputState';
|
|
25
24
|
import {getFabricUIManager} from '../../../../../Libraries/ReactNative/FabricUIManager';
|
|
@@ -143,7 +142,7 @@ export default class ReactNativeElement
|
|
|
143
142
|
}
|
|
144
143
|
|
|
145
144
|
measureLayout(
|
|
146
|
-
relativeToNativeNode: number |
|
|
145
|
+
relativeToNativeNode: number | HostInstance,
|
|
147
146
|
onSuccess: MeasureLayoutOnSuccessCallback,
|
|
148
147
|
onFail?: () => void /* currently unused */,
|
|
149
148
|
) {
|
|
@@ -25,6 +25,18 @@ type IntersectionObserverInit = {
|
|
|
25
25
|
// root?: ReactNativeElement, // This option exists on the Web but it's not currently supported in React Native.
|
|
26
26
|
// rootMargin?: string, // This option exists on the Web but it's not currently supported in React Native.
|
|
27
27
|
threshold?: number | $ReadOnlyArray<number>,
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* This is a React Native specific option (not spec compliant) that specifies
|
|
31
|
+
* ratio threshold(s) of the intersection area to the total `root` area.
|
|
32
|
+
*
|
|
33
|
+
* If set, it will either be a singular ratio value between 0-1 (inclusive)
|
|
34
|
+
* or an array of such ratios.
|
|
35
|
+
*
|
|
36
|
+
* Note: If `rn_rootThreshold` is set, and `threshold` is not set,
|
|
37
|
+
* `threshold` will not default to [0] (as per spec)
|
|
38
|
+
*/
|
|
39
|
+
rn_rootThreshold?: number | $ReadOnlyArray<number>,
|
|
28
40
|
};
|
|
29
41
|
|
|
30
42
|
/**
|
|
@@ -44,13 +56,16 @@ type IntersectionObserverInit = {
|
|
|
44
56
|
* elements with the same observer.
|
|
45
57
|
*
|
|
46
58
|
* This implementation only supports the `threshold` option at the moment
|
|
47
|
-
* (`root` and `rootMargin` are not supported)
|
|
59
|
+
* (`root` and `rootMargin` are not supported) and provides a React Native specific
|
|
60
|
+
* option `rn_rootThreshold`.
|
|
61
|
+
*
|
|
48
62
|
*/
|
|
49
63
|
export default class IntersectionObserver {
|
|
50
64
|
_callback: IntersectionObserverCallback;
|
|
51
65
|
_thresholds: $ReadOnlyArray<number>;
|
|
52
66
|
_observationTargets: Set<ReactNativeElement> = new Set();
|
|
53
67
|
_intersectionObserverId: ?IntersectionObserverId;
|
|
68
|
+
_rootThresholds: $ReadOnlyArray<number> | null;
|
|
54
69
|
|
|
55
70
|
constructor(
|
|
56
71
|
callback: IntersectionObserverCallback,
|
|
@@ -83,7 +98,12 @@ export default class IntersectionObserver {
|
|
|
83
98
|
}
|
|
84
99
|
|
|
85
100
|
this._callback = callback;
|
|
86
|
-
|
|
101
|
+
|
|
102
|
+
this._rootThresholds = normalizeRootThreshold(options?.rn_rootThreshold);
|
|
103
|
+
this._thresholds = normalizeThreshold(
|
|
104
|
+
options?.threshold,
|
|
105
|
+
this._rootThresholds != null, // only provide default if no rootThreshold
|
|
106
|
+
);
|
|
87
107
|
}
|
|
88
108
|
|
|
89
109
|
/**
|
|
@@ -115,14 +135,27 @@ export default class IntersectionObserver {
|
|
|
115
135
|
* A list of thresholds, sorted in increasing numeric order, where each
|
|
116
136
|
* threshold is a ratio of intersection area to bounding box area of an
|
|
117
137
|
* observed target.
|
|
118
|
-
* Notifications for a target are generated when any of the thresholds
|
|
119
|
-
* crossed for that target.
|
|
120
|
-
*
|
|
138
|
+
* Notifications for a target are generated when any of the thresholds specified
|
|
139
|
+
* in `rn_rootThreshold` or `threshold` are crossed for that target.
|
|
140
|
+
*
|
|
141
|
+
* If no value was passed to the constructor, and no `rn_rootThreshold`
|
|
142
|
+
* is set, `0` is used.
|
|
121
143
|
*/
|
|
122
144
|
get thresholds(): $ReadOnlyArray<number> {
|
|
123
145
|
return this._thresholds;
|
|
124
146
|
}
|
|
125
147
|
|
|
148
|
+
/**
|
|
149
|
+
* A list of root thresholds, sorted in increasing numeric order, where each
|
|
150
|
+
* threshold is a ratio of intersection area to bounding box area of the specified
|
|
151
|
+
* root view, which defaults to the viewport.
|
|
152
|
+
* Notifications for a target are generated when any of the thresholds specified
|
|
153
|
+
* in `rn_rootThreshold` or `threshold` are crossed for that target.
|
|
154
|
+
*/
|
|
155
|
+
get rootThresholds(): $ReadOnlyArray<number> | null {
|
|
156
|
+
return this._rootThresholds;
|
|
157
|
+
}
|
|
158
|
+
|
|
126
159
|
/**
|
|
127
160
|
* Adds an element to the set of target elements being watched by the
|
|
128
161
|
* `IntersectionObserver`.
|
|
@@ -131,6 +164,12 @@ export default class IntersectionObserver {
|
|
|
131
164
|
* To stop observing the element, call `IntersectionObserver.unobserve()`.
|
|
132
165
|
*/
|
|
133
166
|
observe(target: ReactNativeElement): void {
|
|
167
|
+
if (target == null) {
|
|
168
|
+
throw new TypeError(
|
|
169
|
+
"Failed to execute 'observe' on 'IntersectionObserver': parameter 1 is null or undefined.",
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
|
|
134
173
|
if (!(target instanceof ReactNativeElement)) {
|
|
135
174
|
throw new TypeError(
|
|
136
175
|
"Failed to execute 'observe' on 'IntersectionObserver': parameter 1 is not of type 'ReactNativeElement'.",
|
|
@@ -215,32 +254,84 @@ export default class IntersectionObserver {
|
|
|
215
254
|
* Converts the user defined `threshold` value into an array of sorted valid
|
|
216
255
|
* threshold options for `IntersectionObserver` (double ∈ [0, 1]).
|
|
217
256
|
*
|
|
257
|
+
* If `defaultEmpty` is true, then defaults to empty array, otherwise [0].
|
|
258
|
+
*
|
|
218
259
|
* @example
|
|
219
260
|
* normalizeThresholds(0.5); // → [0.5]
|
|
220
261
|
* normalizeThresholds([1, 0.5, 0]); // → [0, 0.5, 1]
|
|
221
262
|
* normalizeThresholds(['1', '0.5', '0']); // → [0, 0.5, 1]
|
|
263
|
+
* normalizeThresholds(null); // → [0]
|
|
264
|
+
* normalizeThresholds([null, null]); // → [0, 0]
|
|
265
|
+
*
|
|
266
|
+
* normalizeThresholds([null], true); // → [0]
|
|
267
|
+
* normalizeThresholds(null, true); // → []
|
|
268
|
+
* normalizeThresholds([], true); // → []
|
|
222
269
|
*/
|
|
223
|
-
function
|
|
270
|
+
function normalizeThreshold(
|
|
271
|
+
threshold: mixed,
|
|
272
|
+
defaultEmpty: boolean = false,
|
|
273
|
+
): $ReadOnlyArray<number> {
|
|
224
274
|
if (Array.isArray(threshold)) {
|
|
225
275
|
if (threshold.length > 0) {
|
|
226
|
-
return threshold
|
|
276
|
+
return threshold
|
|
277
|
+
.map(t => normalizeThresholdValue(t, 'threshold'))
|
|
278
|
+
.map(t => t ?? 0)
|
|
279
|
+
.sort();
|
|
280
|
+
} else if (defaultEmpty) {
|
|
281
|
+
return [];
|
|
227
282
|
} else {
|
|
228
283
|
return [0];
|
|
229
284
|
}
|
|
230
285
|
}
|
|
231
286
|
|
|
232
|
-
|
|
287
|
+
const normalized = normalizeThresholdValue(threshold, 'threshold');
|
|
288
|
+
if (normalized == null) {
|
|
289
|
+
return defaultEmpty ? [] : [0];
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
return [normalized];
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Converts the user defined `rn_rootThreshold` value into an array of sorted valid
|
|
297
|
+
* threshold options for `IntersectionObserver` (double ∈ [0, 1]).
|
|
298
|
+
*
|
|
299
|
+
* If invalid array or null, returns null.
|
|
300
|
+
*
|
|
301
|
+
* @example
|
|
302
|
+
* normalizeRootThreshold(0.5); // → [0.5]
|
|
303
|
+
* normalizeRootThresholds([1, 0.5, 0]); // → [0, 0.5, 1]
|
|
304
|
+
* normalizeRootThresholds([null, '0.5', '0']); // → [0, 0.5]
|
|
305
|
+
* normalizeRootThresholds(null); // → null
|
|
306
|
+
* normalizeRootThresholds([null, null]); // → null
|
|
307
|
+
*/
|
|
308
|
+
function normalizeRootThreshold(
|
|
309
|
+
rootThreshold: mixed,
|
|
310
|
+
): null | $ReadOnlyArray<number> {
|
|
311
|
+
if (Array.isArray(rootThreshold)) {
|
|
312
|
+
const normalizedArr = rootThreshold
|
|
313
|
+
.map(rt => normalizeThresholdValue(rt, 'rn_rootThreshold'))
|
|
314
|
+
.filter((rt): rt is number => rt != null)
|
|
315
|
+
.sort();
|
|
316
|
+
return normalizedArr.length === 0 ? null : normalizedArr;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
const normalized = normalizeThresholdValue(rootThreshold, 'rn_rootThreshold');
|
|
320
|
+
return normalized == null ? null : [normalized];
|
|
233
321
|
}
|
|
234
322
|
|
|
235
|
-
function normalizeThresholdValue(
|
|
323
|
+
function normalizeThresholdValue(
|
|
324
|
+
threshold: mixed,
|
|
325
|
+
property: string,
|
|
326
|
+
): null | number {
|
|
236
327
|
if (threshold == null) {
|
|
237
|
-
return
|
|
328
|
+
return null;
|
|
238
329
|
}
|
|
239
330
|
|
|
240
331
|
const thresholdAsNumber = Number(threshold);
|
|
241
332
|
if (!Number.isFinite(thresholdAsNumber)) {
|
|
242
333
|
throw new TypeError(
|
|
243
|
-
|
|
334
|
+
`Failed to read the '${property}' property from 'IntersectionObserverInit': The provided double value is non-finite.`,
|
|
244
335
|
);
|
|
245
336
|
}
|
|
246
337
|
|
|
@@ -74,6 +74,32 @@ export default class IntersectionObserverEntry {
|
|
|
74
74
|
return Math.min(ratio, 1);
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
+
/**
|
|
78
|
+
* Returns the ratio of the `intersectionRect` to the `boundingRootRect`.
|
|
79
|
+
*/
|
|
80
|
+
get rn_intersectionRootRatio(): number {
|
|
81
|
+
const intersectionRect = this.intersectionRect;
|
|
82
|
+
|
|
83
|
+
const rootRect = this._nativeEntry.rootRect;
|
|
84
|
+
const boundingRootRect = new DOMRectReadOnly(
|
|
85
|
+
rootRect[0],
|
|
86
|
+
rootRect[1],
|
|
87
|
+
rootRect[2],
|
|
88
|
+
rootRect[3],
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
if (boundingRootRect.width === 0 || boundingRootRect.height === 0) {
|
|
92
|
+
return 0;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const ratio =
|
|
96
|
+
(intersectionRect.width * intersectionRect.height) /
|
|
97
|
+
(boundingRootRect.width * boundingRootRect.height);
|
|
98
|
+
|
|
99
|
+
// Prevent rounding errors from making this value greater than 1.
|
|
100
|
+
return Math.min(ratio, 1);
|
|
101
|
+
}
|
|
102
|
+
|
|
77
103
|
/**
|
|
78
104
|
* Returns a `DOMRectReadOnly` representing the target's visible area.
|
|
79
105
|
*/
|
package/src/private/webapis/intersectionobserver/specs/__mocks__/NativeIntersectionObserver.js
CHANGED
|
@@ -23,8 +23,10 @@ import nullthrows from 'nullthrows';
|
|
|
23
23
|
|
|
24
24
|
type ObserverState = {
|
|
25
25
|
thresholds: $ReadOnlyArray<number>,
|
|
26
|
+
rootThresholds?: ?$ReadOnlyArray<number>,
|
|
26
27
|
intersecting: boolean,
|
|
27
28
|
currentThreshold: ?number,
|
|
29
|
+
currentRootThreshold: ?number,
|
|
28
30
|
};
|
|
29
31
|
|
|
30
32
|
type Observation = {
|
|
@@ -74,8 +76,10 @@ const NativeIntersectionObserverMock = {
|
|
|
74
76
|
...options,
|
|
75
77
|
state: {
|
|
76
78
|
thresholds: options.thresholds,
|
|
79
|
+
rootThresholds: options.rootThresholds,
|
|
77
80
|
intersecting: false,
|
|
78
81
|
currentThreshold: null,
|
|
82
|
+
currentRootThreshold: null,
|
|
79
83
|
},
|
|
80
84
|
};
|
|
81
85
|
observations.push(observation);
|
|
@@ -141,9 +145,14 @@ const NativeIntersectionObserverMock = {
|
|
|
141
145
|
if (observation.state.intersecting) {
|
|
142
146
|
observation.state.intersecting = false;
|
|
143
147
|
observation.state.currentThreshold = null;
|
|
148
|
+
observation.state.currentRootThreshold = null;
|
|
144
149
|
} else {
|
|
145
150
|
observation.state.intersecting = true;
|
|
146
151
|
observation.state.currentThreshold = observation.thresholds[0];
|
|
152
|
+
observation.state.currentRootThreshold =
|
|
153
|
+
observation.rootThresholds != null
|
|
154
|
+
? observation.rootThresholds[0]
|
|
155
|
+
: null;
|
|
147
156
|
}
|
|
148
157
|
pendingRecords.push(createRecordFromObservation(observation));
|
|
149
158
|
setImmediate(notifyIntersectionObservers);
|
|
@@ -16,8 +16,8 @@ import type {
|
|
|
16
16
|
} from './PerformanceEntry';
|
|
17
17
|
|
|
18
18
|
import {PerformanceEntry} from './PerformanceEntry';
|
|
19
|
-
import
|
|
20
|
-
import
|
|
19
|
+
import NativePerformance from './specs/NativePerformance';
|
|
20
|
+
import {warnNoNativePerformance} from './Utilities';
|
|
21
21
|
|
|
22
22
|
export type PerformanceEventTimingJSON = {
|
|
23
23
|
...PerformanceEntryJSON,
|
|
@@ -85,14 +85,18 @@ function getCachedEventCounts(): Map<string, number> {
|
|
|
85
85
|
if (cachedEventCounts) {
|
|
86
86
|
return cachedEventCounts;
|
|
87
87
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
|
|
89
|
+
if (!NativePerformance || !NativePerformance?.getEventCounts) {
|
|
90
|
+
warnNoNativePerformance();
|
|
91
|
+
cachedEventCounts = new Map();
|
|
92
|
+
return cachedEventCounts;
|
|
91
93
|
}
|
|
92
94
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
+
const eventCounts = new Map<string, number>(
|
|
96
|
+
NativePerformance.getEventCounts?.() ?? [],
|
|
95
97
|
);
|
|
98
|
+
cachedEventCounts = eventCounts;
|
|
99
|
+
|
|
96
100
|
// $FlowFixMe[incompatible-call]
|
|
97
101
|
global.queueMicrotask(() => {
|
|
98
102
|
// To be consistent with the calls to the API from the same task,
|
|
@@ -101,7 +105,8 @@ function getCachedEventCounts(): Map<string, number> {
|
|
|
101
105
|
// after the current task is guaranteed to have finished.
|
|
102
106
|
cachedEventCounts = null;
|
|
103
107
|
});
|
|
104
|
-
|
|
108
|
+
|
|
109
|
+
return eventCounts;
|
|
105
110
|
}
|
|
106
111
|
|
|
107
112
|
/**
|