Date picker
Seletor de data — um campo em que você digita ou escolhe num calendário. Use para datas próximas de hoje, como uma entrega, uma reserva ou um prazo.
Entregamos de segunda a sábado, das 8h às 18h.
Instalação
Configure o Camaleo uma vez (Instalação) e importe o que precisar. As datas são objetos do @internationalized/date, reexportados pela biblioteca. Coloque o seletor num Field para dar um rótulo a ele.
import { DatePicker, CalendarDate, CalendarDateTime, isWeekend, Field, FieldLabel } from "@camaleo/react";Anatomia
Uma caixa com um segmento editável para cada parte da data e um botão que abre um Calendar num popup. O popup é renderizado num portal e mantém o estilo.
Exemplos
Cada exemplo é um arquivo real que você pode copiar. Todos usam o estilo, o modo e a cor escolhidos na barra acima.
Entregamos de segunda a sábado, das 8h às 18h.
Chega sábado, 14 de novembro de 2026
Controlado, com o dia da semana
Escolha outro dia. Escrever o dia da semana na descrição pega um sábado que ninguém queria escolher.
Aberto de 02/11 a 18/12/2026.
Data mínima e máxima
minValue e maxValue riscam os dias fora do intervalo. Confira o valor também e use invalid no Field, para que uma data digitada receba a mensagem.
De segunda a sexta. Fins de semana aparecem riscados no calendário.
Datas indisponíveis
isDateUnavailable com isWeekend bloqueia os fins de semana do idioma da página. Diga a regra na descrição, porque o calendário fica escondido até abrir.
Horário de Brasília. Cada participante vê no próprio fuso.
Data e hora
Passe um CalendarDateTime e granularity="minute" para ganhar segmentos de hora e minuto. O hourCycle={24} tira o AM/PM onde o relógio de 24 horas é mais claro, como na agenda de um webinar.
O calendário abre em março de 2027, mês da conferência.
Abre no mês certo
Sem valor, o calendário abre no dia de hoje. O placeholderValue abre onde estão as datas que importam, sem preencher o campo.
Definido na assinatura do contrato. Peça ao seu gerente de conta para mudar.
Somente leitura
O readOnly deixa a data focável e legível, ao contrário do disabled. Diga na descrição quem pode mudar.
Obrigatório num formulário
Envie o formulário vazio. O erro diz o que falta, fica ligado ao campo e some assim que uma data é escolhida.
Em contexto
Datas fazem parte de tarefas maiores. São pedaços inteiros de interface para copiar, no estilo que você escolheu.
Buscar voos
Agendar post
Horário de Brasília. Dá para reagendar até a publicação.
Nova cobrança
Emitida em 28/10/2026.
Segue o prazo de pagamento. Mude para um acordo pontual.
Boas práticas
Uma entrega ou uma reserva fica a poucos cliques, e o calendário mostra o dia da semana.
Voltar 30 anos, mês a mês, é lento. Use um DateField e deixe a pessoa digitar.
De segunda a sexta. Fins de semana aparecem riscados no calendário.
A regra aparece antes de a pessoa abrir o calendário ou digitar uma data.
"Data indisponível." chega tarde demais e não diz quais datas estão livres.
Props
O DatePicker recebe as props do date picker do React Aria. Estas são as mais usadas:
onOpenChange.Field, vale o invalid do campo quando esta prop não é passada."pt-BR". Usa o do navegador por padrão."short".null quando o campo está vazio.true para os dias que não podem ser escolhidos."hour", "minute" e "second" adicionam a hora.As outras props do React Aria passam direto, como defaultOpen, shouldCloseOnSelect, hideTimeZone, shouldForceLeadingZeros, pageBehavior e autoFocus.
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 seletor. O calendário do popup lê os tokens do Calendar.
Atributos
Tokens que ele lê
Cor
Forma e tamanho
Tipografia e movimento
Só deste componente
/* destaque mais suave nos segmentos, só no formulário de reserva */
.reserva [data-slot="date-segment"] {
--cml-segment-focus-bg: var(--cml-item-highlight);
--cml-segment-focus-fg: var(--cml-fg);
}Acessibilidade
- Cada segmento é um spinbutton nomeado pelo rótulo do campo, então o leitor de tela anuncia a parte e a data completa.
- O popup é um diálogo. O foco entra no calendário quando ele abre e volta ao botão quando fecha.
- Dias indisponíveis ou fora do intervalo são anunciados como indisponíveis, não só riscados.
- O FieldDescription e o FieldError ficam ligados por aria-describedby, e um seletor inválido marca aria-invalid.