Comparable Horizontal Bar
Comparison
Did it get better or worse? Put before and after side by side on one bar per label, and the gap that closed (or opened) is the first thing the reader sees.
canvas · responsive
The chart above is the same engine in every framework - only the integration code below differs.
Usage
tsx
import { ComparableHorizontalBarChart } from "@michi-vz/react";
export default () => <ComparableHorizontalBarChart {...props} />; // props = the chart optionsvue
<script setup>
import { ComparableHorizontalBarChart } from "@michi-vz/vue";
</script>
<template>
<ComparableHorizontalBarChart :options="props" />
</template>svelte
<script>
import { comparableHorizontalBarChart } from "@michi-vz/svelte";
</script>
<div use:comparableHorizontalBarChart={props}></div>ts
// main.ts - register the elements once
import "@michi-vz/angular";
import { applyComparableHorizontalBarChartProps } from "@michi-vz/angular";
// component (uses CUSTOM_ELEMENTS_SCHEMA)
// template: <michi-vz-comparable-horizontal-bar-chart #c></michi-vz-comparable-horizontal-bar-chart>
applyComparableHorizontalBarChartProps(this.c.nativeElement, props);html
<script type="module" src="https://cdn.jsdelivr.net/npm/@michi-vz/wc"></script>
<michi-vz-comparable-horizontal-bar-chart id="c"></michi-vz-comparable-horizontal-bar-chart>
<script>
Object.assign(document.getElementById("c"), props); // dataSet/series, title, …
</script>ts
import { mountComparableHorizontalBarChart } from "@michi-vz/core";
const chart = mountComparableHorizontalBarChart(el, props);
chart.update(next);
chart.getContext(); // renderer-agnostic, LLM-ready
chart.destroy();API
Props are typed as ComparableHorizontalBarChartProps in @michi-vz/core. Shared across all charts: width, height, margin, colors / colorsMapping, renderer ("svg" | "canvas"), highlightItems, disabledItems, and the on* callbacks. onChartDataProcessed / getContext() return the renderer-agnostic ChartContext.