"use client"; /** * Date Picker Field (NEW) * * Combines Shadcn Popover and Calendar for date selection */ import { Calendar } from "@mdxui/primitives/calendar"; import { Popover, PopoverContent, PopoverTrigger, } from "@mdxui/primitives/popover"; import { format, isAfter, isBefore, isSameDay } from "date-fns"; import { CalendarIcon } from "lucide-react"; import { useMemo, useState } from "react"; import { ANIMATION_CLASSES, getStaggerStyle, STAGGER_PRESETS, } from "../animations"; import { cx } from "../lib/utils"; import { OnboardingButton } from "../primitives/onboarding-button"; import { OnboardingLabel } from "../primitives/onboarding-label"; import type { DatePickerFieldProps } from "../types/fields"; export function DatePickerField({ id, label, placeholder = "Pick a date", description, required = false, value, onChange, minDate, maxDate, disabledDates, animationIndex = 0, disabled = false, error, touched = false, }: DatePickerFieldProps) { const [open, setOpen] = useState(false); const handleSelect = (date: Date | undefined) => { onChange(date); setOpen(false); }; // Build disabled function for react-day-picker const isDateDisabled = useMemo(() => { return (date: Date) => { if (minDate && isBefore(date, minDate)) return true; if (maxDate && isAfter(date, maxDate)) return true; if (disabledDates?.some((d) => isSameDay(date, d))) return true; return false; }; }, [minDate, maxDate, disabledDates]); return (
{description}
)}{error}
)}