Adds ComposedChart, ChartTooltip, NumberPad, and RadialChart, improves SplitView mount behavior, and fixes NumberField runaway onChange on rapid taps.
The fifth beta of HeroUI Native Pro extends the charting stack with multi-series cartesian dashboards, press-driven floating tooltips, and gauge-style radial visualizations — plus a numeric keypad for PIN and code entry flows. ComposedChart and ChartTooltip bring bar, line, and area series together under one themed root with clamped tooltip positioning, while RadialChart adds Skia-rendered arc rings for progress and gauge UIs. This release also ships NumberPad, improves SplitView mount behavior, and fixes runaway onChange events when tapping NumberField increment/decrement buttons rapidly.
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 4 new components across charts and forms:
A composed cartesian chart for multi-metric dashboards. ComposedChart wraps victory-native's CartesianChart and reuses the themed Skia implementations from BarChart, LineChart, and AreaChart under one root — so you can mix bars, lines, and areas in a single chart with shared theming and animation cascading.
Features:
Bar, BarGroup, StackedBar, Line, AnimatedLine, Area, StackedArea, and AreaRangeyKeys, axisSide, and domain configurationdomainPadding and animation="disable-all" cascading to animated series partsBarChart, LineChart, and AreaChart Skia renderers — no new runtime dependenciesUsage:
import { ComposedChart } from "heroui-native-pro";
const DATA = [
{ month: "Jan", revenue: 42000, orders: 180 },
{ month: "Feb", revenue: 51000, orders: 210 },
];
export function Example() {
return (
<ComposedChart
data={DATA}
xKey="month"
yKeys={["revenue", "orders"]}
yAxis={[
{ yKeys: ["revenue"], formatYLabel: (v) => `$${(v / 1000).toFixed(0)}k` },
{ yKeys: ["orders"], axisSide: "right" },
]}
wrapperClassName="h-52"
>
{({ points, chartBounds }) => (
<>
<ComposedChart.Bar
points={points.revenue}
chartBounds={chartBounds}
colorClassName="accent-chart-3"
/>
<ComposedChart.Line
points={points.orders}
colorClassName="accent-chart-1"
/>
</>
)}
</ComposedChart>
);
}For complete documentation and examples, see the ComposedChart component page.
A composable floating tooltip for cartesian chart press interactions. ChartTooltip follows press coordinates, clamps inside chartBounds, and renders a structured multi-series label card — replacing ad-hoc overlays built from ChartCrosshair and ChartIndicator alone.
Features:
Anchor, Header, Item, Indicator, Label, and ValueuseChartTooltipAnchor hook for custom anchor wiringchartBounds on both axesLineChart, BarChart, AreaChart, and ComposedChartUsage:
import { ChartTooltip, ComposedChart } from "heroui-native-pro";
import { useChartPressState } from "victory-native";
import { useState } from "react";
const { state, isActive } = useChartPressState({
x: "month",
y: { revenue: 0 },
});
const [chartBounds, setChartBounds] = useState(null);
<ChartTooltip.Anchor
chartBounds={chartBounds}
isActive={isActive}
matchedIndex={state.matchedIndex}
x={state.x.position}
y={state.y.revenue.position}
>
<ComposedChart
data={DATA}
xKey="month"
yKeys={["revenue"]}
chartPressState={state}
onChartBoundsChange={setChartBounds}
wrapperClassName="h-52"
>
{({ points, chartBounds: bounds }) => (
<ComposedChart.Bar points={points.revenue} chartBounds={bounds} />
)}
</ComposedChart>
<ChartTooltip>
<ChartTooltip.Header />
<ChartTooltip.Item>
<ChartTooltip.Indicator colorClassName="accent-chart-3" />
<ChartTooltip.Label>Revenue</ChartTooltip.Label>
<ChartTooltip.Value />
</ChartTooltip.Item>
</ChartTooltip>
</ChartTooltip.Anchor>For complete documentation and examples, see the ChartTooltip component page.
A numeric keypad for entering PINs, verification codes, and amounts. Built with HeroUI Native compound-component patterns, it ships a default 3×4 digit grid out of the box and supports full custom key composition when you need a different layout.
Features:
Row, Key, KeyLabel, Backspace, and SpacermaxLength, onComplete, and disabled stateSpacer becomes an action key when given childrenuseNumberPad hook and full TypeScript typesUsage:
import { NumberPad } from "heroui-native-pro";
import { useState } from "react";
export function Example() {
const [value, setValue] = useState("");
return (
<NumberPad
value={value}
onValueChange={setValue}
maxLength={6}
onComplete={(code) => console.log("PIN entered:", code)}
/>
);
}For complete documentation and examples, see the NumberPad component page.
A radial chart for gauge, progress ring, and circular data visualizations. Built on victory-native's PolarChart with custom @shopify/react-native-skia stroked arc rings, it supports configurable radii, angles, and per-datum colors with optional background tracks.
Features:
RadialChart.Bar API with rounded arc rings and optional full-domain background tracksdomain (e.g. [0, 100])innerRadius, cornerRadius, and per-datum colors through colorKeyUsage:
import { RadialChart } from "heroui-native-pro";
const DATA = [{ name: "Score", value: 78, color: "#8b5cf6" }];
export function Example() {
return (
<RadialChart
data={DATA}
labelKey="name"
valueKey="value"
colorKey="color"
domain={[0, 100]}
innerRadius="72%"
wrapperClassName="w-[220px]"
>
<RadialChart.Bar background cornerRadius={14} />
</RadialChart>
);
}For complete documentation and examples, see the RadialChart component page.
Fixed a bug in the internal useLongPressRepeat hook where rapid successive taps on NumberField increment/decrement buttons could leave orphaned timers running, causing runaway onChange calls.
Improvements:
onPressIn now calls clear() before scheduling a new timer, guaranteeing only one active repeat cycleclear to the onPressIn useCallback dependency array to keep the closure correctskipInitialAnimationThe SplitView component gains a skipInitialAnimation prop (default true) so the divider starts at its snap position without a spring on first render. Subsequent snaps and drags still use the spring animation as before.
New Capability:
import { SplitView } from "heroui-native-pro";
// Animate the divider into place on first render
<SplitView skipInitialAnimation={false}>
<SplitView.TopSection>...</SplitView.TopSection>
<SplitView.DragArea>
<SplitView.DragHandle />
</SplitView.DragArea>
<SplitView.BottomSection>...</SplitView.BottomSection>
</SplitView>This is especially useful when you want the divider to visibly settle into place on first mount. The default (true) avoids the spring on mount and screen focus — the common case for split layouts that should appear already positioned.
SplitView now recomputes constraints when minHeight, maxHeight, or snapPoints change, without requiring a container relayout. A stable snapPointsKey avoids unnecessary effect retriggers from inline array literals.
The following documentation pages have been updated to reflect the changes in this release:
skipInitialAnimation prop and constraint reactivity behaviorCrypto Wallet v1.0.0
First HeroUI Native Pro template — a fully-built mobile crypto wallet with portfolio, assets, and transaction views.
1.0.0-beta.4
Adds PieChart, RadarChart, WheelPicker, WheelPickerGroup, TimePicker, WheelTimePicker, DateTimePicker, and WheelDateTimePicker, refactors component labels to soft-foreground tokens, and fixes NumberStepper digit jitter plus WheelPicker overscroll and re-render edge cases.