From 1803fb58cd3d69651ecc2669627f6109d0118d07 Mon Sep 17 00:00:00 2001 From: Dev Randalpura Date: Fri, 10 Apr 2026 15:55:57 +0000 Subject: [PATCH 01/11] [WIP] removed background color for input --- ...-the-frame-of-the-entire-terminal.snap.svg | 3 +- .../ToolConfirmationFullFrame.test.tsx.snap | 2 +- ...ternateBufferQuittingDisplay.test.tsx.snap | 4 +- ...rted-cursor-when-shell-is-focused.snap.svg | 6 +-- .../__snapshots__/InputPrompt.test.tsx.snap | 53 ++++++++----------- ...g-messages-sequentially-correctly.snap.svg | 6 +-- .../__snapshots__/MainContent.test.tsx.snap | 24 ++++----- .../__snapshots__/UserMessage.test.tsx.snap | 16 +++--- .../components/shared/HalfLinePaddedBox.tsx | 43 +++++++-------- .../HalfLinePaddedBox.test.tsx.snap | 4 +- 10 files changed, 75 insertions(+), 86 deletions(-) diff --git a/packages/cli/src/ui/__snapshots__/ToolConfirmationFullFrame-Full-Terminal-Tool-Confirmation-Snapshot-renders-tool-confirmation-box-in-the-frame-of-the-entire-terminal.snap.svg b/packages/cli/src/ui/__snapshots__/ToolConfirmationFullFrame-Full-Terminal-Tool-Confirmation-Snapshot-renders-tool-confirmation-box-in-the-frame-of-the-entire-terminal.snap.svg index 7565185d93e..115bbc7fecf 100644 --- a/packages/cli/src/ui/__snapshots__/ToolConfirmationFullFrame-Full-Terminal-Tool-Confirmation-Snapshot-renders-tool-confirmation-box-in-the-frame-of-the-entire-terminal.snap.svg +++ b/packages/cli/src/ui/__snapshots__/ToolConfirmationFullFrame-Full-Terminal-Tool-Confirmation-Snapshot-renders-tool-confirmation-box-in-the-frame-of-the-entire-terminal.snap.svg @@ -10,8 +10,7 @@ Can you edit InputPrompt.tsx for me? - - ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ + ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ╭─────────────────────────────────────────────────────────────────────────────────────────────────╮ ? Edit diff --git a/packages/cli/src/ui/__snapshots__/ToolConfirmationFullFrame.test.tsx.snap b/packages/cli/src/ui/__snapshots__/ToolConfirmationFullFrame.test.tsx.snap index d9cc9f7ce39..0a10ab5258a 100644 --- a/packages/cli/src/ui/__snapshots__/ToolConfirmationFullFrame.test.tsx.snap +++ b/packages/cli/src/ui/__snapshots__/ToolConfirmationFullFrame.test.tsx.snap @@ -2,7 +2,7 @@ exports[`Full Terminal Tool Confirmation Snapshot > renders tool confirmation box in the frame of the entire terminal 1`] = ` " > Can you edit InputPrompt.tsx for me? -▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ╭─────────────────────────────────────────────────────────────────────────────────────────────────╮ │ ? Edit │ diff --git a/packages/cli/src/ui/components/__snapshots__/AlternateBufferQuittingDisplay.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/AlternateBufferQuittingDisplay.test.tsx.snap index d4dc67bbc60..26a8b0a8e75 100644 --- a/packages/cli/src/ui/components/__snapshots__/AlternateBufferQuittingDisplay.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/AlternateBufferQuittingDisplay.test.tsx.snap @@ -139,9 +139,9 @@ Tips for getting started: 2. /help for more information 3. Ask coding questions, edit code or run commands 4. Be specific for the best results -▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ - > Hello Gemini ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ + > Hello Gemini +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ✦ Hello User! " `; diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-snapshots-should-not-show-inverted-cursor-when-shell-is-focused.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-snapshots-should-not-show-inverted-cursor-when-shell-is-focused.snap.svg index 5a102dc728d..c6b96223713 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-snapshots-should-not-show-inverted-cursor-when-shell-is-focused.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-snapshots-should-not-show-inverted-cursor-when-shell-is-focused.snap.svg @@ -4,15 +4,13 @@ - - ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ + ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ > Type your message or @path/to/file - - ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ + ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/InputPrompt.test.tsx.snap index 59050691d2f..3799bc6b5d6 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt.test.tsx.snap @@ -91,16 +91,16 @@ exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > `; exports[`InputPrompt > History Navigation and Completion Suppression > should not render suggestions during history navigation 1`] = ` -"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ > second message " `; exports[`InputPrompt > command search (Ctrl+R when not in shell) > expands and collapses long suggestion via Right/Left arrows > command-search-render-collapsed-match 1`] = ` -"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ (r:) Type your message or @path/to/file -▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll → lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll ... @@ -108,9 +108,9 @@ exports[`InputPrompt > command search (Ctrl+R when not in shell) > expands and c `; exports[`InputPrompt > command search (Ctrl+R when not in shell) > expands and collapses long suggestion via Right/Left arrows > command-search-render-expanded-match 1`] = ` -"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ (r:) Type your message or @path/to/file -▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll ← lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll llllllllllllllllllllllllllllllllllllllllllllllllll @@ -118,7 +118,7 @@ exports[`InputPrompt > command search (Ctrl+R when not in shell) > expands and c `; exports[`InputPrompt > command search (Ctrl+R when not in shell) > renders match window and expanded view (snapshots) > command-search-render-collapsed-match 1`] = ` -"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ (r:) commit @@ -126,7 +126,7 @@ exports[`InputPrompt > command search (Ctrl+R when not in shell) > renders match `; exports[`InputPrompt > command search (Ctrl+R when not in shell) > renders match window and expanded view (snapshots) > command-search-render-expanded-match 1`] = ` -"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ (r:) commit @@ -134,44 +134,37 @@ exports[`InputPrompt > command search (Ctrl+R when not in shell) > renders match `; exports[`InputPrompt > image path transformation snapshots > should snapshot collapsed image path 1`] = ` -"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ > [Image ...reenshot2x.png] " `; exports[`InputPrompt > image path transformation snapshots > should snapshot expanded image path when cursor is on it 1`] = ` -"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ > @/path/to/screenshots/screenshot2x.png " `; exports[`InputPrompt > mouse interaction > should toggle paste expansion on double-click 1`] = ` -"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ > [Pasted Text: 10 lines] -▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ " `; exports[`InputPrompt > mouse interaction > should toggle paste expansion on double-click 2`] = ` -"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ > [Pasted Text: 10 lines] -▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ " `; exports[`InputPrompt > mouse interaction > should toggle paste expansion on double-click 3`] = ` -"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ > [Pasted Text: 10 lines] -▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ -" -`; - -exports[`InputPrompt > mouse interaction > should toggle paste expansion on double-click 4`] = ` -"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ - > [Pasted Text: 10 lines] -▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ " `; @@ -184,28 +177,28 @@ exports[`InputPrompt > multiline rendering > should correctly render multiline i `; exports[`InputPrompt > snapshots > should not show inverted cursor when shell is focused 1`] = ` -"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ > Type your message or @path/to/file -▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄" +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀" `; exports[`InputPrompt > snapshots > should render correctly in shell mode 1`] = ` -"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ! Type your message or @path/to/file -▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ " `; exports[`InputPrompt > snapshots > should render correctly in yolo mode 1`] = ` -"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ * Type your message or @path/to/file -▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ " `; exports[`InputPrompt > snapshots > should render correctly when accepting edits 1`] = ` -"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ > Type your message or @path/to/file -▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ " `; diff --git a/packages/cli/src/ui/components/__snapshots__/MainContent-MainContent-renders-multiple-thinking-messages-sequentially-correctly.snap.svg b/packages/cli/src/ui/components/__snapshots__/MainContent-MainContent-renders-multiple-thinking-messages-sequentially-correctly.snap.svg index 0527f43327b..298c0a6ad4f 100644 --- a/packages/cli/src/ui/components/__snapshots__/MainContent-MainContent-renders-multiple-thinking-messages-sequentially-correctly.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/MainContent-MainContent-renders-multiple-thinking-messages-sequentially-correctly.snap.svg @@ -6,16 +6,14 @@ ScrollableList AppHeader(full) - - ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ + ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ > Plan a solution - - ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ + ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ Thinking... diff --git a/packages/cli/src/ui/components/__snapshots__/MainContent.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/MainContent.test.tsx.snap index 7dab229ecd3..79ab9ad7ba9 100644 --- a/packages/cli/src/ui/components/__snapshots__/MainContent.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/MainContent.test.tsx.snap @@ -94,9 +94,9 @@ exports[`MainContent > MainContent Tool Output Height Logic > 'Normal mode - Unc exports[`MainContent > renders a ToolConfirmationQueue without an extra line when preceded by hidden tools 1`] = ` "AppHeader(full) -▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ - > Apply plan ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ + > Apply plan +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ╭──────────────────────────────────────────────────────────────────────────────╮ │ Ready to start implementation? │ @@ -123,17 +123,17 @@ exports[`MainContent > renders a split tool group without a gap between static a exports[`MainContent > renders a spurious line when a tool group has only hidden tools and borderBottom true 1`] = ` "AppHeader(full) -▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ - > Apply plan ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ + > Apply plan +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ " `; exports[`MainContent > renders a subagent with a complete box including bottom border 1`] = ` "AppHeader(full) -▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ - > Investigate ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ + > Investigate +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ╭──────────────────────────────────────────────────────────────────────────╮ │ ≡ Running Agent... (ctrl+o to collapse) │ @@ -149,9 +149,9 @@ exports[`MainContent > renders a subagent with a complete box including bottom b exports[`MainContent > renders mixed history items (user + gemini) with single line padding between them 1`] = ` "ScrollableList AppHeader(full) -▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ - > User message ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ + > User message +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ✦ Gemini response Gemini response Gemini response @@ -195,9 +195,9 @@ AppHeader(full) exports[`MainContent > renders multiple thinking messages sequentially correctly 1`] = ` "ScrollableList AppHeader(full) -▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ - > Plan a solution ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ + > Plan a solution +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ Thinking... │ │ Initial analysis @@ -217,9 +217,9 @@ AppHeader(full) exports[`MainContent > renders multiple thinking messages sequentially correctly 2`] = ` "ScrollableList AppHeader(full) -▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ - > Plan a solution ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ + > Plan a solution +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ Thinking... │ │ Initial analysis diff --git a/packages/cli/src/ui/components/messages/__snapshots__/UserMessage.test.tsx.snap b/packages/cli/src/ui/components/messages/__snapshots__/UserMessage.test.tsx.snap index 679a5885d1f..5e44687fddc 100644 --- a/packages/cli/src/ui/components/messages/__snapshots__/UserMessage.test.tsx.snap +++ b/packages/cli/src/ui/components/messages/__snapshots__/UserMessage.test.tsx.snap @@ -1,30 +1,30 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`UserMessage > renders multiline user message 1`] = ` -"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ > Line 1 Line 2 -▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ " `; exports[`UserMessage > renders normal user message with correct prefix 1`] = ` -"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ > Hello Gemini -▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ " `; exports[`UserMessage > renders slash command message 1`] = ` -"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ > /help -▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ " `; exports[`UserMessage > transforms image paths in user message 1`] = ` -"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ > Check out this image: [Image my-image.png] -▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ " `; diff --git a/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx b/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx index add53532451..c5451c38284 100644 --- a/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx +++ b/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx @@ -14,7 +14,8 @@ import { resolveColor, getSafeLowColorBackground, } from '../../themes/color-utils.js'; -import { isLowColorDepth, isITerm2 } from '../../utils/terminalUtils.js'; +import { isLowColorDepth } from '../../utils/terminalUtils.js'; +import { isAppleTerminal } from '@google/gemini-cli-core'; export interface HalfLinePaddedBoxProps { /** @@ -79,9 +80,9 @@ const HalfLinePaddedBoxInternal: React.FC = ({ return <>{children}; } - const isITerm = isITerm2(); + const isApple = isAppleTerminal(); - if (isITerm) { + if (isApple) { return ( = ({ alignItems="stretch" minHeight={1} flexShrink={0} + backgroundColor={backgroundColor} > - {'▄'.repeat(terminalWidth)} - - - {children} + + {'▀'.repeat(terminalWidth)} + + {children} - {'▀'.repeat(terminalWidth)} + + {'▄'.repeat(terminalWidth)} + ); @@ -115,18 +114,20 @@ const HalfLinePaddedBoxInternal: React.FC = ({ alignItems="stretch" minHeight={1} flexShrink={0} - backgroundColor={backgroundColor} > - - {'▀'.repeat(terminalWidth)} - + {'▄'.repeat(terminalWidth)} + + + {children} - {children} - - {'▄'.repeat(terminalWidth)} - + {'▀'.repeat(terminalWidth)} ); diff --git a/packages/cli/src/ui/components/shared/__snapshots__/HalfLinePaddedBox.test.tsx.snap b/packages/cli/src/ui/components/shared/__snapshots__/HalfLinePaddedBox.test.tsx.snap index dbb9af2991d..59d6e22e001 100644 --- a/packages/cli/src/ui/components/shared/__snapshots__/HalfLinePaddedBox.test.tsx.snap +++ b/packages/cli/src/ui/components/shared/__snapshots__/HalfLinePaddedBox.test.tsx.snap @@ -18,8 +18,8 @@ exports[` > renders nothing when useBackgroundColor is fals `; exports[` > renders standard background and blocks when not iTerm2 1`] = ` -"▀▀▀▀▀▀▀▀▀▀ +"▄▄▄▄▄▄▄▄▄▄ Content -▄▄▄▄▄▄▄▄▄▄ +▀▀▀▀▀▀▀▀▀▀ " `; From e7f35b28c57bc26236bf9d8d421e37ef92f7c82b Mon Sep 17 00:00:00 2001 From: Dev Randalpura Date: Fri, 10 Apr 2026 16:59:02 +0000 Subject: [PATCH 02/11] Updated isAppleTerminal to also include SSH --- .../shared/HalfLinePaddedBox.test.tsx | 19 ++++++++++---- .../components/shared/HalfLinePaddedBox.tsx | 2 +- .../HalfLinePaddedBox.test.tsx.snap | 8 +++--- packages/core/src/utils/compatibility.test.ts | 25 +++++++++++++++++++ packages/core/src/utils/compatibility.ts | 6 ++++- 5 files changed, 49 insertions(+), 11 deletions(-) diff --git a/packages/cli/src/ui/components/shared/HalfLinePaddedBox.test.tsx b/packages/cli/src/ui/components/shared/HalfLinePaddedBox.test.tsx index b81294ffb25..32d2e6d766d 100644 --- a/packages/cli/src/ui/components/shared/HalfLinePaddedBox.test.tsx +++ b/packages/cli/src/ui/components/shared/HalfLinePaddedBox.test.tsx @@ -8,7 +8,7 @@ import { renderWithProviders } from '../../../test-utils/render.js'; import { HalfLinePaddedBox } from './HalfLinePaddedBox.js'; import { Text, useIsScreenReaderEnabled } from 'ink'; import { describe, it, expect, vi, afterEach } from 'vitest'; -import { isITerm2 } from '../../utils/terminalUtils.js'; +import { isAppleTerminal } from '@google/gemini-cli-core'; vi.mock('ink', async () => { const actual = await vi.importActual('ink'); @@ -18,15 +18,24 @@ vi.mock('ink', async () => { }; }); +vi.mock('@google/gemini-cli-core', async () => { + const actual = await vi.importActual('@google/gemini-cli-core'); + return { + ...actual, + isAppleTerminal: vi.fn(() => false), + }; +}); + describe('', () => { const mockUseIsScreenReaderEnabled = vi.mocked(useIsScreenReaderEnabled); + const mockIsAppleTerminal = vi.mocked(isAppleTerminal); afterEach(() => { vi.restoreAllMocks(); }); - it('renders standard background and blocks when not iTerm2', async () => { - vi.mocked(isITerm2).mockReturnValue(false); + it('renders standard background and blocks when not Apple Terminal', async () => { + mockIsAppleTerminal.mockReturnValue(false); const { lastFrame, unmount } = await renderWithProviders( @@ -40,8 +49,8 @@ describe('', () => { unmount(); }); - it('renders iTerm2-specific blocks when iTerm2 is detected', async () => { - vi.mocked(isITerm2).mockReturnValue(true); + it('renders Apple Terminal-specific blocks when detected', async () => { + mockIsAppleTerminal.mockReturnValue(true); const { lastFrame, unmount } = await renderWithProviders( diff --git a/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx b/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx index c5451c38284..341d4ee9f01 100644 --- a/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx +++ b/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx @@ -93,7 +93,7 @@ const HalfLinePaddedBoxInternal: React.FC = ({ backgroundColor={backgroundColor} > - + {'▀'.repeat(terminalWidth)} diff --git a/packages/cli/src/ui/components/shared/__snapshots__/HalfLinePaddedBox.test.tsx.snap b/packages/cli/src/ui/components/shared/__snapshots__/HalfLinePaddedBox.test.tsx.snap index 59d6e22e001..b848fa30d39 100644 --- a/packages/cli/src/ui/components/shared/__snapshots__/HalfLinePaddedBox.test.tsx.snap +++ b/packages/cli/src/ui/components/shared/__snapshots__/HalfLinePaddedBox.test.tsx.snap @@ -1,9 +1,9 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[` > renders iTerm2-specific blocks when iTerm2 is detected 1`] = ` -"▄▄▄▄▄▄▄▄▄▄ +exports[` > renders Apple Terminal-specific blocks when detected 1`] = ` +"▀▀▀▀▀▀▀▀▀▀ Content -▀▀▀▀▀▀▀▀▀▀ +▄▄▄▄▄▄▄▄▄▄ " `; @@ -17,7 +17,7 @@ exports[` > renders nothing when useBackgroundColor is fals " `; -exports[` > renders standard background and blocks when not iTerm2 1`] = ` +exports[` > renders standard background and blocks when not Apple Terminal 1`] = ` "▄▄▄▄▄▄▄▄▄▄ Content ▀▀▀▀▀▀▀▀▀▀ diff --git a/packages/core/src/utils/compatibility.test.ts b/packages/core/src/utils/compatibility.test.ts index c94cbee3a65..2a55884b44c 100644 --- a/packages/core/src/utils/compatibility.test.ts +++ b/packages/core/src/utils/compatibility.test.ts @@ -13,6 +13,7 @@ import { isGnuScreen, isLowColorTmux, isDumbTerminal, + isAppleTerminal, supports256Colors, supportsTrueColor, getCompatibilityWarnings, @@ -169,6 +170,30 @@ describe('compatibility', () => { }); }); + describe('isAppleTerminal', () => { + it('should return true when TERM_PROGRAM=Apple_Terminal', () => { + vi.stubEnv('TERM_PROGRAM', 'Apple_Terminal'); + expect(isAppleTerminal()).toBe(true); + }); + + it('should return true when LC_TERMINAL=Apple_Terminal', () => { + vi.stubEnv('LC_TERMINAL', 'Apple_Terminal'); + expect(isAppleTerminal()).toBe(true); + }); + + it('should return true when LC_TERM_PROGRAM=Apple_Terminal', () => { + vi.stubEnv('LC_TERM_PROGRAM', 'Apple_Terminal'); + expect(isAppleTerminal()).toBe(true); + }); + + it('should return false when no Apple Terminal env vars are set', () => { + vi.stubEnv('TERM_PROGRAM', 'xterm'); + vi.stubEnv('LC_TERMINAL', ''); + vi.stubEnv('LC_TERM_PROGRAM', ''); + expect(isAppleTerminal()).toBe(false); + }); + }); + describe('supports256Colors', () => { it.each<{ depth: number; diff --git a/packages/core/src/utils/compatibility.ts b/packages/core/src/utils/compatibility.ts index 4b126bd4eb9..d2a72fe313f 100644 --- a/packages/core/src/utils/compatibility.ts +++ b/packages/core/src/utils/compatibility.ts @@ -67,7 +67,11 @@ export function isDumbTerminal(): boolean { * Detects if the current terminal is the default Apple Terminal.app. */ export function isAppleTerminal(): boolean { - return process.env['TERM_PROGRAM'] === 'Apple_Terminal'; + return ( + process.env['TERM_PROGRAM'] === 'Apple_Terminal' || + process.env['LC_TERMINAL'] === 'Apple_Terminal' || + process.env['LC_TERM_PROGRAM'] === 'Apple_Terminal' + ); } /** From 2cd8320b79dc1554d7d3d9fa95b6996a462ebe95 Mon Sep 17 00:00:00 2001 From: Dev Randalpura Date: Mon, 13 Apr 2026 21:06:36 +0000 Subject: [PATCH 03/11] Added isTrueColor check for default mac --- packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx | 6 +++--- .../shared/__snapshots__/HalfLinePaddedBox.test.tsx.snap | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx b/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx index 341d4ee9f01..de61169e1e1 100644 --- a/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx +++ b/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx @@ -15,7 +15,7 @@ import { getSafeLowColorBackground, } from '../../themes/color-utils.js'; import { isLowColorDepth } from '../../utils/terminalUtils.js'; -import { isAppleTerminal } from '@google/gemini-cli-core'; +import { supportsTrueColor } from '@google/gemini-cli-core'; export interface HalfLinePaddedBoxProps { /** @@ -80,9 +80,9 @@ const HalfLinePaddedBoxInternal: React.FC = ({ return <>{children}; } - const isApple = isAppleTerminal(); + const noTrueColor = !supportsTrueColor(); - if (isApple) { + if (noTrueColor) { return ( > renders Apple Terminal-specific blocks when detected 1`] = ` -"▀▀▀▀▀▀▀▀▀▀ +"▄▄▄▄▄▄▄▄▄▄ Content -▄▄▄▄▄▄▄▄▄▄ +▀▀▀▀▀▀▀▀▀▀ " `; From 2c7c75e8523921e1c9803a53cb1eee62739b666e Mon Sep 17 00:00:00 2001 From: Dev Randalpura Date: Mon, 13 Apr 2026 17:34:43 -0400 Subject: [PATCH 04/11] Cleaned up code --- .../__snapshots__/InputPrompt.test.tsx.snap | 10 ++++---- .../shared/HalfLinePaddedBox.test.tsx | 15 ++++++----- .../HalfLinePaddedBox.test.tsx.snap | 8 +++--- packages/core/src/utils/compatibility.test.ts | 25 ------------------- packages/core/src/utils/compatibility.ts | 6 +---- 5 files changed, 17 insertions(+), 47 deletions(-) diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/InputPrompt.test.tsx.snap index 721c8014df6..4f68431a107 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt.test.tsx.snap @@ -93,7 +93,7 @@ exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > exports[`InputPrompt > History Navigation and Completion Suppression > should not render suggestions during history navigation 1`] = ` "▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ > second message -▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ " `; @@ -120,7 +120,7 @@ exports[`InputPrompt > command search (Ctrl+R when not in shell) > expands and c exports[`InputPrompt > command search (Ctrl+R when not in shell) > renders match window and expanded view (snapshots) > command-search-render-collapsed-match 1`] = ` "▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ (r:) commit -▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ git commit -m "feat: add search" in src/app " `; @@ -128,7 +128,7 @@ exports[`InputPrompt > command search (Ctrl+R when not in shell) > renders match exports[`InputPrompt > command search (Ctrl+R when not in shell) > renders match window and expanded view (snapshots) > command-search-render-expanded-match 1`] = ` "▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ (r:) commit -▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ git commit -m "feat: add search" in src/app " `; @@ -136,14 +136,14 @@ exports[`InputPrompt > command search (Ctrl+R when not in shell) > renders match exports[`InputPrompt > image path transformation snapshots > should snapshot collapsed image path 1`] = ` "▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ > [Image ...reenshot2x.png] -▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ " `; exports[`InputPrompt > image path transformation snapshots > should snapshot expanded image path when cursor is on it 1`] = ` "▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ > @/path/to/screenshots/screenshot2x.png -▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ " `; diff --git a/packages/cli/src/ui/components/shared/HalfLinePaddedBox.test.tsx b/packages/cli/src/ui/components/shared/HalfLinePaddedBox.test.tsx index 32d2e6d766d..1bca052b14a 100644 --- a/packages/cli/src/ui/components/shared/HalfLinePaddedBox.test.tsx +++ b/packages/cli/src/ui/components/shared/HalfLinePaddedBox.test.tsx @@ -3,12 +3,11 @@ * Copyright 2025 Google LLC * SPDX-License-Identifier: Apache-2.0 */ - import { renderWithProviders } from '../../../test-utils/render.js'; import { HalfLinePaddedBox } from './HalfLinePaddedBox.js'; import { Text, useIsScreenReaderEnabled } from 'ink'; import { describe, it, expect, vi, afterEach } from 'vitest'; -import { isAppleTerminal } from '@google/gemini-cli-core'; +import { supportsTrueColor } from '@google/gemini-cli-core'; vi.mock('ink', async () => { const actual = await vi.importActual('ink'); @@ -22,20 +21,20 @@ vi.mock('@google/gemini-cli-core', async () => { const actual = await vi.importActual('@google/gemini-cli-core'); return { ...actual, - isAppleTerminal: vi.fn(() => false), + supportsTrueColor: vi.fn(() => true), }; }); describe('', () => { const mockUseIsScreenReaderEnabled = vi.mocked(useIsScreenReaderEnabled); - const mockIsAppleTerminal = vi.mocked(isAppleTerminal); + const mockSupportsTrueColor = vi.mocked(supportsTrueColor); afterEach(() => { vi.restoreAllMocks(); }); - it('renders standard background and blocks when not Apple Terminal', async () => { - mockIsAppleTerminal.mockReturnValue(false); + it('renders standard background and blocks when true color is supported', async () => { + mockSupportsTrueColor.mockReturnValue(true); const { lastFrame, unmount } = await renderWithProviders( @@ -49,8 +48,8 @@ describe('', () => { unmount(); }); - it('renders Apple Terminal-specific blocks when detected', async () => { - mockIsAppleTerminal.mockReturnValue(true); + it('renders alternative blocks when true color is not supported', async () => { + mockSupportsTrueColor.mockReturnValue(false); const { lastFrame, unmount } = await renderWithProviders( diff --git a/packages/cli/src/ui/components/shared/__snapshots__/HalfLinePaddedBox.test.tsx.snap b/packages/cli/src/ui/components/shared/__snapshots__/HalfLinePaddedBox.test.tsx.snap index c3e0a71443c..331f3cec7cb 100644 --- a/packages/cli/src/ui/components/shared/__snapshots__/HalfLinePaddedBox.test.tsx.snap +++ b/packages/cli/src/ui/components/shared/__snapshots__/HalfLinePaddedBox.test.tsx.snap @@ -1,9 +1,9 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[` > renders Apple Terminal-specific blocks when detected 1`] = ` -"▄▄▄▄▄▄▄▄▄▄ +exports[` > renders alternative blocks when true color is not supported 1`] = ` +"▀▀▀▀▀▀▀▀▀▀ Content -▀▀▀▀▀▀▀▀▀▀ +▄▄▄▄▄▄▄▄▄▄ " `; @@ -17,7 +17,7 @@ exports[` > renders nothing when useBackgroundColor is fals " `; -exports[` > renders standard background and blocks when not Apple Terminal 1`] = ` +exports[` > renders standard background and blocks when true color is supported 1`] = ` "▄▄▄▄▄▄▄▄▄▄ Content ▀▀▀▀▀▀▀▀▀▀ diff --git a/packages/core/src/utils/compatibility.test.ts b/packages/core/src/utils/compatibility.test.ts index bf8c677ec0f..28fa26453c1 100644 --- a/packages/core/src/utils/compatibility.test.ts +++ b/packages/core/src/utils/compatibility.test.ts @@ -13,7 +13,6 @@ import { isGnuScreen, isLowColorTmux, isDumbTerminal, - isAppleTerminal, supports256Colors, supportsTrueColor, getCompatibilityWarnings, @@ -170,30 +169,6 @@ describe('compatibility', () => { }); }); - describe('isAppleTerminal', () => { - it('should return true when TERM_PROGRAM=Apple_Terminal', () => { - vi.stubEnv('TERM_PROGRAM', 'Apple_Terminal'); - expect(isAppleTerminal()).toBe(true); - }); - - it('should return true when LC_TERMINAL=Apple_Terminal', () => { - vi.stubEnv('LC_TERMINAL', 'Apple_Terminal'); - expect(isAppleTerminal()).toBe(true); - }); - - it('should return true when LC_TERM_PROGRAM=Apple_Terminal', () => { - vi.stubEnv('LC_TERM_PROGRAM', 'Apple_Terminal'); - expect(isAppleTerminal()).toBe(true); - }); - - it('should return false when no Apple Terminal env vars are set', () => { - vi.stubEnv('TERM_PROGRAM', 'xterm'); - vi.stubEnv('LC_TERMINAL', ''); - vi.stubEnv('LC_TERM_PROGRAM', ''); - expect(isAppleTerminal()).toBe(false); - }); - }); - describe('supports256Colors', () => { it.each<{ depth: number; diff --git a/packages/core/src/utils/compatibility.ts b/packages/core/src/utils/compatibility.ts index 2141f468281..8a997b42cfa 100644 --- a/packages/core/src/utils/compatibility.ts +++ b/packages/core/src/utils/compatibility.ts @@ -67,11 +67,7 @@ export function isDumbTerminal(): boolean { * Detects if the current terminal is the default Apple Terminal.app. */ export function isAppleTerminal(): boolean { - return ( - process.env['TERM_PROGRAM'] === 'Apple_Terminal' || - process.env['LC_TERMINAL'] === 'Apple_Terminal' || - process.env['LC_TERM_PROGRAM'] === 'Apple_Terminal' - ); + return process.env['TERM_PROGRAM'] === 'Apple_Terminal'; } /** From 1522eed47197845875ef1e5ab677c4b653767e12 Mon Sep 17 00:00:00 2001 From: Dev Randalpura Date: Wed, 15 Apr 2026 11:48:36 -0400 Subject: [PATCH 05/11] Added truecolor mock --- packages/cli/test-setup.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/cli/test-setup.ts b/packages/cli/test-setup.ts index 1a0947b9590..e64e553ede7 100644 --- a/packages/cli/test-setup.ts +++ b/packages/cli/test-setup.ts @@ -37,6 +37,14 @@ process.env.FORCE_GENERIC_KEYBINDING_HINTS = 'true'; // Force generic terminal declaration to ensure stable snapshots across different host environments. process.env.TERM_PROGRAM = 'generic'; +// Force true color support for terminal capability checks to ensure stable snapshots across different terminals. +process.env.COLORTERM = 'truecolor'; + +// Mock stdout color depth to ensure true color capability is detected consistently across local and headless CI runners. +if (process.stdout) { + process.stdout.getColorDepth = () => 24; +} + import './src/test-utils/customMatchers.js'; let consoleErrorSpy: vi.SpyInstance; From d0b2c5aaf30a9f88d65dcd1b8270920287778b7a Mon Sep 17 00:00:00 2001 From: Dev Randalpura Date: Thu, 16 Apr 2026 14:59:44 -0400 Subject: [PATCH 06/11] Changed mac case to just display empty line with background --- .../cli/src/ui/components/shared/HalfLinePaddedBox.tsx | 8 ++++---- .../shared/__snapshots__/HalfLinePaddedBox.test.tsx.snap | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx b/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx index de61169e1e1..6082155d2bd 100644 --- a/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx +++ b/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx @@ -93,14 +93,14 @@ const HalfLinePaddedBoxInternal: React.FC = ({ backgroundColor={backgroundColor} > - - {'▀'.repeat(terminalWidth)} + + {' '.repeat(terminalWidth)} {children} - - {'▄'.repeat(terminalWidth)} + + {' '.repeat(terminalWidth)} diff --git a/packages/cli/src/ui/components/shared/__snapshots__/HalfLinePaddedBox.test.tsx.snap b/packages/cli/src/ui/components/shared/__snapshots__/HalfLinePaddedBox.test.tsx.snap index 331f3cec7cb..739d4e17cb0 100644 --- a/packages/cli/src/ui/components/shared/__snapshots__/HalfLinePaddedBox.test.tsx.snap +++ b/packages/cli/src/ui/components/shared/__snapshots__/HalfLinePaddedBox.test.tsx.snap @@ -1,9 +1,9 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[` > renders alternative blocks when true color is not supported 1`] = ` -"▀▀▀▀▀▀▀▀▀▀ +" Content -▄▄▄▄▄▄▄▄▄▄ + " `; From b5a60426caff52429b92bc601899835c24763a10 Mon Sep 17 00:00:00 2001 From: Dev Randalpura Date: Tue, 21 Apr 2026 14:24:39 -0400 Subject: [PATCH 07/11] Removed lines around input --- .../src/ui/components/InputPrompt.test.tsx | 176 +----------------- .../cli/src/ui/components/InputPrompt.tsx | 52 +----- ...ng-of-a-line-in-a-multiline-block.snap.svg | 20 +- ...nd-of-a-line-in-a-multiline-block.snap.svg | 18 +- ...le-of-a-line-in-a-multiline-block.snap.svg | 26 +-- ...a-blank-line-in-a-multiline-block.snap.svg | 20 +- ...er-multi-byte-unicode-characters-.snap.svg | 16 +- ...tly-at-the-beginning-of-the-line-.snap.svg | 16 +- ...e-end-of-a-line-with-unicode-cha-.snap.svg | 12 +- ...e-end-of-a-short-line-with-unico-.snap.svg | 14 +- ...correctly-at-the-end-of-the-line-.snap.svg | 14 +- ...or-multi-byte-unicode-characters-.snap.svg | 18 +- ...isplay-cursor-correctly-mid-word-.snap.svg | 18 +- ...correctly-on-a-highlighted-token-.snap.svg | 20 +- ...rrectly-on-a-space-between-words-.snap.svg | 16 +- ...ursor-correctly-on-an-empty-line-.snap.svg | 14 +- ...iline-input-including-blank-lines.snap.svg | 20 +- .../__snapshots__/InputPrompt.test.tsx.snap | 96 +++------- .../components/shared/HalfLinePaddedBox.tsx | 16 +- 19 files changed, 123 insertions(+), 479 deletions(-) diff --git a/packages/cli/src/ui/components/InputPrompt.test.tsx b/packages/cli/src/ui/components/InputPrompt.test.tsx index 7a241691e8d..767c179d680 100644 --- a/packages/cli/src/ui/components/InputPrompt.test.tsx +++ b/packages/cli/src/ui/components/InputPrompt.test.tsx @@ -56,11 +56,8 @@ import * as clipboardUtils from '../utils/clipboardUtils.js'; import { useKittyKeyboardProtocol } from '../hooks/useKittyKeyboardProtocol.js'; import { createMockCommandContext } from '../../test-utils/mockCommandContext.js'; import stripAnsi from 'strip-ansi'; -import chalk from 'chalk'; import { StreamingState } from '../types.js'; import { terminalCapabilityManager } from '../utils/terminalCapabilityManager.js'; -import type { UIState } from '../contexts/UIStateContext.js'; -import { isLowColorDepth } from '../utils/terminalUtils.js'; import { cpLen } from '../utils/textUtils.js'; import { defaultKeyMatchers, Command } from '../key/keyMatchers.js'; import { useKeypress, type Key } from '../hooks/useKeypress.js'; @@ -78,9 +75,6 @@ vi.mock('../hooks/useReverseSearchCompletion.js'); vi.mock('clipboardy'); vi.mock('../utils/clipboardUtils.js'); vi.mock('../hooks/useKittyKeyboardProtocol.js'); -vi.mock('../utils/terminalUtils.js', () => ({ - isLowColorDepth: vi.fn(() => false), -})); // Mock ink BEFORE importing components that use it to intercept terminalCursorPosition vi.mock('ink', async (importOriginal) => { @@ -1914,172 +1908,6 @@ describe('InputPrompt', () => { unmount(); }); - describe('Background Color Styles', () => { - beforeEach(() => { - vi.mocked(isLowColorDepth).mockReturnValue(false); - }); - - afterEach(() => { - vi.restoreAllMocks(); - }); - - it('should render with background color by default', async () => { - const { stdout, unmount } = await renderWithProviders( - , - ); - - await waitFor(() => { - const frame = stdout.lastFrameRaw(); - expect(frame).toContain('▀'); - expect(frame).toContain('▄'); - }); - unmount(); - }); - - it.each([ - { color: 'black', name: 'black' }, - { color: '#000000', name: '#000000' }, - { color: '#000', name: '#000' }, - { color: 'white', name: 'white' }, - { color: '#ffffff', name: '#ffffff' }, - { color: '#fff', name: '#fff' }, - ])( - 'should render with safe grey background but NO side borders in 8-bit mode when background is $name', - async ({ color }) => { - vi.mocked(isLowColorDepth).mockReturnValue(true); - - const { stdout, unmount } = await renderWithProviders( - , - { - uiState: { - terminalBackgroundColor: color, - } as Partial, - }, - ); - - const isWhite = - color === 'white' || color === '#ffffff' || color === '#fff'; - const expectedBgColor = isWhite ? '#eeeeee' : '#1c1c1c'; - - await waitFor(() => { - const frame = stdout.lastFrameRaw(); - - // Use chalk to get the expected background color escape sequence - const bgCheck = chalk.bgHex(expectedBgColor)(' '); - const bgCode = bgCheck.substring(0, bgCheck.indexOf(' ')); - - // Background color code should be present - expect(frame).toContain(bgCode); - // Background characters should be rendered - expect(frame).toContain('▀'); - expect(frame).toContain('▄'); - // Side borders should STILL be removed - expect(frame).not.toContain('│'); - }); - - unmount(); - }, - ); - - it('should NOT render with background color but SHOULD render horizontal lines when color depth is < 24 and background is NOT black', async () => { - vi.mocked(isLowColorDepth).mockReturnValue(true); - - const { stdout, unmount } = await renderWithProviders( - , - { - uiState: { - terminalBackgroundColor: '#333333', - } as Partial, - }, - ); - - await waitFor(() => { - const frame = stdout.lastFrameRaw(); - expect(frame).not.toContain('▀'); - expect(frame).not.toContain('▄'); - // It SHOULD have horizontal fallback lines - expect(frame).toContain('─'); - // It SHOULD NOT have vertical side borders (standard Box borders have │) - expect(frame).not.toContain('│'); - }); - unmount(); - }); - it('should handle 4-bit color mode (16 colors) as low color depth', async () => { - vi.mocked(isLowColorDepth).mockReturnValue(true); - - const { stdout, unmount } = await renderWithProviders( - , - { - uiState: { - terminalBackgroundColor: 'black', - } as Partial, - }, - ); - - await waitFor(() => { - const frame = stdout.lastFrameRaw(); - - expect(frame).toContain('▀'); - - expect(frame).not.toContain('│'); - }); - - unmount(); - }); - - it('should render horizontal lines (but NO background) in 8-bit mode when background is blue', async () => { - vi.mocked(isLowColorDepth).mockReturnValue(true); - - const { stdout, unmount } = await renderWithProviders( - , - - { - uiState: { - terminalBackgroundColor: 'blue', - } as Partial, - }, - ); - - await waitFor(() => { - const frame = stdout.lastFrameRaw(); - - // Should NOT have background characters - - expect(frame).not.toContain('▀'); - - expect(frame).not.toContain('▄'); - - // Should HAVE horizontal lines from the fallback Box borders - - // Box style "round" uses these for top/bottom - - expect(frame).toContain('─'); - - // Should NOT have vertical side borders - - expect(frame).not.toContain('│'); - }); - - unmount(); - }); - - it('should render with plain borders when useBackgroundColor is false', async () => { - props.config.getUseBackgroundColor = () => false; - const { stdout, unmount } = await renderWithProviders( - , - ); - - await waitFor(() => { - const frame = stdout.lastFrameRaw(); - expect(frame).not.toContain('▀'); - expect(frame).not.toContain('▄'); - // Check for Box borders (round style uses unicode box chars) - expect(frame).toMatch(/[─│┐└┘┌]/); - }); - unmount(); - }); - }); - describe('cursor-based completion trigger', () => { it.each([ { @@ -4007,9 +3835,9 @@ describe('InputPrompt', () => { expect(stdout.lastFrame()).toContain('hello world'); }); - // With plain borders: 1(border) + 1(padding) + 2(prompt) = 4 offset (x=4, col=5) + // With plain borders offset await act(async () => { - stdin.write(`\x1b[<0;5;2M`); // Click at col 5, row 2 + stdin.write(`\x1b[<0;4;1M`); // Click at col 4, row 1 }); await waitFor(() => { diff --git a/packages/cli/src/ui/components/InputPrompt.tsx b/packages/cli/src/ui/components/InputPrompt.tsx index 2091817745e..b6cd16951cd 100644 --- a/packages/cli/src/ui/components/InputPrompt.tsx +++ b/packages/cli/src/ui/components/InputPrompt.tsx @@ -73,8 +73,6 @@ import { import { parseSlashCommand } from '../../utils/commands.js'; import * as path from 'node:path'; import { SCREEN_READER_USER_PREFIX } from '../textConstants.js'; -import { getSafeLowColorBackground } from '../themes/color-utils.js'; -import { isLowColorDepth } from '../utils/terminalUtils.js'; import { useShellFocusState } from '../contexts/ShellFocusContext.js'; import { useUIState } from '../contexts/UIStateContext.js'; import { useInputState } from '../contexts/InputContext.js'; @@ -242,7 +240,6 @@ export const InputPrompt: React.FC = ({ toggleCleanUiDetailsVisible, } = useUIActions(); const { - terminalWidth, activePtyId, history, backgroundTasks, @@ -1645,21 +1642,6 @@ export const InputPrompt: React.FC = ({ ); const useBackgroundColor = config.getUseBackgroundColor(); - const isLowColor = isLowColorDepth(); - const terminalBg = theme.background.primary || 'black'; - - // We should fallback to lines if the background color is disabled OR if it is - // enabled but we are in a low color depth terminal where we don't have a safe - // background color to use. - const useLineFallback = useMemo(() => { - if (!useBackgroundColor) { - return true; - } - if (isLowColor) { - return !getSafeLowColorBackground(terminalBg); - } - return false; - }, [useBackgroundColor, isLowColor, terminalBg]); const prevCursorRef = useRef(buffer.visualCursor); const prevTextRef = useRef(buffer.text); @@ -1698,8 +1680,9 @@ export const InputPrompt: React.FC = ({ } }, [buffer.visualCursor, buffer.text, focus]); - const listBackgroundColor = - useLineFallback || !useBackgroundColor ? undefined : theme.background.input; + const listBackgroundColor = !useBackgroundColor + ? undefined + : theme.background.input; useEffect(() => { if (onSuggestionsVisibilityChange) { @@ -1762,20 +1745,6 @@ export const InputPrompt: React.FC = ({ return ( <> {suggestionsPosition === 'above' && suggestionsNode} - {useLineFallback ? ( - - ) : null} = ({ flexDirection="row" paddingX={1} borderColor={borderColor} - borderStyle={useLineFallback ? 'round' : undefined} borderTop={false} borderBottom={false} borderLeft={!useBackgroundColor} @@ -1880,20 +1848,6 @@ export const InputPrompt: React.FC = ({ - {useLineFallback ? ( - - ) : null} {suggestionsPosition === 'below' && suggestionsNode} ); diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-at-the-beginning-of-a-line-in-a-multiline-block.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-at-the-beginning-of-a-line-in-a-multiline-block.snap.svg index fcea0df1b10..f7e74c9bd15 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-at-the-beginning-of-a-line-in-a-multiline-block.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-at-the-beginning-of-a-line-in-a-multiline-block.snap.svg @@ -1,19 +1,13 @@ - + - + - ──────────────────────────────────────────────────────────────────────────────────────────────────── - - > - first line - - - - s - econd line - - ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + first line + + s + econd line \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-line-in-a-multiline-block.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-line-in-a-multiline-block.snap.svg index 5adfc3cb315..150aa209968 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-line-in-a-multiline-block.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-line-in-a-multiline-block.snap.svg @@ -1,18 +1,12 @@ - + - + - ──────────────────────────────────────────────────────────────────────────────────────────────────── - - > - first line - - - - second line - - ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + first line + + second line \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-in-the-middle-of-a-line-in-a-multiline-block.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-in-the-middle-of-a-line-in-a-multiline-block.snap.svg index 7df089a0563..f91778654b1 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-in-the-middle-of-a-line-in-a-multiline-block.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-in-the-middle-of-a-line-in-a-multiline-block.snap.svg @@ -1,23 +1,15 @@ - + - + - ──────────────────────────────────────────────────────────────────────────────────────────────────── - - > - first line - - - sec - - o - nd line - - - third line - - ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + first line + sec + + o + nd line + third line \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-on-a-blank-line-in-a-multiline-block.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-on-a-blank-line-in-a-multiline-block.snap.svg index f72c857aa9d..cbbffb4a402 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-on-a-blank-line-in-a-multiline-block.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-on-a-blank-line-in-a-multiline-block.snap.svg @@ -1,20 +1,12 @@ - + - + - ──────────────────────────────────────────────────────────────────────────────────────────────────── - - > - first line - - - - - - third line - - ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + first line + + third line \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-after-multi-byte-unicode-characters-.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-after-multi-byte-unicode-characters-.snap.svg index 22dcd7b4c30..2856c57aa76 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-after-multi-byte-unicode-characters-.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-after-multi-byte-unicode-characters-.snap.svg @@ -1,16 +1,12 @@ - + - + - ──────────────────────────────────────────────────────────────────────────────────────────────────── - - > - 👍 - - A - - ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + 👍 + + A \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-beginning-of-the-line-.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-beginning-of-the-line-.snap.svg index ac451d24722..5a5c7dfe150 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-beginning-of-the-line-.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-beginning-of-the-line-.snap.svg @@ -1,16 +1,12 @@ - + - + - ──────────────────────────────────────────────────────────────────────────────────────────────────── - - > - - h - ello - - ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + + h + ello \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-line-with-unicode-cha-.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-line-with-unicode-cha-.snap.svg index ef6550eef84..116b4232b31 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-line-with-unicode-cha-.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-line-with-unicode-cha-.snap.svg @@ -1,14 +1,10 @@ - + - + - ──────────────────────────────────────────────────────────────────────────────────────────────────── - - > - hello 👍 - - ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + hello 👍 \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-short-line-with-unico-.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-short-line-with-unico-.snap.svg index b6d655a8d15..dcfb3ba90dd 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-short-line-with-unico-.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-short-line-with-unico-.snap.svg @@ -1,15 +1,11 @@ - + - + - ──────────────────────────────────────────────────────────────────────────────────────────────────── - - > - 👍 - - - ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + 👍 + \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-the-line-.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-the-line-.snap.svg index 166f5725b73..1dbe1634b56 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-the-line-.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-the-line-.snap.svg @@ -1,15 +1,11 @@ - + - + - ──────────────────────────────────────────────────────────────────────────────────────────────────── - - > - hello - - - ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + hello + \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-for-multi-byte-unicode-characters-.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-for-multi-byte-unicode-characters-.snap.svg index 46d7df69e40..e8d9d882b03 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-for-multi-byte-unicode-characters-.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-for-multi-byte-unicode-characters-.snap.svg @@ -1,17 +1,13 @@ - + - + - ──────────────────────────────────────────────────────────────────────────────────────────────────── - - > - hello - - 👍 - world - - ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + hello + + 👍 + world \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-mid-word-.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-mid-word-.snap.svg index d583a101835..d92f48e88c5 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-mid-word-.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-mid-word-.snap.svg @@ -1,17 +1,13 @@ - + - + - ──────────────────────────────────────────────────────────────────────────────────────────────────── - - > - hel - - l - o world - - ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + hel + + l + o world \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-a-highlighted-token-.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-a-highlighted-token-.snap.svg index 0e2c0a1fbdc..ff1f09f782f 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-a-highlighted-token-.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-a-highlighted-token-.snap.svg @@ -1,18 +1,14 @@ - + - + - ──────────────────────────────────────────────────────────────────────────────────────────────────── - - > - run - @path - - / - to/file - - ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + run + @path + + / + to/file \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-a-space-between-words-.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-a-space-between-words-.snap.svg index e57d234d139..b0302572743 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-a-space-between-words-.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-a-space-between-words-.snap.svg @@ -1,16 +1,12 @@ - + - + - ──────────────────────────────────────────────────────────────────────────────────────────────────── - - > - hello - - world - - ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + hello + + world \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-an-empty-line-.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-an-empty-line-.snap.svg index 7d9249acb57..1c5f7c03f66 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-an-empty-line-.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-an-empty-line-.snap.svg @@ -1,15 +1,11 @@ - + - + - ──────────────────────────────────────────────────────────────────────────────────────────────────── - - > - - Type your message or @path/to/file - - ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + + Type your message or @path/to/file \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-multiline-rendering-should-correctly-render-multiline-input-including-blank-lines.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-multiline-rendering-should-correctly-render-multiline-input-including-blank-lines.snap.svg index d562880d0da..1229491f794 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-multiline-rendering-should-correctly-render-multiline-input-including-blank-lines.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-multiline-rendering-should-correctly-render-multiline-input-including-blank-lines.snap.svg @@ -1,20 +1,12 @@ - + - + - ──────────────────────────────────────────────────────────────────────────────────────────────────── - - > - hello - - - - - world - - - ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + hello + world + \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/InputPrompt.test.tsx.snap index 4f68431a107..cd01d91b504 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt.test.tsx.snap @@ -1,94 +1,46 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`InputPrompt > Highlighting and Cursor Display > multi-line scenarios > should display cursor correctly 'at the beginning of a line' in a multiline block 1`] = ` -"──────────────────────────────────────────────────────────────────────────────────────────────────── -│ > first line │ -│ second line │ -────────────────────────────────────────────────────────────────────────────────────────────────────" +" > first line + second line" `; exports[`InputPrompt > Highlighting and Cursor Display > multi-line scenarios > should display cursor correctly 'at the end of a line' in a multiline block 1`] = ` -"──────────────────────────────────────────────────────────────────────────────────────────────────── -│ > first line │ -│ second line │ -────────────────────────────────────────────────────────────────────────────────────────────────────" +" > first line + second line" `; exports[`InputPrompt > Highlighting and Cursor Display > multi-line scenarios > should display cursor correctly 'in the middle of a line' in a multiline block 1`] = ` -"──────────────────────────────────────────────────────────────────────────────────────────────────── -│ > first line │ -│ second line │ -│ third line │ -────────────────────────────────────────────────────────────────────────────────────────────────────" +" > first line + second line + third line" `; exports[`InputPrompt > Highlighting and Cursor Display > multi-line scenarios > should display cursor on a blank line in a multiline block 1`] = ` -"──────────────────────────────────────────────────────────────────────────────────────────────────── -│ > first line │ -│ │ -│ third line │ -────────────────────────────────────────────────────────────────────────────────────────────────────" +" > first line + + third line" `; -exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'after multi-byte unicode characters' 1`] = ` -"──────────────────────────────────────────────────────────────────────────────────────────────────── -│ > 👍A │ -────────────────────────────────────────────────────────────────────────────────────────────────────" -`; +exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'after multi-byte unicode characters' 1`] = `" > 👍A"`; -exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'at the beginning of the line' 1`] = ` -"──────────────────────────────────────────────────────────────────────────────────────────────────── -│ > hello │ -────────────────────────────────────────────────────────────────────────────────────────────────────" -`; +exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'at the beginning of the line' 1`] = `" > hello"`; -exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'at the end of a line with unicode cha…' 1`] = ` -"──────────────────────────────────────────────────────────────────────────────────────────────────── -│ > hello 👍 │ -────────────────────────────────────────────────────────────────────────────────────────────────────" -`; +exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'at the end of a line with unicode cha…' 1`] = `" > hello 👍"`; -exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'at the end of a short line with unico…' 1`] = ` -"──────────────────────────────────────────────────────────────────────────────────────────────────── -│ > 👍 │ -────────────────────────────────────────────────────────────────────────────────────────────────────" -`; +exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'at the end of a short line with unico…' 1`] = `" > 👍 "`; -exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'at the end of the line' 1`] = ` -"──────────────────────────────────────────────────────────────────────────────────────────────────── -│ > hello │ -────────────────────────────────────────────────────────────────────────────────────────────────────" -`; +exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'at the end of the line' 1`] = `" > hello "`; -exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'for multi-byte unicode characters' 1`] = ` -"──────────────────────────────────────────────────────────────────────────────────────────────────── -│ > hello 👍 world │ -────────────────────────────────────────────────────────────────────────────────────────────────────" -`; +exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'for multi-byte unicode characters' 1`] = `" > hello 👍 world"`; -exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'mid-word' 1`] = ` -"──────────────────────────────────────────────────────────────────────────────────────────────────── -│ > hello world │ -────────────────────────────────────────────────────────────────────────────────────────────────────" -`; +exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'mid-word' 1`] = `" > hello world"`; -exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'on a highlighted token' 1`] = ` -"──────────────────────────────────────────────────────────────────────────────────────────────────── -│ > run @path/to/file │ -────────────────────────────────────────────────────────────────────────────────────────────────────" -`; +exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'on a highlighted token' 1`] = `" > run @path/to/file"`; -exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'on a space between words' 1`] = ` -"──────────────────────────────────────────────────────────────────────────────────────────────────── -│ > hello world │ -────────────────────────────────────────────────────────────────────────────────────────────────────" -`; +exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'on a space between words' 1`] = `" > hello world"`; -exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'on an empty line' 1`] = ` -"──────────────────────────────────────────────────────────────────────────────────────────────────── -│ > Type your message or @path/to/file │ -────────────────────────────────────────────────────────────────────────────────────────────────────" -`; +exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'on an empty line' 1`] = `" > Type your message or @path/to/file"`; exports[`InputPrompt > History Navigation and Completion Suppression > should not render suggestions during history navigation 1`] = ` "▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ @@ -169,11 +121,9 @@ exports[`InputPrompt > mouse interaction > should toggle paste expansion on doub `; exports[`InputPrompt > multiline rendering > should correctly render multiline input including blank lines 1`] = ` -"──────────────────────────────────────────────────────────────────────────────────────────────────── -│ > hello │ -│ │ -│ world │ -────────────────────────────────────────────────────────────────────────────────────────────────────" +" > hello + + world " `; exports[`InputPrompt > snapshots > should not show inverted cursor when shell is focused 1`] = ` diff --git a/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx b/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx index 6082155d2bd..001a69c7b1b 100644 --- a/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx +++ b/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx @@ -9,12 +9,7 @@ import { useMemo } from 'react'; import { Box, Text, useIsScreenReaderEnabled } from 'ink'; import { useUIState } from '../../contexts/UIStateContext.js'; import { theme } from '../../semantic-colors.js'; -import { - interpolateColor, - resolveColor, - getSafeLowColorBackground, -} from '../../themes/color-utils.js'; -import { isLowColorDepth } from '../../utils/terminalUtils.js'; +import { interpolateColor, resolveColor } from '../../themes/color-utils.js'; import { supportsTrueColor } from '@google/gemini-cli-core'; export interface HalfLinePaddedBoxProps { @@ -57,14 +52,7 @@ const HalfLinePaddedBoxInternal: React.FC = ({ const { terminalWidth } = useUIState(); const terminalBg = theme.background.primary || 'black'; - const isLowColor = isLowColorDepth(); - const backgroundColor = useMemo(() => { - // Interpolated background colors often look bad in 256-color terminals - if (isLowColor) { - return getSafeLowColorBackground(terminalBg); - } - const resolvedBase = resolveColor(backgroundBaseColor) || backgroundBaseColor; const resolvedTerminalBg = resolveColor(terminalBg) || terminalBg; @@ -74,7 +62,7 @@ const HalfLinePaddedBoxInternal: React.FC = ({ resolvedBase, backgroundOpacity, ); - }, [backgroundBaseColor, backgroundOpacity, terminalBg, isLowColor]); + }, [backgroundBaseColor, backgroundOpacity, terminalBg]); if (!backgroundColor) { return <>{children}; From eb9f1cba1678cc638a4c785b24d280dd03682244 Mon Sep 17 00:00:00 2001 From: Dev Randalpura Date: Tue, 21 Apr 2026 17:03:16 -0400 Subject: [PATCH 08/11] Fixed NO_COLOR=true case --- .../cli/src/ui/components/InputPrompt.tsx | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/ui/components/InputPrompt.tsx b/packages/cli/src/ui/components/InputPrompt.tsx index b6cd16951cd..bb1f702e8a3 100644 --- a/packages/cli/src/ui/components/InputPrompt.tsx +++ b/packages/cli/src/ui/components/InputPrompt.tsx @@ -240,6 +240,7 @@ export const InputPrompt: React.FC = ({ toggleCleanUiDetailsVisible, } = useUIActions(); const { + terminalWidth, activePtyId, history, backgroundTasks, @@ -1684,6 +1685,8 @@ export const InputPrompt: React.FC = ({ ? undefined : theme.background.input; + const useLineFallback = !!process.env['NO_COLOR']; + useEffect(() => { if (onSuggestionsVisibilityChange) { onSuggestionsVisibilityChange(shouldShowSuggestions); @@ -1745,6 +1748,20 @@ export const InputPrompt: React.FC = ({ return ( <> {suggestionsPosition === 'above' && suggestionsNode} + {useLineFallback ? ( + + ) : null} = ({ flexDirection="row" paddingX={1} borderColor={borderColor} + borderStyle={useLineFallback ? 'round' : undefined} borderTop={false} borderBottom={false} - borderLeft={!useBackgroundColor} - borderRight={!useBackgroundColor} + borderLeft={!useBackgroundColor || useLineFallback} + borderRight={!useBackgroundColor || useLineFallback} > = ({ + {useLineFallback ? ( + + ) : null} {suggestionsPosition === 'below' && suggestionsNode} ); From a7efe651f13a8241a3c4fb259ec20287016c7c1b Mon Sep 17 00:00:00 2001 From: Dev Randalpura Date: Tue, 21 Apr 2026 17:28:43 -0400 Subject: [PATCH 09/11] Removed vertical lines in input --- packages/cli/src/ui/components/InputPrompt.tsx | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/packages/cli/src/ui/components/InputPrompt.tsx b/packages/cli/src/ui/components/InputPrompt.tsx index bb1f702e8a3..c9f75c740bb 100644 --- a/packages/cli/src/ui/components/InputPrompt.tsx +++ b/packages/cli/src/ui/components/InputPrompt.tsx @@ -1748,7 +1748,7 @@ export const InputPrompt: React.FC = ({ return ( <> {suggestionsPosition === 'above' && suggestionsNode} - {useLineFallback ? ( + {useLineFallback || !useBackgroundColor ? ( = ({ backgroundOpacity={1} useBackgroundColor={useBackgroundColor} > - + = ({ - {useLineFallback ? ( + {useLineFallback || !useBackgroundColor ? ( Date: Tue, 21 Apr 2026 17:36:45 -0400 Subject: [PATCH 10/11] Addressed comment --- .../components/shared/HalfLinePaddedBox.tsx | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx b/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx index 001a69c7b1b..21ddfad4277 100644 --- a/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx +++ b/packages/cli/src/ui/components/shared/HalfLinePaddedBox.tsx @@ -72,25 +72,8 @@ const HalfLinePaddedBoxInternal: React.FC = ({ if (noTrueColor) { return ( - - - - {' '.repeat(terminalWidth)} - - + {children} - - - {' '.repeat(terminalWidth)} - - ); } From 38f29d19cba5f5052fecb44a4e54e92496b90a2b Mon Sep 17 00:00:00 2001 From: Dev Randalpura Date: Wed, 22 Apr 2026 12:02:23 -0400 Subject: [PATCH 11/11] Fixed tests --- .../src/ui/components/InputPrompt.test.tsx | 2 +- ...ng-of-a-line-in-a-multiline-block.snap.svg | 16 ++-- ...nd-of-a-line-in-a-multiline-block.snap.svg | 14 +-- ...le-of-a-line-in-a-multiline-block.snap.svg | 20 +++-- ...a-blank-line-in-a-multiline-block.snap.svg | 14 +-- ...er-multi-byte-unicode-characters-.snap.svg | 14 +-- ...tly-at-the-beginning-of-the-line-.snap.svg | 14 +-- ...e-end-of-a-line-with-unicode-cha-.snap.svg | 10 ++- ...e-end-of-a-short-line-with-unico-.snap.svg | 12 +-- ...correctly-at-the-end-of-the-line-.snap.svg | 12 +-- ...or-multi-byte-unicode-characters-.snap.svg | 16 ++-- ...isplay-cursor-correctly-mid-word-.snap.svg | 16 ++-- ...correctly-on-a-highlighted-token-.snap.svg | 18 ++-- ...rrectly-on-a-space-between-words-.snap.svg | 14 +-- ...ursor-correctly-on-an-empty-line-.snap.svg | 12 +-- ...iline-input-including-blank-lines.snap.svg | 14 +-- .../__snapshots__/InputPrompt.test.tsx.snap | 90 ++++++++++++++----- 17 files changed, 194 insertions(+), 114 deletions(-) diff --git a/packages/cli/src/ui/components/InputPrompt.test.tsx b/packages/cli/src/ui/components/InputPrompt.test.tsx index 767c179d680..e50a2f1d812 100644 --- a/packages/cli/src/ui/components/InputPrompt.test.tsx +++ b/packages/cli/src/ui/components/InputPrompt.test.tsx @@ -3837,7 +3837,7 @@ describe('InputPrompt', () => { // With plain borders offset await act(async () => { - stdin.write(`\x1b[<0;4;1M`); // Click at col 4, row 1 + stdin.write(`\x1b[<0;4;2M`); // Click at col 4, row 2 }); await waitFor(() => { diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-at-the-beginning-of-a-line-in-a-multiline-block.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-at-the-beginning-of-a-line-in-a-multiline-block.snap.svg index f7e74c9bd15..642bc59c846 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-at-the-beginning-of-a-line-in-a-multiline-block.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-at-the-beginning-of-a-line-in-a-multiline-block.snap.svg @@ -1,13 +1,15 @@ - + - + - > - first line - - s - econd line + ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + first line + + s + econd line + ──────────────────────────────────────────────────────────────────────────────────────────────────── \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-line-in-a-multiline-block.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-line-in-a-multiline-block.snap.svg index 150aa209968..3205c6c8944 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-line-in-a-multiline-block.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-line-in-a-multiline-block.snap.svg @@ -1,12 +1,14 @@ - + - + - > - first line - - second line + ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + first line + + second line + ──────────────────────────────────────────────────────────────────────────────────────────────────── \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-in-the-middle-of-a-line-in-a-multiline-block.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-in-the-middle-of-a-line-in-a-multiline-block.snap.svg index f91778654b1..0c81aea4e48 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-in-the-middle-of-a-line-in-a-multiline-block.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-correctly-in-the-middle-of-a-line-in-a-multiline-block.snap.svg @@ -1,15 +1,17 @@ - + - + - > - first line - sec - - o - nd line - third line + ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + first line + sec + + o + nd line + third line + ──────────────────────────────────────────────────────────────────────────────────────────────────── \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-on-a-blank-line-in-a-multiline-block.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-on-a-blank-line-in-a-multiline-block.snap.svg index cbbffb4a402..4c64a915c22 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-on-a-blank-line-in-a-multiline-block.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-multi-line-scenarios-should-display-cursor-on-a-blank-line-in-a-multiline-block.snap.svg @@ -1,12 +1,14 @@ - + - + - > - first line - - third line + ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + first line + + third line + ──────────────────────────────────────────────────────────────────────────────────────────────────── \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-after-multi-byte-unicode-characters-.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-after-multi-byte-unicode-characters-.snap.svg index 2856c57aa76..7e9fea0a162 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-after-multi-byte-unicode-characters-.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-after-multi-byte-unicode-characters-.snap.svg @@ -1,12 +1,14 @@ - + - + - > - 👍 - - A + ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + 👍 + + A + ──────────────────────────────────────────────────────────────────────────────────────────────────── \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-beginning-of-the-line-.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-beginning-of-the-line-.snap.svg index 5a5c7dfe150..1dc10e142ee 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-beginning-of-the-line-.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-beginning-of-the-line-.snap.svg @@ -1,12 +1,14 @@ - + - + - > - - h - ello + ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + + h + ello + ──────────────────────────────────────────────────────────────────────────────────────────────────── \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-line-with-unicode-cha-.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-line-with-unicode-cha-.snap.svg index 116b4232b31..1f9e1103fbe 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-line-with-unicode-cha-.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-line-with-unicode-cha-.snap.svg @@ -1,10 +1,12 @@ - + - + - > - hello 👍 + ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + hello 👍 + ──────────────────────────────────────────────────────────────────────────────────────────────────── \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-short-line-with-unico-.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-short-line-with-unico-.snap.svg index dcfb3ba90dd..1eec5aa08e0 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-short-line-with-unico-.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-a-short-line-with-unico-.snap.svg @@ -1,11 +1,13 @@ - + - + - > - 👍 - + ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + 👍 + + ──────────────────────────────────────────────────────────────────────────────────────────────────── \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-the-line-.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-the-line-.snap.svg index 1dbe1634b56..e29648f655f 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-the-line-.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-at-the-end-of-the-line-.snap.svg @@ -1,11 +1,13 @@ - + - + - > - hello - + ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + hello + + ──────────────────────────────────────────────────────────────────────────────────────────────────── \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-for-multi-byte-unicode-characters-.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-for-multi-byte-unicode-characters-.snap.svg index e8d9d882b03..dc432f9b272 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-for-multi-byte-unicode-characters-.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-for-multi-byte-unicode-characters-.snap.svg @@ -1,13 +1,15 @@ - + - + - > - hello - - 👍 - world + ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + hello + + 👍 + world + ──────────────────────────────────────────────────────────────────────────────────────────────────── \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-mid-word-.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-mid-word-.snap.svg index d92f48e88c5..4eebe4398e6 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-mid-word-.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-mid-word-.snap.svg @@ -1,13 +1,15 @@ - + - + - > - hel - - l - o world + ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + hel + + l + o world + ──────────────────────────────────────────────────────────────────────────────────────────────────── \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-a-highlighted-token-.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-a-highlighted-token-.snap.svg index ff1f09f782f..19e63ba44f5 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-a-highlighted-token-.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-a-highlighted-token-.snap.svg @@ -1,14 +1,16 @@ - + - + - > - run - @path - - / - to/file + ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + run + @path + + / + to/file + ──────────────────────────────────────────────────────────────────────────────────────────────────── \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-a-space-between-words-.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-a-space-between-words-.snap.svg index b0302572743..eb37c008778 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-a-space-between-words-.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-a-space-between-words-.snap.svg @@ -1,12 +1,14 @@ - + - + - > - hello - - world + ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + hello + + world + ──────────────────────────────────────────────────────────────────────────────────────────────────── \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-an-empty-line-.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-an-empty-line-.snap.svg index 1c5f7c03f66..d6833e1f018 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-an-empty-line-.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-Highlighting-and-Cursor-Display-single-line-scenarios-should-display-cursor-correctly-on-an-empty-line-.snap.svg @@ -1,11 +1,13 @@ - + - + - > - - Type your message or @path/to/file + ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + + Type your message or @path/to/file + ──────────────────────────────────────────────────────────────────────────────────────────────────── \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-multiline-rendering-should-correctly-render-multiline-input-including-blank-lines.snap.svg b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-multiline-rendering-should-correctly-render-multiline-input-including-blank-lines.snap.svg index 1229491f794..4415f9a82e0 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-multiline-rendering-should-correctly-render-multiline-input-including-blank-lines.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt-InputPrompt-multiline-rendering-should-correctly-render-multiline-input-including-blank-lines.snap.svg @@ -1,12 +1,14 @@ - + - + - > - hello - world - + ──────────────────────────────────────────────────────────────────────────────────────────────────── + > + hello + world + + ──────────────────────────────────────────────────────────────────────────────────────────────────── \ No newline at end of file diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/InputPrompt.test.tsx.snap index cd01d91b504..db449ce4d7a 100644 --- a/packages/cli/src/ui/components/__snapshots__/InputPrompt.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt.test.tsx.snap @@ -1,46 +1,94 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`InputPrompt > Highlighting and Cursor Display > multi-line scenarios > should display cursor correctly 'at the beginning of a line' in a multiline block 1`] = ` -" > first line - second line" +"──────────────────────────────────────────────────────────────────────────────────────────────────── + > first line + second line +────────────────────────────────────────────────────────────────────────────────────────────────────" `; exports[`InputPrompt > Highlighting and Cursor Display > multi-line scenarios > should display cursor correctly 'at the end of a line' in a multiline block 1`] = ` -" > first line - second line" +"──────────────────────────────────────────────────────────────────────────────────────────────────── + > first line + second line +────────────────────────────────────────────────────────────────────────────────────────────────────" `; exports[`InputPrompt > Highlighting and Cursor Display > multi-line scenarios > should display cursor correctly 'in the middle of a line' in a multiline block 1`] = ` -" > first line +"──────────────────────────────────────────────────────────────────────────────────────────────────── + > first line second line - third line" + third line +────────────────────────────────────────────────────────────────────────────────────────────────────" `; exports[`InputPrompt > Highlighting and Cursor Display > multi-line scenarios > should display cursor on a blank line in a multiline block 1`] = ` -" > first line +"──────────────────────────────────────────────────────────────────────────────────────────────────── + > first line - third line" + third line +────────────────────────────────────────────────────────────────────────────────────────────────────" `; -exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'after multi-byte unicode characters' 1`] = `" > 👍A"`; +exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'after multi-byte unicode characters' 1`] = ` +"──────────────────────────────────────────────────────────────────────────────────────────────────── + > 👍A +────────────────────────────────────────────────────────────────────────────────────────────────────" +`; -exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'at the beginning of the line' 1`] = `" > hello"`; +exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'at the beginning of the line' 1`] = ` +"──────────────────────────────────────────────────────────────────────────────────────────────────── + > hello +────────────────────────────────────────────────────────────────────────────────────────────────────" +`; -exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'at the end of a line with unicode cha…' 1`] = `" > hello 👍"`; +exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'at the end of a line with unicode cha…' 1`] = ` +"──────────────────────────────────────────────────────────────────────────────────────────────────── + > hello 👍 +────────────────────────────────────────────────────────────────────────────────────────────────────" +`; -exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'at the end of a short line with unico…' 1`] = `" > 👍 "`; +exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'at the end of a short line with unico…' 1`] = ` +"──────────────────────────────────────────────────────────────────────────────────────────────────── + > 👍 +────────────────────────────────────────────────────────────────────────────────────────────────────" +`; -exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'at the end of the line' 1`] = `" > hello "`; +exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'at the end of the line' 1`] = ` +"──────────────────────────────────────────────────────────────────────────────────────────────────── + > hello +────────────────────────────────────────────────────────────────────────────────────────────────────" +`; -exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'for multi-byte unicode characters' 1`] = `" > hello 👍 world"`; +exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'for multi-byte unicode characters' 1`] = ` +"──────────────────────────────────────────────────────────────────────────────────────────────────── + > hello 👍 world +────────────────────────────────────────────────────────────────────────────────────────────────────" +`; -exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'mid-word' 1`] = `" > hello world"`; +exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'mid-word' 1`] = ` +"──────────────────────────────────────────────────────────────────────────────────────────────────── + > hello world +────────────────────────────────────────────────────────────────────────────────────────────────────" +`; -exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'on a highlighted token' 1`] = `" > run @path/to/file"`; +exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'on a highlighted token' 1`] = ` +"──────────────────────────────────────────────────────────────────────────────────────────────────── + > run @path/to/file +────────────────────────────────────────────────────────────────────────────────────────────────────" +`; -exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'on a space between words' 1`] = `" > hello world"`; +exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'on a space between words' 1`] = ` +"──────────────────────────────────────────────────────────────────────────────────────────────────── + > hello world +────────────────────────────────────────────────────────────────────────────────────────────────────" +`; -exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'on an empty line' 1`] = `" > Type your message or @path/to/file"`; +exports[`InputPrompt > Highlighting and Cursor Display > single-line scenarios > should display cursor correctly 'on an empty line' 1`] = ` +"──────────────────────────────────────────────────────────────────────────────────────────────────── + > Type your message or @path/to/file +────────────────────────────────────────────────────────────────────────────────────────────────────" +`; exports[`InputPrompt > History Navigation and Completion Suppression > should not render suggestions during history navigation 1`] = ` "▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ @@ -121,9 +169,11 @@ exports[`InputPrompt > mouse interaction > should toggle paste expansion on doub `; exports[`InputPrompt > multiline rendering > should correctly render multiline input including blank lines 1`] = ` -" > hello +"──────────────────────────────────────────────────────────────────────────────────────────────────── + > hello - world " + world +────────────────────────────────────────────────────────────────────────────────────────────────────" `; exports[`InputPrompt > snapshots > should not show inverted cursor when shell is focused 1`] = `