Input
Componente de entrada para escribir contenido con el teclado: el control de formulario más básico.
Úsalo cuando necesites un campo de texto con etiqueta fija encima, icono a la izquierda, estado y mensaje de validación, y participación en formularios nativos:
<r-input>cubre la entrada de texto, contraseña y números.
Inicio rápido
Uso básico
<r-input placeholder="Escribe algo"></r-input>Referencia de la API
Propiedades
| Propiedad | Tipo | Por defecto | Descripción |
|---|---|---|---|
label | string | '' | Rótulo fijo dibujado encima del campo |
placeholder | string | '' | Texto de marcador, reenviado al <input> nativo |
value | string | '' | Valor del campo; se refleja como atributo y se transmite al formulario |
disabled | boolean | false | Si el campo está deshabilitado |
type | string | '' | Tipo nativo reenviado al control interno (text, password, number, …) |
icon | string | '' | Nombre del icono inicial dentro del campo (se dibuja como r-icon) |
name | string | '' | Nombre del campo cuando participa en un formulario |
status | string | '' | Estado de validación: error, warning |
message | string | '' | Texto de ayuda o de validación dibujado bajo el campo |
min | string | '' | Valor mínimo; se reenvía al <input> interno cuando type="number" |
max | string | '' | Valor máximo; se reenvía al <input> interno cuando type="number" |
step | string | '' | Paso del valor; se reenvía al <input> interno cuando type="number" |
required | boolean | false | Se reenvía al <input> interno para que actúe la validación nativa |
sheet | string | '' | CSS inyectado en el shadow root |
Etiqueta label
Un rótulo fijo dibujado encima del campo: siempre visible, nunca se solapa con el contenido contiguo y no descoloca la maquetación al enfocar (las etiquetas alineadas arriba, además, se completan más rápido que las en línea o flotantes; véase la investigación con seguimiento ocular de Luke Wroblewski).
<r-input label="Nombre de usuario"></r-input>Marcador placeholder
Se comporta igual que el atributo placeholder nativo.
<r-input placeholder="Escribe tu nombre de usuario"></r-input>Valor value
<r-input value="1234"></r-input>Estado deshabilitado disabled
<r-input label="Nombre de usuario" disabled></r-input>Icono icon
<r-input icon="user"></r-input>Tipos de entrada type
<r-input icon="lock" type="password" placeholder="Contraseña"></r-input>
<r-input type="number" placeholder="Número"></r-input>Estado status
Acompaña siempre status de un message, para que el estado lo comunique el texto y no solo el color.
<r-input status="error" label="Nombre de usuario" message="Este campo es obligatorio"></r-input>
<r-input status="warning" label="Nombre de usuario" message="Revisa este valor"></r-input>Mensaje de ayuda message
Dibuja texto de ayuda o de validación bajo el campo.
<r-input label="Correo" message="Nunca compartiremos tu correo"></r-input>Nombre del campo name
<r-input name="username" label="Nombre de usuario"></r-input>Eventos
Ambos eventos se despachan como CustomEvent y llevan el valor actual en detail.
| Evento | Cuándo se dispara | detail |
|---|---|---|
input | En cada pulsación (refleja el input nativo) | { value: string } |
change | Al confirmar o perder el foco (refleja el change nativo) | { value: string } |
Evento de escritura input
const input = document.createElement('r-input');
input.setAttribute('label', 'Nombre de usuario');
input.addEventListener('input', (event) => {
console.log('Escribiendo:', event.detail.value);
});Evento de cambio change
const input = document.createElement('r-input');
input.setAttribute('label', 'Nombre de usuario');
input.addEventListener('change', (event) => {
console.log('El valor cambió:', event.detail.value);
});Asociación con formularios
r-input es un elemento personalizado asociado a formularios (static formAssociated = true). Adjunta ElementInternals y transmite su valor con setFormValue, así que new FormData(form) lo recoge cuando es descendiente real de un <form> nativo; pon name para darle una clave al valor. Consulta Formularios para el ayudante serializeForm(), que convierte un envío en un objeto plano.
<form>
<r-input name="username" label="Nombre de usuario"></r-input>
</form>Reinicio: un form.reset() nativo (o un <button type="reset">) devuelve el valor que el campo tenía al conectarse por primera vez, mediante formResetCallback(), uno de los ganchos de ciclo de vida que el navegador llama solo en un elemento personalizado asociado a formularios.
Validación: poner required hace que un campo vacío sea inválido a través de ElementInternals.setValidity(); form.checkValidity() / form.reportValidity() lo ven, y al enviar aparece el globo de validación nativo del navegador anclado al campo. Los campos disabled nunca bloquean la validación, igual que un <input> nativo. r-input expone además los métodos y propiedades habituales de un campo nativo: checkValidity(), reportValidity(), validity, validationMessage.
<form>
<r-input name="username" label="Nombre de usuario" required></r-input>
<button type="submit">Enviar</button>
</form>Parts CSS
Expuestos vía ::part() para darles estilo desde fuera.
| Part | Elemento |
|---|---|
input | El envoltorio del campo |
content | El control <input> nativo interno |
label | La etiqueta fija sobre el campo (existe cuando hay label) |
message | El texto de ayuda o validación (existe cuando hay message) |
r-input::part(content) {
font-size: 16px;
}Estilos
<r-input> expone 61 propiedades personalizadas de CSS propias, además de los tokens semánticos que lee del tema. Define una allí donde se herede: :root, un contenedor o el propio elemento:
r-input {
--ran-input-color: var(--ran-color-text-secondary);
}Partes: content · input · label · message
La lista completa está en tokens de estilo; cuál usar lo explica el sistema de diseño.
Buenas prácticas
- Etiquetas: añade un
labelcon sentido para que el campo tenga un nombre accesible. - Marcadores: usa
placeholdercomo pista de escritura, no como sustituto de la etiqueta. - Estado y mensaje: acompaña
statusdemessagepara que el estado no dependa solo del color. - Iconos: añade un
iconpertinente para que el campo se reconozca antes. - Tipos: elige el
typeadecuado al contenido (text,password,number, …). - Formularios: pon
namecuando recojas el valor dentro de un formulario.