# Introduction (/docs)
Qeetrix is the design system behind the Qeet Group suite. Every Qeet front end — Qeet ID, Qeet Pay,
Qeet Notify and the rest — is built from it, so a button in one product looks and behaves like a
button in every other.
Live
## Packages [#packages]
| Package | What it contains |
| ---------------- | ---------------------------------------------------------------------------------- |
| `@qeetrix/ui` | 145 React UI modules built on Base UI, plus the design tokens, Qeet fonts and logo |
| `@qeetrix/icons` | 1,863 icons in round and sharp shapes, plus the Qeet logo and wordmark |
## Principles [#principles]
* **Token-driven.** Colour, spacing, radius and elevation come from design tokens, authored in
OKLCH. Components never hard-code a value, so re-theming happens in one place.
* **Accessible by construction.** Components are built on Base UI, which implements WAI-ARIA
behaviour, and every one is tested with axe. Text and surface pairs meet WCAG AA contrast.
* **Light and dark.** Every component is themed through semantic tokens, and the theme follows a
`.dark` class on the page.
## Next steps [#next-steps]
# Installation (/docs/installation)
## Install the packages [#install-the-packages]
```bash
bun add @qeetrix/ui @qeetrix/icons
```
`@qeetrix/ui` needs React and React DOM 19 or later and Tailwind CSS 4 or later. Install them too if
your app doesn't have them yet.
## Import the stylesheet [#import-the-stylesheet]
In your global stylesheet, import Qeetrix in place of Tailwind:
```css title="globals.css"
@import "@qeetrix/ui/styles.css";
```
This brings in Tailwind itself, the Qeetrix tokens and theme mapping, and the Qeet fonts. It also
tells Tailwind to scan the Qeetrix package, so component classes are generated without an extra
`@source` line.
Don't also add `@import "tailwindcss"` — Qeetrix already includes it, and importing it twice
duplicates Tailwind's base styles.
## Use a component [#use-a-component]
```tsx
import { Button } from "@qeetrix/ui";
export function Continue() {
return ;
}
```
## Dark mode [#dark-mode]
The light and dark themes switch on a `.dark` class. Wrap your app in `ThemeProvider` to manage it:
```tsx
import { ThemeProvider } from "@qeetrix/ui";
export function App({ children }: { children: React.ReactNode }) {
return {children};
}
```
Its keyboard shortcut is off by default. Pass `enableKeyboardShortcut` to toggle the theme with
Ctrl/⌘ + Shift + D.
If your app already toggles a `.dark` class — for example with `next-themes` — leave
`ThemeProvider` out. The tokens follow the class either way, and two theme managers would fight
over it.
For the full setup in your framework, including a script that avoids a flash of the wrong theme on
load, see [Next.js](/docs/guides/nextjs) or [TanStack Start](/docs/guides/tanstack-start).
## Raw tokens [#raw-tokens]
For values outside components, such as charts or emails:
* `@qeetrix/ui/tokens.css` — every token as a `--qx-*` CSS variable, including the primitive ramps
* `@qeetrix/ui/tokens.json` — the same tokens, resolved for each theme
# Access Review (/docs/components/access-review)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { AccessReview } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/access-review`.
### States [#states]
`hover` · `active` · `disabled` · `loading` · `checked` · `indeterminate` · `selected` · `busy` · `empty`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `table` pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Accordion (/docs/components/accordion)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Accordion } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/accordion`.
### Controlled and uncontrolled [#controlled-and-uncontrolled]
Pass the value prop to control it, or the default prop to let the component own it.
| Value | Default | Change |
| ------- | -------------- | --------------- |
| `value` | `defaultValue` | `onValueChange` |
### States [#states]
`focus-visible` · `disabled`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `accordion` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Enter
Space
### Focus [#focus]
Each control is a Tab stop, in order.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Action Bar (/docs/components/action-bar)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { ActionBar } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/action-bar`.
### States [#states]
`hover` · `open`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `toolbar` pattern. Audited.
| Check | Result |
| --------------- | -------------- |
| Semantics | Pass |
| Accessible name | Pass |
| Keyboard | Pass |
| Focus | Pass |
| Screen reader | Pass |
| Right-to-left | Not applicable |
| Reduced motion | Pass |
| Forced colours | Pass |
| Contrast | Pass |
### Keyboard [#keyboard]
Tab
Enter
Space
ArrowLeft
ArrowRight
### Focus [#focus]
One Tab stop for the group; arrow keys move between items (roving tab stop).
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Alert Dialog (/docs/components/alert-dialog)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Examples [#examples]
### Destructive [#destructive]
The action names what it does. Focus starts on Cancel, the safe choice.
## Usage [#usage]
### Import [#import]
```tsx
import { AlertDialog } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/alert-dialog`.
### Controlled and uncontrolled [#controlled-and-uncontrolled]
Pass the value prop to control it, or the default prop to let the component own it.
| Value | Default | Change |
| ------ | ------------- | -------------- |
| `open` | `defaultOpen` | `onOpenChange` |
### States [#states]
`open`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `alertdialog` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Shift+tab
Escape
### Focus [#focus]
Each control is a Tab stop, in order. While open, focus is contained and focus returns on close.
### Known limitations [#known-limitations]
* **Focus:** Same `inert` limitation as Dialog.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Alert (/docs/components/alert)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Alert } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/alert`.
### Variant props [#variant-props]
| Prop | Values |
| --------- | --------------------------------------------------------------------- |
| `variant` | `default` · `info` · `success` · `warning` · `destructive` · `danger` |
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
Follows the WAI-ARIA `alert` pattern. Not yet audited.
### Announcements [#announcements]
Announced assertively: screen readers interrupt to read it.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Angle Slider (/docs/components/angle-slider)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { AngleSlider } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/angle-slider`.
### States [#states]
`focus-visible` · `disabled` · `read-only`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `slider` pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# App Shell (/docs/components/app-shell)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { AppShell } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/app-shell`.
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
Follows the WAI-ARIA `landmarks` pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Aspect Ratio (/docs/components/aspect-ratio)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { AspectRatio } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/aspect-ratio`.
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Not applicable |
| Density | Not applicable |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Audit Event (/docs/components/audit-event)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { AuditEvent } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/audit-event`.
### States [#states]
`hover` · `focus-visible`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Audited.
| Check | Result |
| --------------- | -------------- |
| Semantics | Pass |
| Accessible name | Pass |
| Keyboard | Not applicable |
| Focus | Not applicable |
| Screen reader | Pass |
| Right-to-left | Not applicable |
| Reduced motion | Not applicable |
| Forced colours | Pass |
| Contrast | Pass |
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Autocomplete (/docs/components/autocomplete)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Autocomplete } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/autocomplete`.
### States [#states]
`hover` · `focus-visible` · `disabled` · `read-only` · `loading` · `invalid` · `required` · `open` · `busy`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `combobox` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Enter
Escape
ArrowUp
ArrowDown
Home
End
### Focus [#focus]
Focus stays on the input; arrow keys move the active option (`aria-activedescendant`).
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Availability Grid (/docs/components/availability-grid)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { AvailabilityGrid } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/availability-grid`.
### States [#states]
`hover` · `focus-visible` · `disabled` · `selected`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `grid` pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Avatar (/docs/components/avatar)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Avatar } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/avatar`.
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Audited.
| Check | Result |
| --------------- | -------------- |
| Semantics | Pass |
| Accessible name | Pass |
| Keyboard | Not applicable |
| Focus | Not applicable |
| Screen reader | Pass |
| Right-to-left | Not applicable |
| Reduced motion | Not applicable |
| Forced colours | Pass |
| Contrast | Pass |
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Badge (/docs/components/badge)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Examples [#examples]
### Variants [#variants]
Neutral, brand and status tones for labels, counts and states.
### With icon [#with-icon]
A leading icon sizes itself to the badge.
## Usage [#usage]
### Import [#import]
```tsx
import { Badge } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/badge`.
### Variant props [#variant-props]
| Prop | Values |
| --------- | -------------------------------------------------------------------------------------------------------- |
| `variant` | `default` · `secondary` · `outline` · `brand` · `info` · `success` · `warning` · `destructive` · `muted` |
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Renders on the server |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Audited.
| Check | Result |
| --------------- | -------------- |
| Semantics | Pass |
| Accessible name | Pass |
| Keyboard | Not applicable |
| Focus | Not applicable |
| Screen reader | Pass |
| Right-to-left | Not applicable |
| Reduced motion | Pass |
| Forced colours | Pass |
| Contrast | Pass |
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Banner (/docs/components/banner)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { Banner } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/banner`.
### Variant props [#variant-props]
| Prop | Values |
| --------- | --------------------------------------------------------------------- |
| `variant` | `default` · `info` · `success` · `warning` · `destructive` · `danger` |
### States [#states]
`hover` · `focus-visible`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Blockquote (/docs/components/blockquote)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Blockquote } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/blockquote`.
### Variant props [#variant-props]
| Prop | Values |
| ------ | ------------------ |
| `size` | `sm` · `md` · `lg` |
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Breadcrumb (/docs/components/breadcrumb)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Breadcrumb } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/breadcrumb`.
### States [#states]
`hover` · `focus-visible`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `breadcrumb` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Enter
### Focus [#focus]
Each control is a Tab stop, in order.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Button Group (/docs/components/button-group)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { ButtonGroup } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/button-group`.
### States [#states]
`focus-visible`
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Button (/docs/components/button)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Examples [#examples]
### Variants [#variants]
One primary action per view; secondary and outline beside it, ghost in toolbars, and destructive for actions that can't be undone.
### Sizes [#sizes]
Four text sizes, and icon-only sizes that need an `aria-label`.
### Loading [#loading]
`loading` shows a spinner, sets `aria-busy` and ignores clicks while keeping focus. `loadingLabel` replaces the label for the duration and holds the button's width.
## Usage [#usage]
### Import [#import]
```tsx
import { Button } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/button`.
### Variant props [#variant-props]
| Prop | Values |
| --------- | --------------------------------------------------------------------------- |
| `variant` | `default` · `outline` · `secondary` · `ghost` · `destructive` · `link` |
| `size` | `default` · `xs` · `sm` · `lg` · `icon` · `icon-xs` · `icon-sm` · `icon-lg` |
### States [#states]
`hover` · `focus-visible` · `active` · `disabled` · `loading` · `invalid` · `busy`
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Renders on the server |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `button` pattern. Audited.
| Check | Result |
| --------------- | -------------- |
| Semantics | Pass |
| Accessible name | Pass |
| Keyboard | Pass |
| Focus | Pass |
| Screen reader | Pass |
| Right-to-left | Not applicable |
| Reduced motion | Pass |
| Forced colours | Pass |
| Contrast | Pass |
### Keyboard [#keyboard]
Enter
Space
Tab
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Calendar (/docs/components/calendar)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { Calendar } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/calendar`.
### States [#states]
`hover` · `focus-visible` · `disabled` · `selected`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `grid` pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Callout (/docs/components/callout)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Callout } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/callout`.
### Variant props [#variant-props]
| Prop | Values |
| --------- | ------------------------------------------------------------------ |
| `variant` | `info` · `success` · `warning` · `destructive` · `error` · `muted` |
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Card (/docs/components/card)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Examples [#examples]
### Default [#default]
Header with an action slot, content, and a footer for the card's own actions.
## Usage [#usage]
### Import [#import]
```tsx
import { Card } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/card`.
### Variant props [#variant-props]
| Prop | Values |
| --------- | ---------------------------------- |
| `variant` | `default` · `outline` · `elevated` |
### States [#states]
`hover` · `focus-visible` · `active` · `disabled` · `selected`
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Renders on the server |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Carousel (/docs/components/carousel)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Carousel } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/carousel`.
### States [#states]
`focus-visible` · `disabled`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `carousel` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Enter
Space
### Focus [#focus]
Each control is a Tab stop, in order.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Chart Presets (/docs/components/chart-presets)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { ChartPresets } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/chart-presets`.
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Chart (/docs/components/chart)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { Chart } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/chart`.
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Checkbox Card (/docs/components/checkbox-card)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { CheckboxCard } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/checkbox-card`.
### States [#states]
`hover` · `disabled` · `read-only` · `invalid` · `required` · `checked`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `checkbox` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Space
### Focus [#focus]
Each control is a Tab stop, in order.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Checkbox (/docs/components/checkbox)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Examples [#examples]
### Default [#default]
Wrap the checkbox in a `Label` to name it.
### With description [#with-description]
A horizontal `Field` adds a description and wires it to the checkbox.
## Usage [#usage]
### Import [#import]
```tsx
import { Checkbox } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/checkbox`.
### Controlled and uncontrolled [#controlled-and-uncontrolled]
Pass the value prop to control it, or the default prop to let the component own it.
| Value | Default | Change |
| --------- | ---------------- | ----------------- |
| `checked` | `defaultChecked` | `onCheckedChange` |
### States [#states]
`hover` · `focus-visible` · `disabled` · `read-only` · `invalid` · `checked` · `indeterminate`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not declared |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `checkbox` pattern. Not yet audited.
### Keyboard [#keyboard]
Space
Tab
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Chip (/docs/components/chip)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { Chip } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/chip`.
### Variant props [#variant-props]
| Prop | Values |
| ------ | ------------------ |
| `size` | `sm` · `md` · `lg` |
### Controlled and uncontrolled [#controlled-and-uncontrolled]
Pass the value prop to control it, or the default prop to let the component own it.
| Value | Default | Change |
| ------- | -------------- | --------------- |
| `value` | `defaultValue` | `onValueChange` |
### States [#states]
`hover` · `focus-visible` · `active` · `disabled` · `checked` · `selected`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Clipboard (/docs/components/clipboard)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Clipboard } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/clipboard`.
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `button` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Enter
Space
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Close Button (/docs/components/close-button)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { CloseButton } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/close-button`.
### States [#states]
`hover` · `focus-visible` · `active`
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
Follows the WAI-ARIA `button` pattern. Not yet audited.
### Keyboard [#keyboard]
Enter
Space
Tab
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Code Block (/docs/components/code-block)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { CodeBlock } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/code-block`.
### States [#states]
`hover` · `focus-visible`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Collapsible (/docs/components/collapsible)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Collapsible } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/collapsible`.
### Controlled and uncontrolled [#controlled-and-uncontrolled]
Pass the value prop to control it, or the default prop to let the component own it.
| Value | Default | Change |
| ------ | ------------- | -------------- |
| `open` | `defaultOpen` | `onOpenChange` |
### States [#states]
`open`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Not applicable |
| Density | Not applicable |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `disclosure` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Enter
Space
### Focus [#focus]
Each control is a Tab stop, in order.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Color Picker (/docs/components/color-picker)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { ColorPicker } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/color-picker`.
### States [#states]
`hover` · `focus-visible` · `disabled` · `read-only` · `invalid` · `required` · `empty`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Color Swatch (/docs/components/color-swatch)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { ColorSwatch } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/color-swatch`.
### Variant props [#variant-props]
| Prop | Values |
| ------ | ------------------------- |
| `size` | `xs` · `sm` · `md` · `lg` |
### States [#states]
`hover` · `focus-visible` · `disabled` · `selected`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Combobox (/docs/components/combobox)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { Combobox } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/combobox`.
### States [#states]
`hover` · `focus-visible` · `disabled` · `read-only` · `loading` · `invalid` · `required` · `selected` · `open` · `busy`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `combobox` pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Command Palette (/docs/components/command-palette)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { CommandPalette } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/command-palette`.
### States [#states]
`selected` · `expanded`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `combobox` pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Comment Thread (/docs/components/comment-thread)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { CommentThread } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/comment-thread`.
### States [#states]
`hover` · `focus-visible` · `read-only` · `expanded`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Container (/docs/components/container)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Container } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/container`.
### Variant props [#variant-props]
| Prop | Values |
| ------ | ------------------------------------- |
| `size` | `prose` · `content` · `wide` · `full` |
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Not applicable |
| Density | Not applicable |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Context Menu (/docs/components/context-menu)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { ContextMenu } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/context-menu`.
### States [#states]
`focus-visible` · `disabled` · `checked` · `open`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `menu` pattern. Not yet audited.
### Keyboard [#keyboard]
Enter
Space
Escape
ArrowUp
ArrowDown
Home
End
### Focus [#focus]
One Tab stop for the group; arrow keys move between items (roving tab stop). While open, focus is contained and focus returns on close.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Copyable Secret (/docs/components/copyable-secret)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { CopyableSecret } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/copyable-secret`.
### States [#states]
`focus-visible` · `disabled`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Country Picker (/docs/components/country-picker)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { CountryPicker } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/country-picker`.
### Controlled and uncontrolled [#controlled-and-uncontrolled]
Pass the value prop to control it, or the default prop to let the component own it.
| Value | Default | Change |
| ------- | -------------- | ---------- |
| `value` | `defaultValue` | `onChange` |
### States [#states]
`disabled` · `invalid` · `required`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction, visual and hydration tests.
{/* qeetrix:generated:end */}
# Currency Input (/docs/components/currency-input)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { CurrencyInput } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/currency-input`.
### States [#states]
`hover` · `focus-visible` · `disabled` · `read-only` · `invalid`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Data State (/docs/components/data-state)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { DataState } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/data-state`.
### States [#states]
`loading` · `busy`
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
Follows the WAI-ARIA `alert` pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Data Table (/docs/components/data-table)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Examples [#examples]
### Default [#default]
Sorting, search, row selection and pagination out of the box.
## Usage [#usage]
### Import [#import]
```tsx
import { DataTable } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/data-table`.
### States [#states]
`hover` · `focus-visible` · `loading` · `indeterminate` · `expanded` · `busy`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `table` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Enter
Space
ArrowLeft
ArrowRight
Home
End
### Focus [#focus]
Each control is a Tab stop, in order.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction, visual and hydration tests.
{/* qeetrix:generated:end */}
# Date Picker (/docs/components/date-picker)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { DatePicker } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/date-picker`.
### States [#states]
`hover` · `focus-visible` · `disabled` · `read-only` · `invalid` · `empty`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Date Time Picker (/docs/components/date-time-picker)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { DateTimePicker } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/date-time-picker`.
### States [#states]
`disabled` · `invalid` · `empty`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Description List (/docs/components/description-list)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { DescriptionList } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/description-list`.
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Dialog (/docs/components/dialog)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Examples [#examples]
### Default [#default]
A trigger, a titled panel, and a footer whose actions close it. Escape closes it too.
## Usage [#usage]
### Import [#import]
```tsx
import { Dialog } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/dialog`.
### Variant props [#variant-props]
| Prop | Values |
| ------ | --------------------------------------- |
| `size` | `sm` · `default` · `lg` · `xl` · `full` |
### Controlled and uncontrolled [#controlled-and-uncontrolled]
Pass the value prop to control it, or the default prop to let the component own it.
| Value | Default | Change |
| ------ | ------------- | -------------- |
| `open` | `defaultOpen` | `onOpenChange` |
### States [#states]
`open`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `dialog` pattern. Partly audited.
| Check | Result |
| --------------- | -------------- |
| Semantics | Pass |
| Accessible name | Pass |
| Keyboard | Pass |
| Focus | Partial |
| Screen reader | Pass |
| Right-to-left | Not applicable |
| Reduced motion | Pass |
| Forced colours | Pass |
| Contrast | Pass |
### Keyboard [#keyboard]
Tab
Shift+tab
Escape
### Focus [#focus]
Each control is a Tab stop, in order. While open, focus is contained and focus returns on close.
### Known limitations [#known-limitations]
* **Focus:** Focus containment is enforced with `inert`, which jsdom does not implement, so the tests assert the mechanism is installed rather than observing containment. Browser-level verification is on the manual checklist.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Diff Viewer (/docs/components/diff-viewer)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { DiffViewer } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/diff-viewer`.
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Drawer (/docs/components/drawer)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { Drawer } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/drawer`.
### Controlled and uncontrolled [#controlled-and-uncontrolled]
Pass the value prop to control it, or the default prop to let the component own it.
| Value | Default | Change |
| ------ | ------------- | -------------- |
| `open` | `defaultOpen` | `onOpenChange` |
### States [#states]
`open`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `dialog` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Shift+tab
Escape
### Focus [#focus]
Each control is a Tab stop, in order. While open, focus is contained and focus returns on close.
### Known limitations [#known-limitations]
* **Focus:** Focus containment is enforced with `inert`, which jsdom does not implement, so the tests assert the mechanism is installed rather than observing containment. Browser-level verification is on the manual checklist.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Dropdown Menu (/docs/components/dropdown-menu)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { DropdownMenu } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/dropdown-menu`.
### Controlled and uncontrolled [#controlled-and-uncontrolled]
Pass the value prop to control it, or the default prop to let the component own it.
| Value | Default | Change |
| ------ | ------------- | -------------- |
| `open` | `defaultOpen` | `onOpenChange` |
### States [#states]
`focus-visible` · `disabled` · `checked` · `open`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `menu-button` pattern. Audited.
| Check | Result |
| --------------- | -------------- |
| Semantics | Pass |
| Accessible name | Pass |
| Keyboard | Pass |
| Focus | Pass |
| Screen reader | Pass |
| Right-to-left | Not applicable |
| Reduced motion | Pass |
| Forced colours | Pass |
| Contrast | Pass |
### Keyboard [#keyboard]
Enter
Space
Escape
ArrowUp
ArrowDown
Home
End
### Focus [#focus]
One Tab stop for the group; arrow keys move between items (roving tab stop). While open, focus is contained and focus returns on close.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Editable (/docs/components/editable)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { Editable } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/editable`.
### States [#states]
`hover` · `focus-visible` · `disabled`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
### Focus [#focus]
Each control is a Tab stop, in order. While open, focus returns on close.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Empty State (/docs/components/empty-state)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { EmptyState } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/empty-state`.
### Variant props [#variant-props]
| Prop | Values |
| --------- | ------------------------------------------------------------------ |
| `variant` | `default` · `first-use` · `no-results` · `no-permission` · `error` |
| `size` | `sm` · `default` · `lg` |
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Feed (/docs/components/feed)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { Feed } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/feed`.
### States [#states]
`hover` · `focus-visible` · `busy`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `feed` pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Field (/docs/components/field)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Field } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/field`.
### States [#states]
`hover` · `disabled` · `invalid` · `checked`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Audited.
| Check | Result |
| --------------- | -------------- |
| Semantics | Pass |
| Accessible name | Pass |
| Keyboard | Not applicable |
| Focus | Not applicable |
| Screen reader | Pass |
| Right-to-left | Not applicable |
| Reduced motion | Pass |
| Forced colours | Pass |
| Contrast | Pass |
### Announcements [#announcements]
Announced politely: screen readers read it when the user is idle.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# File Card (/docs/components/file-card)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { FileCard } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/file-card`.
### States [#states]
`hover` · `selected`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# File Type Icon (/docs/components/file-type-icon)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { FileTypeIcon } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/file-type-icon`.
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# File Upload (/docs/components/file-upload)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { FileUpload } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/file-upload`.
### States [#states]
`hover` · `focus-visible` · `disabled` · `invalid`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Filter Bar (/docs/components/filter-bar)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { FilterBar } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/filter-bar`.
### States [#states]
`hover` · `focus-visible` · `disabled` · `expanded`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Floating Window (/docs/components/floating-window)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { FloatingWindow } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/floating-window`.
### States [#states]
`hover` · `active`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `dialog` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Escape
ArrowUp
ArrowDown
ArrowLeft
ArrowRight
### Focus [#focus]
Each control is a Tab stop, in order.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Focus Trap (/docs/components/focus-trap)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { FocusTrap } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/focus-trap`.
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Not applicable |
| Density | Not applicable |
| Server rendering | Client component |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Form (/docs/components/form)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { Form } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/form`.
### States [#states]
`hover` · `focus-visible` · `invalid`
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Highlight (/docs/components/highlight)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Highlight } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/highlight`.
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Hover Card (/docs/components/hover-card)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { HoverCard } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/hover-card`.
### Controlled and uncontrolled [#controlled-and-uncontrolled]
Pass the value prop to control it, or the default prop to let the component own it.
| Value | Default | Change |
| ------ | ------------- | -------------- |
| `open` | `defaultOpen` | `onOpenChange` |
### States [#states]
`open`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Escape
### Focus [#focus]
Each control is a Tab stop, in order. While open, focus returns on close.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Icon Button (/docs/components/icon-button)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { IconButton } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/icon-button`.
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Not applicable |
| Density | Supported |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
Follows the WAI-ARIA `button` pattern. Not yet audited.
### Keyboard [#keyboard]
Enter
Space
Tab
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Icon (/docs/components/icon)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { Icon } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/icon`.
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Not applicable |
| Density | Not applicable |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Components (/docs/components)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
`@qeetrix/ui` 2.1.2 has 145 components: 68 beta, 76 stable and 1 deprecated. Each page lists its import, variants, states, support and accessibility, generated from the package's component manifest.
| Component | Status | Accessibility |
| --------------------------------------------------------------------------------- | ---------- | --------------- |
| [Access Review](/docs/components/access-review) | Beta | Not yet audited |
| [Accordion](/docs/components/accordion) | Stable | Not yet audited |
| [Action Bar](/docs/components/action-bar) | Stable | Audited |
| [Alert](/docs/components/alert) | Stable | Not yet audited |
| [Alert Dialog](/docs/components/alert-dialog) | Stable | Not yet audited |
| [Angle Slider](/docs/components/angle-slider) | Beta | Not yet audited |
| [App Shell](/docs/components/app-shell) | Beta | Not yet audited |
| [Aspect Ratio](/docs/components/aspect-ratio) | Stable | Not yet audited |
| [Audit Event](/docs/components/audit-event) | Stable | Audited |
| [Autocomplete](/docs/components/autocomplete) | Stable | Not yet audited |
| [Availability Grid](/docs/components/availability-grid) | Beta | Not yet audited |
| [Avatar](/docs/components/avatar) | Stable | Audited |
| [Badge](/docs/components/badge) | Stable | Audited |
| [Banner](/docs/components/banner) | Beta | Not yet audited |
| [Blockquote](/docs/components/blockquote) | Stable | Not yet audited |
| [Breadcrumb](/docs/components/breadcrumb) | Stable | Not yet audited |
| [Button](/docs/components/button) | Stable | Audited |
| [Button Group](/docs/components/button-group) | Beta | Not yet audited |
| [Calendar](/docs/components/calendar) | Beta | Not yet audited |
| [Callout](/docs/components/callout) | Stable | Not yet audited |
| [Card](/docs/components/card) | Stable | Not yet audited |
| [Carousel](/docs/components/carousel) | Stable | Not yet audited |
| [Chart](/docs/components/chart) | Beta | Not yet audited |
| [Chart Presets](/docs/components/chart-presets) | Beta | Not yet audited |
| [Checkbox](/docs/components/checkbox) | Stable | Not yet audited |
| [Checkbox Card](/docs/components/checkbox-card) | Stable | Not yet audited |
| [Chip](/docs/components/chip) | Beta | Not yet audited |
| [Clipboard](/docs/components/clipboard) | Stable | Not yet audited |
| [Close Button](/docs/components/close-button) | Stable | Not yet audited |
| [Code Block](/docs/components/code-block) | Beta | Not yet audited |
| [Collapsible](/docs/components/collapsible) | Stable | Not yet audited |
| [Color Picker](/docs/components/color-picker) | Beta | Not yet audited |
| [Color Swatch](/docs/components/color-swatch) | Beta | Not yet audited |
| [Combobox](/docs/components/combobox) | Beta | Not yet audited |
| [Command Palette](/docs/components/command-palette) | Beta | Not yet audited |
| [Comment Thread](/docs/components/comment-thread) | Beta | Not yet audited |
| [Container](/docs/components/container) | Stable | Not yet audited |
| [Context Menu](/docs/components/context-menu) | Stable | Not yet audited |
| [Copyable Secret](/docs/components/copyable-secret) | Beta | Not yet audited |
| [Country Picker](/docs/components/country-picker) | Beta | Not yet audited |
| [Currency Input](/docs/components/currency-input) | Beta | Not yet audited |
| [Data State](/docs/components/data-state) | Stable | Not yet audited |
| [Data Table](/docs/components/data-table) | Beta | Not yet audited |
| [Date Picker](/docs/components/date-picker) | Beta | Not yet audited |
| [Date Time Picker](/docs/components/date-time-picker) | Beta | Not yet audited |
| [Description List](/docs/components/description-list) | Stable | Not yet audited |
| [Dialog](/docs/components/dialog) | Stable | Partly audited |
| [Diff Viewer](/docs/components/diff-viewer) | Beta | Not yet audited |
| [Drawer](/docs/components/drawer) | Beta | Not yet audited |
| [Dropdown Menu](/docs/components/dropdown-menu) | Stable | Audited |
| [Editable](/docs/components/editable) | Beta | Not yet audited |
| [Empty State](/docs/components/empty-state) | Stable | Not yet audited |
| [Feed](/docs/components/feed) | Beta | Not yet audited |
| [Field](/docs/components/field) | Stable | Audited |
| [File Card](/docs/components/file-card) | Stable | Not yet audited |
| [File Type Icon](/docs/components/file-type-icon) | Stable | Not yet audited |
| [File Upload](/docs/components/file-upload) | Beta | Not yet audited |
| [Filter Bar](/docs/components/filter-bar) | Beta | Not yet audited |
| [Floating Window](/docs/components/floating-window) | Beta | Not yet audited |
| [Focus Trap](/docs/components/focus-trap) | Beta | Not yet audited |
| [Form](/docs/components/form) | Beta | Not yet audited |
| [Highlight](/docs/components/highlight) | Stable | Not yet audited |
| [Hover Card](/docs/components/hover-card) | Stable | Not yet audited |
| [Icon](/docs/components/icon) | Beta | Not yet audited |
| [Icon Button](/docs/components/icon-button) | Stable | Not yet audited |
| [Input](/docs/components/input) | Stable | Audited |
| [Input Group](/docs/components/input-group) | Stable | Not yet audited |
| [JSON Tree](/docs/components/json-tree) | Beta | Not yet audited |
| [Kbd](/docs/components/kbd) | Stable | Not yet audited |
| [Label](/docs/components/label) | Stable | Not yet audited |
| [Link](/docs/components/link) | Stable | Not yet audited |
| [Listbox](/docs/components/listbox) | Stable | Audited |
| [Logo Uploader](/docs/components/logo-uploader) | Beta | Not yet audited |
| [Marquee](/docs/components/marquee) | Beta | Not yet audited |
| [Mask Input](/docs/components/mask-input) | Beta | Not yet audited |
| [Master Detail](/docs/components/master-detail) | Beta | Not yet audited |
| [Mention Input](/docs/components/mention-input) | Beta | Not yet audited |
| [Menubar](/docs/components/menubar) | Stable | Not yet audited |
| [Meter](/docs/components/meter) | Stable | Audited |
| [Native Select](/docs/components/native-select) | Stable | Not yet audited |
| [Navigation Menu](/docs/components/navigation-menu) | Beta | Not yet audited |
| [Notification](/docs/components/notification) | Beta | Not yet audited |
| [Notification Center](/docs/components/notification-center) | Beta | Not yet audited |
| [Notification Preference Matrix](/docs/components/notification-preference-matrix) | Beta | Not yet audited |
| [Number Field](/docs/components/number-field) | Stable | Not yet audited |
| [Number Formatter](/docs/components/number-formatter) | Stable | Not yet audited |
| [Org Chart](/docs/components/org-chart) | Beta | Not yet audited |
| [OTP Input](/docs/components/otp-input) | Stable | Not yet audited |
| [Overflow List](/docs/components/overflow-list) | Beta | Not yet audited |
| [Page Header](/docs/components/page-header) | Stable | Not yet audited |
| [Pagination](/docs/components/pagination) | Stable | Not yet audited |
| [Pagination Bar](/docs/components/pagination-bar) | Deprecated | Not yet audited |
| [Password Input](/docs/components/password-input) | Stable | Not yet audited |
| [Password Strength Meter](/docs/components/password-strength-meter) | Beta | Not yet audited |
| [Popover](/docs/components/popover) | Stable | Audited |
| [Portal](/docs/components/portal) | Beta | Not yet audited |
| [Presence Indicator](/docs/components/presence-indicator) | Stable | Not yet audited |
| [Preview Card](/docs/components/preview-card) | Beta | Not yet audited |
| [Progress](/docs/components/progress) | Stable | Audited |
| [Progress Circle](/docs/components/progress-circle) | Stable | Audited |
| [QR Code](/docs/components/qr-code) | Beta | Not yet audited |
| [Radio Card](/docs/components/radio-card) | Stable | Not yet audited |
| [Radio Group](/docs/components/radio-group) | Stable | Audited |
| [Rating](/docs/components/rating) | Stable | Not yet audited |
| [Reaction Bar](/docs/components/reaction-bar) | Beta | Not yet audited |
| [Resizable](/docs/components/resizable) | Beta | Not yet audited |
| [Rich Text Editor](/docs/components/rich-text-editor) | Beta | Not yet audited |
| [Rolling Number](/docs/components/rolling-number) | Beta | Not yet audited |
| [Schedule Calendar](/docs/components/schedule-calendar) | Beta | Not yet audited |
| [Scroll Area](/docs/components/scroll-area) | Beta | Not yet audited |
| [Security Item](/docs/components/security-item) | Stable | Not yet audited |
| [Segmented Control](/docs/components/segmented-control) | Stable | Not yet audited |
| [Select](/docs/components/select) | Stable | Audited |
| [Separator](/docs/components/separator) | Stable | Not yet audited |
| [Sheet](/docs/components/sheet) | Beta | Not yet audited |
| [Sidebar](/docs/components/sidebar) | Beta | Not yet audited |
| [Skeleton](/docs/components/skeleton) | Stable | Not yet audited |
| [Skip Nav](/docs/components/skip-nav) | Stable | Not yet audited |
| [Slider](/docs/components/slider) | Stable | Not yet audited |
| [Spinner](/docs/components/spinner) | Stable | Audited |
| [Spoiler](/docs/components/spoiler) | Stable | Audited |
| [Stat](/docs/components/stat) | Stable | Not yet audited |
| [Status Pill](/docs/components/status-pill) | Stable | Not yet audited |
| [Stepper](/docs/components/stepper) | Stable | Not yet audited |
| [Switch](/docs/components/switch) | Stable | Not yet audited |
| [Table](/docs/components/table) | Beta | Not yet audited |
| [Table of Contents](/docs/components/table-of-contents) | Beta | Not yet audited |
| [Tabs](/docs/components/tabs) | Stable | Audited |
| [Tag Input](/docs/components/tag-input) | Beta | Not yet audited |
| [Textarea](/docs/components/textarea) | Stable | Not yet audited |
| [Timeline](/docs/components/timeline) | Beta | Not yet audited |
| [Time Picker](/docs/components/time-picker) | Beta | Not yet audited |
| [Timer](/docs/components/timer) | Beta | Not yet audited |
| [Time Range Picker](/docs/components/time-range-picker) | Beta | Not yet audited |
| [Time Since](/docs/components/time-since) | Beta | Not yet audited |
| [Timezone Picker](/docs/components/timezone-picker) | Beta | Not yet audited |
| [Toast](/docs/components/toast) | Beta | Not yet audited |
| [Toggle](/docs/components/toggle) | Stable | Not yet audited |
| [Toggle Tip](/docs/components/toggle-tip) | Beta | Not yet audited |
| [Toolbar](/docs/components/toolbar) | Stable | Not yet audited |
| [Tooltip](/docs/components/tooltip) | Stable | Not yet audited |
| [Tour](/docs/components/tour) | Beta | Not yet audited |
| [Tree View](/docs/components/tree-view) | Stable | Audited |
| [Typography](/docs/components/typography) | Stable | Not yet audited |
| [Visually Hidden](/docs/components/visually-hidden) | Stable | Not yet audited |
{/* qeetrix:generated:end */}
# Input Group (/docs/components/input-group)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { InputGroup } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/input-group`.
### States [#states]
`hover` · `focus-visible` · `disabled` · `read-only` · `invalid`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
### Focus [#focus]
Each control is a Tab stop, in order.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Input (/docs/components/input)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Examples [#examples]
### Field [#field]
`FieldControl` wires the label and description to the input for assistive technology.
### Invalid [#invalid]
A `FieldError` with content marks the field invalid and sets `aria-invalid` on the input.
### Warning and success [#warning-and-success]
Non-blocking feedback: a warning that still lets the form submit, and a confirmation.
## Usage [#usage]
### Import [#import]
```tsx
import { Input } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/input`.
### States [#states]
`hover` · `focus-visible` · `disabled` · `read-only` · `invalid`
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Renders on the server |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Audited.
| Check | Result |
| --------------- | -------------- |
| Semantics | Pass |
| Accessible name | Pass |
| Keyboard | Pass |
| Focus | Pass |
| Screen reader | Pass |
| Right-to-left | Not applicable |
| Reduced motion | Pass |
| Forced colours | Pass |
| Contrast | Pass |
### Keyboard [#keyboard]
Tab
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# JSON Tree (/docs/components/json-tree)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { JSONTree } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/json-tree`.
### States [#states]
`hover` · `focus-visible` · `expanded`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `treeview` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
ArrowUp
ArrowDown
ArrowLeft
ArrowRight
Home
End
### Focus [#focus]
One Tab stop for the group; arrow keys move between items (roving tab stop).
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Kbd (/docs/components/kbd)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Kbd } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/kbd`.
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Label (/docs/components/label)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Label } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/label`.
### States [#states]
`disabled` · `required`
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Link (/docs/components/link)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Link } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/link`.
### Variant props [#variant-props]
| Prop | Values |
| --------- | ----------------------------------- |
| `variant` | `default` · `muted` · `destructive` |
| `size` | `sm` · `md` · `lg` |
### States [#states]
`hover` · `focus-visible` · `active` · `disabled`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `link` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Enter
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Listbox (/docs/components/listbox)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Listbox } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/listbox`.
### Controlled and uncontrolled [#controlled-and-uncontrolled]
Pass the value prop to control it, or the default prop to let the component own it.
| Value | Default | Change |
| ------- | -------------- | --------------- |
| `value` | `defaultValue` | `onValueChange` |
### States [#states]
`hover` · `focus-visible` · `active` · `disabled` · `read-only` · `invalid` · `selected`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `listbox` pattern. Audited.
| Check | Result |
| --------------- | -------------- |
| Semantics | Pass |
| Accessible name | Pass |
| Keyboard | Pass |
| Focus | Pass |
| Screen reader | Pass |
| Right-to-left | Not applicable |
| Reduced motion | Pass |
| Forced colours | Pass |
| Contrast | Pass |
### Keyboard [#keyboard]
Tab
ArrowUp
ArrowDown
Home
End
Enter
TypeAhead
### Focus [#focus]
Focus stays on the input; arrow keys move the active option (`aria-activedescendant`).
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Logo Uploader (/docs/components/logo-uploader)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { LogoUploader } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/logo-uploader`.
### States [#states]
`disabled` · `invalid`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Marquee (/docs/components/marquee)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { Marquee } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/marquee`.
### States [#states]
`hover`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Not applicable |
| Density | Not applicable |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Mask Input (/docs/components/mask-input)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { MaskInput } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/mask-input`.
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Not applicable |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Master Detail (/docs/components/master-detail)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { MasterDetail } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/master-detail`.
### Controlled and uncontrolled [#controlled-and-uncontrolled]
Pass the value prop to control it, or the default prop to let the component own it.
| Value | Default | Change |
| ------------ | ------------------- | -------------------- |
| `detailOpen` | `defaultDetailOpen` | `onDetailOpenChange` |
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Client component |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Mention Input (/docs/components/mention-input)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { MentionInput } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/mention-input`.
### States [#states]
`hover` · `selected`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Menubar (/docs/components/menubar)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Menubar } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/menubar`.
### States [#states]
`hover` · `focus-visible` · `disabled` · `checked` · `open`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `menubar` pattern. Not yet audited.
### Keyboard [#keyboard]
Enter
Space
Escape
ArrowUp
ArrowDown
ArrowLeft
ArrowRight
Home
End
### Focus [#focus]
One Tab stop for the group; arrow keys move between items (roving tab stop). While open, focus is contained and focus returns on close.
### Known limitations [#known-limitations]
* **Semantics:** Base UI renders an aria-owns bridge span as a direct child of the role=menubar element while a menu is open, so the menubar owns a generic child and axe's aria-required-children fails. No supported workaround in @base-ui/react 1.7.0: Menu.Positioner throws without Menu.Portal, the bridge is only emitted for non-modal focus managers and Menu.Popup hard-codes modal: isContextMenu, and a role="none" wrapper does not help because axe recurses through presentational wrappers. Asserted in composites.test.tsx and subtracted from a whole-widget axe run in menubar.test.tsx, so a Base UI fix surfaces as a failure.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Meter (/docs/components/meter)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Meter } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/meter`.
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `meter` pattern. Audited.
| Check | Result |
| --------------- | -------------- |
| Semantics | Pass |
| Accessible name | Pass |
| Keyboard | Not applicable |
| Focus | Not applicable |
| Screen reader | Pass |
| Right-to-left | Not applicable |
| Reduced motion | Pass |
| Forced colours | Pass |
| Contrast | Pass |
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Native Select (/docs/components/native-select)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Examples [#examples]
### Default [#default]
The browser's own picker: best on mobile and for long, simple lists.
## Usage [#usage]
### Import [#import]
```tsx
import { NativeSelect } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/native-select`.
### States [#states]
`hover` · `focus-visible` · `disabled` · `read-only` · `invalid`
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Renders on the server |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
ArrowUp
ArrowDown
Enter
Home
End
TypeAhead
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Navigation Menu (/docs/components/navigation-menu)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { NavigationMenu } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/navigation-menu`.
### States [#states]
`hover` · `focus-visible` · `active` · `disabled` · `open`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `disclosure` pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Notification Center (/docs/components/notification-center)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { NotificationCenter } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/notification-center`.
### States [#states]
`hover` · `focus-visible`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Notification Preference Matrix (/docs/components/notification-preference-matrix)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { NotificationPreferenceMatrix } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/notification-preference-matrix`.
### States [#states]
`disabled`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
Follows the WAI-ARIA `table` pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Notification (/docs/components/notification)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { Notification } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/notification`.
### Variant props [#variant-props]
| Prop | Values |
| --------- | -------------------------------------------------------- |
| `variant` | `info` · `success` · `warning` · `destructive` · `error` |
| `size` | `default` · `sm` |
### States [#states]
`hover` · `focus-visible` · `loading` · `busy`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Number Field (/docs/components/number-field)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { NumberField } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/number-field`.
### States [#states]
`hover` · `focus-visible` · `active` · `disabled` · `read-only` · `invalid`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `spinbutton` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
ArrowUp
ArrowDown
### Focus [#focus]
Each control is a Tab stop, in order.
### Known limitations [#known-limitations]
* **Semantics:** Base UI renders a text input with aria-roledescription ("Number field") rather than role=spinbutton; the spinbutton keyboard contract (ArrowUp/ArrowDown step) holds. The role description comes from the catalogue (numberField.roleDescription).
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Number Formatter (/docs/components/number-formatter)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { NumberFormatter } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/number-formatter`.
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Not applicable |
| Density | Not applicable |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Org Chart (/docs/components/org-chart)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { OrgChart } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/org-chart`.
### States [#states]
`hover` · `focus-visible` · `expanded`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# OTP Input (/docs/components/otp-input)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { OTPInput } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/otp-input`.
### States [#states]
`hover` · `focus-visible` · `disabled` · `read-only` · `invalid` · `required`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Backspace
ArrowLeft
ArrowRight
Home
End
### Focus [#focus]
Each control is a Tab stop, in order.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Overflow List (/docs/components/overflow-list)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { OverflowList } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/overflow-list`.
### States [#states]
`hover` · `focus-visible`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Page Header (/docs/components/page-header)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { PageHeader } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/page-header`.
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Pagination Bar (/docs/components/pagination-bar)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Renamed to Pagination when the pagination API was consolidated in 1.0.0. Use [Pagination](/docs/components/pagination) instead. Import \{ Pagination } from "@qeetrix/ui" and rename PaginationBarProps to PaginationProps.
## Usage [#usage]
### Import [#import]
```tsx
import { PaginationBar } from "@qeetrix/ui/components/pagination-bar";
```
It can also be imported on its own from `@qeetrix/ui/components/pagination-bar`.
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Not applicable |
| Density | Not supported |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Pagination (/docs/components/pagination)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Pagination } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/pagination`.
### States [#states]
`loading` · `busy`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Enter
Space
### Focus [#focus]
Each control is a Tab stop, in order.
### Announcements [#announcements]
Announced politely: screen readers read it when the user is idle.
## Tests [#tests]
Covered by unit, accessibility (axe) and interaction tests.
{/* qeetrix:generated:end */}
# Password Input (/docs/components/password-input)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { PasswordInput } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/password-input`.
### States [#states]
`hover` · `focus-visible` · `disabled` · `read-only` · `invalid`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Enter
Space
### Focus [#focus]
Each control is a Tab stop, in order.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Password Strength Meter (/docs/components/password-strength-meter)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { PasswordStrengthMeter } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/password-strength-meter`.
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Renders on the server |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
### Announcements [#announcements]
Announced politely: screen readers read it when the user is idle.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Popover (/docs/components/popover)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Popover } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/popover`.
### Controlled and uncontrolled [#controlled-and-uncontrolled]
Pass the value prop to control it, or the default prop to let the component own it.
| Value | Default | Change |
| ------ | ------------- | -------------- |
| `open` | `defaultOpen` | `onOpenChange` |
### States [#states]
`open`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Audited.
| Check | Result |
| --------------- | -------------- |
| Semantics | Pass |
| Accessible name | Pass |
| Keyboard | Pass |
| Focus | Pass |
| Screen reader | Pass |
| Right-to-left | Not applicable |
| Reduced motion | Pass |
| Forced colours | Pass |
| Contrast | Pass |
### Keyboard [#keyboard]
Tab
Escape
### Focus [#focus]
Each control is a Tab stop, in order. While open, focus returns on close.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Portal (/docs/components/portal)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { Portal } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/portal`.
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Not applicable |
| Density | Not applicable |
| Server rendering | Client component |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Presence Indicator (/docs/components/presence-indicator)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { PresenceIndicator } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/presence-indicator`.
### Variant props [#variant-props]
| Prop | Values |
| ------ | ------------------ |
| `size` | `sm` · `md` · `lg` |
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Renders on the server |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Preview Card (/docs/components/preview-card)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { PreviewCard } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/preview-card`.
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Progress Circle (/docs/components/progress-circle)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { ProgressCircle } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/progress-circle`.
### Variant props [#variant-props]
| Prop | Values |
| ------ | ------------------ |
| `size` | `sm` · `md` · `lg` |
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Renders on the server |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Audited.
| Check | Result |
| --------------- | -------------- |
| Semantics | Pass |
| Accessible name | Pass |
| Keyboard | Not applicable |
| Focus | Not applicable |
| Screen reader | Pass |
| Right-to-left | Not applicable |
| Reduced motion | Pass |
| Forced colours | Pass |
| Contrast | Pass |
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Progress (/docs/components/progress)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Progress } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/progress`.
### Variant props [#variant-props]
| Prop | Values |
| ------ | ------------------ |
| `size` | `sm` · `md` · `lg` |
### States [#states]
`indeterminate`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Audited.
| Check | Result |
| --------------- | -------------- |
| Semantics | Pass |
| Accessible name | Pass |
| Keyboard | Not applicable |
| Focus | Not applicable |
| Screen reader | Pass |
| Right-to-left | Not applicable |
| Reduced motion | Pass |
| Forced colours | Pass |
| Contrast | Pass |
### Announcements [#announcements]
Announced politely: screen readers read it when the user is idle.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# QR Code (/docs/components/qr-code)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { QRCode } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/qr-code`.
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Client component |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Radio Card (/docs/components/radio-card)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { RadioCard } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/radio-card`.
### States [#states]
`hover` · `disabled` · `invalid` · `required` · `checked`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `radio-group` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Space
ArrowUp
ArrowDown
ArrowLeft
ArrowRight
### Focus [#focus]
One Tab stop for the group; arrow keys move between items (roving tab stop).
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Radio Group (/docs/components/radio-group)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { RadioGroup } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/radio-group`.
### States [#states]
`hover` · `focus-visible` · `disabled` · `read-only` · `invalid` · `checked`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not declared |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `radio-group` pattern. Audited.
| Check | Result |
| --------------- | -------------- |
| Semantics | Pass |
| Accessible name | Pass |
| Keyboard | Pass |
| Focus | Pass |
| Screen reader | Pass |
| Right-to-left | Not applicable |
| Reduced motion | Pass |
| Forced colours | Pass |
| Contrast | Pass |
### Keyboard [#keyboard]
Tab
Space
ArrowUp
ArrowDown
ArrowLeft
ArrowRight
### Focus [#focus]
One Tab stop for the group; arrow keys move between items (roving tab stop).
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Rating (/docs/components/rating)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Rating } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/rating`.
### States [#states]
`focus-visible` · `disabled` · `read-only` · `invalid`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not declared |
| Server rendering | Client component |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
Follows the WAI-ARIA `slider` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
ArrowLeft
ArrowRight
Home
End
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Reaction Bar (/docs/components/reaction-bar)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { ReactionBar } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/reaction-bar`.
### States [#states]
`hover` · `focus-visible` · `active` · `disabled` · `read-only` · `expanded`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Resizable (/docs/components/resizable)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { Resizable } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/resizable`.
### States [#states]
`focus-visible`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `window-splitter` pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Rich Text Editor (/docs/components/rich-text-editor)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { RichTextEditor } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/rich-text-editor`.
### States [#states]
`hover` · `active` · `disabled` · `read-only` · `invalid` · `required` · `expanded`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `toolbar` pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Rolling Number (/docs/components/rolling-number)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { RollingNumber } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/rolling-number`.
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Not applicable |
| Density | Not applicable |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Schedule Calendar (/docs/components/schedule-calendar)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { ScheduleCalendar } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/schedule-calendar`.
### States [#states]
`hover` · `focus-visible`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `table` pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Scroll Area (/docs/components/scroll-area)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { ScrollArea } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/scroll-area`.
### States [#states]
`hover` · `focus-visible` · `active`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Security Item (/docs/components/security-item)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { SecurityItem } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/security-item`.
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Segmented Control (/docs/components/segmented-control)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { SegmentedControl } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/segmented-control`.
### Variant props [#variant-props]
| Prop | Values |
| ------ | ------------------ |
| `size` | `sm` · `md` · `lg` |
### Controlled and uncontrolled [#controlled-and-uncontrolled]
Pass the value prop to control it, or the default prop to let the component own it.
| Value | Default | Change |
| ------- | -------------- | --------------- |
| `value` | `defaultValue` | `onValueChange` |
### States [#states]
`hover` · `active` · `disabled`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `radio-group` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Space
ArrowLeft
ArrowRight
### Focus [#focus]
One Tab stop for the group; arrow keys move between items (roving tab stop).
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Select (/docs/components/select)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Examples [#examples]
### Default [#default]
Inside a `Field`, the trigger takes the label and description.
## Usage [#usage]
### Import [#import]
```tsx
import { Select } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/select`.
### Controlled and uncontrolled [#controlled-and-uncontrolled]
Pass the value prop to control it, or the default prop to let the component own it.
| Value | Default | Change |
| ------- | -------------- | --------------- |
| `value` | `defaultValue` | `onValueChange` |
### States [#states]
`hover` · `focus-visible` · `disabled` · `read-only` · `invalid` · `selected` · `open`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `combobox` pattern. Audited.
| Check | Result |
| --------------- | -------------- |
| Semantics | Pass |
| Accessible name | Pass |
| Keyboard | Pass |
| Focus | Pass |
| Screen reader | Pass |
| Right-to-left | Not applicable |
| Reduced motion | Pass |
| Forced colours | Pass |
| Contrast | Pass |
### Keyboard [#keyboard]
Tab
Enter
Space
Escape
ArrowUp
ArrowDown
Home
End
TypeAhead
### Focus [#focus]
One Tab stop for the group; arrow keys move between items (roving tab stop). While open, focus is contained and focus returns on close.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Separator (/docs/components/separator)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Separator } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/separator`.
### Variant props [#variant-props]
| Prop | Values |
| --------- | ------------------- |
| `variant` | `default` · `muted` |
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Client component |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Sheet (/docs/components/sheet)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { Sheet } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/sheet`.
### Controlled and uncontrolled [#controlled-and-uncontrolled]
Pass the value prop to control it, or the default prop to let the component own it.
| Value | Default | Change |
| ------ | ------------- | -------------- |
| `open` | `defaultOpen` | `onOpenChange` |
### States [#states]
`open`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `dialog` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Shift+tab
Escape
### Focus [#focus]
Each control is a Tab stop, in order. While open, focus is contained and focus returns on close.
### Known limitations [#known-limitations]
* **Focus:** Focus containment is enforced with `inert`, which jsdom does not implement, so the tests assert the mechanism is installed rather than observing containment. Browser-level verification is on the manual checklist.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Sidebar (/docs/components/sidebar)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { Sidebar } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/sidebar`.
### Variant props [#variant-props]
| Prop | Values |
| --------- | ----------------------- |
| `variant` | `default` · `outline` |
| `size` | `default` · `sm` · `lg` |
### States [#states]
`hover` · `focus-visible` · `active` · `disabled` · `expanded` · `open`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction, visual and hydration tests.
{/* qeetrix:generated:end */}
# Skeleton (/docs/components/skeleton)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Skeleton } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/skeleton`.
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Skip Nav (/docs/components/skip-nav)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { SkipNav } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/skip-nav`.
### States [#states]
`focus` · `focus-visible`
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Renders on the server |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Enter
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Slider (/docs/components/slider)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Slider } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/slider`.
### States [#states]
`hover` · `focus-visible` · `disabled` · `dragging`
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Renders on the server |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `slider` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
ArrowUp
ArrowDown
ArrowLeft
ArrowRight
Home
End
### Known limitations [#known-limitations]
* **Focus:** Base UI hides the thumb until it has measured the track; jsdom has no layout, so the thumb's range input stays out of the computed accessibility tree and focus cannot be observed. Verified structurally instead; browser-level check is on the manual checklist.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Spinner (/docs/components/spinner)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Spinner } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/spinner`.
### Variant props [#variant-props]
| Prop | Values |
| ------ | ------------------------------ |
| `size` | `sm` · `default` · `lg` · `xl` |
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Renders on the server |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Audited.
| Check | Result |
| --------------- | -------------- |
| Semantics | Pass |
| Accessible name | Pass |
| Keyboard | Not applicable |
| Focus | Not applicable |
| Screen reader | Pass |
| Right-to-left | Not applicable |
| Reduced motion | Pass |
| Forced colours | Pass |
| Contrast | Pass |
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Spoiler (/docs/components/spoiler)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Spoiler } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/spoiler`.
### Controlled and uncontrolled [#controlled-and-uncontrolled]
Pass the value prop to control it, or the default prop to let the component own it.
| Value | Default | Change |
| ---------- | ----------------- | ------------------ |
| `expanded` | `defaultExpanded` | `onExpandedChange` |
### States [#states]
`hover` · `focus-visible` · `expanded`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `disclosure` pattern. Audited.
| Check | Result |
| --------------- | -------------- |
| Semantics | Pass |
| Accessible name | Pass |
| Keyboard | Pass |
| Focus | Pass |
| Screen reader | Pass |
| Right-to-left | Not applicable |
| Reduced motion | Not applicable |
| Forced colours | Pass |
| Contrast | Pass |
### Keyboard [#keyboard]
Tab
Enter
Space
### Focus [#focus]
Each control is a Tab stop, in order.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Stat (/docs/components/stat)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Stat } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/stat`.
### Variant props [#variant-props]
| Prop | Values |
| ------ | ----------------------- |
| `size` | `sm` · `default` · `lg` |
### States [#states]
`loading` · `busy`
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Status Pill (/docs/components/status-pill)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { StatusPill } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/status-pill`.
### States [#states]
`active` · `disabled`
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Stepper (/docs/components/stepper)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Stepper } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/stepper`.
### States [#states]
`active` · `invalid`
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Renders on the server |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Switch (/docs/components/switch)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Switch } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/switch`.
### States [#states]
`hover` · `focus-visible` · `disabled` · `read-only` · `invalid` · `checked`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not declared |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `switch` pattern. Not yet audited.
### Keyboard [#keyboard]
Space
Tab
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Table of Contents (/docs/components/table-of-contents)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { TableOfContents } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/table-of-contents`.
### States [#states]
`hover` · `focus-visible` · `active`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Table (/docs/components/table)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { Table } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/table`.
### States [#states]
`hover` · `focus-visible`
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Renders on the server |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `table` pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Tabs (/docs/components/tabs)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Examples [#examples]
### Default [#default]
The contained style, for tabs inside a card or a panel.
### Line [#line]
`variant="line"` on `TabsList` puts the tabs on a track with an underline for the selected one, for page- and section-level navigation.
## Usage [#usage]
### Import [#import]
```tsx
import { Tabs } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/tabs`.
### Variant props [#variant-props]
| Prop | Values |
| --------- | ------------------ |
| `variant` | `default` · `line` |
### Controlled and uncontrolled [#controlled-and-uncontrolled]
Pass the value prop to control it, or the default prop to let the component own it.
| Value | Default | Change |
| ------- | -------------- | --------------- |
| `value` | `defaultValue` | `onValueChange` |
### States [#states]
`hover` · `focus-visible` · `active` · `disabled`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `tabs` pattern. Audited.
| Check | Result |
| --------------- | ------ |
| Semantics | Pass |
| Accessible name | Pass |
| Keyboard | Pass |
| Focus | Pass |
| Screen reader | Pass |
| Right-to-left | Pass |
| Reduced motion | Pass |
| Forced colours | Pass |
| Contrast | Pass |
### Keyboard [#keyboard]
Tab
Enter
Space
ArrowLeft
ArrowRight
Home
End
### Focus [#focus]
One Tab stop for the group; arrow keys move between items (roving tab stop).
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Tag Input (/docs/components/tag-input)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { TagInput } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/tag-input`.
### States [#states]
`hover` · `focus-visible` · `disabled` · `read-only` · `invalid`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Enter
Backspace
Delete
ArrowLeft
ArrowRight
Home
End
Escape
### Announcements [#announcements]
Announced politely: screen readers read it when the user is idle.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Textarea (/docs/components/textarea)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Textarea } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/textarea`.
### States [#states]
`hover` · `focus-visible` · `disabled` · `read-only` · `invalid`
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Renders on the server |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Time Picker (/docs/components/time-picker)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { TimePicker } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/time-picker`.
### States [#states]
`disabled` · `invalid`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Time Range Picker (/docs/components/time-range-picker)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { TimeRangePicker } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/time-range-picker`.
### States [#states]
`hover` · `disabled`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Time Since (/docs/components/time-since)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { TimeSince } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/time-since`.
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Client component |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), visual and hydration tests.
{/* qeetrix:generated:end */}
# Timeline (/docs/components/timeline)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { Timeline } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/timeline`.
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Timer (/docs/components/timer)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { Timer } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/timer`.
### States [#states]
`disabled`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
### Announcements [#announcements]
Announced politely: screen readers read it when the user is idle.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Timezone Picker (/docs/components/timezone-picker)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { TimezonePicker } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/timezone-picker`.
### Controlled and uncontrolled [#controlled-and-uncontrolled]
Pass the value prop to control it, or the default prop to let the component own it.
| Value | Default | Change |
| ------- | -------------- | ---------- |
| `value` | `defaultValue` | `onChange` |
### States [#states]
`disabled` · `invalid` · `required`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction, visual and hydration tests.
{/* qeetrix:generated:end */}
# Toast (/docs/components/toast)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Examples [#examples]
### Types [#types]
Each type sets the icon and accent. Toasts stack, pause on hover and announce politely.
### With action [#with-action]
`actionProps` adds one button, typically Undo for a reversible action.
## Usage [#usage]
### Import [#import]
```tsx
import { Toast } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/toast`.
### States [#states]
`hover` · `focus-visible`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `alert` pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Toggle Tip (/docs/components/toggle-tip)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { ToggleTip } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/toggle-tip`.
### States [#states]
`hover`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Toggle (/docs/components/toggle)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Toggle } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/toggle`.
### Variant props [#variant-props]
| Prop | Values |
| --------- | ----------------------- |
| `variant` | `default` · `outline` |
| `size` | `default` · `sm` · `lg` |
### States [#states]
`hover` · `focus-visible` · `active` · `disabled` · `invalid`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `button` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Enter
Space
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Toolbar (/docs/components/toolbar)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Toolbar } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/toolbar`.
### Variant props [#variant-props]
| Prop | Values |
| --------- | ------------------- |
| `variant` | `default` · `ghost` |
### States [#states]
`hover` · `focus-visible` · `active` · `disabled`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Not applicable |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
Follows the WAI-ARIA `toolbar` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
ArrowLeft
ArrowRight
Home
End
### Focus [#focus]
One Tab stop for the group; arrow keys move between items (roving tab stop).
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Tooltip (/docs/components/tooltip)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Tooltip } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/tooltip`.
### States [#states]
`open`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `tooltip` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Escape
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Tour (/docs/components/tour)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
Ready to use, but its API may still change before it is marked stable.
## Usage [#usage]
### Import [#import]
```tsx
import { Tour } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/tour`.
### Controlled and uncontrolled [#controlled-and-uncontrolled]
Pass the value prop to control it, or the default prop to let the component own it.
| Value | Default | Change |
| ------ | ------------- | -------------- |
| `open` | `defaultOpen` | `onOpenChange` |
### States [#states]
`hover` · `open`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `dialog` pattern. Not yet audited.
### Keyboard [#keyboard]
Tab
Shift+tab
Escape
ArrowLeft
ArrowRight
### Focus [#focus]
Each control is a Tab stop, in order. While open, focus is contained and focus returns on close.
## Tests [#tests]
Covered by unit, accessibility (axe), interaction, visual and hydration tests.
{/* qeetrix:generated:end */}
# Tree View (/docs/components/tree-view)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { TreeView } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/tree-view`.
### States [#states]
`hover` · `focus-visible` · `disabled` · `selected` · `expanded` · `open`
## Support [#support]
| Feature | Status |
| ---------------- | ---------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Supported |
| Server rendering | Client component |
| Reduced motion | Supported |
## Accessibility [#accessibility]
Follows the WAI-ARIA `treeview` pattern. Audited.
| Check | Result |
| --------------- | ------ |
| Semantics | Pass |
| Accessible name | Pass |
| Keyboard | Pass |
| Focus | Pass |
| Screen reader | Pass |
| Right-to-left | Pass |
| Reduced motion | Pass |
| Forced colours | Pass |
| Contrast | Pass |
### Keyboard [#keyboard]
Tab
Enter
ArrowUp
ArrowDown
ArrowLeft
ArrowRight
Home
End
Asterisk
TypeAhead
### Focus [#focus]
One Tab stop for the group; arrow keys move between items (roving tab stop).
## Tests [#tests]
Covered by unit, accessibility (axe), interaction and visual tests.
{/* qeetrix:generated:end */}
# Typography (/docs/components/typography)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { Typography } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/typography`.
### Variant props [#variant-props]
| Prop | Values |
| --------- | ------------------------------------------------------------------------------------------------------------- |
| `variant` | `h1` · `h2` · `h3` · `h4` · `p` · `blockquote` · `lead` · `large` · `small` · `muted` · `inlineCode` · `list` |
| `size` | `md` · `sm` |
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Supported |
| Dark mode | Supported |
| Density | Not applicable |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Visually Hidden (/docs/components/visually-hidden)
{/* qeetrix:generated:start — rewritten from @qeetrix/ui's component manifest by `bun run generate:components`. Write your own sections below the end marker. */}
## Usage [#usage]
### Import [#import]
```tsx
import { VisuallyHidden } from "@qeetrix/ui";
```
It can also be imported on its own from `@qeetrix/ui/components/visually-hidden`.
## Support [#support]
| Feature | Status |
| ---------------- | --------------------- |
| Right-to-left | Not applicable |
| Dark mode | Not applicable |
| Density | Not applicable |
| Server rendering | Renders on the server |
| Reduced motion | Not applicable |
## Accessibility [#accessibility]
No ARIA widget pattern. Not yet audited.
## Tests [#tests]
Covered by unit, accessibility (axe) and visual tests.
{/* qeetrix:generated:end */}
# Colour (/docs/foundations/colors)
Build with the semantic roles. Each one has a meaning and a value for each theme, and every text
and surface pair the roles are designed for meets WCAG AA contrast. Colour is authored in OKLCH.
The **Tailwind** column gives each colour's utility with `bg-`; the same name works with `text-`,
`border-` and the other colour utilities. Roles without a utility of their own are used through the
variable.
## Text [#text]
## Surface [#surface]
## Border [#border]
## Action [#action]
## Feedback [#feedback]
## Focus, selection and overlay [#focus-selection-and-overlay]
## Palette [#palette]
The primitive ramps the roles are built from. They're published in `@qeetrix/ui/tokens.css` for
design tooling, but not in `styles.css`: build with the roles above. Hover a step for its variable
and value.
# Elevation (/docs/foundations/elevation)
Elevation is the role a surface plays, and the shadow is the value it renders with: a component
picks `raised`, `overlay` or `modal`, never a shadow number, so the whole ladder can be retuned in
one place. In the dark theme the shadows are deeper, and surfaces also step up in lightness as they
rise (see the surface roles in [Colour](/docs/foundations/colors#surface)).
Each role is shown on a light and on a dark surface.
Tailwind's own shadow scale, `shadow-2xs` to `shadow-xl`, is remapped onto the same ladder, so a
generic `shadow-md` in product code is a Qeetrix shadow too.
# Icons (/docs/foundations/icons)
`@qeetrix/icons` has 1,863 icons, each drawn in a round and a sharp shape, plus Qeet's own logo and
wordmark.
## Import an icon [#import-an-icon]
Import icons from the package root:
```tsx
import { StarIcon, TrashIcon } from "@qeetrix/icons";
export function Favourite() {
return ;
}
```
### In a library [#in-a-library]
Bundlers keep only the icons you import. Code that runs without a bundler — a test runner or a
script — loads every icon from the root, about 1.6 s once per process in plain Node. A library
that apps test against, like `@qeetrix/ui`, imports each icon from its own path instead, so its
consumers never pay that:
```tsx
import { StarIcon } from "@qeetrix/icons/icons/star";
```
## Shape, variant and size [#shape-variant-and-size]
```tsx
```
| Prop | Values | Default |
| --------- | ------------------------- | ----------- |
| `shape` | `"round"` · `"sharp"` | `"round"` |
| `variant` | `"outline"` · `"filled"` | `"outline"` |
| `size` | pixels, or any CSS length | — |
Every icon has both shapes. `variant` is typed per icon, so asking for a drawing that an icon doesn't
have is a type error. Icons also accept any `