Adds Badge, ProgressBar, ProgressCircle, ToggleButton, ToggleButtonGroup, BarChart, and Widget components, fixes calendar year picker sync after nav-button paging, locks date picker trigger variants, and launches the HeroUI Native Pro Figma library.
The second beta of HeroUI Native Pro lands seven new components — Badge, ProgressBar, ProgressCircle, ToggleButton, ToggleButtonGroup, BarChart, and Widget — alongside a calendar year-picker sync fix and a small API tightening on the date picker family. Everything composes on the same compound, theme-token, and animation primitives introduced in beta.1.
Follow the installation guide to authenticate the private registry with your HEROUI_PERSONAL_TOKEN, install heroui-native-pro, and wire up HeroUINativeProvider.
This release introduces 7 new components spanning four categories:
victory-native-powered bar chart with single, grouped, and stacked variants. (Documentation)ToggleButtons with attached and detached layouts. (Documentation)A victory-native-powered bar chart with the same theming, animation cascade, and Uniwind colorClassName API as LineChart. Compound primitives cover the three common bar layouts — single series, grouped (clustered) series, and stacked columns — and each renders as a Uniwind-wrapped Skia path.
Features:
BarChart.Bar, BarChart.BarGroup, BarChart.BarGroupItem, BarChart.StackedBarcolorClassName (e.g. accent-chart-1, accent-chart-3) with full accent-chart-* token supportanimation="disable-all" prop through AnimationSettingsProviderbarWidth, roundedCorners, and domainPaddinguseBarPath, useBarGroupPaths, and useStackedBarPaths hooks re-exported for custom rendering (gradients, patterns, etc.)barWidth, groupWidth, and gapWidth through BarGroup's onBarSizeChange for synchronized overlaysvictory-native stays an optional dependency — only loaded when BarChart or LineChart is importedUsage:
import { BarChart } from "heroui-native-pro";
const DATA = [
{ month: "Jan", sales: 120 },
{ month: "Feb", sales: 180 },
{ month: "Mar", sales: 150 },
];
export function Example() {
return (
<BarChart
data={DATA}
xKey="month"
yKeys={["sales"]}
wrapperClassName="h-52"
>
{({ points, chartBounds }) => (
<BarChart.Bar points={points.sales} chartBounds={chartBounds} />
)}
</BarChart>
);
}For complete documentation and examples, see the BarChart component page.
A small indicator positioned relative to another element. Use it for unread counters on Avatars, status dots on icons, or standalone pills in lists. Renders as a dot when no children are passed and as a pill when string or number children are provided.
Features:
Badge.Anchor, Badge, Badge.Labelcolor — default, accent, success, warning, dangervariant — primary, secondary, softsize — sm, md, lgplacement — top-right, top-left, bottom-right, bottom-left when used inside Badge.Anchoranimation cascade supportUsage:
import { Avatar, Badge } from "heroui-native-pro";
export function Example() {
return (
<Badge.Anchor>
<Avatar>...</Avatar>
<Badge color="danger" size="sm">
5
</Badge>
</Badge.Anchor>
);
}For complete documentation and examples, see the Badge component page.
A horizontal progress bar that supports both determinate and indeterminate modes. The root computes the percentage and formatted value text from value, minValue, maxValue, and formatOptions, while the Track and Fill primitives handle the visual styling. Plain string children auto-expand into the full label / track / fill layout.
Features:
ProgressBar.Track, ProgressBar.Fill, ProgressBar.Label, ProgressBar.ValueLabeltranslateX sweep, switched via isIndeterminatecolor — default, accent, success, warning, dangersize — sm, md, lg track heightsformatOptions (e.g. style: "percent")ValueLabel for stable digit alignmentaccessibilityLabel for screen-reader-only labels when no visual Label is renderedUsage:
import { ProgressBar } from "heroui-native-pro";
import { View } from "react-native";
export function Example() {
return (
<ProgressBar value={60}>
<View className="flex-row items-center justify-between">
<ProgressBar.Label>Loading</ProgressBar.Label>
<ProgressBar.ValueLabel />
</View>
<ProgressBar.Track>
<ProgressBar.Fill />
</ProgressBar.Track>
</ProgressBar>
);
}For complete documentation and examples, see the ProgressBar component page.
A circular progress indicator built on Skia / SVG with the same determinate / indeterminate API as ProgressBar. The Indicator animates strokeDashoffset for determinate progress and rotates continuously when isIndeterminate is set. Drop a ValueLabel inside to render the formatted value centered on the circle.
Features:
ProgressCircle.Indicator, ProgressCircle.ValueLabelisIndeterminatecolor — default, accent, success, warning, dangersize — sm, md, lg presets, or a custom pixel number for full controlstrokeWidth, trackColor, and fillColor overrides on IndicatorformatOptions, with a ValueLabel that supports custom child contentanimation cascade supportUsage:
import { ProgressCircle } from "heroui-native-pro";
export function Example() {
return (
<ProgressCircle value={75} color="success" size="lg">
<ProgressCircle.Indicator />
<ProgressCircle.ValueLabel />
</ProgressCircle>
);
}For complete documentation and examples, see the ProgressCircle component page.
A pair of components for two-state and segmented selection. ToggleButton wraps heroui-native's Button with selected / unselected background styling, and ToggleButtonGroup composes multiple toggles into a single segmented control with shared selection, size, and disabled state via context.
Features:
ToggleButton compound parts — ToggleButton.Label with automatic selected / unselected text colorsvariant — default, ghost (selected appearance is shared)size — sm, md, lgisIconOnly for square icon-only togglesisSelected / onChange) and uncontrolled (defaultSelected) modesuseToggleButton hook for reading state from descendantsToggleButtonGroup selectionMode — single or multiple, with selectedKeys / onSelectionChange exposed as Set<string>ToggleButtonGroup orientation — horizontal or verticalisDetached to render each toggle as a separate rounded button instead of an attached segmentfullWidth to stretch the group across its containerUsage:
import { ToggleButton, ToggleButtonGroup } from "heroui-native-pro";
export function Example() {
return (
<ToggleButtonGroup
selectionMode="single"
defaultSelectedKeys={["center"]}
>
<ToggleButton id="left">Left</ToggleButton>
<ToggleButton id="center">Center</ToggleButton>
<ToggleButton id="right">Right</ToggleButton>
</ToggleButtonGroup>
);
}For complete documentation and examples, see the ToggleButton and ToggleButtonGroup component pages.
A dashboard container surface that pairs an optional header and footer with an elevated content card. Drop a LineChart, BarChart, table, or KPI block inside Widget.Content and you get the standard dashboard chrome — title, description, inline legend, and footer summary — without hand-rolling cards on every screen.
Features:
Widget.Header, Widget.Title, Widget.Description, Widget.Content, Widget.Footer, Widget.Legend, Widget.LegendItembg-surface-secondary shell with an inner elevated bg-surface content cardWidget.Legend with Widget.LegendItem entries that accept colorClassName (theme tokens, preferred) or color (inline color string)Widget.LegendItem with classNames, styles, and textProps overrides for the wrapper, dot, and label slotsanimation="disable-all" on the root cascades through AnimationSettingsProvider to every animated descendant (charts, progress bars, etc.)Widget.Footer for compact panels, omit Widget.Header for chart-only widgetsUsage:
import { LineChart, Widget } from "heroui-native-pro";
export function Example() {
return (
<Widget>
<Widget.Header>
<Widget.Title>Tokens Over Time</Widget.Title>
<Widget.Legend>
<Widget.LegendItem colorClassName="bg-chart-4">
Input
</Widget.LegendItem>
<Widget.LegendItem colorClassName="bg-chart-1">
Output
</Widget.LegendItem>
</Widget.Legend>
</Widget.Header>
<Widget.Content>
<LineChart data={DATA} xKey="date" yKeys={["input", "output"]}>
{/* ... */}
</LineChart>
</Widget.Content>
</Widget>
);
}For complete documentation and examples, see the Widget component page.
Fixed a sync issue where the Calendar and RangeCalendar year picker stayed pinned to the page the calendar was opened on after paging via the next / previous month buttons. The year picker trigger heading and the highlighted / scrolled-to year now always reflect the page the user is currently viewing.
variant from Date Picker triggersThe variant prop has been removed from the Trigger subcomponents of DateField, DatePicker, and DateRangePicker. Each trigger now hardcodes its variant internally to enforce consistent styling across the date picker family:
DateField.Trigger always renders with variant="unstyled"DatePicker.Trigger always renders with variant="default"DateRangePicker.Trigger always renders with variant="default"Trigger prop types are now Omit<SelectTriggerProps, "variant">, so passing variant will produce a TypeScript error.
Migration:
If you were passing the previous default variant, just drop the prop:
// Before
<DatePicker>
<DatePicker.Trigger variant="default">
<DatePicker.Value />
</DatePicker.Trigger>
</DatePicker>
// After
<DatePicker>
<DatePicker.Trigger>
<DatePicker.Value />
</DatePicker.Trigger>
</DatePicker>If you previously passed variant="unstyled" to DatePicker.Trigger or DateRangePicker.Trigger to render a fully custom trigger, you will need to recompose the trigger using the lower-level Select.Trigger from heroui-native directly, since these triggers now always render in the default variant.
There are no runtime behavior changes for consumers using the previous defaults.
The following documentation pages have been updated to reflect the changes in this release:
victory-native docs@internationalized/date for locale, time-zone, and non-Gregorian calendar contextvariant removed from Trigger prop tablesThe full Figma design library for HeroUI Native Pro is now available — including both open source and Pro components, ready to drop into your designs.
Get it from your dashboard or check the Figma setup guide.
1.0.0-beta.3
Adds AreaChart, ChartCrosshair, ChartIndicator, EmptyState, and Segment components, unifies press-driven overlays across cartesian charts, removes LineChart.Tooltip and LineChart.Crosshair, and cleans up ProgressButton press-out handling.
1.0.0-beta.1
HeroUI Native Pro beta 1 introduced 17 premium mobile components, unified date and time controls, charts, and AI-ready tooling.