Skip to content

useTheme

Composable for theme management, light/dark mode switching, contrast, and motion preferences. Persists user preferences in localStorage.

Basic usage

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 ? 'Light mode' : 'Dark mode' }}
  </button>
</template>

Available themes

5 built-in themes: default, ocean, forest, sunset (each supporting light / dark mode).

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

const { setTheme, setThemeMode } = useTheme()

// Change the visual theme
setTheme('ocean')

// Change the brightness mode
setThemeMode('dark')   // 'light' | 'dark' | 'system'
</script>

System detection

The composable automatically detects system preferences:

  • Dark mode: prefers-color-scheme: dark
  • High contrast: prefers-contrast: more
  • Reduced motion: 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[]     // Enabled themes (default: all)
  defaultTheme?: string          // Default theme ('default')
  defaultThemeMode?: ThemeMode   // Default mode ('auto')
  storageKey?: string            // localStorage key ('su-theme-config')
  persist?: boolean              // Persist preferences (true)
})

API

Reactive state

PropertyTypeDescription
themeNameRef<ThemeName>Current theme name
themeModeRef<ThemeMode>Chosen brightness mode
contrastModeRef<ContrastMode>Chosen contrast mode
motionModeRef<MotionMode>Chosen motion mode

Resolved values

PropertyTypeDescription
effectiveThemeComputedRef<ThemeName>Applied theme (with fallback)
effectiveThemeModeComputedRef<'light' | 'dark'>Effective brightness mode
isDarkModeComputedRef<boolean>Dark mode active
effectiveContrastComputedRef<'normal' | 'high'>Effective contrast
effectiveMotionComputedRef<'normal' | 'reduce'>Effective motion
currentThemeMetadataComputedRef<ThemeMetadata>Active theme metadata

System detection

PropertyTypeDescription
systemThemeComputedRef<'light' | 'dark'>System preference
systemContrastComputedRef<'normal' | 'high'>System contrast
systemMotionComputedRef<'normal' | 'reduce'>System motion

Actions

MethodDescription
setTheme(name)Set the visual theme
setThemeMode(mode)Set the brightness mode
setContrast(contrast)Set the contrast mode
setMotion(motion)Set the motion mode
toggleMode()Toggle between light and dark
cycleTheme()Cycle through available themes
clearConfig()Reset all preferences

Data

PropertyTypeDescription
availableThemesComputedRef<ThemeMetadata[]>All available themes
systemThemesComputedRef<ThemeMetadata[]>System themes
colorThemesComputedRef<ThemeMetadata[]>Color themes

Publié sous licence MIT.