angular-reactive-validation
Version:
Reactive Forms validation shouldn't require the developer to write lots of HTML to show validation messages. This library makes it easy.
1 lines • 46 kB
Source Map (JSON)
{"version":3,"file":"angular-reactive-validation.mjs","sources":["../../../projects/angular-reactive-validation/src/lib/form/form.directive.ts","../../../projects/angular-reactive-validation/src/lib/get-form-control-from-container.ts","../../../projects/angular-reactive-validation/src/lib/validation-message/validation-message.component.ts","../../../projects/angular-reactive-validation/src/lib/validation-message/validation-message.component.html","../../../projects/angular-reactive-validation/src/lib/validation-error.ts","../../../projects/angular-reactive-validation/src/lib/reactive-validation-module-configuration-token.ts","../../../projects/angular-reactive-validation/src/lib/get-control-path.ts","../../../projects/angular-reactive-validation/src/lib/validation-messages/validation-messages.component.ts","../../../projects/angular-reactive-validation/src/lib/validation-messages/validation-messages.component.html","../../../projects/angular-reactive-validation/src/lib/reactive-validation.module.ts","../../../projects/angular-reactive-validation/src/lib/validator-declaration.ts","../../../projects/angular-reactive-validation/src/lib/validators.ts","../../../projects/angular-reactive-validation/src/angular-reactive-validation.ts"],"sourcesContent":["import { Directive } from '@angular/core';\nimport { FormGroupDirective } from '@angular/forms';\nimport { Observable } from 'rxjs';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'form[formGroup]'\n})\n/**\n * Encapsulates properties and events of the form and makes them available for child components.\n */\nexport class FormDirective {\n /**\n * Observable which emits when the form is submitted.\n */\n submitted: Observable<any>;\n\n constructor(formGroupDirective: FormGroupDirective) {\n this.submitted = formGroupDirective.ngSubmit.asObservable();\n }\n}\n","import { UntypedFormGroup, UntypedFormControl, ControlContainer, FormGroupDirective } from '@angular/forms';\n\nexport const getFormControlFromContainer = (name: string, controlContainer: ControlContainer | undefined): UntypedFormControl => {\n if (controlContainer) {\n const control = (controlContainer.control as UntypedFormGroup).controls[name];\n if (!control) {\n throw new Error(`There is no control named '${name}'` +\n (getPath(controlContainer).length > 0 ? ` within '${getPath(controlContainer).join('.')}'` : '') + '.');\n }\n if (!(control instanceof UntypedFormControl)) {\n throw new Error(`The control named '${name}' ` +\n (getPath(controlContainer).length > 0 ? `within '${getPath(controlContainer).join('.')}' ` : '') +\n `is not a FormControl. Maybe you accidentally referenced a FormGroup or FormArray?`);\n }\n\n return control;\n } else {\n throw new Error(`You can't pass a string to arv-validation-messages's for attribute, when the ` +\n `arv-validation-messages element is not a child of an element with a formGroupName or formGroup declaration.`);\n }\n};\n\nexport const isControlContainerVoidOrInitialized = (controlContainer: ControlContainer | undefined) =>\n!!(!controlContainer || (controlContainer as FormGroupDirective).form ||\n (controlContainer.formDirective && (controlContainer.formDirective as FormGroupDirective).form));\n\nconst getPath = (controlContainer: ControlContainer): string[] => controlContainer.path || [];\n","import { Component, Input, ViewEncapsulation, Optional, OnInit } from '@angular/core';\nimport { UntypedFormControl, ValidationErrors, ControlContainer } from '@angular/forms';\n\nimport { ValidationError } from '../validation-error';\nimport { getFormControlFromContainer, isControlContainerVoidOrInitialized } from '../get-form-control-from-container';\n\n@Component({\n selector: 'arv-validation-message',\n templateUrl: './validation-message.component.html',\n encapsulation: ViewEncapsulation.None\n})\n/**\n * The ValidationMessageComponent lets the developer specify a custom visual style and custom error message\n * for edge-cases where the standard style or message capabilities do not suffice.\n *\n * TODO: Trigger revalidation by parent whenever [for] changes.\n */\nexport class ValidationMessageComponent implements OnInit {\n\n @Input()\n /**\n * The FormControl for which a custom validation message should be shown. This is only required when the parent\n * ValidationMessagesComponent has multiple FormControls specified.\n */\n set for(control: UntypedFormControl | string | undefined) {\n if (!isControlContainerVoidOrInitialized(this.controlContainer)) {\n this.initializeForOnInit = () => this.for = control;\n return;\n }\n this._for = typeof control === 'string' ? getFormControlFromContainer(control, this.controlContainer) : control;\n }\n get for(): UntypedFormControl | string | undefined {\n return this._for;\n }\n\n @Input()\n /**\n * The name of the returned validation object property for which the custom validation message should be shown.\n */\n key: string | undefined;\n\n private _context: ValidationErrors | undefined;\n private _for: UntypedFormControl | undefined;\n\n constructor(@Optional() private controlContainer: ControlContainer) { }\n\n ngOnInit() {\n this.initializeForOnInit();\n }\n\n canHandle(error: ValidationError) {\n return (!this.for || error.control === this.for) && error.key === this.key;\n }\n\n show(error: ValidationError) {\n this._context = error.errorObject;\n }\n\n reset() {\n this._context = undefined;\n }\n\n private initializeForOnInit = () => {};\n\n /**\n * The ValidationErrors object that contains contextual information about the error, which can be used for\n * displaying, e.g. the minimum length within the error message.\n */\n get context(): any {\n return this._context;\n }\n}\n","<div *ngIf=\"context\">\n <ng-content></ng-content>\n</div>\n","import { UntypedFormControl, ValidationErrors } from '@angular/forms';\n\nexport class ValidationError {\n control: UntypedFormControl;\n key: string;\n errorObject: ValidationErrors;\n\n constructor(control: UntypedFormControl, key: string, errorObject: ValidationErrors) {\n this.control = control;\n this.key = key;\n this.errorObject = errorObject;\n }\n\n static fromFirstError(control: UntypedFormControl): ValidationError | undefined {\n if (!control.errors) {\n return undefined;\n }\n\n return new ValidationError(control, Object.keys(control.errors)[0], control.errors[Object.keys(control.errors)[0]]);\n }\n\n hasMessage(): boolean {\n return !!this.getMessage();\n }\n\n getMessage() {\n return this.errorObject['message'];\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { ReactiveValidationModuleConfiguration } from './reactive-validation-module-configuration';\n\nexport const REACTIVE_VALIDATION_MODULE_CONFIGURATION_TOKEN =\n new InjectionToken<ReactiveValidationModuleConfiguration>('ReactiveValidationModuleConfiguration');\n","import { AbstractControl } from '@angular/forms';\n\n/**\n * Given a control, returns a string representation of the property path to\n * this control. Thus, for a FormControl 'firstName', that is part of a\n * FormGroup named 'name', this function will return: 'name.firstName'.\n *\n * Note that FormArray indexes are also put in the path, e.g.: 'person.0.name.firstName'.\n */\nexport const getControlPath = (control: AbstractControl): string => {\n const parentControl = control.parent;\n if (parentControl) {\n let path = getControlPath(parentControl);\n if (path) {\n path += '.';\n }\n return path + Object.keys(parentControl.controls).find(key => {\n const controls = parentControl.controls;\n if (Array.isArray(controls)) {\n return controls[Number(key)] === control;\n } else {\n return controls[key] === control;\n }\n });\n }\n\n return '';\n};\n","import { Component, ContentChildren, QueryList, Input, ViewEncapsulation, AfterContentInit,\n OnDestroy, Optional, Inject, OnInit } from '@angular/core';\nimport { UntypedFormControl, ControlContainer } from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nimport { ValidationMessageComponent } from '../validation-message/validation-message.component';\nimport { ValidationError } from '../validation-error';\nimport { getFormControlFromContainer, isControlContainerVoidOrInitialized } from '../get-form-control-from-container';\nimport { FormDirective } from '../form/form.directive';\nimport { ReactiveValidationModuleConfiguration } from '../reactive-validation-module-configuration';\nimport { REACTIVE_VALIDATION_MODULE_CONFIGURATION_TOKEN } from '../reactive-validation-module-configuration-token';\nimport { getControlPath } from '../get-control-path';\n\n@Component({\n selector: 'arv-validation-messages',\n templateUrl: './validation-messages.component.html',\n encapsulation: ViewEncapsulation.None\n})\n/**\n * The ValidationMessagesComponent shows validation messages for one to many FormControls. It either shows\n * messages specified within the reactive form model, or shows custom messages declared using the\n * ValidationMessageComponent.\n */\nexport class ValidationMessagesComponent implements AfterContentInit, OnDestroy, OnInit {\n @ContentChildren(ValidationMessageComponent) private messageComponents: QueryList<ValidationMessageComponent> | undefined;\n\n private _for: UntypedFormControl[] = [];\n private messageComponentsChangesSubscription = new Subscription();\n private controlStatusChangesSubscription = new Subscription();\n\n private formSubmitted: boolean | undefined = undefined;\n private formSubmittedSubscription = new Subscription();\n\n constructor(@Optional() private controlContainer: ControlContainer, @Optional() formSubmitDirective: FormDirective,\n @Optional() @Inject(REACTIVE_VALIDATION_MODULE_CONFIGURATION_TOKEN) private configuration: ReactiveValidationModuleConfiguration) {\n if (formSubmitDirective) {\n this.formSubmitted = false;\n this.formSubmittedSubscription.add(formSubmitDirective.submitted.subscribe(() => {\n this.formSubmitted = true;\n }));\n }\n }\n\n ngOnInit() {\n this.initializeForOnInit();\n }\n\n ngAfterContentInit() {\n this.messageComponentsChangesSubscription.add(this.messageComponents?.changes.subscribe(this.validateChildren));\n this.validateChildren();\n\n this._for.forEach(control => {\n this.handleControlStatusChange(control);\n });\n }\n\n ngOnDestroy() {\n this.messageComponentsChangesSubscription.unsubscribe();\n this.formSubmittedSubscription.unsubscribe();\n this.controlStatusChangesSubscription.unsubscribe();\n }\n\n isValid(): boolean {\n return this.getFirstErrorPerControl().length === 0;\n }\n\n getErrorMessages(): string[] {\n return this.getFirstErrorPerControl().filter(error => error.hasMessage())\n .map(error => error.getMessage());\n }\n\n private initializeForOnInit = () => {};\n\n @Input()\n set for(controls: UntypedFormControl | (UntypedFormControl|string)[] | string) {\n if (!isControlContainerVoidOrInitialized(this.controlContainer)) {\n this.initializeForOnInit = () => this.for = controls;\n return;\n }\n\n if (!Array.isArray(controls)) {\n controls = controls !== undefined ? [controls] : [];\n }\n\n if (controls.length === 0) {\n throw new Error(`arv-validation-messages doesn't allow declaring an empty array as input to the 'for' attribute.`);\n }\n\n this._for = controls.map(control => typeof control === 'string' ?\n getFormControlFromContainer(control, this.controlContainer) : control);\n\n this.validateChildren();\n\n this.controlStatusChangesSubscription.unsubscribe();\n this.controlStatusChangesSubscription = new Subscription();\n this._for.forEach(control => {\n this.controlStatusChangesSubscription.add(control.statusChanges.subscribe(() => {\n this.handleControlStatusChange(control);\n }));\n });\n }\n\n\n\n private getFirstErrorPerControl() {\n return this._for.filter(control => this.configuration && this.configuration.displayValidationMessageWhen ?\n this.configuration.displayValidationMessageWhen(control, this.formSubmitted) : control.touched || this.formSubmitted\n ).map(ValidationError.fromFirstError).filter(value => value !== undefined) as ValidationError[];\n }\n\n /**\n * Validates that the child ValidationMessageComponents declare what FormControl they specify a message for (when needed); and\n * that the declared FormControl is actually part of the parent ValidationMessagesComponent 'for' collection (when specified).\n */\n private validateChildren() {\n if (!this.messageComponents) {\n return;\n }\n\n this.messageComponents.forEach(component => {\n if (this._for.length > 1 && component.for === undefined) {\n throw new Error(`Specify the FormControl for which the arv-validation-message element with key '${component.key}' ` +\n `should show messages.`);\n }\n if (component.for && this._for.indexOf(component.for as UntypedFormControl) === -1) {\n throw new Error(`A arv-validation-messages element with key '${component.key}' attempts to show messages ` +\n `for a FormControl that is not declared in the parent arv-validation-messages element.`);\n }\n });\n }\n\n private handleControlStatusChange(control: UntypedFormControl) {\n if (!this.messageComponents) {\n return;\n }\n\n this.messageComponents.filter(component => component.for === control || component.for === undefined)\n .forEach(component => component.reset());\n\n const error = ValidationError.fromFirstError(control);\n if (!error || error.hasMessage()) {\n return;\n }\n\n const messageComponent = this.messageComponents.find(component => component.canHandle(error));\n\n if (messageComponent) {\n messageComponent.show(error);\n } else {\n throw new Error(`There is no suitable arv-validation-message element to show the '${error.key}' ` +\n `error of '${getControlPath(error.control)}'`);\n }\n }\n}\n","<div *ngIf=\"!isValid()\">\n <div class=\"invalid-feedback\">\n <p *ngFor=\"let message of getErrorMessages()\">{{message}}</p>\n </div>\n <ng-content></ng-content>\n</div>\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ValidationMessagesComponent } from './validation-messages/validation-messages.component';\nimport { ValidationMessageComponent } from './validation-message/validation-message.component';\nimport { FormDirective } from './form/form.directive';\nimport { ReactiveValidationModuleConfiguration } from './reactive-validation-module-configuration';\nimport { REACTIVE_VALIDATION_MODULE_CONFIGURATION_TOKEN } from './reactive-validation-module-configuration-token';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [\n ValidationMessagesComponent,\n ValidationMessageComponent,\n FormDirective\n ],\n exports: [\n ValidationMessagesComponent,\n ValidationMessageComponent,\n FormDirective\n ]\n})\nexport class ReactiveValidationModule {\n static forRoot(configuration?: ReactiveValidationModuleConfiguration): ModuleWithProviders<ReactiveValidationModule> {\n return {\n ngModule: ReactiveValidationModule,\n providers: [{\n provide: REACTIVE_VALIDATION_MODULE_CONFIGURATION_TOKEN, useValue: configuration\n }]\n };\n }\n}\n","import { ValidatorFn, ValidationErrors, AbstractControl } from '@angular/forms';\n\n/**\n * @dynamic\n */\nexport class ValidatorDeclaration {\n /**\n * Wraps your own validator functions for use with the angular-reactive-validation library.\n *\n * @param validatorFn A function you want to wrap which can validate a control.\n * @param resultKey The error key used for indicating an error result as returned from the ValidatorFn.\n */\n static wrapNoArgumentValidator(validatorFn: ValidatorFn, resultKey: string):\n (message?: string | (() => string)) => ValidatorFn {\n return (message?: string | (() => string)): ValidatorFn => (control: AbstractControl): ValidationErrors | null =>\n ValidatorDeclaration.validateAndSetMessageIfInvalid(control, () => validatorFn, resultKey, message);\n }\n\n /**\n * Wraps your own validator functions for use with the angular-reactive-validation library.\n *\n * @param validatorFactoryFn A function which accepts a single argument and returns a ValidatorFn.\n * @param resultKey The error key used for indicating an error result as returned from the ValidatorFn.\n */\n static wrapSingleArgumentValidator<TInput>(validatorFactoryFn: ((arg1: TInput) => ValidatorFn), resultKey: string):\n (arg1: TInput | (() => TInput), message?: string | ((arg1: TInput) => string)) => ValidatorFn {\n\n return (arg1: TInput | (() => TInput), message?: string | ((arg1: TInput) => string)): ValidatorFn =>\n (control: AbstractControl): ValidationErrors | null => {\n const unwrappedArg1 = ValidatorDeclaration.unwrapArgument(arg1);\n\n return ValidatorDeclaration.validateAndSetMessageIfInvalid(control, validatorFactoryFn, resultKey, message, unwrappedArg1);\n };\n }\n\n /**\n * Wraps your own validator functions for use with the angular-reactive-validation library.\n *\n * @param validatorFactoryFn A function which accepts two arguments and returns a ValidatorFn.\n * @param resultKey The error key used for indicating an error result as returned from the ValidatorFn.\n */\n static wrapTwoArgumentValidator<TInput1, TInput2>(validatorFactoryFn: ((arg1: TInput1, arg2: TInput2) => ValidatorFn), resultKey: string):\n (arg1: TInput1 | (() => TInput1), arg2: TInput2 | (() => TInput2), message?: string | ((arg1: TInput1, arg2: TInput2) => string)) =>\n ValidatorFn {\n\n return (arg1: TInput1 | (() => TInput1), arg2: TInput2 | (() => TInput2),\n message?: string | ((arg1: TInput1, arg2: TInput2) => string)): ValidatorFn =>\n (control: AbstractControl): ValidationErrors | null => {\n const unwrappedArg1 = ValidatorDeclaration.unwrapArgument(arg1);\n const unwrappedArg2 = ValidatorDeclaration.unwrapArgument(arg2);\n\n return ValidatorDeclaration.validateAndSetMessageIfInvalid(control, validatorFactoryFn, resultKey, message,\n unwrappedArg1, unwrappedArg2);\n };\n }\n\n private static unwrapArgument<T>(arg: T | (() => T)): T {\n if (arg instanceof Function) {\n arg = arg();\n }\n\n return arg;\n }\n\n private static validateAndSetMessageIfInvalid(control: AbstractControl,\n // eslint-disable-next-line @typescript-eslint/no-shadow\n validatorFactoryFn: (...args: any[]) => ValidatorFn, resultKey: string,\n // eslint-disable-next-line @typescript-eslint/no-shadow\n message?: string | ((...args: any[]) => string), ...args: any[]): ValidationErrors | null {\n\n const validationResult = ValidatorDeclaration.validate(control, validatorFactoryFn, ...args);\n ValidatorDeclaration.setMessageIfInvalid(control, resultKey, validationResult, message, ...args);\n\n return validationResult;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n private static validate(control: AbstractControl, validatorFactoryFn: (...args: any[]) => ValidatorFn, ...args: any[]):\n ValidationErrors | null {\n\n const wrappedValidatorFn = validatorFactoryFn(...args);\n return wrappedValidatorFn(control);\n }\n\n private static setMessageIfInvalid(control: AbstractControl, resultKey: string,\n // eslint-disable-next-line @typescript-eslint/no-shadow\n validationResult: ValidationErrors | null, message?: string | ((...args: any[]) => string), ...args: any[]) {\n if (message) {\n if (validationResult && validationResult[resultKey]) {\n if (typeof message === 'function') {\n message = message(...args);\n }\n\n // Not all validators set an object. Often they'll simply set a property to true.\n // Here, we replace any non-object (or array) to be an object on which we can set a message.\n if (!ValidatorDeclaration.isObject(validationResult[resultKey])) {\n validationResult[resultKey] = {};\n }\n\n validationResult[resultKey]['message'] = message;\n }\n }\n }\n\n private static isObject(arg: any) {\n return arg !== null && typeof arg === 'object' && !Array.isArray(arg);\n }\n}\n","import { Validators as AngularValidators, ValidatorFn } from '@angular/forms';\n\nimport { ValidatorDeclaration } from './validator-declaration';\n\n/**\n * Provides a set of validators used by form controls.\n *\n * Code comments have been copied from the Angular source code.\n */\nexport class Validators {\n/**\n * No-op validator.\n */\n static nullValidator = AngularValidators.nullValidator;\n static composeAsync = AngularValidators.composeAsync;\n\n private static minValidator = ValidatorDeclaration.wrapSingleArgumentValidator(AngularValidators.min, 'min');\n private static maxValidator = ValidatorDeclaration.wrapSingleArgumentValidator(AngularValidators.max, 'max');\n private static minLengthValidator = ValidatorDeclaration.wrapSingleArgumentValidator(AngularValidators.minLength, 'minlength');\n private static maxLengthValidator = ValidatorDeclaration.wrapSingleArgumentValidator(AngularValidators.maxLength, 'maxlength');\n private static patternValidator = ValidatorDeclaration.wrapSingleArgumentValidator(AngularValidators.pattern, 'pattern');\n private static requiredValidator = ValidatorDeclaration.wrapNoArgumentValidator(AngularValidators.required, 'required');\n private static requiredTrueValidator = ValidatorDeclaration.wrapNoArgumentValidator(AngularValidators.requiredTrue, 'required');\n private static emailValidator = ValidatorDeclaration.wrapNoArgumentValidator(AngularValidators.email, 'email');\n\n /**\n * Compose multiple validators into a single function that returns the union\n * of the individual error maps.\n */\n static compose(validators: null): null;\n /**\n * Compose multiple validators into a single function that returns the union\n * of the individual error maps.\n */\n static compose(validators: (ValidatorFn|null|undefined)[]): ValidatorFn|null;\n static compose(validators: (ValidatorFn|null|undefined)[]|null): ValidatorFn|null {\n return validators === null ? AngularValidators.compose(validators) : AngularValidators.compose(validators);\n }\n\n /**\n * Validator that requires controls to have a value greater than or equal to a number.\n * Note: when using this function without specifying a message, you have to declare an\n * arv-validation-message element in the HTML with a custom message.\n */\n static min(min: number): ValidatorFn;\n /**\n * Validator that requires controls to have a value greater than or equal to a number.\n */\n static min(min: number, message: string): ValidatorFn;\n /**\n * Validator that requires controls to have a value greater than or equal to a number.\n * Note: when using this function without specifying a message, you have to declare an\n * arv-validation-message element in the HTML with a custom message.\n */\n static min(min: () => number): ValidatorFn;\n /**\n * Validator that requires controls to have a value greater than or equal to a number.\n */\n static min(min: () => number, message: string): ValidatorFn;\n /**\n * Validator that requires controls to have a value greater than or equal to a number.\n */\n static min(min: number, messageFunc: ((min: number) => string)): ValidatorFn;\n /**\n * Validator that requires controls to have a value greater than or equal to a number.\n */\n static min(min: () => number, messageFunc: ((min: number) => string)): ValidatorFn;\n static min(min: number | (() => number), message?: string | ((min: number) => string)): ValidatorFn {\n return Validators.minValidator(min, message);\n }\n\n /**\n * Validator that requires controls to have a value less than or equal to a number.\n * Note: when using this function without specifying a message, you have to declare an\n * arv-validation-message element in the HTML with a custom message.\n */\n static max(max: number): ValidatorFn;\n /**\n * Validator that requires controls to have a value less than or equal to a number.\n */\n static max(max: number, message: string): ValidatorFn;\n /**\n * Validator that requires controls to have a value less than or equal to a number.\n * Note: when using this function without specifying a message, you have to declare an\n * arv-validation-message element in the HTML with a custom message.\n */\n static max(max: () => number): ValidatorFn;\n /**\n * Validator that requires controls to have a value less than or equal to a number.\n */\n static max(max: () => number, message: string): ValidatorFn;\n /**\n * Validator that requires controls to have a value less than or equal to a number.\n */\n static max(max: number, messageFunc: ((max: number) => string)): ValidatorFn;\n /**\n * Validator that requires controls to have a value less than or equal to a number.\n */\n static max(max: () => number, messageFunc: ((max: number) => string)): ValidatorFn;\n static max(max: number | (() => number), message?: string | ((max: number) => string)): ValidatorFn {\n return Validators.maxValidator(max, message);\n }\n\n /**\n * Validator that requires controls to have a value of a minimum length.\n * Note: when using this function without specifying a message, you have to declare an\n * arv-validation-message element in the HTML with a custom message.\n */\n static minLength(minLength: number): ValidatorFn;\n /**\n * Validator that requires controls to have a value of a minimum length.\n */\n static minLength(minLength: number, message: string): ValidatorFn;\n /**\n * Validator that requires controls to have a value of a minimum length.\n * Note: when using this function without specifying a message, you have to declare an\n * arv-validation-message element in the HTML with a custom message.\n */\n static minLength(minLength: () => number): ValidatorFn;\n /**\n * Validator that requires controls to have a value of a minimum length.\n */\n static minLength(minLength: () => number, message: string): ValidatorFn;\n /**\n * Validator that requires controls to have a value of a minimum length.\n */\n static minLength(minLength: number, messageFunc: ((minLength: number) => string)): ValidatorFn;\n /**\n * Validator that requires controls to have a value of a minimum length.\n */\n static minLength(minLength: () => number, messageFunc: ((minLength: number) => string)): ValidatorFn;\n static minLength(minLength: number | (() => number), message?: string | ((minLength: number) => string)): ValidatorFn {\n return Validators.minLengthValidator(minLength, message);\n }\n\n /**\n * Validator that requires controls to have a value of a maximum length.\n * Note: when using this function without specifying a message, you have to declare an\n * arv-validation-message element in the HTML with a custom message.\n */\n static maxLength(maxLength: number): ValidatorFn;\n /**\n * Validator that requires controls to have a value of a maximum length.\n */\n static maxLength(maxLength: number, message: string): ValidatorFn;\n /**\n * Validator that requires controls to have a value of a maximum length.\n * Note: when using this function without specifying a message, you have to declare an\n * arv-validation-message element in the HTML with a custom message.\n */\n static maxLength(maxLength: () => number): ValidatorFn;\n /**\n * Validator that requires controls to have a value of a maximum length.\n */\n static maxLength(maxLength: () => number, message: string): ValidatorFn;\n /**\n * Validator that requires controls to have a value of a maximum length.\n */\n static maxLength(maxLength: number, messageFunc: ((maxLength: number) => string)): ValidatorFn;\n /**\n * Validator that requires controls to have a value of a maximum length.\n */\n static maxLength(maxLength: () => number, messageFunc: ((maxLength: number) => string)): ValidatorFn;\n static maxLength(maxLength: number | (() => number), message?: string | ((maxLength: number) => string)): ValidatorFn {\n return Validators.maxLengthValidator(maxLength, message);\n }\n\n /**\n * Validator that requires a control to match a regex to its value.\n * Note: when using this function without specifying a message, you have to declare an\n * arv-validation-message element in the HTML with a custom message.\n */\n static pattern(pattern: string|RegExp): ValidatorFn;\n /**\n * Validator that requires a control to match a regex to its value.\n */\n static pattern(pattern: string|RegExp, message: string): ValidatorFn;\n /**\n * Validator that requires a control to match a regex to its value.\n * Note: when using this function without specifying a message, you have to declare an\n * arv-validation-message element in the HTML with a custom message.\n */\n static pattern(pattern: () => string|RegExp): ValidatorFn;\n /**\n * Validator that requires a control to match a regex to its value.\n */\n static pattern(pattern: () => string|RegExp, message: string): ValidatorFn;\n static pattern(pattern: (string|RegExp) | (() => string|RegExp), message?: string): ValidatorFn {\n return Validators.patternValidator(pattern, message);\n }\n\n /**\n * Validator that requires controls to have a non-empty value.\n * Note: when using this function without specifying a message, you have to declare an\n * arv-validation-message element in the HTML with a custom message.\n */\n static required(): ValidatorFn;\n /**\n * Validator that requires controls to have a non-empty value.\n */\n static required(message: string): ValidatorFn;\n static required(message?: string): ValidatorFn {\n return Validators.requiredValidator(message);\n }\n\n /**\n * Validator that requires control value to be true.\n * Note: when using this function without specifying a message, you have to declare an\n * arv-validation-message element in the HTML with a custom message.\n */\n static requiredTrue(): ValidatorFn;\n /**\n * Validator that requires control value to be true.\n */\n static requiredTrue(message: string): ValidatorFn;\n static requiredTrue(message?: string): ValidatorFn {\n return Validators.requiredTrueValidator(message);\n }\n\n /**\n * Validator that performs email validation.\n * Note: when using this function without specifying a message, you have to declare an\n * arv-validation-message element in the HTML with a custom message.\n */\n static email(): ValidatorFn;\n /**\n * Validator that performs email validation.\n */\n static email(message: string): ValidatorFn;\n static email(message?: string): ValidatorFn {\n return Validators.emailValidator(message);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","AngularValidators"],"mappings":";;;;;;;;AAQA;;AAEG;MACU,aAAa,CAAA;AAMxB,IAAA,WAAA,CAAY,kBAAsC,EAAA;QAChD,IAAI,CAAC,SAAS,GAAG,kBAAkB,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;KAC7D;8GARU,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAb,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAPzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAET,oBAAA,QAAQ,EAAE,iBAAiB;AAC5B,iBAAA,CAAA;;;ACLM,MAAM,2BAA2B,GAAG,CAAC,IAAY,EAAE,gBAA8C,KAAwB;IAC9H,IAAI,gBAAgB,EAAE;QACpB,MAAM,OAAO,GAAI,gBAAgB,CAAC,OAA4B,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9E,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,2BAAA,EAA8B,IAAI,CAAG,CAAA,CAAA;AACnD,iBAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAA,SAAA,EAAY,OAAO,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAG,CAAA,CAAA,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;SAC3G;AACD,QAAA,IAAI,EAAE,OAAO,YAAY,kBAAkB,CAAC,EAAE;AAC5C,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,IAAI,CAAI,EAAA,CAAA;iBAC3C,OAAO,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAW,QAAA,EAAA,OAAO,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAA,CAAI,GAAG,EAAE,CAAC;AAChG,gBAAA,CAAA,iFAAA,CAAmF,CAAC,CAAC;SACxF;AAED,QAAA,OAAO,OAAO,CAAC;KAChB;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,CAA+E,6EAAA,CAAA;AAC7F,YAAA,CAAA,2GAAA,CAA6G,CAAC,CAAC;KAClH;AACH,CAAC,CAAC;AAEK,MAAM,mCAAmC,GAAG,CAAC,gBAA8C,KAClG,CAAC,EAAE,CAAC,gBAAgB,IAAK,gBAAuC,CAAC,IAAI;KAChE,gBAAgB,CAAC,aAAa,IAAK,gBAAgB,CAAC,aAAoC,CAAC,IAAI,CAAC,CAAC,CAAC;AAErG,MAAM,OAAO,GAAG,CAAC,gBAAkC,KAAe,gBAAgB,CAAC,IAAI,IAAI,EAAE;;ACf7F;;;;;AAKG;MACU,0BAA0B,CAAA;IAErC,IAKI,GAAG,CAAC,OAAgD,EAAA;QACtD,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;YAC/D,IAAI,CAAC,mBAAmB,GAAG,MAAM,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC;YACpD,OAAO;SACR;QACD,IAAI,CAAC,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,GAAG,2BAA2B,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC;KACjH;AACD,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;AAWD,IAAA,WAAA,CAAgC,gBAAkC,EAAA;QAAlC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;AAkB1D,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAK,GAAG,CAAC;KAlBgC;IAEvE,QAAQ,GAAA;QACN,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;AAED,IAAA,SAAS,CAAC,KAAsB,EAAA;QAC9B,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC;KAC5E;AAED,IAAA,IAAI,CAAC,KAAsB,EAAA;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC;KACnC;IAED,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;KAC3B;AAID;;;AAGG;AACH,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;8GArDU,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,kGCjBvC,gEAGA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FDca,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAXtC,SAAS;+BACE,wBAAwB,EAAA,aAAA,EAEnB,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,gEAAA,EAAA,CAAA;;0BAmCxB,QAAQ;yCApBjB,GAAG,EAAA,CAAA;sBALN,KAAK;;AAiBN;;AAEG;QACH,GAAG,EAAA,CAAA;sBAJF,KAAK;;;MEjCK,eAAe,CAAA;AAK1B,IAAA,WAAA,CAAY,OAA2B,EAAE,GAAW,EAAE,WAA6B,EAAA;AACjF,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACf,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;KAChC;IAED,OAAO,cAAc,CAAC,OAA2B,EAAA;AAC/C,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACnB,YAAA,OAAO,SAAS,CAAC;SAClB;AAED,QAAA,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACrH;IAED,UAAU,GAAA;AACR,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;KAC5B;IAED,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;KACpC;AACF;;ACxBM,MAAM,8CAA8C,GACzD,IAAI,cAAc,CAAwC,uCAAuC,CAAC;;ACHpG;;;;;;AAMG;AACI,MAAM,cAAc,GAAG,CAAC,OAAwB,KAAY;AACjE,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IACrC,IAAI,aAAa,EAAE;AACjB,QAAA,IAAI,IAAI,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;QACzC,IAAI,IAAI,EAAE;YACR,IAAI,IAAI,GAAG,CAAC;SACb;AACD,QAAA,OAAO,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,IAAG;AAC3D,YAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;AACxC,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAC3B,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC;aAC1C;iBAAM;AACL,gBAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC;aAClC;AACH,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,OAAO,EAAE,CAAC;AACZ,CAAC;;ACTD;;;;AAIG;MACU,2BAA2B,CAAA;AAUtC,IAAA,WAAA,CAAgC,gBAAkC,EAAc,mBAAkC,EACpC,aAAoD,EAAA;QADlG,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QACY,IAAa,CAAA,aAAA,GAAb,aAAa,CAAuC;QAR1H,IAAI,CAAA,IAAA,GAAyB,EAAE,CAAC;AAChC,QAAA,IAAA,CAAA,oCAAoC,GAAG,IAAI,YAAY,EAAE,CAAC;AAC1D,QAAA,IAAA,CAAA,gCAAgC,GAAG,IAAI,YAAY,EAAE,CAAC;QAEtD,IAAa,CAAA,aAAA,GAAwB,SAAS,CAAC;AAC/C,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,YAAY,EAAE,CAAC;AAwC/C,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAK,GAAG,CAAC;QApCnC,IAAI,mBAAmB,EAAE;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC3B,YAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,mBAAmB,CAAC,SAAS,CAAC,SAAS,CAAC,MAAK;AAC9E,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;aAC3B,CAAC,CAAC,CAAC;SACL;KACJ;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;IAED,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,oCAAoC,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAChH,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAExB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAG;AAC1B,YAAA,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;AAC1C,SAAC,CAAC,CAAC;KACJ;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,oCAAoC,CAAC,WAAW,EAAE,CAAC;AACxD,QAAA,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE,CAAC;AAC7C,QAAA,IAAI,CAAC,gCAAgC,CAAC,WAAW,EAAE,CAAC;KACrD;IAED,OAAO,GAAA;QACL,OAAO,IAAI,CAAC,uBAAuB,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;KACpD;IAED,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,uBAAuB,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;aACtE,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;KACrC;IAID,IACI,GAAG,CAAC,QAAqE,EAAA;QAC3E,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;YAC/D,IAAI,CAAC,mBAAmB,GAAG,MAAM,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC;YACrD,OAAO;SACR;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAC5B,YAAA,QAAQ,GAAG,QAAQ,KAAK,SAAS,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;SACrD;AAED,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,+FAAA,CAAiG,CAAC,CAAC;SACpH;AAED,QAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;AAC7D,YAAA,2BAA2B,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,CAAC;QAEzE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAExB,QAAA,IAAI,CAAC,gCAAgC,CAAC,WAAW,EAAE,CAAC;AACpD,QAAA,IAAI,CAAC,gCAAgC,GAAG,IAAI,YAAY,EAAE,CAAC;AAC3D,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAG;AAC1B,YAAA,IAAI,CAAC,gCAAgC,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,MAAK;AAC7E,gBAAA,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;aACzC,CAAC,CAAC,CAAC;AACN,SAAC,CAAC,CAAC;KACJ;IAIO,uBAAuB,GAAA;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,4BAA4B;AACtG,YAAA,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,CACrH,CAAC,GAAG,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,KAAK,SAAS,CAAsB,CAAC;KACjG;AAED;;;AAGG;IACK,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3B,OAAO;SACR;AAED,QAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,IAAG;AACzC,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,GAAG,KAAK,SAAS,EAAE;AACvD,gBAAA,MAAM,IAAI,KAAK,CAAC,kFAAkF,SAAS,CAAC,GAAG,CAAI,EAAA,CAAA;AACjH,oBAAA,CAAA,qBAAA,CAAuB,CAAC,CAAC;aAC5B;AACD,YAAA,IAAI,SAAS,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAyB,CAAC,KAAK,CAAC,CAAC,EAAE;AAClF,gBAAA,MAAM,IAAI,KAAK,CAAC,+CAA+C,SAAS,CAAC,GAAG,CAA8B,4BAAA,CAAA;AACxG,oBAAA,CAAA,qFAAA,CAAuF,CAAC,CAAC;aAC5F;AACH,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,yBAAyB,CAAC,OAA2B,EAAA;AAC3D,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3B,OAAO;SACR;QAED,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC,GAAG,KAAK,OAAO,IAAI,SAAS,CAAC,GAAG,KAAK,SAAS,CAAC;aACjG,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;QAE3C,MAAM,KAAK,GAAG,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,EAAE;YAChC,OAAO;SACR;AAED,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAE9F,IAAI,gBAAgB,EAAE;AACpB,YAAA,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC9B;aAAM;AACL,YAAA,MAAM,IAAI,KAAK,CAAC,oEAAoE,KAAK,CAAC,GAAG,CAAI,EAAA,CAAA;gBAC/F,CAAa,UAAA,EAAA,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;SAClD;KACF;AAjIU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,4GAWhB,8CAA8C,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAXzD,2BAA2B,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,KAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,SAAA,EACrB,0BAA0B,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxB7C,sLAMA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FDiBa,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAVvC,SAAS;+BACE,yBAAyB,EAAA,aAAA,EAEpB,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,sLAAA,EAAA,CAAA;;0BAiBxB,QAAQ;;0BAAgD,QAAQ;;0BAC1E,QAAQ;;0BAAI,MAAM;2BAAC,8CAA8C,CAAA;yCAVf,iBAAiB,EAAA,CAAA;sBAArE,eAAe;uBAAC,0BAA0B,CAAA;gBAkDvC,GAAG,EAAA,CAAA;sBADN,KAAK;;;MEjDK,wBAAwB,CAAA;IACnC,OAAO,OAAO,CAAC,aAAqD,EAAA;QAClE,OAAO;AACL,YAAA,QAAQ,EAAE,wBAAwB;AAClC,YAAA,SAAS,EAAE,CAAC;AACV,oBAAA,OAAO,EAAE,8CAA8C,EAAE,QAAQ,EAAE,aAAa;iBACjF,CAAC;SACH,CAAC;KACH;8GARU,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,iBAVjC,2BAA2B;YAC3B,0BAA0B;YAC1B,aAAa,CAAA,EAAA,OAAA,EAAA,CALb,YAAY,CAAA,EAAA,OAAA,EAAA,CAQZ,2BAA2B;YAC3B,0BAA0B;YAC1B,aAAa,CAAA,EAAA,CAAA,CAAA,EAAA;AAGJ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,YAbjC,YAAY,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAaH,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAfpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;AACb,qBAAA;AACD,oBAAA,YAAY,EAAE;wBACZ,2BAA2B;wBAC3B,0BAA0B;wBAC1B,aAAa;AACd,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,2BAA2B;wBAC3B,0BAA0B;wBAC1B,aAAa;AACd,qBAAA;AACF,iBAAA,CAAA;;;ACrBD;;AAEG;MACU,oBAAoB,CAAA;AAC/B;;;;;AAKG;AACH,IAAA,OAAO,uBAAuB,CAAC,WAAwB,EAAE,SAAiB,EAAA;QAEtE,OAAO,CAAC,OAAiC,KAAkB,CAAC,OAAwB,KACpF,oBAAoB,CAAC,8BAA8B,CAAC,OAAO,EAAE,MAAM,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;KACvG;AAED;;;;;AAKG;AACH,IAAA,OAAO,2BAA2B,CAAS,kBAAmD,EAAE,SAAiB,EAAA;QAG7G,OAAO,CAAC,IAA6B,EAAE,OAA6C,KACpF,CAAC,OAAwB,KAA6B;YAClD,MAAM,aAAa,GAAG,oBAAoB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAEhE,YAAA,OAAO,oBAAoB,CAAC,8BAA8B,CAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;AAC7H,SAAC,CAAC;KACP;AAED;;;;;AAKG;AACH,IAAA,OAAO,wBAAwB,CAAmB,kBAAmE,EAAE,SAAiB,EAAA;AAIpI,QAAA,OAAO,CAAC,IAA+B,EAAE,IAA+B,EACtE,OAA6D,KAC7D,CAAC,OAAwB,KAA6B;YACpD,MAAM,aAAa,GAAG,oBAAoB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAChE,MAAM,aAAa,GAAG,oBAAoB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAEhE,YAAA,OAAO,oBAAoB,CAAC,8BAA8B,CAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,OAAO,EACxG,aAAa,EAAE,aAAa,CAAC,CAAC;AAClC,SAAC,CAAC;KACP;IAEO,OAAO,cAAc,CAAI,GAAkB,EAAA;AACjD,QAAA,IAAI,GAAG,YAAY,QAAQ,EAAE;YAC3B,GAAG,GAAG,GAAG,EAAE,CAAC;SACb;AAED,QAAA,OAAO,GAAG,CAAC;KACZ;IAEO,OAAO,8BAA8B,CAAC,OAAwB;;AAEpE,IAAA,kBAAmD,EAAE,SAAiB;;IAEtE,OAA+C,EAAE,GAAG,IAAW,EAAA;AAE7D,QAAA,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC,CAAC;AAC7F,QAAA,oBAAoB,CAAC,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AAEjG,QAAA,OAAO,gBAAgB,CAAC;KAC3B;;IAGO,OAAO,QAAQ,CAAC,OAAwB,EAAE,kBAAmD,EAAE,GAAG,IAAW,EAAA;AAGjH,QAAA,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,GAAG,IAAI,CAAC,CAAC;AACvD,QAAA,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;KACtC;AAEO,IAAA,OAAO,mBAAmB,CAAC,OAAwB,EAAE,SAAiB;;AAE5E,IAAA,gBAAyC,EAAE,OAA+C,EAAE,GAAG,IAAW,EAAA;QAC1G,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,SAAS,CAAC,EAAE;AACnD,gBAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;AACjC,oBAAA,OAAO,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;iBAC5B;;;gBAID,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE;AAC/D,oBAAA,gBAAgB,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;iBAClC;gBAED,gBAAgB,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;aAClD;SACF;KACF;IAEO,OAAO,QAAQ,CAAC,GAAQ,EAAA;AAC9B,QAAA,OAAO,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;KACvE;AACF;;ACvGD;;;;AAIG;MACU,UAAU,CAAA;AACvB;;AAEG;AACM,IAAA,SAAA,IAAA,CAAA,aAAa,GAAGC,YAAiB,CAAC,aAAa,CAAC,EAAA;AAChD,IAAA,SAAA,IAAA,CAAA,YAAY,GAAGA,YAAiB,CAAC,YAAY,CAAC,EAAA;aAEtC,IAAY,CAAA,YAAA,GAAG,oBAAoB,CAAC,2BAA2B,CAACA,YAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAA;aAC9F,IAAY,CAAA,YAAA,GAAG,oBAAoB,CAAC,2BAA2B,CAACA,YAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAA;aAC9F,IAAkB,CAAA,kBAAA,GAAG,oBAAoB,CAAC,2BAA2B,CAACA,YAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,EAAA;aAChH,IAAkB,CAAA,kBAAA,GAAG,oBAAoB,CAAC,2BAA2B,CAACA,YAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,EAAA;aAChH,IAAgB,CAAA,gBAAA,GAAG,oBAAoB,CAAC,2BAA2B,CAACA,YAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,EAAA;aAC1G,IAAiB,CAAA,iBAAA,GAAG,oBAAoB,CAAC,uBAAuB,CAACA,YAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,EAAA;aACzG,IAAqB,CAAA,qBAAA,GAAG,oBAAoB,CAAC,uBAAuB,CAACA,YAAiB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,EAAA;aACjH,IAAc,CAAA,cAAA,GAAG,oBAAoB,CAAC,uBAAuB,CAACA,YAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,EAAA;IAY/G,OAAO,OAAO,CAAC,UAA+C,EAAA;QAC5D,OAAO,UAAU,KAAK,IAAI,GAAGA,YAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,GAAGA,YAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;KAC5G;AA8BD,IAAA,OAAO,GAAG,CAAC,GAA4B,EAAE,OAA4C,EAAA;QACnF,OAAO,UAAU,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;KAC9C;AA8BD,IAAA,OAAO,GAAG,CAAC,GAA4B,EAAE,OAA4C,EAAA;QACnF,OAAO,UAAU,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;KAC9C;AA8BD,IAAA,OAAO,SAAS,CAAC,SAAkC,EAAE,OAAkD,EAAA;QACrG,OAAO,UAAU,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;KAC1D;AA8BD,IAAA,OAAO,SAAS,CAAC,SAAkC,EAAE,OAAkD,EAAA;QACrG,OAAO,UAAU,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;KAC1D;AAsBD,IAAA,OAAO,OAAO,CAAC,OAAgD,EAAE,OAAgB,EAAA;QAC/E,OAAO,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;KACtD;IAYD,OAAO,QAAQ,CAAC,OAAgB,EAAA;AAC9B,QAAA,OAAO,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;KAC9C;IAYD,OAAO,YAAY,CAAC,OAAgB,EAAA;AAClC,QAAA,OAAO,UAAU,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;KAClD;IAYD,OAAO,KAAK,CAAC,OAAgB,EAAA;AAC3B,QAAA,OAAO,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;KAC3C;;;ACvOH;;AAEG;;;;"}