Files
portfolio/src/composables/useTheme.ts
T
Mr¤KayJayDee 481c753371 feat(seo): mise à jour des métadonnées et intégration de Google Tag Manager
- Ajout du script Google Tag Manager dans index.html pour le suivi des performances.
- Mise à jour des couleurs de thème dans index.html et site.webmanifest pour un meilleur contraste.
- Révision des dates de dernière modification dans sitemap.xml pour refléter la date actuelle.
- Changement des priorités et des URLs des projets dans sitemap.xml pour une meilleure organisation.
- Modification de la gestion du thème par défaut dans useTheme.ts pour utiliser le mode sombre.
- Mise à jour des paramètres de localisation dans site.ts et index.ts pour un meilleur support multilingue.
2025-07-05 22:20:43 +02:00

68 lines
1.4 KiB
TypeScript

import { ref, watch, onMounted } from 'vue'
export type Theme = 'light' | 'dark'
const isDark = ref<boolean>(false)
export function useTheme() {
const toggleTheme = () => {
isDark.value = !isDark.value
}
const setTheme = (theme: Theme) => {
isDark.value = theme === 'dark'
}
const getTheme = (): Theme => {
return isDark.value ? 'dark' : 'light'
}
// Apply theme to document
const applyTheme = () => {
if (typeof document !== 'undefined') {
document.documentElement.classList.toggle('dark', isDark.value)
document.documentElement.setAttribute('data-theme', getTheme())
}
}
// Save theme to localStorage
const saveTheme = () => {
if (typeof localStorage !== 'undefined') {
localStorage.setItem('theme', getTheme())
}
}
// Load theme from localStorage or default to dark mode
const loadTheme = () => {
if (typeof window !== 'undefined') {
const savedTheme = localStorage.getItem('theme') as Theme | null
if (savedTheme) {
setTheme(savedTheme)
} else {
// Default to dark mode instead of system preference
setTheme('dark')
}
}
}
// Watch for theme changes
watch(isDark, () => {
applyTheme()
saveTheme()
})
// Initialize theme on mount
onMounted(() => {
loadTheme()
applyTheme()
})
return {
isDark,
toggleTheme,
setTheme,
getTheme
}
}