Skip to content

Label Nuevo

El componente hp-label asocia etiquetas de texto con elementos de formulario de manera accesible, superando las limitaciones de <label> nativo con Custom Elements.

Demostración

Sin estilos (solo base.css)

Así se ve hp-label usando únicamente @headless-primitives/utils/base.css. El click-to-focus y aria-labelledby funcionan completamente.

Nombre

Con estilos personalizados

Nombre de usuario
Notificaciones
html
<hp-label for="first-name" class="my-label">Nombre</hp-label>
<input id="first-name" type="text" />

<!-- Con otros primitivos -->
<hp-label for="toggle-id" class="my-label">Aceptar términos</hp-label>
<hp-switch id="toggle-id"></hp-switch>
css
.my-label {
  font-size: 14px;
  font-weight: 500;
  cursor: pointer;
}

.my-label:hover {
  color: #3b82f6;
}

Instalación

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

Features

  • ♿️ aria-labelledby gestionado automáticamente en el control destino.
  • 🖱️ Click-to-focus: traslada el foco al control referenciado por for.
  • 🎨 Sin estilos visuales (Headless).
  • 🔒 Prevención de selección accidental en doble-click.

Anatomía

html
<hp-label for="mi-control">Etiqueta</hp-label>

API Reference

hp-label

Asocia texto al control con ID for: en click enfoca y dispara click en el destino.

Atributos / Propiedades

Atributo / PropiedadTipoPor DefectoDescripción
for / htmlForstring | nullnullID del elemento objetivo en el documento.
idstringautoGenerado automáticamente si falta y hay for válido.

Accesibilidad

hp-label resuelve una limitación crítica: <label> nativo no puede transferir el foco a Custom Elements. El componente:

  • Click to Focus: Traslada el foco al control referenciado por for.
  • aria-labelledby: Si el destino no tiene aria-labelledby, lo vincula automáticamente con el id de la etiqueta.
  • No Selection: Previene selección accidental de texto en doble-click.

Lanzado bajo la MIT License.