rei-kit — 106 accessible Vue 3 and Tailwind 4 components
One kit, every look. A Vue 3 component library for Tailwind CSS 4, themed by role rather than by colour on three independent axes: ten WCAG-checked palettes, four materials (quiet, glass, brutal, soft) and light or dark — each switched with one attribute, without touching a component.
Typed, tested and SSR-safe, with no runtime dependencies. MIT licensed.
pnpm add rei-kit
All 106 components
- ActivityGrid — A year of days, as a grid you can read at a glance.
- AnnounceHost — The two live regions announce() speaks through. Render one per app, anywhere — nothing here is ever visible.
- AuthForm — The sign-in and sign-up forms, which are one component.
- AuthShell — The frame every sign-in screen sits in.
- AvatarStack — The people on a thing, overlapped: who is in a conversation, who shares a list.
- BarChart — A row of values, compared.
- BaseAccordion — A list that opens one section at a time.
- BaseAlert — A message the reader has to take in before carrying on.
- BaseAvatar — The person, in the corner where the account lives.
- BaseBadge — A small standing label: a level, a state, a count.
- BaseBreadcrumb — Where this page sits, and the way back up.
- BaseButton — The kit's button, and — when asked — its link.
- BaseCalendar — A month of days, for choosing one or a stretch of them.
- BaseCard — A surface with a border, and optionally a head and a foot.
- BaseCheckbox — A single checkbox, with its label beside it.
- BaseCheckboxGroup — Several answers from a set that is all on screen.
- BaseChip — A short label with, when it is one of a set someone assembled, a way to take it off: a filter, a recipient, a tag.
- BaseCombobox — A field you type into to narrow a list, then choose from it.
- BaseContextMenu — The menu a right-click opens, on whatever it was opened over.
- BaseDatePicker — A date, or a stretch of dates, chosen from a calendar in a popover.
- BaseDisclosure — One section that opens and closes.
- BaseDrawer — A panel that comes in from the edge of a wide screen.
- BaseHoverCard — A card that appears beside something when you rest on it.
- BaseInput — A text field with its label, hint and error already wired to it.
- BaseKbd — A keyboard key, or a chord of them: ⌘ K, Ctrl Shift P.
- BaseLink — A link in a sentence — the one thing a button is not.
- BaseListbox — A list you choose from, open on the page.
- BaseMarquee — A row that scrolls sideways without end: logos, testimonials, a ticker.
- BaseMenu — A list of actions behind one control.
- BaseModal — A dialog that arrives from nowhere.
- BasePagination — Moving between pages of a list.
- BasePopconfirm — "Are you sure?", asked beside the button that asked it.
- BasePopover — A panel of anything — a form, a picker, a few settings — anchored to the control that opened it.
- BaseRadioGroup — A set of radios, and the reason there is no BaseRadio.
- BaseRating — A score out of five, given or shown.
- BaseReveal — Content that fades or rises into place as it scrolls into view.
- BaseSelect — A native <select>, wearing the kit's field.
- BaseSeparator — A line between things — with, when it helps, a word on it.
- BaseSheet — Pins the sheet to the area the keyboard has left visible.
- BaseSkeleton — One grey box standing in for content that has not arrived.
- BaseSlider — A value picked from a range, where roughly right is the point.
- BaseSpinner — Work in progress, with no idea how much is left.
- BaseSplitter — Two panes and a handle between them — a list beside a preview, an editor beside its output.
- BaseStepper — Where someone is in a process of several steps — a sign-up, a checkout, a form split into pages.
- BaseSwitch — A setting that takes effect the moment it is touched.
- BaseTable — Rows of data, with the parts a hand-written <table> leaves out.
- BaseTabs — Sections of one page, one visible at a time.
- BaseTextarea — A multi-line field.
- BaseTimeline — What happened, in order, on a rail.
- BaseToolbar — A row of controls that belong together: a formatting bar, a row of view switches, the actions over a table.
- BaseTooltip — A short label that appears beside a control.
- BaseTree — A tree of things that contain things: folders, a category list, a table of contents.
- CircularProgress — Progress as a ring — for a small space, a card's corner, a goal.
- CodeBlock — A sample of code, as written.
- ColorPicker — A colour, as a hex value.
- CommandMenu — Everything the app can do, behind one shortcut.
- CopyButton — Copies a piece of text, and says that it did.
- CountUp — A number that counts up to its value once it scrolls into view.
- DataTable — BaseTable with the three things a table of real data grows: a sort, a selection, and something to show while it is loading.
- DescriptionList — Pairs of "what it is" and "what it says": the summary at the top of a detail page, the facts under an invoice.
- DonutChart — Parts of a whole.
- EmptyState — A list with nothing in it yet, said kindly.
- ErrorBoundary — Keeps one broken screen from taking the whole app down.
- ErrorSummary — What a rejected form says at the top of itself.
- FabButton — The one action the app is built around, reachable from every screen.
- FileDrop — Files, dropped on or chosen from a real file input.
- FormField — A label, a hint, an error, and the wiring between them.
- GoogleButton — Sign in with Google, in Google's own clothes.
- InstallPrompt — The card that offers to install the app, and remembers being turned down.
- InstallSettings — The way back to installing after the card has been dismissed.
- LocaleLinks — A flat language switcher for screens with no Settings behind them.
- LocaleSheet — Choosing the interface language, from a settings row.
- MegaMenu — A wide site's navigation, where a section has more in it than a row can hold: columns of links under a heading, opened from the bar.
- NavLinks — The primary navigation of a wide site.
- NumberInput — A number, typed or stepped — a quantity, a price, a count of minutes.
- NumberTicker — A number whose digits roll to their new value, like an odometer or a note counter.
- OfflineBanner — A floating note that the connection has gone.
- PageContainer — One measure, centred, with the page's gutters.
- PageHeader — The bar at the top of a screen: a title with room either side of it.
- PasswordInput — A password field you can look at.
- PinInput — A short code typed one character per box — a sign-in code, a PIN.
- PriceCard — One plan in a pricing table.
- ProgressBar — How far through something somebody is.
- ResponsiveDialog — One question, asked the way the screen it lands on expects: a modal on a wide screen, a sheet from the bottom edge on a phone.
- ScrollArea — A box that scrolls, with the two things a hand-written one leaves out.
- SectionHeading — A pill heading for a group of things.
- SegmentedControl — A row of mutually exclusive choices.
- SettingsGroup — A titled run of settings rows.
- SettingsRow — One line in a settings card.
- SkeletonList — A length starts with a digit, a dot, or opens a CSS function.
- SkipLink — "Skip to content" — the first thing in the tab order, hidden until it has focus.
- SliderField — One number, reached either way: dragged along a range or typed exactly.
- StatCard — One number, with what it means and which way it is going.
- TabBar — The floating bottom bar.
- TabShell — The phone frame the whole app sits inside.
- TagsInput — A field that holds several short values: recipients, labels, skills.
- TextRotate — One word in a sentence that changes on its own: "Build it *glass*", then *brutal*, then *soft*.
- TimePicker — A time of day, chosen from two columns.
- ToastHost — Where the toasts land. One of these, at the app root.
- ToggleGroup — A row of buttons that stay pressed — one at a time, or several at once.
- ToneDot — A small coloured dot, optionally labelled.
- TourShell — The frame an onboarding guide runs inside.
- TransferList — Two lists and the way between them: what is available, what is chosen.
- TypeWriter — Text that types itself out, and — given several lines — deletes each one and types the next.
- UpdatePrompt — The card that says a new version is waiting.
- VirtualList — A long list where only the rows near the viewport are in the DOM.