interface LengthMin {
    min: number;
    max?: number;
}
interface LengthMax {
    min?: number;
    max: number;
}
interface ContainsUppercase {
    uppercase: number;
    numbers?: number;
    specialCharacters?: number;
}
interface ContainsNumbers {
    uppercase?: number;
    numbers: number;
    specialCharacters?: number;
}
interface ContainsSpecialCharacters {
    uppercase?: number;
    numbers?: number;
    specialCharacters: number;
}
declare type ContainsRules = ContainsUppercase | ContainsNumbers | ContainsSpecialCharacters | (ContainsUppercase & ContainsNumbers & ContainsSpecialCharacters);
interface LengthRule {
    length: LengthMin | LengthMax | (LengthMin & LengthMax);
}
interface ContainsRule {
    contains: ({
        atLeast?: number;
    }) & ContainsRules;
}
export declare type ValidationRules = RequireAtLeastOne<LengthRule & ContainsRule>;
declare type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> & {
    [K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;
}[Keys];
declare const validation: import("@dojo/framework/core/interfaces").MiddlewareResultFactory<import("@dojo/framework/core/interfaces").WidgetProperties & import("@dojo/framework/core/interfaces").I18nProperties, import("@dojo/framework/core/interfaces").DNode<any>[], {
    i18n: import("@dojo/framework/core/interfaces").MiddlewareResultFactory<import("@dojo/framework/core/interfaces").WidgetProperties & import("@dojo/framework/core/interfaces").I18nProperties, import("@dojo/framework/core/interfaces").DNode<any>[], {
        invalidator: import("@dojo/framework/core/interfaces").MiddlewareResultFactory<import("@dojo/framework/core/interfaces").WidgetProperties, import("@dojo/framework/core/interfaces").DNode<any>[], import("@dojo/framework/core/interfaces").MiddlewareMap<() => {
            api: {};
            properties: {};
        }>, () => void>;
        injector: import("@dojo/framework/core/interfaces").MiddlewareResultFactory<import("@dojo/framework/core/interfaces").WidgetProperties, import("@dojo/framework/core/interfaces").DNode<any>[], {
            getRegistry: import("@dojo/framework/core/interfaces").MiddlewareResultFactory<import("@dojo/framework/core/interfaces").WidgetProperties, import("@dojo/framework/core/interfaces").DNode<any>[], import("@dojo/framework/core/interfaces").MiddlewareMap<() => {
                api: {};
                properties: {};
            }>, () => import("@dojo/framework/core/RegistryHandler").RegistryHandler | null>;
            invalidator: import("@dojo/framework/core/interfaces").MiddlewareResultFactory<import("@dojo/framework/core/interfaces").WidgetProperties, import("@dojo/framework/core/interfaces").DNode<any>[], import("@dojo/framework/core/interfaces").MiddlewareMap<() => {
                api: {};
                properties: {};
            }>, () => void>;
            destroy: import("@dojo/framework/core/interfaces").MiddlewareResultFactory<import("@dojo/framework/core/interfaces").WidgetProperties, import("@dojo/framework/core/interfaces").DNode<any>[], import("@dojo/framework/core/interfaces").MiddlewareMap<() => {
                api: {};
                properties: {};
            }>, (destroyFunction: () => void) => void>;
        }, {
            subscribe(label: string | symbol, callback?: Function | undefined): (() => void) | undefined;
            get<T>(label: string | symbol): T | null;
        }>;
        getRegistry: import("@dojo/framework/core/interfaces").MiddlewareResultFactory<import("@dojo/framework/core/interfaces").WidgetProperties, import("@dojo/framework/core/interfaces").DNode<any>[], import("@dojo/framework/core/interfaces").MiddlewareMap<() => {
            api: {};
            properties: {};
        }>, () => import("@dojo/framework/core/RegistryHandler").RegistryHandler | null>;
        diffProperty: import("@dojo/framework/core/interfaces").MiddlewareResultFactory<import("@dojo/framework/core/interfaces").WidgetProperties, import("@dojo/framework/core/interfaces").DNode<any>[], import("@dojo/framework/core/interfaces").MiddlewareMap<() => {
            api: {};
            properties: {};
        }>, {
            <T extends (...args: any) => any, K extends keyof ReturnType<T>>(property: K, properties: T, diff: (current: ReturnType<T>, next: ReturnType<T>) => void | ReturnType<T>[K]): void;
            (propertyName: string, diff: (current: any, next: any) => void): void;
        }>;
    }, {
        localize<T extends import("@dojo/framework/i18n/i18n").Messages>(bundle: import("@dojo/framework/i18n/i18n").Bundle<T>): import("@dojo/framework/core/interfaces").LocalizedMessages<T>;
        set(localeData?: import("@dojo/framework/core/interfaces").LocaleData | undefined): void;
        get(): any;
    }>;
}, (rules: RequireAtLeastOne<LengthRule & ContainsRule, "length" | "contains">) => {
    (value: string): {
        valid: boolean;
        message: string;
    } | undefined;
    describe(): string[];
}>;
export default validation;
