export type CalendarValue = Range extends undefined ? Date | null : [Date, Date] | [Date, Date | null] | null; export type WeekDayName = 'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday'; export type Day = { readonly date: Date; readonly isToday: boolean; readonly isDisabled: boolean; }; export type Week = { readonly weekNumber: number; readonly days: Day[]; }; export interface UseCalendarProps { /** * Intl locale */ readonly locale: string; /** * The day the week starts from */ readonly weekStartDay: WeekDayName; /** * Display days with leading zero */ readonly displayLeadingZero: boolean; /** * Minimum date limit */ readonly minDate: Date; /** * Maximum date limit */ readonly maxDate: Date; } export type UseCalendarPayload = { /** * Returns `true` if the dateA and the dateB is a same day */ isSameDay: (dateA: Date, dateB: Date) => boolean; /** * Returns `true` if the passed date is a current day */ isToday: (date: Date) => boolean; /** * Returns array of weeks (with days in) for the passed date */ getWeeks: (needleDate: Date) => Week[]; /** * Returns Day label for the current locale */ getDayLabel: (date: Date) => string; /** * Returns Month name for the current locale */ getMonthLabel: (date: Date) => string; /** * Returns Year label for the current locale */ getYearLabel: (date: Date) => string; /** * Returns range of years (array of years) between passed dates */ getYearsRange: (minDate: Date, maxDate: Date) => number[]; /** * Returns range of monthes (array of month indexes) between passed dates */ getMonthsRange: (minDate: Date, maxDate: Date) => number[]; }; export declare const useCalendar: (props: UseCalendarProps) => UseCalendarPayload; export default useCalendar;