Date field
Campo de data que recebe uma data digitada em segmentos de dia, mês e ano, na ordem e no formato do idioma. Para datas que a pessoa já sabe, como aniversário ou início de contrato, sem um calendário no caminho.
Instalação
Configure o Camaleo uma vez (Instalação) e importe o que precisar. Os valores são objetos do @internationalized/date, reexportados pelo pacote; coloque o campo num Field para dar um rótulo a ele.
import { DateField, CalendarDate, CalendarDateTime, Field, FieldLabel } from "@camaleo/react";Anatomia
Uma caixa com um segmento para cada parte da data. Separadores como / também são segmentos, desenhados só para o olho e pulados pelo teclado.
Exemplos
Cada exemplo é um arquivo real que você pode copiar. Todos usam o estilo, o modo e a cor escolhidos na barra acima.
Primeiro dia em que o novo valor vale.
Enviado para a API: 2026-12-18
Controlado
Digite outra data. O onChange entrega um CalendarDate, e o toString() é a data ISO que a sua API espera, sem fuso horário para dar errado.
Nascimento com limites
Mude o ano para 2008 ou antes. minValue e maxValue marcam o campo como inválido, e um FieldError diz qual regra falhou.
As clínicas abrem das 08:00 às 18:00.
Data e hora
Passe um CalendarDateTime e granularity="minute" quando a hora faz parte da data, como numa consulta. As horas seguem o relógio do idioma.
Aperte a seta para cima: começa em 2020, não em hoje.
Valor de partida
Num campo vazio, as setas começam de hoje. O placeholderValue começa mais perto da resposta, sem preencher nada.
Idiomas
O mesmo 12 de novembro de 2026 em três idiomas: é 11/12 ou 12/11? O locale define a ordem dos segmentos e os separadores, então use o idioma da página.
Definida pelo RH. Peça a eles para corrigir.
Somente leitura
O readOnly mantém o valor focável e lido pelo leitor de tela. Diga na descrição quem pode mudar.
Abre de novo quando a declaração de 2026 for revisada.
Desativado
O disabled no Field chega ao rótulo e a todos os segmentos. Diga quando ele volta a abrir.
Em contexto
Campos de data vivem em formulários. São pedaços inteiros de interface para copiar, no estilo que você escolheu.
Passaporte
Necessário para voos internacionais.
Válido por pelo menos 6 meses depois da volta.
Fatura FAT-2048
Estúdio Claro · R$ 4.850,00
Boas práticas
Digite os números ou use as setas.
A pessoa digita o aniversário de memória; os segmentos recebem os números na ordem.
Três listas para abrir e rolar, e nada impede um 31 de fevereiro.
A mensagem diz o que mudar, e o leitor de tela lê ela junto com o campo.
A pessoa vê que algo está errado, mas não o quê. Cor sozinha não é mensagem de erro.
Props
Field, vale o disabled do field quando este não é passado.Field, vale o invalid do field quando este não é passado."pt-BR" ou "en-US". Sem ele, vale o I18nProvider mais próximo ou o idioma do navegador.null quando um segmento é apagado.CalendarDateTime. Padrão: hoje à meia-noite."day" para datas e "minute" para datas com hora.ZonedDateTime.O validationBehavior tem padrão "aria": um valor fora dos limites marca o campo como inválido, mas nunca bloqueia o formulário. As outras props do React Aria passam direto, como onFocusChange, onKeyDown e form.
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
Tokens que ele lê
Cor
Forma e tamanho
Tipografia e movimento
Só deste componente
/* segmentos retos e sublinhados, só neste formulário */
.passport-form [data-slot="date-field"] {
--cml-segment-radius: 0;
--cml-segment-focus-bg: transparent;
--cml-segment-focus-fg: var(--cml-accent-text);
--cml-segment-focus-shadow: inset 0 -2px 0 var(--cml-accent);
}Acessibilidade
- Cada segmento é um spinbutton com o nome da sua parte (dia, mês, ano) e o rótulo do campo, então a pessoa sabe qual número está mudando.
- O valor inteiro é lido como texto, como "16 de novembro de 2026", e não como números soltos.
- FieldDescription e FieldError ficam ligados pelo aria-describedby, e um campo inválido marca aria-invalid.
- Passe sempre o locale: assim o servidor e o navegador formatam igual, e os nomes dos segmentos vêm no idioma da página.