import { type ComponentPropsWithoutRef } from "react";
export type DateRange = {
    start: Date | null;
    end: Date | null;
};
/** Week-day index (0=Sun, 1=Mon, …, 6=Sat). */
export type WeekStart = 0 | 1 | 2 | 3 | 4 | 5 | 6;
export interface CalendarProps extends Omit<ComponentPropsWithoutRef<"div">, "onChange" | "defaultValue"> {
    /** "single" picks one date; "range" picks a start + end date. */
    mode?: "single" | "range";
    /** Selected value. For `mode="single"` pass a `Date | null`; for
     * `mode="range"` pass `{ start, end }`. */
    value?: Date | DateRange | null;
    onChange?: (value: Date | DateRange | null) => void;
    /** Uncontrolled initial visible month. */
    defaultMonth?: Date;
    /** Controlled visible month (1st of month). */
    month?: Date;
    onMonthChange?: (month: Date) => void;
    /** Hard min / max bounds — dates outside this range are disabled. */
    minDate?: Date;
    maxDate?: Date;
    /** Predicate for arbitrary per-date disabling (weekends, holidays, …).
     * Runs in addition to min/max bounds. */
    isDateDisabled?: (date: Date) => boolean;
    /** Day of week the grid starts on. 0=Sun (US default), 1=Mon (ISO), etc. */
    weekStartsOn?: WeekStart;
    /** Number of months rendered side-by-side. 1 (default) or 2. */
    numberOfMonths?: 1 | 2;
    /** Locale tag for Intl formatting (month name + weekday header).
     * Defaults to the user agent's locale. */
    locale?: string;
    /** Show a footer with `Today` / `Clear` actions. */
    showFooter?: boolean;
    todayLabel?: string;
    clearLabel?: string;
    /**
     * Header layout:
     *   - `"label"`     (default) — month + year as a static caption
     *   - `"dropdowns"` — month + year become `<select>`s so users can
     *                     jump directly to any month/year without
     *                     paginating month-by-month.
     *
     * The prev / next month arrows render in both modes; the dropdowns
     * are the fast-jump path on top.
     */
    captionLayout?: "label" | "dropdowns";
    /**
     * Year-dropdown lower bound. When omitted, defaults to either
     * `minDate.getFullYear()` (when set) or `today - 50`.
     */
    fromYear?: number;
    /**
     * Year-dropdown upper bound. When omitted, defaults to either
     * `maxDate.getFullYear()` (when set) or `today + 50`.
     */
    toYear?: number;
    /** When true, the grid focuses its initial date on mount. Use in popovers
     * so keyboard users land inside the calendar immediately. */
    autoFocus?: boolean;
    /** Accessible label for the calendar grid. */
    "aria-label"?: string;
}
export declare const Calendar: import("react").ForwardRefExoticComponent<CalendarProps & import("react").RefAttributes<HTMLDivElement>>;
export default Calendar;
//# sourceMappingURL=Calendar.d.ts.map