Apply built-in themes to Gantt, customise CSS variables, and highlight time cells such as weekends and holidays.
SVAR Gantt ships with three built-in themes. Each theme is a Svelte wrapper component that applies a CSS class to its subtree and defines a full set of CSS custom properties.
Each theme component accepts a fonts boolean prop (defaults to true). When true, the theme loads its font stack automatically. Set it to false if you already load the fonts yourself:
Every visual detail is controlled by CSS custom properties. Override them inside your own CSS to customise individual aspects without building a new theme.
The simplest approach is to wrap your overrides in a CSS class and apply it with a minimal Svelte component that mirrors the built-in theme pattern:
<!-- themes/MyTheme.svelte --><script> import { Willow } from "@svar-ui/svelte-gantt"; let { fonts = true, children } = $props();</script><Willow {fonts}> {@render children()}</Willow><style> :global(.wx-willow-theme) { /* override only what you need */ --wx-gantt-task-color: #7c3aed; --wx-gantt-task-fill-color: #6d28d9; --wx-gantt-task-border-color: #6d28d9; --wx-gantt-summary-color: #059669; --wx-gantt-bar-border-radius: 2px; --wx-gantt-holiday-background: #fdf4ff; }</style>
All custom properties must be set on the theme’s root CSS class (e.g. .wx-willow-theme, .wx-material-theme, .wx-willow-dark-theme) so they are properly scoped.
Pass a highlightTime callback to apply a CSS class to individual day or hour cells. This is how weekends, holidays, and non-working hours are visually distinguished.
<script> import { Gantt } from "@svar-ui/svelte-gantt"; const scales = [ { unit: "year", step: 1, format: "%Y" }, { unit: "month", step: 2, format: "%F %Y" }, { unit: "week", step: 1, format: "Week %W" }, { unit: "day", step: 1, format: "%j, %l" }, ]; function isDayOff(date) { const d = date.getDay(); return d == 0 || d == 6; } function isHourOff(date) { const h = date.getHours(); return h < 8 || h == 12 || h > 17; } function highlightTime(d, u) { if (u == "day" && isDayOff(d)) return "wx-weekend"; if (u == "hour" && (isDayOff(d) || isHourOff(d))) return "wx-weekend"; return ""; }</script><Gantt {tasks} {links} {scales} {highlightTime} zoom/>
Return a CSS class name string (or empty string for no highlight). The built-in themes already style .wx-weekend with the --wx-gantt-holiday-background colour.
You can return any custom CSS class name — not just wx-weekend. Add your own styles to target it: