Theme Layers
betaA picture of one theme under every part: three sheets in the air, with a grid, lines of type, and color swatches.
Preview
brand tone
no dots, narrow container
Install
1. Add the registry to
components.json, once per app. Without it, the shadcn CLI looks up@txbrendanin a public list that txbrendan/ui does not control.npx shadcn@latest registry add "@txbrendan=https://txbrendan.dev/r/{name}.json"2. Add the theme, once per app. It replaces your color tokens with ones checked for contrast.
npx shadcn@latest add @txbrendan/theme3. Add the illustration. It also adds every component it uses. Its own files go in your
componentsfolder, and they are yours to edit.npx shadcn@latest add @txbrendan/theme-layers
Use it for
- A feature section about one theme for everything, like tokens for color, type, and spacing.
- Put it in a Feature Grid item's `illustration`, or a Bento Card's `preview`.
- Set `tone` to color the first swatch on the top sheet, like brand for your main color.
- Write `label` as one sentence that says what the picture shows. Screen readers hear it in place of the drawing.
Avoid it for
- A real list of your theme's colors. Show the tokens themselves.
- A small icon beside text. Use an icon from lucide-react.
Props
- label
What the picture says, read out in its place.
string · default a sentence about the sheets
- tone
The color of the first swatch on the top sheet.
"neutral" | "brand" | "danger" | "success" | "warning" · default "neutral"
- pattern
A field of dots behind the sheets.
boolean · default true
- className
Extra classes on the root.
string
| Prop | Type | Default | What it does |
|---|---|---|---|
| label | string | a sentence about the sheets | What the picture says, read out in its place. |
| tone | "neutral" | "brand" | "danger" | "success" | "warning" | "neutral" | The color of the first swatch on the top sheet. |
| pattern | boolean | true | A field of dots behind the sheets. |
| className | string | - | Extra classes on the root. |
Accessibility
- The root is one image, named by `label`. The drawing is hidden from screen readers.
- Nothing inside takes focus.
- On hover the top two sheets rise by the motion distance, so they spread apart. Reduced motion sets that to 0, so they stay still.
Examples
The default sheets
<ThemeLayers />In your brand color
<ThemeLayers tone="brand" label="One theme sets the color, type, and spacing of every part." />