From 8f0fa0836f3f6ceadd2d756ad31254336da75b19 Mon Sep 17 00:00:00 2001 From: Brooklyn Nicholson Date: Sun, 26 Apr 2026 04:35:54 -0500 Subject: [PATCH] fix(tui): preserve composer width on narrow panes --- ui-tui/src/__tests__/textInputWrap.test.ts | 4 ++-- ui-tui/src/lib/inputMetrics.ts | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/ui-tui/src/__tests__/textInputWrap.test.ts b/ui-tui/src/__tests__/textInputWrap.test.ts index e46af48736..a05ed42ffe 100644 --- a/ui-tui/src/__tests__/textInputWrap.test.ts +++ b/ui-tui/src/__tests__/textInputWrap.test.ts @@ -42,9 +42,9 @@ describe('input metrics helpers', () => { expect(inputVisualHeight('one\ntwo', 40)).toBe(2) }) - it('reserves gutters without exceeding the physical terminal width', () => { + it('reserves gutters on wide panes without starving narrow composer width', () => { expect(stableComposerColumns(100, 3)).toBe(93) - expect(stableComposerColumns(10, 3)).toBe(3) + expect(stableComposerColumns(10, 3)).toBe(5) expect(stableComposerColumns(6, 3)).toBe(1) }) }) diff --git a/ui-tui/src/lib/inputMetrics.ts b/ui-tui/src/lib/inputMetrics.ts index 9d8ccd1fd6..d54f963709 100644 --- a/ui-tui/src/lib/inputMetrics.ts +++ b/ui-tui/src/lib/inputMetrics.ts @@ -54,9 +54,9 @@ export function inputVisualHeight(value: string, columns: number) { } export function stableComposerColumns(totalCols: number, promptWidth: number) { - // Physical render/wrap width. Reserve: - // - outer composer paddingX={1}: 2 columns - // - transcript scrollbar gutter + marginLeft: 2 columns - // - prompt prefix width - return Math.max(1, totalCols - promptWidth - 4) + // Physical render/wrap width. Always reserve outer composer padding and + // prompt prefix. Only reserve the transcript scrollbar gutter when the + // terminal is wide enough; on narrow panes, preserving input columns beats + // keeping gutters visually aligned. + return Math.max(1, totalCols - promptWidth - 2 - (totalCols - promptWidth >= 24 ? 2 : 0)) }