/** * @license * Copyright Google LLC All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ import { booleanAttribute, OnChanges, Provider, SimpleChanges } from '@angular/core'; import { Observable } from 'rxjs'; import { AbstractControl } from '../model/abstract_model'; import * as i0 from "@angular/core"; /** * @description * Defines the map of errors returned from failed validation checks. * * @publicApi */ export type ValidationErrors = { [key: string]: any; }; /** * @description * An interface implemented by classes that perform synchronous validation. * * @usageNotes * * ### Provide a custom validator * * The following example implements the `Validator` interface to create a * validator directive with a custom error key. * * ```typescript * @Directive({ * selector: '[customValidator]', * providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}] * }) * class CustomValidatorDirective implements Validator { * validate(control: AbstractControl): ValidationErrors|null { * return {'custom': true}; * } * } * ``` * * @publicApi */ export interface Validator { /** * @description * Method that performs synchronous validation against the provided control. * * @param control The control to validate against. * * @returns A map of validation errors if validation fails, * otherwise null. */ validate(control: AbstractControl): ValidationErrors | null; /** * @description * Registers a callback function to call when the validator inputs change. * * @param fn The callback function */ registerOnValidatorChange?(fn: () => void): void; } /** * A base class for Validator-based Directives. The class contains common logic shared across such * Directives. * * For internal use only, this class is not intended for use outside of the Forms package. */ declare abstract class AbstractValidatorDirective implements Validator, OnChanges { private _validator; private _onChange; /** * A flag that tracks whether this validator is enabled. * * Marking it `internal` (vs `protected`), so that this flag can be used in host bindings of * directive classes that extend this base class. * @internal */ _enabled?: boolean; /** * Name of an input that matches directive selector attribute (e.g. `minlength` for * `MinLengthDirective`). An input with a given name might contain configuration information (like * `minlength='10'`) or a flag that indicates whether validator should be enabled (like * `[required]='false'`). * * @internal */ abstract inputName: string; /** * Creates an instance of a validator (specific to a directive that extends this base class). * * @internal */ abstract createValidator(input: unknown): ValidatorFn; /** * Performs the necessary input normalization based on a specific logic of a Directive. * For example, the function might be used to convert string-based representation of the * `minlength` input to an integer value that can later be used in the `Validators.minLength` * validator. * * @internal */ abstract normalizeInput(input: unknown): unknown; /** @nodoc */ ngOnChanges(changes: SimpleChanges): void; /** @nodoc */ validate(control: AbstractControl): ValidationErrors | null; /** @nodoc */ registerOnValidatorChange(fn: () => void): void; /** * @description * Determines whether this validator should be active or not based on an input. * Base class implementation checks whether an input is defined (if the value is different from * `null` and `undefined`). Validator classes that extend this base class can override this * function with the logic specific to a particular validator directive. */ enabled(input: unknown): boolean; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵdir: i0.ɵɵDirectiveDeclaration; } /** * @description * Provider which adds `MaxValidator` to the `NG_VALIDATORS` multi-provider list. */ export declare const MAX_VALIDATOR: Provider; /** * A directive which installs the {@link MaxValidator} for any `formControlName`, * `formControl`, or control with `ngModel` that also has a `max` attribute. * * @see [Form Validation](guide/form-validation) * * @usageNotes * * ### Adding a max validator * * The following example shows how to add a max validator to an input attached to an * ngModel binding. * * ```html * * ``` * * @ngModule ReactiveFormsModule * @ngModule FormsModule * @publicApi */ export declare class MaxValidator extends AbstractValidatorDirective { /** * @description * Tracks changes to the max bound to this directive. */ max: string | number | null; /** @internal */ inputName: string; /** @internal */ normalizeInput: (input: string | number) => number; /** @internal */ createValidator: (max: number) => ValidatorFn; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵdir: i0.ɵɵDirectiveDeclaration; } /** * @description * Provider which adds `MinValidator` to the `NG_VALIDATORS` multi-provider list. */ export declare const MIN_VALIDATOR: Provider; /** * A directive which installs the {@link MinValidator} for any `formControlName`, * `formControl`, or control with `ngModel` that also has a `min` attribute. * * @see [Form Validation](guide/form-validation) * * @usageNotes * * ### Adding a min validator * * The following example shows how to add a min validator to an input attached to an * ngModel binding. * * ```html * * ``` * * @ngModule ReactiveFormsModule * @ngModule FormsModule * @publicApi */ export declare class MinValidator extends AbstractValidatorDirective { /** * @description * Tracks changes to the min bound to this directive. */ min: string | number | null; /** @internal */ inputName: string; /** @internal */ normalizeInput: (input: string | number) => number; /** @internal */ createValidator: (min: number) => ValidatorFn; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵdir: i0.ɵɵDirectiveDeclaration; } /** * @description * An interface implemented by classes that perform asynchronous validation. * * @usageNotes * * ### Provide a custom async validator directive * * The following example implements the `AsyncValidator` interface to create an * async validator directive with a custom error key. * * ```typescript * import { of } from 'rxjs'; * * @Directive({ * selector: '[customAsyncValidator]', * providers: [{provide: NG_ASYNC_VALIDATORS, useExisting: CustomAsyncValidatorDirective, multi: * true}] * }) * class CustomAsyncValidatorDirective implements AsyncValidator { * validate(control: AbstractControl): Observable { * return of({'custom': true}); * } * } * ``` * * @publicApi */ export interface AsyncValidator extends Validator { /** * @description * Method that performs async validation against the provided control. * * @param control The control to validate against. * * @returns A promise or observable that resolves a map of validation errors * if validation fails, otherwise null. */ validate(control: AbstractControl): Promise | Observable; } /** * @description * Provider which adds `RequiredValidator` to the `NG_VALIDATORS` multi-provider list. */ export declare const REQUIRED_VALIDATOR: Provider; /** * @description * Provider which adds `CheckboxRequiredValidator` to the `NG_VALIDATORS` multi-provider list. */ export declare const CHECKBOX_REQUIRED_VALIDATOR: Provider; /** * @description * A directive that adds the `required` validator to any controls marked with the * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list. * * @see [Form Validation](guide/form-validation) * * @usageNotes * * ### Adding a required validator using template-driven forms * * ``` * * ``` * * @ngModule FormsModule * @ngModule ReactiveFormsModule * @publicApi */ export declare class RequiredValidator extends AbstractValidatorDirective { /** * @description * Tracks changes to the required attribute bound to this directive. */ required: boolean | string; /** @internal */ inputName: string; /** @internal */ normalizeInput: typeof booleanAttribute; /** @internal */ createValidator: (input: boolean) => ValidatorFn; /** @nodoc */ enabled(input: boolean): boolean; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵdir: i0.ɵɵDirectiveDeclaration; } /** * A Directive that adds the `required` validator to checkbox controls marked with the * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list. * * @see [Form Validation](guide/form-validation) * * @usageNotes * * ### Adding a required checkbox validator using template-driven forms * * The following example shows how to add a checkbox required validator to an input attached to an * ngModel binding. * * ``` * * ``` * * @publicApi * @ngModule FormsModule * @ngModule ReactiveFormsModule */ export declare class CheckboxRequiredValidator extends RequiredValidator { /** @internal */ createValidator: (input: unknown) => ValidatorFn; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵdir: i0.ɵɵDirectiveDeclaration; } /** * @description * Provider which adds `EmailValidator` to the `NG_VALIDATORS` multi-provider list. */ export declare const EMAIL_VALIDATOR: any; /** * A directive that adds the `email` validator to controls marked with the * `email` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list. * * The email validation is based on the WHATWG HTML specification with some enhancements to * incorporate more RFC rules. More information can be found on the [Validators.email * page](api/forms/Validators#email). * * @see [Form Validation](guide/form-validation) * * @usageNotes * * ### Adding an email validator * * The following example shows how to add an email validator to an input attached to an ngModel * binding. * * ``` * * * * ``` * * @publicApi * @ngModule FormsModule * @ngModule ReactiveFormsModule */ export declare class EmailValidator extends AbstractValidatorDirective { /** * @description * Tracks changes to the email attribute bound to this directive. */ email: boolean | string; /** @internal */ inputName: string; /** @internal */ normalizeInput: typeof booleanAttribute; /** @internal */ createValidator: (input: number) => ValidatorFn; /** @nodoc */ enabled(input: boolean): boolean; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵdir: i0.ɵɵDirectiveDeclaration; } /** * @description * A function that receives a control and synchronously returns a map of * validation errors if present, otherwise null. * * @publicApi */ export interface ValidatorFn { (control: AbstractControl): ValidationErrors | null; } /** * @description * A function that receives a control and returns a Promise or observable * that emits validation errors if present, otherwise null. * * @publicApi */ export interface AsyncValidatorFn { (control: AbstractControl): Promise | Observable; } /** * @description * Provider which adds `MinLengthValidator` to the `NG_VALIDATORS` multi-provider list. */ export declare const MIN_LENGTH_VALIDATOR: any; /** * A directive that adds minimum length validation to controls marked with the * `minlength` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list. * * @see [Form Validation](guide/form-validation) * * @usageNotes * * ### Adding a minimum length validator * * The following example shows how to add a minimum length validator to an input attached to an * ngModel binding. * * ```html * * ``` * * @ngModule ReactiveFormsModule * @ngModule FormsModule * @publicApi */ export declare class MinLengthValidator extends AbstractValidatorDirective { /** * @description * Tracks changes to the minimum length bound to this directive. */ minlength: string | number | null; /** @internal */ inputName: string; /** @internal */ normalizeInput: (input: string | number) => number; /** @internal */ createValidator: (minlength: number) => ValidatorFn; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵdir: i0.ɵɵDirectiveDeclaration; } /** * @description * Provider which adds `MaxLengthValidator` to the `NG_VALIDATORS` multi-provider list. */ export declare const MAX_LENGTH_VALIDATOR: any; /** * A directive that adds maximum length validation to controls marked with the * `maxlength` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list. * * @see [Form Validation](guide/form-validation) * * @usageNotes * * ### Adding a maximum length validator * * The following example shows how to add a maximum length validator to an input attached to an * ngModel binding. * * ```html * * ``` * * @ngModule ReactiveFormsModule * @ngModule FormsModule * @publicApi */ export declare class MaxLengthValidator extends AbstractValidatorDirective { /** * @description * Tracks changes to the maximum length bound to this directive. */ maxlength: string | number | null; /** @internal */ inputName: string; /** @internal */ normalizeInput: (input: string | number) => number; /** @internal */ createValidator: (maxlength: number) => ValidatorFn; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵdir: i0.ɵɵDirectiveDeclaration; } /** * @description * Provider which adds `PatternValidator` to the `NG_VALIDATORS` multi-provider list. */ export declare const PATTERN_VALIDATOR: any; /** * @description * A directive that adds regex pattern validation to controls marked with the * `pattern` attribute. The regex must match the entire control value. * The directive is provided with the `NG_VALIDATORS` multi-provider list. * * @see [Form Validation](guide/form-validation) * * @usageNotes * * ### Adding a pattern validator * * The following example shows how to add a pattern validator to an input attached to an * ngModel binding. * * ```html * * ``` * * @ngModule ReactiveFormsModule * @ngModule FormsModule * @publicApi */ export declare class PatternValidator extends AbstractValidatorDirective { /** * @description * Tracks changes to the pattern bound to this directive. */ pattern: string | RegExp; /** @internal */ inputName: string; /** @internal */ normalizeInput: (input: string | RegExp) => string | RegExp; /** @internal */ createValidator: (input: string | RegExp) => ValidatorFn; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵdir: i0.ɵɵDirectiveDeclaration; } export {}; declare const AbstractValidatorDirective_Listeners:[]; declare const AbstractValidatorDirective_Properties:[]; declare const MaxValidator_Listeners:[]; declare const MaxValidator_Properties:["attr.max"]; declare const MinValidator_Listeners:[]; declare const MinValidator_Properties:["attr.min"]; declare const RequiredValidator_Listeners:[]; declare const RequiredValidator_Properties:["attr.required"]; declare const CheckboxRequiredValidator_Listeners:[]; declare const CheckboxRequiredValidator_Properties:["attr.required"]; declare const EmailValidator_Listeners:[]; declare const EmailValidator_Properties:[]; declare const MinLengthValidator_Listeners:[]; declare const MinLengthValidator_Properties:["attr.minlength"]; declare const MaxLengthValidator_Listeners:[]; declare const MaxLengthValidator_Properties:["attr.maxlength"]; declare const PatternValidator_Listeners:[]; declare const PatternValidator_Properties:["attr.pattern"];