HeroUI

v3.0.0-beta.8

3 new components (Badge, Pagination, Table), DateField improvements, and key API/style fixes.

March 2, 2026

This release adds three new components: Badge, Pagination, and Table, plus new InputContainer composition APIs for DateField and TimeField.

⚠️ Breaking changes: TextField CSS classes were renamed from .text-field to .textfield.

HeroUI v3 Beta 8

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

  • Badge: Compact status + count indicator with color, variant, placement, and size options. (Docs)
  • Pagination: Compound pagination primitives with summary, ellipsis, and previous/next controls. (Docs)
  • Table: Data table primitives with sorting, selection, resizing, async loading, and footer composition. (Docs)

Badge

New badge primitives for counters, labels, and anchored overlays with Badge.Anchor and Badge.Label.

JD5ABNewCD
import {Avatar, Badge} from "@heroui/react";

const GREEN_AVATAR_URL = "https://heroui-assets.nyc3.cdn.digitaloceanspaces.com/avatars/green.jpg";
const ORANGE_AVATAR_URL =
  "https://heroui-assets.nyc3.cdn.digitaloceanspaces.com/avatars/orange.jpg";

Pagination

New navigation component built with composable parts (Root, Content, Item, Link, Previous, Next, Summary, Ellipsis).

"use client";

import {Pagination} from "@heroui/react";
import {useState} from "react";

Table

Compound data table on React Aria with sortable columns, row selection, custom cells, load-more sentinel rows, and resizable columns.

NameRoleStatusEmail
Kate MooreCEOActivekate@acme.com
John SmithCTOActivejohn@acme.com
Sara JohnsonCMOOn Leavesara@acme.com
Michael BrownCFOActivemichael@acme.com
import {Table} from "@heroui/react";

export function Basic() {
  return (
    <Table>

Custom Cells:

Worker IDMemberRoleStatusActions
#1234567
ED
Emily Davisemily@acme.com
Product ManagerInactive
#5273849
JS
John Smithjohn@acme.com
Chief Technology OfficerActive
#4586932
KM
Kate Moorekate@acme.com
Chief Executive OfficerActive
#8293746
MB
Michael Brownmichael@acme.com
Chief Financial OfficerActive
#7492836
SJ
Sara Johnsonsara@acme.com
Chief Marketing OfficerOn Leave
"use client";

import type {Selection, SortDescriptor} from "@heroui/react";

import {Avatar, Button, Checkbox, Chip, Table, cn} from "@heroui/react";

Pagination:

NameRoleStatusEmail
Kate MooreCEOActivekate@acme.com
John SmithCTOActivejohn@acme.com
Sara JohnsonCMOOn Leavesara@acme.com
Michael BrownCFOActivemichael@acme.com
"use client";

import {Pagination, Table} from "@heroui/react";
import {useMemo, useState} from "react";

Empty State:

NameRoleStatusEmail
No results found
"use client";

import {EmptyState, Table} from "@heroui/react";
import {Icon} from "@iconify/react";

Component + API Improvements

DateField and TimeField Enhancements

DateField and TimeField now expose InputContainer to wrap input segments between prefix and suffix content.

Before:

<DateField.Group>
  <DateField.Prefix>...</DateField.Prefix>
  <DateField.Input>
    {(segment) => <DateField.Segment segment={segment} />}
  </DateField.Input>
  <DateField.Suffix>...</DateField.Suffix>
</DateField.Group>

After:

<DateField.Group>
  <DateField.Prefix>...</DateField.Prefix>
  <DateField.InputContainer>
    <DateField.Input>
      {(segment) => <DateField.Segment segment={segment} />}
    </DateField.Input>
  </DateField.InputContainer>
  <DateField.Suffix>...</DateField.Suffix>
</DateField.Group>
Date range
"use client";

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

import {DateField, DateRangePicker, Label, RangeCalendar, TimeField} from "@heroui/react";

⚠️ Breaking Changes

TextField Class + Path Renames

TextField style naming was normalized to avoid conflicts with Tailwind's text-* utility prefix.

ComponentOld Class NameNew Class NameNotes
TextField Root.text-field.textfieldRoot class renamed
TextField Full Width.text-field--full-width.textfield--full-widthModifier class renamed

Additional renames in the same change:

  • Style file: text-field.css -> textfield.css
  • Styles export path: @heroui/styles/src/components/text-field -> @heroui/styles/src/components/textfield

Style Fixes

  • RangeCalendar: Added rounded corners to calendar cells for range selection visuals (#6270)

Bug Fixes

  • Added required-state red asterisk behavior for DatePicker and DateRangePicker by propagating data-required from isRequired (#6270)
  • Fixed missing invalid trigger styling in Autocomplete and Select by scoping invalid styles to root state (#6270)
  • Updated TextField docs/demo references to the new textfield-* demo keys and source/style paths (#6270)

Contributors

Thanks to everyone who contributed to this release!

On this page