Aller au contenu

ThemeProvider

Fournisseur de contexte pour la gestion des thèmes. Permet le contrôle programmatique du thème, la détection des préférences système, la persistance localStorage et la synchronisation entre onglets.

import { ThemeProvider, useTheme } from 'asterui'

Enveloppez votre application avec ThemeProvider pour activer le contrôle du thème :

main.tsx
import { ThemeProvider } from 'asterui'
createRoot(document.getElementById('root')!).render(
<ThemeProvider defaultTheme="system">
<App />
</ThemeProvider>
)

Utilisez le hook useTheme pour contrôler le thème :

function ThemeSwitcher() {
const { theme, setTheme, resolvedTheme, isDark } = useTheme()
return (
<div>
<p>Sélectionné : {theme}</p>
<p>Appliqué : {resolvedTheme}</p>
<p>Mode : {isDark ? 'Sombre' : 'Clair'}</p>
<button onClick={() => setTheme('light')}>Clair</button>
<button onClick={() => setTheme('dark')}>Sombre</button>
<button onClick={() => setTheme('system')}>Système</button>
</div>
)
}

Utilisez n’importe quel thème DaisyUI en le définissant directement :

function ThemeSelector() {
const { setTheme, resolvedTheme } = useTheme()
const themes = ['light', 'dark', 'cupcake', 'cyberpunk', 'retro', 'valentine']
return (
<select value={resolvedTheme} onChange={(e) => setTheme(e.target.value)}>
{themes.map(t => <option key={t} value={t}>{t}</option>)}
</select>
)
}

Définissez storageKey à false pour désactiver la persistance localStorage :

<ThemeProvider defaultTheme="dark" storageKey={false}>
<App />
</ThemeProvider>

Pour les thèmes personnalisés, fournissez une fonction isDarkTheme :

<ThemeProvider
defaultTheme="system"
isDarkTheme={(theme) => ['dark', 'night', 'dracula', 'synthwave'].includes(theme)}
>
<App />
</ThemeProvider>
PropriétéTypeDéfautDescription
defaultThemestring'system'Thème initial. Utilisez 'system' pour suivre la préférence du navigateur.
storageKeystring | false'asterui-theme'Clé localStorage pour la persistance. Définir à false pour désactiver.
lightThemestring'light'Thème à utiliser quand la préférence système est claire.
darkThemestring'dark'Thème à utiliser quand la préférence système est sombre.
isDarkTheme(theme: string) => boolean-Fonction personnalisée pour déterminer si un thème est sombre.
childrenReact.ReactNode-Composants enfants.
PropriétéTypeDescription
themestring | undefinedLe thème sélectionné (ex., 'system', 'light', 'dark').
resolvedThemestring | undefinedLe thème appliqué réel après résolution de 'system'.
isDarkbooleantrue si le mode sombre est actif.
setTheme(theme: string) => voidFonction pour changer le thème.
colorsThemeColorsCouleurs du thème calculées en valeurs hex.
systemTheme'light' | 'dark' | undefinedLa préférence système détectée.

Voir useTheme pour la documentation complète du hook incluant l’usage autonome et ThemeColors.

  • Détection des Préférences Système : Détecte automatiquement prefers-color-scheme: dark
  • Persistance : Sauvegarde la préférence utilisateur dans localStorage (configurable)
  • Synchronisation Inter-Onglets : Les changements de thème se synchronisent entre les onglets du navigateur
  • Tous les Thèmes DaisyUI : Fonctionne avec les 30+ thèmes intégrés de DaisyUI
  • Mises à Jour Réactives : Se met à jour automatiquement quand le thème ou la préférence système change
  • Support Canvas : Fournit des couleurs hex pour les contextes canvas/WebGL via la propriété colors
  • Respecte la préférence système de l’utilisateur quand defaultTheme="system"
  • La préférence de thème persiste entre les sessions
  • Fonctionne avec les préférences de mouvement réduit (pas d’animations de transition de thème par défaut)