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 49 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 51 KB of JavaScript gzipped, with zero runtime dependencies: nothing lands in your bundle but the components you import.
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 51 KB of JavaScript gzipped and fully tree-shakeable. Type in the fields, flip the switches, pick a date, open the command palette.
Form
Button, LinkButton & IconButton
Input, Textarea & Select
Field, PasswordInput & SearchInput
Password strength: Very weak
Field owns the label, the hint and the error, and wires them to whatever control it wraps.
Debounced by 300 ms, so the search fires once you pause.
Combobox, DatePicker & NumberInput
Type it or pick it from the calendar.
Use the arrow keys, or Page Up for larger steps.
TagInput, TimePicker & ColorPicker
Type 9:30 pm or 21:30, or pick from the list.
Arrow keys move across the swatch grid.
OtpInput & FileUpload
Paste the whole code and it spreads across the fields.
Drag and drop, or browse
Images or PDF, up to 2 MB each.
Checkbox, Radio & Switch
ToggleGroup
Slider & Rating
Average across projects
Feedback
Alert & Toast
Progress, Spinner & Skeleton
Data display
Avatar & Badge
Table
| Component | Category | Status |
|---|---|---|
| Button | Form | Stable |
| Toast | Feedback | Stable |
| Drawer | Layout | Stable |
| Command | Navigation | New in 0.7 |
Timeline
Carousel
Tooltip & Accordion
Navigation
Tabs
Breadcrumbs, Pagination, Dropdown & Popover
The Popover flips to the other side when it will not fit, moves focus inside, and closes on Escape or an outside click.
Command palette
Layout
Hero
Open source
Centered, split, background, minimal and gradient, each with its own alignment defaults and a fluid size scale.
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, ConfirmModal & Drawer
Compound Card with header, body and footer sections.
// Compound components, typed props
import { Field, PasswordInput } from "sander-ui";
import "sander-ui/styles.css";
<Card>
<CardHeader>
<Heading as="h3">Card title</Heading>
</CardHeader>
<CardBody>
<Field label="Password" hint="At least 12 characters.">
<PasswordInput revealable strengthMeter />
</Field>
</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.