From e24203a8192742702fd960e27b36760791429afb Mon Sep 17 00:00:00 2001 From: Alex Hunt Date: Wed, 4 Nov 2026 05:45:37 -0800 Subject: [PATCH] Fix LogBox inspector content under horizontal safe area insets --- .../Libraries/LogBox/UI/LogBoxInspector.js | 32 ++++++++++++++-- .../LogBox/UI/LogBoxInspectorBody.js | 37 +++++++++++++------ .../LogBox/UI/LogBoxInspectorMessageHeader.js | 4 +- 3 files changed, 57 insertions(+), 16 deletions(-) diff --git a/packages/react-native/Libraries/LogBox/UI/LogBoxInspector.js b/packages/react-native/Libraries/LogBox/UI/LogBoxInspector.js index d9db48f89bc3..df19cb73d187 100644 --- a/packages/react-native/Libraries/LogBox/UI/LogBoxInspector.js +++ b/packages/react-native/Libraries/LogBox/UI/LogBoxInspector.js @@ -8,8 +8,12 @@ * @format */ +import type {ViewStyleProp} from '../../StyleSheet/StyleSheet'; +import type {SafeAreaInsetsChangeEvent} from '../../Types/CoreEventTypes'; + import Keyboard from '../../Components/Keyboard/Keyboard'; import View from '../../Components/View/View'; +import I18nManager from '../../ReactNative/I18nManager'; import StyleSheet from '../../StyleSheet/StyleSheet'; import BackHandler from '../../Utilities/BackHandler'; import * as LogBoxData from '../Data/LogBoxData'; @@ -19,7 +23,7 @@ import LogBoxInspectorFooter from './LogBoxInspectorFooter'; import LogBoxInspectorHeader from './LogBoxInspectorHeader'; import * as LogBoxStyle from './LogBoxStyle'; import * as React from 'react'; -import {useEffect} from 'react'; +import {useCallback, useEffect, useState} from 'react'; type Props = Readonly<{ onDismiss: () => void, @@ -56,6 +60,21 @@ export default function LogBoxInspector(props: Props): React.Node { Keyboard.dismiss(); }, []); + const [safeAreaPadding, setSafeAreaPadding] = useState(null); + const handleSafeAreaInsetsChange = useCallback( + (event: SafeAreaInsetsChangeEvent) => { + const {left, right} = event.nativeEvent.insets; + // Insets are physical edges. Logical edges resolve by layout direction + // alone, which keeps clear of the RTL left/right swap. + const {isRTL} = I18nManager.getConstants(); + setSafeAreaPadding({ + paddingStart: isRTL ? right : left, + paddingEnd: isRTL ? left : right, + }); + }, + [], + ); + useEffect(() => { if (log == null) { return; @@ -123,14 +142,21 @@ export default function LogBoxInspector(props: Props): React.Node { } return ( - + - + void, + safeAreaPadding?: ?ViewStyleProp, }): React.Node { const [collapsed, setCollapsed] = useState(true); @@ -50,14 +54,20 @@ export default function LogBoxInspectorBody(props: { message={props.log.message} level={props.log.level} title={headerTitle} + style={props.safeAreaPadding} /> - - - + + + + + ); @@ -70,13 +80,16 @@ export default function LogBoxInspectorBody(props: { message={props.log.message} level={props.log.level} title={headerTitle} + style={props.safeAreaPadding} /> - - - + + + + + ); } diff --git a/packages/react-native/Libraries/LogBox/UI/LogBoxInspectorMessageHeader.js b/packages/react-native/Libraries/LogBox/UI/LogBoxInspectorMessageHeader.js index 9ca2e4856799..648374b121f0 100644 --- a/packages/react-native/Libraries/LogBox/UI/LogBoxInspectorMessageHeader.js +++ b/packages/react-native/Libraries/LogBox/UI/LogBoxInspectorMessageHeader.js @@ -8,6 +8,7 @@ * @format */ +import type {ViewStyleProp} from '../../StyleSheet/StyleSheet'; import type {LogLevel} from '../Data/LogBoxLog'; import type {Message} from '../Data/parseLogBoxLog'; @@ -26,6 +27,7 @@ component LogBoxInspectorMessageHeader( level: LogLevel, title: string, onPress: () => void, + style?: ?ViewStyleProp, ) { function renderShowMore() { if (message.content.length < SHOW_MORE_MESSAGE_LENGTH || !collapsed) { @@ -42,7 +44,7 @@ component LogBoxInspectorMessageHeader( } return ( - +