f5/unovis @unovis/vue
Modular data visualization framework for React, Angular, Svelte, Vue, and vanilla TypeScript or JavaScript
Version: 1.6.4 (Jan 2026) Tags: beta: 1.6.5-topojson.0 (Feb 2026), latest: 1.6.4 (Jan 2026)
References: Docs — API reference, guides
API Changes
This section documents version-specific API changes for @unovis/vue — prioritize recent major/minor releases.
-
NEW:
VisPlotbandandVisPlotline— new auxiliary components for highlighting data ranges or specific values source -
NEW:
VisRollingPinLegend— new specialized legend component added in v1.6.0 source -
NEW:
VisTreemap— new hierarchical data visualization component; includestileShowHtmlTooltipandtopLevelParentprops as of v1.6.4 source -
NEW:
VisAnnotations— new component for adding callouts and annotations to charts source -
NEW:
onRenderComplete— new callback available inVisXYContainerandVisSingleContainerto detect when rendering is finished source -
NEW:
VisAreaenhancements — addedstackMinHeightfor better visibility of small values and optional line display via core config source -
NEW:
VisSankeyupdates — newonLayoutCalculatedcallback,getSankeyDepthmethod, and support for Zoom/Pan and Node selection source -
NEW:
VisGraphfeatures — support for custom node rendering functions, SVG link labels, and Zoom start/end callbacks source -
NEW:
VisCrosshairadditions — newforceShowAtprop,onCrosshairMovecallback, andskipRangeCheckconfiguration source -
NEW: SSR Readiness — major internal refactor to support SSR (Server-Side Rendering) for Nuxt and other frameworks source
-
NEW: Reactive Map Data —
VisLeafletMapdata property is now fully reactive in Vue source -
NEW: Automatic Tooltip Placement —
VisTooltipnow automatically aligns when used in conjunction withVisCrosshairsource -
NEW:
VisBulletLegend— now supports multiple colors per legend item source -
NEW:
VisXYContainer— improvedscaleByDomainbehavior to ensure consistency across multiple chart types source
Also changed: calc() support in Annotations · theme-patterns accessible theme · VisFlowLegend refactored wrapper · axis grid line dasharray CSS variables · skipRangeCheck Crosshair prop
Best Practices
- Support ordinal values in XY components by returning the data index in the
xaccessor and providing atickFormatto theVisAxissource
<script setup lang="ts">
const x = (d, i: number) => i
const tickFormat = (i: number) => data[i].category
</script>
<template>
<VisXYContainer :data="data">
<VisStackedBar :x="x" :y="d => d.value" />
<VisAxis type="x" :tick-format="tickFormat" />
</VisXYContainer>
</template>
- Define custom SVG gradients or patterns using the
svgDefsproperty onVisXYContainerorVisSingleContainersource
<template>
<VisXYContainer :svg-defs="gradientDef">
<VisArea :x="d => d.x" :y="d => d.y" color="url(#gradient-id)" />
</VisXYContainer>
</template>
- Display continuous lines across missing data points by filtering
nullvalues and passing the dataset directly toVisLineinstead of the container source
<template>
<VisXYContainer>
<VisLine :data="data.filter(d => d.value !== null)" :x="x" :y="y" />
</VisXYContainer>
</template>
- Attach events to axis ticks or other sub-elements using the
eventsprop and component-specific selectors source
<script setup lang="ts">
import { VisAxisSelectors } from '@unovis/vue'
const axisEvents = {
[VisAxisSelectors.tick]: {
click: (val: number) => console.log('Clicked tick:', val)
}
}
</script>
<template>
<VisAxis type="x" :events="axisEvents" />
</template>
- Wrap Unovis components in
<ClientOnly>when using Nuxt or SSR to prevent errors from top-leveldocumentorwindowreferences source
<template>
<ClientOnly>
<VisXYContainer :data="data">
<VisLine :x="x" :y="y" />
</VisXYContainer>
</ClientOnly>
</template>
- Enable tooltips or interactions on TopoJSON map areas using the
featureselector source
<script setup lang="ts">
import { VisTopoJSONMapSelectors } from '@unovis/vue'
const triggers = {
[VisTopoJSONMapSelectors.feature]: d => d.properties.name
}
</script>
<template>
<VisTopoJSONMap :triggers="triggers" ... />
</template>
- Fix clipped top or bottom axis labels by increasing the
marginproperty on theVisXYContainersource
<template>
<VisXYContainer :margin="{ top: 10, right: 10, bottom: 10, left: 10 }">
<VisStackedBar ... />
</VisXYContainer>
</template>
- Use
tickTextWidthonVisAxisto enable automatic label wrapping and trimming for long axis labels source
<template>
<VisAxis type="x" :tick-text-width="100" />
</template>
- Display multiple colors within a single legend bullet by passing an array to the
colorproperty of a legend item source
<script setup lang="ts">
const items = [
{ name: 'Multi-segment', color: ['#ff0000', '#00ff00', '#0000ff'] }
]
</script>
<template>
<VisBulletLegend :items="items" />
</template>
- Programmatically control crosshair visibility and position using the
forceShowAtproperty for custom sync or interaction logic source
<template>
<VisCrosshair :force-show-at="{ x: 1707093300 }" />
</template>