Run
Sheets this week
Two textures on one field. Spot is a single Crouwel red — not a rainbow.
SheetsProofssheets
| Label | Sheets | Proofs |
|---|---|---|
| Mon | 12 | 4 |
| Tue | 18 | 6 |
| Wed | 15 | 5 |
| Thu | 26 | 9 |
| Fri | 24 | 7 |
Plots one or more lines on a 204px field. 1px grid, textured series, and one optional spot color.
| Label | Sheets | Proofs |
|---|---|---|
| Mon | 12 | 4 |
| Tue | 18 | 6 |
| Wed | 15 | 5 |
| Thu | 26 | 9 |
| Fri | 24 | 7 |
Sheets this week
Two textures on one field. Spot is a single Crouwel red — not a rainbow.
| Label | Sheets | Proofs |
|---|---|---|
| Mon | 12 | 4 |
| Tue | 18 | 6 |
| Wed | 15 | 5 |
| Thu | 26 | 9 |
| Fri | 24 | 7 |
Three ways in. They share one source, so the pixels match whichever you pick.
npm install @noorddev/vlak-react
// once, next to your app's root
import "@noorddev/vlak-react/css";
import { LineChart, Sparkline } from "@noorddev/vlak-react";Precompiled React and one stylesheet. No compiler to configure. Per-component imports work too: @noorddev/vlak-react/components/chart.
npx @noorddev/vlak-cli add chart
The StyleX leaf lands in components/vlak/, for your own compiler to own. See StyleX.
npx shadcn add https://vlak.dev/r/chart.json
The same registry item, installed by shadcn's CLI.
<link rel="stylesheet" href="node_modules/@noorddev/vlak/css/vlak.css" />
No React. Link vlak.css and use the markup and classes below.
import { LineChart, Sparkline } from "@noorddev/vlak-react";
<LineChart
height={204}
labels={days}
series={[
{ name: "Sheets", values: sheets },
{ name: "Proofs", values: proofs },
]}
unit="sheets"
yLabel="Output"
annotations={[{ at: 3, label: "Press" }]}
spot
/>
<Sparkline values={[3, 5, 4, 8, 7, 9]} label="Sheets" unit="k" />| Prop | Type | Default | Description |
|---|---|---|---|
seriesrequired | ChartSeries[] | ||
labels | string[] | ||
height | number | 204 | |
area | boolean | Fill under the first series. Prefer AreaChart for a dedicated area. | |
stacked | boolean | ||
inverted | boolean | ||
grid | boolean | true | |
ticks | number | 4 | |
unit | string | ||
yLabel | string | ||
xLabel | string | ||
annotations | ChartAnnotation[] | ||
domain | [number, number] | ||
spot | string | boolean | ||
valueFormat | (value: number) => string | ||
locale | string | BCP 47 tag for number formatting; undefined is the reader's own. |
Also accepts HTMLAttributes<HTMLDivElement>.
| Prop | Type | Default | Description |
|---|---|---|---|
valuesrequired | number[] | ||
width | number | 120 | |
height | number | 28 | |
spot | string | boolean | ||
label | string | What the trend is of; leads the accessible name and the table. | |
unit | string | ||
locale | string | BCP 47 tag for number formatting; undefined is the reader's own. |
Also accepts HTMLAttributes<HTMLSpanElement>.
| Keys | Does |
|---|---|
| Tab | Focuses the plot |
| Arrow right, Arrow left | Moves the cursor across the points; a status tooltip reads the values |
| Home, End | First or last point |
| Escape | Clears the cursor |
<div class="rs-chart"><svg viewBox="0 0 240 64" width="240" height="64"><line class="rs-chart-grid" x1="0" x2="240" y1="56" y2="56"/><path class="rs-chart-line" d="M0 44 L40 36 L80 40 L120 22 L160 26 L200 12 L240 16"/></svg></div>