From 8bc9238cab1acae45c38f1b1b73b8c81746408b1 Mon Sep 17 00:00:00 2001 From: Mark McLaughlin Date: Mon, 9 Mar 2026 14:47:37 -0700 Subject: [PATCH] refactor(ui): simplify BaseSelectionList measurement and refine list layout --- .../src/ui/__snapshots__/App.test.tsx.snap | 6 +- .../__snapshots__/AskUserDialog.test.tsx.snap | 160 +++++++---------- .../BackgroundShellDisplay.test.tsx.snap | 14 +- .../EditorSettingsDialog.test.tsx.snap | 8 +- .../EmptyWalletDialog.test.tsx.snap | 10 +- .../ExitPlanModeDialog.test.tsx.snap | 80 ++++----- .../LoopDetectionConfirmation.test.tsx.snap | 4 +- .../NewAgentsNotification.test.tsx.snap | 8 +- .../OverageMenuDialog.test.tsx.snap | 14 +- .../PolicyUpdateDialog.test.tsx.snap | 4 +- .../RewindConfirmation.test.tsx.snap | 16 +- .../__snapshots__/RewindViewer.test.tsx.snap | 170 +++++++++--------- ...tings-list-with-visual-indicators.snap.svg | 21 ++- ...bility-settings-enabled-correctly.snap.svg | 21 ++- ...olean-settings-disabled-correctly.snap.svg | 21 ++- ...ld-render-default-state-correctly.snap.svg | 21 ++- ...ing-settings-configured-correctly.snap.svg | 21 ++- ...cused-on-scope-selector-correctly.snap.svg | 23 +-- ...ean-and-number-settings-correctly.snap.svg | 21 ++- ...s-and-security-settings-correctly.snap.svg | 21 ++- ...oolean-settings-enabled-correctly.snap.svg | 21 ++- .../SettingsDialog.test.tsx.snap | 54 +++--- .../__snapshots__/ThemeDialog.test.tsx.snap | 126 ++++++------- .../ToolConfirmationQueue.test.tsx.snap | 46 ++--- .../RedirectionConfirmation.test.tsx.snap | 6 +- ...syntax-highlighting-SVG-snapshot-.snap.svg | 23 +-- .../ToolConfirmationMessage.test.tsx.snap | 78 ++++---- .../shared/BaseSelectionList.test.tsx | 57 +----- .../components/shared/BaseSelectionList.tsx | 41 ++--- ...ion-indicator-or-space-and-layout.snap.svg | 6 +- .../BaseSelectionList.test.tsx.snap | 36 ++-- ...ld-navigate-down-with-arrow-key-2.snap.svg | 91 ++++++++++ ...ld-navigate-down-with-arrow-key-3.snap.svg | 91 ++++++++++ ...ould-navigate-down-with-arrow-key.snap.svg | 14 +- ...rendering-should-render-all-items.snap.svg | 14 +- .../BaseSettingsDialog.test.tsx.snap | 40 ++++- ...DescriptiveRadioButtonSelect.test.tsx.snap | 24 +-- 37 files changed, 779 insertions(+), 653 deletions(-) create mode 100644 packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-keyboard-navigation-should-navigate-down-with-arrow-key-2.snap.svg create mode 100644 packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-keyboard-navigation-should-navigate-down-with-arrow-key-3.snap.svg diff --git a/packages/cli/src/ui/__snapshots__/App.test.tsx.snap b/packages/cli/src/ui/__snapshots__/App.test.tsx.snap index 9e1d66df01..3c068893e3 100644 --- a/packages/cli/src/ui/__snapshots__/App.test.tsx.snap +++ b/packages/cli/src/ui/__snapshots__/App.test.tsx.snap @@ -127,9 +127,9 @@ HistoryItemDisplay │ ls │ │ Allow execution of: 'ls'? │ │ │ -│ ● 1. Allow once │ -│ 2. Allow for this session │ -│ 3. No, suggest changes (esc) │ +│ ● 1. Allow once │ +│ 2. Allow for this session │ +│ 3. No, suggest changes (esc) │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ diff --git a/packages/cli/src/ui/components/__snapshots__/AskUserDialog.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/AskUserDialog.test.tsx.snap index 2e115ef12c..6ffec898a4 100644 --- a/packages/cli/src/ui/components/__snapshots__/AskUserDialog.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/AskUserDialog.test.tsx.snap @@ -3,9 +3,9 @@ exports[`AskUserDialog > Choice question placeholder > uses default placeholder when not provided 1`] = ` "Select your preferred language: - 1. TypeScript - 2. JavaScript -● 3. Enter a custom value + 1. TypeScript + 2. JavaScript + ● 3. Enter a custom value Enter to submit · Esc to cancel " @@ -14,9 +14,9 @@ Enter to submit · Esc to cancel exports[`AskUserDialog > Choice question placeholder > uses placeholder for "Other" option when provided 1`] = ` "Select your preferred language: - 1. TypeScript - 2. JavaScript -● 3. Type another language... + 1. TypeScript + 2. JavaScript + ● 3. Type another language... Enter to submit · Esc to cancel " @@ -26,10 +26,10 @@ exports[`AskUserDialog > Scroll Arrows (useAlternateBuffer: false) > shows scrol "Choose an option ▲ -● 1. Option 1 - Description 1 - 2. Option 2 - Description 2 + ● 1. Option 1 + Description 1 + 2. Option 2 + Description 2 ▼ Enter to select · ↑/↓ to navigate · Esc to cancel @@ -39,37 +39,37 @@ Enter to select · ↑/↓ to navigate · Esc to cancel exports[`AskUserDialog > Scroll Arrows (useAlternateBuffer: true) > shows scroll arrows correctly when useAlternateBuffer is true 1`] = ` "Choose an option -● 1. Option 1 - Description 1 - 2. Option 2 - Description 2 - 3. Option 3 - Description 3 - 4. Option 4 - Description 4 - 5. Option 5 - Description 5 - 6. Option 6 - Description 6 - 7. Option 7 - Description 7 - 8. Option 8 - Description 8 - 9. Option 9 - Description 9 - 10. Option 10 - Description 10 - 11. Option 11 - Description 11 - 12. Option 12 - Description 12 - 13. Option 13 - Description 13 - 14. Option 14 - Description 14 - 15. Option 15 - Description 15 - 16. Enter a custom value + ● 1. Option 1 + Description 1 + 2. Option 2 + Description 2 + 3. Option 3 + Description 3 + 4. Option 4 + Description 4 + 5. Option 5 + Description 5 + 6. Option 6 + Description 6 + 7. Option 7 + Description 7 + 8. Option 8 + Description 8 + 9. Option 9 + Description 9 + 10. Option 10 + Description 10 + 11. Option 11 + Description 11 + 12. Option 12 + Description 12 + 13. Option 13 + Description 13 + 14. Option 14 + Description 14 + 15. Option 15 + Description 15 + 16. Enter a custom value Enter to select · ↑/↓ to navigate · Esc to cancel " @@ -115,20 +115,6 @@ Review your answers: Tests → (not answered) Docs → (not answered) -Enter to submit · / to edit answers · Esc to cancel -" -`; - -exports[`AskUserDialog > allows navigating to Review tab and back 2`] = ` -"← □ Tests │ □ Docs │ ≡ Review → - -Review your answers: - -⚠ You have 2 unanswered questions - -Tests → (not answered) -Docs → (not answered) - Enter to submit · Tab/Shift+Tab to edit answers · Esc to cancel " `; @@ -136,11 +122,11 @@ Enter to submit · Tab/Shift+Tab to edit answers · Esc to cancel exports[`AskUserDialog > hides progress header for single question 1`] = ` "Which authentication method should we use? -● 1. OAuth 2.0 - Industry standard, supports SSO - 2. JWT tokens - Stateless, good for APIs - 3. Enter a custom value + ● 1. OAuth 2.0 + Industry standard, supports SSO + 2. JWT tokens + Stateless, good for APIs + 3. Enter a custom value Enter to select · ↑/↓ to navigate · Esc to cancel " @@ -149,11 +135,11 @@ Enter to select · ↑/↓ to navigate · Esc to cancel exports[`AskUserDialog > renders question and options 1`] = ` "Which authentication method should we use? -● 1. OAuth 2.0 - Industry standard, supports SSO - 2. JWT tokens - Stateless, good for APIs - 3. Enter a custom value + ● 1. OAuth 2.0 + Industry standard, supports SSO + 2. JWT tokens + Stateless, good for APIs + 3. Enter a custom value Enter to select · ↑/↓ to navigate · Esc to cancel " @@ -164,11 +150,11 @@ exports[`AskUserDialog > shows Review tab in progress header for multiple questi Which framework? -● 1. React - Component library - 2. Vue - Progressive framework - 3. Enter a custom value + ● 1. React + Component library + 2. Vue + Progressive framework + 3. Enter a custom value Enter to select · ←/→ to switch questions · Esc to cancel " @@ -177,11 +163,11 @@ Enter to select · ←/→ to switch questions · Esc to cancel exports[`AskUserDialog > shows keyboard hints 1`] = ` "Which authentication method should we use? -● 1. OAuth 2.0 - Industry standard, supports SSO - 2. JWT tokens - Stateless, good for APIs - 3. Enter a custom value + ● 1. OAuth 2.0 + Industry standard, supports SSO + 2. JWT tokens + Stateless, good for APIs + 3. Enter a custom value Enter to select · ↑/↓ to navigate · Esc to cancel " @@ -192,11 +178,11 @@ exports[`AskUserDialog > shows progress header for multiple questions 1`] = ` Which database should we use? -● 1. PostgreSQL - Relational database - 2. MongoDB - Document database - 3. Enter a custom value + ● 1. PostgreSQL + Relational database + 2. MongoDB + Document database + 3. Enter a custom value Enter to select · ←/→ to switch questions · Esc to cancel " @@ -212,20 +198,6 @@ Review your answers: License → (not answered) README → (not answered) -Enter to submit · / to edit answers · Esc to cancel -" -`; - -exports[`AskUserDialog > shows warning for unanswered questions on Review tab 2`] = ` -"← □ License │ □ README │ ≡ Review → - -Review your answers: - -⚠ You have 2 unanswered questions - -License → (not answered) -README → (not answered) - Enter to submit · Tab/Shift+Tab to edit answers · Esc to cancel " `; diff --git a/packages/cli/src/ui/components/__snapshots__/BackgroundShellDisplay.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/BackgroundShellDisplay.test.tsx.snap index d6b5d66d53..9bdfed35ee 100644 --- a/packages/cli/src/ui/components/__snapshots__/BackgroundShellDisplay.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/BackgroundShellDisplay.test.tsx.snap @@ -16,9 +16,9 @@ exports[` > keeps exit code status color even when sel │ │ │ Select Process (Enter to select, Ctrl+K to kill, Esc to cancel): │ │ │ -│ 1. npm start (PID: 1001) │ -│ 2. tail -f log.txt (PID: 1002) │ -│ ● 3. exit 0 (PID: 1003) (Exit Code: 0) │ +│ 1. npm start (PID: 1001) │ +│ 2. tail -f log.txt (PID: 1002) │ +│ ● 3. exit 0 (PID: 1003) (Exit Code: 0) │ └──────────────────────────────────────────────────────────────────────────────┘ " `; @@ -46,8 +46,8 @@ exports[` > renders the process list when isListOpenPr │ │ │ Select Process (Enter to select, Ctrl+K to kill, Esc to cancel): │ │ │ -│ ● 1. npm start (PID: 1001) │ -│ 2. tail -f log.txt (PID: 1002) │ +│ ● 1. npm start (PID: 1001) │ +│ 2. tail -f log.txt (PID: 1002) │ └──────────────────────────────────────────────────────────────────────────────┘ " `; @@ -59,8 +59,8 @@ exports[` > scrolls to active shell when list opens 1` │ │ │ Select Process (Enter to select, Ctrl+K to kill, Esc to cancel): │ │ │ -│ 1. npm start (PID: 1001) │ -│ ● 2. tail -f log.txt (PID: 1002) │ +│ 1. npm start (PID: 1001) │ +│ ● 2. tail -f log.txt (PID: 1002) │ └──────────────────────────────────────────────────────────────────────────────┘ " `; diff --git a/packages/cli/src/ui/components/__snapshots__/EditorSettingsDialog.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/EditorSettingsDialog.test.tsx.snap index 3042d13ca0..e84eae0062 100644 --- a/packages/cli/src/ui/components/__snapshots__/EditorSettingsDialog.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/EditorSettingsDialog.test.tsx.snap @@ -4,12 +4,12 @@ exports[`EditorSettingsDialog > renders correctly 1`] = ` "╭──────────────────────────────────────────────────────────────────────────────────────────────────╮ │ │ │ > Select Editor Editor Preference │ -│ ● 1. VS Code │ -│ 2. Vim These editors are currently supported. Please note │ +│ ● 1. VS Code │ +│ 2. Vim These editors are currently supported. Please note │ │ that some editors cannot be used in sandbox mode. │ │ Apply To │ -│ ● 1. User Settings Your preferred editor is: VS Code. │ -│ 2. Workspace Settings │ +│ ● 1. User Settings Your preferred editor is: VS Code. │ +│ 2. Workspace Settings │ │ │ │ (Use Enter to select, Tab to change │ │ focus, Esc to close) │ diff --git a/packages/cli/src/ui/components/__snapshots__/EmptyWalletDialog.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/EmptyWalletDialog.test.tsx.snap index c8ebd612af..912f9ad876 100644 --- a/packages/cli/src/ui/components/__snapshots__/EmptyWalletDialog.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/EmptyWalletDialog.test.tsx.snap @@ -16,9 +16,9 @@ exports[`EmptyWalletDialog > rendering > should match snapshot with fallback ava │ How would you like to proceed? │ │ │ │ │ -│ ● 1. Get AI Credits - Open browser to purchase credits │ -│ 2. Switch to gemini-3-flash-preview │ -│ 3. Stop - Abort request │ +│ ● 1. Get AI Credits - Open browser to purchase credits │ +│ 2. Switch to gemini-3-flash-preview │ +│ 3. Stop - Abort request │ │ │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ @@ -40,8 +40,8 @@ exports[`EmptyWalletDialog > rendering > should match snapshot without fallback │ How would you like to proceed? │ │ │ │ │ -│ ● 1. Get AI Credits - Open browser to purchase credits │ -│ 2. Stop - Abort request │ +│ ● 1. Get AI Credits - Open browser to purchase credits │ +│ 2. Stop - Abort request │ │ │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ diff --git a/packages/cli/src/ui/components/__snapshots__/ExitPlanModeDialog.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/ExitPlanModeDialog.test.tsx.snap index 073c106ceb..657503cebf 100644 --- a/packages/cli/src/ui/components/__snapshots__/ExitPlanModeDialog.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/ExitPlanModeDialog.test.tsx.snap @@ -17,11 +17,11 @@ Files to Modify - src/index.ts - Add auth middleware - src/config.ts - Add auth configuration options - 1. Yes, automatically accept edits - Approves plan and allows tools to run automatically -● 2. Yes, manually accept edits - Approves plan but requires confirmation for each tool - 3. Type your feedback... + 1. Yes, automatically accept edits + Approves plan and allows tools to run automatically + ● 2. Yes, manually accept edits + Approves plan but requires confirmation for each tool + 3. Type your feedback... Enter to select · ↑/↓ to navigate · Ctrl+X to edit plan · Esc to cancel " @@ -44,11 +44,11 @@ Files to Modify - src/index.ts - Add auth middleware - src/config.ts - Add auth configuration options -● 1. Yes, automatically accept edits - Approves plan and allows tools to run automatically - 2. Yes, manually accept edits - Approves plan but requires confirmation for each tool - 3. Type your feedback... + ● 1. Yes, automatically accept edits + Approves plan and allows tools to run automatically + 2. Yes, manually accept edits + Approves plan but requires confirmation for each tool + 3. Type your feedback... Enter to select · ↑/↓ to navigate · Ctrl+X to edit plan · Esc to cancel " @@ -76,11 +76,11 @@ Implementation Steps 8. Add multi-factor authentication in src/auth/MFAService.ts ... last 22 lines hidden (Ctrl+O to show) ... -● 1. Yes, automatically accept edits - Approves plan and allows tools to run automatically - 2. Yes, manually accept edits - Approves plan but requires confirmation for each tool - 3. Type your feedback... + ● 1. Yes, automatically accept edits + Approves plan and allows tools to run automatically + 2. Yes, manually accept edits + Approves plan but requires confirmation for each tool + 3. Type your feedback... Enter to select · ↑/↓ to navigate · Ctrl+X to edit plan · Esc to cancel " @@ -103,11 +103,11 @@ Files to Modify - src/index.ts - Add auth middleware - src/config.ts - Add auth configuration options -● 1. Yes, automatically accept edits - Approves plan and allows tools to run automatically - 2. Yes, manually accept edits - Approves plan but requires confirmation for each tool - 3. Type your feedback... + ● 1. Yes, automatically accept edits + Approves plan and allows tools to run automatically + 2. Yes, manually accept edits + Approves plan but requires confirmation for each tool + 3. Type your feedback... Enter to select · ↑/↓ to navigate · Ctrl+X to edit plan · Esc to cancel " @@ -130,11 +130,11 @@ Files to Modify - src/index.ts - Add auth middleware - src/config.ts - Add auth configuration options - 1. Yes, automatically accept edits - Approves plan and allows tools to run automatically -● 2. Yes, manually accept edits - Approves plan but requires confirmation for each tool - 3. Type your feedback... + 1. Yes, automatically accept edits + Approves plan and allows tools to run automatically + ● 2. Yes, manually accept edits + Approves plan but requires confirmation for each tool + 3. Type your feedback... Enter to select · ↑/↓ to navigate · Ctrl+X to edit plan · Esc to cancel " @@ -157,11 +157,11 @@ Files to Modify - src/index.ts - Add auth middleware - src/config.ts - Add auth configuration options -● 1. Yes, automatically accept edits - Approves plan and allows tools to run automatically - 2. Yes, manually accept edits - Approves plan but requires confirmation for each tool - 3. Type your feedback... + ● 1. Yes, automatically accept edits + Approves plan and allows tools to run automatically + 2. Yes, manually accept edits + Approves plan but requires confirmation for each tool + 3. Type your feedback... Enter to select · ↑/↓ to navigate · Ctrl+X to edit plan · Esc to cancel " @@ -210,11 +210,11 @@ Testing Strategy - Security penetration testing - Load testing for session management -● 1. Yes, automatically accept edits - Approves plan and allows tools to run automatically - 2. Yes, manually accept edits - Approves plan but requires confirmation for each tool - 3. Type your feedback... + ● 1. Yes, automatically accept edits + Approves plan and allows tools to run automatically + 2. Yes, manually accept edits + Approves plan but requires confirmation for each tool + 3. Type your feedback... Enter to select · ↑/↓ to navigate · Ctrl+X to edit plan · Esc to cancel " @@ -237,11 +237,11 @@ Files to Modify - src/index.ts - Add auth middleware - src/config.ts - Add auth configuration options -● 1. Yes, automatically accept edits - Approves plan and allows tools to run automatically - 2. Yes, manually accept edits - Approves plan but requires confirmation for each tool - 3. Type your feedback... + ● 1. Yes, automatically accept edits + Approves plan and allows tools to run automatically + 2. Yes, manually accept edits + Approves plan but requires confirmation for each tool + 3. Type your feedback... Enter to select · ↑/↓ to navigate · Ctrl+X to edit plan · Esc to cancel " diff --git a/packages/cli/src/ui/components/__snapshots__/LoopDetectionConfirmation.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/LoopDetectionConfirmation.test.tsx.snap index e8914dceeb..ebdb80840f 100644 --- a/packages/cli/src/ui/components/__snapshots__/LoopDetectionConfirmation.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/LoopDetectionConfirmation.test.tsx.snap @@ -7,8 +7,8 @@ exports[`LoopDetectionConfirmation > renders correctly 1`] = ` │ This can happen due to repetitive tool calls or other model behavior. Do you want to keep loop │ │ detection enabled or disable it for this session? │ │ │ - │ ● 1. Keep loop detection enabled (esc) │ - │ 2. Disable loop detection for this session │ + │ ● 1. Keep loop detection enabled (esc) │ + │ 2. Disable loop detection for this session │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ " `; diff --git a/packages/cli/src/ui/components/__snapshots__/NewAgentsNotification.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/NewAgentsNotification.test.tsx.snap index bac1f7af36..1d24fbaedb 100644 --- a/packages/cli/src/ui/components/__snapshots__/NewAgentsNotification.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/NewAgentsNotification.test.tsx.snap @@ -13,8 +13,8 @@ exports[`NewAgentsNotification > renders agent list 1`] = ` │ │ │ │ │ └────────────────────────────────────────────────────────────────────────────────────────────┘ │ │ │ - │ ● 1. Acknowledge and Enable │ - │ 2. Do not enable (Ask again next time) │ + │ ● 1. Acknowledge and Enable │ + │ 2. Do not enable (Ask again next time) │ │ │ ╰────────────────────────────────────────────────────────────────────────────────────────────────╯ " @@ -37,8 +37,8 @@ exports[`NewAgentsNotification > truncates list if more than 5 agents 1`] = ` │ │ │ │ │ └────────────────────────────────────────────────────────────────────────────────────────────┘ │ │ │ - │ ● 1. Acknowledge and Enable │ - │ 2. Do not enable (Ask again next time) │ + │ ● 1. Acknowledge and Enable │ + │ 2. Do not enable (Ask again next time) │ │ │ ╰────────────────────────────────────────────────────────────────────────────────────────────────╯ " diff --git a/packages/cli/src/ui/components/__snapshots__/OverageMenuDialog.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/OverageMenuDialog.test.tsx.snap index 978c5cd17c..85685d4607 100644 --- a/packages/cli/src/ui/components/__snapshots__/OverageMenuDialog.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/OverageMenuDialog.test.tsx.snap @@ -14,10 +14,10 @@ exports[`OverageMenuDialog > rendering > should match snapshot with fallback ava │ How would you like to proceed? │ │ │ │ │ -│ ● 1. Use AI Credits - Continue this request (Overage) │ -│ 2. Manage - View balance and purchase more credits │ -│ 3. Switch to gemini-3-flash-preview │ -│ 4. Stop - Abort request │ +│ ● 1. Use AI Credits - Continue this request (Overage) │ +│ 2. Manage - View balance and purchase more credits │ +│ 3. Switch to gemini-3-flash-preview │ +│ 4. Stop - Abort request │ │ │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ @@ -37,9 +37,9 @@ exports[`OverageMenuDialog > rendering > should match snapshot without fallback │ How would you like to proceed? │ │ │ │ │ -│ ● 1. Use AI Credits - Continue this request (Overage) │ -│ 2. Manage - View balance and purchase more credits │ -│ 3. Stop - Abort request │ +│ ● 1. Use AI Credits - Continue this request (Overage) │ +│ 2. Manage - View balance and purchase more credits │ +│ 3. Stop - Abort request │ │ │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ diff --git a/packages/cli/src/ui/components/__snapshots__/PolicyUpdateDialog.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/PolicyUpdateDialog.test.tsx.snap index 5f5b3c9c27..47fa351635 100644 --- a/packages/cli/src/ui/components/__snapshots__/PolicyUpdateDialog.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/PolicyUpdateDialog.test.tsx.snap @@ -7,8 +7,8 @@ exports[`PolicyUpdateDialog > renders correctly and matches snapshot 1`] = ` │ Location: /test/workspace/.gemini/policies │ │ Do you want to accept and load these policies? │ │ │ - │ ● 1. Accept and Load │ - │ 2. Ignore (Use Default Policies) │ + │ ● 1. Accept and Load │ + │ 2. Ignore (Use Default Policies) │ │ │ ╰────────────────────────────────────────────────────────────────────────────────────────────────╯ " diff --git a/packages/cli/src/ui/components/__snapshots__/RewindConfirmation.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/RewindConfirmation.test.tsx.snap index 77d37faa61..b38a7bbc7b 100644 --- a/packages/cli/src/ui/components/__snapshots__/RewindConfirmation.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/RewindConfirmation.test.tsx.snap @@ -14,10 +14,10 @@ exports[`RewindConfirmation > renders correctly with stats 1`] = ` │ │ │ Select an action: │ │ │ -│ ● 1. Rewind conversation and revert code changes │ -│ 2. Rewind conversation │ -│ 3. Revert code changes │ -│ 4. Do nothing (esc) │ +│ ● 1. Rewind conversation and revert code changes │ +│ 2. Rewind conversation │ +│ 3. Revert code changes │ +│ 4. Do nothing (esc) │ │ │ ╰──────────────────────────────────────────────────────────────────────────────╯ " @@ -32,8 +32,8 @@ exports[`RewindConfirmation > renders correctly without stats 1`] = ` │ │ │ Select an action: │ │ │ -│ ● 1. Rewind conversation │ -│ 2. Do nothing (esc) │ +│ ● 1. Rewind conversation │ +│ 2. Do nothing (esc) │ │ │ ╰──────────────────────────────────────────────────────────────────────────────╯ " @@ -48,8 +48,8 @@ exports[`RewindConfirmation > renders timestamp when provided 1`] = ` │ │ │ Select an action: │ │ │ -│ ● 1. Rewind conversation │ -│ 2. Do nothing (esc) │ +│ ● 1. Rewind conversation │ +│ 2. Do nothing (esc) │ │ │ ╰──────────────────────────────────────────────────────────────────────────────╯ " diff --git a/packages/cli/src/ui/components/__snapshots__/RewindViewer.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/RewindViewer.test.tsx.snap index 06f7d49105..edeae7a228 100644 --- a/packages/cli/src/ui/components/__snapshots__/RewindViewer.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/RewindViewer.test.tsx.snap @@ -5,11 +5,11 @@ exports[`RewindViewer > Content Filtering > 'removes reference markers' 1`] = ` │ │ │ > Rewind │ │ │ -│ some command @file │ -│ No files have been changed │ +│ some command @file │ +│ No files have been changed │ │ │ -│ ● Stay at current position │ -│ Cancel rewind and stay here │ +│ ● Stay at current position │ +│ Cancel rewind and stay here │ │ │ │ │ │ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │ @@ -23,11 +23,11 @@ exports[`RewindViewer > Content Filtering > 'strips expanded MCP resource conten │ │ │ > Rewind │ │ │ -│ read @server3:mcp://demo-resource hello │ -│ No files have been changed │ +│ read @server3:mcp://demo-resource hello │ +│ No files have been changed │ │ │ -│ ● Stay at current position │ -│ Cancel rewind and stay here │ +│ ● Stay at current position │ +│ Cancel rewind and stay here │ │ │ │ │ │ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │ @@ -41,11 +41,11 @@ exports[`RewindViewer > Content Filtering > 'uses displayContent if present and │ │ │ > Rewind │ │ │ -│ clean display content │ -│ No files have been changed │ +│ clean display content │ +│ No files have been changed │ │ │ -│ ● Stay at current position │ -│ Cancel rewind and stay here │ +│ ● Stay at current position │ +│ Cancel rewind and stay here │ │ │ │ │ │ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │ @@ -63,8 +63,8 @@ exports[`RewindViewer > Interaction Selection > 'cancels on Escape' > confirmati │ │ │ Select an action: │ │ │ -│ ● 1. Rewind conversation │ -│ 2. Do nothing (esc) │ +│ ● 1. Rewind conversation │ +│ 2. Do nothing (esc) │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ " @@ -79,8 +79,8 @@ exports[`RewindViewer > Interaction Selection > 'confirms on Enter' > confirmati │ │ │ Select an action: │ │ │ -│ ● 1. Rewind conversation │ -│ 2. Do nothing (esc) │ +│ ● 1. Rewind conversation │ +│ 2. Do nothing (esc) │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ " @@ -91,17 +91,17 @@ exports[`RewindViewer > Navigation > handles 'down' navigation > after-down 1`] │ │ │ > Rewind │ │ │ -│ Q1 │ -│ No files have been changed │ +│ Q1 │ +│ No files have been changed │ │ │ -│ Q2 │ -│ No files have been changed │ +│ Q2 │ +│ No files have been changed │ │ │ -│ Q3 │ -│ No files have been changed │ +│ Q3 │ +│ No files have been changed │ │ │ -│ ● Stay at current position │ -│ Cancel rewind and stay here │ +│ ● Stay at current position │ +│ Cancel rewind and stay here │ │ │ │ │ │ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │ @@ -115,17 +115,17 @@ exports[`RewindViewer > Navigation > handles 'up' navigation > after-up 1`] = ` │ │ │ > Rewind │ │ │ -│ Q1 │ -│ No files have been changed │ +│ Q1 │ +│ No files have been changed │ │ │ -│ Q2 │ -│ No files have been changed │ +│ Q2 │ +│ No files have been changed │ │ │ -│ ● Q3 │ -│ No files have been changed │ +│ ● Q3 │ +│ No files have been changed │ │ │ -│ Stay at current position │ -│ Cancel rewind and stay here │ +│ Stay at current position │ +│ Cancel rewind and stay here │ │ │ │ │ │ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │ @@ -139,17 +139,17 @@ exports[`RewindViewer > Navigation > handles cyclic navigation > cyclic-down 1`] │ │ │ > Rewind │ │ │ -│ Q1 │ -│ No files have been changed │ +│ Q1 │ +│ No files have been changed │ │ │ -│ Q2 │ -│ No files have been changed │ +│ Q2 │ +│ No files have been changed │ │ │ -│ Q3 │ -│ No files have been changed │ +│ Q3 │ +│ No files have been changed │ │ │ -│ ● Stay at current position │ -│ Cancel rewind and stay here │ +│ ● Stay at current position │ +│ Cancel rewind and stay here │ │ │ │ │ │ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │ @@ -163,17 +163,17 @@ exports[`RewindViewer > Navigation > handles cyclic navigation > cyclic-up 1`] = │ │ │ > Rewind │ │ │ -│ Q1 │ -│ No files have been changed │ +│ Q1 │ +│ No files have been changed │ │ │ -│ Q2 │ -│ No files have been changed │ +│ Q2 │ +│ No files have been changed │ │ │ -│ ● Q3 │ -│ No files have been changed │ +│ ● Q3 │ +│ No files have been changed │ │ │ -│ Stay at current position │ -│ Cancel rewind and stay here │ +│ Stay at current position │ +│ Cancel rewind and stay here │ │ │ │ │ │ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │ @@ -187,11 +187,11 @@ exports[`RewindViewer > Rendering > renders 'a single interaction' 1`] = ` │ │ │ > Rewind │ │ │ -│ Hello │ -│ No files have been changed │ +│ Hello │ +│ No files have been changed │ │ │ -│ ● Stay at current position │ -│ Cancel rewind and stay here │ +│ ● Stay at current position │ +│ Cancel rewind and stay here │ │ │ │ │ │ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │ @@ -205,12 +205,12 @@ exports[`RewindViewer > Rendering > renders 'full text for selected item' 1`] = │ │ │ > Rewind │ │ │ -│ 1 │ -│ 2... │ -│ No files have been changed │ +│ 1 │ +│ 2... │ +│ No files have been changed │ │ │ -│ ● Stay at current position │ -│ Cancel rewind and stay here │ +│ ● Stay at current position │ +│ Cancel rewind and stay here │ │ │ │ │ │ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │ @@ -224,8 +224,8 @@ exports[`RewindViewer > Rendering > renders 'nothing interesting for empty conve │ │ │ > Rewind │ │ │ -│ ● Stay at current position │ -│ Cancel rewind and stay here │ +│ ● Stay at current position │ +│ Cancel rewind and stay here │ │ │ │ │ │ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │ @@ -239,14 +239,14 @@ exports[`RewindViewer > updates content when conversation changes (background up │ │ │ > Rewind │ │ │ -│ Message 1 │ -│ No files have been changed │ +│ Message 1 │ +│ No files have been changed │ │ │ -│ Message 2 │ -│ No files have been changed │ +│ Message 2 │ +│ No files have been changed │ │ │ -│ ● Stay at current position │ -│ Cancel rewind and stay here │ +│ ● Stay at current position │ +│ Cancel rewind and stay here │ │ │ │ │ │ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │ @@ -260,11 +260,11 @@ exports[`RewindViewer > updates content when conversation changes (background up │ │ │ > Rewind │ │ │ -│ Message 1 │ -│ No files have been changed │ +│ Message 1 │ +│ No files have been changed │ │ │ -│ ● Stay at current position │ -│ Cancel rewind and stay here │ +│ ● Stay at current position │ +│ Cancel rewind and stay here │ │ │ │ │ │ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │ @@ -278,16 +278,16 @@ exports[`RewindViewer > updates selection and expansion on navigation > after-do │ │ │ > Rewind │ │ │ -│ Line A │ -│ Line B... │ -│ No files have been changed │ +│ Line A │ +│ Line B... │ +│ No files have been changed │ │ │ -│ Line 1 │ -│ Line 2... │ -│ No files have been changed │ +│ Line 1 │ +│ Line 2... │ +│ No files have been changed │ │ │ -│ ● Stay at current position │ -│ Cancel rewind and stay here │ +│ ● Stay at current position │ +│ Cancel rewind and stay here │ │ │ │ │ │ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │ @@ -301,16 +301,16 @@ exports[`RewindViewer > updates selection and expansion on navigation > initial- │ │ │ > Rewind │ │ │ -│ Line A │ -│ Line B... │ -│ No files have been changed │ +│ Line A │ +│ Line B... │ +│ No files have been changed │ │ │ -│ Line 1 │ -│ Line 2... │ -│ No files have been changed │ +│ Line 1 │ +│ Line 2... │ +│ No files have been changed │ │ │ -│ ● Stay at current position │ -│ Cancel rewind and stay here │ +│ ● Stay at current position │ +│ Cancel rewind and stay here │ │ │ │ │ │ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │ diff --git a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Initial-Rendering-should-render-settings-list-with-visual-indicators.snap.svg b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Initial-Rendering-should-render-settings-list-with-visual-indicators.snap.svg index 96ac9e7621..22b5e38d91 100644 --- a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Initial-Rendering-should-render-settings-list-with-visual-indicators.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Initial-Rendering-should-render-settings-list-with-visual-indicators.snap.svg @@ -31,6 +31,7 @@ + @@ -39,12 +40,13 @@ false + - + - Enable Vim keybindings - + Enable Vim keybindings + @@ -121,17 +123,18 @@ - - - User Settings - + + + + User Settings + - Workspace Settings + Workspace Settings - System Settings + System Settings diff --git a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-accessibility-settings-enabled-correctly.snap.svg b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-accessibility-settings-enabled-correctly.snap.svg index 7a35e051b2..ee9f432b3d 100644 --- a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-accessibility-settings-enabled-correctly.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-accessibility-settings-enabled-correctly.snap.svg @@ -31,6 +31,7 @@ + @@ -39,12 +40,13 @@ true* + - + - Enable Vim keybindings - + Enable Vim keybindings + @@ -121,17 +123,18 @@ - - - User Settings - + + + + User Settings + - Workspace Settings + Workspace Settings - System Settings + System Settings diff --git a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-all-boolean-settings-disabled-correctly.snap.svg b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-all-boolean-settings-disabled-correctly.snap.svg index 9c01031ebe..8e0ef3b3a8 100644 --- a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-all-boolean-settings-disabled-correctly.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-all-boolean-settings-disabled-correctly.snap.svg @@ -31,6 +31,7 @@ + @@ -39,12 +40,13 @@ false* + - + - Enable Vim keybindings - + Enable Vim keybindings + @@ -121,17 +123,18 @@ - - - User Settings - + + + + User Settings + - Workspace Settings + Workspace Settings - System Settings + System Settings diff --git a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-default-state-correctly.snap.svg b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-default-state-correctly.snap.svg index 96ac9e7621..22b5e38d91 100644 --- a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-default-state-correctly.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-default-state-correctly.snap.svg @@ -31,6 +31,7 @@ + @@ -39,12 +40,13 @@ false + - + - Enable Vim keybindings - + Enable Vim keybindings + @@ -121,17 +123,18 @@ - - - User Settings - + + + + User Settings + - Workspace Settings + Workspace Settings - System Settings + System Settings diff --git a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-file-filtering-settings-configured-correctly.snap.svg b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-file-filtering-settings-configured-correctly.snap.svg index 96ac9e7621..22b5e38d91 100644 --- a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-file-filtering-settings-configured-correctly.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-file-filtering-settings-configured-correctly.snap.svg @@ -31,6 +31,7 @@ + @@ -39,12 +40,13 @@ false + - + - Enable Vim keybindings - + Enable Vim keybindings + @@ -121,17 +123,18 @@ - - - User Settings - + + + + User Settings + - Workspace Settings + Workspace Settings - System Settings + System Settings diff --git a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-focused-on-scope-selector-correctly.snap.svg b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-focused-on-scope-selector-correctly.snap.svg index f9cf782f72..f049ea698c 100644 --- a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-focused-on-scope-selector-correctly.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-focused-on-scope-selector-correctly.snap.svg @@ -110,22 +110,23 @@ - - - 1. - - - User Settings - + + + + 1. + + + User Settings + - 2. - Workspace Settings + 2. + Workspace Settings - 3. - System Settings + 3. + System Settings diff --git a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-mixed-boolean-and-number-settings-correctly.snap.svg b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-mixed-boolean-and-number-settings-correctly.snap.svg index 1866d1ab67..81fd482285 100644 --- a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-mixed-boolean-and-number-settings-correctly.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-mixed-boolean-and-number-settings-correctly.snap.svg @@ -31,6 +31,7 @@ + @@ -39,12 +40,13 @@ false* + - + - Enable Vim keybindings - + Enable Vim keybindings + @@ -121,17 +123,18 @@ - - - User Settings - + + + + User Settings + - Workspace Settings + Workspace Settings - System Settings + System Settings diff --git a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-tools-and-security-settings-correctly.snap.svg b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-tools-and-security-settings-correctly.snap.svg index 96ac9e7621..22b5e38d91 100644 --- a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-tools-and-security-settings-correctly.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-tools-and-security-settings-correctly.snap.svg @@ -31,6 +31,7 @@ + @@ -39,12 +40,13 @@ false + - + - Enable Vim keybindings - + Enable Vim keybindings + @@ -121,17 +123,18 @@ - - - User Settings - + + + + User Settings + - Workspace Settings + Workspace Settings - System Settings + System Settings diff --git a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-various-boolean-settings-enabled-correctly.snap.svg b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-various-boolean-settings-enabled-correctly.snap.svg index 739a96cf09..8545e72cb6 100644 --- a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-various-boolean-settings-enabled-correctly.snap.svg +++ b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-various-boolean-settings-enabled-correctly.snap.svg @@ -31,6 +31,7 @@ + @@ -39,12 +40,13 @@ true* + - + - Enable Vim keybindings - + Enable Vim keybindings + @@ -121,17 +123,18 @@ - - - User Settings - + + + + User Settings + - Workspace Settings + Workspace Settings - System Settings + System Settings diff --git a/packages/cli/src/ui/components/__snapshots__/SettingsDialog.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/SettingsDialog.test.tsx.snap index be2dd8d9a2..21f493064e 100644 --- a/packages/cli/src/ui/components/__snapshots__/SettingsDialog.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/SettingsDialog.test.tsx.snap @@ -37,9 +37,9 @@ exports[`SettingsDialog > Initial Rendering > should render settings list with v │ ▼ │ │ │ │ Apply To │ -│ ● User Settings │ -│ Workspace Settings │ -│ System Settings │ +│ ● User Settings │ +│ Workspace Settings │ +│ System Settings │ │ │ │ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │ │ │ @@ -83,9 +83,9 @@ exports[`SettingsDialog > Snapshot Tests > should render 'accessibility settings │ ▼ │ │ │ │ Apply To │ -│ ● User Settings │ -│ Workspace Settings │ -│ System Settings │ +│ ● User Settings │ +│ Workspace Settings │ +│ System Settings │ │ │ │ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │ │ │ @@ -129,9 +129,9 @@ exports[`SettingsDialog > Snapshot Tests > should render 'all boolean settings d │ ▼ │ │ │ │ Apply To │ -│ ● User Settings │ -│ Workspace Settings │ -│ System Settings │ +│ ● User Settings │ +│ Workspace Settings │ +│ System Settings │ │ │ │ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │ │ │ @@ -175,9 +175,9 @@ exports[`SettingsDialog > Snapshot Tests > should render 'default state' correct │ ▼ │ │ │ │ Apply To │ -│ ● User Settings │ -│ Workspace Settings │ -│ System Settings │ +│ ● User Settings │ +│ Workspace Settings │ +│ System Settings │ │ │ │ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │ │ │ @@ -221,9 +221,9 @@ exports[`SettingsDialog > Snapshot Tests > should render 'file filtering setting │ ▼ │ │ │ │ Apply To │ -│ ● User Settings │ -│ Workspace Settings │ -│ System Settings │ +│ ● User Settings │ +│ Workspace Settings │ +│ System Settings │ │ │ │ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │ │ │ @@ -267,9 +267,9 @@ exports[`SettingsDialog > Snapshot Tests > should render 'focused on scope selec │ ▼ │ │ │ │ > Apply To │ -│ ● 1. User Settings │ -│ 2. Workspace Settings │ -│ 3. System Settings │ +│ ● 1. User Settings │ +│ 2. Workspace Settings │ +│ 3. System Settings │ │ │ │ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │ │ │ @@ -313,9 +313,9 @@ exports[`SettingsDialog > Snapshot Tests > should render 'mixed boolean and numb │ ▼ │ │ │ │ Apply To │ -│ ● User Settings │ -│ Workspace Settings │ -│ System Settings │ +│ ● User Settings │ +│ Workspace Settings │ +│ System Settings │ │ │ │ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │ │ │ @@ -359,9 +359,9 @@ exports[`SettingsDialog > Snapshot Tests > should render 'tools and security set │ ▼ │ │ │ │ Apply To │ -│ ● User Settings │ -│ Workspace Settings │ -│ System Settings │ +│ ● User Settings │ +│ Workspace Settings │ +│ System Settings │ │ │ │ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │ │ │ @@ -405,9 +405,9 @@ exports[`SettingsDialog > Snapshot Tests > should render 'various boolean settin │ ▼ │ │ │ │ Apply To │ -│ ● User Settings │ -│ Workspace Settings │ -│ System Settings │ +│ ● User Settings │ +│ Workspace Settings │ +│ System Settings │ │ │ │ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │ │ │ diff --git a/packages/cli/src/ui/components/__snapshots__/ThemeDialog.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/ThemeDialog.test.tsx.snap index 4a5b30fc5c..a08a2ad3aa 100644 --- a/packages/cli/src/ui/components/__snapshots__/ThemeDialog.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/ThemeDialog.test.tsx.snap @@ -5,18 +5,18 @@ exports[`Initial Theme Selection > should default to a dark theme when terminal │ │ │ > Select Theme Preview │ │ ▲ ┌─────────────────────────────────────────────────┐ │ -│ 1. ANSI Dark │ │ │ -│ 2. Atom One Dark │ 1 # function │ │ -│ 3. Ayu Dark │ 2 def fibonacci(n): │ │ -│ ● 4. Default Dark (Matches terminal) │ 3 a, b = 0, 1 │ │ -│ 5. Dracula Dark │ 4 for _ in range(n): │ │ -│ 6. GitHub Dark │ 5 a, b = b, a + b │ │ -│ 7. Holiday Dark │ 6 return a │ │ -│ 8. Shades Of Purple Dark │ │ │ -│ 9. Solarized Dark │ 1 - print("Hello, " + name) │ │ -│ 10. ANSI Light │ 1 + print(f"Hello, {name}!") │ │ -│ 11. Ayu Light │ │ │ -│ 12. Default Light └─────────────────────────────────────────────────┘ │ +│ 1. ANSI Dark │ │ │ +│ 2. Atom One Dark │ 1 # function │ │ +│ 3. Ayu Dark │ 2 def fibonacci(n): │ │ +│ ● 4. Default Dark (Matches terminal) │ 3 a, b = 0, 1 │ │ +│ 5. Dracula Dark │ 4 for _ in range(n): │ │ +│ 6. GitHub Dark │ 5 a, b = b, a + b │ │ +│ 7. Holiday Dark │ 6 return a │ │ +│ 8. Shades Of Purple Dark │ │ │ +│ 9. Solarized Dark │ 1 - print("Hello, " + name) │ │ +│ 10. ANSI Light │ 1 + print(f"Hello, {name}!") │ │ +│ 11. Ayu Light │ │ │ +│ 12. Default Light └─────────────────────────────────────────────────┘ │ │ ▼ │ │ │ │ (Use Enter to select, Tab to configure scope, Esc to close) │ @@ -30,18 +30,18 @@ exports[`Initial Theme Selection > should default to a light theme when terminal │ │ │ > Select Theme Preview │ │ ▲ ┌─────────────────────────────────────────────────┐ │ -│ 1. ANSI Light │ │ │ -│ 2. Ayu Light │ 1 # function │ │ -│ ● 3. Default Light │ 2 def fibonacci(n): │ │ -│ 4. GitHub Light │ 3 a, b = 0, 1 │ │ -│ 5. Google Code Light │ 4 for _ in range(n): │ │ -│ 6. Solarized Light │ 5 a, b = b, a + b │ │ -│ 7. Xcode Light │ 6 return a │ │ -│ 8. ANSI Dark (Incompatible) │ │ │ -│ 9. Atom One Dark (Incompatible) │ 1 - print("Hello, " + name) │ │ -│ 10. Ayu Dark (Incompatible) │ 1 + print(f"Hello, {name}!") │ │ -│ 11. Default Dark (Incompatible) │ │ │ -│ 12. Dracula Dark (Incompatible) └─────────────────────────────────────────────────┘ │ +│ 1. ANSI Light │ │ │ +│ 2. Ayu Light │ 1 # function │ │ +│ ● 3. Default Light │ 2 def fibonacci(n): │ │ +│ 4. GitHub Light │ 3 a, b = 0, 1 │ │ +│ 5. Google Code Light │ 4 for _ in range(n): │ │ +│ 6. Solarized Light │ 5 a, b = b, a + b │ │ +│ 7. Xcode Light │ 6 return a │ │ +│ 8. ANSI Dark (Incompatible) │ │ │ +│ 9. Atom One Dark (Incompatible) │ 1 - print("Hello, " + name) │ │ +│ 10. Ayu Dark (Incompatible) │ 1 + print(f"Hello, {name}!") │ │ +│ 11. Default Dark (Incompatible) │ │ │ +│ 12. Dracula Dark (Incompatible) └─────────────────────────────────────────────────┘ │ │ ▼ │ │ │ │ (Use Enter to select, Tab to configure scope, Esc to close) │ @@ -55,18 +55,18 @@ exports[`Initial Theme Selection > should use the theme from settings even if te │ │ │ > Select Theme Preview │ │ ▲ ┌─────────────────────────────────────────────────┐ │ -│ ● 1. ANSI Dark │ │ │ -│ 2. Atom One Dark │ 1 # function │ │ -│ 3. Ayu Dark │ 2 def fibonacci(n): │ │ -│ 4. Default Dark (Matches terminal) │ 3 a, b = 0, 1 │ │ -│ 5. Dracula Dark │ 4 for _ in range(n): │ │ -│ 6. GitHub Dark │ 5 a, b = b, a + b │ │ -│ 7. Holiday Dark │ 6 return a │ │ -│ 8. Shades Of Purple Dark │ │ │ -│ 9. Solarized Dark │ 1 - print("Hello, " + name) │ │ -│ 10. ANSI Light │ 1 + print(f"Hello, {name}!") │ │ -│ 11. Ayu Light │ │ │ -│ 12. Default Light └─────────────────────────────────────────────────┘ │ +│ ● 1. ANSI Dark │ │ │ +│ 2. Atom One Dark │ 1 # function │ │ +│ 3. Ayu Dark │ 2 def fibonacci(n): │ │ +│ 4. Default Dark (Matches terminal) │ 3 a, b = 0, 1 │ │ +│ 5. Dracula Dark │ 4 for _ in range(n): │ │ +│ 6. GitHub Dark │ 5 a, b = b, a + b │ │ +│ 7. Holiday Dark │ 6 return a │ │ +│ 8. Shades Of Purple Dark │ │ │ +│ 9. Solarized Dark │ 1 - print("Hello, " + name) │ │ +│ 10. ANSI Light │ 1 + print(f"Hello, {name}!") │ │ +│ 11. Ayu Light │ │ │ +│ 12. Default Light └─────────────────────────────────────────────────┘ │ │ ▼ │ │ │ │ (Use Enter to select, Tab to configure scope, Esc to close) │ @@ -79,9 +79,9 @@ exports[`ThemeDialog Snapshots > should render correctly in scope selector mode "╭──────────────────────────────────────────────────────────────────────────────────────────────────╮ │ │ │ > Apply To │ -│ ● 1. User Settings │ -│ 2. Workspace Settings │ -│ 3. System Settings │ +│ ● 1. User Settings │ +│ 2. Workspace Settings │ +│ 3. System Settings │ │ │ │ (Use Enter to apply scope, Tab to select theme, Esc to close) │ │ │ @@ -94,18 +94,18 @@ exports[`ThemeDialog Snapshots > should render correctly in theme selection mode │ │ │ > Select Theme Preview │ │ ▲ ┌─────────────────────────────────────────────────┐ │ -│ ● 1. ANSI Dark (Matches terminal) │ │ │ -│ 2. Atom One Dark │ 1 # function │ │ -│ 3. Ayu Dark │ 2 def fibonacci(n): │ │ -│ 4. Default Dark │ 3 a, b = 0, 1 │ │ -│ 5. Dracula Dark │ 4 for _ in range(n): │ │ -│ 6. GitHub Dark │ 5 a, b = b, a + b │ │ -│ 7. Holiday Dark │ 6 return a │ │ -│ 8. Shades Of Purple Dark │ │ │ -│ 9. Solarized Dark │ 1 - print("Hello, " + name) │ │ -│ 10. ANSI Light │ 1 + print(f"Hello, {name}!") │ │ -│ 11. Ayu Light │ │ │ -│ 12. Default Light └─────────────────────────────────────────────────┘ │ +│ ● 1. ANSI Dark (Matches terminal) │ │ │ +│ 2. Atom One Dark │ 1 # function │ │ +│ 3. Ayu Dark │ 2 def fibonacci(n): │ │ +│ 4. Default Dark │ 3 a, b = 0, 1 │ │ +│ 5. Dracula Dark │ 4 for _ in range(n): │ │ +│ 6. GitHub Dark │ 5 a, b = b, a + b │ │ +│ 7. Holiday Dark │ 6 return a │ │ +│ 8. Shades Of Purple Dark │ │ │ +│ 9. Solarized Dark │ 1 - print("Hello, " + name) │ │ +│ 10. ANSI Light │ 1 + print(f"Hello, {name}!") │ │ +│ 11. Ayu Light │ │ │ +│ 12. Default Light └─────────────────────────────────────────────────┘ │ │ ▼ │ │ │ │ (Use Enter to select, Tab to configure scope, Esc to close) │ @@ -119,18 +119,18 @@ exports[`ThemeDialog Snapshots > should render correctly in theme selection mode │ │ │ > Select Theme Preview │ │ ▲ ┌─────────────────────────────────────────────────┐ │ -│ ● 1. ANSI Dark (Matches terminal) │ │ │ -│ 2. Atom One Dark │ 1 # function │ │ -│ 3. Ayu Dark │ 2 def fibonacci(n): │ │ -│ 4. Default Dark │ 3 a, b = 0, 1 │ │ -│ 5. Dracula Dark │ 4 for _ in range(n): │ │ -│ 6. GitHub Dark │ 5 a, b = b, a + b │ │ -│ 7. Holiday Dark │ 6 return a │ │ -│ 8. Shades Of Purple Dark │ │ │ -│ 9. Solarized Dark │ 1 - print("Hello, " + name) │ │ -│ 10. ANSI Light │ 1 + print(f"Hello, {name}!") │ │ -│ 11. Ayu Light │ │ │ -│ 12. Default Light └─────────────────────────────────────────────────┘ │ +│ ● 1. ANSI Dark (Matches terminal) │ │ │ +│ 2. Atom One Dark │ 1 # function │ │ +│ 3. Ayu Dark │ 2 def fibonacci(n): │ │ +│ 4. Default Dark │ 3 a, b = 0, 1 │ │ +│ 5. Dracula Dark │ 4 for _ in range(n): │ │ +│ 6. GitHub Dark │ 5 a, b = b, a + b │ │ +│ 7. Holiday Dark │ 6 return a │ │ +│ 8. Shades Of Purple Dark │ │ │ +│ 9. Solarized Dark │ 1 - print("Hello, " + name) │ │ +│ 10. ANSI Light │ 1 + print(f"Hello, {name}!") │ │ +│ 11. Ayu Light │ │ │ +│ 12. Default Light └─────────────────────────────────────────────────┘ │ │ ▼ │ │ ╭─────────────────────────────────────────────────╮ │ │ │ DEVELOPER TOOLS (Not visible to users) │ │ diff --git a/packages/cli/src/ui/components/__snapshots__/ToolConfirmationQueue.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/ToolConfirmationQueue.test.tsx.snap index a39d668825..a42161aa9a 100644 --- a/packages/cli/src/ui/components/__snapshots__/ToolConfirmationQueue.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/ToolConfirmationQueue.test.tsx.snap @@ -10,10 +10,10 @@ exports[`ToolConfirmationQueue > calculates availableContentHeight based on avai │ 50 line │ │ Apply this change? │ │ │ -│ ● 1. Allow once │ -│ 2. Allow for this session │ -│ 3. Modify with external editor │ -│ 4. No, suggest changes (esc) │ +│ ● 1. Allow once │ +│ 2. Allow for this session │ +│ 3. Modify with external editor │ +│ 4. No, suggest changes (esc) │ │ │ ╰──────────────────────────────────────────────────────────────────────────────╯ " @@ -32,10 +32,10 @@ exports[`ToolConfirmationQueue > does not render expansion hint when constrainHe │ ╰──────────────────────────────────────────────────────────────────────────╯ │ │ Apply this change? │ │ │ -│ ● 1. Allow once │ -│ 2. Allow for this session │ -│ 3. Modify with external editor │ -│ 4. No, suggest changes (esc) │ +│ ● 1. Allow once │ +│ 2. Allow for this session │ +│ 3. Modify with external editor │ +│ 4. No, suggest changes (esc) │ │ │ ╰──────────────────────────────────────────────────────────────────────────────╯ " @@ -52,9 +52,9 @@ exports[`ToolConfirmationQueue > provides more height for ask_user by subtractin │ Line 5 │ │ Line 6 │ │ │ -│ ● 1. Option 1 │ -│ Desc │ -│ 2. Enter a custom value │ +│ ● 1. Option 1 │ +│ Desc │ +│ 2. Enter a custom value │ │ │ │ Enter to select · ↑/↓ to navigate · Esc to cancel │ ╰──────────────────────────────────────────────────────────────────────────────╯ @@ -79,11 +79,11 @@ exports[`ToolConfirmationQueue > renders ExitPlanMode tool confirmation with Suc │ │ │ Plan content goes here │ │ │ -│ ● 1. Yes, automatically accept edits │ -│ Approves plan and allows tools to run automatically │ -│ 2. Yes, manually accept edits │ -│ Approves plan but requires confirmation for each tool │ -│ 3. Type your feedback... │ +│ ● 1. Yes, automatically accept edits │ +│ Approves plan and allows tools to run automatically │ +│ 2. Yes, manually accept edits │ +│ Approves plan but requires confirmation for each tool │ +│ 3. Type your feedback... │ │ │ │ Enter to select · ↑/↓ to navigate · Ctrl+X to edit plan · Esc to cancel │ ╰──────────────────────────────────────────────────────────────────────────────╯ @@ -100,10 +100,10 @@ exports[`ToolConfirmationQueue > renders expansion hint when content is long and │ 50 line │ │ Apply this change? │ │ │ -│ ● 1. Allow once │ -│ 2. Allow for this session │ -│ 3. Modify with external editor │ -│ 4. No, suggest changes (esc) │ +│ ● 1. Allow once │ +│ 2. Allow for this session │ +│ 3. Modify with external editor │ +│ 4. No, suggest changes (esc) │ │ │ ╰──────────────────────────────────────────────────────────────────────────────╯ Press Ctrl+O to show more lines @@ -119,9 +119,9 @@ exports[`ToolConfirmationQueue > renders the confirming tool with progress indic │ ls │ │ Allow execution of: 'ls'? │ │ │ -│ ● 1. Allow once │ -│ 2. Allow for this session │ -│ 3. No, suggest changes (esc) │ +│ ● 1. Allow once │ +│ 2. Allow for this session │ +│ 3. No, suggest changes (esc) │ │ │ ╰──────────────────────────────────────────────────────────────────────────────╯ " diff --git a/packages/cli/src/ui/components/messages/__snapshots__/RedirectionConfirmation.test.tsx.snap b/packages/cli/src/ui/components/messages/__snapshots__/RedirectionConfirmation.test.tsx.snap index f584e7f483..1e1ab588ec 100644 --- a/packages/cli/src/ui/components/messages/__snapshots__/RedirectionConfirmation.test.tsx.snap +++ b/packages/cli/src/ui/components/messages/__snapshots__/RedirectionConfirmation.test.tsx.snap @@ -7,8 +7,8 @@ Note: Command contains redirection which can be undesirable. Tip: Toggle auto-edit (Shift+Tab) to allow redirection in the future. Allow execution of: 'echo, redirection (>)'? -● 1. Allow once - 2. Allow for this session - 3. No, suggest changes (esc) + ● 1. Allow once + 2. Allow for this session + 3. No, suggest changes (esc) " `; diff --git a/packages/cli/src/ui/components/messages/__snapshots__/ToolConfirmationMessage-ToolConfirmationMessage-should-render-multiline-shell-scripts-with-correct-newlines-and-syntax-highlighting-SVG-snapshot-.snap.svg b/packages/cli/src/ui/components/messages/__snapshots__/ToolConfirmationMessage-ToolConfirmationMessage-should-render-multiline-shell-scripts-with-correct-newlines-and-syntax-highlighting-SVG-snapshot-.snap.svg index d1396e2335..1d2deb879e 100644 --- a/packages/cli/src/ui/components/messages/__snapshots__/ToolConfirmationMessage-ToolConfirmationMessage-should-render-multiline-shell-scripts-with-correct-newlines-and-syntax-highlighting-SVG-snapshot-.snap.svg +++ b/packages/cli/src/ui/components/messages/__snapshots__/ToolConfirmationMessage-ToolConfirmationMessage-should-render-multiline-shell-scripts-with-correct-newlines-and-syntax-highlighting-SVG-snapshot-.snap.svg @@ -16,17 +16,18 @@ done Allow execution of: 'echo'? - - - 1. - - - Allow once - - 2. - Allow for this session - 3. - No, suggest changes (esc) + + + + 1. + + + Allow once + + 2. + Allow for this session + 3. + No, suggest changes (esc) \ No newline at end of file diff --git a/packages/cli/src/ui/components/messages/__snapshots__/ToolConfirmationMessage.test.tsx.snap b/packages/cli/src/ui/components/messages/__snapshots__/ToolConfirmationMessage.test.tsx.snap index 3f207df881..e90e5cf9a1 100644 --- a/packages/cli/src/ui/components/messages/__snapshots__/ToolConfirmationMessage.test.tsx.snap +++ b/packages/cli/src/ui/components/messages/__snapshots__/ToolConfirmationMessage.test.tsx.snap @@ -8,9 +8,9 @@ ls -la whoami Allow execution of 3 commands? -● 1. Allow once - 2. Allow for this session - 3. No, suggest changes (esc) + ● 1. Allow once + 2. Allow for this session + 3. No, suggest changes (esc) " `; @@ -21,9 +21,9 @@ URLs to fetch: - https://raw.githubusercontent.com/google/gemini-react/main/README.md Do you want to proceed? -● 1. Allow once - 2. Allow for this session - 3. No, suggest changes (esc) + ● 1. Allow once + 2. Allow for this session + 3. No, suggest changes (esc) " `; @@ -31,9 +31,9 @@ exports[`ToolConfirmationMessage > should not display urls if prompt and url are "https://example.com Do you want to proceed? -● 1. Allow once - 2. Allow for this session - 3. No, suggest changes (esc) + ● 1. Allow once + 2. Allow for this session + 3. No, suggest changes (esc) " `; @@ -44,9 +44,9 @@ for i in 1 2 3; do done Allow execution of: 'echo'? -● 1. Allow once - 2. Allow for this session - 3. No, suggest changes (esc) + ● 1. Allow once + 2. Allow for this session + 3. No, suggest changes (esc) " `; @@ -55,10 +55,10 @@ exports[`ToolConfirmationMessage > should strip BiDi characters from MCP tool an Tool: testtool Allow execution of MCP tool "testtool" from server "testserver"? -● 1. Allow once - 2. Allow tool for this session - 3. Allow all server tools for this session - 4. No, suggest changes (esc) + ● 1. Allow once + 2. Allow tool for this session + 3. Allow all server tools for this session + 4. No, suggest changes (esc) " `; @@ -70,9 +70,9 @@ exports[`ToolConfirmationMessage > with folder trust > 'for edit confirmations' ╰──────────────────────────────────────────────────────────────────────────────╯ Apply this change? -● 1. Allow once - 2. Modify with external editor - 3. No, suggest changes (esc) + ● 1. Allow once + 2. Modify with external editor + 3. No, suggest changes (esc) " `; @@ -84,10 +84,10 @@ exports[`ToolConfirmationMessage > with folder trust > 'for edit confirmations' ╰──────────────────────────────────────────────────────────────────────────────╯ Apply this change? -● 1. Allow once - 2. Allow for this session - 3. Modify with external editor - 4. No, suggest changes (esc) + ● 1. Allow once + 2. Allow for this session + 3. Modify with external editor + 4. No, suggest changes (esc) " `; @@ -95,8 +95,8 @@ exports[`ToolConfirmationMessage > with folder trust > 'for exec confirmations' "echo "hello" Allow execution of: 'echo'? -● 1. Allow once - 2. No, suggest changes (esc) + ● 1. Allow once + 2. No, suggest changes (esc) " `; @@ -104,9 +104,9 @@ exports[`ToolConfirmationMessage > with folder trust > 'for exec confirmations' "echo "hello" Allow execution of: 'echo'? -● 1. Allow once - 2. Allow for this session - 3. No, suggest changes (esc) + ● 1. Allow once + 2. Allow for this session + 3. No, suggest changes (esc) " `; @@ -114,8 +114,8 @@ exports[`ToolConfirmationMessage > with folder trust > 'for info confirmations' "https://example.com Do you want to proceed? -● 1. Allow once - 2. No, suggest changes (esc) + ● 1. Allow once + 2. No, suggest changes (esc) " `; @@ -123,9 +123,9 @@ exports[`ToolConfirmationMessage > with folder trust > 'for info confirmations' "https://example.com Do you want to proceed? -● 1. Allow once - 2. Allow for this session - 3. No, suggest changes (esc) + ● 1. Allow once + 2. Allow for this session + 3. No, suggest changes (esc) " `; @@ -134,8 +134,8 @@ exports[`ToolConfirmationMessage > with folder trust > 'for mcp confirmations' > Tool: test-tool Allow execution of MCP tool "test-tool" from server "test-server"? -● 1. Allow once - 2. No, suggest changes (esc) + ● 1. Allow once + 2. No, suggest changes (esc) " `; @@ -144,9 +144,9 @@ exports[`ToolConfirmationMessage > with folder trust > 'for mcp confirmations' > Tool: test-tool Allow execution of MCP tool "test-tool" from server "test-server"? -● 1. Allow once - 2. Allow tool for this session - 3. Allow all server tools for this session - 4. No, suggest changes (esc) + ● 1. Allow once + 2. Allow tool for this session + 3. Allow all server tools for this session + 4. No, suggest changes (esc) " `; diff --git a/packages/cli/src/ui/components/shared/BaseSelectionList.test.tsx b/packages/cli/src/ui/components/shared/BaseSelectionList.test.tsx index 12b4edd6c0..d23b030890 100644 --- a/packages/cli/src/ui/components/shared/BaseSelectionList.test.tsx +++ b/packages/cli/src/ui/components/shared/BaseSelectionList.test.tsx @@ -12,22 +12,10 @@ import { type RenderItemContext, } from './BaseSelectionList.js'; import { useSelectionList } from '../../hooks/useSelectionList.js'; -import { Text, getBoundingBox } from 'ink'; +import { Text } from 'ink'; import type { theme } from '../../semantic-colors.js'; -import { useTerminalSize } from '../../hooks/useTerminalSize.js'; -import { useUIState, type UIState } from '../../contexts/UIStateContext.js'; vi.mock('../../hooks/useSelectionList.js'); -vi.mock('../../hooks/useTerminalSize.js'); -vi.mock('../../contexts/UIStateContext.js'); - -vi.mock('ink', async (importOriginal) => { - const actual = await importOriginal(); - return { - ...actual, - getBoundingBox: vi.fn(), - }; -}); const mockTheme = { text: { primary: 'COLOR_PRIMARY', secondary: 'COLOR_SECONDARY' }, @@ -69,18 +57,6 @@ describe('BaseSelectionList', () => { setActiveIndex: vi.fn(), }); - vi.mocked(useTerminalSize).mockReturnValue({ - columns: 100, - rows: 40, - }); - - vi.mocked(getBoundingBox).mockReturnValue({ - width: 100, - height: 10, - x: 0, - y: 0, - }); - mockRenderItem.mockImplementation( ( item: { value: string; label: string; disabled?: boolean; key: string }, @@ -106,9 +82,6 @@ describe('BaseSelectionList', () => { beforeEach(() => { vi.clearAllMocks(); - vi.mocked(useUIState).mockReturnValue({ - mainAreaWidth: 100, - } as unknown as UIState); }); describe('Rendering and Structure', () => { @@ -119,7 +92,6 @@ describe('BaseSelectionList', () => { expect(lastFrame()).toContain('Item B'); expect(lastFrame()).toContain('Item C'); - // 3 items. Render count might be higher due to useLayoutEffect for offset. expect(mockRenderItem).toHaveBeenCalledTimes(items.length); expect(mockRenderItem).toHaveBeenCalledWith(items[0], expect.any(Object)); unmount(); @@ -527,33 +499,6 @@ describe('BaseSelectionList', () => { unmount(); }); - it('should apply full-width highlight and offset when horizontally shifted', async () => { - const horizontalOffset = 10; - const terminalWidth = 100; - - vi.mocked(getBoundingBox).mockReturnValue({ - width: 80, - height: 10, - x: horizontalOffset, - y: 0, - }); - - vi.mocked(useTerminalSize).mockReturnValue({ - columns: terminalWidth, - rows: 40, - }); - - const result = await renderComponent({}, 0); // Item A selected - const { lastFrame, unmount, waitUntilReady } = result; - await waitUntilReady(); - - const output = lastFrame(); - expect(output).toContain('Item A'); - - await expect(result).toMatchSvgSnapshot(); - unmount(); - }); - it('should show arrows and correct items when scrolled to the middle', async () => { const { lastFrame, unmount } = await renderComponent( { items: longList, maxItemsToShow: MAX_ITEMS, showScrollArrows: true }, diff --git a/packages/cli/src/ui/components/shared/BaseSelectionList.tsx b/packages/cli/src/ui/components/shared/BaseSelectionList.tsx index d55269a9c2..e5959c5719 100644 --- a/packages/cli/src/ui/components/shared/BaseSelectionList.tsx +++ b/packages/cli/src/ui/components/shared/BaseSelectionList.tsx @@ -5,12 +5,10 @@ */ import type React from 'react'; -import { useEffect, useState, useLayoutEffect, useRef } from 'react'; -import { Text, Box, getBoundingBox, type DOMElement } from 'ink'; +import { useEffect, useState } from 'react'; +import { Text, Box } from 'ink'; import { theme } from '../../semantic-colors.js'; import { useSelectionList } from '../../hooks/useSelectionList.js'; -import { useTerminalSize } from '../../hooks/useTerminalSize.js'; -import { useUIState } from '../../contexts/UIStateContext.js'; import type { SelectionListItem } from '../../hooks/useSelectionList.js'; @@ -35,6 +33,8 @@ export interface BaseSelectionListProps< wrapAround?: boolean; focusKey?: string; priority?: boolean; + /** Horizontal padding for items when not selected. Defaults to 2. */ + horizontalPadding?: number; renderItem: (item: TItem, context: RenderItemContext) => React.ReactNode; } @@ -67,6 +67,7 @@ export function BaseSelectionList< wrapAround = true, focusKey, priority, + horizontalPadding = 1, renderItem, }: BaseSelectionListProps): React.JSX.Element { const { activeIndex } = useSelectionList({ @@ -82,23 +83,6 @@ export function BaseSelectionList< }); const [scrollOffset, setScrollOffset] = useState(0); - const containerRef = useRef(null); - const [horizontalOffset, setHorizontalOffset] = useState(0); - const { columns: terminalWidth } = useTerminalSize(); - const uiState = useUIState(); - const mainAreaWidth = uiState?.mainAreaWidth; - const effectiveTerminalWidth = mainAreaWidth ?? terminalWidth; - - // Measure horizontal offset to allow full-width highlight - useLayoutEffect(() => { - if (containerRef.current) { - const { x } = getBoundingBox(containerRef.current); - // We want to track the "true" offset relative to the viewport. - // Since we apply -breakoutAmount as a margin to the SELECTED item, - // it should not affect the parent container's x coordinate in a standard layout. - setHorizontalOffset(x); - } - }, [terminalWidth, mainAreaWidth]); // Handle scrolling for long lists useEffect(() => { @@ -117,7 +101,7 @@ export function BaseSelectionList< const numberColumnWidth = String(items.length).length; return ( - + {/* Use conditional coloring instead of conditional rendering */} {showScrollArrows && items.length > maxItemsToShow && ( {/* Radio button indicator */} diff --git a/packages/cli/src/ui/components/shared/__snapshots__/BaseSelectionList-BaseSelectionList-Rendering-and-Structure-should-render-the-selection-indicator-or-space-and-layout.snap.svg b/packages/cli/src/ui/components/shared/__snapshots__/BaseSelectionList-BaseSelectionList-Rendering-and-Structure-should-render-the-selection-indicator-or-space-and-layout.snap.svg index 0e21bd58a8..6d5b5146be 100644 --- a/packages/cli/src/ui/components/shared/__snapshots__/BaseSelectionList-BaseSelectionList-Rendering-and-Structure-should-render-the-selection-indicator-or-space-and-layout.snap.svg +++ b/packages/cli/src/ui/components/shared/__snapshots__/BaseSelectionList-BaseSelectionList-Rendering-and-Structure-should-render-the-selection-indicator-or-space-and-layout.snap.svg @@ -4,8 +4,8 @@ - ● 1. Item A - 2. Item B - 3. Item C + ● 1. Item A + 2. Item B + 3. Item C \ No newline at end of file diff --git a/packages/cli/src/ui/components/shared/__snapshots__/BaseSelectionList.test.tsx.snap b/packages/cli/src/ui/components/shared/__snapshots__/BaseSelectionList.test.tsx.snap index 0e8c869f47..fbfbbd0736 100644 --- a/packages/cli/src/ui/components/shared/__snapshots__/BaseSelectionList.test.tsx.snap +++ b/packages/cli/src/ui/components/shared/__snapshots__/BaseSelectionList.test.tsx.snap @@ -1,47 +1,41 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`BaseSelectionList > Rendering and Structure > should render the selection indicator (● or space) and layout 1`] = ` -"● 1. Item A - 2. Item B - 3. Item C" -`; - -exports[`BaseSelectionList > Scroll Arrows (showScrollArrows) > should apply full-width highlight and offset when horizontally shifted 1`] = ` -"● 1. Item A - 2. Item B - 3. Item C" +" ● 1. Item A + 2. Item B + 3. Item C" `; exports[`BaseSelectionList > Scroll Arrows (showScrollArrows) > should not show arrows when list fits entirely 1`] = ` -"● 1. Item A - 2. Item B - 3. Item C +" ● 1. Item A + 2. Item B + 3. Item C " `; exports[`BaseSelectionList > Scroll Arrows (showScrollArrows) > should show arrows and correct items when scrolled to the end 1`] = ` "▲ - 8. Item 8 - 9. Item 9 -● 10. Item 10 + 8. Item 8 + 9. Item 9 + ● 10. Item 10 ▼ " `; exports[`BaseSelectionList > Scroll Arrows (showScrollArrows) > should show arrows and correct items when scrolled to the middle 1`] = ` "▲ - 4. Item 4 - 5. Item 5 -● 6. Item 6 + 4. Item 4 + 5. Item 5 + ● 6. Item 6 ▼ " `; exports[`BaseSelectionList > Scroll Arrows (showScrollArrows) > should show arrows with correct colors when enabled (at the top) 1`] = ` "▲ -● 1. Item 1 - 2. Item 2 - 3. Item 3 + ● 1. Item 1 + 2. Item 2 + 3. Item 3 ▼ " `; diff --git a/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-keyboard-navigation-should-navigate-down-with-arrow-key-2.snap.svg b/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-keyboard-navigation-should-navigate-down-with-arrow-key-2.snap.svg new file mode 100644 index 0000000000..0e79266e80 --- /dev/null +++ b/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-keyboard-navigation-should-navigate-down-with-arrow-key-2.snap.svg @@ -0,0 +1,91 @@ + + + + + ╭──────────────────────────────────────────────────────────────────────────────────────────────────╮ + + + + > Test Settings + + + + + Boolean Setting + true + + + A boolean setting for testing + + + + + + + + + + String Setting + + + test-value + + + + + + A string setting for testing + + + + + + Number Setting + 42 + + + A number setting for testing + + + + + Enum Setting + option-a + + + An enum setting for testing + + + + + + + Apply To + + + + + + + + User Settings + + + + Workspace Settings + + + System Settings + + + + + (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) + + + + ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ + + \ No newline at end of file diff --git a/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-keyboard-navigation-should-navigate-down-with-arrow-key-3.snap.svg b/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-keyboard-navigation-should-navigate-down-with-arrow-key-3.snap.svg new file mode 100644 index 0000000000..287c973f6e --- /dev/null +++ b/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-keyboard-navigation-should-navigate-down-with-arrow-key-3.snap.svg @@ -0,0 +1,91 @@ + + + + + ╭──────────────────────────────────────────────────────────────────────────────────────────────────╮ + + + + > Test Settings + + + + + Boolean Setting + true + + + A boolean setting for testing + + + + + + + + + + String Setting + + + test-value + + + + + + A string setting for testing + + + + + + Number Setting + 42 + + + A number setting for testing + + + + + Enum Setting + option-a + + + An enum setting for testing + + + + + + + Apply To + + + + + + + + User Settings + + + + Workspace Settings + + + System Settings + + + + + (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) + + + + ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ + + \ No newline at end of file diff --git a/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-keyboard-navigation-should-navigate-down-with-arrow-key.snap.svg b/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-keyboard-navigation-should-navigate-down-with-arrow-key.snap.svg index 2c9c3a626c..287c973f6e 100644 --- a/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-keyboard-navigation-should-navigate-down-with-arrow-key.snap.svg +++ b/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-keyboard-navigation-should-navigate-down-with-arrow-key.snap.svg @@ -65,19 +65,19 @@ Apply To - - - - User Settings - + + + + User Settings + - Workspace Settings + Workspace Settings - System Settings + System Settings diff --git a/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-rendering-should-render-all-items.snap.svg b/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-rendering-should-render-all-items.snap.svg index fd59640fbe..03c446e98b 100644 --- a/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-rendering-should-render-all-items.snap.svg +++ b/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-rendering-should-render-all-items.snap.svg @@ -65,19 +65,19 @@ Apply To - - - - User Settings - + + + + User Settings + - Workspace Settings + Workspace Settings - System Settings + System Settings diff --git a/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog.test.tsx.snap b/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog.test.tsx.snap index acae5124a5..02379cd2c8 100644 --- a/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog.test.tsx.snap +++ b/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog.test.tsx.snap @@ -19,9 +19,37 @@ exports[`BaseSettingsDialog > keyboard navigation > should navigate down with ar │ │ │ │ │ Apply To │ -│ ● User Settings │ -│ Workspace Settings │ -│ System Settings │ +│ ● User Settings │ +│ Workspace Settings │ +│ System Settings │ +│ │ +│ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │ +│ │ +╰──────────────────────────────────────────────────────────────────────────────────────────────────╯" +`; + +exports[`BaseSettingsDialog > keyboard navigation > should navigate down with arrow key 2`] = ` +"╭──────────────────────────────────────────────────────────────────────────────────────────────────╮ +│ │ +│ > Test Settings │ +│ │ +│ Boolean Setting true │ +│ A boolean setting for testing │ +│ │ +│ ● String Setting test-value │ +│ A string setting for testing │ +│ │ +│ Number Setting 42 │ +│ A number setting for testing │ +│ │ +│ Enum Setting option-a │ +│ An enum setting for testing │ +│ │ +│ │ +│ Apply To │ +│ ● User Settings │ +│ Workspace Settings │ +│ System Settings │ │ │ │ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │ │ │ @@ -47,9 +75,9 @@ exports[`BaseSettingsDialog > rendering > should render all items 1`] = ` │ │ │ │ │ Apply To │ -│ ● User Settings │ -│ Workspace Settings │ -│ System Settings │ +│ ● User Settings │ +│ Workspace Settings │ +│ System Settings │ │ │ │ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │ │ │ diff --git a/packages/cli/src/ui/components/shared/__snapshots__/DescriptiveRadioButtonSelect.test.tsx.snap b/packages/cli/src/ui/components/shared/__snapshots__/DescriptiveRadioButtonSelect.test.tsx.snap index 9fa0f0f79f..1940b24074 100644 --- a/packages/cli/src/ui/components/shared/__snapshots__/DescriptiveRadioButtonSelect.test.tsx.snap +++ b/packages/cli/src/ui/components/shared/__snapshots__/DescriptiveRadioButtonSelect.test.tsx.snap @@ -1,21 +1,21 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`DescriptiveRadioButtonSelect > should render correctly with custom props 1`] = ` -" 1. Foo Title - This is Foo. -● 2. Bar Title - This is Bar. - 3. Baz Title - This is Baz. +" 1. Foo Title + This is Foo. + ● 2. Bar Title + This is Bar. + 3. Baz Title + This is Baz. " `; exports[`DescriptiveRadioButtonSelect > should render correctly with default props 1`] = ` -"● Foo Title - This is Foo. - Bar Title - This is Bar. - Baz Title - This is Baz. +" ● Foo Title + This is Foo. + Bar Title + This is Bar. + Baz Title + This is Baz. " `;