T2 EducaçãoMidas

DatePicker

Campo que abre um calendário em popover. Data única ou período (range), formatação em pt-BR, dropdown de mês e ano (data de nascimento), dias desabilitados, estado inválido e input hidden com data ISO para formulários.

Código-fonte

Exemplos

Interaja com o componente e copie o código de cada exemplo.

Básico

Período

Data de nascimento

Dropdown de mês e ano, sem datas futuras.

Data e horário

Digitando a data

Composição com InputGroup, Popover e Calendar.

Linguagem natural

Digite amanhã, próxima sexta, em 3 dias, 15/05 ou 20 de maio.

Seu post será publicado em 6 de outubro de 2026.

import { DatePicker, type DateRange } from "@t2-educacao/midas";

Uso

<Field>
  <FieldLabel htmlFor="data-prova">Data da prova</FieldLabel>
  <DatePicker id="data-prova" />
</Field>

Ao escolher um dia, o calendário fecha e o campo mostra a data formatada ("16 de jul. de 2026").

Props

PropTipoPadrãoDescrição
mode"single" | "range""single"Data única ou período
value / defaultValueDate | null ou DateRange | nullValor controlado / inicial
onValueChange(value) => voidRecebe Date | undefined ou DateRange | undefined
placeholderstring"Selecione uma data"Texto quando vazio
format(date: Date) => stringdd de mmm. de aaaaComo mostrar a data
captionLayout"label" | "dropdown" ..."label"Dropdown de mês/ano
startMonth / endMonthDateLimites da navegação
disabledDaysMatcher | Matcher[]Dias que não podem ser escolhidos
numberOfMonthsnumber1 (single) / 2 (range)Meses no calendário
iconReactNode | falseícone de calendárioÍcone do campo
disabled / invalidbooleanEstados
id / namestringLabel e formulário (name gera <input type="hidden"> com 2026-07-16 ou 2026-01-20/2026-02-09)

Exemplos

Período

const [periodo, setPeriodo] = useState<DateRange | undefined>();

<DatePicker mode="range" value={periodo} onValueChange={setPeriodo} />

Data de nascimento

<DatePicker
  captionLayout="dropdown"
  startMonth={new Date(1940, 0)}
  endMonth={new Date()}
  disabledDays={{ after: new Date() }}
  placeholder="Data de nascimento"
/>

Data e horário

<div className="flex gap-4">
  <Field>
    <FieldLabel htmlFor="data">Data</FieldLabel>
    <DatePicker id="data" />
  </Field>
  <Field className="w-28">
    <FieldLabel htmlFor="hora">Horário</FieldLabel>
    <Input id="hora" type="time" step="60" defaultValue="10:30" />
  </Field>
</div>

Linguagem natural

Campo de texto que entende "amanhã", "próxima sexta", "em 3 dias", "15/05" ou "20 de maio", com o calendário como apoio. É uma composição de InputGroup, Popover e Calendar: o exemplo completo, com o interpretador de datas em português, está no site de docs (DatePicker → Linguagem natural).

Formato próprio

<DatePicker format={(d) => d.toLocaleDateString("pt-BR")} />

Acessibilidade

  • O botão abre um diálogo "Calendário"; o foco vai para o dia selecionado (ou hoje).
  • Esc fecha e devolve o foco ao campo.

On this page