import { Validator } from '../validator.type';
import { createEmailValidator } from './email';
import { createIsStringValidator } from './is-string';
import { createMaxLengthValidator } from './max-chars';
import { createMinLengthValidator } from './min-chars';
import { createPatternValidator } from './pattern';
import { createTrimmedValidator } from './trimmed';
import { createURIValidator } from './uri';
export type StringMessageFactories = {
    email: Parameters<typeof createEmailValidator>[0];
    uri: Parameters<typeof createURIValidator>[0];
    pattern: Parameters<typeof createPatternValidator>[0];
    trimmed: Parameters<typeof createTrimmedValidator>[0];
    isString: Parameters<typeof createIsStringValidator>[0];
    minLength: Parameters<typeof createMinLengthValidator>[0];
    maxLength: Parameters<typeof createMaxLengthValidator>[0];
};
export type StringValidatorOptions = {
    pattern?: RegExp | 'email' | 'uri' | Omit<string, 'email' | 'uri'>;
    trimmed?: boolean;
    minLength?: number;
    maxLength?: number;
    required?: boolean;
    mustBe?: string | null;
    not?: string | null;
    oneOf?: (string | null)[];
    notOneOf?: (string | null)[];
    messageOptions?: {
        label?: string;
    };
};
export declare function createStringValidators(factories?: Partial<StringMessageFactories>, 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: StringValidatorOptions) => ((value: string | null) => string) & {
        resolve: (mergedError: string) => {
            error: string;
            tooltip: string;
        };
    };
    email: () => Validator<string | null>;
    uri: () => Validator<string | null>;
    pattern: (pattern: string | RegExp) => Validator<string | null>;
    trimmed: () => Validator<string | null>;
    isString: () => Validator<string | null>;
    minLength: (min: number) => Validator<string | null>;
    maxLength: (max: number) => Validator<string | null>;
};
