import type { BaseProps } from '../BaseProps';
export type { ISODateString, DayOfWeek, DayOfWeekName, DateRange, } from '../utils/dateTypes';
import type { ISODateString, DayOfWeek, DayOfWeekName, DateRange } from '../utils/dateTypes';
/** Imperative handle for Calendar handleRef */
export interface CalendarHandle {
    /** Navigate the calendar to show the month containing the given date */
    navigateTo: (date: ISODateString) => void;
}
interface CalendarBaseProps extends Omit<BaseProps<HTMLDivElement>, 'onChange' | 'defaultValue'> {
    /** Ref forwarded to the calendar root element. */
    ref?: React.Ref<HTMLDivElement>;
    /** Imperative handle ref for calendar navigation. */
    handleRef?: React.Ref<CalendarHandle>;
    /** Number of months to display (default: 1) */
    numberOfMonths?: 1 | 2;
    /** Minimum selectable date in ISO format */
    min?: ISODateString;
    /** Maximum selectable date in ISO format */
    max?: ISODateString;
    /**
     * Custom date constraint functions. Date is disabled if ANY function returns false.
     * Use for complex rules like "weekdays only" or "no holidays".
     */
    dateConstraints?: ReadonlyArray<(date: Date) => boolean>;
    /**
     * Controlled focus date (which month is visible).
     * If not provided, defaults to selected date or today.
     */
    focusDate?: ISODateString;
    /** Callback when visible month changes via navigation */
    onFocusDateChange?: (focusDate: ISODateString) => void;
    /**
     * Show days from adjacent months (grayed out).
     * Default: true
     */
    hasOutsideDays?: boolean;
    /**
     * Show ISO week numbers in a side column.
     * Default: false
     */
    hasWeekNumbers?: boolean;
    /**
     * Use variable rows per month vs. fixed 6-row grid.
     * Default: false (fixed 6 rows for consistent height)
     */
    hasVariableRowCount?: boolean;
    /**
     * First day of week. Accepts a number (0 = Sunday … 6 = Saturday) or a
     * three-letter day name ('sun'–'sat', case-insensitive) for readability.
     * Default: 0 (Sunday)
     */
    weekStartsOn?: DayOfWeek | DayOfWeekName;
}
interface CalendarSingleProps extends CalendarBaseProps {
    /** Selection mode */
    mode?: 'single';
    /** Selected date in ISO format (YYYY-MM-DD) */
    value?: ISODateString;
    /** Default value for uncontrolled mode */
    defaultValue?: ISODateString;
    /** Callback when date is selected */
    onChange?: (value: ISODateString, valueAsDate: Date) => void;
}
interface CalendarRangeProps extends CalendarBaseProps {
    /** Selection mode */
    mode: 'range';
    /** Selected date range */
    value?: DateRange;
    /** Default value for uncontrolled mode */
    defaultValue?: DateRange;
    /** Callback when range is selected */
    onChange?: (value: DateRange) => void;
}
export type CalendarProps = CalendarSingleProps | CalendarRangeProps;
/**
 * A calendar component for selecting dates or date ranges.
 *
 * @example
 * ```
 * <Calendar value={selectedDate} onChange={setSelectedDate} />
 * ```
 */
export declare function Calendar({ ref, ...props }: CalendarProps): import("react").JSX.Element;
export declare namespace Calendar {
    var displayName: string;
}
//# sourceMappingURL=Calendar.d.ts.map