Theme studio

Design a theme, preview it live, then export it. Saved in this browser.

Quick picks #10b981
Generated scale
50100200300400500600700800900
Some text is below AA

AreaChart

  • Stable
  • WCAG 2.2 evidence
  • RTL

A stacked area chart: layers piled up over time with the title, range switch, actions and legend of the card. Data driven: categories and series in, SVG out, rendered on the server from the same props. Accessibility: as every chart of the library the figure is named by title, described by summary and backed by a data table with a total column (WCAG 1.1.1, 1.3.1); the plot is ONE tab stop with Left and Right, Home, End, Page Up and Page Down between categories and a tooltip on hover and focus that Escape closes (2.1.1, 1.4.13). Layers differ by colour, fill pattern and legend order (1.4.1); the draw-in is behind motion-safe:; the plot is laid out for its container width (1.4.10) and stays left-to-right in right-to-left pages. Consumer duties: a title that asks the question, a summary with the main message, units, meaningful series names.

import { AreaChart } from "@nexera-ui/react";
Loading example…
12
examples
26
props
6
live controls
1
platform
9
WCAG criteria
1
block uses it

Try every prop. Copy the code.

Change the props and the code updates. Check light and dark, LTR and RTL, and phone width.

Loading…
isStacked
smooth
patterns
title
description
isLegendHidden
Generated code
import { AreaChart } from "@nexera-ui/react";

<AreaChart />

Examples 11

The same examples as Storybook, rendered live. Open Code to copy one.

Without patterns

Without patterns the layers differ by colour and order only: use it when the layers are labelled in the plot.

Loading example…

Overlapping

isStacked={false}: every series is drawn from the baseline as a translucent area with a line on top.

Loading example…

Smooth

Loading example…

Range switch

A range switch that swaps the data, next to the menu in the header.

Loading example…

Loading

Loading example…

Empty

Loading example…

Error state

Loading example…

Single point

One month: a single stack, with its total in the tooltip and the table.

Loading example…

Many points

300 points: labels thin out to what fits and the keys still reach every day.

Loading example…

Long labels

Long titles and series names wrap in the header, the legend and the tooltip; x labels thin out.

Loading example…

Right to left

Right-to-left page: card, legend and table mirror, the plot keeps its left-to-right time axis, digits follow the locale.

Loading example…

Props 26

Press "Try it" on a card to load that prop into the playground.

26 props shown

categories*Nexera
readonly string[]

The x labels, one per data point ("Nov", "Dec",...). The first value of every series belongs to the first category.

Default –
categoryTitlesNexera
readonly string[]

The long form of each category for the tooltip, the point labels and the table.

Default `categories`
series*Nexera
readonly ChartSeries[]

The layers, bottom layer first. Each gets its own colour AND fill pattern (WCAG 1.4.1); the legend toggles them. A gap (null) in a stack takes no height.

Default –
isStackedNexera
boolean

Pile the series on top of each other so the top edge is the total. Set false to draw every series from the baseline as overlapping translucent areas with a line on top.

Default true
smoothNexera
boolean

Smooth monotone curves instead of straight segments.

Default false
patternsNexera
boolean

Draw a fill pattern (hatch, dots) over each layer except the first, in addition to its colour, so layers can be told apart without colour (WCAG 1.4.1). Turn off only when the layers are also labelled in the plot.

Default true
totalLabelNexera
string

Name of the stack total in the tooltip and the table. Translate it.

Default Total
title*Nexera
string

Chart title: the question the chart answers ("Headcount"). Required: it names the figure, the plot and the data table (WCAG 1.1.1).

Default –
descriptionNexera
ReactNode

Secondary line under the title.

Default –
summary*Nexera
string

One or two sentences with what the chart shows and its main message ("Headcount grew from 96 to 128 over twelve months"). Required: it describes the figure for assistive technology (WCAG 1.1.1); the data table has the details.

Default –
rangeNexera
ChartRangeProps

Range switch in the header: 3M, 6M, 12M. Pass the data of the chosen range back in.

Default –
actionsNexera
ReactNode

Extra controls in the header, after the range switch.

Default –
kpiNexera
ChartKpiProps

KPI row above the plot: the headline number with an optional label or change badge.

Default –
stateNexera
ChartPlotState

The state that replaces the plot: loading (skeleton), empty or error. A chart without a value to plot shows the empty state by itself; pass { status: "empty", title, description, action } to give it your wording.

Default –
tableNexera
ChartTableOptions

The data table that is the text alternative: caption, first-column header and whether it is visible or only for assistive technology.

Default –
localeNexera
string

Locale of digits and separators.

Default the `NexeraProvider` locale
valueFormatNexera
NumberFormatOptions

Intl.NumberFormat options for values ({ style: "currency", currency: "PKR" }, { style: "percent" }). Serialisable, so it works from a Server Component; formatValue needs a Client Component.

Default –
formatValueNexera
(value: number) => string

Formats a value for tooltips, point labels and the table (full precision). Wins over valueFormat.

Default –
formatAxisValueNexera
(value: number) => string

Formats an axis tick (short: "29M").

Default the compact notation of `valueFormat`
heightNexera
number

Height of the plot in px. The card grows with the header, KPI and legend around it.

Default 240
isLegendHiddenNexera
boolean

Hide the legend. The series stay named in the tooltip, the point labels and the table.

Default false
plotLabelNexera
string

Accessible name of the plot group. Translate it.

Default the chart `title`
noDataLabelNexera
string

Text for a missing value in the tooltip and the table. Translate it.

Default No data
hiddenSeriesNexera
readonly string[]

Names of the hidden series (controlled). Pair it with onHiddenSeriesChange.

Default –
defaultHiddenSeriesNexera
readonly string[]

Names of the series hidden at first (uncontrolled).

Default none
onHiddenSeriesChangeNexera
(hidden: readonly string[]) => void

Called with the names of the hidden series when the user toggles a legend entry.

Default –

* Required. React Aria props shown are the ones most apps use; the component accepts the rest of its React Aria props too.

Accessible by default.

Built on React Aria, and covered by the WCAG 2.2 evidence generated on every build.

WCAG 2.2 evidence

7 direct · 2 supporting
  • 1.1.1Non-text ContentLevel A · tested directly
  • 1.3.1Info and RelationshipsLevel A · tested directly
  • 1.4.1Use of ColorLevel A · supporting test
  • 1.4.10ReflowLevel AA · tested directly
  • 1.4.13Content on Hover or FocusLevel AA · tested directly
  • 2.1.1KeyboardLevel A · tested directly
  • 2.3.3Animation from InteractionsLevel AAA · supporting test
  • 4.1.2Name, Role, ValueLevel A · tested directly
  • 4.1.3Status MessagesLevel AA · tested directly

Fits any width.

Nexera components respond to the space they are given. Drag the corner of the frame, or pick a width.

0 px · drag the corner

Styling hooks

Pass className to add Tailwind classes (merged last). State is exposed as data attributes, so you can style it with variants like data-pressed:.

Usage
<AreaChart className="shadow-sm" />

Used in blocks

Related components