Time series: hover or tab a point, toggle a series in the legend
Cost · this week
total $189
Request latency · this week
p50 / p95, per day
Categorical: same primitive, different data + value format
Tool calls · by family
124 total
42Edit
31Read
24Bash
18Grep
9Web
Tokens · by model
2.7M this week
1.2MLarge
860kMedium
410kSmall
210kLocal
At-a-glance: sparkline stat tiles
This week
trend
Tokens
1.2M
Sessions
42
Progress / usage ring: drive it past each threshold
Context window
used
healthy < 60 elevated 60 to 85 high ≥ 85
Series + grid + axes + ring bands are all var(--token). Cyan is the brand series, extra series use the categorical ramp, warm = status. The island is live.
Each: key, label, a token color (a var(--color-…) string for brand cyan or a categorical tint), and data: number[]. The caller passes the already-filtered active set.
xLabels (LineChart) *
string[]
n/a
Category labels along the x-axis. Length should match each series.
area (LineChart)
boolean
false
TOP-LEVEL prop: also fill under the line (the AREA variant), applied to every series. There is no per-series area and no legend prop: the consumer owns the selectable legend + card chrome.
bars (BarChart) *
ChartBar[]
n/a
Each: label, value, and a token color (a var(--color-…) string, either a categorical tint per bar or brand cyan). There is no data / colorBy prop.
showLast (Sparkline)
boolean
true
Sparkline only: draw the filled dot at the latest point ("now"). data is number[]; color is a var(--color-…) string.
shape / value (Gauge ring)
'ring'; number
n/a
The usage ring is Gauge shape="ring" with value / max. It resolves the band internally: cyan < .60 → amber < .85 → red.
ariaLabel
string
n/a
Accessible name for the figure (LineChart / BarChart). A data summary is generated when omitted.
Parameter
Type
Default
Description
data *
List<Float>
n/a
Sparkline values; normalized to their own min/max. Needs ≥ 2 points (else a faint empty track renders).
Series stroke color. Pass LocalNockerlColors.current.accent or a categorical tint.
modifier
Modifier
Modifier
External modifier that carries the size (the Canvas fills it).
Chart from Swift Charts is configured by content marks + axis modifiers rather
than discrete parameters; the data is the input.
Style
Type
Default
Description
BarMark / LineMark
ChartContent
n/a
The mark per datum. Filled with a vertical NockerlTheme.accent → accentDark gradient; .cornerRadius(2).
.chartYAxis
modifier
n/a
Leading AxisMarks: AxisGridLine on NockerlTheme.hairline, AxisValueLabel on onSurfaceMuted.
.chartXAxis
modifier
n/a
Strided AxisMarks with muted-foreground labels.
Equalizer
View
n/a
The 5-bar audio meter (RecordingHUD): log-scaled capsules in NockerlTheme.accent; the live counterpart to a static sparkline.
Cross-platform drift (tracked for reconciliation)
Rendering: web + Android draw charts by hand (SVG / Compose Canvas); Swift uses Swift Charts. The vocabulary (token colors, hairline grid, cyan→accentDark bars) is unified; the engine differs.
Series count: the shipped Android Sparkline and Voice BarChart are single-series; the multi-series line + legend toggle shown here is the intended web API, not yet on the native apps.
Bar radius: native bars hardcode 2 / Swift .cornerRadius(2); should consume radius.track.
Usage bands: Android SessionChipsBar hardcodes the amber/red band hexes; they should resolve to status.warning / status.error.