Pular para o conteúdo

useTheme

Hook para detectar e controlar o tema atual. Suporta detecção de preferência do sistema, persistência de tema e fornece cores calculadas para componentes baseados em canvas.

import { useTheme, ThemeProvider } from 'asterui'

Envolva sua aplicação com ThemeProvider para habilitar controle completo do tema:

main.tsx
import { ThemeProvider } from 'asterui'
createRoot(document.getElementById('root')!).render(
<ThemeProvider defaultTheme="system">
<App />
</ThemeProvider>
)
App.tsx
function App() {
const { theme, setTheme, resolvedTheme, isDark, colors } = useTheme()
return (
<div>
<p>Selecionado: {theme}</p>
<p>Aplicado: {resolvedTheme}</p>
<p>Modo: {isDark ? 'Escuro' : 'Claro'}</p>
<button onClick={() => setTheme('light')}>Claro</button>
<button onClick={() => setTheme('dark')}>Escuro</button>
<button onClick={() => setTheme('system')}>Sistema</button>
</div>
)
}

Quando usado sem um provider, useTheme fornece acesso somente leitura ao estado do tema:

function ThemeAwareComponent() {
const { isDark, colors } = useTheme()
return (
<div style={{ background: colors.background, color: colors.foreground }}>
Modo atual: {isDark ? 'Escuro' : 'Claro'}
</div>
)
}
function CanvasComponent() {
const { colors } = useTheme()
const canvasRef = useRef<HTMLCanvasElement>(null)
useEffect(() => {
const ctx = canvasRef.current?.getContext('2d')
if (!ctx) return
ctx.fillStyle = colors.background
ctx.fillRect(0, 0, 100, 100)
ctx.fillStyle = colors.primary
ctx.fillText('Olá', 10, 50)
}, [colors])
return <canvas ref={canvasRef} />
}

Veja ThemeProvider para as props do provedor e opções de configuração.

PropriedadeTipoDescrição
themestring | undefinedO tema selecionado (ex., 'system', 'light', 'dark'). Apenas com ThemeProvider.
resolvedThemestring | undefinedO tema aplicado após resolver 'system'. Apenas com ThemeProvider.
isDarkbooleantrue se o modo escuro está ativo.
setTheme(theme: string) => void | undefinedFunção para mudar o tema. Apenas com ThemeProvider.
colorsThemeColorsCores do tema calculadas como valores hex.
systemTheme'light' | 'dark' | undefinedA preferência do sistema. Apenas com ThemeProvider.
PropriedadeTipoDescrição
backgroundstringCor de fundo base (DaisyUI base-100)
foregroundstringCor de texto base (DaisyUI base-content)
primarystringCor primária
primaryContentstringCor de conteúdo primário
secondarystringCor secundária
accentstringCor de destaque
infostringCor de informação
successstringCor de sucesso
warningstringCor de aviso
errorstringCor de erro
  • Detecção de Preferência do Sistema: Detecta automaticamente prefers-color-scheme: dark
  • Persistência: Salva a preferência do usuário no localStorage (configurável)
  • Sincronização entre Abas: Mudanças de tema sincronizam entre abas do navegador
  • Qualquer Tema DaisyUI: Funciona com todos os 30+ temas integrados
  • Atualizações Reativas: Atualiza automaticamente quando o tema ou preferência do sistema muda
  • Suporte para Canvas: Fornece cores hex para contextos canvas/WebGL