Themes
A theme defines the series palette, background/text colors and the font. theme accepts a built-in theme name or a ThemeOptions object.
Built-in themes
'default' — light (used when theme is omitted):
import { getData } from './data';
import type { ChartOptions } from 'grafit-charts';
export function createOptions(): ChartOptions {
return {
data: getData(),
title: { text: 'Light theme (default)' },
series: [
{ type: 'bar', xField: 'month', yField: 'desktop', name: 'Desktop' },
{ type: 'line', xField: 'month', yField: 'mobile', name: 'Mobile' },
],
theme: 'default',
};
}export function getData() {
return [
{ month: 'Jan', desktop: 42, mobile: 28 },
{ month: 'Feb', desktop: 49, mobile: 34 },
{ month: 'Mar', desktop: 46, mobile: 41 },
{ month: 'Apr', desktop: 58, mobile: 47 },
{ month: 'May', desktop: 63, mobile: 55 },
{ month: 'Jun', desktop: 60, mobile: 62 },
];
}'dark' — dark:
import { getData } from './data';
import type { ChartOptions } from 'grafit-charts';
export function createOptions(): ChartOptions {
return {
data: getData(),
title: { text: 'Dark theme (dark)' },
series: [
{ type: 'bar', xField: 'month', yField: 'desktop', name: 'Desktop' },
{ type: 'line', xField: 'month', yField: 'mobile', name: 'Mobile' },
],
theme: 'dark',
};
}export function getData() {
return [
{ month: 'Jan', desktop: 42, mobile: 28 },
{ month: 'Feb', desktop: 49, mobile: 34 },
{ month: 'Mar', desktop: 46, mobile: 41 },
{ month: 'Apr', desktop: 58, mobile: 47 },
{ month: 'May', desktop: 63, mobile: 55 },
{ month: 'Jun', desktop: 60, mobile: 62 },
];
}The theme can be switched on the fly — chart.updateDelta({ theme: 'dark' }) re-renders the chart with animation. The demos on this site switch this way along with the page theme (unless the example sets a theme explicitly).
Custom theme
A theme object is baseTheme (the foundation) + palette (series colors, cycled) + params (design tokens):
import { getData } from './data';
import type { ChartOptions } from 'grafit-charts';
export function createOptions(): ChartOptions {
return {
data: getData(),
title: { text: 'Sales funnel' },
series: [{ type: 'bar', xField: 'stage', yField: 'count', name: 'Deals', cornerRadius: 6 }],
legend: { enabled: false },
// custom theme: palette + design tokens on top of a base theme
theme: {
baseTheme: 'dark',
palette: { fills: ['#27c08d'] },
params: {
backgroundColor: '#0d1f1a',
foregroundColor: '#d8f3e9',
fontFamily: 'Georgia, serif',
},
},
};
}export function getData() {
return [
{ stage: 'Leads', count: 1840 },
{ stage: 'Qualified', count: 1120 },
{ stage: 'Demo', count: 640 },
{ stage: 'Contract', count: 310 },
{ stage: 'Payment', count: 245 },
];
}A color set on a series (fill, stroke) takes precedence over the theme palette.
Overrides
overrides are partial options layered beneath user options: common — chart-level blocks for all charts, <seriesType>.series — defaults for series of that type. Handy for extracting your brand style into a single object:
import { getData } from './data';
import type { ChartOptions } from 'grafit-charts';
export function createOptions(): ChartOptions {
return {
data: getData(),
title: { text: 'Overrides: defaults per series type' },
series: [
{ type: 'bar', xField: 'month', yField: 'desktop', name: 'Desktop' },
{ type: 'line', xField: 'month', yField: 'mobile', name: 'Mobile' },
],
theme: {
overrides: {
common: { legend: { position: 'right' } },
bar: { series: { cornerRadius: 8, fillOpacity: 0.8 } },
line: { series: { strokeWidth: 3.5, lineDash: [12, 6], marker: { enabled: false } } },
},
},
};
}export function getData() {
return [
{ month: 'Jan', desktop: 42, mobile: 28 },
{ month: 'Feb', desktop: 49, mobile: 34 },
{ month: 'Mar', desktop: 46, mobile: 41 },
{ month: 'Apr', desktop: 58, mobile: 47 },
{ month: 'May', desktop: 63, mobile: 55 },
{ month: 'Jun', desktop: 60, mobile: 62 },
];
}Precedence: library defaults < overrides.common < overrides[type].series < explicit options.
ThemeOptions
| Option | Type | Description |
|---|---|---|
baseTheme | 'default' | 'dark' | base theme to build on |
palette.fills | ColorValue[] | series fill colors, by series index |
palette.strokes | ColorValue[] | stroke colors (defaults to fills) |
params.backgroundColor | ColorValue | chart background |
params.foregroundColor | ColorValue | primary text color |
params.fontFamily | string | font for all text |
overrides.common | Record<string, unknown> | chart-level blocks for all charts |
overrides.<seriesType>.series | Record<string, unknown> | defaults for series of a specific type |