Pular para o conteúdo
// visualizar em
salvo em todas as páginas

Time field

Campo de hora que recebe um horário digitado em segmentos de hora e minuto, no relógio do idioma. Leva o fuso horário quando o valor tem um, então uma reunião às 14:00 é o mesmo momento para todo mundo.

Feito com React AriaPadrão WAI-ARIA Spinbutton (um por segmento)Componente clienteCódigo ↗
minimal · light · #3fa34d
1145
granularity
readOnly
invalid
disabled

Instalação

Configure o Camaleo uma vez (Instalação) e importe o que precisar. Time é um horário do dia; ZonedDateTime acrescenta data e fuso horário. Os dois são reexportados pelo pacote.

import { TimeField, Time, ZonedDateTime, Field, FieldLabel } from "@camaleo/react";

Anatomia

As mesmas partes do DateField: uma caixa com um segmento para cada parte do horário, e separadores como : entre eles.

input1000
[data-slot="time-field"][data-slot="date-input"][data-slot="date-segment"]

Exemplos

Cada exemplo é um arquivo real que você pode copiar. Todos usam o estilo, o modo e a cor escolhidos na barra acima.

minimal · light · #3fa34d
1000

Aparece na página da loja e no Maps.

1000
1230

Duração: 2 h 30 min

Início e fim

Mude qualquer um dos horários. Dois campos controlados dão a duração, e o fim fica inválido quando vem antes do início.

2200
Escolha um horário entre 08:00 e 18:00.

Dentro do expediente

Escolha um horário das 08:00 às 18:00. minValue e maxValue marcam o resto como inválido, e o FieldError diz a faixa aceita.

1030PM
2230

12 ou 24 horas

O idioma escolhe o relógio. O hourCycle força um deles, para uma grade de horários ou um público que espera aquele formato.

001248

Horas, minutos e segundos do vídeo.

Segundos

O granularity="second" acrescenta um segmento para marcações de tempo e durações. Use "hour" quando só a hora importa.

1000BRT

No fuso de quem organiza.

Com fuso horário

Um ZonedDateTime mostra o fuso num segmento só de leitura, então quem está em outra cidade sabe de quem são as 10:00. O hideTimeZone esconde ele.

––––

Aperte a seta para cima: começa às 07:00, não à meia-noite.

Valor de partida

Num campo vazio, as setas começam da meia-noite. O placeholderValue começa num horário provável, sem preencher nada.

1100

Definido pelo hotel. Peça um horário mais tarde na recepção.

Somente leitura

O readOnly mantém o horário focável e lido pelo leitor de tela. Diga quem define ele.

Em contexto

Horários vêm com datas e agendas. São pedaços inteiros de interface para copiar, no estilo que você escolheu.

Horário de funcionamento

Café Aurora · Rua da Aurora, 12

0700
1800
0700
2000
0800
1400
0800
1200
Horário de funcionamentoCard · Switch · TimeField · Button

Agende uma conversa

Apresentação de 30 minutos com Carlos Pereira.

17112026
1000
1030
Agendamento de reuniãoCard · DateField · TimeField · Button

Resumo diário

Um e-mail com as vendas de ontem e os pedidos de hoje.

1000

No seu fuso, Brasília (BRT).

Resumo diárioCard · Switch · TimeField · Checkbox

Boas práticas

1000BRT
FaçaMostre o fuso quando as pessoas estão em lugares diferentes.

Um ZonedDateTime escreve o fuso ao lado do horário, então ninguém entra uma hora antes.

1000
EviteHorário solto num evento global.

Cada pessoa lê "10:00" no próprio fuso, e a maioria erra.

Reunião diária
1030
1045
FaçaDois campos com rótulo para uma faixa.

Início e fim são validados e lidos cada um por si.

EviteCaixa de texto para horários.

"10h30 às 10h45, mais ou menos" não dá para interpretar, ordenar nem conferir.

Props

PropriedadeTipoPadrãoDescrição
classNamestring—Classes adicionadas à raiz.
styleCSSProperties—Estilos inline da raiz.
disabledboolean—Desativa todos os segmentos. Dentro de um Field, vale o disabled do field quando este não é passado.
readOnlybooleanfalseMantém o valor focável e legível, mas não editável.
invalidboolean—Marca o campo como inválido. Dentro de um Field, vale o invalid do field quando este não é passado.
requiredbooleanfalseMarca o campo como obrigatório para as tecnologias assistivas.
localestring—Idioma BCP 47 para o relógio e os rótulos AM/PM, como "pt-BR" ou "en-US". Sem ele, vale o I18nProvider mais próximo ou o idioma do navegador.
valueTimeValue | null—O horário atual (controlado).
defaultValueTimeValue | null—O horário inicial (não controlado).
onChange(value: TimeValue | null) => void—Roda a cada mudança de valor. Recebe null quando um segmento é apagado.
namestring—Nome do input escondido enviado com o formulário, em formato ISO.
autoFocusboolean—Foca o primeiro segmento ao montar.
hourCycle12 | 24—Força o relógio de 12 ou 24 horas. Padrão: o do idioma.
granularity"hour" | "minute" | "second"'minute'A menor unidade mostrada. Padrão: "minute".
hideTimeZoneboolean—Esconde o segmento de fuso horário de um ZonedDateTime.
shouldForceLeadingZerosboolean—Mostra zero à esquerda na hora, mesmo que o idioma não use.
placeholderValueTimeValue—O horário de onde as setas partem num campo vazio. Padrão: meia-noite.
minValueTimeValue—O menor horário aceito. Antes dele, o campo fica inválido.
maxValueTimeValue—O maior horário aceito. Depois dele, o campo fica inválido.

TimeValue é Time, CalendarDateTime ou ZonedDateTime; o tipo que você passa é o tipo que volta no onChange. O validationBehavior tem padrão "aria": um horário fora dos limites marca o campo como inválido, mas nunca bloqueia o formulário.

Styling hooks

Mude o visual sem copiar o componente: use os atributos ou defina os tokens num elemento pai, num estilo ou no próprio campo.

Atributos

data-slot"time-field" · "date-input" · "date-segment"
data-invalidna raiz e nos segmentos quando inválido
data-disabled · data-readonlyna raiz e nos segmentos quando desativado · somente leitura
data-placeholdernum segmento ainda sem valor
data-typea parte do segmento: hour · minute · second · dayPeriod · timeZoneName · literal
data-focusedno segmento com foco

Tokens que ele lê

Cor

--cml-accent--cml-accent-fg--cml-border-control--cml-danger--cml-fg--cml-fg-muted--cml-field-bg--cml-field-border-sides--cml-field-shadow--cml-focus-ring

Forma e tamanho

--cml-field-border-width--cml-field-height--cml-field-padding--cml-font-size-field--cml-radius-control--cml-radius-field

Tipografia e movimento

--cml-duration-fast--cml-ease-standard--cml-font-field

Só deste componente

--cml-corner-shape--cml-disabled-opacity--cml-segment-focus-bg--cml-segment-focus-border--cml-segment-focus-fg--cml-segment-focus-shadow--cml-segment-radius
/* um rótulo de fuso mais discreto */
[data-slot="time-field"] [data-type="timeZoneName"] {
  color: var(--cml-fg-muted);
  font-size: 0.875em;
}

Acessibilidade

0–9Digita no segmento focado e avança quando ele enche.
A · PEscolhe AM ou PM no segmento de período, no relógio de 12 horas.
Seta para cima · Seta para baixoSoma ou subtrai um, voltando ao início no fim do segmento.
Seta para a esquerda · Seta para a direitaPassa de um segmento para outro.
Page Up · Page DownAnda um passo maior, como 15 minutos.
BackspaceApaga o segmento focado.

Relacionados

Esta página foi útil? · Editar esta página no GitHub