feat(tui): widen nav sidebar so labels do not wrap#1755
Conversation
- assert navWidth property exists on LayoutPlan (expanded=24, rail=3, hidden=0) - assert mainWidth === columns - navWidth (updated from hardcoded 140-14 → 140-24) - assert AppShell pins nav so '● 💬 Conversations' renders on one line Co-authored-by: Copilot <175574315+pedrofuentes@users.noreply.github.com>
- NAV_WIDTH.expanded 14 → 24: fits '● 💬 Conversations' (18 cols content)
plus LeftNav paddingX=1 (2 cols) plus round border (2 cols) = 22 minimum;
24 adds two cols breathing room
- Add navWidth to LayoutPlan interface; computeLayout sets it to NAV_WIDTH[navState]
- AppShell nav <Box> now receives width={layout.navWidth} and flexShrink={0}
so the pane is fixed-width and never squeezed by the main flexGrow=1 pane
- mainWidth stays consistent: columns - navWidth
Co-authored-by: Copilot <175574315+pedrofuentes@users.noreply.github.com>
|
Status: CONDITIONAL Sentinel Review ReportRef: feature/tui-nav-width → main Phase 1 — TDD / Test Evidence
Phase 1.5 — Fast-path Evaluation🔴 count: 0 | LOC: 18 non-test/non-lockfile changed (≤150: Y) | Security paths: Y (terminal UI rendering surface) | New deps: N | Commit types qualify: N ( Phase 2 — Execution Log
Additional checks: Findings
Details (ordered by severity)
Follow-ups & Actions
Decision rationale
|
Summary
NAV_WIDTH.expanded 14→24 + navWidth in LayoutPlan; AppShell pins the nav box width + flexShrink:0 so 'Conversations'/'Debates' render on one line; verified no overflow at 120/140 cols; Phase 11 polish — feedback #7
Changes
src/tui/lib/breakpoints.ts:NAV_WIDTH.expandedbumped from 14 → 24 (fits● 💬 Conversations18 cols + paddingX 2 + border 2 = 22 minimum; 24 adds breathing room). NewnavWidth: numberfield added toLayoutPlaninterface;computeLayoutexposes it asNAV_WIDTH[navState].src/tui/components/layout/AppShell.tsx: nav<Box>now receiveswidth={props.layout.navWidth}andflexShrink={0}so the nav pane is fixed-width and cannot be squeezed by the main pane'sflexGrow={1}.Tests
breakpoints.test.ts: new assertions fornavWidth(expanded=24, rail=3, hidden=0) and updatedmainWidth === columns - navWidthapp-shell.test.tsx: new test renders AppShell with● 💬 Conversationsin the nav and asserts the label is on one line (emoji and text not split), frame ≤ rows linesFull TUI suite: 901 tests pass. Lint zero. Typecheck clean.