import BaseFoundation, { DefaultAdapter } from '../base/foundation';
import { WeekStartNumber } from './_utils/getMonthTable';
export interface MonthFoundationProps {
    forwardRef: any;
    month: Date;
    selected: Set<string>;
    rangeStart: string;
    rangeEnd: string;
    offsetRangeStart: string;
    offsetRangeEnd: string;
    onDayClick: (day: MonthDayInfo) => void;
    onDayHover: (day: MonthDayInfo) => void;
    weekStartsOn: WeekStartNumber;
    disabledDate: (day: Date, options?: {
        rangeStart: string;
        rangeEnd: string;
    }) => boolean;
    weeksRowNum: number;
    onWeeksRowNumChange: (weeksRowNum: number) => void;
    renderDate: (dayNumber: number, fullDate: string) => React.ReactNode;
    renderFullDate: (dayNumber: number, fullDate: string, dayStatus: any) => React.ReactNode;
    hoverDay: string;
    startDateOffset: () => void;
    endDateOffset: () => void;
    rangeInputFocus: string | boolean;
    focusRecordsRef: any;
    locale: any;
    localeCode: string;
    multiple: boolean;
}
export type MonthDayInfo = {
    dayNumber: number;
    dayNumberFull?: string;
    fullDate: string;
};
export interface MonthInfo {
    weeks: Array<MonthDayInfo[]>;
    monthText: string;
    month?: Date;
}
export interface MonthFoundationState {
    weekdays: string[];
    month: MonthInfo;
    todayText: string;
    weeksRowNum: number;
}
export interface MonthTable {
    monthText: string;
    weeks: unknown;
    month: unknown;
}
export interface MonthAdapter extends DefaultAdapter<MonthFoundationProps, MonthFoundationState> {
    updateToday: (todayText: string) => void;
    setWeekDays: (weekdays: string[]) => void;
    setWeeksRowNum: (weeksRowNum: number, callback?: () => void) => void;
    updateMonthTable: (month: MonthInfo) => void;
    notifyDayClick: MonthFoundationProps['onDayClick'];
    notifyDayHover: MonthFoundationProps['onDayHover'];
    notifyWeeksRowNumChange: MonthFoundationProps['onWeeksRowNumChange'];
}
export default class CalendarMonthFoundation extends BaseFoundation<MonthAdapter> {
    constructor(adapter: MonthAdapter);
    init(): void;
    _getToday(): void;
    getMonthTable(): void;
    updateWeekDays(): void;
    destroy(): void;
    handleClick(day: MonthDayInfo): void;
    handleHover(day?: MonthDayInfo): void;
}
