Back to Heroui

v3.0.0-beta.7

apps/docs/content/docs/en/react/releases/v3-0-0-beta-7.mdx

3.2.110.0 KB
Original Source
<div className="flex items-center gap-3 mb-6"> <span className="text-sm text-muted">February 19, 2026</span> </div>

This release adds 4 new components: Calendar, RangeCalendar, DatePicker, and DateRangePicker. Also new: Switch.Content for grouping label and description, and Tabs.Separator for opt-in separator lines between tabs.

⚠️ Breaking changes: hideSeparator removed from Tabs; DateInputGroup and ColorInputGroup moved under DateField.Group, TimeField.Group, and ColorField.Group.

<DocsImage src="https://heroui-assets.nyc3.cdn.digitaloceanspaces.com/docs/versions/[email protected]" darkSrc="https://heroui-assets.nyc3.cdn.digitaloceanspaces.com/docs/versions/[email protected]" alt="HeroUI v3 Beta 7" href="/docs/changelog/v3-0-0-beta-7" />

Installation

Update to the latest version:

<Tabs items={["npm", "pnpm", "yarn", "bun"]}> <Tab value="npm"> bash npm i @heroui/styles@beta @heroui/react@beta </Tab> <Tab value="pnpm"> bash pnpm add @heroui/styles@beta @heroui/react@beta </Tab> <Tab value="yarn"> bash yarn add @heroui/styles@beta @heroui/react@beta </Tab> <Tab value="bun"> bash bun add @heroui/styles@beta @heroui/react@beta </Tab> </Tabs>

<Callout type="info"> **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](/docs/ui-for-agents/mcp-server). </Callout>

What's New

Date & Time System

Date & Time — Calendar, DatePicker, RangeCalendar, and DateRangePicker built on React Aria date primitives. Supports i18n, time zones, and full keyboard/ARIA accessibility.

Key features:

  • Calendar systems: Gregorian, Buddhist, Persian, and others
  • Year picker: Overlay for quick year navigation
  • Cell indicators: Events, availability, or status dots on cells
  • Range selection: Date ranges with visual highlighting
  • Accessible: Keyboard nav, screen readers, ARIA

All date values use @internationalized/date types (CalendarDate, CalendarDateTime, ZonedDateTime). Wrap with I18nProvider to override locale; read it with useLocale.

New Components

Calendar

Single-date calendar with year picker, cell indicators, multi-month view, and i18n calendars.

<ComponentPreview name="calendar-basic" />

Year Picker:

<ComponentPreview name="calendar-year-picker" />

International Calendars:

<ComponentPreview name="calendar-international-calendar" />

RangeCalendar

Date range selection with range highlighting and multi-month views.

<ComponentPreview name="range-calendar-basic" />

Multiple Months:

<ComponentPreview name="range-calendar-multiple-months" />

DatePicker

Date field + popover calendar. Format options, i18n, custom indicators, validation.

<ComponentPreview name="date-picker-basic" />

Date and Time (with TimeField):

<ComponentPreview name="date-picker-format-options" />

DateRangePicker

Two date fields + popover range calendar.

<ComponentPreview name="date-range-picker-basic" />

API Improvements

Switch.Content

Switch.Content groups label and description next to the switch control (#6240).

Before:

tsx
import { Switch, Label, Description } from '@heroui/react';

<Switch>
  <Switch.Control>
    <Switch.Thumb />
  </Switch.Control>
  <Switch.Content>
    <Label>Email notifications</Label>
    <Description>Get notified when someone mentions you</Description>
  </Switch.Content>
</Switch>

Tabs.Separator

The Tabs component now includes an explicit Tabs.Separator sub-component for adding visual separator lines between tabs. This replaces the previous automatic CSS pseudo-element separator and the hideSeparator prop (#6243).

Separators are now opt-in — add <Tabs.Separator /> inside each <Tabs.Tab> where you want a separator line.

<ComponentPreview isBgSolid name="tabs-with-separator" />

Field Sub-Component Consolidation

DateField, TimeField, and ColorField now expose their input group sub-components directly, removing the need to import DateInputGroup or ColorInputGroup separately. See Breaking Changes for migration details.

Props passed to Breadcrumbs.Item are now forwarded to the underlying Link (#6233).

Style Fixes

  • ListBox Item: Adjusted hover background color from bg-default-hover to bg-default for consistency
  • Date Input Group: Changed segment text from tabular-nums to text-nowrap for better layout
  • Date Input Group: Improved focus-within styles to exclude date picker trigger from field focus highlighting

Dependencies

  • React Aria Components: Updated from 1.14.0 to 1.15.0 — adds a new render prop for customizing the DOM element rendered by any React Aria component (useful for router links, animation libraries like Motion, etc.)
  • @react-aria/utils: Updated from 3.32.0 to 3.33.0
  • @react-types/shared: Updated from 3.32.1 to 3.33.0
  • @internationalized/date: Updated from 3.10.1 to 3.11.0 — date fields now constrain on blur instead of as you type
  • Added @react-aria/i18n and @react-stately/utils for calendar i18n

⚠️ Breaking Changes

Tabs — hideSeparator Prop Removed

The hideSeparator prop has been removed from the Tabs component. Separators are now opt-in using the new <Tabs.Separator /> sub-component instead of being automatically generated via CSS pseudo-elements (#6243).

Before:

tsx
<Tabs hideSeparator>
  <Tabs.List>
    <Tabs.Tab id="tab1">Tab 1<Tabs.Indicator /></Tabs.Tab>
    <Tabs.Tab id="tab2">Tab 2<Tabs.Indicator /></Tabs.Tab>
  </Tabs.List>
</Tabs>

After:

tsx
<Tabs>
  <Tabs.List>
    <Tabs.Tab id="tab1"><Tabs.Indicator />Tab 1</Tabs.Tab>
    <Tabs.Tab id="tab2"><Tabs.Separator /><Tabs.Indicator />Tab 2</Tabs.Tab>
  </Tabs.List>
</Tabs>

CSS Changes:

  • Tab separator styles moved from pseudo-element (.tabs__tab:not(:first-child):before) to a dedicated .tabs__separator class
  • The [data-hide-separator] data attribute has been removed

Field Sub-Component API Changes

DateInputGroup and ColorInputGroup are no longer exported directly from @heroui/react. Their sub-components have been consolidated under their respective field components (DateField, TimeField, ColorField).

DateField Changes

Before:

tsx
import {DateField, Label, DateInputGroup, Description} from '@heroui/react';

<DateField>
  <Label>Date</Label>
  <DateInputGroup>
    <DateInputGroup.Prefix>...</DateInputGroup.Prefix>
    <DateInputGroup.Input>
      {(segment) => <DateInputGroup.Segment segment={segment} />}
    </DateInputGroup.Input>
    <DateInputGroup.Suffix>...</DateInputGroup.Suffix>
  </DateInputGroup>
  <Description>Pick a date</Description>
</DateField>

After:

tsx
import {DateField, Label, Description} from '@heroui/react';

<DateField>
  <Label>Date</Label>
  <DateField.Group>
    <DateField.Prefix>...</DateField.Prefix>
    <DateField.Input>
      {(segment) => <DateField.Segment segment={segment} />}
    </DateField.Input>
    <DateField.Suffix>...</DateField.Suffix>
  </DateField.Group>
  <Description>Pick a date</Description>
</DateField>

TimeField Changes

Same pattern as DateField:

BeforeAfter
DateInputGroupTimeField.Group
DateInputGroup.InputTimeField.Input
DateInputGroup.SegmentTimeField.Segment
DateInputGroup.PrefixTimeField.Prefix
DateInputGroup.SuffixTimeField.Suffix

ColorField Changes

BeforeAfter
ColorInputGroupColorField.Group
ColorInputGroup.InputColorField.Input
ColorInputGroup.PrefixColorField.Prefix
ColorInputGroup.SuffixColorField.Suffix

Usage:

tsx
import {ColorField, Label, ColorInputGroup, ColorSwatch} from '@heroui/react';

<ColorField>
  <Label>Color</Label>
  <ColorInputGroup>
    <ColorInputGroup.Prefix>
      <ColorSwatch color="#000" />
    </ColorInputGroup.Prefix>
    <ColorInputGroup.Input />
  </ColorInputGroup>
</ColorField>

After:

tsx
import {ColorField, Label, ColorSwatch} from '@heroui/react';

<ColorField>
  <Label>Color</Label>
  <ColorField.Group>
    <ColorField.Prefix>
      <ColorSwatch color="#000" />
    </ColorField.Prefix>
    <ColorField.Input />
  </ColorField.Group>
</ColorField>

Note: The underlying CSS classes (.date-input-group, .color-input-group, etc.) remain unchanged. Only the JavaScript import paths and component names have changed.

Contributors

Thanks to everyone who contributed to this release!

<PRContributors />