Saltar al contenido
EspañolEnglish
Todos los componentes (204)

Hora

Fechas y hora · TimeField

Qué es y cuándo usarlo

Una hora escrita por partes, como el campo de fecha: la hora y los minutos (y los segundos o el AM/PM si tocan) son segmentos que se escriben con números o se suben y bajan con las flechas, sin abrir nada y sin poder teclear las 25:70. Los valores son objetos TimeValue ({ hour, minute, second }, la hora de 0 a 23 siempre), no cadenas.

Cuándo usarlo

  • La hora de una cita, de una recogida, de un envío programado.
  • granularity="second" para duraciones cortas o marcas de tiempo; "hour" si solo cuenta la hora en punto.
  • back para lo que acompaña a la hora: una zona («CET»), un botón pequeño. icon={false} quita el reloj.
  • hiddenLabel en una rejilla de horas donde el nombre de la columna ya está escrito una vez arriba.
  • name para que la hora viaje en un formulario nativo.

Cuándo no

  • El día: DatePicker. Si hacen falta los dos, van en dos campos, uno al lado del otro.
  • El horario de apertura de un negocio, día a día y por franjas: WeeklySchedule.
  • Elegir entre huecos libres de una agenda: SlotPicker.

Teclado: cada segmento es una parada de Tab, y flecha izquierda y derecha también pasan de uno a otro. Arriba y abajo suben y bajan solo el segmento con el foco, no la hora entera; Inicio y Fin lo llevan a sus extremos; se escribe el número directamente y Retroceso lo borra.

Accesibilidad: la etiqueta es obligatoria y nombra el grupo; con hiddenLabel se esconde a la vista, nunca al lector. La ayuda queda enlazada al grupo. Con error, cada segmento se marca como no válido y lleva el mensaje como descripción, que es donde está el foco. El reloj es adorno.

Aspecto fino: variables CSS de la caja, las de todos los campos: --amset-field-height, -padding, -font, -label, -description, -radius, -background y -border. Los segmentos y el reloj son los del campo de fecha, y se ajustan con sus mismas variables: --amset-date-target y --amset-date-icon. Una fecha y una hora puestas una al lado de la otra se ven iguales.

Contexto: va dentro de LocaleProvider (o de AmsetProvider). El idioma decide si son 12 o 24 horas: en es-ES, 24; cycle lo fuerza.

Cómo se ve

1030
De 10:00 a 20:00
2045
La tienda cierra a las 20:00

<TimeField label="Hora de recogida" defaultValue={{ hour: 10, minute: 30, second: 0 }} hint="De 10:00 a 20:00" />
<TimeField label="Hora de la cita" defaultValue={{ hour: 20, minute: 45, second: 0 }} error="La tienda cierra a las 20:00" />

Props

Se importa con import { TimeField } from '@amset/ui'. Las obligatorias van marcadas.

PropTipoPara qué sirve
labelobligatoriastringObligatoria: un campo sin etiqueta visible no entra en la libreria.
backReactNodeContenido detras de la hora: una zona ("CET"), un boton.
classNamestring—
cycle12 | 2412 o 24 horas. Sin esto manda el idioma (`es-ES` son 24), que es lo correcto en la practica: forzar 12 en español obliga a leer "PM".
defaultValueT | nullLa hora al empezar, sin controlarla desde fuera.
disabledboolean—
errorstringMensaje de error. Al pasarlo, el campo queda marcado como invalido.
granularityTimeGranularityPor defecto `minute`: la hora suelta casi nunca es lo que se pide.
hiddenLabelbooleanOculta la etiqueta a la vista, nunca al lector. Para una rejilla de horas donde el nombre de la columna ya esta escrito una vez arriba.
hintstring—
iconbooleanReloj delante de los segmentos. Puesto, porque un campo de hora sin reloj no se reconoce.
invalidboolean—
namestringPara que la hora viaje en un formulario nativo.
onChange(value: PlainTime) => voidSolo se avisa con una hora ENTERA: media hora no es un valor, asi que quien escucha no tiene que filtrar estados a medias.
placeholderValuePlainTimeDe que hora arranca un trozo VACIO al tocarlo con una flecha. Sin esto, de la medianoche. Con ella, de donde tenga sentido: en un campo de citas que empiezan a las nueve, subir hora a hora desde las 0:00 es trabajo que no tiene por que hacer nadie. No es un valor: el campo sigue vacio hasta que se toca, y lo que se envia sigue siendo nada. Para un valor inicial esta `defaultValue`.
readOnlyboolean—
requiredboolean—
shouldForceLeadingZerosbooleanCeros delante en la hora. Puesto por defecto, que es lo que se espera de un campo de hora: «09:05» y no «9:05».
size"sm" | "md" | "lg"—
validationBehavior"aria" | "native"`aria` (por defecto) anuncia el estado sin que el navegador interrumpa el envio con su globo; `native` añade ademas su validacion.
valueT | nullLa hora, controlada desde fuera.
variantFieldVariant—

Acepta además los atributos del elemento que pinta: className, style, data-*, aria-* y sus eventos.

En el banco de pruebas

Cada estado y cada variante, para tocarlos de uno en uno, en su ficha de ui.amset.tech: