Modo Oscuro
Agrega soporte de modo oscuro a tu aplicación con transiciones suaves y detección de preferencias del sistema.
La librería
nach-themes proporciona una forma simple y elegante de implementar modo oscuro en tus aplicaciones React, con soporte para preferencias del sistema, transiciones suaves y animaciones al hacer clic.Instalación
Instala el paquete vía pnpm:
npm install install nach-themesInicio Rápido
1. Configura tu CSS
Primero, asegúrate de tener definidas las variables de tema tanto para modo claro como oscuro en tu CSS:
2. Envuelve tu app con ThemeProvider
Crea un componente providers para envolver tu aplicación:
Luego úsalo en tu layout raíz:
3. Crea un botón de cambio de tema
Características
Detección de Tema del Sistema
Por defecto, el provider respeta la preferencia del sistema del usuario:
La librería detecta automáticamente cambios en las preferencias del sistema y actualiza el tema en consecuencia cuando está configurado en
'system'.Temas Disponibles
El hook
useTheme proporciona acceso a tres modos de tema:'light'- Modo claro'dark'- Modo oscuro'system'- Sigue la preferencia del sistema
Transiciones Suaves con View Transitions
La librería incluye soporte integrado para la View Transitions API, creando transiciones animadas suaves entre temas. Cuando pasas un evento de clic a
setTheme, crea una animación circular de revelación desde la posición del clic:Sin el evento de clic, recurre a una transición estándar de fundido cruzado:
Tema Resuelto
Obtén el tema real que se está aplicando, incluso cuando está configurado en
'system':Uso Avanzado
Toggle de Tema con Estado de Carga
Maneja el estado de hidratación para prevenir cambios en el layout:
El hook
useMounted puede implementarse como:Menú Desplegable de Tema
Crea un selector de tema más sofisticado:
Cambios de Tema Programáticos
Accede a información del tema en cualquier parte de tu app:
Soporte de TypeScript
La librería está completamente tipada. Todos los hooks y componentes tienen definiciones completas de TypeScript:
¿Encontraste algo que mejorar?
¿Notaste un error, tipografía o detalle faltante en esta página? Ayúdanos a mejorar la documentación abriendo un issue en GitHub.