import type { Dayjs } from 'dayjs';
import type { CalendarActionKind, CalendarViews } from './enums';
import type { ImageStyle, TextStyle, ViewStyle } from 'react-native';
import { UI, SelectionState, DayFlag, MonthState, YearState, CalenderFlag } from './ui';
export type DateType = string | number | Dayjs | Date | null | undefined;
export type CalendarMode = 'single' | 'range' | 'multiple';
export type NavigationPosition = 'around' | 'right' | 'left';
export type WeekdayFormat = 'min' | 'short' | 'full';
export type MonthFormat = 'short' | 'full' | 'number';
export type LocalState = {
    date: DateType;
    startDate: DateType;
    endDate: DateType;
    dates?: DateType[];
    calendarView: CalendarViews;
    currentDate: DateType;
    currentYear: number;
};
export type CalendarAction = {
    type: CalendarActionKind;
    payload: any;
};
export type CalendarDay = {
    number: number;
    text: string;
    date: string;
    isDisabled: boolean;
    isCurrentMonth: boolean;
    dayOfMonth?: number;
    isToday: boolean;
    isSelected: boolean;
    inRange: boolean;
    leftCrop: boolean;
    rightCrop: boolean;
    isStartOfWeek: boolean;
    isEndOfWeek: boolean;
    isCrop: boolean;
    inMiddle: boolean;
    rangeStart: boolean;
    rangeEnd: boolean;
};
export type CalendarWeek = {
    index: number;
    name: {
        full: string;
        short: string;
        min: string;
    };
};
export type CalendarMonth = {
    index: number;
    name: {
        full: string;
        short: string;
        number: string;
    };
    isSelected: boolean;
};
export type CalendarYear = {
    number: number;
    text: string;
    isSelected: boolean;
    isActivated: boolean;
};
export type SingleChange = (params: {
    date: DateType;
}) => void;
export type RangeChange = (params: {
    startDate: DateType;
    endDate: DateType;
}) => void;
export type MultiChange = (params: {
    dates: DateType[];
    datePressed?: DateType;
    change: 'added' | 'removed' | 'updated';
}) => void;
export type ClassNames = Partial<{
    [key in UI | SelectionState | DayFlag | MonthState | YearState | CalenderFlag]: string;
}>;
export type Styles = Partial<{
    [key in UI | SelectionState | DayFlag | MonthState | YearState | CalenderFlag]: ViewStyle | TextStyle | ImageStyle;
}>;
export type CalendarComponents = Partial<{
    /** The component containing the day in the days grid */
    Day: (day: CalendarDay) => React.ReactNode;
    /** The component containing the month in the months grid */
    Month: (month: CalendarMonth) => React.ReactNode;
    /** The component containing the year in the years grid */
    Year: (year: CalendarYear) => React.ReactNode;
    /** The component containing the weekday in the header */
    Weekday: (weekday: CalendarWeek) => React.ReactNode;
    /** The previous month/year button icon in the header */
    IconPrev: React.ReactNode;
    /** The next month button/year icon in the header */
    IconNext: React.ReactNode;
}>;
export interface DatePickerBaseProps {
    mode?: CalendarMode;
    locale?: string | ILocale;
    numerals?: Numerals;
    timeZone?: string;
    date?: DateType;
    startDate?: DateType;
    endDate?: DateType;
    dates?: DateType[];
    min?: number;
    max?: number;
    onChange?: SingleChange | RangeChange | MultiChange;
    startYear?: number;
    endYear?: number;
    minDate?: DateType;
    maxDate?: DateType;
    enabledDates?: DateType[] | ((date: DateType) => boolean);
    disabledDates?: DateType[] | ((date: DateType) => boolean);
    firstDayOfWeek?: number;
    showOutsideDays?: boolean;
    timePicker?: boolean;
    use12Hours?: boolean;
    initialView?: CalendarViews;
    containerHeight?: number;
    weekdaysHeight?: number;
    style?: ViewStyle;
    className?: string;
    styles?: Styles;
    classNames?: ClassNames;
    navigationPosition?: NavigationPosition;
    weekdaysFormat?: WeekdayFormat;
    monthsFormat?: MonthFormat;
    monthCaptionFormat?: MonthFormat;
    multiRangeMode?: boolean;
    hideHeader?: boolean;
    hideWeekdays?: boolean;
    disableMonthPicker?: boolean;
    disableYearPicker?: boolean;
    components?: CalendarComponents;
    /** use to handle month and year selectors */
    month?: number;
    year?: number;
    onMonthChange?: (month: number) => void;
    onYearChange?: (year: number) => void;
}
export type Numerals = 'latn' | 'arab' | 'arabext' | 'deva' | 'beng' | 'guru' | 'gujr' | 'orya' | 'tamldec' | 'telu' | 'knda' | 'mlym';
export type PickerOption = {
    value: number | string;
    text: string;
};
//# sourceMappingURL=types.d.ts.map