Skip to content

Documentation / @ripl/vue-charts

@ripl/vue-charts ​

Declarative Vue 3 components for Ripl's 25 chart types.

Props are the chart's options, and changing one updates the chart in place rather than rebuilding it.

Installation ​

bash
npm install @ripl/vue-charts

@ripl/vue and @ripl/charts arrive as dependencies. vue (3.5 or later) is a peer dependency.

Quick start ​

typescript
import {
    createRiplCharts,
} from '@ripl/vue-charts';

createApp(App).use(createRiplCharts()).mount('#app');

createRiplCharts() registers the core Ripl components too, so a chart can share a page, or even a context, with hand-drawn elements.

vue
<template>
    <ripl-bar-chart
        :data="data"
        :series="series"
        key-by="month"
        title="Monthly breakdown"
        :legend="true"
        @barclick="onBarClick"
    />
</template>

Props are options ​

Every prop maps to a top-level chart option, the furniture included: axis, grid, legend, tooltip, crosshair, annotations, navigator, title, animation, theme and padding.

  • An unbound prop is never written, so the chart keeps its own default.
  • A bound object replaces the whole option. The merge is shallow and top-level, so :axis must be passed complete rather than partially.
  • Props are compared by identity, so hoist object and array bindings to a computed.

keyBy, not key ​

Vue reserves key as the vnode key, so a chart's key option is bound as key-by and renamed on the way in.

Events ​

Listener props come from the events each chart declares, so they match the imperative API exactly: @barclick, @segmententer, @nodeclick. A chart subscribes only to an event you actually bind.

Sharing a context ​

A chart builds its own scene and renderer, so it is a peer of <ripl-context> rather than something nested in a <ripl-scene>. Given one, it draws into it:

vue
<template>
    <ripl-context style="width: 640px; height: 360px">
        <ripl-bar-chart :data="data" :series="series" key-by="month" />
    </ripl-context>
</template>

Unmounting then leaves the context alone; a standalone chart destroys the surface it made.

Compositions ​

typescript
import {
    useRiplChart,
} from '@ripl/vue-charts';

const chart = useRiplChart();

A template ref on any chart component resolves to the chart itself, which is how you reach the imperative APIs with no declarative equivalent: chart.navigator, and push() / clear() on a realtime chart.

Documentation ​

Full documentation lives at ripl.run.

License ​

MIT

Interfaces ​

InterfaceDescription
RiplChartDefinitionDescribes one chart to wrap as a component.

Type Aliases ​

Type AliasDescription
RiplAnyChartAny chart, whatever its option and event types.
RiplChartListenerA forwarded chart event listener. Receives the event's payload directly, with the underlying Event — carrying target, timestamp and stopPropagation — as a second argument.
RiplChartListenersThe listener props a chart component accepts, derived from the events the chart declares.
RiplChartPropsA chart's options as component props, with any option whose name Vue reserves renamed.

Variables ​

VariableDescription
BASE_CHART_OPTION_KEYSThe options every chart accepts, whatever its type.
CHART_OPTION_KEYSThe options specific to each chart type, on top of BASE_CHART_OPTION_KEYS.
RIPL_CHARTInjection key for the chart a subtree belongs to.
RiplArcDiagramChartAn arc diagram: nodes on a line, links drawn as arcs above it.
RiplAreaChartAn area chart: one or more filled series over a shared category axis.
RiplBarChartA bar chart, vertical or horizontal, grouped or stacked.
RiplBoxPlotChartA box plot showing the quartiles and outliers of each category.
RiplChordChartA chord diagram of flows between groups arranged around a circle.
RiplContextCreates a Ripl rendering context and provides it to its subtree, mounting the canvas into its own root element.
RiplForceDirectedChartA force-directed graph, laid out by simulated attraction and repulsion.
RiplFunnelChartA funnel chart of values narrowing through successive stages.
RiplGanttChartA gantt chart of tasks across time, with optional dependencies and progress.
RiplGaugeChartA gauge showing a single value within a range.
RiplHeatmapChartA heatmap of values across two categorical axes.
RiplHistogramChartA histogram binning a continuous value into buckets.
RiplLineChartA line chart: one or more series over a shared category axis.
RiplPackedCircleChartA packed circle chart sizing each datum by value.
RiplPieChartA pie or donut chart of values as angular segments.
RiplPolarAreaChartA polar area chart: segments of equal angle and value-driven radius.
RiplPolarScatterChartA polar scatter chart plotting points by angle and radius.
RiplRadarChartA radar chart comparing series across shared categories.
RiplRadialBarChartA radial bar chart of values as concentric arcs.
RiplRealtimeChartA realtime chart streaming values through a fixed time window.
RiplSankeyChartA sankey diagram of flows between nodes, sized by value.
RiplScatterChartA scatter chart plotting points by two continuous values.
RiplStockChartA stock chart of candlestick or OHLC bars, with optional volume.
RiplSunburstChartA sunburst chart of a hierarchy as concentric rings.
RiplTreemapChartA treemap of a hierarchy as nested rectangles.
RiplTrendChartA trend chart mixing line, area and bar series on shared axes.

Functions ​

FunctionDescription
createRiplChartsCreates the Vue plugin that registers every Ripl chart component globally, along with the core components from @ripl/vue — so a chart can share a <ripl-context> with hand-drawn elements.
defineRiplChartBuilds a declarative component for a Ripl chart.
useRiplChartReturns the chart provided by the nearest chart component.
useRiplContextReturns the rendering context provided by the nearest context component.