fix(tui): skip narrow log-split on System panel

System has interactive UI — Enter to open URL, [c] to copy auth token,
and click-drag for token selection — whose [Enter]/[c] hint row only
renders when the panel has focus. Auto-shifting focus into a bottom log
strip on ↓ hid that hint and removed a clear visual path back to the
panel for token operations. Restrict the auto-split to inert sections
(Stats / Utilities / Settings); System keeps the full single-pane view
it had before.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
gsxdsm
2026-05-06 18:16:58 -07:00
parent 9b30711b43
commit a217969b39

View File

@@ -956,8 +956,15 @@ function StatusModeSingle({
? contentRows
: estimateSectionPanelHeight(focused, state, cols, !state.narrowLogSplitFocused);
const candidateSplitHeight = contentRows - topNeededRows;
// Skip the split on the System panel — it has interactive UI (Enter to
// open URL, [c] to copy token, click-drag to select the token text)
// whose hint row only renders when the panel itself has focus. Auto-
// shifting focus into a bottom log strip would hide that hint and
// remove a clear visual path back. Logs section already shows the
// dedicated full-screen logs view.
const sectionAllowsSplit = focused !== "logs" && focused !== "system";
const showLogSplit =
focused !== "logs" && candidateSplitHeight >= NARROW_SPLIT_MIN_LOG_ROWS;
sectionAllowsSplit && candidateSplitHeight >= NARROW_SPLIT_MIN_LOG_ROWS;
const splitHeight = showLogSplit ? candidateSplitHeight : 0;
// Bottom log pane has its own border + title + filter chrome (4), so the
// visible-entries budget is splitHeight - 4.
@@ -4205,7 +4212,10 @@ export function DashboardApp({ controller }: DashboardAppProps) {
const narrowSplitActive = (() => {
if (state.mode !== "status") return false;
if (!(cols < NARROW_THRESHOLD || rows < 20)) return false;
if (state.activeSection === "logs") return false;
// System and Logs sections never get the split (see StatusModeSingle).
if (state.activeSection === "logs" || state.activeSection === "system") {
return false;
}
const topNeeded = estimateSectionPanelHeight(
state.activeSection,
state,