
unovis-vue-skilld
Vue 3 components for the Unovis data visualization framework, @unovis/vue 1.7.0. Use when writing, debugging, or updating code that imports @unovis/vue or renders Vis components such as VisXYContainer, VisSingleContainer, VisArea, VisLine, VisStackedBar, VisCrosshair, or VisTooltip. Covers the component catalog, props, events, tooltips, colors, patterns, SSR, and the 1.7.0 API changes.
- Installs
- 112
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/skilld-dev/vue-ecosystem-skills --skill unovis-vue-skilld- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads unovis-vue-skilld automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
@unovis/vue 1.7.0
Unovis is a modular data visualization framework. @unovis/vue provides autogenerated Vue 3 wrappers for the core classes in @unovis/ts (README.md).
Version and environment
- Package:
@unovis/vue@1.7.0. - Peer dependencies:
@unovis/tspinned to exactly1.7.0, andvue^3(package.json:56-59). Install both at the exact same version:npm install -P @unovis/ts @unovis/vue(README.md:16). A version mismatch between the two packages breaks peer resolution. - ESM first. The package has
type: module, subpath exports under./*, andsideEffects: false(package.json:28-39). - No CSS import. Styles are injected from JS at runtime (
index.js:1). - Docs: https://unovis.dev/docs/intro. Component docs live at
https://unovis.dev/docs/components/<Name>. Gallery: https://unovis.dev/gallery.
How the wrappers work
Every Vis* component is a thin wrapper around one @unovis/ts class. Verify these rules before writing code:
- Props map one to one to the core config interface, for example
AreaConfigInterface. Use camelCase in script and kebab-case in templates::line-width="2",:stack-min-height="true". - Accessors are functions. Pass them as props:
:x="d => d.x",:y="['sales', 'cost'].map(k => d => d[k])". datacan live on the container or on a component. The container shares itsdatawith all children. A child falls back to its owndataonly when the container has none (components/area/index.js:35). Pass data at the container level for multi component charts.- Reactivity: a config change calls
setConfigthenrenderon the core class. Adatachange callssetData. Both update the chart in place, without remounting. - Every wrapper exposes
component, a ref to the core@unovis/tsinstance, throughdefineExpose. Use a template ref to call core methods:chart.value?.component?.destroy(). - Each module also exports selectors, for example
VisAxisSelectorsequalsAxis.selectorsfrom@unovis/ts. Use selectors with theeventsprop and tooltiptriggers(events and tooltips). - Containers collect children through provide and inject. Place
Vis*children in the container's default slot. The XY container defers chart creation until at least one child registers (containers/xy-container/index.js:50-52), sov-forand conditional children work. - Legends and maps are standalone.
VisBulletLegend,VisFlowLegend,VisRollingPinLegend,VisLeafletMap, andVisLeafletFlowMaprender into their own DOM node. Use them outside containers. All other components require a container context.
Quick start
<script setup lang="ts">
import { ref } from 'vue'
import { VisXYContainer, VisLine, VisAxis } from '@unovis/vue'
type DataRecord = { x: number; y: number }
const data = ref<DataRecord[]>([
{ x: 0, y: 0 },
{ x: 1, y: 2 },
{ x: 2, y: 1 },
])
const x = (d: DataRecord) => d.x
const y = (d: DataRecord) => d.y
</script>
<template>
<VisXYContainer :data="data" :height="300">
<VisLine :x="x" :y="y" />
<VisAxis type="x" />
<VisAxis type="y" />
</VisXYContainer>
</template>
Sizing: the container fits its parent's width. Set height explicitly, or the default of 300px applies (XY Container docs).
Component catalog
Two containers: VisXYContainer for XY charts with axes, VisSingleContainer for one standalone visualization plus an optional tooltip. Full list with key props: components.md.
- XY components:
VisArea,VisLine,VisScatter,VisStackedBar,VisGroupedBar,VisBoxplot(new in 1.7),VisTimeline,VisXYLabels. - Auxiliary:
VisAxis,VisCrosshair,VisTooltip,VisBrush,VisFreeBrush,VisPlotband,VisPlotline,VisAnnotations. - Single container components:
VisDonut,VisNestedDonut,VisRadialBar(new in 1.7),VisHeatmap(new in 1.7),VisTreemap,VisSankey,VisChordDiagram,VisGraph,VisTopoJSONMap. - Standalone:
VisBulletLegend,VisFlowLegend,VisRollingPinLegend,VisLeafletMap,VisLeafletFlowMap.
Common tasks
Ordinal x values
Return the index from the x accessor. Format the axis ticks back to labels.
<script setup lang="ts">
const x = (d: DataRecord, i: number) => i
const tickFormat = (i: number) => data.value[i]?.category ?? ''
</script>
<template>
<VisXYContainer :data="data">
<VisStackedBar :x="x" :y="d => d.value" />
<VisAxis type="x" :tick-format="tickFormat" />
</VisXYContainer>
</template>
Tooltip with crosshair
<script setup lang="ts">
import { VisStackedBarSelectors } from '@unovis/vue'
const triggers = {
[VisStackedBarSelectors.bar]: (d: DataRecord) => `${d.category}: ${d.value}`,
}
</script>
<template>
<VisXYContainer :data="data">
<VisStackedBar :x="x" :y="d => d.value" />
<VisCrosshair :template="triggers" />
<VisAxis type="x" />
</VisXYContainer>
</template>
More patterns, including snap mode and events: events-tooltips.md.
Custom fills with svgDefs
<script setup lang="ts">
const gradientDef = `
<linearGradient id="area-gradient" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#4d8cfd" stop-opacity="0.8" />
<stop offset="100%" stop-color="#4d8cfd" stop-opacity="0.1" />
</linearGradient>`
</script>
<template>
<VisXYContainer :data="data" :svg-defs="gradientDef">
<VisArea :x="x" :y="y" color="url(#area-gradient)" />
</VisXYContainer>
</template>
Waterfall chart with the baseline accessor
VisStackedBar gained baseline in 1.7 for floating bars (components/stacked-bar/index.js:11). Pair it with barStyle for dashed projected values (components/stacked-bar/index.js:10).
<script setup lang="ts">
// data records carry the floating bar start and end
const baseline = (d: WaterfallRecord) => d.start
const y = (d: WaterfallRecord) => d.end - d.start
const color = (d: WaterfallRecord) => (d.delta >= 0 ? '#00c19a' : '#ff6b7e')
</script>
<template>
<VisXYContainer :data="data">
<VisStackedBar :x="x" :y="y" :baseline="baseline" :color="color" />
<VisAxis type="x" />
<VisAxis type="y" />
</VisXYContainer>
</template>
Align stacked charts with bleed
bleed overrides the space the container reserves for edge marks. It takes a Spacing object or a function. Capture the horizontal bleed of the chart with the largest marks from onRenderComplete, then pass it to the other charts (containers/xy-container/index.js:29-30). Guide: https://unovis.dev/docs/guides/bleed.
<script setup lang="ts">
import { ref } from 'vue'
const horizontalBleed = ref<{ left?: number; right?: number }>()
const onRenderComplete = (svg: SVGSVGElement, margin: unknown, bleed: { left: number; right: number }) => {
horizontalBleed.value = { left: bleed.left, right: bleed.right }
}
</script>
<template>
<VisXYContainer :data="data" :on-render-complete="onRenderComplete">
<VisScatter :x="x" :y="y" :size="25" />
</VisXYContainer>
<VisXYContainer :data="data" :bleed="horizontalBleed">
<VisLine :x="x" :y="y" />
</VisXYContainer>
</template>
Colors and patterns
1.7 adds chart wide color synchronization and pattern fills:
colorFunctiononVisXYContainer,VisSingleContainer, andVisBulletLegendmaps a key to a color (containers/xy-container/index.js:39,html-components/bullet-legend/index.js:17).colorKeyson a component names the stable keys aligned with itsyaccessors (components/area/index.js:25).patternonVisArea,VisLine,VisScatter,VisGroupedBar,VisStackedBar,VisDonut, and others adds stripes, dots, and hatches.
Details and examples: color-patterns.md.
Gotchas
- Pin
@unovis/tsand@unovis/vueto the same exact version. The peer range is1.7.0, with no caret (package.json:57). VisCrosshair,VisTimeline, andVisBoxplotdeclare onlydataas a Vue prop. All other config travels as attributes. If a config prop seems ignored on these three, upgrade to 1.7.0: theirdataprop was silently dropped between 1.6.5 and 1.7 (fix PR).- Axis labels clipped at the top or bottom? Increase the container
margin, for example:margin="{ top: 10, right: 10, bottom: 10, left: 10 }". - Nuxt and SSR: the core is SSR ready since 1.6.4. If hydration or
documenterrors appear, wrap the chart in<ClientOnly>(issue 607). For headless rendering in Node 20+, use the separate@unovis/ssrpackage (https://unovis.dev/releases/1.7). - Strict CSP: set
window.UNOVIS_NONCEbefore the library is imported. Guide: https://unovis.dev/docs/guides/csp. - Dark theme: add the class
theme-darktobody. Override--vis-dark-*variables per component (theming guide).
References
- components.md: full export catalog with container rules and key props.
- events-tooltips.md: events, selectors, tooltips, crosshair, annotations.
- color-patterns.md: color synchronization, patterns, CSS variables, themes.
- migration-v1.7.md: changes from 1.6.x to 1.7.0 that affect Vue code.
FAQ
What does the unovis-vue-skilld skill do?
Vue 3 components for the Unovis data visualization framework, @unovis/vue 1.7.0. Use when writing, debugging, or updating code that imports @unovis/vue or renders Vis components such as VisXYContainer, VisSingleContainer, VisArea, VisLine, VisStackedBar, VisCrosshair, or VisTooltip. Covers the component catalog, props, events, tooltips, colors, patterns, SSR, and the 1.7.0 API changes.
How do I install unovis-vue-skilld?
Run npx skills add https://github.com/skilld-dev/vue-ecosystem-skills --skill unovis-vue-skilld in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/unovis-vue-skilld/ (personal) or .claude/skills/unovis-vue-skilld/ (project).
Which AI agents can use unovis-vue-skilld?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is unovis-vue-skilld safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains unovis-vue-skilld?
It is published by skilld-dev in skilld-dev/vue-ecosystem-skills. It has 112 recorded installs.
More from skilld-dev/vue-ecosystem-skills
quasar-skilld
skilld-dev/vue-ecosystem-skills
Build, configure, and debug apps with the Quasar framework (quasar npm package, v2.33.1). Use when writing, reviewing, or debugging code that imports "quasar" or "quasar/wrappers", configuring Quasar with Vite, Vitest, Storybook, UMD, or Quasar CLI, styling with Quasar Sass variables, or upgrading between Quasar v2 releases.
vue-i18n-skilld
skilld-dev/vue-ecosystem-skills
Open the skill to read its SKILL.md instructions.
vue-skilld
skilld-dev/vue-ecosystem-skills
Open the skill to read its SKILL.md instructions.
vuetify-skilld
skilld-dev/vue-ecosystem-skills
Vue Material Component Framework. Use when writing, debugging, or configuring code that imports vuetify v4.x. Covers createVuetify setup, components and labs, composables, theming, icons, dates and locale, styles and SASS variables, treeshaking, and v3 to v4 migration.
pinia-skilld
skilld-dev/vue-ecosystem-skills
Open the skill to read its SKILL.md instructions.
vue-router-skilld
skilld-dev/vue-ecosystem-skills
Open the skill to read its SKILL.md instructions.
Popular frontend & design skills
setup-matt-pocock-skills
mattpocock/skills
Configure this repo for the engineering skills: set up its issue tracker, triage label vocabulary, and domain doc layout. Run once before first use of the other engineering skills.
frontend-design
anthropics/skills
Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.
hyperframes-animation
heygen-com/hyperframes
All animation knowledge for HyperFrames — atomic motion rules, multi-phase scene blueprints, scene transitions, broader motion-design techniques, AND the seven runtime adapters (GSAP default, plus Lottie, Three.js, Anime.js, CSS keyframes, Web Animations API, TypeGPU). Use for any motion or animation task: pick 2-4 rules and compose, or load a blueprint, or look up runtime-specific API (e.g. GSAP eases / Lottie player / Three.js mixer). Also covers auditing an existing composition's choreography (animation map) and 24 named text-animation effects. HyperFrames-native: single paused timeline, seek-safe, deterministic.
prototype
mattpocock/skills
Build a throwaway prototype to answer a design question. Use when the user wants to sanity-check whether a state model or logic feels right, or explore what a UI should look like.
hyperframes-core
heygen-com/hyperframes
The HyperFrames composition contract — build one renderable project. Use for composition structure, the data- timing attributes, class="clip", tracks, sub-compositions, variables, framework-owned media playback, deterministic-render rules, and validation. Read before writing composition HTML.
vercel-react-best-practices
vercel-labs/agent-skills
React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.