Volcano

Accessibility

Preserve meaningful navigation and data when a heatmap becomes visually dense.

Built-in semantics

The default cell exposes its label, source value, formatted metric, and selected state to accessibility services. Group headers, breadcrumbs, and Back controls expose their navigation action. This makes the default experience usable without requiring consumers to recreate basic semantics.

Custom cells

When cellContent replaces the default visual cell, it also replaces its content. Preserve an equivalent accessible name and state in the outermost cell that receives the supplied modifier. Include the domain meaning of a metric, not only its number: for example, “NVIDIA, up 2.3 percent” or “Checkout latency, 18 milliseconds above target.”

Do not rely on color alone

Color is compact but insufficient as the sole carrier of positive/negative or healthy/unhealthy meaning. Show a legend, expose formatted text where it fits, and provide a leaf detail destination. Use a palette that remains distinguishable for the product's accessibility requirements; a financial green/red scale may not be suitable for every domain or user.

Dense data is an accessibility concern

Hidden text in tiny rectangles is intentional, not missing content. Use aggregation and drill-down so an assistive-technology user and a touch user can both reach the same underlying item. See Large Datasets for the recommended overview strategy.

Localized labels and motion

In Compose, provide LocalHeatmapLabels with CompositionLocalProvider to translate noData, selected, notSelected, currentGroup, openGroup, navigate, showDetails, metric, enabled, disabled, back, and value. Back button text can be overridden with its label argument. Provide LocalHeatmapValueFormatter to format values in cell descriptions and the built-in detail popup. HeatmapMotion(enabled = false) also disables default cell color and press transitions.

React charts have a single Tab entry point. Arrow keys move in data order, Home/End move to the first/last item, and Enter/Space activate it. A visible focus indicator is provided. Movement is logical rather than spatial. Translate the empty state through emptyContent.

On this page