Skip to content

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

html
<r-input placeholder="Escribe algo"></r-input>

Referencia de la API

Propiedades

PropiedadTipoPor defectoDescripción
labelstring''Rótulo fijo dibujado encima del campo
placeholderstring''Texto de marcador, reenviado al <input> nativo
valuestring''Valor del campo; se refleja como atributo y se transmite al formulario
disabledbooleanfalseSi el campo está deshabilitado
typestring''Tipo nativo reenviado al control interno (text, password, number, …)
iconstring''Nombre del icono inicial dentro del campo (se dibuja como r-icon)
namestring''Nombre del campo cuando participa en un formulario
statusstring''Estado de validación: error, warning
messagestring''Texto de ayuda o de validación dibujado bajo el campo
minstring''Valor mínimo; se reenvía al <input> interno cuando type="number"
maxstring''Valor máximo; se reenvía al <input> interno cuando type="number"
stepstring''Paso del valor; se reenvía al <input> interno cuando type="number"
requiredbooleanfalseSe reenvía al <input> interno para que actúe la validación nativa
sheetstring''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).

html
<r-input label="Nombre de usuario"></r-input>

Marcador placeholder

Se comporta igual que el atributo placeholder nativo.

html
<r-input placeholder="Escribe tu nombre de usuario"></r-input>

Valor value

html
<r-input value="1234"></r-input>

Estado deshabilitado disabled

html
<r-input label="Nombre de usuario" disabled></r-input>

Icono icon

html
<r-input icon="user"></r-input>

Tipos de entrada type

html
<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.

html
<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.

html
<r-input label="Correo" message="Nunca compartiremos tu correo"></r-input>

Nombre del campo name

html
<r-input name="username" label="Nombre de usuario"></r-input>

Eventos

Ambos eventos se despachan como CustomEvent y llevan el valor actual en detail.

EventoCuándo se disparadetail
inputEn cada pulsación (refleja el input nativo){ value: string }
changeAl confirmar o perder el foco (refleja el change nativo){ value: string }

Evento de escritura input

javascript
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

javascript
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.

html
<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.

html
<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.

PartElemento
inputEl envoltorio del campo
contentEl control <input> nativo interno
labelLa etiqueta fija sobre el campo (existe cuando hay label)
messageEl texto de ayuda o validación (existe cuando hay message)
css
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:

css
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 label con sentido para que el campo tenga un nombre accesible.
  • Marcadores: usa placeholder como pista de escritura, no como sustituto de la etiqueta.
  • Estado y mensaje: acompaña status de message para que el estado no dependa solo del color.
  • Iconos: añade un icon pertinente para que el campo se reconozca antes.
  • Tipos: elige el type adecuado al contenido (text, password, number, …).
  • Formularios: pon name cuando recojas el valor dentro de un formulario.

Publicado bajo la licencia MIT.