Accessible by default.
Yours to restyle.
71 components that arrive with keyboard navigation, focus management and ARIA already working — then hand you a class, a per-slot ui, or unstyled when the defaults are not what you want. No fighting the library over a border radius.
$ pnpm add iryx-ui
// main.tsapp.use(IryxUi)
/* main.css */@import "iryx-ui/theme.css";
The behaviour is already done.
Keyboard, focus and ARIA, from Reka UI
Press ⇥ into these, then use the arrow keys, type to jump, and Esc to close — focus lands back where it started.
Three ways out.
class · ui · unstyled
Money and dates that don't drift.
Decimals stay exact, a date stays the day you meant
One set of tokens, both appearances.
CSS variables, and a font token you aim at your own family
--iryx-primary: oklch(0.59 0.2 277);
Menus and lists are data
An items array in, a menu out. An entry carrying its own items becomes a group.
Validation you already have
Any Standard Schema validator — Zod, Valibot, ArkType — or a plain function you wrote yourself.
IForm →Sorting and selection, handled
Sorting, selection and expansion, client- or server-driven. Fetching, caching and auth stay in your data layer.
ITable →Charts drawn in plain SVG
Sparklines, bars and lines on the same tokens as everything else, rendered by the library itself.
ILineChart →Every component
Buttons, forms, tables, dialogs, drawers, date pickers, charts, an app shell — each with its own page, its props in full, and demos you can operate.