The keyboard already works
⌘K opens it, arrows move through it, Enter picks and Escape backs out. Nobody has to file that ticket.
- Open component
- Toggle theme
- Copy import
- Search docs
Table, Toast, Dialog, Calendar and twenty more. Install once and keep the theme you already have. Variants are plain props, the awkward states are drawn, and everything is checked in light and dark before it ships.
Those four are the whole list. There is no styling runtime, no provider to wrap the app in, and nothing new landing in package.json.
Focus order, keyboard paths, the empty state nobody designs until launch week. That part is finished here.
⌘K opens it, arrows move through it, Enter picks and Escape backs out. Nobody has to file that ticket.
Lift, hover target and drop each get their own visual state, so a card in motion never reads as a rendering glitch.
Implement auth flow
Optimize queries
Ship empty states
Checkbox, Switch and the slider share one token set, so a filter panel looks designed rather than assembled.
Filters
Timers pause on hover, and again when the tab goes to the background. A message can't expire while nobody is watching it.
Export complete
18 contacts written to contacts.csv
Validation lands on the field it belongs to and stays tied to that input through aria-describedby.
Legal name
As registered
Country
Sets the tax rate
Billing email
Enter a valid email address
VAT number
Optional
The names it exports, the tokens it reads, the parts you compose. Nothing sits in between: no build step, no wrapper, no styling runtime.
Every component, and every part of every component, is a named export off the root. There is no deep path to remember.
Colour, radius and shadow are read at paint time. Swap the palette and React never hears about it.
Every piece is exported on its own, so you assemble the table your screen needs instead of talking one into existence through props.
Loading, empty and error ship as part of the component. They are usually the three you bolt on the week after the demo.
One version, one changelog, semver. Twenty-four files pasted in separately drift apart at their own pace; this doesn't.
Install the package, compose the parts, point them at your tokens. There is no fourth step waiting in a config file.
Types come bundled, so the editor lists the variants while you type. Nothing to add per component, nothing to wire up afterwards.
You can read what a component does straight off the JSX. No class strings to merge, and no config file quietly deciding how it looks.
Colour, radius and shadow all resolve from the same variable set. Set the attribute on the root and every component follows, in both light and dark.
<html data-theme="plum">
Every row below is a ticket someone files eventually. The same seven, per component, on every project you have ever shipped.
| By hand · already here | Yours | Already here |
|---|---|---|
| Focus trapped in a dialog, and returned where it came from | Not provided | Dialog |
| aria-sort announced on a sortable column head | Not provided | Table |
| Toast timers that pause on hover and on a hidden tab | Not provided | Toast |
| Indeterminate checkbox that drives select-all correctly | Not provided | Checkbox |
| Empty, loading and error states for a data view | Not provided | Table |
| Contrast checked in light and dark, not just one | Not provided | Tokens |
| Reduced-motion path for every animation | Not provided | All of them |
One component covers every surface it has to. When the design shifts, you change a prop and move on.
Learn Button once and you know the other twenty-three.
The JSX says what it does so the diff reads on its own.
Answered from what the code actually does. Where the honest answer is a limitation, it is written down as one.
A package. Run npm install kipui, add two lines to your global stylesheet, then import components by name. Nothing else happens per component after that.
The fastest answer is usually the source. Every component page puts the variants side by side with the props that produced them.
this FAQ is the Accordion component
Every component has a page of its own, with the variants laid out side by side. One install, your own tokens, and nothing else to set up.
© 2026 Kipui — MIT licensed
all systems nominal