import { Time, WeekDay } from "../date-tools";
export declare enum RepeatTypes {
    Interval = "Interval",
    DayOfWeek = "DayOfWeek",
    DayOfMonth = "DayOfMonth",
    DayOfYear = "DayOfYear",
    MonthDay = "MonthDay",
    NthWeekDayOfIntervalMonth = "NthWeekDayOfIntervalMonth",
    NthWeekDayOfSpecifiedMonth = "NthWeekDayOfSpecifiedMonth"
}
export declare type CalendarRepeat<T = any> = (T extends RepeatTypes.Interval ? {
    interval?: number;
} : T extends RepeatTypes.DayOfWeek ? {
    days?: WeekDay[];
    interval?: number;
    weeks?: number;
} : T extends RepeatTypes.DayOfMonth ? {
    days: number[];
    months?: number[];
} : T extends RepeatTypes.DayOfYear ? {
    days: number[];
    interval?: number;
    timesOfYear?: number;
} : T extends RepeatTypes.MonthDay ? {
    month: number;
    day: number;
    interval?: number;
    timesOfYear?: number;
} : T extends RepeatTypes.NthWeekDayOfIntervalMonth ? {
    interval?: number;
    rank?: number;
    weekDay: WeekDay;
} : T extends RepeatTypes.NthWeekDayOfSpecifiedMonth ? {
    month: number;
    rank?: number;
    weekDay: WeekDay;
    interval?: number;
} : {}) & {
    type: T;
    start: Date;
    end?: Date;
    times?: number;
};
export interface CalendarEvent<T extends RepeatTypes = any> {
    id: Symbol;
    title: string;
    description?: string;
    start: Time;
    end: Time;
    repeat: CalendarRepeat<T>;
    customData?: any;
}
export declare type CalendarRepeatFn<T extends RepeatTypes> = (date: Date, option: Omit<CalendarRepeat<T>, 'type'>) => boolean;
export interface CalendarDate {
    year: number;
    month: number;
    day: number;
    weekDay: number;
    date: Date;
    events: Omit<CalendarEvent, 'id' | 'repeat'>[];
}
//# sourceMappingURL=definition.d.ts.map