import chartExamplesUrl from "../site/chart-examples.js?url" # Chart Chart support is alpha. The JavaScript API, generated markup, and option names may change before the stable 1.0 release. Use Chart.js with Basecoat defaults for themed colors, external tooltips, and optional generated legends. Chart is an optional JavaScript helper. Load Chart.js first, then `basecoat.js`, then `chart.js`. ```html ``` ## Usage ```html ``` `basecoat.chart()` targets the `` directly and creates Basecoat's internal `.chart` container for Chart.js sizing. You do not need to add a wrapper or class in your HTML. Charts default to `aspect-video`. Use a height, `min-h-*`, or `aspect-*` utility on a parent element when you need a different measuring box. ## Legend Set `legend: true` to generate a Basecoat-styled legend after the canvas. The generated legend is display-only by default, matching shadcn/ui. Use a Chart.js plugin or custom legend markup if you need click-to-toggle behavior. ```js window.basecoat.chart("#visitors-chart", { type: "bar", labelKey: "month", data, series, legend: true, }) ``` ## Series `series` maps object keys from each data row to labels, colors, and optional Chart.js dataset settings. ```js window.basecoat.chart("#revenue-chart", { type: "line", labelKey: "month", data, series: { recurring: { label: "Recurring", color: "var(--chart-1)", surface: "gradient", dataset: { fill: true, tension: 0.35, }, }, new: { label: "New", color: "var(--chart-2)", dataset: { borderDash: [4, 4], }, }, }, }) ``` ## Escape Hatches Pass raw Chart.js options and plugins through `options` and `plugins`. ```js const chart = window.basecoat.chart("#visitors-chart", { type: "bar", labelKey: "month", data, series, options: { indexAxis: "x", scales: { y: { beginAtZero: true, }, }, plugins: { tooltip: { mode: "index", }, }, }, plugins: [myChartJsPlugin], }) ``` Pass complete Chart.js data through `chartData` when the simplified `data` plus `series` mapper is not enough. ```js window.basecoat.chart("#custom-chart", { type: "scatter", chartData: { datasets: [ { label: "Samples", data: [{ x: 1, y: 2 }, { x: 2, y: 5 }], }, ], }, options: { scales: { x: { type: "linear" }, }, }, }) ``` `basecoat.chart()` returns the Chart.js instance for single targets and an array of instances for multi-target selectors. ## Examples ### Bar Chart - Multiple ### Line Chart - Linear ### Line Chart - Step ### Bar Chart - Stacked ### Pie Chart - Donut ### Radar Chart ## API | Option | Default | Description | | --- | --- | --- | | `type` | `"bar"` | Chart.js chart type. | | `labelKey` | `"label"` | Row key used for labels. | | `data` | `[]` | Array of row objects, or raw Chart.js data with `datasets`. | | `series` | `{}` | Series config mapped from row keys. | | `legend` | `false` | Generates a Basecoat legend after the canvas. | | `tooltip` | `true` | Uses the Basecoat external tooltip. | | `options` | `{}` | Raw Chart.js options. | | `plugins` | `[]` | Raw Chart.js plugins. | | `chartData` | `undefined` | Complete Chart.js data object. Overrides the data mapper. | ### Series options | Option | Description | | --- | --- | | `label` | Display label for legends and tooltips. | | `color` | Base color for the series stroke, fill, legend marker, and tooltip marker. | | `surface` | Derives a fill from `color`. Use `true` for a translucent fill, `"gradient"` for an upstream-style vertical fade, or `{ from, to }` for custom opacity stops. | | `dataset` | Raw Chart.js dataset options. |