Reka ui skilld
Vue port for Radix UI Primitives. ALWAYS use when writing code importing "reka-ui". Consult for debugging, best practices, or modifying reka-ui, reka ui.From its SKILL.md
npx -y skills add skilld-dev/vue-ecosystem-skills --skill reka-ui-skilldAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
6.1 KB, as published. Nobody here has run it
unovue/reka-ui [email protected]
Tags: latest: 2.9.7
References: Docs
API Changes
This section documents version-specific API changes — prioritize recent major/minor releases.
-
BREAKING:
radix-vuerenamed toreka-ui— CSS variables now use--reka-prefix and data attributes usedata-reka-source -
BREAKING:
Comboboxrefactor —filter-functionprop removed;searchTermanddisplayValueprops moved from Root toComboboxInputsource -
BREAKING:
Checkbox,Toggle,MenuCheckboxItem— bindings changed fromv-model:checkedorv-model:pressedto standardv-modelsource -
BREAKING:
DatePicker/Calendar—weekStartsOnis now locale-independent as of v2.8.0 source -
BREAKING:
Presence—forceMountnow renders components regardless of active state; manual visibility handling (e.g.:hidden) is required source -
BREAKING:
Pagination—itemsPerPageprop is now required rather than having a default value source -
NEW:
Ratingcomponent — added for star/rating input interactions in v2.8.0 source -
NEW:
TimeFieldcomponent — new primitive for localized time inputs introduced in v2.0.0 source -
NEW:
useFilter()— locale-aware string filtering utility (startsWith, endsWith, contains) added in v2.0.0 source -
NEW:
useLocale()/useDirection()— utility hooks for accessing the current configuration context source -
NEW:
ScrollAreaglimpse mode — addedScrollAreaScrollbarGlimpsefor transient scrollbar visibility source -
NEW:
SelectdisableOutsidePointerEvents— prop added toSelectContentto control interaction with outside elements source -
NEW:
ConfigProvider— global configuration component for locale, direction, anduseIdsettings source -
NEW:
NumberFieldenhancements — addedfocusOnChange,readonly, andstepSnappingprops source
Also changed: Popover/Dialog programmatic close · Combobox openOnFocus props · Slider thumbAlignment prop · Toast disableSwipe prop · ContextMenu pressOpenDelay prop · Presence component exposed · calendar getWeekNumber utility · injectContext exposed · Collapsible/Accordion unmountOnHide prop
Best Practices
- Use the
asChildprop to compose Reka's functionality onto your own Vue components or alternative DOM elements while maintaining accessibility source
<TooltipTrigger asChild>
<MyButton>Hover me</MyButton>
</TooltipTrigger>
- Utilize
useForwardPropsEmitswhen building wrapper components to automatically forward all props and emits to the underlying Reka primitive source
const props = defineProps<AccordionRootProps>()
const emits = defineEmits<AccordionRootEmits>()
const forwarded = useForwardPropsEmits(props, emits)
// Usage: <AccordionRoot v-bind="forwarded">
- Wrap your application with
ConfigProviderto manage global reading direction (RTL) and prevent layout shifts during scroll locking source
<ConfigProvider dir="rtl" :scroll-body="false">
<App />
</ConfigProvider>
- Apply
useForwardExposein components with multiple root nodes (fragments) to ensure that template refs correctly return the target DOM element source
const { forwardRef } = useForwardExpose()
// Usage: <div :ref="forwardRef">...</div>
- Implement
ComboboxVirtualizerorListboxVirtualizerfor large datasets to improve performance, ensuring the parent container has a fixed height source
<ComboboxViewport class="max-h-80 overflow-y-auto">
<ComboboxVirtualizer :options="items" :estimate-size="25" v-slot="{ option }">
<ComboboxItem :value="option">{{ option.label }}</ComboboxItem>
</ComboboxVirtualizer>
</ComboboxViewport>
-
Use
injectXContextfunctions (e.g.,injectAccordionRootContext) to access internal primitive state for advanced custom child components source -
Style component states by targeting
data-stateattributes (e.g.,open,closed,active) instead of manually toggling classes source
/* Preferred way to style open state */
.AccordionItem[data-state="open"] {
border-bottom-width: 2px;
}
-
Use the
:deep()selector when styling teleported components (Dialog, Popover, Tooltip) within scoped Vue styles to reach the body-appended elements source -
Enable
force-mounton content parts when using JavaScript animation libraries or Vue<Transition>to delegate unmounting control to the library source
<Transition name="fade">
<DialogContent force-mount>...</DialogContent>
</Transition>
- Prefer Vue 3.5 native
useId()over the Reka UI utility for stable SSR identifiers, as the library utility is deprecated for newer Vue versions source