chromaui/chromatic-skills/chromatic-themes

Claude Code and agent skill by chromaui/chromatic-skills

Trust tier 3
  • community
  • ext:[{"type":"plugin","description":"Custom plugin integration"}]
Source check pending

Checking that the SKILL.md file is still in the repository.

Configure Chromatic to capture visual test snapshots across multiple themes (light/dark mode, design tokens, branded variants) using the Modes API and @storybook/addon-themes. Use when the user wants to test components with different themes in Chromatic, set up light/dark mode visual testing, configure @storybook/addon-themes with Chromatic, or apply theme modes at the project, component, or story level.

Install

npx vskill@latest install chromaui/chromatic-skills/chromatic-themes

Semi-extensibleMentions customization, but needs skill-specific knowledge. Read the extensible skills standard

SKILL.md

Chromatic Themes

Configure multi-theme visual testing using Chromatic's Modes API and @storybook/addon-themes.

This skill covers:

  • Detecting the user's theme library and configuring the right decorator
  • Defining theme modes in .storybook/modes.ts
  • Applying modes at project, component, and story levels

Quick start

  1. Scan the project for existing theme config: look for @storybook/addon-themes imports, a modes.ts file, or chromatic.modes.
  2. Ask the user which theme library they use (see step 3 below).
  3. Fetch the relevant docs from reference/docs-map.md.
  4. Generate configuration files and output the checklist from reference/output-contract.md.

Required workflow

1) Detect existing configuration

Check .storybook/preview.ts, story files, and any modes.ts:

  • withThemeByClassName or withThemeByDataAttribute found → addon already configured, help extend or wire up modes
  • chromatic.modes with theme keys found → already on Modes API, help extend or fix
  • Neither found → fresh setup, ask the user which theme library they use
2) Fetch current docs

Use the URLs in reference/docs-map.md and fetch with WebFetch. Use fetched content as the authoritative source — do not rely on remembered examples.

3) Install @storybook/addon-themes (fresh setup only)

If @storybook/addon-themes is not already installed, detect the package manager by checking for lock files (bun.lockb/bun.lock → bun, pnpm-lock.yaml → pnpm, yarn.lock → yarn, package-lock.json → npm) and use the matching install command:

Package managerCommand
npmnpm install --save-dev @storybook/addon-themes
yarnyarn add --dev @storybook/addon-themes
pnpmpnpm add --save-dev @storybook/addon-themes
bunbun add --dev @storybook/addon-themes

Then register it in .storybook/main.ts:

ts
export default {
addons: ['@storybook/addon-themes'],
};
4) Identify the theme library and configure the decorator

Ask: _"Which theme library or approach does your project use? (e.g. Tailwind, Bootstrap, Material UI, styled-components, Emotion, or plain CSS classes)"_

Use the answer to pick the right path:

LibraryDecoratorDocs to fetch
Tailwind, plain CSS classeswithThemeByClassNamethemes.txt
BootstrapwithThemeByDataAttribute (data-bs-theme)getting-started/bootstrap.md
Material UIcustom decoratorgetting-started/material-ui.md
styled-componentscustom decoratorgetting-started/styled-components.md
Emotioncustom decoratorgetting-started/emotion.md
Other / unsurewithThemeByClassNamethemes.txt

Class-based (withThemeByClassName):

ts
// .storybook/preview.ts
import { withThemeByClassName } from '@storybook/addon-themes';
export const decorators = [
withThemeByClassName({
themes: { light: 'light-theme', dark: 'dark-theme' },
defaultTheme: 'light',
// parentSelector: 'html', // default
}),
];

Data attribute (withThemeByDataAttribute):

ts
import { withThemeByDataAttribute } from '@storybook/addon-themes';
export const decorators = [
withThemeByDataAttribute({
themes: { light: 'light', dark: 'dark' },
defaultTheme: 'light',
attributeName: 'data-bs-theme', // default: 'data-theme'
}),
];

Custom decorator — fetch the library-specific guide from reference/docs-map.md and follow it. Use pluckThemeFromContext and initializeThemeState from @storybook/addon-themes to bridge Storybook globals with the library's theme API.

4) Define theme modes

Create or update .storybook/modes.ts. The theme key must exactly match a key in the decorator's themes object:

ts
export const allModes = {
light: { theme: 'light' },
dark: { theme: 'dark' },
} as const;
5) Apply modes to stories

Project-wide (.storybook/preview.ts):

ts
import { allModes } from './modes';
const preview = {
parameters: { chromatic: { modes: allModes } },
};
export default preview;

Per component or per story:

ts
import { allModes } from '../.storybook/modes';
export default {
title: 'Button',
parameters: {
chromatic: { modes: { light: allModes.light, dark: allModes.dark } },
},
};

Disable inherited modes on a specific story:

ts
parameters: { chromatic: { modes: { dark: { disable: true } } } }
6) Output checklist

Always render the checklist from reference/output-contract.md, then show the complete content of every file to create or modify.

Key constraints

  • The theme value in a mode must exactly match a key in the decorator's themes object — a mismatch silently falls back to the default theme
  • Mode names are tied to baselines — renaming a mode creates a new baseline and retires the old one
  • Modes stack across project → component → story levels; lower levels add to higher ones, they do not replace them
  • @storybook/addon-themes requires Storybook 7.x or later
  • Only one decorator approach per project — do not mix withThemeByClassName and withThemeByDataAttribute

Boundaries

  • Do not commit or push files — generate and show configuration only
  • Do not suggest viewport or locale modes unless the user asks
  • Do not install or suggest theme libraries — only wire up what already exists

References

  • reference/docs-map.md
  • reference/output-contract.md
  • ../chromatic-setup-ci/reference/package-manager.md — lock file detection and install commands per package manager

Security

  • Security scanPassed, 90 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

7-day trend score
0

Not refreshed yet.

Extension points

  • pluginCustom plugin integration

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/chromaui/chromatic-skills/chromatic-themes/badge)](https://verified-skill.com/skills/chromaui/chromatic-skills/chromatic-themes)

Something wrong with this skill or its page? Tell us.