Skip to content

useTheme

Composable pour la gestion des themes, du mode clair/sombre, du contraste et du mouvement. Persiste les preferences utilisateur dans localStorage.

Utilisation basique

vue
<script setup>
import { useTheme } from '@surgeui/ds-vue'

const {
  themeName,
  isDarkMode,
  effectiveTheme,
  effectiveThemeMode,
  setTheme,
  setThemeMode,
  toggleMode,
  cycleTheme,
  availableThemes,
} = useTheme()
</script>

<template>
  <button @click="toggleMode">
    {{ isDarkMode ? 'Mode clair' : 'Mode sombre' }}
  </button>
</template>

Themes disponibles

5 themes integres : default, ocean, forest, sunset (+ mode light / dark pour chacun).

vue
<script setup>
import { useTheme } from '@surgeui/ds-vue'

const { setTheme, setThemeMode, availableThemes } = useTheme()

// Changer le theme visuel
setTheme('ocean')

// Changer le mode luminosite
setThemeMode('dark')   // 'light' | 'dark' | 'system'
</script>

Detection systeme

Le composable detecte automatiquement les preferences systeme :

  • Mode sombre : prefers-color-scheme: dark
  • Contraste eleve : prefers-contrast: more
  • Mouvement reduit : prefers-reduced-motion: reduce
vue
<script setup>
import { useTheme } from '@surgeui/ds-vue'

const { systemTheme, systemContrast, systemMotion } = useTheme()

// systemTheme.value → 'light' | 'dark'
// systemContrast.value → 'normal' | 'high'
// systemMotion.value → 'normal' | 'reduce'
</script>

Options

typescript
useTheme({
  availableThemes?: string[]     // Themes actives (defaut: tous)
  defaultTheme?: string          // Theme par defaut ('default')
  defaultThemeMode?: ThemeMode   // Mode par defaut ('auto')
  storageKey?: string            // Cle localStorage ('su-theme-config')
  persist?: boolean              // Persister les preferences (true)
})

API

Etat reactif

ProprieteTypeDescription
themeNameRef<ThemeName>Nom du theme actuel
themeModeRef<ThemeMode>Mode luminosite choisi
contrastModeRef<ContrastMode>Mode de contraste choisi
motionModeRef<MotionMode>Mode de mouvement choisi

Valeurs resolues

ProprieteTypeDescription
effectiveThemeComputedRef<ThemeName>Theme applique (avec fallback)
effectiveThemeModeComputedRef<'light' | 'dark'>Mode luminosite effectif
isDarkModeComputedRef<boolean>Mode sombre actif
effectiveContrastComputedRef<'normal' | 'high'>Contraste effectif
effectiveMotionComputedRef<'normal' | 'reduce'>Mouvement effectif
currentThemeMetadataComputedRef<ThemeMetadata>Metadonnees du theme actif

Detection systeme

ProprieteTypeDescription
systemThemeComputedRef<'light' | 'dark'>Preference systeme
systemContrastComputedRef<'normal' | 'high'>Contraste systeme
systemMotionComputedRef<'normal' | 'reduce'>Mouvement systeme

Actions

MethodeDescription
setTheme(name)Definir le theme visuel
setThemeMode(mode)Definir le mode luminosite
setContrast(contrast)Definir le mode de contraste
setMotion(motion)Definir le mode de mouvement
toggleMode()Basculer entre clair et sombre
cycleTheme()Cycler entre les themes disponibles
clearConfig()Reinitialiser les preferences

Donnees

ProprieteTypeDescription
availableThemesComputedRef<ThemeMetadata[]>Tous les themes disponibles
systemThemesComputedRef<ThemeMetadata[]>Themes systeme
colorThemesComputedRef<ThemeMetadata[]>Themes de couleur

Publié sous licence MIT.