@office-iss/react-native-win32 0.71.5 → 0.72.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 +15 -3
- package/CHANGELOG.json +321 -45
- package/CHANGELOG.md +149 -26
- package/IntegrationTests/IntegrationTestHarnessTest.js +1 -0
- package/Libraries/ActionSheetIOS/ActionSheetIOS.js +1 -1
- package/Libraries/Alert/Alert.d.ts +4 -4
- package/Libraries/Alert/Alert.win32.js +1 -0
- package/Libraries/Animated/Animated.d.ts +17 -6
- package/Libraries/Animated/NativeAnimatedHelper.js +18 -6
- package/Libraries/Animated/NativeAnimatedHelper.win32.js +606 -0
- package/Libraries/Animated/bezier.js +1 -1
- package/Libraries/Animated/components/AnimatedFlatList.js +8 -3
- package/Libraries/Animated/components/AnimatedScrollView.js +4 -1
- package/Libraries/Animated/components/AnimatedSectionList.js +12 -3
- package/Libraries/Animated/createAnimatedComponent.js +26 -239
- package/Libraries/Animated/nodes/AnimatedColor.js +47 -80
- package/Libraries/Animated/nodes/AnimatedInterpolation.js +167 -121
- package/Libraries/Animated/nodes/AnimatedNode.js +3 -5
- package/Libraries/Animated/nodes/AnimatedProps.js +7 -6
- package/Libraries/Animated/nodes/AnimatedStyle.js +42 -8
- package/Libraries/Animated/nodes/AnimatedTransform.js +1 -1
- package/Libraries/Animated/nodes/AnimatedValue.js +8 -12
- package/Libraries/Animated/nodes/AnimatedWithChildren.js +1 -1
- package/Libraries/Animated/useAnimatedProps.js +7 -10
- package/Libraries/BatchedBridge/MessageQueue.js +2 -1
- package/Libraries/BatchedBridge/NativeModules.d.ts +1 -1
- package/Libraries/BatchedBridge/NativeModules.js +1 -0
- package/Libraries/Blob/Blob.js +4 -0
- package/Libraries/Blob/FileReader.js +30 -2
- package/Libraries/Blob/URL.js +3 -1
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +2 -2
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +2 -3
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js +2 -3
- package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +6 -4
- package/Libraries/Components/Button.js +3 -2
- package/Libraries/Components/Button.win32.js +451 -0
- package/Libraries/Components/Clipboard/Clipboard.js +1 -1
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +4 -0
- package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +1 -0
- package/Libraries/Components/Pressable/Pressable.d.ts +1 -1
- package/Libraries/Components/Pressable/Pressable.js +1 -1
- package/Libraries/Components/RefreshControl/RefreshControl.js +1 -0
- package/Libraries/Components/SafeAreaView/SafeAreaView.js +1 -2
- package/Libraries/Components/SafeAreaView/SafeAreaView.win32.js +1 -2
- package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +12 -6
- package/Libraries/Components/ScrollView/ScrollView.d.ts +2 -2
- package/Libraries/Components/ScrollView/ScrollView.js +149 -91
- package/Libraries/Components/ScrollView/ScrollView.win32.js +1939 -0
- package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +16 -6
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +5 -7
- package/Libraries/Components/ScrollView/ScrollViewViewConfig.js +1 -1
- package/Libraries/Components/StatusBar/StatusBar.js +3 -0
- package/Libraries/Components/Switch/Switch.js +3 -1
- package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +21 -11
- package/Libraries/Components/TextInput/InputAccessoryView.d.ts +1 -1
- package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +11 -5
- package/Libraries/Components/TextInput/TextInput.Types.win32.d.ts +51 -0
- package/Libraries/Components/TextInput/TextInput.Types.win32.js +3 -0
- package/Libraries/Components/TextInput/TextInput.Types.win32.js.map +1 -0
- package/Libraries/Components/TextInput/TextInput.d.ts +15 -5
- package/Libraries/Components/TextInput/TextInput.flow.js +1 -1
- package/Libraries/Components/TextInput/TextInput.js +130 -103
- package/Libraries/Components/TextInput/TextInput.win32.js +202 -890
- package/Libraries/Components/Touchable/Touchable.d.ts +1 -1
- package/Libraries/Components/Touchable/Touchable.flow.js +30 -4
- package/Libraries/Components/Touchable/Touchable.js +6 -3
- package/Libraries/Components/Touchable/Touchable.win32.js +6 -3
- package/Libraries/Components/Touchable/TouchableHighlight.js +1 -1
- package/Libraries/Components/Touchable/TouchableNativeFeedback.js +2 -2
- package/Libraries/Components/Touchable/TouchableOpacity.js +3 -0
- package/Libraries/Components/Touchable/TouchableWin32.js.map +1 -1
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.d.ts +1 -1
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +2 -2
- package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlay.js +179 -0
- package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlayNativeComponent.js +43 -0
- package/Libraries/Components/View/ReactNativeStyleAttributes.js +26 -0
- package/Libraries/Components/View/View.js +35 -16
- package/Libraries/Components/View/View.win32.js +38 -16
- package/Libraries/Components/View/ViewAccessibility.d.ts +6 -6
- package/Libraries/Components/View/ViewAccessibility.js +10 -1
- package/Libraries/Components/View/ViewAccessibility.win32.d.ts +5 -5
- package/Libraries/Components/View/ViewNativeComponent.js +32 -8
- package/Libraries/Components/View/ViewPropTypes.d.ts +1 -1
- package/Libraries/Components/View/ViewPropTypes.js +1 -1
- package/Libraries/Components/View/ViewPropTypes.win32.d.ts +1 -1
- package/Libraries/Components/View/ViewPropTypes.win32.js +1 -1
- package/Libraries/Components/View/ViewWin32.js +2 -35
- package/Libraries/Core/Devtools/openFileInEditor.js +1 -0
- package/Libraries/Core/Devtools/openURLInBrowser.js +1 -0
- package/Libraries/Core/Devtools/parseErrorStack.js +2 -2
- package/Libraries/Core/Devtools/parseHermesStack.js +54 -34
- package/Libraries/Core/ExceptionsManager.js +2 -2
- package/Libraries/Core/InitializeCore.js +2 -1
- package/Libraries/Core/ReactNativeVersion.js +3 -3
- package/Libraries/Core/ReactNativeVersionCheck.js +4 -8
- package/Libraries/Core/ReactNativeVersionCheck.win32.js +4 -8
- package/Libraries/Core/Timers/JSTimers.js +1 -1
- package/Libraries/Core/Timers/immediateShim.js +1 -0
- package/Libraries/Core/Timers/queueMicrotask.js +1 -1
- package/Libraries/Core/setUpAlert.js +1 -1
- package/Libraries/Core/setUpDOM.js +18 -0
- package/Libraries/Core/setUpDeveloperTools.js +1 -1
- package/Libraries/Core/setUpGlobals.js +5 -2
- package/Libraries/Core/setUpNavigator.js +6 -5
- package/Libraries/Core/setUpPerformance.js +23 -13
- package/Libraries/Core/setUpReactDevTools.js +2 -0
- package/Libraries/Core/setUpSegmentFetcher.js +0 -41
- package/Libraries/Core/setUpTimers.js +2 -2
- package/Libraries/DOM/Geometry/DOMRect.js +82 -0
- package/Libraries/DOM/Geometry/DOMRectReadOnly.js +188 -0
- package/Libraries/DOM/Nodes/ReactNativeElement.js +75 -0
- package/Libraries/DOM/Nodes/ReadOnlyElement.js +89 -0
- package/Libraries/DOM/Nodes/ReadOnlyNode.js +167 -0
- package/Libraries/DOM/OldStyleCollections/ArrayLikeUtils.js +46 -0
- package/Libraries/DOM/OldStyleCollections/DOMRectList.js +76 -0
- package/Libraries/DOM/OldStyleCollections/HTMLCollection.js +82 -0
- package/Libraries/DOM/OldStyleCollections/NodeList.js +104 -0
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.android.js +35 -0
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.d.ts +20 -0
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.ios.js +49 -0
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.win32.js +35 -0
- package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +24 -0
- package/Libraries/EventEmitter/NativeEventEmitter.d.ts +1 -2
- package/Libraries/EventEmitter/RCTDeviceEventEmitter.d.ts +1 -2
- package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +9 -1
- package/Libraries/Events/EventPolyfill.js +1 -1
- package/Libraries/Image/AssetRegistry.js +1 -1
- package/Libraries/Image/AssetSourceResolver.js +3 -3
- package/Libraries/Image/Image.android.js +4 -1
- package/Libraries/Image/Image.d.ts +63 -2
- package/Libraries/Image/Image.ios.js +3 -0
- package/Libraries/Image/Image.win32.js +3 -0
- package/Libraries/Image/ImageBackground.js +1 -0
- package/Libraries/Image/ImageProps.js +1 -1
- package/Libraries/Image/ImageViewNativeComponent.js +4 -4
- package/Libraries/Image/RelativeImageStub.js +1 -1
- package/Libraries/Image/TextInlineImageNativeComponent.js +1 -1
- package/Libraries/Image/resolveAssetSource.js +1 -1
- package/Libraries/Inspector/DevtoolsOverlay.js +26 -19
- package/Libraries/Inspector/ElementBox.js +4 -1
- package/Libraries/Inspector/Inspector.js +5 -6
- package/Libraries/Inspector/Inspector.win32.js +7 -6
- package/Libraries/Inspector/InspectorOverlay.js +3 -3
- package/Libraries/Inspector/InspectorOverlay.win32.js +2 -1
- package/Libraries/Inspector/NetworkOverlay.js +1 -1
- package/Libraries/Interaction/JSEventLoopWatchdog.js +1 -1
- package/Libraries/Interaction/PanResponder.js +5 -6
- package/Libraries/LayoutAnimation/LayoutAnimation.js +2 -1
- package/Libraries/Linking/Linking.js +1 -4
- package/Libraries/Lists/FillRateHelper.js +4 -238
- package/Libraries/Lists/FlatList.d.ts +15 -22
- package/Libraries/Lists/FlatList.js +9 -6
- package/Libraries/Lists/SectionList.d.ts +10 -6
- package/Libraries/Lists/SectionList.js +5 -3
- package/Libraries/Lists/SectionListModern.js +3 -3
- package/Libraries/Lists/ViewabilityHelper.js +8 -344
- package/Libraries/Lists/VirtualizeUtils.js +4 -244
- package/Libraries/Lists/VirtualizedList.js +10 -1867
- package/Libraries/Lists/VirtualizedListContext.js +6 -104
- package/Libraries/Lists/VirtualizedSectionList.js +9 -602
- package/Libraries/Lists/__flowtests__/FlatList-flowtest.js +1 -0
- package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +1 -1
- package/Libraries/LogBox/Data/LogBoxData.js +1 -1
- package/Libraries/LogBox/Data/parseLogBoxLog.js +1 -1
- package/Libraries/LogBox/LogBox.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspector.js +1 -3
- package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.win32.js +168 -0
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.win32.js +3 -0
- package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js +193 -0
- package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +1 -0
- package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.js +2 -2
- package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.win32.js +7 -3
- package/Libraries/LogBox/UI/LogBoxMessage.js +87 -5
- package/Libraries/LogBox/UI/LogBoxNotification.js +5 -7
- package/Libraries/Modal/Modal.js +2 -2
- package/Libraries/NativeComponent/BaseViewConfig.android.js +32 -12
- package/Libraries/NativeComponent/BaseViewConfig.ios.js +43 -19
- package/Libraries/NativeComponent/BaseViewConfig.win32.js +43 -19
- package/Libraries/NativeComponent/NativeComponentRegistryUnstable.js +4 -1
- package/Libraries/NativeComponent/ViewConfig.js +1 -0
- package/Libraries/NativeComponent/ViewConfigIgnore.js +1 -4
- package/Libraries/Network/RCTNetworking.android.js +2 -2
- package/Libraries/Network/RCTNetworking.ios.js +1 -1
- package/Libraries/Network/RCTNetworking.win32.js +1 -1
- package/Libraries/Network/XMLHttpRequest.js +1 -1
- package/Libraries/Pressability/Pressability.js +10 -4
- package/Libraries/Pressability/Pressability.win32.js +9 -3
- package/Libraries/ReactNative/AppContainer.js +7 -1
- package/Libraries/ReactNative/AppRegistry.d.ts +1 -1
- package/Libraries/ReactNative/AppRegistry.js +10 -13
- package/Libraries/ReactNative/FabricUIManager.js +24 -8
- package/Libraries/ReactNative/NativeUIManager.js +5 -5
- package/Libraries/ReactNative/ReactNativeFeatureFlags.js +10 -10
- package/Libraries/ReactNative/UIManager.js +168 -1
- package/Libraries/ReactNative/getCachedComponentWithDebugName.js +5 -5
- package/Libraries/ReactNative/getNativeComponentAttributes.js +1 -1
- package/Libraries/ReactNative/requireNativeComponent.d.ts +1 -1
- package/Libraries/ReactNative/requireNativeComponent.js +1 -1
- package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +1 -0
- package/Libraries/Renderer/implementations/ReactFabric-dev.js +26 -3
- package/Libraries/Renderer/implementations/ReactFabric-prod.js +13 -1
- package/Libraries/Renderer/implementations/ReactFabric-profiling.js +13 -1
- package/Libraries/Renderer/public/ReactFabricPublicInstanceUtils.js +38 -0
- package/Libraries/Renderer/shims/ReactNativeTypes.js +6 -6
- package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +7 -7
- package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
- package/Libraries/Share/Share.js +1 -1
- package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +1 -1
- package/Libraries/StyleSheet/StyleSheet.js +1 -1
- package/Libraries/StyleSheet/StyleSheet.win32.js +1 -1
- package/Libraries/StyleSheet/StyleSheetTypes.d.ts +115 -76
- package/Libraries/StyleSheet/StyleSheetTypes.js +188 -33
- package/Libraries/StyleSheet/flattenStyle.js +2 -0
- package/Libraries/StyleSheet/normalizeColor.js +1 -1
- package/Libraries/StyleSheet/processColor.js +1 -1
- package/Libraries/Text/Text.d.ts +12 -2
- package/Libraries/Text/Text.js +50 -41
- package/Libraries/Text/TextProps.js +3 -4
- package/Libraries/TurboModule/samples/NativeSampleTurboModule.js +6 -0
- package/Libraries/Types/CodegenTypes.js +1 -0
- package/Libraries/UTFSequence.js +3 -1
- package/Libraries/Utilities/Appearance.d.ts +10 -0
- package/Libraries/Utilities/Appearance.js +13 -0
- package/Libraries/Utilities/Dimensions.js +1 -1
- package/Libraries/Utilities/Dimensions.win32.js +1 -1
- package/Libraries/Utilities/GlobalPerformanceLogger.js +12 -1
- package/Libraries/Utilities/HMRClient.js +16 -10
- package/Libraries/Utilities/{createPerformanceLogger.d.ts → IPerformanceLogger.d.ts} +4 -4
- package/Libraries/Utilities/IPerformanceLogger.js +49 -0
- package/Libraries/Utilities/LoadingView.android.js +28 -11
- package/Libraries/Utilities/NativeAppearance.js +1 -0
- package/Libraries/Utilities/NativePlatformConstantsWin.js +1 -1
- package/Libraries/Utilities/PixelRatio.js +2 -2
- package/Libraries/Utilities/Platform.win32.js +1 -1
- package/Libraries/Utilities/ReactNativeTestTools.js +1 -1
- package/Libraries/Utilities/__mocks__/PixelRatio.js +1 -1
- package/Libraries/Utilities/codegenNativeCommands.js +2 -0
- package/Libraries/Utilities/createPerformanceLogger.js +55 -43
- package/Libraries/Utilities/stringifySafe.js +2 -7
- package/Libraries/Utilities/useColorScheme.win32.js +26 -0
- package/Libraries/Utilities/useWindowDimensions.js +3 -3
- package/Libraries/WebPerformance/EventCounts.js +78 -0
- package/Libraries/WebPerformance/MemoryInfo.js +54 -0
- package/Libraries/WebPerformance/NativePerformance.js +38 -0
- package/Libraries/WebPerformance/NativePerformanceObserver.js +22 -7
- package/Libraries/WebPerformance/Performance.js +312 -0
- package/Libraries/WebPerformance/PerformanceEntry.js +45 -0
- package/Libraries/WebPerformance/PerformanceEventTiming.js +38 -0
- package/Libraries/WebPerformance/PerformanceObserver.js +196 -101
- package/Libraries/WebPerformance/RawPerformanceEntry.js +87 -0
- package/Libraries/WebPerformance/ReactNativeStartupTiming.js +65 -0
- package/Libraries/WebPerformance/__mocks__/NativePerformance.js +65 -0
- package/Libraries/WebPerformance/__mocks__/NativePerformanceObserver.js +101 -0
- package/Libraries/YellowBox/YellowBoxDeprecated.js +1 -1
- package/Libraries/vendor/core/ErrorUtils.js +1 -1
- package/Libraries/vendor/emitter/EventEmitter.d.ts +2 -2
- package/Libraries/vendor/emitter/EventEmitter.js +9 -1
- package/flow/global.js +29 -4
- package/flow/jest.js +258 -164
- package/flow/use-sync-external-store.js +1 -0
- package/index.js +56 -42
- package/index.win32.js +56 -42
- package/interface.js +1 -1
- package/jest/local-setup.js +33 -0
- package/jest/mockComponent.js +4 -2
- package/jest/mockNativeComponent.js +1 -1
- package/jest/mockScrollView.js +2 -1
- package/jest/react-native-env.js +1 -3
- package/jest/setup.js +11 -8
- package/overrides.json +122 -85
- package/package.json +40 -30
- package/rn-get-polyfills.js +1 -1
- package/src/Libraries/Components/TextInput/TextInput.Types.win32.ts +68 -0
- package/src/Libraries/Components/Touchable/TouchableWin32.tsx +3 -3
- package/src/Libraries/Components/View/ViewAccessibility.win32.d.ts +5 -5
- package/src/Libraries/Components/View/ViewPropTypes.win32.d.ts +1 -1
- package/types/index.d.ts +2 -6
- package/types/modules/Codegen.d.ts +4 -4
- package/types/modules/globals.d.ts +27 -25
- package/types/public/DeprecatedPropertiesAlias.d.ts +0 -20
- package/types/public/ReactNativeRenderer.d.ts +2 -7
- package/Libraries/Animated/createAnimatedComponentInjection.js +0 -48
- package/Libraries/Animated/createAnimatedComponent_EXPERIMENTAL.js +0 -48
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.flow.js +0 -208
- package/Libraries/Components/ActivityIndicator/ActivityIndicator.flow.js +0 -58
- package/Libraries/Components/DatePicker/DatePickerIOS.android.js +0 -47
- package/Libraries/Components/DatePicker/DatePickerIOS.d.ts +0 -92
- package/Libraries/Components/DatePicker/DatePickerIOS.flow.android.js +0 -14
- package/Libraries/Components/DatePicker/DatePickerIOS.flow.ios.js +0 -113
- package/Libraries/Components/DatePicker/DatePickerIOS.ios.js +0 -242
- package/Libraries/Components/DatePicker/DatePickerIOS.win32.js +0 -47
- package/Libraries/Components/DatePicker/RCTDatePickerNativeComponent.js +0 -60
- package/Libraries/Components/DatePickerAndroid/NativeDatePickerAndroid.js +0 -26
- package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.android.js +0 -45
- package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.d.ts +0 -62
- package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.ios.js +0 -75
- package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.win32.js +0 -45
- package/Libraries/Components/ProgressViewIOS/RCTProgressViewNativeComponent.js +0 -33
- package/Libraries/Components/SafeAreaView/SafeAreaView.flow.js +0 -19
- package/Libraries/Components/Slider/Slider.d.ts +0 -132
- package/Libraries/Components/Slider/Slider.js +0 -282
- package/Libraries/Components/Slider/SliderNativeComponent.js +0 -56
- package/Libraries/Components/TextInput/Win32TextInputNativeComponent.js +0 -23
- package/Libraries/Interaction/Batchinator.js +0 -76
- package/Libraries/Interaction/BridgeSpyStallHandler.js +0 -63
- package/Libraries/Interaction/InteractionStallDebugger.js +0 -23
- package/Libraries/Interaction/PanResponder.flow.js +0 -257
- package/Libraries/Lists/CellRenderMask.js +0 -155
- package/Libraries/Lists/ChildListCollection.js +0 -72
- package/Libraries/Lists/StateSafePureComponent.js +0 -85
- package/Libraries/Lists/VirtualizedList.d.ts +0 -347
- package/Libraries/Lists/VirtualizedListCellRenderer.js +0 -259
- package/Libraries/Lists/VirtualizedListProps.js +0 -279
- package/Libraries/Performance/PureComponentDebug.js +0 -74
- package/Libraries/Reliability/UserFlow.js +0 -158
- package/Libraries/Renderer/implementations/ReactNativeRenderer.d.ts +0 -149
- package/Libraries/Renderer/shims/ReactNativeTypes.d.ts +0 -141
- package/Libraries/Utilities/MatrixMath.js +0 -748
- package/Libraries/Utilities/buildStyleInterpolator.js +0 -209
- package/Libraries/Utilities/clamp.js +0 -23
- package/Libraries/Utilities/deprecatedPropType.js +0 -36
- package/Libraries/Utilities/groupByEveryN.js +0 -51
- package/Libraries/Utilities/mergeIntoFast.js +0 -26
- package/Libraries/Utilities/setAndForwardRef.js +0 -71
- package/Libraries/Utilities/truncate.js +0 -51
- package/flow/JSITimerInternalType.js +0 -30
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict-local
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type {CodeFrame} from '../Data/parseLogBoxLog';
|
|
12
|
+
|
|
13
|
+
import ScrollView from '../../Components/ScrollView/ScrollView';
|
|
14
|
+
import View from '../../Components/View/View';
|
|
15
|
+
import openFileInEditor from '../../Core/Devtools/openFileInEditor';
|
|
16
|
+
import StyleSheet from '../../StyleSheet/StyleSheet';
|
|
17
|
+
import Text from '../../Text/Text';
|
|
18
|
+
import Platform from '../../Utilities/Platform';
|
|
19
|
+
import * as LogBoxData from '../Data/LogBoxData';
|
|
20
|
+
import AnsiHighlight from './AnsiHighlight';
|
|
21
|
+
import LogBoxButton from './LogBoxButton';
|
|
22
|
+
import LogBoxInspectorSection from './LogBoxInspectorSection';
|
|
23
|
+
import * as LogBoxStyle from './LogBoxStyle';
|
|
24
|
+
import * as React from 'react';
|
|
25
|
+
type Props = $ReadOnly<{|
|
|
26
|
+
codeFrame: ?CodeFrame,
|
|
27
|
+
|}>;
|
|
28
|
+
|
|
29
|
+
function LogBoxInspectorCodeFrame(props: Props): React.Node {
|
|
30
|
+
const codeFrame = props.codeFrame;
|
|
31
|
+
if (codeFrame == null) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function getFileName() {
|
|
36
|
+
// $FlowFixMe[incompatible-use]
|
|
37
|
+
const matches = /[^/]*$/.exec(codeFrame.fileName);
|
|
38
|
+
if (matches && matches.length > 0) {
|
|
39
|
+
return matches[0];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// $FlowFixMe[incompatible-use]
|
|
43
|
+
return codeFrame.fileName;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function getLocation() {
|
|
47
|
+
// $FlowFixMe[incompatible-use]
|
|
48
|
+
const location = codeFrame.location;
|
|
49
|
+
if (location != null) {
|
|
50
|
+
return ` (${location.row}:${
|
|
51
|
+
location.column + 1 /* Code frame columns are zero indexed */
|
|
52
|
+
})`;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return (
|
|
59
|
+
<LogBoxInspectorSection heading="Source" action={<AppInfo />}>
|
|
60
|
+
<View style={styles.box}>
|
|
61
|
+
<View style={styles.frame}>
|
|
62
|
+
<ScrollView horizontal>
|
|
63
|
+
<AnsiHighlight style={styles.content} text={codeFrame.content} />
|
|
64
|
+
</ScrollView>
|
|
65
|
+
</View>
|
|
66
|
+
<LogBoxButton
|
|
67
|
+
backgroundColor={{
|
|
68
|
+
default: 'transparent',
|
|
69
|
+
pressed: LogBoxStyle.getBackgroundDarkColor(1),
|
|
70
|
+
}}
|
|
71
|
+
style={styles.button}
|
|
72
|
+
onPress={() => {
|
|
73
|
+
openFileInEditor(codeFrame.fileName, codeFrame.location?.row ?? 0);
|
|
74
|
+
}}>
|
|
75
|
+
<Text style={styles.fileText}>
|
|
76
|
+
{getFileName()}
|
|
77
|
+
{getLocation()}
|
|
78
|
+
</Text>
|
|
79
|
+
</LogBoxButton>
|
|
80
|
+
</View>
|
|
81
|
+
</LogBoxInspectorSection>
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function AppInfo() {
|
|
86
|
+
const appInfo = LogBoxData.getAppInfo();
|
|
87
|
+
if (appInfo == null) {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return (
|
|
92
|
+
<LogBoxButton
|
|
93
|
+
backgroundColor={{
|
|
94
|
+
default: 'transparent',
|
|
95
|
+
pressed: appInfo.onPress
|
|
96
|
+
? LogBoxStyle.getBackgroundColor(1)
|
|
97
|
+
: 'transparent',
|
|
98
|
+
}}
|
|
99
|
+
style={appInfoStyles.buildButton}
|
|
100
|
+
onPress={appInfo.onPress}>
|
|
101
|
+
<Text style={appInfoStyles.text}>
|
|
102
|
+
{appInfo.appVersion} ({appInfo.engine})
|
|
103
|
+
</Text>
|
|
104
|
+
</LogBoxButton>
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const appInfoStyles = StyleSheet.create({
|
|
109
|
+
text: {
|
|
110
|
+
color: LogBoxStyle.getTextColor(0.4),
|
|
111
|
+
fontSize: 12,
|
|
112
|
+
lineHeight: 12,
|
|
113
|
+
},
|
|
114
|
+
buildButton: {
|
|
115
|
+
flex: 0,
|
|
116
|
+
flexGrow: 0,
|
|
117
|
+
paddingVertical: 4,
|
|
118
|
+
paddingHorizontal: 5,
|
|
119
|
+
borderRadius: 5,
|
|
120
|
+
marginRight: -8,
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
const styles = StyleSheet.create({
|
|
125
|
+
box: {
|
|
126
|
+
backgroundColor: LogBoxStyle.getBackgroundColor(),
|
|
127
|
+
marginLeft: 10,
|
|
128
|
+
marginRight: 10,
|
|
129
|
+
marginTop: 5,
|
|
130
|
+
borderRadius: 3,
|
|
131
|
+
},
|
|
132
|
+
frame: {
|
|
133
|
+
padding: 10,
|
|
134
|
+
borderBottomColor: LogBoxStyle.getTextColor(0.1),
|
|
135
|
+
borderBottomWidth: 1,
|
|
136
|
+
},
|
|
137
|
+
button: {
|
|
138
|
+
paddingTop: 10,
|
|
139
|
+
paddingBottom: 10,
|
|
140
|
+
},
|
|
141
|
+
content: {
|
|
142
|
+
color: LogBoxStyle.getTextColor(1),
|
|
143
|
+
fontSize: 12,
|
|
144
|
+
includeFontPadding: false,
|
|
145
|
+
lineHeight: 20,
|
|
146
|
+
// $FlowFixMe[underconstrained-implicit-instantiation]
|
|
147
|
+
fontFamily: Platform.select({
|
|
148
|
+
android: 'monospace',
|
|
149
|
+
ios: 'Menlo',
|
|
150
|
+
win32: 'Consolas',
|
|
151
|
+
}),
|
|
152
|
+
},
|
|
153
|
+
fileText: {
|
|
154
|
+
color: LogBoxStyle.getTextColor(0.5),
|
|
155
|
+
textAlign: 'center',
|
|
156
|
+
flex: 1,
|
|
157
|
+
fontSize: 12,
|
|
158
|
+
includeFontPadding: false,
|
|
159
|
+
lineHeight: 16,
|
|
160
|
+
fontFamily: Platform.select({
|
|
161
|
+
android: 'monospace',
|
|
162
|
+
ios: 'Menlo',
|
|
163
|
+
win32: 'Consolas', // Win32
|
|
164
|
+
}),
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
export default LogBoxInspectorCodeFrame;
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict-local
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type LogBoxLog from '../Data/LogBoxLog';
|
|
12
|
+
|
|
13
|
+
import View from '../../Components/View/View';
|
|
14
|
+
import openFileInEditor from '../../Core/Devtools/openFileInEditor';
|
|
15
|
+
import StyleSheet from '../../StyleSheet/StyleSheet';
|
|
16
|
+
import Text from '../../Text/Text';
|
|
17
|
+
import Platform from '../../Utilities/Platform';
|
|
18
|
+
import LogBoxButton from './LogBoxButton';
|
|
19
|
+
import LogBoxInspectorSection from './LogBoxInspectorSection';
|
|
20
|
+
import * as LogBoxStyle from './LogBoxStyle';
|
|
21
|
+
import * as React from 'react';
|
|
22
|
+
|
|
23
|
+
type Props = $ReadOnly<{|
|
|
24
|
+
log: LogBoxLog,
|
|
25
|
+
|}>;
|
|
26
|
+
|
|
27
|
+
const BEFORE_SLASH_RE = /^(.*)[\\/]/;
|
|
28
|
+
|
|
29
|
+
// Taken from React https://github.com/facebook/react/blob/206d61f72214e8ae5b935f0bf8628491cb7f0797/packages/react-devtools-shared/src/backend/describeComponentFrame.js#L27-L41
|
|
30
|
+
function getPrettyFileName(path: string) {
|
|
31
|
+
let fileName = path.replace(BEFORE_SLASH_RE, '');
|
|
32
|
+
|
|
33
|
+
// In DEV, include code for a common special case:
|
|
34
|
+
// prefer "folder/index.js" instead of just "index.js".
|
|
35
|
+
if (/^index\./.test(fileName)) {
|
|
36
|
+
const match = path.match(BEFORE_SLASH_RE);
|
|
37
|
+
if (match) {
|
|
38
|
+
const pathBeforeSlash = match[1];
|
|
39
|
+
if (pathBeforeSlash) {
|
|
40
|
+
const folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');
|
|
41
|
+
// Note the below string contains a zero width space after the "/" character.
|
|
42
|
+
// This is to prevent browsers like Chrome from formatting the file name as a link.
|
|
43
|
+
// (Since this is a source link, it would not work to open the source file anyway.)
|
|
44
|
+
fileName = folderName + '/' + fileName;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return fileName;
|
|
50
|
+
}
|
|
51
|
+
function LogBoxInspectorReactFrames(props: Props): React.Node {
|
|
52
|
+
const [collapsed, setCollapsed] = React.useState(true);
|
|
53
|
+
if (props.log.componentStack == null || props.log.componentStack.length < 1) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function getStackList() {
|
|
58
|
+
if (collapsed) {
|
|
59
|
+
return props.log.componentStack.slice(0, 3);
|
|
60
|
+
} else {
|
|
61
|
+
return props.log.componentStack;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function getCollapseMessage() {
|
|
66
|
+
if (props.log.componentStack.length <= 3) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const count = props.log.componentStack.length - 3;
|
|
71
|
+
if (collapsed) {
|
|
72
|
+
return `See ${count} more components`;
|
|
73
|
+
} else {
|
|
74
|
+
return `Collapse ${count} components`;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return (
|
|
79
|
+
<LogBoxInspectorSection heading="Component Stack">
|
|
80
|
+
{getStackList().map((frame, index) => (
|
|
81
|
+
<View
|
|
82
|
+
// Unfortunately we don't have a unique identifier for stack traces.
|
|
83
|
+
key={index}
|
|
84
|
+
style={componentStyles.frameContainer}>
|
|
85
|
+
<LogBoxButton
|
|
86
|
+
backgroundColor={{
|
|
87
|
+
default: 'transparent',
|
|
88
|
+
pressed: LogBoxStyle.getBackgroundColor(1),
|
|
89
|
+
}}
|
|
90
|
+
onPress={
|
|
91
|
+
// Older versions of DevTools do not provide full path.
|
|
92
|
+
// This will not work on Windows, remove check once the
|
|
93
|
+
// DevTools return the full file path.
|
|
94
|
+
frame.fileName.startsWith('/')
|
|
95
|
+
? () =>
|
|
96
|
+
openFileInEditor(frame.fileName, frame.location?.row ?? 1)
|
|
97
|
+
: null
|
|
98
|
+
}
|
|
99
|
+
style={componentStyles.frame}>
|
|
100
|
+
<View style={componentStyles.component}>
|
|
101
|
+
<Text style={componentStyles.frameName}>
|
|
102
|
+
<Text style={componentStyles.bracket}>{'<'}</Text>
|
|
103
|
+
{frame.content}
|
|
104
|
+
<Text style={componentStyles.bracket}>{' />'}</Text>
|
|
105
|
+
</Text>
|
|
106
|
+
</View>
|
|
107
|
+
<Text style={componentStyles.frameLocation}>
|
|
108
|
+
{getPrettyFileName(frame.fileName)}
|
|
109
|
+
{frame.location ? `:${frame.location.row}` : ''}
|
|
110
|
+
</Text>
|
|
111
|
+
</LogBoxButton>
|
|
112
|
+
</View>
|
|
113
|
+
))}
|
|
114
|
+
<View style={componentStyles.collapseContainer}>
|
|
115
|
+
<LogBoxButton
|
|
116
|
+
backgroundColor={{
|
|
117
|
+
default: 'transparent',
|
|
118
|
+
pressed: LogBoxStyle.getBackgroundColor(1),
|
|
119
|
+
}}
|
|
120
|
+
onPress={() => setCollapsed(!collapsed)}
|
|
121
|
+
style={componentStyles.collapseButton}>
|
|
122
|
+
<Text style={componentStyles.collapse}>{getCollapseMessage()}</Text>
|
|
123
|
+
</LogBoxButton>
|
|
124
|
+
</View>
|
|
125
|
+
</LogBoxInspectorSection>
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const componentStyles = StyleSheet.create({
|
|
130
|
+
collapseContainer: {
|
|
131
|
+
marginLeft: 15,
|
|
132
|
+
flexDirection: 'row',
|
|
133
|
+
},
|
|
134
|
+
collapseButton: {
|
|
135
|
+
borderRadius: 5,
|
|
136
|
+
},
|
|
137
|
+
collapse: {
|
|
138
|
+
color: LogBoxStyle.getTextColor(0.7),
|
|
139
|
+
fontSize: 12,
|
|
140
|
+
fontWeight: '300',
|
|
141
|
+
lineHeight: 20,
|
|
142
|
+
marginTop: 0,
|
|
143
|
+
paddingVertical: 5,
|
|
144
|
+
paddingHorizontal: 10,
|
|
145
|
+
},
|
|
146
|
+
frameContainer: {
|
|
147
|
+
flexDirection: 'row',
|
|
148
|
+
paddingHorizontal: 15,
|
|
149
|
+
},
|
|
150
|
+
frame: {
|
|
151
|
+
flex: 1,
|
|
152
|
+
paddingVertical: 4,
|
|
153
|
+
paddingHorizontal: 10,
|
|
154
|
+
borderRadius: 5,
|
|
155
|
+
},
|
|
156
|
+
component: {
|
|
157
|
+
flexDirection: 'row',
|
|
158
|
+
paddingRight: 10,
|
|
159
|
+
},
|
|
160
|
+
frameName: {
|
|
161
|
+
fontFamily: Platform.select({
|
|
162
|
+
android: 'monospace',
|
|
163
|
+
ios: 'Menlo',
|
|
164
|
+
win32: 'Consolas', // Win32
|
|
165
|
+
}),
|
|
166
|
+
color: LogBoxStyle.getTextColor(1),
|
|
167
|
+
fontSize: 14,
|
|
168
|
+
includeFontPadding: false,
|
|
169
|
+
lineHeight: 18,
|
|
170
|
+
},
|
|
171
|
+
bracket: {
|
|
172
|
+
fontFamily: Platform.select({
|
|
173
|
+
android: 'monospace',
|
|
174
|
+
ios: 'Menlo',
|
|
175
|
+
win32: 'Consolas', // Win32
|
|
176
|
+
}),
|
|
177
|
+
color: LogBoxStyle.getTextColor(0.4),
|
|
178
|
+
fontSize: 14,
|
|
179
|
+
fontWeight: '500',
|
|
180
|
+
includeFontPadding: false,
|
|
181
|
+
lineHeight: 18,
|
|
182
|
+
},
|
|
183
|
+
frameLocation: {
|
|
184
|
+
color: LogBoxStyle.getTextColor(0.7),
|
|
185
|
+
fontSize: 12,
|
|
186
|
+
fontWeight: '300',
|
|
187
|
+
includeFontPadding: false,
|
|
188
|
+
lineHeight: 16,
|
|
189
|
+
paddingLeft: 10,
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
export default LogBoxInspectorReactFrames;
|
|
@@ -19,10 +19,10 @@ import LogBoxButton from './LogBoxButton';
|
|
|
19
19
|
import * as LogBoxStyle from './LogBoxStyle';
|
|
20
20
|
import * as React from 'react';
|
|
21
21
|
|
|
22
|
-
type Props = $ReadOnly<{
|
|
22
|
+
type Props = $ReadOnly<{
|
|
23
23
|
frame: StackFrame,
|
|
24
24
|
onPress?: ?(event: PressEvent) => void,
|
|
25
|
-
|
|
25
|
+
}>;
|
|
26
26
|
|
|
27
27
|
function LogBoxInspectorStackFrame(props: Props): React.Node {
|
|
28
28
|
const {frame, onPress} = props;
|
|
@@ -19,10 +19,10 @@ import LogBoxButton from './LogBoxButton';
|
|
|
19
19
|
import * as LogBoxStyle from './LogBoxStyle';
|
|
20
20
|
import * as React from 'react';
|
|
21
21
|
|
|
22
|
-
type Props = $ReadOnly<{
|
|
22
|
+
type Props = $ReadOnly<{
|
|
23
23
|
frame: StackFrame,
|
|
24
24
|
onPress?: ?(event: PressEvent) => void,
|
|
25
|
-
|
|
25
|
+
}>;
|
|
26
26
|
|
|
27
27
|
function LogBoxInspectorStackFrame(props: Props): React.Node {
|
|
28
28
|
const {frame, onPress} = props;
|
|
@@ -88,7 +88,11 @@ const styles = StyleSheet.create({
|
|
|
88
88
|
includeFontPadding: false,
|
|
89
89
|
lineHeight: 18,
|
|
90
90
|
fontWeight: '400',
|
|
91
|
-
fontFamily: Platform.select({
|
|
91
|
+
fontFamily: Platform.select({
|
|
92
|
+
android: 'monospace',
|
|
93
|
+
ios: 'Menlo',
|
|
94
|
+
win32: 'Consolas',
|
|
95
|
+
}),
|
|
92
96
|
},
|
|
93
97
|
location: {
|
|
94
98
|
color: LogBoxStyle.getTextColor(0.8),
|
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
import type {TextStyleProp} from '../../StyleSheet/StyleSheet';
|
|
12
12
|
import type {Message} from '../Data/parseLogBoxLog';
|
|
13
13
|
|
|
14
|
+
import Linking from '../../Linking/Linking';
|
|
15
|
+
import StyleSheet from '../../StyleSheet/StyleSheet';
|
|
14
16
|
import Text from '../../Text/Text';
|
|
15
17
|
import * as React from 'react';
|
|
16
18
|
|
|
@@ -22,6 +24,82 @@ type Props = {
|
|
|
22
24
|
...
|
|
23
25
|
};
|
|
24
26
|
|
|
27
|
+
type Range = {
|
|
28
|
+
lowerBound: number,
|
|
29
|
+
upperBound: number,
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
function getLinkRanges(string: string): $ReadOnlyArray<Range> {
|
|
33
|
+
const regex = /https?:\/\/[^\s$.?#].[^\s]*/gi;
|
|
34
|
+
const matches = [];
|
|
35
|
+
|
|
36
|
+
let regexResult: RegExp$matchResult | null;
|
|
37
|
+
while ((regexResult = regex.exec(string)) !== null) {
|
|
38
|
+
if (regexResult != null) {
|
|
39
|
+
matches.push({
|
|
40
|
+
lowerBound: regexResult.index,
|
|
41
|
+
upperBound: regex.lastIndex,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return matches;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function TappableLinks(props: {
|
|
50
|
+
content: string,
|
|
51
|
+
style: void | TextStyleProp,
|
|
52
|
+
}): React.Node {
|
|
53
|
+
const matches = getLinkRanges(props.content);
|
|
54
|
+
|
|
55
|
+
if (matches.length === 0) {
|
|
56
|
+
// No URLs detected. Just return the content.
|
|
57
|
+
return <Text style={props.style}>{props.content}</Text>;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// URLs were detected. Construct array of Text nodes.
|
|
61
|
+
|
|
62
|
+
let fragments: Array<React.Node> = [];
|
|
63
|
+
let indexCounter = 0;
|
|
64
|
+
let startIndex = 0;
|
|
65
|
+
|
|
66
|
+
for (const linkRange of matches) {
|
|
67
|
+
if (startIndex < linkRange.lowerBound) {
|
|
68
|
+
const text = props.content.substring(startIndex, linkRange.lowerBound);
|
|
69
|
+
fragments.push(<Text key={++indexCounter}>{text}</Text>);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const link = props.content.substring(
|
|
73
|
+
linkRange.lowerBound,
|
|
74
|
+
linkRange.upperBound,
|
|
75
|
+
);
|
|
76
|
+
fragments.push(
|
|
77
|
+
<Text
|
|
78
|
+
onPress={() => {
|
|
79
|
+
// $FlowFixMe[unused-promise]
|
|
80
|
+
Linking.openURL(link);
|
|
81
|
+
}}
|
|
82
|
+
key={++indexCounter}
|
|
83
|
+
style={styles.linkText}>
|
|
84
|
+
{link}
|
|
85
|
+
</Text>,
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
startIndex = linkRange.upperBound;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (startIndex < props.content.length) {
|
|
92
|
+
const text = props.content.substring(startIndex);
|
|
93
|
+
fragments.push(
|
|
94
|
+
<Text key={++indexCounter} style={props.style}>
|
|
95
|
+
{text}
|
|
96
|
+
</Text>,
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return <Text style={props.style}>{fragments}</Text>;
|
|
101
|
+
}
|
|
102
|
+
|
|
25
103
|
const cleanContent = (content: string) =>
|
|
26
104
|
content.replace(/^(TransformError |Warning: (Warning: )?|Error: )/g, '');
|
|
27
105
|
|
|
@@ -49,9 +127,7 @@ function LogBoxMessage(props: Props): React.Node {
|
|
|
49
127
|
|
|
50
128
|
if (length < maxLength) {
|
|
51
129
|
elements.push(
|
|
52
|
-
<
|
|
53
|
-
{cleanMessage}
|
|
54
|
-
</Text>,
|
|
130
|
+
<TappableLinks content={cleanMessage} key={key} style={style} />,
|
|
55
131
|
);
|
|
56
132
|
}
|
|
57
133
|
|
|
@@ -70,12 +146,12 @@ function LogBoxMessage(props: Props): React.Node {
|
|
|
70
146
|
createUnderLength(key, prevPart);
|
|
71
147
|
}
|
|
72
148
|
|
|
73
|
-
const
|
|
149
|
+
const substitutionPart = content.substr(
|
|
74
150
|
substitution.offset,
|
|
75
151
|
substitution.length,
|
|
76
152
|
);
|
|
77
153
|
|
|
78
|
-
createUnderLength(key + '.5',
|
|
154
|
+
createUnderLength(key + '.5', substitutionPart, substitutionStyle);
|
|
79
155
|
return substitution.offset + substitution.length;
|
|
80
156
|
}, 0);
|
|
81
157
|
|
|
@@ -87,4 +163,10 @@ function LogBoxMessage(props: Props): React.Node {
|
|
|
87
163
|
return <>{elements}</>;
|
|
88
164
|
}
|
|
89
165
|
|
|
166
|
+
const styles = StyleSheet.create({
|
|
167
|
+
linkText: {
|
|
168
|
+
textDecorationLine: 'underline',
|
|
169
|
+
},
|
|
170
|
+
});
|
|
171
|
+
|
|
90
172
|
export default LogBoxMessage;
|
|
@@ -21,13 +21,13 @@ import LogBoxMessage from './LogBoxMessage';
|
|
|
21
21
|
import * as LogBoxStyle from './LogBoxStyle';
|
|
22
22
|
import * as React from 'react';
|
|
23
23
|
|
|
24
|
-
type Props = $ReadOnly<{
|
|
24
|
+
type Props = $ReadOnly<{
|
|
25
25
|
log: LogBoxLog,
|
|
26
26
|
totalLogCount: number,
|
|
27
27
|
level: 'warn' | 'error',
|
|
28
28
|
onPressOpen: () => void,
|
|
29
29
|
onPressDismiss: () => void,
|
|
30
|
-
|
|
30
|
+
}>;
|
|
31
31
|
|
|
32
32
|
function LogBoxLogNotification(props: Props): React.Node {
|
|
33
33
|
const {totalLogCount, level, log} = props;
|
|
@@ -56,9 +56,7 @@ function LogBoxLogNotification(props: Props): React.Node {
|
|
|
56
56
|
);
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
function CountBadge(
|
|
60
|
-
props: $TEMPORARY$object<{count: number, level: 'error' | 'warn'}>,
|
|
61
|
-
) {
|
|
59
|
+
function CountBadge(props: {count: number, level: 'error' | 'warn'}) {
|
|
62
60
|
return (
|
|
63
61
|
<View style={countStyles.outside}>
|
|
64
62
|
{/* $FlowFixMe[incompatible-type] (>=0.114.0) This suppression was added
|
|
@@ -73,7 +71,7 @@ function CountBadge(
|
|
|
73
71
|
);
|
|
74
72
|
}
|
|
75
73
|
|
|
76
|
-
function Message(props:
|
|
74
|
+
function Message(props: {message: MessageType}) {
|
|
77
75
|
return (
|
|
78
76
|
<View style={messageStyles.container}>
|
|
79
77
|
<Text numberOfLines={1} style={messageStyles.text}>
|
|
@@ -89,7 +87,7 @@ function Message(props: $TEMPORARY$object<{message: MessageType}>) {
|
|
|
89
87
|
);
|
|
90
88
|
}
|
|
91
89
|
|
|
92
|
-
function DismissButton(props:
|
|
90
|
+
function DismissButton(props: {onPress: () => void}) {
|
|
93
91
|
return (
|
|
94
92
|
<View style={dismissStyles.container}>
|
|
95
93
|
<LogBoxButton
|
package/Libraries/Modal/Modal.js
CHANGED
|
@@ -13,11 +13,11 @@ import type {RootTag} from '../ReactNative/RootTag';
|
|
|
13
13
|
import type {DirectEventHandler} from '../Types/CodegenTypes';
|
|
14
14
|
|
|
15
15
|
import NativeEventEmitter from '../EventEmitter/NativeEventEmitter';
|
|
16
|
-
import {VirtualizedListContextResetter} from '../Lists/VirtualizedListContext.js';
|
|
17
16
|
import {type EventSubscription} from '../vendor/emitter/EventEmitter';
|
|
18
17
|
import ModalInjection from './ModalInjection';
|
|
19
18
|
import NativeModalManager from './NativeModalManager';
|
|
20
19
|
import RCTModalHostView from './RCTModalHostViewNativeComponent';
|
|
20
|
+
import {VirtualizedListContextResetter} from '@react-native/virtualized-lists';
|
|
21
21
|
|
|
22
22
|
const ScrollView = require('../Components/ScrollView/ScrollView');
|
|
23
23
|
const View = require('../Components/View/View');
|
|
@@ -91,7 +91,7 @@ export type Props = $ReadOnly<{|
|
|
|
91
91
|
* The `statusBarTranslucent` prop determines whether your modal should go under
|
|
92
92
|
* the system statusbar.
|
|
93
93
|
*
|
|
94
|
-
* See https://reactnative.dev/docs/modal#
|
|
94
|
+
* See https://reactnative.dev/docs/modal.html#statusbartranslucent-android
|
|
95
95
|
*/
|
|
96
96
|
statusBarTranslucent?: ?boolean,
|
|
97
97
|
|
|
@@ -160,11 +160,11 @@ const directEventTypes = {
|
|
|
160
160
|
|
|
161
161
|
const validAttributesForNonEventProps = {
|
|
162
162
|
// @ReactProps from BaseViewManager
|
|
163
|
-
backgroundColor: {process: require('../StyleSheet/processColor')},
|
|
163
|
+
backgroundColor: {process: require('../StyleSheet/processColor').default},
|
|
164
164
|
transform: true,
|
|
165
165
|
opacity: true,
|
|
166
166
|
elevation: true,
|
|
167
|
-
shadowColor: {process: require('../StyleSheet/processColor')},
|
|
167
|
+
shadowColor: {process: require('../StyleSheet/processColor').default},
|
|
168
168
|
zIndex: true,
|
|
169
169
|
renderToHardwareTextureAndroid: true,
|
|
170
170
|
testID: true,
|
|
@@ -212,24 +212,36 @@ const validAttributesForNonEventProps = {
|
|
|
212
212
|
display: true,
|
|
213
213
|
|
|
214
214
|
margin: true,
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
marginEnd: true,
|
|
219
|
-
marginTop: true,
|
|
215
|
+
marginBlock: true,
|
|
216
|
+
marginBlockEnd: true,
|
|
217
|
+
marginBlockStart: true,
|
|
220
218
|
marginBottom: true,
|
|
219
|
+
marginEnd: true,
|
|
220
|
+
marginHorizontal: true,
|
|
221
|
+
marginInline: true,
|
|
222
|
+
marginInlineEnd: true,
|
|
223
|
+
marginInlineStart: true,
|
|
221
224
|
marginLeft: true,
|
|
222
225
|
marginRight: true,
|
|
226
|
+
marginStart: true,
|
|
227
|
+
marginTop: true,
|
|
228
|
+
marginVertical: true,
|
|
223
229
|
|
|
224
230
|
padding: true,
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
paddingEnd: true,
|
|
229
|
-
paddingTop: true,
|
|
231
|
+
paddingBlock: true,
|
|
232
|
+
paddingBlockEnd: true,
|
|
233
|
+
paddingBlockStart: true,
|
|
230
234
|
paddingBottom: true,
|
|
235
|
+
paddingEnd: true,
|
|
236
|
+
paddingHorizontal: true,
|
|
237
|
+
paddingInline: true,
|
|
238
|
+
paddingInlineEnd: true,
|
|
239
|
+
paddingInlineStart: true,
|
|
231
240
|
paddingLeft: true,
|
|
232
241
|
paddingRight: true,
|
|
242
|
+
paddingStart: true,
|
|
243
|
+
paddingTop: true,
|
|
244
|
+
paddingVertical: true,
|
|
233
245
|
|
|
234
246
|
borderWidth: true,
|
|
235
247
|
borderStartWidth: true,
|
|
@@ -246,6 +258,14 @@ const validAttributesForNonEventProps = {
|
|
|
246
258
|
top: true,
|
|
247
259
|
bottom: true,
|
|
248
260
|
|
|
261
|
+
inset: true,
|
|
262
|
+
insetBlock: true,
|
|
263
|
+
insetBlockEnd: true,
|
|
264
|
+
insetBlockStart: true,
|
|
265
|
+
insetInline: true,
|
|
266
|
+
insetInlineEnd: true,
|
|
267
|
+
insetInlineStart: true,
|
|
268
|
+
|
|
249
269
|
position: true,
|
|
250
270
|
|
|
251
271
|
style: ReactNativeStyleAttributes,
|