Tema
El ThemeProvider hace que la librería sea autónoma: define sus propios tokens de superficie y permite forzar light, dark o system sin depender del host (incluido el tema de estas docs).
Preview principal
Patrones comunes
Dos providers aislados en la misma página — light y dark a la vez.
Propiedades
Section titled “Propiedades”| Prop | Tipo | Descripción |
|---|---|---|
defaultTheme |
light | dark | system |
Tema inicial (por defecto system) |
storageKey |
string |
Clave de localStorage (por defecto ds-theme) |
storage |
boolean |
Persiste el tema (por defecto true) |
import { ThemeProvider, ThemeToggle, useTheme } from "devsoftec-ui";
function App() { return ( <ThemeProvider defaultTheme="system"> <Toolbar /> </ThemeProvider> );}
function Toolbar() { const { theme, resolvedTheme, setTheme } = useTheme(); return ( <> <span>{theme} → {resolvedTheme}</span> <ThemeToggle cycle /> <button onClick={() => setTheme("dark")}>Oscuro</button> </> );}En demos/SSR, para mostrar el tema resuelto sin esperar la hidratación usa
ResolvedThemeLabel(CSS +prefers-color-scheme).
| Valor | Descripción |
|---|---|
theme |
Preferencia elegida: light, dark o system |
resolvedTheme |
Tema efectivo: siempre light o dark (tras hidratar; en SSR con system puede diferir hasta el cliente) |
setTheme |
Cambia la preferencia (y persiste si storage está activo) |
Tokens de superficie
Section titled “Tokens de superficie”El provider aplica estos tokens inline en su contenedor (claro / oscuro):
| Token | Light | Dark |
|---|---|---|
--ds-surface |
#FAFAFA |
#171717 |
--ds-text |
#0A0A0A |
#FAFAFA |
--ds-muted |
#737373 |
#A3A3A3 |
--ds-border |
#D4D4D4 |
#404040 |
--ds-control-accent |
#0A0A0A |
#FAFAFA |
--brand-fg / --brand-bg |
invertidos según tema | (aisla el island del host) |
También reescribe un subconjunto de --sl-color-* dentro del árbol del provider, para que componentes que caen a tokens Starlight sigan leyendo la paleta correcta.
¿Por qué es autónomo?
Section titled “¿Por qué es autónomo?”Los componentes ds-* leen --ds-surface, --ds-text y bordes del provider. Así se ven bien aunque la página (o Starlight) defina otros colores. Puedes montar un island light dentro de una app dark — o al revés.
Accesibilidad
Section titled “Accesibilidad”- Respeta
prefers-color-schemecuando el tema essystem(vía CSS en el primer paint — sin flash light→dark). - Aplica
color-schemepara que scrollbars e inputs nativos se adapten. ThemeToggleexponeradiogroup/radiocuandocycleestá activo.