Docs Platform
ChartShell
A state engine dropped inside the chart presenters that already exist, rather than a rewrite of all 87 visuals. Tooltip, legend and keyboard children are live now. Selection, brush and zoom are built but stay unplugged until a chart exposes the APIs they need.
Live machine
The shipped chartShellMachine with the legend child enabled: toggling a series updates hiddenSeries, the same state every chart's render plan reads.
chart-shell · live via createService
States · walked from the machine
Transitions from here · click to send
Context
{
"tooltip": null,
"legend": {
"value": "ready",
"context": {
"mode": "uncontrolled",
"hiddenSeries": []
}
},
"selection": null,
"brush": null,
"zoom": null,
"keyboard": null
}Log · newest first
No events yet — use the component above or send a transition.
Explore the layers
Machine
(@grassroot/ui-machines/chart-shell, may import
selection and tooltip).
Headless:
@grassroot/ui-headless-*/chart-shell plus vanilla
mountChartShell. Markup for tooltip/legend/crosshair stays
in @grassroot/charts-react. Spec:
packages/ui-headless/core/src/chart-shell/chart-shell.spec.md.
Behaviour contract
Live-wiring is 395/395 cells: 390 ChartShell edges and five native Heatmap exceptions. Seven charts are exempt. Visual JSX must not move into headless packages.
Heatmap
Heatmap is not ChartShell in any of the five packages. It uses its native model and hit-testing path; the former interaction package is retired.