Saltar al contenido

ThemeToggle

Cambia entre tema claro, oscuro y del sistema con un botón o un grupo de opciones que funcionan sin JavaScript.

UIThemeToggle usa la opción theme de meeko.config.ts. Es un formulario que envía POST /_meeko/theme: sin JavaScript, el servidor guarda la preferencia y vuelve a la misma página. Con JavaScript, el tema cambia al instante, sin navegar. Los dos ejemplos y la cabecera comparten la misma preferencia.

Un botón que alterna

En mode="cycle", el valor por defecto, cada pulsación pasa a la siguiente elección. Su nombre accesible indica el tema actual y el siguiente.

Elección: oscuro.

ts
// meeko.config.ts
export default defineMeekoConfig({
  modules: ['@meekojs/ui'],
  theme: { default: 'dark' },
})

<!-- app/app.meeko -->
<UIThemeToggle />

Un grupo de opciones

En mode="select", cada elección es un radio. Las flechas, Inicio y Fin mueven el foco y la elección, como en un grupo de radios nativo.

meeko
<UIThemeToggle mode="select" />

Elecciones, textos e iconos

themes limita y ordena las elecciones; labels y messages sustituyen sus nombres y los textos accesibles en un selector concreto: por defecto siguen el idioma del documento y ui.messages (véase Temas). Un snippet con el nombre de cada elección sustituye su texto, por ejemplo por un icono; en ese caso el nombre se conserva como etiqueta accesible.

meeko
<UIThemeToggle
  bind:themes="['light', 'dark']"
  bind:labels="{ light: 'Light', dark: 'Dark' }"
  bind:messages="{
    group: 'Theme',
    unknown: 'Change theme',
    cycle: (current, next) => 'Theme: ' + current + '. Switch to ' + next,
  }">
  <snippet name="light"><svg aria-hidden="true">…</svg></snippet>
  <snippet name="dark"><svg aria-hidden="true">…</svg></snippet>
</UIThemeToggle>

API

Propiedades de UIThemeToggle
Nombre Tipo / valor inicial Descripción
mode cycle | select cycle Un botón que alterna o un grupo de radios.
themes ThemeChoice[] Elecciones y su orden. Por defecto, los temas de la configuración y system si está activo.
labels Partial<Record<ThemeChoice, string>> Claro, Oscuro, Sistema Nombre visible de cada elección. El valor por defecto sigue el idioma del documento.
icons boolean false Con cycle, pinta un icono de light, dark y system en lugar de su nombre, que sigue en el aria-label.
messages ThemeToggleMessages Textos accesibles: cycle, unknown y group.
class / id string Clases e id del formulario raíz.

Para leer o cambiar el tema desde tu código, usa useTheme(); para construir tu propio selector, usa useThemeToggle() de @meekojs/meeko/framework. El tipo UIThemeToggleProps se exporta desde @meekojs/ui/runtime.

¿Te sirvió esta página?

Añadir un comentario

Se envía al elegir «Sí» o «No». Solo se guardan la página, tu respuesta y el comentario: ni cookies ni datos tuyos.

0 de 2000 caracteres