reka-ui
SKILL.md
Reka UI
Reka UI is an open-source Vue 3 component library providing unstyled, accessible primitive components. Built on WAI-ARIA standards with full keyboard navigation and focus management.
When to use this skill
Use this skill when:
- Building Vue 3 UI components with Reka UI primitives
- Need reference for Reka UI component APIs (props, events, slots)
- Implementing accessible UI patterns (dialogs, menus, selects, etc.)
- Working with date/time components using
@internationalized/date - Composing custom components with
asChildprop - Styling Reka UI components with Tailwind CSS or custom CSS
- Wrapping Reka UI primitives with forwarded props/emits
- Migrating from Radix Vue to Reka UI
Installation
npm add reka-ui
Nuxt Module
export default defineNuxtConfig({
modules: ['reka-ui/nuxt'],
})
unplugin-vue-components
import Components from 'unplugin-vue-components/vite'
import RekaResolver from 'reka-ui/resolver'
export default defineConfig({
plugins: [
vue(),
Components({
dts: true,
resolvers: [RekaResolver()],
}),
],
})
Date Components Prerequisite
Date and time components require @internationalized/date:
npm add @internationalized/date
Usage Rules
- Reka UI components are unstyled - you control all styling (CSS, Tailwind, etc.)
- Import components individually:
import { DialogRoot, DialogContent } from 'reka-ui' - Components follow a compound pattern: Root > Trigger > Content (with sub-parts)
- Use
v-modelfor controlled state,defaultValuefor uncontrolled - Use the
asChildprop to compose primitives onto your own elements - Stateful components expose
data-stateattributes for CSS targeting - Use
forceMountprop when animating with JS animation libraries - Wrap app in
ConfigProviderfor global RTL/locale/scroll settings - Use
TooltipProviderandToastProviderat app root level - Date components use
DateValueobjects from@internationalized/date, not native Date
Key Concepts
Composition with asChild
Merge primitive behavior onto your own elements:
<DialogTrigger asChild>
<MyButton>Open</MyButton>
</DialogTrigger>
Data Attributes for Styling
.AccordionContent[data-state="open"] {
animation: slideDown 300ms ease-out;
}
.AccordionContent[data-state="closed"] {
animation: slideUp 300ms ease-out;
}
CSS Variables for Animation
Some components expose sizing CSS variables:
--reka-accordion-content-width/--reka-accordion-content-height--reka-collapsible-content-width/--reka-collapsible-content-height
Controlled vs Uncontrolled
<!-- Uncontrolled -->
<AccordionRoot defaultValue="item-1">
<!-- Controlled -->
<AccordionRoot v-model="activeItem">
Animation with Vue Transition
<DialogContent forceMount>
<Transition name="fade">
<div v-if="open">Content</div>
</Transition>
</DialogContent>
Component Index
Load component docs on-demand from components/ folder.
Form Components
| Component | File | Description |
|---|---|---|
| Autocomplete | autocomplete.md |
Input with suggestions, value is text itself |
| Checkbox | checkbox.md |
Toggle between checked and unchecked |
| Combobox | combobox.md |
Searchable select with keyboard support |
| Editable | editable.md |
Inline editable text |
| Label | label.md |
Accessible label for controls |
| Listbox | listbox.md |
Selectable list of items |
| Number Field | number-field.md |
Numeric input with increment/decrement |
| Pin Input | pin-input.md |
Sequence of one-character inputs |
| Radio Group | radio-group.md |
Single selection from a group |
| Select | select.md |
Dropdown selection list |
| Slider | slider.md |
Range input with draggable thumb |
| Switch | switch.md |
Toggle between on and off |
| Tags Input | tags-input.md |
Input for multiple tag values |
| Toggle | toggle.md |
Two-state on/off button |
| Toggle Group | toggle-group.md |
Set of toggle buttons |
Color Components
| Component | File | Description |
|---|---|---|
| Color Area | color-area.md |
2D area for color selection |
| Color Field | color-field.md |
Input for color values |
| Color Slider | color-slider.md |
Slider for color channels |
| Color Swatch | color-swatch.md |
Color preview display |
| Color Swatch Picker | color-swatch-picker.md |
Picker with color swatches |
Date & Time Components
| Component | File | Description |
|---|---|---|
| Calendar | calendar.md |
Date calendar view |
| Date Field | date-field.md |
Segmented date input |
| Date Picker | date-picker.md |
Date input with calendar popup |
| Date Range Field | date-range-field.md |
Segmented date range input |
| Date Range Picker | date-range-picker.md |
Date range with calendar popup |
| Range Calendar | range-calendar.md |
Calendar for date ranges |
| Time Field | time-field.md |
Segmented time input |
| Time Range Field | time-range-field.md |
Segmented time range input |
| Month Picker | month-picker.md |
Calendar for month selection |
| Month Range Picker | month-range-picker.md |
Calendar for month ranges |
| Year Picker | year-picker.md |
Calendar for year selection |
| Year Range Picker | year-range-picker.md |
Calendar for year ranges |
General Components
| Component | File | Description |
|---|---|---|
| Accordion | accordion.md |
Expandable/collapsible content sections |
| Alert Dialog | alert-dialog.md |
Modal dialog requiring a response |
| Aspect Ratio | aspect-ratio.md |
Content within a desired ratio |
| Avatar | avatar.md |
Image with fallback for user display |
| Collapsible | collapsible.md |
Expandable/collapsible panel |
| Context Menu | context-menu.md |
Right-click menu |
| Dialog | dialog.md |
Modal window overlay |
| Dropdown Menu | dropdown-menu.md |
Menu triggered by a button |
| Hover Card | hover-card.md |
Content preview on hover |
| Menubar | menubar.md |
Horizontal menu bar |
| Navigation Menu | navigation-menu.md |
Site navigation links |
| Pagination | pagination.md |
Page navigation controls |
| Popover | popover.md |
Content popup triggered by button |
| Progress | progress.md |
Progress indicator bar |
| Scroll Area | scroll-area.md |
Custom cross-browser scroll |
| Separator | separator.md |
Visual/semantic content divider |
| Splitter | splitter.md |
Resizable panel layout |
| Stepper | stepper.md |
Multi-step process indicator |
| Tabs | tabs.md |
Tabbed content panels |
| Toast | toast.md |
Temporary notification messages |
| Toolbar | toolbar.md |
Grouped controls container |
| Tooltip | tooltip.md |
Hover/focus information popup |
| Tree | tree.md |
Hierarchical expandable list |
Guides Index
Load guide docs on-demand from guides/ folder.
| Guide | File | Description |
|---|---|---|
| Introduction | introduction.md |
Overview of Reka UI |
| Getting Started | getting-started.md |
Quick start tutorial |
| Installation | installation.md |
Installation methods |
| Accessibility | accessibility.md |
WAI-ARIA compliance details |
| Styling | styling.md |
CSS, Tailwind, and data attributes |
| Animation | animation.md |
CSS, Vue Transition, and Motion Vue |
| Composition | composition.md |
asChild prop and component composition |
| Controlled State | controlled-state.md |
v-model vs defaultValue patterns |
| Dates | dates.md |
Working with @internationalized/date |
| I18n | i18n.md |
RTL and internationalization |
| SSR | server-side-rendering.md |
Server-side rendering |
| Virtualization | virtualization.md |
Large dataset rendering |
| Namespaced | namespaced-components.md |
Namespaced component imports |
| Inject Context | inject-context.md |
Context injection patterns |
| Migration | migration.md |
Migrating from Radix Vue |
| Releases | releases.md |
Release information |
Utilities Index
Load utility docs on-demand from utilities/ folder.
Components
| Utility | File | Description |
|---|---|---|
| ConfigProvider | config-provider.md |
Global config (locale, dir, scroll) |
| FocusScope | focus-scope.md |
Focus trapping |
| Presence | presence.md |
Mount/unmount with transitions |
| Primitive | primitive.md |
Base primitive component |
| RovingFocus | roving-focus.md |
Roving tabindex focus management |
| Slot | slot.md |
Prop merging onto child |
| VisuallyHidden | visually-hidden.md |
Screen-reader-only content |
Composables
| Composable | File | Description |
|---|---|---|
| useId | use-id.md |
Generate unique IDs (deprecated: use Vue 3.5+) |
| useDateFormatter | use-date-formatter.md |
Locale-aware date formatting |
| useDirection | use-direction.md |
Access current text direction |
| useLocale | use-locale.md |
Access current locale |
| useEmitAsProps | use-emit-as-props.md |
Convert emits to prop handlers |
| useFilter | use-filter.md |
Locale-aware string filtering |
| useForwardExpose | use-forward-expose.md |
Forward template ref $el |
| useForwardProps | use-forward-props.md |
Forward props without boolean casting |
| useForwardPropsEmits | use-forward-props-emits.md |
Combined props + emits forwarding |
Weekly Installs
3
Repository
pzyyll/ai-agentsFirst Seen
12 days ago
Security Audits
Installed on
opencode3
claude-code3
mcpjam1
kilo1
windsurf1
zencoder1