Calendar
Componente de seleção de datas baseado no react-day-picker. Suporta seleção única, múltipla e por intervalo.
Modos de seleção
O Calendar suporta três modos de seleção controlados pela prop mode.
Single
Seleciona uma data por vez.
Selecionado: 09/05/2026
Range
Seleciona um intervalo de datas.
De: — até —
Multiple
Seleciona múltiplas datas não contínuas.
Selecionados: 0 dia(s)
Padrão de implementação
Snippets controlados para cada modo de seleção.
Seleção única (controlled)
"use client"
import * as React from "react"
import { Calendar } from "@/components/ui/calendar"
export function MeuCalendario() {
const [date, setDate] = React.useState<Date | undefined>(new Date())
return (
<Calendar
mode="single"
selected={date}
onSelect={setDate}
/>
)
}Intervalo de datas
"use client"
import * as React from "react"
import { Calendar } from "@/components/ui/calendar"
import type { DateRange } from "react-day-picker"
export function CalendarioRange() {
const [range, setRange] = React.useState<DateRange>({ from: undefined })
return (
<Calendar
mode="range"
selected={range}
onSelect={(r) => setRange(r ?? { from: undefined })}
/>
)
}Com datas desabilitadas
<Calendar
mode="single"
selected={date}
onSelect={setDate}
disabled={(date) => date < new Date()}
/>Com layout de dropdown (mês/ano)
<Calendar
mode="single"
captionLayout="dropdown"
selected={date}
onSelect={setDate}
/>Props e uso
Principais props disponíveis no componente Calendar.
Props principais
mode
"single" | "multiple" | "range"
Define o comportamento de seleção de datas.
selected
Date | Date[] | DateRange
Valor controlado. Tipo depende do mode.
onSelect
(date) => void
Callback chamado ao selecionar uma data.
disabled
Matcher | Matcher[]
Desabilita datas. Aceita função, data, range, entre outros.
captionLayout
"label" | "dropdown"
Define se o cabeçalho mostra label simples ou dropdowns de mês/ano.
showOutsideDays
boolean
Exibe os dias do mês anterior/próximo na grade. Padrão: true.
Acessibilidade
O Calendar herda a acessibilidade do react-day-picker, com navegação completa por teclado: setas para mover entre dias, Enter para selecionar, PageUp/PageDown para mudar de mês.
Para datas com restrições (disabled), certifique-se de que há uma mensagem clara explicando por que a data não está disponível.
Use em conjunto com o componente Popover para criar um Date Picker acessível (ver componente Date Picker).
MN Design System · Primary #5FC318 · Brand Green #AFF000 · Font: Inter