Toggle group
Una 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.
pnpm dlx shadcn@latest add https://hextaui.com/r/toggle-group.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-group.tsx components/ui/toggle.tsx lib/motion.ts Actualiza las rutas de importación para que coincidan con la configuración de tu proyecto.
Cuando solo puede estar activado un elemento a la vez, un único relleno se desliza hasta el elemento elegido y adopta su forma, de modo que el grupo se lee como un solo control. Con multiple, cada elemento se rellena por su cuenta. El relleno se coloca antes del primer pintado, así que nunca se desliza al cargar.
Contorno
variant="outline" une los elementos en un solo control con borde.
Múltiple
multiple permite que cualquier número de elementos esté activado, como en el formato de texto.
Tamaños
size en el grupo define todos los elementos: sm, default o lg.
Espaciado
spacing pone un espacio entre elementos en la escala de espaciado. Los elementos outline con espacio conservan sus propios bordes y rellenos.
Iconos y etiquetas
Pon un icono antes de la etiqueta. Los elementos solo con icono necesitan un aria-label.
Vertical
orientation="vertical" apila los elementos y mueve el foco con ↑ y ↓.
Deshabilitado
Deshabilita un elemento, o todo el grupo con disabled. El teclado omite los elementos deshabilitados.
Controlado
Pasa value y onValueChange. Ignorar el valor vacío mantiene un elemento activado, así que volver a pulsar el elemento elegido no hace nada.
De derecha a izquierda
El orden de los elementos, las esquinas unidas, el relleno deslizante y las flechas siguen la dirección de lectura.
| Key | Acción |
|---|---|
| Tab | Entra en el grupo sobre el último elemento enfocado y luego sale de él. |
| ←→ | Se mueve entre elementos, dando la vuelta en los extremos. ↑ y ↓ en vertical. |
| HomeEnd | Va al primer o al último elemento. |
| EnterSpace | Activa o desactiva el elemento enfocado. |
- El grupo tiene el rol
group; dale unaria-label. Cada elemento es un botón conaria-pressed. - Solo un elemento está en el orden de tabulación, así que el grupo es una única parada de Tab y las flechas se mueven dentro de él.
- Sin
multiple, pulsar el elemento elegido lo desactiva. Controla el valor para mantener un elemento activado. - Con movimiento reducido, el relleno se desvanece en lugar de deslizarse.
| Prop | Tipo | Predeterminado |
|---|---|---|
value | string[] | – |
defaultValue | string[] | – |
onValueChange | (value: string[], details) => void | – |
multiple | boolean | false |
variantDefine la variante de todos los elementos. | "default" | "outline" | "default" |
sizeDefine el tamaño de todos los elementos. | "default" | "sm" | "lg" | "default" |
spacingEspacio entre elementos en la escala de espaciado. 0 une los elementos outline. | 0 | 0.5 | 1 | 1.5 | 2 | 2.5 | 3 | 4 | 5 | 6 | 8 | 0 |
orientation | "horizontal" | "vertical" | "horizontal" |
loopFocus | boolean | true |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descripción |
|---|---|
data-slot="toggle-group" | La raíz. |
data-slot="toggle-group-indicator" | El relleno deslizante, renderizado sin multiple. data-visible cuando un elemento está activado. |
data-variant / data-size / data-spacing | La variante, el tamaño y el espaciado del grupo. |
data-orientation | "horizontal" o "vertical". |
data-multiple | Presente cuando pueden estar activados varios elementos. |
data-disabled | Presente cuando el grupo está deshabilitado. |
| Prop | Tipo | Predeterminado |
|---|---|---|
valueIdentifica el elemento en el valor del grupo. | string | – |
disabled | boolean | false |
variantSe usa cuando el grupo no define ninguno. | "default" | "outline" | – |
sizeSe usa cuando el grupo no define ninguno. | "default" | "sm" | "lg" | – |
nativeButton | boolean | true |
render | ReactElement | (props, state) => ReactElement | <button> |
| Atributo | Descripción |
|---|---|
data-slot="toggle-group-item" | Cada elemento. |
data-pressed | El elemento está activado. |
data-disabled | El elemento está deshabilitado. |
data-variant / data-size | La variante y el tamaño resueltos del elemento. |
- MotionLas curvas de easing, duraciones y la comprobación de movimiento reducido con las que se anima cada componente, además de hooks para transformaciones de tamaño y resaltados deslizantes.
- ToggleUn 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.
- 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.
Usado en bloques
Bloques que se construyen sobre Toggle group.
- Prompt InputUn compositor de chat que empieza como una línea tranquila, crece hasta convertirse en una tarjeta mientras escribes y baja cuando empieza la conversación. Enter envía, de forma segura con entrada en japonés y chino. Pega, suelta o elige archivos con vistas previas, progreso y reintento. @ añade archivos y / ejecuta comandos desde un menú junto al cursor. Un selector de modelo con teclas numéricas, un control deslizante de esfuerzo que cobra vida en Max, un anillo de contexto, dictado con forma de onda en vivo, chips de herramientas, una cola para los mensajes escritos mientras se transmite una respuesta y borradores que sobreviven a una recarga.
- API keysLa página de claves de API de un producto de IA, como las consolas de OpenAI y Anthropic. Crea claves con permisos acotados y caducidad, ve el secreto una sola vez con una copia que lo confirma, revoca con deshacer, renombra en el sitio, rota con un periodo de gracia y consulta el uso por clave.
- Diff ReviewRevisa las ediciones de un agente en todos los archivos antes de que se apliquen. Un árbol de archivos con contadores, aceptar o rechazar cada cambio, cada archivo o todo, comentarios en cualquier línea o rango que vuelven al agente, vistas unificada y dividida, resaltado a nivel de palabra, deshacer, ediciones en streaming y un resumen «Editados 4 archivos» para el chat.
- MarkdownMarkdown hecho para respuestas de IA. Se transmite con fluidez y nunca muestra sintaxis a medio escribir, con encabezados enlazables, tablas que puedes copiar como Markdown o CSV, callouts de GitHub, listas de tareas, notas al pie, imágenes, citas en línea y bloques de código completos.