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.
Patch release: AvatarGroup returns as a dedicated component, focus rings are keyboard-only again on ListBox, Dropdown, Select, and overlay triggers after a mouse-driven open, @internationalized/date moves to peerDependencies while tailwind-merge and @react-aria/i18n are dropped, ColorSlider no longer warns on every render in production, bare .tag markup keeps its default padding, Breadcrumbs sit back on the spacing grid, and React Aria is upgraded to 1.21.1 (react-aria@3.52.1). Context values are also memoized across 43 components, so consumers no longer re-render on every root render.
Installation
Update to the latest version:
npm i @heroui/styles@latest @heroui/react@latestpnpm add @heroui/styles@latest @heroui/react@latestyarn add @heroui/styles@latest @heroui/react@latestbun add @heroui/styles@latest @heroui/react@latestPeer dependencies changed. @internationalized/date@^3.12.4 is now a peer dependency — it was always imported at runtime by Calendar, RangeCalendar, and the date utilities, and only resolved by accident through react-aria-components. Install it explicitly if your package manager does not hoist it. This release also requires react-aria-components@^1.21.1 and react-aria@^3.52.1, and no longer requires @react-aria/i18n.
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.
Features
AvatarGroup
AvatarGroup stacks compound Avatar children and passes size, color, and variant down to its direct children, so a group is styled in one place. max truncates the visible avatars and counts the rest, isGrid swaps the overlap for a wrapping grid, and overlap chooses between the default crescent clip ("clip") and a solid outline ("ring"). For a known total from the server, render an explicit AvatarGroup.Count — it is not truncated by max and replaces the v2 total prop. The group carries no implicit role="group"; add role and a label when the stack is meaningful.
- AvatarGroup: Add the
AvatarGroupcomponent withmax,isGrid,overlap, context-drivensize/color/variant, and anAvatarGroup.Countoverflow indicator (#6861).
Bug Fixes
- Focus: Show focus rings only on real keyboard focus again. v3.2.5 replaced
:focus-visible:not(:focus)with native:focus-visibleacross 37 selectors, which made ListBox, Dropdown, and Select items ring when a mouse click opened the collection, and made triggers ring when React Aria restored focus on overlay close. The native fallback is now scoped to elements React Aria does not own, while React Aria surfaces keep using[data-focus-visible="true"](#6849). - ColorSlider: Gate the
channelandcolorSpacevalidation warnings behindNODE_ENV.getValidColorSpaceruns in the render body, so a misconfigured slider logged on every render in production builds (#6847). - Tag: Move the
mdpadding and font size into the base.tagblock so bareclass="tag"markup renders with padding instead of collapsing, matching the default-size pattern used by the rest of the library..tag--mdis now an empty modifier (#6847). - Breadcrumbs: Space crumbs with
gapinstead of per-item horizontal padding, so a stacked Breadcrumbs list sits on the spacing grid and lines up with surrounding content (#6854). - Package exports: Put
typesfirst and add adefaultfallback in every generated export condition, so@heroui/reactresolves correctly undermoduleResolution: node16andnextnode(#6847). - Calendar: Keep year picker labels in sync with locale, time zone, and
formatchanges, and rebuild the year grid only when its inputs change instead of on every render (#6851).
Performance
- Context values: Memoize the context value in 43 components that were passing a fresh object literal on every render, so consumers re-render only when their slots actually change. The largest wins are the components with the most consumers: Table, Pagination, Accordion, Tabs, Card, and Slider (#6852).
- Refs: Memoize merged refs in DatePicker, DateRangePicker, Autocomplete, and ScrollShadow. Passing a fresh merged ref was detaching and reattaching the DOM node on every render (#6852).
- Defaults: Replace inline
[]defaults that defeated their own memo dependencies in InputOTP, DisclosureGroup, and ComboBox with shared empty constants (#6852).
Styles
- Dead classes removed: Drop CSS classes that were never applied by any component — the unused
separator__*element classes,.checkbox--disabled,.radio--disabled, and.switch__label(Switch composes the shared Label). If you targeted any of these in a custom stylesheet, they never had an effect (#6853). - Fieldset: Rename
fieldset__field_grouptofieldset__field-groupfor BEM consistency. Update any CSS override that targets the old class name (#6853).
Dependencies
- React Aria: Upgrade to
react-aria-components@1.21.1andreact-aria@3.52.1(#6848). - Runtime dependencies: Bump the packages that ship with
@heroui/react—@radix-ui/react-avatarto1.2.6, which backs Avatar and AvatarGroup, andinput-otpto1.5.0, which backs InputOTP (#6866). - Declarations: Promote
@internationalized/datetopeerDependencies, drop the unusedtailwind-mergedependency (it already ships transitively throughtailwind-variants, and pinning it directly caused duplicate copies), and drop@react-aria/i18n, which nothing in the library referenced but every consumer had to install (#6847). - Security: Pin the transitive
js-yamlandsvgoused by the build tooling to patched versions (#6844).
@heroui/styles
- CSS subpath exports: Ship
./components/*.css,./utilities,./variants,./themes/default, and./basein the committedpackage.jsonso the published surface and monorepo consumers match (#6846). - Selective imports: Fix the à-la-carte recipe in the README. Component CSS files
@applyshared utilities and custom variants, so the utilities and variants prelude is required for the recipe to compile (#6846).
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.5
Patch release that stacks Toast notifications with expand-on-hover, adds Select.ClearButton and a Tabs align variant, re-exports Pressable, Focusable, OverlayTriggerStateContext, and DisclosureStateContext from @heroui/react, and upgrades React Aria to 1.21.0, plus fixes for nested data-theme tokens, shadow DOM theming, native :focus-visible rings, overlay stacking, ScrollShadow, Table, Drawer, NumberField, Accordion, Label, and Tag.