import { type StyleValue } from 'vue';
import { type LocaleTranslate } from '../locale';
import { type Bem } from '../../utils';
export type CalendarType = 'single' | 'multiple' | 'range';
export interface CalendarDay {
    date: Date;
    disabled: boolean;
    type: 'same' | 'start' | 'middle' | 'end' | 'selected' | 'normal';
    top: string;
    text: string | number;
    bottom: string;
    className?: string;
    style?: StyleValue;
}
export interface CalendarProps {
    rootStyle?: StyleValue;
    rootClass?: string;
    type?: CalendarType;
    modelValue?: Date | Date[] | string | string[];
    min?: Date;
    max?: Date;
    currentDate?: Date;
    disabledDate?: (date: Date) => boolean;
    maxDays?: number;
    overMaxDays?: () => void;
    weekStartsOn?: number;
    formatter?: (day: CalendarDay) => void;
    allowSameDay?: boolean;
    severalMonths?: boolean;
    valueFormat?: string;
    startDateText?: string;
    endDateText?: string;
    sameDateText?: string;
}
export declare const defaultCalendarProps: {
    rootStyle?: (string | false | ((props: {
        rootStyle: StyleValue;
        rootClass: string;
        type: CalendarType;
        modelValue: Date | Date[] | string | string[];
        min: Date;
        max: Date;
        currentDate: Date;
        disabledDate: (date: Date) => boolean;
        maxDays: number;
        overMaxDays: () => void;
        weekStartsOn: number;
        formatter: (day: CalendarDay) => void;
        allowSameDay: boolean;
        severalMonths: boolean;
        valueFormat: string;
        startDateText: string;
        endDateText: string;
        sameDateText: string;
    }) => string | false | import("vue").CSSProperties | StyleValue[]) | null) | undefined;
    rootClass?: (string | ((props: {
        rootStyle: StyleValue;
        rootClass: string;
        type: CalendarType;
        modelValue: Date | Date[] | string | string[];
        min: Date;
        max: Date;
        currentDate: Date;
        disabledDate: (date: Date) => boolean;
        maxDays: number;
        overMaxDays: () => void;
        weekStartsOn: number;
        formatter: (day: CalendarDay) => void;
        allowSameDay: boolean;
        severalMonths: boolean;
        valueFormat: string;
        startDateText: string;
        endDateText: string;
        sameDateText: string;
    }) => string)) | undefined;
    type?: (CalendarType | ((props: {
        rootStyle: StyleValue;
        rootClass: string;
        type: CalendarType;
        modelValue: Date | Date[] | string | string[];
        min: Date;
        max: Date;
        currentDate: Date;
        disabledDate: (date: Date) => boolean;
        maxDays: number;
        overMaxDays: () => void;
        weekStartsOn: number;
        formatter: (day: CalendarDay) => void;
        allowSameDay: boolean;
        severalMonths: boolean;
        valueFormat: string;
        startDateText: string;
        endDateText: string;
        sameDateText: string;
    }) => "multiple" | "single" | "range")) | undefined;
    modelValue?: (string | ((props: {
        rootStyle: StyleValue;
        rootClass: string;
        type: CalendarType;
        modelValue: Date | Date[] | string | string[];
        min: Date;
        max: Date;
        currentDate: Date;
        disabledDate: (date: Date) => boolean;
        maxDays: number;
        overMaxDays: () => void;
        weekStartsOn: number;
        formatter: (day: CalendarDay) => void;
        allowSameDay: boolean;
        severalMonths: boolean;
        valueFormat: string;
        startDateText: string;
        endDateText: string;
        sameDateText: string;
    }) => string | string[] | Date | Date[])) | undefined;
    min?: ((props: {
        rootStyle: StyleValue;
        rootClass: string;
        type: CalendarType;
        modelValue: Date | Date[] | string | string[];
        min: Date;
        max: Date;
        currentDate: Date;
        disabledDate: (date: Date) => boolean;
        maxDays: number;
        overMaxDays: () => void;
        weekStartsOn: number;
        formatter: (day: CalendarDay) => void;
        allowSameDay: boolean;
        severalMonths: boolean;
        valueFormat: string;
        startDateText: string;
        endDateText: string;
        sameDateText: string;
    }) => Date) | undefined;
    max?: ((props: {
        rootStyle: StyleValue;
        rootClass: string;
        type: CalendarType;
        modelValue: Date | Date[] | string | string[];
        min: Date;
        max: Date;
        currentDate: Date;
        disabledDate: (date: Date) => boolean;
        maxDays: number;
        overMaxDays: () => void;
        weekStartsOn: number;
        formatter: (day: CalendarDay) => void;
        allowSameDay: boolean;
        severalMonths: boolean;
        valueFormat: string;
        startDateText: string;
        endDateText: string;
        sameDateText: string;
    }) => Date) | undefined;
    currentDate?: ((props: {
        rootStyle: StyleValue;
        rootClass: string;
        type: CalendarType;
        modelValue: Date | Date[] | string | string[];
        min: Date;
        max: Date;
        currentDate: Date;
        disabledDate: (date: Date) => boolean;
        maxDays: number;
        overMaxDays: () => void;
        weekStartsOn: number;
        formatter: (day: CalendarDay) => void;
        allowSameDay: boolean;
        severalMonths: boolean;
        valueFormat: string;
        startDateText: string;
        endDateText: string;
        sameDateText: string;
    }) => Date) | undefined;
    disabledDate?: (((date: Date) => boolean) | ((props: {
        rootStyle: StyleValue;
        rootClass: string;
        type: CalendarType;
        modelValue: Date | Date[] | string | string[];
        min: Date;
        max: Date;
        currentDate: Date;
        disabledDate: (date: Date) => boolean;
        maxDays: number;
        overMaxDays: () => void;
        weekStartsOn: number;
        formatter: (day: CalendarDay) => void;
        allowSameDay: boolean;
        severalMonths: boolean;
        valueFormat: string;
        startDateText: string;
        endDateText: string;
        sameDateText: string;
    }) => (date: Date) => boolean)) | undefined;
    maxDays?: (number | ((props: {
        rootStyle: StyleValue;
        rootClass: string;
        type: CalendarType;
        modelValue: Date | Date[] | string | string[];
        min: Date;
        max: Date;
        currentDate: Date;
        disabledDate: (date: Date) => boolean;
        maxDays: number;
        overMaxDays: () => void;
        weekStartsOn: number;
        formatter: (day: CalendarDay) => void;
        allowSameDay: boolean;
        severalMonths: boolean;
        valueFormat: string;
        startDateText: string;
        endDateText: string;
        sameDateText: string;
    }) => number)) | undefined;
    overMaxDays?: ((() => void) | ((props: {
        rootStyle: StyleValue;
        rootClass: string;
        type: CalendarType;
        modelValue: Date | Date[] | string | string[];
        min: Date;
        max: Date;
        currentDate: Date;
        disabledDate: (date: Date) => boolean;
        maxDays: number;
        overMaxDays: () => void;
        weekStartsOn: number;
        formatter: (day: CalendarDay) => void;
        allowSameDay: boolean;
        severalMonths: boolean;
        valueFormat: string;
        startDateText: string;
        endDateText: string;
        sameDateText: string;
    }) => () => void)) | undefined;
    weekStartsOn?: (number | ((props: {
        rootStyle: StyleValue;
        rootClass: string;
        type: CalendarType;
        modelValue: Date | Date[] | string | string[];
        min: Date;
        max: Date;
        currentDate: Date;
        disabledDate: (date: Date) => boolean;
        maxDays: number;
        overMaxDays: () => void;
        weekStartsOn: number;
        formatter: (day: CalendarDay) => void;
        allowSameDay: boolean;
        severalMonths: boolean;
        valueFormat: string;
        startDateText: string;
        endDateText: string;
        sameDateText: string;
    }) => number)) | undefined;
    formatter?: (((day: CalendarDay) => void) | ((props: {
        rootStyle: StyleValue;
        rootClass: string;
        type: CalendarType;
        modelValue: Date | Date[] | string | string[];
        min: Date;
        max: Date;
        currentDate: Date;
        disabledDate: (date: Date) => boolean;
        maxDays: number;
        overMaxDays: () => void;
        weekStartsOn: number;
        formatter: (day: CalendarDay) => void;
        allowSameDay: boolean;
        severalMonths: boolean;
        valueFormat: string;
        startDateText: string;
        endDateText: string;
        sameDateText: string;
    }) => (day: CalendarDay) => void)) | undefined;
    allowSameDay?: (boolean | ((props: {
        rootStyle: StyleValue;
        rootClass: string;
        type: CalendarType;
        modelValue: Date | Date[] | string | string[];
        min: Date;
        max: Date;
        currentDate: Date;
        disabledDate: (date: Date) => boolean;
        maxDays: number;
        overMaxDays: () => void;
        weekStartsOn: number;
        formatter: (day: CalendarDay) => void;
        allowSameDay: boolean;
        severalMonths: boolean;
        valueFormat: string;
        startDateText: string;
        endDateText: string;
        sameDateText: string;
    }) => boolean)) | undefined;
    severalMonths?: (boolean | ((props: {
        rootStyle: StyleValue;
        rootClass: string;
        type: CalendarType;
        modelValue: Date | Date[] | string | string[];
        min: Date;
        max: Date;
        currentDate: Date;
        disabledDate: (date: Date) => boolean;
        maxDays: number;
        overMaxDays: () => void;
        weekStartsOn: number;
        formatter: (day: CalendarDay) => void;
        allowSameDay: boolean;
        severalMonths: boolean;
        valueFormat: string;
        startDateText: string;
        endDateText: string;
        sameDateText: string;
    }) => boolean)) | undefined;
    valueFormat?: (string | ((props: {
        rootStyle: StyleValue;
        rootClass: string;
        type: CalendarType;
        modelValue: Date | Date[] | string | string[];
        min: Date;
        max: Date;
        currentDate: Date;
        disabledDate: (date: Date) => boolean;
        maxDays: number;
        overMaxDays: () => void;
        weekStartsOn: number;
        formatter: (day: CalendarDay) => void;
        allowSameDay: boolean;
        severalMonths: boolean;
        valueFormat: string;
        startDateText: string;
        endDateText: string;
        sameDateText: string;
    }) => string)) | undefined;
    startDateText?: (string | ((props: {
        rootStyle: StyleValue;
        rootClass: string;
        type: CalendarType;
        modelValue: Date | Date[] | string | string[];
        min: Date;
        max: Date;
        currentDate: Date;
        disabledDate: (date: Date) => boolean;
        maxDays: number;
        overMaxDays: () => void;
        weekStartsOn: number;
        formatter: (day: CalendarDay) => void;
        allowSameDay: boolean;
        severalMonths: boolean;
        valueFormat: string;
        startDateText: string;
        endDateText: string;
        sameDateText: string;
    }) => string)) | undefined;
    endDateText?: (string | ((props: {
        rootStyle: StyleValue;
        rootClass: string;
        type: CalendarType;
        modelValue: Date | Date[] | string | string[];
        min: Date;
        max: Date;
        currentDate: Date;
        disabledDate: (date: Date) => boolean;
        maxDays: number;
        overMaxDays: () => void;
        weekStartsOn: number;
        formatter: (day: CalendarDay) => void;
        allowSameDay: boolean;
        severalMonths: boolean;
        valueFormat: string;
        startDateText: string;
        endDateText: string;
        sameDateText: string;
    }) => string)) | undefined;
    sameDateText?: (string | ((props: {
        rootStyle: StyleValue;
        rootClass: string;
        type: CalendarType;
        modelValue: Date | Date[] | string | string[];
        min: Date;
        max: Date;
        currentDate: Date;
        disabledDate: (date: Date) => boolean;
        maxDays: number;
        overMaxDays: () => void;
        weekStartsOn: number;
        formatter: (day: CalendarDay) => void;
        allowSameDay: boolean;
        severalMonths: boolean;
        valueFormat: string;
        startDateText: string;
        endDateText: string;
        sameDateText: string;
    }) => string)) | undefined;
};
export interface CalendarEmits {
    (e: 'update:model-value', value: Date | Date[] | string | string[]): void;
    (e: 'change', value: Date | Date[] | string | string[]): void;
}
export interface CalendarMonthProps {
    year: number;
    month: number;
    type: CalendarType;
    minDate: Date;
    maxDate: Date;
    currentDates: Date[];
    formatter?: (day: CalendarDay) => void;
    disabledDate?: (date: Date) => boolean;
    todayNumber: number;
    weekStartsOn: number;
    severalMonths?: boolean;
    t: LocaleTranslate;
    bem: Bem;
    startDateText?: string;
    endDateText?: string;
    sameDateText?: string;
}
export interface CalendarMonthEmits {
    (e: 'day-click', date: Date): void;
}
export declare const getMinDate: (severalMonths?: boolean) => Date;
export declare const getMaxDate: (severalMonths?: boolean) => Date;
export declare const sortDates: (dates: Date[]) => Date[];
export declare const weeksIndex: number[];
