import { DayFormatOptions, MonthFormat, YearFormat } from '../utils/date-utils';
import { Dispatch, SetStateAction } from 'react';

export type DaysOfWeekFilter = [
    number?,
    number?,
    number?,
    number?,
    number?,
    number?,
    number?
];
export interface UseDateArrayFormatOptions {
    yearFormat?: YearFormat;
    monthFormat?: MonthFormat;
    dayFormat?: DayFormatOptions;
}
export interface UseDateArraysProps {
    locale?: string;
    year?: number;
    month?: number;
    day?: number;
    formatOptions?: UseDateArrayFormatOptions;
    yearRange?: [number, number];
    daysOfWeekFilter?: DaysOfWeekFilter;
}
export declare function useDateArrays({ locale, year, month, yearRange, daysOfWeekFilter, formatOptions: { yearFormat, monthFormat, dayFormat, }, }: UseDateArraysProps): {
    daysArray: number[];
    monthsArray: string[] | number[];
    yearsArray: number[];
    yearsOptionsArray: {
        label: string;
        value: number;
    }[];
    monthsOptionsArray: {
        label: string;
        value: number;
    }[];
    daysOptionsArray: {
        label: string;
        value: number;
        disabled: boolean;
    }[];
    calendarDayArray: {
        label: string;
        value: number;
        disabled: boolean;
    }[];
    dayNamesArray: string[];
};
export declare function useYears(format?: YearFormat, range?: [number, number]): number[];
export declare function useYearsOptions(format?: YearFormat, range?: [number, number], locale?: string): {
    label: string;
    value: number;
}[];
export declare function useMonths(format: MonthFormat, locale?: string): number[] | string[];
export declare function useMonthsOptions(format: MonthFormat, locale?: string): {
    label: string;
    value: number;
}[];
export declare function useDays(year: number, month: number): number[];
export declare function useDayOptions(year: number, month: number, locale?: string, daysOfWeekFilter?: DaysOfWeekFilter): {
    label: string;
    value: number;
    disabled: boolean;
}[];
export declare function useDayNames(locale?: string, dayFormat?: DayFormatOptions): string[];
interface UseFormattedDateProps {
    year: number;
    month: number;
    day: number;
    yearRange?: number;
    formatString: string;
}
export declare function useFormattedDate({ year, month, day, formatString, }: UseFormattedDateProps): {
    formattedDate: string;
};
export declare function useCalendarDayArray(month: number, year: number, dayOptionsArray: {
    label: string;
    value: number;
    disabled: boolean;
}[]): {
    label: string;
    value: number;
    disabled: boolean;
}[];
export interface UseDatePropsReturnActions {
    setYear: Dispatch<SetStateAction<number>>;
    setYearRange: Dispatch<SetStateAction<[number, number]>>;
    setMonth: Dispatch<SetStateAction<number>>;
    setDay: Dispatch<SetStateAction<number>>;
    nextMonth: () => void;
    previousMonth: () => void;
    nextYear: () => void;
    previousYear: () => void;
}
export interface UseDatePropsReturnState {
    year: number;
    yearRange: [number, number];
    month: number;
    day: number;
    yearsArray: number[];
    yearsOptionsArray: {
        label: string;
        value: number;
        disabled?: boolean;
    }[];
    monthsArray: string[] | number[];
    monthsOptionsArray: {
        label: string | number;
        value: number;
        disabled?: boolean;
    }[];
    daysArray: number[];
    daysOptionsArray: {
        label: string;
        value: number;
        disabled?: boolean;
    }[];
    calendarDayNames: string[];
    calendarDayArray: {
        label: string;
        value: number;
        disabled?: boolean;
    }[];
    formattedDate: string;
}
export interface UseDatePropsReturn {
    dateActions: UseDatePropsReturnActions;
    dateState: UseDatePropsReturnState;
}
export declare enum DateDisplayFormat {
    "MMDDYY" = "MMDDYY",
    "DDMMYY" = "DDMMYY",
    "YYMMDD" = "YYMMDD",
    "YYDDMM" = "YYDDMM"
}
interface UseDatePropsFormatOptions extends UseDateArrayFormatOptions {
    formatString?: string;
}
interface UseDatePropsFilterOptions {
    yearsRange?: [number, number];
    daysOfWeekFilter?: DaysOfWeekFilter;
}
interface UseDateProps {
    locale?: string;
    date?: {
        day?: number;
        month?: number;
        year?: number;
    };
    formatOptions?: UseDatePropsFormatOptions;
    filterOptions?: UseDatePropsFilterOptions;
}
export declare function useDateProps({ locale, date: { year: yearProp, month: monthProp, day: dayProp, }, formatOptions: { yearFormat, monthFormat, dayFormat, formatString, }, filterOptions: { yearsRange, daysOfWeekFilter, }, }: UseDateProps): UseDatePropsReturn;
export interface UseRegionalFormatProps {
    date?: Date | string;
    dateFormat?: string;
    timeFormat?: string;
    options?: {
        ignoreDateFormat?: boolean;
    };
}
export declare function useRegionalTimeDate({ date, dateFormat, timeFormat, options, }: UseRegionalFormatProps): {
    formattedDate: string;
    formattedTime: string;
};
export {};
//# sourceMappingURL=use-date-props.d.ts.map