Skip to content

Land remaining light-mode panels (batch A + B) onto main - #510

Merged
jackgranatowski merged 5 commits into
mainfrom
claude/studio-light-mode-2-inputs-panels-a
Jul 3, 2026
Merged

Land remaining light-mode panels (batch A + B) onto main#510
jackgranatowski merged 5 commits into
mainfrom
claude/studio-light-mode-2-inputs-panels-a

Conversation

@jackgranatowski

Copy link
Copy Markdown
Contributor

Closes the gap left by the stacked-PR merge sequence for the Studio light-mode rollout (#506, #507, #508).

What happened

#506, #507, and #508 were deliberately stacked (each based on the previous PR's branch) so every PR showed only its own incremental diff for review. All three were merged — but merging a stacked PR only advances its own base branch, not main:

So main currently only has #506's content (theme system + shell chrome). This PR's head branch (claude/studio-light-mode-2-inputs-panels-a) is the tip of the stack and contains all three merges' combined history — confirmed via git merge-base --is-ancestor that #508's commits are included.

What this PR contains

Purely the already-reviewed and already-merged content of #507 (inputs + panels batch A) and #508 (panels batch B, including the follow-up <option> background fix). No new changes — this is just landing already-approved work onto main.

Verification

  • git diff between this branch and the original combined single-commit changeset (from before the 3-way split) is empty — confirms nothing was lost or altered across the stack.
  • npx svelte-check — 0 errors
  • npx vitest run — 113/113 passing

Generated by Claude Code

claude and others added 4 commits July 3, 2026 09:42
Second of a 3-part light-mode rollout, stacked on the shell/infra PR.
Applies the theme.svelte.ts system (added in part 1) to every shared
input control and the first batch of domain panels.

Inputs: ClampField, ColorInput, OklchColorDesk, PowerKnobRow,
RangeWithNumber, SliderRow, TokenRow.

Panels: AllTokensTab, BordersPanel, CheatsheetPanel, ColorsPanel,
EffectsPanel, ExportPanel, GenericTokenPanel, HomePanel.

Includes fixes for two review-bot findings on the original combined
PR: missing dark: placeholder pairing on the AllTokensTab and
GenericTokenPanel search inputs, and missing dark: variants for the
motion/form entries in CheatsheetPanel's KIND_COLOR map.
Third and final part of the light-mode rollout, stacked on batch A.
Applies the theme.svelte.ts system to the remaining domain panels:
LayoutPanel, MacrosPanel, MiscPanel, MotionPanel, ShadowsPanel,
SpacingPanel, ThemesPanel, TypographyPanel, WcagPanel.

Includes a fix for a review-bot finding on the original combined PR:
LayoutPanel's two <select> controls hardcoded their <option> element
background to the dark-mode color regardless of theme (native <option>
styling has no dark: variant support), producing dark-on-dark text in
light mode. Now derived from the chrome theme at render time.
Same bug LayoutPanel already fixed in this PR was still present in
MotionPanel, TypographyPanel, and WcagPanel: their <select> controls
got a light-mode text/border treatment but every <option> kept a
hardcoded dark background (#16161e), which native <option> elements
don't accept via a dark: class, so light mode showed unreadable
dark-on-dark dropdown items.

Applies the same fix as LayoutPanel: a themeState-derived optionBg
used in each <option>'s inline style.
…-panels-b

Light mode for remaining panels, batch B (3/3)
@coderabbitai

coderabbitai Bot commented Jul 3, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@jackgranatowski, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 41 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 6d1bd3fd-fcfb-44d8-bf1a-c87b30d60840

📥 Commits

Reviewing files that changed from the base of the PR and between 3e3bfa5 and 7114f1f.

📒 Files selected for processing (24)
  • configurator/src/components/inputs/ClampField.svelte
  • configurator/src/components/inputs/ColorInput.svelte
  • configurator/src/components/inputs/OklchColorDesk.svelte
  • configurator/src/components/inputs/PowerKnobRow.svelte
  • configurator/src/components/inputs/RangeWithNumber.svelte
  • configurator/src/components/inputs/SliderRow.svelte
  • configurator/src/components/inputs/TokenRow.svelte
  • configurator/src/components/panels/AllTokensTab.svelte
  • configurator/src/components/panels/BordersPanel.svelte
  • configurator/src/components/panels/CheatsheetPanel.svelte
  • configurator/src/components/panels/ColorsPanel.svelte
  • configurator/src/components/panels/EffectsPanel.svelte
  • configurator/src/components/panels/ExportPanel.svelte
  • configurator/src/components/panels/GenericTokenPanel.svelte
  • configurator/src/components/panels/HomePanel.svelte
  • configurator/src/components/panels/LayoutPanel.svelte
  • configurator/src/components/panels/MacrosPanel.svelte
  • configurator/src/components/panels/MiscPanel.svelte
  • configurator/src/components/panels/MotionPanel.svelte
  • configurator/src/components/panels/ShadowsPanel.svelte
  • configurator/src/components/panels/SpacingPanel.svelte
  • configurator/src/components/panels/ThemesPanel.svelte
  • configurator/src/components/panels/TypographyPanel.svelte
  • configurator/src/components/panels/WcagPanel.svelte
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/studio-light-mode-2-inputs-panels-a

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.

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Land Studio light-mode inputs and panels onto main (batches A+B)

✨ Enhancement 🐞 Bug fix 🕐 40+ Minutes

Grey Divider

AI Description

• Land previously-reviewed light-mode styling for Studio inputs and panels onto main.
• Add theme-aware light-mode/dark-mode Tailwind variants across all domain panels.
• Fix native  background and missing dark-mode variant edge cases.
Diagram

graph TD
  U["User"] --> UI["Studio UI"] --> P["Panels (*.svelte)"] --> I["Shared inputs"]
  UI --> TS("themeState") --> OB["optionBg (inline)"]
Loading
High-Level Assessment

The PR’s strategy—explicit light-mode Tailwind tokens with dark: overrides—is consistent with the existing theming approach and keeps changes localized to the affected components. The theme-derived inline background is the pragmatic solution given native limitations and avoids brittle CSS hacks.

Files changed (24) +670 / -650

Enhancement (17) +381 / -381
ClampField.svelteAdd light-mode colors to ClampField UI +13/-13

Add light-mode colors to ClampField UI

• Re-themes the clamp card, track, labels, previews, and number inputs for light mode using black-based backgrounds/borders with dark: overrides. Adjusts reset hover color to keep contrast in both themes.

configurator/src/components/inputs/ClampField.svelte

ColorInput.svelteLight-mode styling for ColorInput swatch + editor +5/-5

Light-mode styling for ColorInput swatch + editor

• Updates borders, input background/text colors, hover states, and overridden value coloring to render correctly in light mode while preserving dark mode via dark: variants. Tweaks reset hover color for light mode.

configurator/src/components/inputs/ColorInput.svelte

OklchColorDesk.svelteLight-mode theming for OKLCH color desk +13/-13

Light-mode theming for OKLCH color desk

• Adjusts card backgrounds/borders and all label/value/input text colors for light mode with dark: overrides. Updates reset button color to remain legible in light theme.

configurator/src/components/inputs/OklchColorDesk.svelte

PowerKnobRow.svelteLight-mode text styling for PowerKnobRow +4/-4

Light-mode text styling for PowerKnobRow

• Changes label, helper text, driving indicator, and reset hover colors to support light mode. Keeps component behavior unchanged.

configurator/src/components/inputs/PowerKnobRow.svelte

RangeWithNumber.svelteLight-mode styling for RangeWithNumber slider +3/-3

Light-mode styling for RangeWithNumber slider

• Updates the track and thumb border colors for light mode and re-themes the numeric input background/border/text colors with dark: overrides.

configurator/src/components/inputs/RangeWithNumber.svelte

SliderRow.svelteLight-mode styling for SliderRow + raw mode +7/-7

Light-mode styling for SliderRow + raw mode

• Re-themes labels, the raw toggle, reset hover states, raw input styling, default hint text, and help text for light mode with dark: variants.

configurator/src/components/inputs/SliderRow.svelte

TokenRow.svelteLight-mode styling for TokenRow list items +8/-8

Light-mode styling for TokenRow list items

• Updates row hover background, swatch borders, text colors, inline editor styling, and reset button colors to ensure readability in light mode.

configurator/src/components/inputs/TokenRow.svelte

BordersPanel.svelteLight-mode styling for BordersPanel controls and previews +25/-25

Light-mode styling for BordersPanel controls and previews

• Updates section dividers, preview cards, labels, and button states to use light-mode colors with dark: overrides. Ensures selected/unselected styles have adequate contrast in light mode.

configurator/src/components/panels/BordersPanel.svelte

ColorsPanel.svelteLight-mode styling for ColorsPanel previews and controls +83/-83

Light-mode styling for ColorsPanel previews and controls

• Applies light-mode background/border/text updates across the panel’s many preview and control sections (semantic previews, palettes, curves, gradients, etc.). Adjusts AA/indicator colors to remain legible in light mode while retaining dark-mode styling.

configurator/src/components/panels/ColorsPanel.svelte

EffectsPanel.svelteLight-mode styling for EffectsPanel sections +26/-26

Light-mode styling for EffectsPanel sections

• Re-themes preview containers, dividers, labels, inline code styling, and reset buttons to support light mode. Maintains existing token editing and preview logic.

configurator/src/components/panels/EffectsPanel.svelte

ExportPanel.svelteLight-mode styling for ExportPanel output and actions +14/-14

Light-mode styling for ExportPanel output and actions

• Updates toggle buttons, action buttons, status colors, and the CSS output <pre> to render correctly in light mode (including a light background). Keeps copy/download behavior unchanged.

configurator/src/components/panels/ExportPanel.svelte

HomePanel.svelteLight-mode styling for HomePanel navigation and saved themes +22/-22

Light-mode styling for HomePanel navigation and saved themes

• Updates hero header colors, domain/tool navigation rows, quick-save inputs/buttons, and saved theme cards for light mode with dark: overrides. Preserves navigation and apply/reset behaviors.

configurator/src/components/panels/HomePanel.svelte

MacrosPanel.svelteLight-mode styling for MacrosPanel docs and previews +41/-41

Light-mode styling for MacrosPanel docs and previews

• Updates explanatory text and inline code colors plus all preview containers/dividers for light mode. Keeps token wiring unchanged.

configurator/src/components/panels/MacrosPanel.svelte

MiscPanel.svelteLight-mode styling for MiscPanel previews and controls +73/-73

Light-mode styling for MiscPanel previews and controls

• Re-themes multiple sections (touch target, scroll behavior, z-index list, selection preview, focus ring style, etc.) to use light-mode colors with dark: overrides.

configurator/src/components/panels/MiscPanel.svelte

ShadowsPanel.svelteLight-mode styling for ShadowsPanel previews and glow +18/-18

Light-mode styling for ShadowsPanel previews and glow

• Re-themes elevation/glow previews to use a light surface in light mode with dark: overrides and updates labels/dividers/toggles accordingly.

configurator/src/components/panels/ShadowsPanel.svelte

SpacingPanel.svelteLight-mode styling for SpacingPanel scale preview +8/-8

Light-mode styling for SpacingPanel scale preview

• Updates space-scale preview container, step labels, section descriptions, and dividers to render correctly in light mode while preserving dark mode.

configurator/src/components/panels/SpacingPanel.svelte

ThemesPanel.svelteLight-mode styling for ThemesPanel save/apply UI +18/-18

Light-mode styling for ThemesPanel save/apply UI

• Re-themes the save form, empty state, theme cards, delete button styling, and token chips for light mode with dark: overrides. Does not change storage/apply behavior.

configurator/src/components/panels/ThemesPanel.svelte

Bug fix (7) +289 / -269
AllTokensTab.svelteLight-mode styling for AllTokensTab search and filters +11/-11

Light-mode styling for AllTokensTab search and filters

• Re-themes the search input, filter toggle states, separators, counters, and empty state for light mode. Adds missing dark placeholder styling on the search field.

configurator/src/components/panels/AllTokensTab.svelte

CheatsheetPanel.svelteLight-mode CheatsheetPanel UI + kind color fixes +31/-31

Light-mode CheatsheetPanel UI + kind color fixes

• Re-themes search, tabs, list rows, and copy affordances for light mode. Expands KIND_COLOR mappings to include light-mode colors with dark: variants (covering previously missing motion/form dark variants).

configurator/src/components/panels/CheatsheetPanel.svelte

GenericTokenPanel.svelteLight-mode styling + placeholder fix for GenericTokenPanel +4/-4

Light-mode styling + placeholder fix for GenericTokenPanel

• Re-themes modified-count badge, search input, and empty-state text for light mode. Adds missing dark placeholder styling on the search input.

configurator/src/components/panels/GenericTokenPanel.svelte

LayoutPanel.svelteTheme-derived <option> background + light-mode panel styling +62/-57

Theme-derived <option> background + light-mode panel styling

• Introduces a themeState-derived optionBg so native <option> backgrounds match light mode (dark: doesn’t apply reliably). Re-themes labels, separators, and preview cards for light mode.

configurator/src/components/panels/LayoutPanel.svelte

MotionPanel.svelteTheme-derived <option> background + light-mode motion UI +43/-38

Theme-derived <option> background + light-mode motion UI

• Adds themeState-derived optionBg for native <option> rendering in easing/duration selects. Updates the rest of the panel styling (toggles, previews, dividers, editor inputs) for light mode.

configurator/src/components/panels/MotionPanel.svelte

TypographyPanel.svelteTheme-derived <option> background + light-mode typography styling +101/-96

Theme-derived <option> background + light-mode typography styling

• Adds themeState-derived optionBg for font/size/leading/tracking <option> elements to avoid dark-only backgrounds in light mode. Re-themes selectors, preview containers, and reset buttons for light-mode contrast.

configurator/src/components/panels/TypographyPanel.svelte

WcagPanel.svelteTheme-derived <option> background + light-mode WCAG UI +37/-32

Theme-derived <option> background + light-mode WCAG UI

• Adds themeState-derived optionBg for the foreground/background selectors and updates pass/fail badge classes to include light-mode text colors. Re-themes preview/matrix UI containers for light mode with dark: overrides.

configurator/src/components/panels/WcagPanel.svelte

@qodo-code-review

qodo-code-review Bot commented Jul 3, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📜 Skill insights (0)

Context used
✅ Compliance rules (platform): 11 rules

Grey Divider


Remediation recommended

1. Option background theme mismatch ✓ Resolved 🐞 Bug ≡ Correctness
Description
ClampField’s modular-scale ratio preset <select> now uses dark text in light mode (text-slate-800)
but its <option> elements still hardcode a dark background (#16161e), causing
low-contrast/unreadable dropdown items in light theme. This is inconsistent with other panels that
now derive <option> background from themeState.
Code

configurator/src/components/inputs/ClampField.svelte[R160-163]

+              class="flex-1 min-w-0 bg-black/5 dark:bg-white/5 border border-black/10 dark:border-white/10 rounded text-[10px] text-slate-800 dark:text-slate-200 px-1.5 py-1 focus:outline-none focus:border-indigo-500 cursor-pointer"
            >
              {#if row.active === undefined}
                <option value="" style="background:#16161e;">Custom</option>
Relevance

⭐⭐⭐ High

Team fixes light-mode theme/contrast inconsistencies (PR #506); similar UI polish/UX fixes commonly
accepted (PR #460).

PR-#506
PR-#460

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
ClampField’s ratio preset selector is styled for light mode text (text-slate-800) but its options
still force a dark background, which makes the dropdown hard to read in light theme. MotionPanel
shows the intended approach: derive an optionBg from themeState and apply it inline to each
<option> so it matches the active chrome theme.

configurator/src/components/inputs/ClampField.svelte[151-167]
configurator/src/components/panels/MotionPanel.svelte[5-10]
configurator/src/components/panels/MotionPanel.svelte[141-159]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`ClampField.svelte` still hardcodes `<option style="background:#16161e;">…</option>` for the modular-scale ratio preset selector. After the light-mode rollout, the `<select>` uses `text-slate-800` in light theme, so these dark option backgrounds can render the dropdown text with insufficient contrast.

### Issue Context
Other panels (e.g. `MotionPanel.svelte`) introduced a `themeState`-derived `optionBg` specifically because `<option>` doesn’t reliably support Tailwind `dark:` variants, and apply it inline to every option.

### Fix Focus Areas
- configurator/src/components/inputs/ClampField.svelte[1-20]
- configurator/src/components/inputs/ClampField.svelte[151-167]

### Suggested fix
- Import `themeState` and define `optionBg = $derived(themeState.value === 'dark' ? '#16161e' : '#ffffff');`.
- Replace the hardcoded `style="background:#16161e;"` on the ratio preset `<option>` elements with `style={`background:${optionBg};`}` (matching the pattern used elsewhere).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Qodo Logo

Comment thread configurator/src/components/inputs/ClampField.svelte Outdated
… theme

Same bug already fixed in LayoutPanel, MotionPanel, TypographyPanel, and
WcagPanel: the modular-scale ratio preset <select> got light-mode text
but its <option> elements kept a hardcoded dark background (#16161e),
unreadable in light mode since <option> doesn't support Tailwind's
dark: variant. Applies the same themeState-derived optionBg pattern.

Copy link
Copy Markdown
Contributor Author

Fixed in 7114f1f — same bug as before, this time in ClampField.svelte's modular-scale ratio preset <select>. Since I'd now missed this exact pattern twice by only grepping components/panels/, I did an exhaustive sweep of the whole configurator/src tree for any remaining style="background:#... on an <option>: zero hits. Re-verified svelte-check (0 errors) and vitest run (113/113).


Generated by Claude Code

@jackgranatowski
jackgranatowski merged commit a3f0bb9 into main Jul 3, 2026
13 checks passed
jackgranatowski pushed a commit that referenced this pull request Jul 3, 2026
#510 (light-mode dark: classes) and this PR (rebuild .sf-equal, drop
--sf-equal-min-col-2/3/4/6) both touched the Equal grid panel section.
Kept this PR's replacement (the tokens the old per-column sliders wrote
to no longer exist in core CSS) and added the missing dark: pairing to
the new helper text to match the rest of the panel's light-mode styling.
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.

2 participants