apps/docs/content/docs/en/react/releases/v3-0-0-beta-7.mdx
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" />
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>
Date & Time — Calendar, DatePicker, RangeCalendar, and DateRangePicker built on React Aria date primitives. Supports i18n, time zones, and full keyboard/ARIA accessibility.
Key features:
All date values use @internationalized/date types (CalendarDate, CalendarDateTime, ZonedDateTime). Wrap with I18nProvider to override locale; read it with useLocale.
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" />
Date range selection with range highlighting and multi-month views.
<ComponentPreview name="range-calendar-basic" />
Multiple Months:
<ComponentPreview name="range-calendar-multiple-months" />
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" />
Two date fields + popover range calendar.
<ComponentPreview name="date-range-picker-basic" />
Switch.Content groups label and description next to the switch control (#6240).
Before:
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>
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" />
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).
bg-default-hover to bg-default for consistencytabular-nums to text-nowrap for better layout1.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.)3.32.0 to 3.33.03.32.1 to 3.33.03.10.1 to 3.11.0 — date fields now constrain on blur instead of as you type@react-aria/i18n and @react-stately/utils for calendar i18nhideSeparator Prop RemovedThe 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:
<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:
<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:
.tabs__tab:not(:first-child):before) to a dedicated .tabs__separator class[data-hide-separator] data attribute has been removedDateInputGroup and ColorInputGroup are no longer exported directly from @heroui/react. Their sub-components have been consolidated under their respective field components (DateField, TimeField, ColorField).
Before:
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:
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>
Same pattern as DateField:
| Before | After |
|---|---|
DateInputGroup | TimeField.Group |
DateInputGroup.Input | TimeField.Input |
DateInputGroup.Segment | TimeField.Segment |
DateInputGroup.Prefix | TimeField.Prefix |
DateInputGroup.Suffix | TimeField.Suffix |
| Before | After |
|---|---|
ColorInputGroup | ColorField.Group |
ColorInputGroup.Input | ColorField.Input |
ColorInputGroup.Prefix | ColorField.Prefix |
ColorInputGroup.Suffix | ColorField.Suffix |
Usage:
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:
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.
Thanks to everyone who contributed to this release!
<PRContributors />