npm / reka-ui
reka-ui
What changed in reka-ui 2, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-18.
5 breaking1 security48 new APIs and options6 performance15 behavior and defaults171 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli initreka-ui 2246 changes
Breaking changes 5
Changes the payload type of RadioGroupRootEmits to AcceptableValue.
OTP inputs are now enforced sequentially.
DatePicker, DateRangePicker, Calendar, and RangeCalendar now treat weekStartsOn independently of locale.
The select arrow is always shown, leaving display decisions to the select content.
Combobox no longer focuses the trigger element after closing.
Security 1
Correctly sets referrerpolicy and crossorigin.
New APIs and options 48
Adds a max prop.
Adds an unmountOnHide prop.
Supports a controlled open state.
Adds a provider for software keyboards.
Adds Field and Form primitives.
Adds Field and Form primitives.
Adds a slot prop to item components across Select, Listbox, Combobox, Menu, ContextMenu, DropdownMenu, Menubar, and ColorSwatchPicker.
Adds forceMount to item indicator components across Select, Listbox, Combobox, Menu, ContextMenu, DropdownMenu, Menubar, and ColorSwatchPicker.
Allows grace customization.
Adds an allowInvalid prop.
Adds startingValue for increment and decrement.
Adds the TagGroup component.
Allows an action without dismissing the toast.
Adds a toast manager.
Adds teleportTo as the global default teleport target.
Adds support for stepSnapping.
Adds the unmountOnHide prop.
Adds the Drawer primitive.
Adds the enableTouch prop for touch devices.
Adds the dir prop for RTL/LTR support.
Exposes the Rating component.
Exposes a CSS variable for controlling the tabs indicator thickness.
Adds the nullableValue prop.
Adds disabled support for TreeItem.
A new Autocomplete component is available.
Checkbox supports custom true and false values.
Color components are added.
DropdownMenu adds a filter component.
The Menu component is exported via /internal.
A month picker component is added.
Splitter supports pixel sizing and constraints.
Switch supports custom true and false values.
A new TimeRangeField component is available.
Tooltip content can be configured globally.
A year picker component is added.
ScrollArea adds a glimpse scrollbar mode.
Adds a focusOnChange prop to NumberField.
Adds hideShiftedArrow to control arrow visibility.
Adds a new Rating component.
TimeField supports stepSnapping.
Adds the disableOutsidePointerEvents prop to Select Content.
useForwardExpose exposes specified ref properties to the parent ref.
Enable min/max validation within a form.
Adds a Combobox property to clear modelValue when the user cancels.
Adds a Toast prop to disable swipe-to-close.
Combobox now allows configuring highlightOnHover.
Exposes the useDirection composable for application use.
Exposes the useLocale composable for application use.
Performance 6
ListboxItem includes $attrs in its v-memo dependencies, and highlighting avoids scanning the collection.
contains short-circuits on an exact substring match.
Skips work for bubbled animation events.
Skips the label querySelector when aria-label is provided.
Replaces indexOf sorting with a node index map.
Production tree-shaking is improved, which can reduce unused code in production builds.
Behavior and default changes 15
Enhances keyboard navigation with Home, End, PageUp, and PageDown shortcuts.
Adds loop keyboard navigation to Listbox, Select, and Tree.
Enhances keyboard navigation with Home, End, PageUp, and PageDown shortcuts.
Adds loop keyboard navigation to Listbox, Select, and Tree.
Adds loop keyboard navigation to Listbox, Select, and Tree.
StepperIndicator now defaults to rendering as a span.
The default for present is true, so scopes without it still pause ancestor traps.
Type inference is enhanced for useEmitAsProps and useForwardPropsEmits.
Type inference is enhanced for useEmitAsProps and useForwardPropsEmits.
Prioritizes the hour-cycle prop over the internal locale.
Defaults weekStartsOn based on locale in DatePicker, DateRangePicker, Calendar, and RangeCalendar.
Menu supports more value types.
Listbox and Tree now handle estimateSize as a function for the Virtualizer.
Focus the input only when the Combobox is opened.
Allow selecting the end date as the new start date.
Fixes and other changes 171
Clears a stale filter when cancelling a blurred input.
Keeps the visible month when modelValue is replaced with a new object representing the same day.
Keeps the pointer anchor while the menu closes.
Detects outside interactions inside an iframe.
Shares one ref-counted owner for body pointer-events.
Allows touch swipes to start on interactive elements.
Accepts initialFocus and finalFocus elements from another realm.
Lets consumers cancel a swipe dismissal.
Traps focus inside a shadow root.
Respects tabindex order during autofocus.
Corrects emitted event types to match runtime behavior.
Hides half-step indicators consistently during SSR.
Ignores residual mousemove events after the pointer enters an iframe.
Prevents form submission synchronously on Enter.
Synchronizes segments when the value changes externally.
Trigger event handlers now respect defaultPrevented.
Keeps focusable content in the accessibility tree.
Auto-focus is re-keyed on presence when the dialog is force-mounted.
Inside pointerdown drops a stale deferred click listener, and the layer root is treated as inside to prevent dismissal when a FocusScope container is focused.
The content now applies initialFocus and finalFocus.
The focus event target is preserved across nextTick so submenus stay open.
Touch stepper activation is deferred.
The numeric v-model type reflects undefined values.
Tab is no longer trapped inside the inputs in OTP mode.
Space is excluded from typeahead search.
The resize handle hover state resets when the pointer enters an iframe.
Tooltips stop referencing a stale trigger after it is replaced, and hoverable content closes when it covers another trigger.
Keyboard events originating in a text field are left alone.
The day period is derived from the ZonedDateTime's own time zone and from the hour rather than a localized string.
Select and Popover omit aria-controls while their content is not rendered.
Highlight scrolling is deferred until Popper placement, preventing scrolling before the content is positioned.
Outside pointerdown events are ignored while the layer is not present.
Unmounting a branch removes its stale element from the registry.
Clicking the trigger toggles the drawer's open state.
Swipe gestures on scrollable content are locked to one axis.
Focus is moved to the container only after confirming it is orphaned.
The item value is no longer used as a fallback for aria-label.
The open broadcast is received on document instead of window.
Advances segment focus in DOM order in RTL.
Keeps body pointer-events locked when the last scroll lock releases.
Tracks drags in non-dismissable directions so the drawer pulls elastically.
Processes Android soft-keyboard composition live for filters.
Allows backspacing through a formatted unit suffix.
Resets hover state on mouse leave when hoverable.
Validates an empty group silently.
Removes a stale trigger element from totalStepperItems on unmount.
Keeps disabled tags out of the keyboard removal index.
Advances segment focus in DOM order in RTL.
Removes viewport listeners when a toast is dismissed.
Splitter panels using px sizeUnit now receive data-state="collapsed" when collapsed.
Tab can move focus out of a non-modal DropdownMenu.
Enter and Space keydowns are consumed only when no modifier key is held.
Prevents a sub-menu focus fight when it opens on top of its trigger.
Stepping snaps an off-grid value to the nearest grid line.
The parent scope id is forwarded onto the RadioGroupItem control.
Preserves the pointer events lock.
On initial focus, focuses the first day when there is no selected or today cell.
Un-nests the hidden form input to fix nested-interactive accessibility.
Memoizes content subtree updates.
Prevents suppression of the mousedown event.
Toolbar forwards disabled to ToolbarButton and updates the focusable count reactively.
Disconnects ResizeObserver on unmount.
Combobox content stays open when interacting with its associated label.
Modal content now honors disableOutsidePointerEvents.
Body pointer events remain locked when a nested layer closes.
A virtualized list no longer scrolls the page on mount.
On Vue 3.5+, ConfigProvider's useId option takes precedence over Vue's native useId, matching documented behavior and avoiding SSR hydration mismatches when an app provides a stable ID source.
Defers handleBlur close so FocusScope can restore focus.
Resets the time after the value is cleared.
Scopes overlay pointerdown prevention to the overlay itself.
IME composition is handled correctly across input components.
Prevents page scrolling on mount caused by changeHighlight.
Updates NavigationMenu behavior to match Radix UI's navigation menu.
Clears scrollbar registration on unmount so the corner stays in sync.
This attribute is added during focus restoration.
Menu and Listbox no longer flash data-highlighted on mount.
The modelValue prop type now aligns with sibling pickers.
Focus is restored to the trigger after an overlay click.
Changes to disabled and focusable are included in v-memo dependencies.
Dismiss events from inactive content are ignored.
The attribute is removed when the pointer leaves a MenuItem.
Side effects from highlightSelected are skipped during SSR.
Missing shared types are exported to prevent TS2742 errors in consumer projects.
Indicator rendering is deferred until mount to avoid hydration mismatches.
The title and description are announced as text rather than JSON.
Preserve the day when selecting a month.
Change focus after pressing 0 more than once on the hour segment in 12-hour locales.
Export the missing TimeRange type so developers can use it from the package.
Preserve the month when selecting a year.
Prevents /*#__PURE__*/ annotations from appearing inside function declarations.
Fixes date values being passed directly and incorrectly to the input element.
Avoids changing focus prematurely when the previous segment value is 0.
Ignores non-element VNodes among slot children.
Namespaced components are generated automatically during the build.
Normalizes the hidden control.
Avoids changing focus prematurely when the previous segment value is 0.
Autocomplete handles IME composition input.
ColorFieldRoot forwards custom attributes.
addOnBlur no longer adds raw input when an item is selected.
FocusScope no longer moves focus when a DOM mutation occurs before any nodes have focus.
HoverCard closes when a scrollable ancestor is scrolled.
Restores highlightOnHover behavior.
In numeric mode, pasting accepts only numeric text.
SelectItemEmits is now exported for use in TypeScript.
Tooltip closes when a scrollable ancestor is scrolled.
useForwardProps returns Partial<T> so optional boolean props are typed correctly.
Grace area creation guards against a missing hover target.
Removed an HTML comment that broke attrs forwarding in production.
Fixed sub triggers not highlighting on pointermove.
Fixed nested px groups ignoring defaultSize and causing percentage drift.
Added handling for browsers without :popover-open support, including Safari 18.
Adds role="application" to fix NVDA keyboard navigation.
Closes content when focus moves outside while openOnFocus is enabled.
Guards against non-Element targets in isLayerExist.
Triggers pointermove only when the menu is open.
Emits correct units for pixel-sized panels in events.
Restores preventDefault for non-TAB keys in segment keydown handling.
Resolves accessibility issues flagged by axe-core.
Prevents permanent scroll lock on rapid toggle.
Fixes an edge case when useHideOthers is nested in a native popover.
The thumb now receives focus when dragged.
Touch interaction no longer drags the page.
Toast talkback announcements are fixed.
currentElement is synchronized on DOM update.
UseId is fixed for cases with no prefix.
Fixes tab navigation to a selectable date when the selected date or today is outside the allowed date range.
Prevents focus restoration when closing with openOnFocus.
Corrects week-number calculation for ISO 8601 locales.
Fixes tab navigation to a selectable date when the selected date or today is outside the allowed date range, and fixes range synchronization and highlighting.
Tabs renders aria-controls only when TabsContent exists.
NavigationMenu allows aria-label overrides.
Allows input focus when Combobox is used inside Dialog.
Changes the type extension from emits to type.
Adds exports for missing DatePicker types.
Integrates locale handling with the useLocale hook in DatePicker and DateRangePicker.
Fixes DayPeriod returning an incorrect value due to a format mismatch.
Prevents submission during IME composition.
Filters redundant brackets when hideTimeZone is used in TimeField, DateField, and DateRangeField.
Reduces GraceArea padding.
Closes the menu when a top-level link is clicked.
Handles more placeholder edge cases.
Corrects hour display in 12-hour format.
Calls updateHour to handle 12-hour time.
Exports TimeValue and missing DateRangePicker component types.
Fixes the empty ariaLabel for nested components in Tooltip Content.
Fixes invalid as and asChild props on DateRangePicker and DatePicker roots.
Fixes invalid as and asChild props on DateRangePicker and DatePicker roots.
Fixes an accessibility aria attribute in RangeCalendar CellTrigger.
Tooltip resets isPointerInTransit to ensure the trigger always works.
ComboboxCancel resets the model value on clear without requiring an input element.
Combobox now restores the body pointer-event style.
Tabs updates the indicator style when the element size changes.
RangeCalendar now always emits the latest value in update:validModelValue.
Fix props.unmountOnHide not working on an item.
Fix highlighting of elements when options are loaded asynchronously.
Prevent the day value from being incorrectly constrained during input.
Ensure submit always emits the latest value.
Hide the placeholder when the PinInput is focused.
Fix the default value type.
Fix maximum-days highlighting when the selection is out of range.
Correct the scrollbar padding calculation.
Update the thumb position when the content size changes.
Use toValue from Vue instead of VueUse.
Avoid mutating the expanded state.
Calendar and RangeCalendar no longer use the application accessibility role.
Improves NavigationMenu compatibility for disableClickTrigger.
Select now handles form autofill events.
Prevents ListboxContent from receiving focus when ListboxFilter exists.
TagsInput now handles number and bigint values in items.
PinInput now allows inputs to be populated by password manager autofill.
Tooltip now allows an SVG element as its trigger.