Skip to content

fix(ui): move UI scale + theme picker from footer to Settings → Appearance - #108

Merged
debpalash merged 1 commit into
mainfrom
fix/footer-controls-to-settings
May 20, 2026
Merged

fix(ui): move UI scale + theme picker from footer to Settings → Appearance#108
debpalash merged 1 commit into
mainfrom
fix/footer-controls-to-settings

Conversation

@debpalash

@debpalash debpalash commented May 20, 2026

Copy link
Copy Markdown
Owner

Final piece of the "calm chrome" pass (#105, #106, #107, this one).

What moved

The LogsFooter bar carried two always-visible appearance controls in its left edge:

  • `S M L` UI-scale toggle
  • 6 color theme dots (Gruvbox / Midnight / Nord / Solarized / Rosé Pine / Catppuccin)

Both belong in Settings — rarely-used display preferences shouldn't live in always-visible chrome competing with logs / error counts. Moved into a new `AppearancePanel` rendered as a Settings section, alongside the existing `ApiKeysPanel` and `PerformancePanel`.

State preservation

Store fields (`uiScale`, `theme`, `setUiScale`, `setTheme`) are unchanged. They still persist via the same Zustand persist whitelist; only the rendering location moved. Users who toggled to L-scale or Catppuccin keep their prefs across the move.

User-visible effect

Footer left edge now starts with the collapse chevron + "Logs" title + source pills. No S/M/L. No color dots. A user who wants to change either opens Settings.

Files

  • New: `frontend/src/components/settings/AppearancePanel.{jsx,css}`
  • Modified: `Settings.jsx` — wires the panel in
  • Modified: `LogsFooter.jsx` — drops the inline `UiScaleToggle` / `ThemePicker` components + their renders + imports

Test plan

  • `bun run typecheck:ci` clean
  • Launch app → footer left edge has only `▲ Logs ⌬ Backend Frontend Tauri` — no S/M/L, no color dots
  • Open Settings → see new "Appearance" section with both controls
  • Click L → instant scale change → reload → still L (state preserved)
  • Click Catppuccin dot → instant theme change → reload → still Catppuccin

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Appearance settings panel introduced in Settings, centralizing UI scale controls (Small/Medium/Large) and theme color selection with instant application. Consolidates appearance customization options into dedicated interface for improved navigation and streamlined logs footer.

Review Change Stack

…rance

The LogsFooter bar carried two always-visible appearance controls in the
left edge — \`S M L\` UI-scale toggle and 6 color theme dots. Both
duplicated the "Settings" affordance: rarely-used display preferences
shouldn't live in always-on chrome competing with logs / error counts.

Moved both into a new \`AppearancePanel\` rendered as a Settings section:

- New: frontend/src/components/settings/AppearancePanel.{jsx,css}
- Wired into Settings.jsx alongside ApiKeysPanel + PerformancePanel
- Footer no longer renders UiScaleToggle / ThemePicker / their dividers

Store state (uiScale, theme, setUiScale, setTheme) is unchanged — they
still persist via the same Zustand persist whitelist, just rendered in
the new location. Users who toggled to L-scale or Catppuccin keep their
prefs across the move.

User-visible effect: footer left edge now starts with the collapse
chevron + "Logs" title, then the source pills. No S/M/L. No color dots.
A user who wants to change either opens Settings.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented May 20, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This PR consolidates appearance customization by moving the theme picker and UI scale toggle from an inline LogsFooter to a dedicated AppearancePanel in the Settings menu. The footer is simplified to focus on log content, while appearance controls are now grouped with other preferences.

Changes

Appearance Settings Relocation

Layer / File(s) Summary
AppearancePanel Component & Styling
frontend/src/components/settings/AppearancePanel.jsx, frontend/src/components/settings/AppearancePanel.css
New AppearancePanel renders instant-apply UI scale segmented control (S/M/L) and theme radio button group sourced from THEMES array, both wired to useAppStore state. CSS provides container/title/row layout, theme dot interaction states (hover/active), and help text styling.
Settings Page Integration
frontend/src/pages/Settings.jsx
AppearancePanel is imported and inserted into the Credentials tab area below PerformancePanel with descriptive comments.
LogsFooter Cleanup
frontend/src/components/LogsFooter.jsx
Removes local UiScaleToggle and ThemePicker component implementations, their supporting imports (Segmented, store access), and JSX rendering, replacing inline controls with documentation comments indicating migration to Settings.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Poem

🐰 A footer once cluttered with theme and with scale,
Now settles to show just the logs without fail.
Settings grows stronger with choices so bright,
Appearance finds home in one organized site!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 20.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: moving UI scale and theme picker controls from the footer to Settings → Appearance.
Description check ✅ Passed The description is comprehensive and covers the changes, rationale, and test plan, but lacks completion of the template's Type checkbox and some Testing/Checklist items.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/footer-controls-to-settings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@frontend/src/components/LogsFooter.jsx`:
- Around line 68-72: The module is missing the useAppStore import which causes
ReferenceError when the hooks at useAppStore (used in the footer component
around the user action handlers) are referenced; restore the import by adding
useAppStore to the existing import block at the top of the file (where other
hooks/stores are imported) so that the component can call useAppStore in the
handlers that currently reference it; ensure the imported symbol name exactly
matches useAppStore and remove any duplicate imports if present.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 2d8642e1-a6ee-4feb-96d4-ce61a7a39f6f

📥 Commits

Reviewing files that changed from the base of the PR and between aece6f1 and a38da22.

📒 Files selected for processing (4)
  • frontend/src/components/LogsFooter.jsx
  • frontend/src/components/settings/AppearancePanel.css
  • frontend/src/components/settings/AppearancePanel.jsx
  • frontend/src/pages/Settings.jsx

Comment on lines +68 to +72
// UiScaleToggle and ThemePicker used to live here as always-visible
// controls in the footer chrome. Moved to Settings → Appearance (see
// AppearancePanel) so the footer can stay focused on logs. The store
// fields (uiScale, theme, setUiScale, setTheme) are unchanged; only the
// rendering moved.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Re-add useAppStore import to prevent runtime failures.

useAppStore is still used at Line 400 and Line 442, but it is no longer imported in this module. Those user actions will throw ReferenceError: useAppStore is not defined.

🔧 Proposed fix
 import { useSystemLogs, useTauriLogs, useClearLogs, useClearTauriLogs } from '../api/hooks';
 import { getFrontendLogs, clearFrontendLogs } from '../utils/consoleBuffer';
+import { useAppStore } from '../store';
 import './LogsFooter.css';

Also applies to: 344-346

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@frontend/src/components/LogsFooter.jsx` around lines 68 - 72, The module is
missing the useAppStore import which causes ReferenceError when the hooks at
useAppStore (used in the footer component around the user action handlers) are
referenced; restore the import by adding useAppStore to the existing import
block at the top of the file (where other hooks/stores are imported) so that the
component can call useAppStore in the handlers that currently reference it;
ensure the imported symbol name exactly matches useAppStore and remove any
duplicate imports if present.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant