Skip to content

Toggle Group Nuevo

El componente hp-toggle-group permite seleccionar una o múltiples opciones de un conjunto con interacción de tipo "presionar". Soporta modo single y multiple, orientación y roving tabindex.

Demostración

Sin estilos (solo base.css)

Así se ve hp-toggle-group usando únicamente @headless-primitives/utils/base.css. La selección, el estado data-state="on/off" y el teclado funcionan completamente.

Toggle AToggle B

Con estilos personalizados

Single

LeftCenterRight

Multiple

BIU
html
<!-- Single mode -->
<hp-toggle-group value="center" type="single">
  <hp-toggle value="left" class="my-toggle">Left</hp-toggle>
  <hp-toggle value="center" class="my-toggle">Center</hp-toggle>
  <hp-toggle value="right" class="my-toggle">Right</hp-toggle>
</hp-toggle-group>

<!-- Multiple mode -->
<hp-toggle-group type="multiple" value="bold,italic">
  <hp-toggle value="bold" class="my-toggle">B</hp-toggle>
  <hp-toggle value="italic" class="my-toggle">I</hp-toggle>
  <hp-toggle value="underline" class="my-toggle">U</hp-toggle>
</hp-toggle-group>
css
hp-toggle-group {
  display: inline-flex;
  gap: 0;
}
.my-toggle {
  padding: 6px 12px;
  border: 1px solid #e5e7eb;
  cursor: pointer;
}
.my-toggle[data-state="on"] {
  background: #3b82f6;
  color: #fff;
  border-color: #3b82f6;
}

Instalación

bash
pnpm add @headless-primitives/toggle-group
bash
npm install @headless-primitives/toggle-group
bash
yarn add @headless-primitives/toggle-group
bash
bun add @headless-primitives/toggle-group

Features

  • ⌨️ Flechas (según orientación), Home, End, Enter/Space.
  • ♿️ role="group", role="button", aria-pressed, aria-orientation automáticos.
  • 🎨 Sin estilos visuales (Headless).
  • 🔀 Modo single (exclusivo) o multiple.
  • 📐 Orientación configurable (horizontal / vertical).

Anatomía

html
<hp-toggle-group>
  <hp-toggle value="opt1"></hp-toggle>
  <hp-toggle value="opt2"></hp-toggle>
</hp-toggle-group>

API Reference

hp-toggle-group

Contenedor raíz con gestión de selección.

Atributos / Propiedades

Atributo / PropiedadTipoPor DefectoDescripción
type"single" | "multiple""single"Modo de selección.
orientation"horizontal" | "vertical""horizontal"Orientación del grupo.
disabledbooleanfalseDeshabilita todo el grupo.
requiredbooleanfalseMarca el grupo como requerido.

Propiedades

PropiedadTipoDescripción
valuestring[]Array de valores seleccionados.

Eventos

EventoDetalleDescripción
hp-change{ value: string[] }Cuando cambia la selección.

Atributos ARIA gestionados automáticamente

  • role="group" — Asignado si no se especifica.
  • aria-orientation — Sincronizado con orientation.
  • aria-required — Presente cuando required es true.

hp-toggle

Toggle individual.

Atributos / Propiedades

Atributo / PropiedadTipoPor DefectoDescripción
valuestring""Valor único del toggle.
disabledbooleanfalseDeshabilita el toggle.

Propiedades de solo lectura

PropiedadTipoDescripción
pressedbooleanSi el toggle está presionado.

Atributos ARIA gestionados automáticamente

  • role="button" — Asignado si no se especifica.
  • aria-pressed"true" | "false".
  • aria-disabled — Sincronizado con disabled.
  • data-state"on" | "off".
  • tabindex0 para el presionado, -1 para los demás (roving).

Accesibilidad

Implementa roving tabindex y gestión de foco según orientación.

TeclaAcción
ArrowRight (horizontal) / ArrowDown (vertical)Siguiente toggle.
ArrowLeft (horizontal) / ArrowUp (vertical)Toggle anterior.
HomePrimer toggle.
EndÚltimo toggle.
Enter / SpaceAlterna el estado del toggle con foco.

Lanzado bajo la MIT License.