import { Validator } from '../validator.type';
import { createIsDateValidator } from './is-date';
import { createMaxDateValidator } from './max-date';
import { createMinDateValidator } from './min-date';
import { defaultFormatDate } from './util';
export type DateMessageFactories = {
    min: Parameters<typeof createMinDateValidator>[0];
    max: Parameters<typeof createMaxDateValidator>[0];
    isDate: Parameters<typeof createIsDateValidator>[0];
};
export type DateValidatorOptions = {
    required?: boolean;
    min?: Date | string;
    max?: Date | string;
    mustBe?: Date | string | null;
    not?: Date | string | null;
    oneOf?: (Date | string | null)[];
    notOneOf?: (Date | string | null)[];
    messageOptions?: {
        label?: string;
    };
};
export declare function createDateValidators<TDate = Date>(factories?: Partial<DateMessageFactories>, toDate?: (date: string | TDate) => Date, formatDate?: typeof defaultFormatDate, locale?: string, generalValidators?: {
    required: <T>(label?: string) => Validator<T>;
    mustBe: <T>(value: T, valueLabel?: string, matcher?: (a: T, b: T) => boolean) => Validator<T>;
    mustBeNull: <T>() => Validator<T>;
    not: <T>(value: T, valueLabel?: string, matcher?: (a: T, b: T) => boolean) => Validator<T>;
    oneOf: <T>(values: T[], toLabel?: (value: T) => string, identity?: (a: T) => string, delimiter?: string) => Validator<T>;
    notOneOf: <T>(values: T[], toLabel?: (value: T) => string, identity?: (a: T) => string, delimiter?: string) => Validator<T>;
}, merger?: <T>(validators: Validator<T>[]) => ((value: T) => string) & {
    resolve: (mergedError: string) => {
        error: string;
        tooltip: string;
    };
}): {
    all: (opt: DateValidatorOptions) => ((value: TDate | null) => string) & {
        resolve: (mergedError: string) => {
            error: string;
            tooltip: string;
        };
    };
    min: (date: string | TDate) => Validator<string | TDate | null>;
    max: (date: string | TDate) => Validator<string | TDate | null>;
    isDate: () => Validator<string | TDate | null>;
};
