WIP: theme preset gallery and custom color editor#7276
Closed
WIP: theme preset gallery and custom color editor#7276
Conversation
41924fe to
e31f47c
Compare
eebc31d to
cc099ac
Compare
e31f47c to
7ea66b4
Compare
cc099ac to
fdebaa7
Compare
7ea66b4 to
273efa7
Compare
fdebaa7 to
808082c
Compare
273efa7 to
72ecd3f
Compare
808082c to
c7626f8
Compare
72ecd3f to
f197484
Compare
c7626f8 to
67e1957
Compare
f197484 to
5dc34ec
Compare
67e1957 to
3acc339
Compare
5dc34ec to
90bc11a
Compare
9bdc029 to
aee1458
Compare
aee1458 to
72b89f5
Compare
This was referenced Feb 17, 2026
Closed
72b89f5 to
2bb4c0b
Compare
6d4519b to
6263672
Compare
2bb4c0b to
c0396be
Compare
…n.css - Add theme-tokens.ts as single source of truth for all MCP spec token values - Apply tokens to :root via style.setProperty() before first paint (renderer.tsx) - Remove duplicate token values from main.css :root/.dark blocks - main.css now only registers variable names for Tailwind (@theme inline) and defines app-specific aliases (sidebar, search highlight, legacy) - Add buildMcpHostStyles() to generate light-dark() format for MCP apps - Update ThemeContext with refreshTokens, tokenVersion, localStorage override - Update preload and suspense-loader to use MCP-compliant variable names
Rename ~130 TSX files from legacy class names (bg-background-default, border-default, text-muted, etc.) to MCP-compliant equivalents (bg-background-primary, border-border-primary, text-text-secondary, etc.) This aligns the Goose desktop UI with the MCP theming specification, enabling consistent styling across both the host app and MCP app iframes.
Use bg-text-primary and text-background-primary to naturally invert the color scheme inside chat bubbles, ensuring readable text in both light and dark modes.
Section headers jumped from 5 to 7, skipping 6. This was a typo introduced when the file was restructured into numbered sections.
- Extract shared tokens (fonts, radii, border-width) into baseTokens to eliminate duplication between light and dark theme definitions. - Use type-safe Pick/Exclude to enforce the split at compile time. - Restrict light-dark() in buildMcpHostStyles() to --color-* keys only, since light-dark() is a CSS color function and produces invalid values for non-color properties like box-shadow. - Always wrap color keys in light-dark() for consistency, even when both theme values are identical (e.g. transparent, #878787).
9511d70 to
23b36f7
Compare
- Add 10 built-in theme presets: Goose Classic, Nord, Dracula, Solarized, Monokai, GitHub, Gruvbox, Tokyo Night, One Dark, High Contrast - Add PresetGallery with tag filtering and one-click apply - Add ThemeColorEditor with Presets and Custom Colors tabs - Add SimpleColorPicker (hue spectrum + saturation/lightness grid) - Add ColorPreview showing live preview across real UI components - Add custom theme CRUD (save/edit/delete to localStorage) - Add "Customize Colors" button in Settings → Appearance - Presets define partial color overrides (~18 keys), merged on top of goose-classic defaults (~60+ keys) at apply time - Zero server endpoints — everything is client-side - No external dependencies for color picking
c0396be to
73f221e
Compare
Collaborator
|
Hey @aharvard 👋 Just checking in on this draft. Are you still actively working on it? If not, would you mind closing it? We can always reopen later if you pick it back up. Thanks! |
Collaborator
Author
|
Thanks for checking @lifeizhou-ap, I was collaborating with @spencrmartin on this work. Yeah, we can close for now and re-open later! Thanks. |
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a full theme builder experience — preset gallery and custom color editor — on top of the token infrastructure from #7275.
What's included
PresetGallery— grid of preset cards with tag filtering, one-click apply, color preview swatchesThemeColorEditor— full-screen dialog with two tabs (Presets / Custom Colors)SimpleColorPicker— hue spectrum + saturation/lightness grid, no external depsColorPreview— live preview showing how each color variable appears in real UI components (sidebar, chat bubbles, cards, buttons, etc.)Key decisions
chroma-jsdependency — the color picker is self-containedstyle.setProperty()localStorageVerification
cargo build -p goose-servercargo fmt -- --checkcargo clippy --all-targets -- -D warningsnpx tsc --noEmit(zero errors)eslint(zero new errors, 1 pre-existing warning in McpAppRenderer)Related