import { BoxProps } from '../box';
import { ThemingProps } from '../theme';
export interface DateRange {
    startDate?: Date;
    endDate?: Date;
}
export type FlowDirection = 'next' | 'prev';
/**
 * Mode for this calendar
 * Should it handle from date, to date or single date mode
 */
export type CalendarMode = 'exact' | 'from' | 'to' | 'range';
export interface DefaultViewMonthProps {
    boundaries?: DateRange;
    isStartDate?: boolean;
    selectedDate?: Date;
}
export interface MonthProps {
    boundaries?: DateRange;
    fixedNumberOfWeeks?: boolean;
    mode: CalendarMode;
    selectedDates?: DateRange;
    timeUnitMode?: TimeUnitMode;
    viewDate: Date;
}
export type ItemProps = {
    boundary?: boolean;
    current?: boolean;
    isDisabled?: boolean;
    isHidden?: boolean;
    isToday?: boolean;
    isSelected?: boolean;
};
/**
 * Single time item like day in a month, month in a year and year in multiple years
 */
export interface TimeItem {
    /** item is at the edge for a range, marking either start or end of it */
    boundary: boolean;
    /** item is clicked and selected by the user */
    current: boolean;
    /** the actual time item */
    date: Date;
    /** disabled because out of bounds */
    isDisabled: boolean;
    /** item should be hidden, for days we hide days that are not in the current month,
     * but still are rendered due to weekDays */
    isHidden: boolean;
    /** item is in the selected range between two dates */
    isSelected: boolean;
    /** the date is today*/
    isToday: boolean;
}
/**
 * All the date items in a view and whether next/prev button should be disabled
 */
export interface TimeResult {
    items: TimeItem[];
    nextDisabled: boolean;
    prevDisabled: boolean;
}
/**
 * Time mode for calendar, display days in month, months in year or years in multiple years
 */
export type TimeUnitMode = 'day' | 'month' | 'year';
export type CalendarProps = Omit<BoxProps, 'size' | 'variant'> & ThemingProps<'Calendar'> & {
    /** Allowed range to select from */
    boundaries?: DateRange;
    className?: string;
    disabled?: boolean;
    /** Including always 6 weeks into a month (used to have stable height in the calendar) */
    fixedNumberOfWeeks?: boolean;
    isStartDate?: boolean;
    /** Calendar select mode: 'exact' | 'from' | 'to' | 'range' @default 'exact' */
    mode: CalendarMode;
    /** On selecting a day */
    onSelectDates?: (value: DateRange) => void;
    /** Selected date */
    selectedDates?: DateRange;
};
//# sourceMappingURL=calendar.types.d.ts.map