import { AccessibilityProps } from '../shared/index.js';

interface CalendarProps {
    /** Selected date (controlled) */
    value?: Date;
    /** Default selected date (uncontrolled) */
    defaultValue?: Date;
    /** Callback when a date is selected */
    onSelect?: (date: Date) => void;
    /** Displayed month (controlled) */
    month?: Date;
    /** Callback when the displayed month changes */
    onMonthChange?: (month: Date) => void;
    /** Minimum selectable date */
    minDate?: Date;
    /** Maximum selectable date */
    maxDate?: Date;
    /** Specific dates to disable */
    disabledDates?: Date[];
}
interface CalendarDay {
    /** The date this cell represents */
    date: Date;
    /** Whether the date is today */
    isToday: boolean;
    /** Whether the date is currently selected */
    isSelected: boolean;
    /** Whether the date belongs to the currently displayed month */
    isCurrentMonth: boolean;
    /** Whether the date is disabled */
    isDisabled: boolean;
}
interface CalendarState {
    /** The currently displayed month */
    currentMonth: Date;
    /** The currently selected date, if any */
    selectedDate: Date | undefined;
}
interface CalendarAPI {
    /** Current calendar state */
    state: CalendarState;
    /** Array of day objects for the current month grid (always 42: 6 weeks x 7 days) */
    days: CalendarDay[];
    /** Navigate to the previous month */
    prevMonth(): void;
    /** Navigate to the next month */
    nextMonth(): void;
    /** Select a date */
    select(date: Date): void;
    /** ARIA attributes for the calendar grid */
    ariaProps: Partial<AccessibilityProps> & Record<string, unknown>;
    /** Get ARIA attributes for a specific day cell */
    getDayAriaProps(day: CalendarDay): Partial<AccessibilityProps> & Record<string, unknown>;
    /** Generated IDs */
    ids: {
        grid: string;
        label: string;
    };
}
declare function createCalendar(props?: CalendarProps): CalendarAPI;

declare const calendarVariants: (props?: ({
    [x: string]: string | undefined;
} & {
    className?: string;
}) | undefined) => string;
declare const dayVariants: (props?: ({
    state?: "default" | "selected" | "today" | "disabled" | "outside" | undefined;
} & {
    className?: string;
}) | undefined) => string;

export { type CalendarAPI, type CalendarDay, type CalendarProps, type CalendarState, calendarVariants, createCalendar, dayVariants };
