Toggle
Un botón que se mantiene activado o desactivado, con un relleno que se asienta al pulsar, un paso claro de hover a activado e iconos que pueden rellenarse según el estado.
pnpm dlx shadcn@latest add https://hextaui.com/r/toggle.jsonAñade el componente, los tokens del tema de HextaUI y los componentes de HextaUI de los que depende.
Añade los tokens del tema a tu CSS global, si aún no lo has hecho.
Instala las dependencias.
pnpm add @base-ui/react class-variance-authority cnCopia y pega el siguiente código en tu proyecto.
components/ui/toggle.tsx Actualiza las rutas de importación para que coincidan con la configuración de tu proyecto.
Al pasar el cursor sobre un toggle desactivado se muestra un tinte ligero; al activarlo se asienta un relleno más intenso y la etiqueta alcanza el contraste completo, de modo que activado nunca se parece al hover.
Contorno
variant="outline" añade un borde y una superficie, para toggles que van por sí solos.
Con texto
Los iconos y las etiquetas van lado a lado. Los toggles con texto visible no necesitan un aria-label.
Relleno al activarse
Añade group-data-pressed/toggle:fill-current a un icono outline y se rellenará cuando el toggle se active.
Tamaños
sm, default y lg. Los toggles solo con icono se mantienen cuadrados.
Píldora
shape="pill" redondea por completo los extremos, para toggles dentro de superficies redondeadas como el compositor de un chat.
Deshabilitado
Un toggle deshabilitado sigue mostrando si está activado, pero no se puede pulsar ni enfocar.
Controlado
Pasa pressed y onPressedChange. La etiqueta se mantiene igual mientras el icono sigue el estado.
De derecha a izquierda
Los iconos preceden a la etiqueta desde la derecha.
| Key | Acción |
|---|---|
| SpaceEnter | Activa o desactiva el toggle enfocado. |
| Tab | Mueve el foco al siguiente toggle. |
- El toggle es un
buttonconaria-pressed, así que los lectores de pantalla anuncian si está activado. - Dale a los toggles solo con icono un
aria-labelque nombre la acción ("Silenciar micrófono") y mantenlo igual en ambos estados. Cambiarlo además del estado pulsado se lee como una doble negación. - En pantallas táctiles el área de toque crece hasta al menos 44px, salvo dentro de un toggle group, donde los vecinos se solaparían.
- Con movimiento reducido, nada se escala; el relleno solo se desvanece.
| Prop | Tipo | Predeterminado |
|---|---|---|
variant | "default" | "outline" | "default" |
size | "default" | "sm" | "lg" | "default" |
shape | "default" | "pill" | "default" |
pressed | boolean | – |
defaultPressed | boolean | false |
onPressedChange | (pressed, details) => void | – |
disabled | boolean | false |
valueIdentifica el toggle dentro de un toggle group. | string | – |
className | string | (state) => string | – |
nativeButton | boolean | true |
render | ReactElement | (props, state) => ReactElement | <button> |
| Atributo | Descripción |
|---|---|
data-slot="toggle" | El botón, con data-variant y data-size. |
data-pressed | Presente cuando el toggle está activado. |
data-disabled | Presente cuando el toggle está deshabilitado. |
- ButtonBotones en todas las variantes y tamaños, con un flujo integrado de carga, éxito y error que omite el spinner en las peticiones rápidas.
- Button groupBotones unidos en un solo control, con uniones compartidas, separadores, addons de texto, anidamiento y apilados verticales.
- Toggle groupUna fila de toggles para una o varias opciones, con un relleno que se desliza hasta el elemento elegido, elementos unidos o separados y foco con las teclas de flecha.
Usado en bloques
Bloques que se construyen sobre Toggle.
- ArtifactEl panel junto a un chat de IA que muestra lo que creó el modelo. Páginas web, SVG, documentos y código llegan en streaming y luego pasan a una vista previa en sandbox, con versiones que puedes comparar y restaurar, una división redimensionable y una hoja inferior en móviles.
- Code BlockBloques de código pensados para respuestas de IA. Resaltado de sintaxis que sigue el ritmo del streaming, copiar, descargar y ajustar líneas, números de línea y líneas resaltadas, diffs con aceptar y rechazar, y una terminal para comandos.