Skip to content

feat: Solarized Dark Theme#532

Open
chrisscott wants to merge 2 commits intoRunMaestro:mainfrom
chrisscott:fix/solarized-dark-contrast
Open

feat: Solarized Dark Theme#532
chrisscott wants to merge 2 commits intoRunMaestro:mainfrom
chrisscott:fix/solarized-dark-contrast

Conversation

@chrisscott
Copy link

@chrisscott chrisscott commented Mar 7, 2026

Adds the Solarized Dark theme.

Test with dev server.

Screenshot 2026-03-07 at 16 44 37

Summary by CodeRabbit

  • New Features

    • Added "solarized-dark" theme option.
  • Style

    • Enhanced session origin pill appearance with improved visual contrast and color accuracy.
    • Improved code block and inline code styling to properly adapt across all themes.

chrisscott and others added 2 commits March 7, 2026 15:18
Add 'solarized-dark' to ThemeId union type, isValidThemeId guard,
and THEMES registry using canonical Solarized Dark palette colors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Darken border color (#586e75 → #2f4f56) so pill backgrounds contrast
  better with text
- Brighten textMain (#839496 → #93a1a1) and accentText (#2aa198 →
  #5fddd5) for readable tag labels
- Override SyntaxHighlighter base text color with theme's textMain so
  code blocks match inline code across all themes
- Update pill styles in SessionListItem for better contrast
- Bump theme count assertion from 17 → 18

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@coderabbitai
Copy link

coderabbitai bot commented Mar 7, 2026

📝 Walkthrough

Walkthrough

Adds a new "solarized-dark" theme to the application with its complete color configuration. Updates component styling for pills and markdown code rendering to align with theme-aware color values. Adjusts test expectations to reflect the new theme count.

Changes

Cohort / File(s) Summary
Theme Registry & Types
src/shared/theme-types.ts, src/shared/themes.ts
Added 'solarized-dark' to ThemeId union type and validIds array. Registered new solarized-dark theme with complete color token definitions (bgMain, border, accent, warning, success, error, etc.).
Component Styling
src/renderer/components/SessionListItem.tsx
Updated pill styling with increased background opacity and adjusted text colors: user/auto/CLI origin pills and session ID pill now use higher opacity and theme-specific text colors (accentText, textMain).
Markdown Configuration
src/renderer/utils/markdownConfig.ts
Modified code block renderer to compute theme-aware styles merging vscDarkPlus base with theme-specific overrides for language-tagged code elements instead of using fixed vscDarkPlus.
Tests
src/__tests__/renderer/constants/themes.test.ts
Updated theme count expectation from 17 to 18 to align with addition of solarized-dark theme.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 66.67% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat: Solarized Dark Theme' directly and clearly summarizes the main change: adding a new Solarized Dark theme to the application.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Tip

Try Coding Plans. Let us write the prompt for your AI agent so you can ship faster (with fewer bugs).
Share your feedback on Discord.


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.

@greptile-apps
Copy link

greptile-apps bot commented Mar 7, 2026

Greptile Summary

This PR adds the Solarized Dark theme, correctly wiring it through all required layers: the ThemeId union type, the isValidThemeId runtime guard, and the canonical THEMES record in src/shared/themes.ts (which is re-exported to the renderer via src/renderer/constants/themes.ts). The test count is updated accordingly.

Two supporting changes accompany the new theme:

  • SessionListItem.tsx — Increases pill background opacity ('30''40') and switches the MAESTRO pill text from accent to accentText, and the CLI / Session ID pills from textDim to textMain. These are cross-theme readability improvements, not specific to Solarized Dark.
  • markdownConfig.ts — Introduces a themedStyle object that overrides the base text color and background of vscDarkPlus syntax-highlighted code blocks with per-theme values, so plain-text code blocks match inline code styling for all themes.

Key observations:

  • The Solarized Dark palette closely follows the canonical Solarized spec. bgActivity: '#0a4050' and accentText: '#5fddd5' are intentional deviations — the former is a smooth intermediate between bgMain/bgSidebar, and the latter is a brighter cyan chosen for contrast against dark backgrounds (matching the convention used in other dark themes like Nord, Catppuccin Mocha, etc.).
  • The markdownConfig.ts change is a global change that improves all themes — plain-text / unknown-language code blocks will now respect the theme's textMain and bgActivity rather than defaulting to vscDarkPlus's hard-coded near-white text. Light themes benefit as well (previously, a light bgActivity was paired with vscDarkPlus's near-white default text, which was near-invisible).
  • The customStyle.background prop on SyntaxHighlighter already overrode the block background before this PR; the new themedStyle['pre[class*="language-"]'].background entry is redundant but harmless since customStyle takes precedence as an inline style.

Confidence Score: 5/5

  • Safe to merge — all theme wiring is correct, tests pass, and supporting UI changes are net improvements across all themes.
  • The new theme is fully and correctly registered in every required location (type union, runtime guard, THEMES record, test count). The supporting changes to SessionListItem and markdownConfig are improvements with no regressions. No logic errors, type issues, or missing fields were found.
  • No files require special attention.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["ThemeId union type\nsrc/shared/theme-types.ts"] -->|"'solarized-dark' added"| B["isValidThemeId guard\nsrc/shared/theme-types.ts"]
    A --> C["THEMES record\nsrc/shared/themes.ts"]
    C -->|"re-exported via"| D["src/renderer/constants/themes.ts"]
    D -->|"consumed by"| E["SessionListItem.tsx\npill colors use accentText / textMain"]
    D -->|"consumed by"| F["markdownConfig.ts\nthemedStyle overrides vscDarkPlus\nbase color + background"]
    C --> G["themes.test.ts\ncount: 17 → 18"]
Loading

Last reviewed commit: 7dcc59e

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
src/renderer/components/SessionListItem.tsx (1)

281-289: Consider updating the search match pill for consistency.

The content search match pill (line 284) still uses theme.colors.accent for both background and text color, while similar pills in this file were updated to use more readable text colors. This may have contrast issues on certain themes.

Note that similar patterns exist in Toast.tsx (lines 194-200) and ShortcutsHelpModal.tsx (lines 84-87) per the relevant code snippets provided.

♻️ Optional: Update for consistency
 {searchResultInfo && searchResultInfo.matchCount > 0 && searchMode !== 'title' && (
 	<span
 		className="flex items-center gap-1 px-1.5 py-0.5 rounded"
-		style={{ backgroundColor: theme.colors.accent + '20', color: theme.colors.accent }}
+		style={{ backgroundColor: theme.colors.accent + '30', color: theme.colors.accentText }}
 	>
 		<Search className="w-3 h-3" />
 		{searchResultInfo.matchCount}
 	</span>
 )}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/renderer/components/SessionListItem.tsx` around lines 281 - 289, The
search match pill in SessionListItem (rendering when searchResultInfo &&
searchResultInfo.matchCount > 0 && searchMode !== 'title') uses
theme.colors.accent for both background and text causing contrast issues; update
the inline style so the background remains theme.colors.accent + '20' but the
text color uses a readable color (e.g., theme.colors.textPrimary or a dedicated
on-accent color) instead of theme.colors.accent, and apply the same consistent
change pattern to the similar pills in Toast.tsx and ShortcutsHelpModal.tsx to
ensure consistent contrast across components.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@src/renderer/components/SessionListItem.tsx`:
- Around line 281-289: The search match pill in SessionListItem (rendering when
searchResultInfo && searchResultInfo.matchCount > 0 && searchMode !== 'title')
uses theme.colors.accent for both background and text causing contrast issues;
update the inline style so the background remains theme.colors.accent + '20' but
the text color uses a readable color (e.g., theme.colors.textPrimary or a
dedicated on-accent color) instead of theme.colors.accent, and apply the same
consistent change pattern to the similar pills in Toast.tsx and
ShortcutsHelpModal.tsx to ensure consistent contrast across components.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 4148c7f4-cc2d-4273-8d34-6de7aea1eb27

📥 Commits

Reviewing files that changed from the base of the PR and between 7acc502 and 7dcc59e.

📒 Files selected for processing (5)
  • src/__tests__/renderer/constants/themes.test.ts
  • src/renderer/components/SessionListItem.tsx
  • src/renderer/utils/markdownConfig.ts
  • src/shared/theme-types.ts
  • src/shared/themes.ts

@chrisscott
Copy link
Author

🧹 Nitpick comments (1)

src/renderer/components/SessionListItem.tsx (1)> 281-289: Consider updating the search match pill for consistency.

The content search match pill (line 284) still uses theme.colors.accent for both background and text color, while similar pills in this file were updated to use more readable text colors. This may have contrast issues on certain themes.
Note that similar patterns exist in Toast.tsx (lines 194-200) and ShortcutsHelpModal.tsx (lines 84-87) per the relevant code snippets provided.

♻️ Optional: Update for consistency

 {searchResultInfo && searchResultInfo.matchCount > 0 && searchMode !== 'title' && (
 	<span
 		className="flex items-center gap-1 px-1.5 py-0.5 rounded"
-		style={{ backgroundColor: theme.colors.accent + '20', color: theme.colors.accent }}
+		style={{ backgroundColor: theme.colors.accent + '30', color: theme.colors.accentText }}
 	>
 		<Search className="w-3 h-3" />
 		{searchResultInfo.matchCount}
 	</span>
 )}

🤖 Prompt for AI Agents

Verify each finding against the current code and only fix it if needed.

In `@src/renderer/components/SessionListItem.tsx` around lines 281 - 289, The
search match pill in SessionListItem (rendering when searchResultInfo &&
searchResultInfo.matchCount > 0 && searchMode !== 'title') uses
theme.colors.accent for both background and text causing contrast issues; update
the inline style so the background remains theme.colors.accent + '20' but the
text color uses a readable color (e.g., theme.colors.textPrimary or a dedicated
on-accent color) instead of theme.colors.accent, and apply the same consistent
change pattern to the similar pills in Toast.tsx and ShortcutsHelpModal.tsx to
ensure consistent contrast across components.

🤖 Prompt for all review comments with AI agents

Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@src/renderer/components/SessionListItem.tsx`:
- Around line 281-289: The search match pill in SessionListItem (rendering when
searchResultInfo && searchResultInfo.matchCount > 0 && searchMode !== 'title')
uses theme.colors.accent for both background and text causing contrast issues;
update the inline style so the background remains theme.colors.accent + '20' but
the text color uses a readable color (e.g., theme.colors.textPrimary or a
dedicated on-accent color) instead of theme.colors.accent, and apply the same
consistent change pattern to the similar pills in Toast.tsx and
ShortcutsHelpModal.tsx to ensure consistent contrast across components.

ℹ️ Review info

Same pattern — accent text on faint accent background. This is fine. The accent color (#268bd2) has good contrast against the dark backgrounds in Solarized Dark. The + '20' background tint is subtle enough that the effective background is still essentially the parent's dark color.

No changes needed. These pills use a well-established pattern (accent-colored text with a faint accent wash) that provides adequate contrast across all themes, including Solarized Dark. The text color contrasts against the underlying dark background, not against the semi-transparent tint.

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