v3.2.7
React Aria 1.22.1, the new Sheet component, Slider steps and marks, reduced rendering overhead, accessibility improvements, responsive Storybook demos, and fixes across overlays and form controls.
React Aria upgrade: HeroUI bumps react-aria-components to 1.22.1 (react-aria@3.53.1). The new Sheet component provides a swipeable overlay with four placements, snap points, nested sheets, controlled state, bounded detached layouts, and coordinated dragging, scrolling, and handle-driven dismissal. Slider adds composable step indicators and mark labels for horizontal, vertical, single-value, and range controls, while components reduce rendering overhead. Accessibility improvements add decorative Separator support, preserve dialog naming in date-picker popovers, remove invalid landmark and group attributes, and improve Storybook example semantics. This release also keeps reopened overlays visible and fixes Slider RTL fills, Switch thumb jitter, Tabs indicator drift during hydration, cancelled Drawer drags, stale ScrollShadow edges, narrow-screen menus, autofilled fields, and Toast layouts.
Installation
Update to the latest version:
npm i @heroui/styles@latest @heroui/react@latestPeer dependencies. This release requires react-aria-components@^1.22.1 and react-aria@^3.53.1. Align your app’s installed versions when upgrading.
Using AI assistants? Simply prompt "Hey Cursor, update HeroUI to the latest version" and your AI assistant will automatically compare versions and apply the necessary changes. Learn more about the HeroUI MCP Server.
Dependencies
- React Aria: Upgrade to React Aria 1.22.1 —
react-aria-components@1.22.1,react-aria@3.53.1,react-stately@3.51.0,@react-types/shared@3.37.0, and@internationalized/number@3.6.9(#6939, #6949). - Avatar primitive: Upgrade
@radix-ui/react-avatarto1.3.1(#6979). - Security: Patch open Dependabot alerts in transitive dependencies (#6938).
What's New
- Sheet: Add a swipeable React Aria overlay with
bottom,top,left, andrightplacements; pixel, CSS-length, and percentage snap points; sequential snapping; backdrop variants; detached and non-dismissable modes; controlled state; nested sheets; and coordinated panel dragging, body scrolling, and handle-driven dismissal. Detached sheets keep every snap point within the viewport across all placements. The compound API includes trigger, backdrop, content, dialog, handle, header, body, footer, and close parts (#6974, fba503c, #6979). - Slider steps and marks: Compose
Slider.StepsinsideSlider.Trackto show decorative dots for each configured increment, then addSlider.MarksandSlider.Markafter the track for labels at arbitrary values. Steps and marks support fractional values, vertical orientation, RTL, disabled state, single-value and range sliders, localized default labels, anddata-filledstyling hooks (#6965).
Bug Fixes
- CloseButton: Stop hardcoding
aria-label="Close"on the React AriaButton. Explicitaria-labelprops and slot context labels (toastclose, search fieldclear, tagremove) are no longer overridden (#6946). - Toast: Collapse the bottom-region anchor on iOS Safari so stacked toasts sit flush with the safe area (#6936). Replace
useMediaQueryaction placement with a CSS grid layout (#6932). Measure stack height withoffsetHeightinstead ofscrollHeightso the indicator stays aligned with the title when spawning toasts inside an expanded stack (#6952). - Dropdown: Align submenu item start padding with the menu padding scale (#6941). Center the trigger icon in the with-sections example (#6944). Keep menus wide enough for their rows and icons on narrow screens while capping them to the available viewport width (#6957).
- ComboBox: Keep scrolling on the controlled listbox rather than the outer popover, so keyboard navigation and virtual focus can reveal every option (#6959).
- Slider: Anchor horizontal fills from the inline start side so filled tracks align with React Aria thumb positions in RTL locales (#6964).
- Switch: Prevent thumb jitter when toggling by animating its position without changing the flex layout, while preserving RTL alignment and custom track widths (#6970).
- Tabs: Keep the indicator aligned with the initially selected tab during hydration by deferring transitions until the first client frame, while preserving normal animations for subsequent selections (#6988).
- Drawer: Recover from a cancelled swipe without leaving the sheet displaced or stuck in a drag state.
lostpointercaptureon a hit child is ignored, the panel snaps back when the dialog loses capture, and consumerstyleprops merge withtouch-action: noneinstead of replacing it. The open slide runs onDrawer.Contentbecause React Aria clearsdata-enteringon the dialog before paint (#6968). - ScrollShadow: Clear automatic visibility attributes when
isEnabledchanges tofalse, preventing stale edge shadows from remaining visible (#6964). - Calendar: Keep weekday header labels in equal columns (#6925).
- Overlays: Speed up open and close on mid-range phones. Overlay enter and exit animate opacity and transform only (no
filterkeyframes), touch devices skipbackdrop-filteron blurred modal and drawer scrims, WebKit keeps popovers mounted until the close animation is running, coarse pointers show Dropdown menus as soon as they are placed instead of waiting on a keyboard check, and a swiped-away Drawer clears inlinetransition: noneso the exit transition runs (#6934). Popover-based components also preserve forwarded ref cleanup, follow local and slottedshouldSkipAnimationpreferences, and retain overlay motion styles with selective CSS imports (6f0678c). Reopening retained Modal or Popover content now restores its original or newly supplied opacity instead of leaving it invisible (1b64b24). - List popovers: Nest the outer radius with the item padding on Select, Dropdown, Autocomplete, and ComboBox (#6916).
- Picker indicators: Keep the checkmark off the label in Select, ComboBox, and Autocomplete popovers (#6908).
- AvatarGroup: Clip overlap follows the avatar radius (#6884).
- Checkbox: Keep the checkmark SVG mounted so the draw animation no longer flashes when toggling indeterminate selection in Table (#6890).
- ScrollShadow: Remove the mask seam at fractional device pixel ratios (#6914).
- Radio: Pair
:focus-visible,:hover, and:activewith the existingdata-*state rules on Radio (#6879). - Toast styles: Pair
data-*attributes with:focus-visibleand:hoverrules (#6879).
Styles
- Field autofill: Keep
variant="secondary"(and other variants) on Input, TextArea, InputGroup, SearchField, NumberField, and ComboBox when the browser autofills values. Autofill rules now read each variant's fill token and use an insetbox-shadowcover in Chromium instead of hardcoding primary field colors (#6943). - Disclosure: Remove a stray
.accordion__headingrule fromdisclosure.css(#6904). - Chip: Empty
.chip--md— it re-declared thetext-xsalready on the base.chipclass (#6879).
Components
- Separator: Add
isDecorativefor purely visual dividers. Decorative separators render with presentational semantics and are hidden from assistive technology while retaining their styles and custom render support (#6959). - Rendering performance: Avoid render-prop class-name resolution when a static class name is sufficient, memoize variant output and merged class names, and pass children directly to React Aria primitives. This reduces avoidable work across buttons, forms, selection controls, overlays, date and color inputs, collections, navigation, and display components while preserving function-valued
classNameand children APIs (#6947). - Display names: Set
displayNameon component parts toHeroUI.Component.SubPartand correct seven mismatched names (#6879). - EmptyState: Add the missing
"use client"directive (#6879).
Accessibility
- Popovers and date pickers: Preserve custom render behavior while removing orphaned accessible-name attributes from generic popover containers. DatePicker and DateRangePicker now carry their dialog labels onto React Aria's automatic dialog wrapper (#6959).
- Calendars and groups: Render Calendar and RangeCalendar headers as neutral containers so they do not create nested banner landmarks. Nested ToggleButtonGroup elements no longer expose unsupported
aria-orientationon agrouprole (#6959). - Examples: Improve accessible names and semantics across Storybook stories, mark visual dividers as decorative, and connect tabs to their content panels (#6959).
Storybook
- Responsive demos: Adapt the component and color demos to smaller viewports with responsive sizing, spacing, wrapping, and layout behavior (#6958).
Links
Contributors
Thanks to everyone who contributed to this release!
All Releases
All updates and changes to HeroUI v3, including new features, fixes, and breaking changes.
v3.2.6
Patch release that adds the AvatarGroup component, restores keyboard-only focus rings on list box, menu, and overlay triggers, corrects @heroui/react dependency declarations (@internationalized/date is now a peer dependency), stops ColorSlider warnings from running in production, restores default Tag padding, re-aligns Breadcrumbs spacing, memoizes context values across the component tree, and upgrades React Aria to 1.21.1.