import { useState, useEffect } from "react"; import { DayPicker } from "react-day-picker"; import type { DateRange } from "react-day-picker"; import "react-day-picker/style.css"; type BaseProps = Omit, 'mode' | 'selected' | 'onSelect'>; type CalendarProps = | (BaseProps & { mode: 'single'; selected?: Date; onSelect?: (date: Date | undefined) => void; }) | (BaseProps & { mode: 'range'; selected?: DateRange; onSelect?: (range: DateRange | undefined) => void; }) | (BaseProps & { mode: 'multiple'; selected?: Date[]; onSelect?: (dates: Date[] | undefined) => void; }); export function Calendar(props: CalendarProps) { const { mode, selected, onSelect, className, ...rest } = props; const [internalSelected, setInternalSelected] = useState(selected); useEffect(() => { setInternalSelected(selected); }, [selected]); const handleSelect = (value: typeof selected) => { setInternalSelected(value); onSelect?.(value as any); // We'll narrow this properly below }; return (
{mode === 'single' && ( void} {...rest} /> )} {mode === 'range' && ( void} {...rest} /> )} {mode === 'multiple' && ( void} {...rest} /> )}
); }