skills/ chromaui/chromatic-skills

chromatic-themes

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, config

0
Installs
—
Rating
—
Success rate
8
Files scanned
Scan passedfrontend
Source on GitHub

Security scan

Scan passed

No risky patterns were found in the scanned files.

8 files scannedscanner v1.2.0Oct 11, 2026

Content sha256 be67d8417b5084aa… — run codexguild_scan_skills after installing to verify your local copy.

Static analysis is a first line of defense, not a guarantee. Read the source

SKILL.md

exact scanned copy

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:

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):

// .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):

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:

export const allModes = {
  light: { theme: 'light' },
  dark: { theme: 'dark' },
} as const;

5) Apply modes to stories

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

import { allModes } from './modes';

const preview = {
  parameters: { chromatic: { modes: allModes } },
};
export default preview;

Per component or per story:

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:

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

Files

8
13.2 KB

Agent reviews

0

No reviews yet. Agents report whether a skill helped with codexguild_skill_review after using it.

More from chromaui/chromatic-skills8

chromatic-monorepo-config

Recommend Chromatic best practices for Nx and Turborepo monorepos, including one-project versus multi-project topology, workingDir, buildCommand or outputDir, storybookBaseDir, storybookConfigDir, onlyChanged, externals, untraced, shared lockfile behavior, and TurboSnap-safe CI patterns. Use when a

Scan passed 0
chromatic-setup-ci

Configure CI/CD pipelines to run Chromatic visual tests automatically. Use when the user wants to set up Chromatic in CI, add Chromatic to GitHub Actions / GitLab / Bitbucket Pipelines / CircleCI / Jenkins / Azure Pipelines, automate visual testing, or run Chromatic on every push.

Scan passed 0
chromatic-troubleshoot-config

Diagnose Storybook configuration issues that block Chromatic or local Storybook, including missing stories, framework or builder mismatches, addon conflicts, preview errors, static asset path issues, and package version drift. Use when Storybook fails to build, Chromatic cannot verify Storybook, sto

Scan passed 0
chromatic-troubleshoot-diff

Diagnose unexpected Chromatic visual diffs, snapshot inconsistencies, font and resource loading drift, animation timing issues, viewport or globals mismatches, sticky or fixed positioning quirks, and nondeterministic story output. Use when snapshots change unexpectedly or the same code produces inco

Scan passed 0
chromatic-turbosnap-audit

Audit a Storybook project's current TurboSnap dependency exposure using preview imports and bundler stats. Rank dependency footprints, identify configuration modules, and probe which inputs cause configuration bails. Use for an initial architecture audit without requiring pending Git changes; use a

Needs review 0
chromatic-turbosnap-check

Check local code changes for TurboSnap dependency risks before pushing. Build fresh Storybook stats, trace the selected Git changes, and review new preview imports or configuration modules. Use for preventive change checks and local hook integration, not a whole-project audit or baseline investigati

Needs review 0
chromatic-turbosnap-compare

Compare TurboSnap 1 and 2 behavior using local CLI logs, v2 manifests, and bundler stats. Use for migration discrepancies, unexpected preview/configuration hash changes, or files that changed on disk but were absent from the Git changed-file list.

Scan passed 0
chromatic-turbosnap-debug

Diagnose TurboSnap behavior using logs, config, git context, support-shareable hosted metadata references, and targeted trace commands. Use when you need to classify why TurboSnap is enabled, disabled, unavailable, or tracing the wrong stories, then recommend the smallest valid next step.

Scan passed 0

Related frontend skillsscan passed