import dayjs from 'dayjs';
import { RadioGroupProps } from '../radio';
import { ButtonProps } from '../button';
import { SelectProps } from '../select';
import { LNode } from '../../common.type';
export interface TypeCalendarProps {
    cell?: string | LNode<CalendarCell>;
    cellAppend?: string | LNode<CalendarCell>;
    controllerConfig?: boolean | CalendarController;
    fillWithZero?: boolean;
    firstDayOfWeek?: number;
    format?: string;
    head?: string | LNode<ControllerOptions>;
    isShowWeekendDefault?: boolean;
    mode?: 'month' | 'year';
    month?: string | number;
    preventCellContextmenu?: boolean;
    range?: Array<CalendarValue>;
    theme?: 'full' | 'card';
    value?: CalendarValue;
    week?: Array<string> | LNode<CalendarWeek>;
    year?: string | number;
    onCellClick?: (options: {
        cell: CalendarCell;
        e: MouseEvent;
    }) => void;
    onCellDoubleClick?: (options: {
        cell: CalendarCell;
        e: MouseEvent;
    }) => void;
    onCellRightClick?: (options: {
        cell: CalendarCell;
        e: MouseEvent;
    }) => void;
    onControllerChange?: (options: ControllerOptions) => void;
    onMonthChange?: (options: {
        month: string;
        year: string;
    }) => void;
}
export interface CalendarController {
    current?: {
        visible?: boolean;
        currentDayButtonProps?: ButtonProps;
        currentMonthButtonProps?: ButtonProps;
    };
    disabled?: boolean;
    mode?: {
        visible?: boolean;
        radioGroupProps?: RadioGroupProps;
    };
    month?: {
        visible?: boolean;
        selectProps?: SelectProps;
    };
    weekend?: {
        visible?: boolean;
        showWeekendButtonProps?: ButtonProps;
        hideWeekendButtonProps?: ButtonProps;
    };
    year?: {
        visible?: boolean;
        selectProps?: SelectProps;
    };
}
export interface CalendarCell extends ControllerOptions {
    belongTo?: number;
    date?: Date;
    day?: number;
    formattedDate?: string;
    isCurrent?: boolean;
    weekOrder?: number;
}
export declare type CalendarValue = string | Date;
export interface CalendarWeek {
    day: WeekDay;
}
export declare type WeekDay = 1 | 2 | 3 | 4 | 5 | 6 | 7;
export interface ControllerOptions {
    filterDate: Date;
    formattedFilterDate: string;
    mode: string;
    isShowWeekend: boolean;
}
export declare type CalendarProps = TypeCalendarProps;
export interface CalendarData {
    curDate: dayjs.Dayjs;
    curSelectedYear: number;
    curSelectedMonth: number;
    curSelectedMode: string;
    isShowWeekend: boolean;
    controlSize: string;
}
export interface CalendarRange {
    from: CalendarValue;
    to: CalendarValue;
}
export interface YearMonthOption {
    value: number;
    label: string;
    disabled?: boolean;
}
export interface CellColHeader {
    num: WeekDay;
    display: string;
}
export interface ModeOption {
    value: string;
    label: string;
}
export interface CellEventOption {
    cell: CalendarCell;
    e: MouseEvent;
}
export declare type CellClickEventCallback = (options: CellEventOption) => void;
export interface TextConfigType {
    showWeekend: string;
    hideWeekend: string;
    today: string;
    thisMonth: string;
}
