ThemeSwitcher
Kildekode på GitHub · Les som Markdown
ThemeSwitcher er en kontrollert radiogruppe for å velge mellom de fire fargetemaene i designsystemet: Ild, Luft, Vann og Jord. Ved valg settes tema-attributtene (data-brand, data-theme og data-color-scheme) på <html>-elementet automatisk. Sett applyToDocument={false} hvis appen styrer temaet selv (f.eks. via cookie og server-rendering).
Importering
import { ThemeSwitcher, applyThemeToDocument } from "@kilden/designsystem";Grunnleggende bruk
function Demo() { const [theme, setTheme] = React.useState("ild"); return ( <ThemeSwitcher theme={theme} onThemeChange={setTheme} /> ); } render(<Demo />)
Størrelser
Standard
<ThemeSwitcher theme={theme} onThemeChange={setTheme} />Kompakt
function Demo() { const [theme, setTheme] = React.useState("vann"); return ( <ThemeSwitcher theme={theme} onThemeChange={setTheme} size="sm" /> ); } render(<Demo />)
Fargemodus
colorMode-prop styrer om temaet settes med lys, mørk eller systemets fargemodus. Standard er "system".
{
/* Tving lys modus */
}
<ThemeSwitcher theme={theme} onThemeChange={setTheme} colorMode="light" />;
{
/* Tving mørk modus */
}
<ThemeSwitcher theme={theme} onThemeChange={setTheme} colorMode="dark" />;ThemeSwitcher setter data-brand="bekk" og data-theme (f.eks. "bekk-ild") på <html>. Når colorMode er "light" eller "dark", settes også data-color-scheme. Med "system" fjernes det, og operativsystemet bestemmer.
Styr temaet selv
Med applyToDocument={false} endrer ikke ThemeSwitcher <html>. Bruk hjelperen applyThemeToDocument(theme, colorMode) når du selv vil sette temaet, f.eks. etter å ha lagret valget:
<ThemeSwitcher
theme={theme}
applyToDocument={false}
onThemeChange={(next) => {
setTheme(next);
saveThemeCookie(next);
applyThemeToDocument(next, colorMode); // setter f.eks. data-theme="bekk-ild" og data-color-scheme="dark"
}}
/>Bruksanbefalinger
Bruk som kontrollert komponent
ThemeSwitcher er alltid kontrollert — hold tema-tilstanden i en overordnet komponent og synkroniser den med f.eks. en cookie eller localStorage.
Ikke vis flere ThemeSwitchere samtidig
Ha kun én ThemeSwitcher i grensesnittet, ellers kan bruker ende opp med motstridende tema-valg.
Tilgjengelighet
- Rendres som en
role="radiogroup"medaria-label="Velg tema" - Hvert tema er en
role="radio"-knapp medaria-checked - Fullt tastaturtilgjengelig — Tab for fokus, Enter/Space for valg
Props
| Prop | Type | Default | Beskrivelse |
|---|---|---|---|
theme | "ild" | "luft" | "vann" | "jord" | — | Gjeldende valgt tema (påkrevd) |
onThemeChange | (theme: Theme) => void | — | Kalles når brukeren velger et nytt tema (påkrevd) |
size | "default" | "sm" | "default" | Størrelse |
colorMode | "light" | "dark" | "system" | "system" | Fargemodus som settes som data-color-scheme |
applyToDocument | boolean | true | Om temaet skal settes på <html> ved valg |