HeroUI

v3.0.0-beta.3

Seven new components, fullWidth and hideSeparator support, style fixes, and breaking changes for AlertDialog/Modal backdrop variants and asChild prop removal.

December 19, 2025

This release introduces seven new components (ButtonGroup, DateField, ErrorMessage, ScrollShadow, SearchField, TagGroup, TimeField), adds fullWidth support for form components and hideSeparator to Tabs, ButtonGroup, and Accordion, includes style fixes, and ⚠️ breaking changes removing the asChild prop and updating AlertDialog & Modal backdrop variants.

HeroUI v3 Beta 3

Installation

Update to the latest version:

npm i @heroui/styles@beta @heroui/react@beta
pnpm add @heroui/styles@beta @heroui/react@beta
yarn add @heroui/styles@beta @heroui/react@beta
bun add @heroui/styles@beta @heroui/react@beta

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.

What's New

New Components

This release introduces 7 new essential components:

ButtonGroup

import {
  ChevronDown,
  ChevronLeft,
  ChevronRight,
  CodeFork,

DateField

Date
mmddyyyy
"use client";

import {DateField, DateInputGroup, Label} from "@heroui/react";

export function Basic() {

ErrorMessage

Required Categories
News
Travel
Gaming
Shopping
Select at least one categoryPlease select at least one category
"use client";

import type {Key} from "@heroui/react";

import {Description, ErrorMessage, Label, Tag, TagGroup} from "@heroui/react";

SearchField

import {Label, SearchField} from "@heroui/react";

export function Basic() {
  return (
    <SearchField name="search">

ScrollShadow

Vertical

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam pulvinar risus non risus hendrerit venenatis. Pellentesque sit amet hendrerit risus, sed porttitor quam. Morbi accumsan cursus enim, sed ultricies sapien.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam pulvinar risus non risus hendrerit venenatis. Pellentesque sit amet hendrerit risus, sed porttitor quam. Morbi accumsan cursus enim, sed ultricies sapien.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam pulvinar risus non risus hendrerit venenatis. Pellentesque sit amet hendrerit risus, sed porttitor quam. Morbi accumsan cursus enim, sed ultricies sapien.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam pulvinar risus non risus hendrerit venenatis. Pellentesque sit amet hendrerit risus, sed porttitor quam. Morbi accumsan cursus enim, sed ultricies sapien.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam pulvinar risus non risus hendrerit venenatis. Pellentesque sit amet hendrerit risus, sed porttitor quam. Morbi accumsan cursus enim, sed ultricies sapien.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam pulvinar risus non risus hendrerit venenatis. Pellentesque sit amet hendrerit risus, sed porttitor quam. Morbi accumsan cursus enim, sed ultricies sapien.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam pulvinar risus non risus hendrerit venenatis. Pellentesque sit amet hendrerit risus, sed porttitor quam. Morbi accumsan cursus enim, sed ultricies sapien.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam pulvinar risus non risus hendrerit venenatis. Pellentesque sit amet hendrerit risus, sed porttitor quam. Morbi accumsan cursus enim, sed ultricies sapien.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam pulvinar risus non risus hendrerit venenatis. Pellentesque sit amet hendrerit risus, sed porttitor quam. Morbi accumsan cursus enim, sed ultricies sapien.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam pulvinar risus non risus hendrerit venenatis. Pellentesque sit amet hendrerit risus, sed porttitor quam. Morbi accumsan cursus enim, sed ultricies sapien.

Horizontal

Lorem Card

Bridging the Future

Today, 6:30 PM

Lorem Card

Bridging the Future

Today, 6:30 PM

Lorem Card

Bridging the Future

Today, 6:30 PM

Lorem Card

Bridging the Future

Today, 6:30 PM

Lorem Card

Bridging the Future

Today, 6:30 PM

Lorem Card

Bridging the Future

Today, 6:30 PM

Lorem Card

Bridging the Future

Today, 6:30 PM

Lorem Card

Bridging the Future

Today, 6:30 PM

Lorem Card

Bridging the Future

Today, 6:30 PM

Lorem Card

Bridging the Future

Today, 6:30 PM

import {Card, ScrollShadow} from "@heroui/react";

const images = [
  "https://heroui-assets.nyc3.cdn.digitaloceanspaces.com/docs/robot1.jpeg",
  "https://heroui-assets.nyc3.cdn.digitaloceanspaces.com/docs/avocado.jpeg",

TagGroup

News
Travel
Gaming
Shopping
"use client";

import {PlanetEarth, Rocket, ShoppingBag, SquareArticle} from "@gravity-ui/icons";
import {Tag, TagGroup} from "@heroui/react";

TimeField

Time
––––AM
"use client";

import {DateInputGroup, Label, TimeField} from "@heroui/react";

export function Basic() {

Full-Width Support

Added fullWidth support to form and input components, allowing them to span the full width of their container. This is particularly useful for creating consistent form layouts and responsive designs.

Supported components:

Component Improvements

Separator Control Enhancement

Added hideSeparator prop to Tabs, ButtonGroup, and Accordion components, allowing you to hide separator lines between items for a cleaner, more minimal appearance.

Tabs:

<Tabs hideSeparator>
  <Tabs.ListContainer>
    <Tabs.List aria-label="Options">
      <Tabs.Tab id="overview">Overview<Tabs.Indicator /></Tabs.Tab>
      <Tabs.Tab id="analytics">Analytics<Tabs.Indicator /></Tabs.Tab>
    </Tabs.List>
  </Tabs.ListContainer>
</Tabs>

ButtonGroup:

<ButtonGroup hideSeparator>
  <Button>First</Button>
  <Button>Second</Button>
  <Button>Third</Button>
</ButtonGroup>

Accordion:

<Accordion hideSeparator>
  <Accordion.Item>
    <Accordion.Heading>
      <Accordion.Trigger>Item 1</Accordion.Trigger>
    </Accordion.Heading>
    <Accordion.Panel>
      <Accordion.Body>Content</Accordion.Body>
    </Accordion.Panel>
  </Accordion.Item>
</Accordion>

Documentation Icons Integration

Integrated @gravity-ui/icons into documentation components for consistent icon rendering with improved SSR support and better performance.

Dependencies

React Aria Components v1.14.0

Upgraded react-aria-components to v1.14.0. This release includes:

Enhancements:

  • SearchField: Added isReadOnly and isRequired to render props
  • Tooltip: Added shouldCloseOnPress prop
  • Tabs: Support for animated transitions between tab panels
  • Miscellaneous: Support for setState callback in useControlledState

Fixes:

  • ComboBox: Fixed VoiceOver announcement not respecting aria-label of ListBoxItem
  • Date and Time: Enhanced error handling for absolute date and date time strings
  • NumberField: Prevented incrementing/decrementing when scrolling on mobile
  • Overlays: Fixed overlay positioning and flipping when boundary container is set
  • Table: Fixed crash in drag and drop when keyboard navigating
  • Various other bug fixes and improvements

For the complete list of changes, see the React Aria Components v1.14.0 release notes.

Other Dependency Upgrades

  • @internationalized/date: 3.10.0 → 3.10.1
  • @radix-ui/react-avatar: 1.1.10 → 1.1.11
  • tailwind-merge: 3.3.1 → 3.4.0
  • tailwind-variants: 3.1.1 → 3.2.2

Style Fixes

Form Component Disabled State

Fixed disabled state styling for Input and TextArea components.

Style Optimizations

  • Improved selector precision: Enhanced CSS selector specificity for better style isolation and performance
  • Enhanced animations: Improved animation performance and smoothness across components
  • Added no-highlight utility: Added no-highlight utility class to prevent text selection on interactive elements for improved user experience
  • Optimized will-change properties: Updated will-change CSS properties across components for better animation performance
  • Removed global scrollbar styling: Removed global scrollbar styles to prevent conflicts with custom scrollbar implementations and fix modal/overlay interaction issues

⚠️ Breaking Changes

AlertDialog & Modal Backdrop Variant

Renamed backdropVariant/variant prop value from "solid" to "opaque" for better semantic clarity. The term "opaque" more accurately describes the backdrop's visual appearance.

Migration:

Update all instances of backdropVariant="solid" to backdropVariant="opaque" for AlertDialog, and variant="solid" to variant="opaque" for Modal:

// Before
<AlertDialog.Backdrop backdropVariant="solid">
  <AlertDialog.Container>
    {/* content */}
  </AlertDialog.Container>
</AlertDialog.Backdrop>

<Modal.Backdrop variant="solid">
  <Modal.Container>
    {/* content */}
  </Modal.Container>
</Modal.Backdrop>

// After
<AlertDialog.Backdrop backdropVariant="opaque">
  <AlertDialog.Container>
    {/* content */}
  </AlertDialog.Container>
</AlertDialog.Backdrop>

<Modal.Backdrop variant="opaque">
  <Modal.Container>
    {/* content */}
  </Modal.Container>
</Modal.Backdrop>

Available backdrop variants:

  • "opaque" - Dark backdrop that completely obscures the background (formerly "solid")
  • "blur" - Blurred backdrop that softly obscures the background
  • "transparent" - Transparent backdrop that keeps the background visible

Removed asChild Prop

Removed the asChild prop pattern from components for cleaner APIs, improved type safety, and simplified usage.

For more details about component composition patterns, see the Composition guide.

Bug Fixes

  • Fixed isInvalid styles when components are used on surface backgrounds
  • Fixed AlertDialog and Modal re-rendering issues after close
  • Fixed overlay close issue that prevented proper cleanup when closing overlays
  • Fixed Storybook links and navigation issues

Contributors

Thanks to everyone who contributed to this release!

On this page