Skip to content
microcharts
ReferenceExpressiveSproutRow

SproutRow

SproutRow shows each item in a small set at one of four growth stages, from seed to bloom.

encodes
ordinal growth-stage glyph (height monotonic)
precision
high
nodes
n + 1 (+ n labels)

Six accounts sit in a portfolio table and each one is somewhere between just-signed and fully adopted. SproutRow gives each item one of four growth stages (seed → sprout → leaf → bloom), and the glyph height is strictly monotonic, so taller always means further along and the ordering reads without the key. The four stages are fixed and discrete: no half-stages, no interpolation, and presets recolor the glyphs without reshaping one.

SproutRow
interactive · 4.7 kB · static · 2.22 kB

The key, shown once: seed → sprout → leaf → bloom.

Install

Import & usereact/sprout-row
import { SproutRow } from "@microcharts/react/sprout-row";// accounts — real values under “Sample data” below<SproutRow data={accounts} title="Account health" />
Sample data
const accounts = [  { label: "Acme", value: 3 },  // 3 = bloom  { label: "Beta", value: 2 },  // 2 = leaf  { label: "Gamma", value: 3 },  { label: "Delta", value: 1 }, // 1 = sprout  { label: "Echo", value: 0 },  // 0 = seed  { label: "Foxx", value: 2 },];
Needs package + stylesheetSet up with AI

Try it

When to use it

Use it for account or project maturity across a small set, a health column in a portfolio table, or per-item lifecycle in a KPI card. Continuous values belong in MiniBar and trends in Sparkline; past about twelve items the row stops being readable.

Sizing

Variants

Labels are off by default, since the row usually sits beside its own row label and the heights carry the ordering. label="value" prints each item's stage number instead.

stage numbers + missing data

Edge cases

empty
a missing item — soil tick only
out-of-range values clamp to seed or bloom

Empty data draws just the frame. A null value renders only the soil tick, visibly distinct from a seed: seed is stage 0 and gets its own glyph, and "no data yet" is a different state from "just planted". Values outside [0, 3] round and clamp to the nearest real stage, seed or bloom, instead of drawing a fractional or out-of-bounds glyph.

Four homes

Accessibility

The accessible name summarizes the row: "4 items; 1 at bloom, 1 at seed." The interactive entry roves the items with ←/→ or hover and announces each as "Acme: bloom, stage 4 of 4.", the stage name plus a 1-of-4 index. A missing item reads "…: no data." A ring lifts the focused glyph.

The interactive entry follows the shared interaction contract: arrow keys rove between units on both axes, Home and End jump to the ends, and a click, tap, Enter or Space selects a unit — pinning its readout so it survives blur, until you select it again or press Escape. On touch, a tap pins and a drag scrubs.

Props

PropTypeNotes
data*{ label, value }[]value = stage 0–3.
labelsbooleanCategory labels under the slots.
label"none" | "value"Print the stage number above each glyph.
stepnumberHorizontal spacing between glyph slots (default 16; widens for labels).
fontSizenumberType size of the value and stage labels, in viewBox units. Defaults from `height`.
animatebooleaninteractiveOpt-in entrance motion when the chart mounts client-side — add import "@microcharts/react/motion" once. Inert on the server, on hydrated server HTML, and under prefers-reduced-motion.

Plus the shared grammar — data, domain, color, title, summary, format — and the layout props (width, height, className, style) that every chart accepts. Interactive entries also share animate and live, and — wherever a chart has more than one navigable unit — onActive, onSelect, selectedIndex and defaultSelectedIndex; and — wherever the chart shows a hover value — readout. See the shared grammar.

Related charts