TanStack
API Reference

Vue Chart

ts
import { Chart } from '@tanstack/vue-charts'

The definition infers datum and coordinate types for every callback. Replace its identity when captured application values change. It also owns focus, tooltip, animation, keyboard policy, focus distance, and spatial indexing.

Props

PropTypeDefaultMeaning
definitionChartDefinitionRequiredFramework-neutral chart definition
ariaLabelstringRequiredAccessible chart name
ariaDescriptionstringNoneOptional accessible description
heightnumber320 without a ratioFixed CSS and scene height
aspectRationumberNonePositive width-to-height ratio when height is absent
widthnumberResponsiveFixed CSS and scene width
initialWidthnumber640Initial and server width before responsive measurement
tabIndexnumber0Surface tab index; keyboard: false forces -1
idPrefixstringGeneratedPrefix for renderer-owned document IDs
renderSvgChartSvgRenderer<TDatum, TXValue, TYValue>renderChartSvgScene-to-SVG renderer
measureTextChartTextMeasurerHost measurerGuide text measurement
onFocusChange(point: ChartPoint | null) => voidNonePrimary focus callback
onFocusGroupChange(points: readonly ChartPoint[]) => voidNoneGrouped focus callback
onSelect(point: ChartPoint | null) => voidNonePointer or keyboard activation callback
onRender(context: ChartRenderContext) => voidNoneLive SVG, container, and scene after rendering
classstringNoneExtra class on the outer .ts-chart-host
styleStyleValueNoneOuter host style
classNamestringNoneExtra class on the rendered SVG surface

In templates, camel-cased props may use kebab case: aria-label, initial-width, and on-focus-change map to ariaLabel, initialWidth, and onFocusChange. Listener syntax such as @focus-change="handleFocus" supplies the callback prop. The component does not forward unrelated attributes.

Tooltip body slot

The optional #tooltipBody scoped slot receives points, content, defaultBody, pinned, and dismiss:

vue
<Chart :definition="definition" aria-label="Revenue">
  <template #tooltipBody="{ points, defaultBody, pinned, dismiss }">
    <component :is="defaultBody" />
    <SeriesDetail :points="points" />
    <button v-if="pinned" type="button" @click="dismiss">Close</button>
  </template>
</Chart>

defaultBody is a zero-argument Vue functional component containing the native title, rows, formatting, and swatches. Ordering, anchoring, placement, portaling, and pinning remain in the definition.

Exported types

ChartCommonProps contains the common host and presentation props. ChartProps adds the definition. ChartPresentationProps contains class and style. ChartTooltipBodySlotContext describes the scoped slot. The package also re-exports ChartDefinition and ChartPoint.

See the Vue adapter for lifecycle and SSR behavior, Focus and interaction for callback semantics, and Rendering and export for custom SVG renderers.