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

LineChart

  • Stable
  • WCAG 2.2 evidence
  • RTL

A line chart: a card with the title, range switch, KPI, legend and a plot that is laid out for the width of its container. Data driven: categories and series in, SVG out; the same props render the static SVG on the server. Accessibility: the figure is named by title and described by summary; every plotted value is also in a real data table (WCAG 1.1.1, 1.3.1). The plot is ONE tab stop: Left and Right move between categories, Home and End jump to the ends, Page Up and Page Down skip a tenth; a category is announced with all its values. Hovering or focusing a category shows a tooltip that stays while hovered and closes with Escape (1.4.13, 2.1.1). Series differ by colour, dash and marker shape, and the legend toggles them (1.4.1). The draw-in is behind motion-safe:. Labels thin out and the legend wraps at 320 px (1.4.10); the plot stays left-to-right in right-to-left pages while the card mirrors, and digits follow the locale. Consumer duties: a title that asks the question, a summary with the main message, units in valueFormat, meaningful series names.

import { LineChart } from "@nexera-ui/react";
Loading example…
12
examples
30
props
7
live controls
1
platform
9
WCAG criteria
0
blocks use 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…
smooth
area
markers
includeZero
title
description
isLegendHidden
Generated code
import { LineChart } from "@nexera-ui/react";

<LineChart />

Examples 11

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

Comparison

Figma Chart/Line/Comparison: two series (actual and benchmark), a labelled danger target line, markers on every point and a callout. Series differ by colour, dash and marker shape, and the legend entries toggle them.

Loading example…

Smooth

Straight segments are the default; smooth draws a monotone curve that never overshoots the data.

Loading example…

Range switch

Controls in the header: a range switch that swaps the data, and a menu button in the actions slot.

Loading example…

Loading

Loading, empty and error are ChartStates inside the card; the header stays.

Loading example…

Empty

Loading example…

Error state

Loading example…

Single point

One data point: the line cannot be drawn, so the point gets a marker.

Loading example…

Missing values

Gaps in the data break the line and read "No data" in the tooltip and the table.

Loading example…

Many points

365 daily points: labels thin out to what fits, markers are dropped, and the keys still reach every day (Page Down skips 36).

Loading example…

Long labels

Long category and series names: x labels thin out, legend entries and tooltip rows wrap, nothing is cut off.

Loading example…

Right to left

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

Loading example…

Props 30

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

30 props shown

categories*Nexera
readonly string[]

The x labels, one per data point, as drawn on the axis ("Nov", "Dec",...). The first value of every series belongs to the first category. Time stays in the order you give: the plot does not sort.

Default –
categoryTitlesNexera
readonly string[]

The long form of each category for the tooltip, the point labels and the table ("Aug 2026" for the axis label "Aug").

Default `categories`
series*Nexera
readonly ChartSeries[]

The lines. One series is the Figma Chart/Line/Trend (with the area under the line); two or more are Chart/Line/Comparison. Each series gets its own colour, dash and marker shape (WCAG 1.4.1); the legend toggles them.

Default –
smoothNexera
boolean

Draw a smooth monotone curve instead of straight segments. The curve never dips below or above the data it joins.

Default false
areaNexera
boolean

Fill the area between each line and the bottom of the plot.

Default true for one series (Trend), false for several (Comparison)
markersNexera
"active" | "all" | "none"

Markers on the points: active shows the marker, halo and crosshair of the hovered or focused point; all draws a marker on every point; none draws none. A point with no neighbour is always marked.

Default active
referenceLinesNexera
readonly ChartReferenceLineSpec[]

Horizontal reference lines: a target, a benchmark, an average. Each carries a text label, so it is not told by colour alone.

Default []
annotationsNexera
readonly ChartAnnotationSpec[]

Callouts on data points. The text is also part of the point's label and tooltip.

Default []
yMinNexera
number

Lower edge of the value axis.

Default rounded down from the data
yMaxNexera
number

Upper edge of the value axis.

Default rounded up from the data
includeZeroNexera
boolean

Start the value axis at 0. A line chart shows change, so it need not; an area is easier to read from 0.

Default false
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
<LineChart className="shadow-sm" />

Used in blocks

No block uses LineChart yet.

Related components