Accessibility first
Built on native HTML elements like <dialog> and <details>, with ARIA support, keyboard navigation and focus management in every component.
// Open source
My own React component library, designed and built entirely by me from scratch: the visual design, the API, the accessibility, the design tokens and every one of the 28 components. I use it to ship client projects faster, and it shows exactly how I think about component design.
$ npm install sander-ui
Built on native HTML elements like <dialog> and <details>, with ARIA support, keyboard navigation and focus management in every component.
CSS Modules with CSS custom properties. Scoped styles, no CSS-in-JS overhead, and all animations in pure CSS.
Colors, typography, spacing, radii, shadows and transitions all live in CSS variables. Theming is a matter of overriding them.
ES modules with subpath imports like sander-ui/button, so your bundle only contains what you use. The entire library is about 19 KB of JavaScript gzipped, on top of just two runtime dependencies.
Everything below is the published sander-ui package, rendered live on this page. I designed and built every one of these components myself: the API, the visual design, the accessibility and the motion. The whole library is about 19 KB of JavaScript gzipped and fully tree-shakeable. Type in the fields, flip the switches, open the modal.
Form
Button & IconButton
Input, Textarea & Select
Checkbox, Radio & Switch
Feedback
Alert & Toast
Progress, Spinner & Skeleton
Data display
Avatar & Badge
Table
| Component | Category | Status |
|---|---|---|
| Button | Form | Stable |
| Toast | Feedback | Stable |
| Drawer | Layout | Stable |
Tooltip & Accordion
Navigation
Tabs
Breadcrumbs, Pagination & Dropdown
Layout
Heading & Text
Text and Heading share the same token-driven sizing, weight and color scale.
Small strong text sits alongside emphasised copy and info-colored spans.
Card, Modal & Drawer
Compound Card with header, body and footer sections.
// Compound components, typed props
import { Button, Input } from "sander-ui";
import "sander-ui/styles.css";
<Card>
<CardHeader>
<Heading as="h3">Card title</Heading>
</CardHeader>
<CardBody>
<Input label="Email" placeholder="you@example.com" />
</CardBody>
<CardFooter>
<Button variant="primary">Save</Button>
</CardFooter>
</Card> Want components like these in your product, with your brand and your tokens? That's exactly the work I do for clients.