import { Dispatch, SetStateAction } from 'react';
import { DefaultAttributes } from '../types';
export declare type StartingDay = 'sunday' | 'monday' | 'none';
export declare type Selection = 'single-date' | 'range';
export declare type DatePickerVariant = 'chip' | 'select';
export declare type Locale = 'en_CA' | 'fr_CA';
export declare type MonthFormat = 'narrow' | 'short' | 'numeric' | '2-digit' | 'long' | undefined;
declare type Months = 1 | 2;
declare type DefaultSelectorValues = 'TODAY' | 'YESTERDAY' | 'CUSTOM' | 'LASTTWENTYEIGHT' | 'LASTSEVEN' | 'LASTMONTH';
export declare type Month = {
    month: number;
    year: number;
};
export declare type DateRange = {
    start: Date;
    end: Date;
};
export declare type DateEvent = {
    label: string;
    date: Date;
};
/**
 * @deprecated
 */
export declare type DefaultSelector = {
    value: DefaultSelectorValues;
    label: string;
    dateRange?: Date | DateRange;
    disabled?: boolean;
};
/**
 * @deprecated
 */
export declare type CustomSelector = {
    dateRange: Date | DateRange;
    value: string;
    label: string;
    disabled?: boolean;
};
declare type BaseDateSelector = {
    value: string;
    label: string;
    disabled?: boolean;
};
export declare type DateSelector = BaseDateSelector & {
    dateRange: Date | DateRange;
};
export declare type Selector = DateSelector | (Omit<BaseDateSelector, 'value'> & {
    value: 'CUSTOM';
});
declare type DefaultSelectorPropType = Omit<Selector, 'dateRange' | 'value'>;
/**
 * @deprecated
 */
export declare type DefaultSelectors = {
    today?: DefaultSelectorPropType | null;
    yesterday?: DefaultSelectorPropType | null;
    lastSeven?: DefaultSelectorPropType | null;
    lastTwentyEight?: DefaultSelectorPropType | null;
    lastMonth?: DefaultSelectorPropType | null;
    custom?: DefaultSelectorPropType | null;
};
export declare type SelectedRange = DateRange | Date | null;
export declare type DatePickerProps = {
    label?: string;
    hasError?: boolean;
    errorText?: string;
    assistText?: string;
    onBlur?: () => void;
    touched?: boolean;
    variant: DatePickerVariant;
    selectedRange: SelectedRange;
    onChange: (dateRange: DateRange) => void;
    onSelect?: (dateRange: DateRange) => void;
    disabled?: boolean;
    selection?: Selection;
    selectors?: Selector[];
    /**
     * @deprecated Prefer using "selectors". This will be removed in the next major version.
     */
    showSelectors?: boolean;
    /**
     * @deprecated Prefer using "selectors". This will be removed in the next major version.
     */
    customSelectors?: CustomSelector[];
    /**
     * @deprecated Prefer using "selectors" and passing exported "datePickerDefaultSelectors". This will be removed in the next major version.
     */
    defaultSelectorValues?: Omit<DefaultSelectors, 'value'>;
    dismissText?: string;
    confirmText?: string;
    months?: Months;
    startingDay?: StartingDay;
    eventDates?: DateEvent[];
    placeholder?: string;
    narrow?: boolean;
    locale?: Locale;
    minDate?: Date;
    maxDate?: Date;
    leadingIcon?: JSX.Element;
    monthAndYearSelection?: boolean;
} & Pick<InputProps, 'getInputLabel'> & DefaultAttributes;
export declare type ActionButtonsProps = {
    onConfirm: () => void;
    onDismiss: () => void;
    confirmText?: string;
    dismissText?: string;
    narrow?: boolean;
} & DefaultAttributes;
export declare type CalenderValue = 'primary' | 'secondary';
export declare type CalendarProps = {
    selection: Selection;
    selectedRange: DateRange | null;
    month: number;
    year: number;
    startingDay: StartingDay;
    locale: Locale;
    minDate: Date | undefined;
    maxDate: Date | undefined;
    showSelectors: boolean;
    visible: boolean;
    handleChange: (date: Date) => void;
    eventDates?: DateEvent[];
    narrow?: boolean;
    hasFocus?: boolean;
    value?: CalenderValue;
    focusElementIndex?: number | null;
    setCalenderWithFocus?: (calendar: CalenderValue, prevCalender: CalenderValue) => void;
    setFocusElementIndex?: Dispatch<SetStateAction<number>>;
    setLength?: Dispatch<SetStateAction<number>>;
    handleNextMonth?: () => void;
    handlePrevMonth?: () => void;
};
export declare type DayNameRowProps = {
    locale: Locale;
    scrollBarWidth?: number;
    startingDay?: StartingDay;
    narrow?: boolean;
};
export declare type HeaderProps = {
    selection: Selection;
    currentMonth: number;
    nextMonth: number;
    currentYear: number;
    months: Months;
    locale: Locale;
    handleNextMonth: () => void;
    handlePrevMonth: () => void;
} & DefaultAttributes;
export declare type MonthAndYearSelectionHeaderProps = {
    currentMonth: number;
    currentYear: number;
    locale: Locale;
    handleNextYear: () => void;
    handlePrevYear: () => void;
    handleNextMonth: () => void;
    handlePrevMonth: () => void;
    viewType: string;
    minDate?: Date;
    maxDate?: Date;
    updateViewType: (viewType: ViewType) => void;
} & DefaultAttributes;
export declare type YearProps = {
    width: number;
    height: number;
    currentYear: number;
    updateCurrentYear: (year: number) => void;
    minimumYear?: number;
    maximumYear?: number;
} & DefaultAttributes;
export declare type MonthProps = {
    width: number;
    height: number;
    locale: Locale;
    currentMonth: number;
    updateCurrentMonth: (month: number) => void;
} & DefaultAttributes;
export declare type InputProps = {
    variant: DatePickerVariant;
    value: DateRange | null;
    placeholder: string;
    visible: boolean;
    disabled: boolean;
    hasError?: boolean;
    locale: Locale;
    handleClick: () => void;
    leadingIcon?: JSX.Element;
    getInputLabel?(dateRange: DateRange, locale: Locale, variant: DatePickerVariant): string;
} & DefaultAttributes;
export declare type DatePickerNarrowProps = {
    disabled: boolean;
    selection: Selection;
    selectedRange: DateRange | null;
    variant: DatePickerVariant;
    month: number;
    year: number;
    startingDay: StartingDay;
    locale: Locale;
    confirmText: string;
    dismissText: string;
    eventDates: DateEvent[] | undefined;
    minDate: Date | undefined;
    maxDate: Date | undefined;
    selectors?: Selector[];
    /**
     * @deprecated Prefer using "selectors". This will be removed in the next major version.
     */
    showSelectors: boolean;
    /**
     * @deprecated Prefer using "selectors". This will be removed in the next major version.
     */
    customSelectors?: CustomSelector[];
    /**
     * @deprecated Prefer using "selectors" and passing exported "datePickerDefaultSelectors". This will be removed in the next major version.
     */
    defaultSelectorValues?: Omit<DefaultSelectors, 'value'>;
    selectedSelector: Selector | undefined;
    handleChange: (date: Date) => void;
    onDismiss: () => void;
    onConfirm: () => void;
    onSelectorClick: (selector: Selector) => void;
    placeholder?: string;
    label?: string;
} & Pick<InputProps, 'getInputLabel'> & DefaultAttributes;
export declare type GridPosition = {
    col: number;
    row: number;
};
export declare type DayProps = {
    day: Date;
    isInRange: boolean;
    isStartDay: boolean;
    isEndDay: boolean;
    currentMonth: number;
    selection: Selection;
    hasEvent: boolean;
    disabled: boolean;
    width: number;
    selectedRange: SelectedRange;
    hasFocus: boolean;
    onChange: (date: Date, month?: number) => void;
};
export declare type DatePickerSelectProps = {
    placeholder: string;
    handleClick: () => void;
    visible: boolean;
    disabled: boolean;
    label?: string;
    hasError?: boolean;
    leadingIcon?: JSX.Element;
};
export declare type ViewType = 'calendar' | 'month' | 'year';
export {};
