'use client'; import * as React from 'react'; import { format } from 'date-fns'; import { ptBR } from 'date-fns/locale'; import { CalendarIcon } from 'lucide-react'; import type { DateRange } from 'react-day-picker'; import { cn } from '@/lib/utils'; import { Button } from '@/components/ui/button'; import { Calendar } from '@/components/ui/calendar'; import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; interface DatePickerProps { value?: Date; onChange: (date: Date | undefined) => void; placeholder?: string; disabled?: boolean; className?: string; id?: string; 'aria-invalid'?: boolean; 'aria-describedby'?: string; } /** Seleção de data única — usada em formulários (ex: vencimento de parcela). */ function DatePicker({ value, onChange, placeholder = 'Selecionar data', disabled, className, id, ...aria }: DatePickerProps) { const [open, setOpen] = React.useState(false); return ( { onChange(date); setOpen(false); }} locale={ptBR} autoFocus /> ); } interface DateRangePickerProps { value?: DateRange; onChange: (range: DateRange | undefined) => void; placeholder?: string; disabled?: boolean; className?: string; id?: string; } /** Seleção de período — usada nos filtros de dashboard/listagens (seção 7 do schema). */ function DateRangePicker({ value, onChange, placeholder = 'Selecionar período', disabled, className, id, }: DateRangePickerProps) { const [open, setOpen] = React.useState(false); const label = React.useMemo(() => { if (!value?.from) return placeholder; if (!value.to) return format(value.from, 'dd/MM/yyyy', { locale: ptBR }); return `${format(value.from, 'dd/MM/yyyy', { locale: ptBR })} – ${format(value.to, 'dd/MM/yyyy', { locale: ptBR })}`; }, [value, placeholder]); return ( ); } export { DatePicker, DateRangePicker };