Components
Button
Accessibility-hardened button with icon slots, sizes, and a loading state.
A composite button ported from Atlas — six variants, sm/md/xl sizes, iconBefore /
iconAfter slots (any icon component), and a loading state — wired to the dry token stack.
Corners use rounded-control: Washi is an 8px rect, ICS is a pill. Switch looks in the
sidebar.
Sizes, icons, and states
Accessibility
- A 2px
:focus-visiblering (never a bare:focus), offset so it clears the edge. outline-hiddenkeeps a real focus outline under Windows high-contrast (forced-colors).motion-reducedrops the transition; the loading spinner still conveys state.- 44px minimum target on coarse pointers; defaults to
type="button".
Usage
import { Plus } from '@phosphor-icons/react';
import { Button } from '@/components/ui/button';
<Button>Click me</Button>
<Button size="xl" variant="secondary" iconBefore={Plus}>New</Button>
<Button loading>Saving</Button>
<Button asChild>
<a href="/docs">As a link</a>
</Button>Install
shadcn add @gesso/button