SKILL.md
unovue/reka-ui [email protected]
Tags: latest: 2.9.7
References: [Docs](./references/docs/_INDEX.md)
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](./references/docs/content/docs/guides/migration.md)
- BREAKING:
Comboboxrefactor —filter-functionprop removed;searchTermanddisplayValueprops moved from Root toComboboxInput[source](./references/docs/content/docs/guides/migration.md)
- BREAKING:
Checkbox,Toggle,MenuCheckboxItem— bindings changed fromv-model:checkedorv-model:pressedto standardv-model[source](./references/docs/content/docs/guides/migration.md)
- BREAKING:
DatePicker/Calendar—weekStartsOnis now locale-independent as of v2.8.0 [source](./references/releases/v2.8.0.md)
- BREAKING:
Presence—forceMountnow renders components regardless of active state; manual visibility handling (e.g.:hidden) is required [source](./references/docs/content/docs/guides/migration.md)
- BREAKING:
Pagination—itemsPerPageprop is now required rather than having a default value [source](./references/docs/content/docs/guides/migration.md)
- NEW:
Ratingcomponent — added for star/rating input interactions in v2.8.0 [source](./references/releases/v2.8.0.md)
- NEW:
TimeFieldcomponent — new primitive for localized time inputs introduced in v2.0.0 [source](./references/releases/v2.0.0.md)
- NEW:
useFilter()— locale-aware string filtering utility (startsWith, endsWith, contains) added in v2.0.0 [source](./references/releases/v2.0.0.md)
- NEW:
useLocale()/useDirection()— utility hooks for accessing the current configuration context [source](./references/releases/v2.6.0.md)
- NEW:
ScrollAreaglimpse mode — addedScrollAreaScrollbarGlimpsefor transient scrollbar visibility [source](./references/releases/v2.8.0.md)
- NEW:
SelectdisableOutsidePointerEvents— prop added toSelectContentto control interaction with outside elements [source](./references/releases/v2.7.0.md)
- NEW:
ConfigProvider— global configuration component for locale, direction, anduseIdsettings [source](./references/releases/v2.0.0.md)
- NEW:
NumberFieldenhancements — addedfocusOnChange,readonly, andstepSnappingprops [source](./references/releases/v2.8.0.md)
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](./references/docs/content/docs/guides/composition.md)
<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](./references/docs/content/docs/utilities/use-forward-props-emits.md)
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](./references/docs/content/docs/utilities/config-provider.md)
<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](./references/docs/content/docs/utilities/use-forward-expose.md)
const { forwardRef } = useForwardExpose()
// Usage: <div :ref="forwardRef">...</div>
- Implement
ComboboxVirtualizerorListboxVirtualizerfor large datasets to improve performance, ensuring the parent container has a fixed height [source](./references/docs/content/docs/guides/virtualization.md)
<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](./references/docs/content/docs/guides/inject-context.md)
- Style component states by targeting
data-stateattributes (e.g.,open,closed,active) instead of manually toggling classes [source](./references/docs/content/docs/guides/styling.md)
/* 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](./references/docs/content/docs/guides/styling.md)
- Enable
force-mounton content parts when using JavaScript animation libraries or Vue<Transition>to delegate unmounting control to the library [source](./references/docs/content/docs/guides/animation.md)
<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](./references/docs/content/docs/utilities/use-id.md)