Headless, accessible UI components for Svelte 5

@human-kit/ui gives you the difficult parts: the semantics, the keyboard operation, the focus control, and the position calculation. The components have no styles. You write the design, and no component changes it.

pnpm add @human-kit/ui
npm install @human-kit/ui
yarn add @human-kit/ui
bun add @human-kit/ui

Why this library

The components have no styles, and this is correct
Each component controls its behavior and its semantics. Each component shows its state in data attributes: data-state, data-disabled, data-focus-visible. There is no theme to replace and no CSS to remove.
Accessibility is the primary function
The components keep the focus in the correct element, move the focus back by input modality, set the ARIA attributes, and do the typeahead and the roving tabindex. The tests compare this behavior to a written contract.
The components use Svelte 5
The components use runes. You can use bind: on each stateful prop. If you must hold the state in your own code, use the controlled props.
One dependency at run time
Only the components that float use Floating UI. The package is native ESM, and each component has a subpath export. Your bundler includes only the components that you import.

Documentation

Each page has the live demos, the props table, and the list of the data attributes.

Overview

Form

Pickers

Overlays

Structure