Sparkline
Show a compact trend beside a value.
import { Sparkline } from "@sagui/ui";Loading demo
When to use
- A compact trend inside a card, table row, or KPI tile.
- Small charts people can scrub by pointer or keyboard to read past values.
When not to use
- Use bar-chart for comparing discrete periods with axes.
- Use stat-card or metric-card when only the latest value matters.
Installation
Install the package and import the styles once. The installation guide covers the Tailwind setup.
$ npm install @sagui/uiUsage
import { Sparkline } from "@sagui/ui";
export function Signups() {
return (
<Sparkline
label="Signups"
data={[12, 18, 15, 22, 30, 27, 34]}
labels={["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]}
value="34"
change="+26%"
tone="success"
/>
);
}Examples
Tones
Loading demo
Without scrubbing
interactive={false} makes it a static trend.
Loading demo
API reference
Sparkline
A small line chart with a headline value that can be scrubbed by pointer or keyboard.
| Prop | Type | Default | Description |
|---|---|---|---|
data (required) |
number[] |
– | Points in order, oldest first. |
label (required) |
string |
– | What is measured. Names the chart. |
value |
string |
– | Headline value at rest. While scrubbing it shows the point under the cursor. |
change |
string |
– | Aside text at rest, such as "+4.1%". |
tone |
"accent" | "success" | "warning" | "danger" |
"accent" |
Line and change color. accent uses the primary color. |
width |
number |
160 |
Drawing width in SVG units. |
height |
number |
52 |
Drawing height in SVG units. |
labels |
string[] |
– | One label per point, such as a date, shown while scrubbing. |
formatValue |
(value: number, index: number) => string |
– | Formats a scrubbed point. Defaults to a grouped number. |
area |
boolean |
true |
Quiet fill under the line. |
interactive |
boolean |
true |
Enables pointer and keyboard scrubbing. |
Keyboard interactions
| Keys | Action |
|---|---|
| ArrowLeftorArrowRight | Moves the cursor one point back or forward (ArrowDown and ArrowUp too). |
| PageDownorPageUp | Moves about a sixth of the series. |
| HomeorEnd | Jumps to the first or last point. |
| Escape | Stops scrubbing and returns to the latest value. |
Accessibility
- The figure has an aria-label describing the series; the SVG is hidden.
- When interactive, the plot is a focusable role="slider" whose aria-valuetext reads the point label and value.
- Pass labels so scrubbed points read as dates rather than positions.
Motion
- The line draws in on first view and the end dot appears as it lands.
- While scrubbing, the cursor springs between points, later points dim, and headline copy rolls.
- Reduced motion shows the full line at once and moves the cursor without springing.
Responsive behavior
- The plot measures its width with a ResizeObserver and redraws to fill its container.
- Scrubbing uses touch-action pan-y, so a horizontal drag scrubs while vertical swipes still scroll the page.
- On touch the readout returns to the latest value when the finger lifts.
Performance
- Each chart has its own ResizeObservers and an in-view draw; set interactive to false in dense tables to drop tab stops and handlers.
Notes
- Use for a compact trend inside a card or table row. Use bar-chart for comparing discrete periods with axes.
- Pass value as the formatted latest reading; formatValue should match it so scrubbed values look consistent.
- Set interactive to false in dense tables to avoid many tab stops.