Wallflower UI

Components

Atoms as plain CSS classes (wf-*) built only from tokens. Every variant below has copy buttons for HTML, React and Astro. They restyle with every preset; try switching in the header.

React / Next.js imports
import { Button, buttonClass } from "wallflower-ui/react/button";
import { Badge } from "wallflower-ui/react/badge";
// …or copy them in: npx shadcn@latest add <registry>/wf-button.json
Astro imports
import Button from "wallflower-ui/astro/Button.astro";
import Badge from "wallflower-ui/astro/Badge.astro";
// No Astro wrapper? Copy the HTML — it's just wf-* classes.

Button

Six variants and four sizes. Style a link as a button with the classes, buttonClass() in React, or href on the Astro Button.

Primary
Secondary
Outline
Ghost
Link
Delete
Small
Large + icon
Icon only
Disabled
Loading
Link as button

Badge

Short status labels. The brand badge tints with the preset's brand color.

Primary
Primary
Secondary
Secondary
Outline
Outline
Brand
Brand
Success
Success
Warning
Warning
Info
Info
Destructive
Destructive

Chip

A toggleable pill for filters and segmented choices. Selected state comes from aria-pressed.

Selected
Default

Card

Header, content and footer slots. Add the interactive modifier for clickable cards.

Create project

Deploy your new project in one click.

Card
New

Interactive card

Lifts on hover. Use it for links and selectable tiles.

Interactive card

Inputs

Input, textarea and native select. Fields use 16px text on phones so iOS doesn't zoom, and 14px from md up.

We'll never share it.

Field

Only letters, numbers and dashes.

Invalid
Select
File
Textarea

Checkbox, radio, switch

Native inputs restyled, so forms, keyboard and screen readers work with no JavaScript.

Checkbox
Billing
Radio group
Switch

Alert

Inline messages. Tone colors the border, tint and icon; text stays at full contrast.

Heads up

You can switch presets from the header.

Default

Saved

Your preset was exported.

Success

Low contrast

One token pair is under 4.5:1.

Warning
Destructive

Avatar

Image or initials fallback. Pill-shaped, or square when the preset radius is 0.

Small
Medium
Large
Group

Feedback

Skeleton, spinner and progress for loading states.

Skeleton
Spinner
Progress

Kbd, code, link, separator

⌘K
Kbd
var(--brand)
Inline code
Link
DocsPresets
Separator

Layout primitives

Container, stack, cluster and an intrinsic grid that's responsive without breakpoints.

1
2
3
4
5
6
Auto grid
<div class="wf-container">                        <!-- max 80rem, 16px→32px gutters -->
<div class="wf-stack" style="--wf-gap: 1.5rem">   <!-- vertical rhythm -->
<div class="wf-cluster">                          <!-- wrapping row -->
<div class="wf-grid" style="--wf-grid-min: 16rem"><!-- auto-fill columns -->

Table

Data tables in a bordered card that scrolls sideways on small screens. Mark number columns with wf-num.

InvoiceCustomerStatusAmount
INV-001Ada LovelacePaid$250.00
INV-002Grace HopperPending$1,120.00
INV-003Alan TuringDraft$89.50
Table

Tabs

A segmented tab list. Styling comes from aria-selected; show the matching panel in your own code.

Tabs

Accordion

Native <details> disclosures: keyboard and screen-reader friendly with no JavaScript.

Is it free?
Yes. Wallflower is free and open source.
Does it work with shadcn/ui?
Yes. Presets use shadcn's variable names, so its components follow them.
Can I use my own colors?
Use the Customizer to build a theme from any brand color.
Accordion

Stat

KPI tiles for dashboards. Put one inside a card.

Revenue$45,231+20.1% this month
Stat (up)
Churn2.4%−0.3% this month
Stat (down)

Dialog

A native modal <dialog>: focus trapping and Esc to close come from the browser. Open it with dialog.showModal(), or the open prop in React.

Delete project?

This permanently deletes the project and its data. This can't be undone.

Dialog

Text styles

See Typography for the full scale.

Overline

Overline

A gradient heading

Gradient heading

Lead text sits under a heading.

Lead