UNPKG

@codice-progressio/input-validaciones

Version:
1 lines 23.5 kB
{"version":3,"file":"codice-progressio-input-validaciones.mjs","sources":["../../../projects/input-validaciones/src/lib/input-validaciones.service.ts","../../../projects/input-validaciones/src/lib/input-validaciones.component.ts","../../../projects/input-validaciones/src/lib/input-validaciones.component.html","../../../projects/input-validaciones/src/lib/input-validaciones.module.ts","../../../projects/input-validaciones/src/public-api.ts","../../../projects/input-validaciones/src/codice-progressio-input-validaciones.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { AbstractControl, FormGroup, ValidatorFn } from '@angular/forms';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class InputValidacionesService {\n /**\n * Si el campo tiene valores invalidos retorna false ( Esto sirve para\n * bootstrap\n *\n * @param {AbstractControl} campo El campo que se quiere comprobar\n * @returns {boolean}\n * @memberof InputValidacionesService\n */\n invalid(campo: AbstractControl): boolean {\n return campo.touched && campo.invalid;\n }\n\n /**\n *\n * Si el campo tiene valores validos retorna true\n *\n * @param {AbstractControl} campo El campo que se quiere comprobar\n * @returns {boolean}\n * @memberof InputValidacionesService\n */\n valid(campo: AbstractControl): boolean {\n return campo.touched && campo.valid;\n }\n\n /**\n *Valida una url\n *\n * @param {AbstractControl} campo\n * @returns {*}\n * @memberof InputValidacionesService\n */\n urlValidator(campo: AbstractControl, mensaje = 'La url no es valida'): any {\n if (campo.pristine) {\n return null;\n }\n // tslint:disable-next-line:max-line-length\n const URL_REGEXP = /^(http?|ftp):\\/\\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+\\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\\/($|[a-zA-Z0-9.,?'\\\\+&%$#=~_-]+))*$/;\n campo.markAsTouched();\n if (URL_REGEXP.test(campo.value)) {\n return null;\n }\n return {\n invalidUrl: true,\n url: campo.value,\n mensaje,\n };\n }\n\n /**\n *Valida que dos campos llamados password y confirm coincidan.\n *\n * @param {FormGroup} group El formulario completo\n * @returns {*}\n * @memberof InputValidacionesService\n */\n matchPassword(\n group: FormGroup,\n mensaje = 'Las contraseñas no coinciden'\n ): any {\n const password = group.controls.password;\n const confirm = group.controls.confirm;\n if (password.pristine || confirm.pristine) {\n return null;\n }\n group.markAsTouched();\n if (password.value === confirm.value) {\n return null;\n }\n return {\n invalidPassword: true,\n mensaje,\n };\n }\n\n numberValidator(\n campo: AbstractControl,\n mensaje = 'No es un numero valido'\n ): any {\n if (campo.pristine) {\n return null;\n }\n const NUMBER_REGEXP = /^\\-?[0-9]+(?:\\.[0-9]+)?$/;\n campo.markAsTouched();\n\n if (NUMBER_REGEXP.test(campo.value)) {\n return null;\n }\n\n return {\n invalidNumber: true,\n mensaje,\n };\n }\n\n /**\n *Valida que solo sean numeros. No lo debes de llamar\n como funcion, si no como un tipo callback. \n *\n * @param {*} campo\n * @returns {*}\n * @memberof ValidacionesService\n */\n onlyIntegers(\n campo: AbstractControl,\n mensaje = 'Solo se permiten números enteteros'\n ): any {\n if (campo.pristine) {\n return null;\n }\n campo.markAsTouched();\n const INTEGERS_REGEXP = /^[0-9]+$/;\n\n if (INTEGERS_REGEXP.test(campo.value)) {\n return null;\n }\n\n return { notInteger: true, mensaje };\n }\n ssnValidator(ssn): any {\n if (ssn.pristine) {\n return null;\n }\n const SSN_REGEXP = /^(?!219-09-9999|078-05-1120)(?!666|000|9\\d{2})\\d{3}-(?!00)\\d{2}-(?!0{4})\\d{4}$/;\n ssn.markAsTouched();\n if (SSN_REGEXP.test(ssn.value)) {\n return null;\n }\n return {\n invalidSsn: true,\n };\n }\n // Validates US phone numbers\n phoneValidator(number): any {\n if (number.pristine) {\n return null;\n }\n const PHONE_REGEXP = /^(\\([0-9]{3}\\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}$/;\n number.markAsTouched();\n if (PHONE_REGEXP.test(number.value)) {\n return null;\n }\n\n return {\n invalidNumber: true,\n };\n }\n // Validates zip codes\n zipCodeValidator(zip): any {\n if (zip.pristine) {\n return null;\n }\n const ZIP_REGEXP = /^[0-9]{5}(?:-[0-9]{4})?$/;\n zip.markAsTouched();\n if (ZIP_REGEXP.test(zip.value)) {\n return null;\n }\n return {\n invalidZip: true,\n };\n }\n\n /**\n *Valida un registro federal del contribuyente Mexicano\n *\n * @param {AbstractControl} campo\n * @param {string} [mensaje='RFC invalido']\n * @returns {*}\n * @memberof InputValidacionesService\n */\n rfc(campo: AbstractControl, mensaje = 'RFC invalido'): any {\n let _rfc_pattern_pm =\n '^(([A-ZÑ&]{3})([0-9]{2})([0][13578]|[1][02])(([0][1-9]|[12][\\\\d])|[3][01])([A-Z0-9]{3}))|' +\n '(([A-ZÑ&]{3})([0-9]{2})([0][13456789]|[1][012])(([0][1-9]|[12][\\\\d])|[3][0])([A-Z0-9]{3}))|' +\n '(([A-ZÑ&]{3})([02468][048]|[13579][26])[0][2]([0][1-9]|[12][\\\\d])([A-Z0-9]{3}))|' +\n '(([A-ZÑ&]{3})([0-9]{2})[0][2]([0][1-9]|[1][0-9]|[2][0-8])([A-Z0-9]{3}))$';\n // patron del RFC, persona fisica\n let _rfc_pattern_pf =\n '^(([A-ZÑ&]{4})([0-9]{2})([0][13578]|[1][02])(([0][1-9]|[12][\\\\d])|[3][01])([A-Z0-9]{3}))|' +\n '(([A-ZÑ&]{4})([0-9]{2})([0][13456789]|[1][012])(([0][1-9]|[12][\\\\d])|[3][0])([A-Z0-9]{3}))|' +\n '(([A-ZÑ&]{4})([02468][048]|[13579][26])[0][2]([0][1-9]|[12][\\\\d])([A-Z0-9]{3}))|' +\n '(([A-ZÑ&]{4})([0-9]{2})[0][2]([0][1-9]|[1][0-9]|[2][0-8])([A-Z0-9]{3}))$';\n\n let error = { general: { mensaje } };\n if (!campo.value) return null;\n if (\n campo.value.match(_rfc_pattern_pm) ||\n campo.value.match(_rfc_pattern_pf)\n ) {\n let r = campo.value.length;\n if (r > 11 && r < 14) return null;\n }\n\n return error;\n }\n\n /**\n *Valida la estructura de una CURP Mexicana\n *\n * @param {AbstractControl} campo\n * @param {string} [mensaje='CURP invalida']\n * @returns\n * @memberof InputValidacionesService\n */\n curp(campo: AbstractControl, mensaje = 'CURP invalida') {\n let curp_pattern = /^([A-Z][AEIOUX][A-Z]{2}\\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\\d|3[01])[HM](?:AS|B[CS]|C[CLMSH]|D[FG]|G[TR]|HG|JC|M[CNS]|N[ETL]|OC|PL|Q[TR]|S[PLR]|T[CSL]|VZ|YN|ZS)[B-DF-HJ-NP-TV-Z]{3}[A-Z\\d])(\\d)$/;\n\n let error = { general: { mensaje } };\n if (!campo.value) return null;\n\n if (campo.value.match(curp_pattern)) {\n if (campo.value.length == 18) return null;\n }\n\n return error;\n }\n\n /**\n * Valida el formato de un numero de seguridad social Mexicano (NSS)\n *\n * @param {AbstractControl} campo\n * @param {string} [mensaje='Numero de seguridad no valido']\n * @returns\n * @memberof InputValidacionesService\n */\n nss(campo: AbstractControl, mensaje = 'Numero de seguridad no valido') {\n let NSS_pattern = /^(\\d{2})(\\d{2})(\\d{2})\\d{5}$/;\n\n let error = { general: { mensaje } };\n if (!campo.value) return null;\n if (campo.value.match(NSS_pattern)) {\n if (campo.value.length === 11) return null;\n }\n\n return error;\n }\n\n fechaMenorQue(\n campoFecha1: string,\n campoFecha2: string,\n campoValidador: {} = {\n general: {\n mensaje: 'Se han encontrado fechas invalidas',\n },\n }\n ): ValidatorFn {\n return (c: AbstractControl): { [key: string]: boolean } | null => {\n const date1 = c.get(campoFecha1).value;\n const date2 = c.get(campoFecha2).value;\n if (date1 !== null && date2 !== null && date1 > date2) {\n c.get(campoFecha1).setErrors({\n general: {\n mensaje: 'Esta fecha tiene que ser menor que la de finalizacion',\n },\n });\n c.get(campoFecha2).setErrors({\n general: {\n mensaje: 'Esta fecha tiene que ser mayor que la de inicio',\n },\n });\n return campoValidador;\n }\n\n c.get(campoFecha1).updateValueAndValidity({ onlySelf: true });\n c.get(campoFecha2).updateValueAndValidity({ onlySelf: true });\n return null;\n };\n }\n}\n","import { Component, Input, OnInit } from \"@angular/core\"\nimport { AbstractControl } from \"@angular/forms\"\n\n@Component({\n selector: \"codice-validaciones\",\n templateUrl: \"input-validaciones.component.html\",\n})\nexport class InputValidacionesComponent implements OnInit {\n _campo: AbstractControl = null\n\n mensaje = {}\n /**\n * El control con el que se haran las comprobaciones.\n *\n * @type {AbstractControl}\n * @memberof ValidacionInputsComponent\n */\n @Input() set campo(value: AbstractControl) {\n this._campo = value\n\n if (value) {\n this.mensaje = {\n required: () => {\n return `Este campo es obligatorio`\n },\n min: this.min.bind(this),\n max: this.max.bind(this),\n notInteger: () => {\n return `Se necesita un número entero positivo`\n },\n invalidNumber: () => {\n return `No es un número\n válido`\n },\n tamanoMinimo: this.tamanoMinimo.bind(this),\n minlength: this.minlength.bind(this),\n maxlength: this.maxlength.bind(this),\n general: this.general.bind(this),\n email: () => {\n return \"Correo no valido\"\n },\n\n \"Mask error\": () => \"Hay un error en el formato (mask)\",\n }\n }\n }\n\n get campo(): AbstractControl {\n return this._campo\n }\n /**\n * Un texto especial que se quiera mostrar. Este no se valida.\n *\n * @type {string}\n * @memberof ValidacionInputsComponent\n */\n @Input() especial: string = null\n\n /**\n * Define si se salta la validacion del touch para mostrar\n * siempre la validacion aunque el usuario no interactue con el\n * control.\n *\n * @type {boolean}\n * @memberof ValidacionInputsComponent\n */\n @Input() directo: boolean = false\n\n @Input() debug: boolean = false\n\n constructor() {}\n\n ngOnInit() {}\n\n min(): string {\n return `El valor mínimo permitido es ${this.cge(\"min\").min}`\n }\n\n max(): string {\n return `El máximo permitido es ${this.cge(\"max\").max}`\n }\n\n tamanoMinimo(): string {\n let cantidad = this.cge(\"tamanoMinimo\").minimo > 1 ? \"\" : \"un \"\n let campo = this.cge(\"tamanoMinimo\").minimo > 1 ? \"campos\" : \"campo\"\n return `Debes seleccionar por lo menos ${cantidad} ${campo}`\n }\n\n minlength(): string {\n let campo = this.cge(\"minlength\")\n let cantidadCar = campo.requiredLength\n let faltan = cantidadCar - campo.actualLength\n let conjuncion = cantidadCar > 1 ? cantidadCar : \"un \"\n let caracteres = cantidadCar > 1 ? \"caracteres\" : \"caracter\"\n return `Debes escribir por lo menos ${conjuncion} ${caracteres}. (Faltan ${faltan})`\n }\n maxlength(): string {\n let campo = this.cge(\"maxlength\")\n let cantidadCar = campo.requiredLength\n let sobran = campo.actualLength - cantidadCar\n let conjuncion = cantidadCar > 1 ? cantidadCar : \"un \"\n let caracteres = cantidadCar > 1 ? \"caracteres\" : \"caracter\"\n return `El máximo es ${conjuncion} ${caracteres}. (Sobran ${sobran})`\n }\n\n general() {\n return this.cge(\"general\").mensaje\n }\n\n cge(a) {\n return this.campo.getError(a)\n }\n\n che(a) {\n if (!this.campo) return false\n return this.campo.hasError(a)\n }\n\n listaDeErrores() {\n if (!this.campo) return []\n if (!this.campo.errors) return []\n return Object.keys(this.campo.errors)\n }\n\n /**\n * Comprueba si el campo a sido tocado si directo no a sido\n * puesto como true. Si ha sido puesto como true retorna true\n * directamete.\n *\n * @returns True si ha sido tocado o directo esta como true.\n * @memberof ValidacionInputsComponent\n */\n touched() {\n if (this.directo) return true\n if (this.campo) {\n return this.campo.touched\n }\n return false\n }\n\n obtenerMensaje(key: string): string {\n if (this.mensaje.hasOwnProperty(key)) return this.mensaje[key]()\n\n return `Mensaje no definido para ${key}`\n }\n}\n","<!-- <ng-container *ngIf=\"campo && touched()\">\r\n <ng-container *ngFor=\"let error of listaDeErrores()\">\r\n <div class=\"text-danger \">\r\n <i class=\"fas fa-times\"></i>\r\n {{ obtenerMensaje(error) }}\r\n </div>\r\n </ng-container>\r\n\r\n <pre *ngIf=\"debug\">{{ campo?.errors | json }}</pre>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"especial\">\r\n <span class=\"form-text text-danger\">\r\n <i class=\"fas fa-times animated tada\"></i> {{ especial }}.</span\r\n >\r\n</ng-container> -->\r\n","import { CommonModule } from \"@angular/common\"\nimport { NgModule } from \"@angular/core\"\nimport { InputValidacionesComponent } from \"./input-validaciones.component\"\n\n@NgModule({\n declarations: [InputValidacionesComponent],\n imports: [CommonModule],\n exports: [InputValidacionesComponent],\n})\nexport class InputValidacionesModule {}\n","/*\n * Public API Surface of input-validaciones\n */\n\nexport * from './lib/input-validaciones.service';\nexport * from './lib/input-validaciones.component';\nexport * from './lib/input-validaciones.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MAMa,wBAAwB,CAAA;AACnC;;;;;;;AAOG;AACH,IAAA,OAAO,CAAC,KAAsB,EAAA;AAC5B,QAAA,OAAO,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;KACvC;AAED;;;;;;;AAOG;AACH,IAAA,KAAK,CAAC,KAAsB,EAAA;AAC1B,QAAA,OAAO,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC;KACrC;AAED;;;;;;AAMG;AACH,IAAA,YAAY,CAAC,KAAsB,EAAE,OAAO,GAAG,qBAAqB,EAAA;AAClE,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,YAAA,OAAO,IAAI,CAAC;SACb;;QAED,MAAM,UAAU,GAAG,2TAA2T,CAAC;QAC/U,KAAK,CAAC,aAAa,EAAE,CAAC;QACtB,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAChC,YAAA,OAAO,IAAI,CAAC;SACb;QACD,OAAO;AACL,YAAA,UAAU,EAAE,IAAI;YAChB,GAAG,EAAE,KAAK,CAAC,KAAK;YAChB,OAAO;SACR,CAAC;KACH;AAED;;;;;;AAMG;AACH,IAAA,aAAa,CACX,KAAgB,EAChB,OAAO,GAAG,8BAA8B,EAAA;AAExC,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACzC,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QACvC,IAAI,QAAQ,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE;AACzC,YAAA,OAAO,IAAI,CAAC;SACb;QACD,KAAK,CAAC,aAAa,EAAE,CAAC;QACtB,IAAI,QAAQ,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE;AACpC,YAAA,OAAO,IAAI,CAAC;SACb;QACD,OAAO;AACL,YAAA,eAAe,EAAE,IAAI;YACrB,OAAO;SACR,CAAC;KACH;AAED,IAAA,eAAe,CACb,KAAsB,EACtB,OAAO,GAAG,wBAAwB,EAAA;AAElC,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,YAAA,OAAO,IAAI,CAAC;SACb;QACD,MAAM,aAAa,GAAG,0BAA0B,CAAC;QACjD,KAAK,CAAC,aAAa,EAAE,CAAC;QAEtB,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AACnC,YAAA,OAAO,IAAI,CAAC;SACb;QAED,OAAO;AACL,YAAA,aAAa,EAAE,IAAI;YACnB,OAAO;SACR,CAAC;KACH;AAED;;;;;;;AAOC;AACD,IAAA,YAAY,CACV,KAAsB,EACtB,OAAO,GAAG,oCAAoC,EAAA;AAE9C,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,YAAA,OAAO,IAAI,CAAC;SACb;QACD,KAAK,CAAC,aAAa,EAAE,CAAC;QACtB,MAAM,eAAe,GAAG,UAAU,CAAC;QAEnC,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AACrC,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;KACtC;AACD,IAAA,YAAY,CAAC,GAAG,EAAA;AACd,QAAA,IAAI,GAAG,CAAC,QAAQ,EAAE;AAChB,YAAA,OAAO,IAAI,CAAC;SACb;QACD,MAAM,UAAU,GAAG,gFAAgF,CAAC;QACpG,GAAG,CAAC,aAAa,EAAE,CAAC;QACpB,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC9B,YAAA,OAAO,IAAI,CAAC;SACb;QACD,OAAO;AACL,YAAA,UAAU,EAAE,IAAI;SACjB,CAAC;KACH;;AAED,IAAA,cAAc,CAAC,MAAM,EAAA;AACnB,QAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC;SACb;QACD,MAAM,YAAY,GAAG,8CAA8C,CAAC;QACpE,MAAM,CAAC,aAAa,EAAE,CAAC;QACvB,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACnC,YAAA,OAAO,IAAI,CAAC;SACb;QAED,OAAO;AACL,YAAA,aAAa,EAAE,IAAI;SACpB,CAAC;KACH;;AAED,IAAA,gBAAgB,CAAC,GAAG,EAAA;AAClB,QAAA,IAAI,GAAG,CAAC,QAAQ,EAAE;AAChB,YAAA,OAAO,IAAI,CAAC;SACb;QACD,MAAM,UAAU,GAAG,0BAA0B,CAAC;QAC9C,GAAG,CAAC,aAAa,EAAE,CAAC;QACpB,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC9B,YAAA,OAAO,IAAI,CAAC;SACb;QACD,OAAO;AACL,YAAA,UAAU,EAAE,IAAI;SACjB,CAAC;KACH;AAED;;;;;;;AAOG;AACH,IAAA,GAAG,CAAC,KAAsB,EAAE,OAAO,GAAG,cAAc,EAAA;QAClD,IAAI,eAAe,GACjB,2FAA2F;YAC3F,6FAA6F;YAC7F,kFAAkF;AAClF,YAAA,0EAA0E,CAAC;;QAE7E,IAAI,eAAe,GACjB,2FAA2F;YAC3F,6FAA6F;YAC7F,kFAAkF;AAClF,YAAA,0EAA0E,CAAC;QAE7E,IAAI,KAAK,GAAG,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI,CAAC;AAC9B,QAAA,IACE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC;YAClC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,EAClC;AACA,YAAA,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;AAC3B,YAAA,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;AAAE,gBAAA,OAAO,IAAI,CAAC;SACnC;AAED,QAAA,OAAO,KAAK,CAAC;KACd;AAED;;;;;;;AAOG;AACH,IAAA,IAAI,CAAC,KAAsB,EAAE,OAAO,GAAG,eAAe,EAAA;QACpD,IAAI,YAAY,GAAG,mMAAmM,CAAC;QAEvN,IAAI,KAAK,GAAG,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI,CAAC;QAE9B,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;AACnC,YAAA,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE;AAAE,gBAAA,OAAO,IAAI,CAAC;SAC3C;AAED,QAAA,OAAO,KAAK,CAAC;KACd;AAED;;;;;;;AAOG;AACH,IAAA,GAAG,CAAC,KAAsB,EAAE,OAAO,GAAG,+BAA+B,EAAA;QACnE,IAAI,WAAW,GAAG,8BAA8B,CAAC;QAEjD,IAAI,KAAK,GAAG,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI,CAAC;QAC9B,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;AAClC,YAAA,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,EAAE;AAAE,gBAAA,OAAO,IAAI,CAAC;SAC5C;AAED,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,aAAa,CACX,WAAmB,EACnB,WAAmB,EACnB,cAAqB,GAAA;AACnB,QAAA,OAAO,EAAE;AACP,YAAA,OAAO,EAAE,oCAAoC;AAC9C,SAAA;AACF,KAAA,EAAA;QAED,OAAO,CAAC,CAAkB,KAAuC;YAC/D,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;YACvC,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;AACvC,YAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG,KAAK,EAAE;AACrD,gBAAA,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC;AAC3B,oBAAA,OAAO,EAAE;AACP,wBAAA,OAAO,EAAE,uDAAuD;AACjE,qBAAA;AACF,iBAAA,CAAC,CAAC;AACH,gBAAA,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC;AAC3B,oBAAA,OAAO,EAAE;AACP,wBAAA,OAAO,EAAE,iDAAiD;AAC3D,qBAAA;AACF,iBAAA,CAAC,CAAC;AACH,gBAAA,OAAO,cAAc,CAAC;aACvB;AAED,YAAA,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,sBAAsB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,YAAA,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,sBAAsB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,YAAA,OAAO,IAAI,CAAC;AACd,SAAC,CAAC;KACH;uGA3QU,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAFvB,MAAM,EAAA,CAAA,CAAA;;2FAEP,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCEY,0BAA0B,CAAA;IACrC,MAAM,GAAoB,IAAI,CAAA;IAE9B,OAAO,GAAG,EAAE,CAAA;AACZ;;;;;AAKG;IACH,IAAa,KAAK,CAAC,KAAsB,EAAA;AACvC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QAEnB,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,OAAO,GAAG;gBACb,QAAQ,EAAE,MAAK;AACb,oBAAA,OAAO,2BAA2B,CAAA;iBACnC;gBACD,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;gBACxB,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;gBACxB,UAAU,EAAE,MAAK;AACf,oBAAA,OAAO,uCAAuC,CAAA;iBAC/C;gBACD,aAAa,EAAE,MAAK;oBAClB,OAAO,CAAA;eACF,CAAA;iBACN;gBACD,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC1C,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;gBACpC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;gBACpC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;gBAChC,KAAK,EAAE,MAAK;AACV,oBAAA,OAAO,kBAAkB,CAAA;iBAC1B;AAED,gBAAA,YAAY,EAAE,MAAM,mCAAmC;aACxD,CAAA;SACF;KACF;AAED,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;KACnB;AACD;;;;;AAKG;IACM,QAAQ,GAAW,IAAI,CAAA;AAEhC;;;;;;;AAOG;IACM,OAAO,GAAY,KAAK,CAAA;IAExB,KAAK,GAAY,KAAK,CAAA;AAE/B,IAAA,WAAA,GAAA,GAAgB;AAEhB,IAAA,QAAQ,MAAK;IAEb,GAAG,GAAA;QACD,OAAO,CAAA,6BAAA,EAAgC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAA,CAAE,CAAA;KAC7D;IAED,GAAG,GAAA;QACD,OAAO,CAAA,uBAAA,EAA0B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAA,CAAE,CAAA;KACvD;IAED,YAAY,GAAA;QACV,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,CAAA;QAC/D,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,GAAG,OAAO,CAAA;AACpE,QAAA,OAAO,CAAkC,+BAAA,EAAA,QAAQ,CAAI,CAAA,EAAA,KAAK,EAAE,CAAA;KAC7D;IAED,SAAS,GAAA;QACP,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;AACjC,QAAA,IAAI,WAAW,GAAG,KAAK,CAAC,cAAc,CAAA;AACtC,QAAA,IAAI,MAAM,GAAG,WAAW,GAAG,KAAK,CAAC,YAAY,CAAA;AAC7C,QAAA,IAAI,UAAU,GAAG,WAAW,GAAG,CAAC,GAAG,WAAW,GAAG,KAAK,CAAA;AACtD,QAAA,IAAI,UAAU,GAAG,WAAW,GAAG,CAAC,GAAG,YAAY,GAAG,UAAU,CAAA;AAC5D,QAAA,OAAO,+BAA+B,UAAU,CAAA,CAAA,EAAI,UAAU,CAAa,UAAA,EAAA,MAAM,GAAG,CAAA;KACrF;IACD,SAAS,GAAA;QACP,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;AACjC,QAAA,IAAI,WAAW,GAAG,KAAK,CAAC,cAAc,CAAA;AACtC,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,YAAY,GAAG,WAAW,CAAA;AAC7C,QAAA,IAAI,UAAU,GAAG,WAAW,GAAG,CAAC,GAAG,WAAW,GAAG,KAAK,CAAA;AACtD,QAAA,IAAI,UAAU,GAAG,WAAW,GAAG,CAAC,GAAG,YAAY,GAAG,UAAU,CAAA;AAC5D,QAAA,OAAO,iBAAiB,UAAU,CAAA,CAAA,EAAI,UAAU,CAAa,UAAA,EAAA,MAAM,GAAG,CAAA;KACvE;IAED,OAAO,GAAA;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAA;KACnC;AAED,IAAA,GAAG,CAAC,CAAC,EAAA;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;KAC9B;AAED,IAAA,GAAG,CAAC,CAAC,EAAA;QACH,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK,CAAA;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;KAC9B;IAED,cAAc,GAAA;QACZ,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE,CAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE,CAAA;QACjC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;KACtC;AAED;;;;;;;AAOG;IACH,OAAO,GAAA;QACL,IAAI,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI,CAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAA;SAC1B;AACD,QAAA,OAAO,KAAK,CAAA;KACb;AAED,IAAA,cAAc,CAAC,GAAW,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAA;QAEhE,OAAO,CAAA,yBAAA,EAA4B,GAAG,CAAA,CAAE,CAAA;KACzC;uGAzIU,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,iJCPvC,shBAgBA,EAAA,CAAA,CAAA;;2FDTa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJtC,SAAS;+BACE,qBAAqB,EAAA,QAAA,EAAA,shBAAA,EAAA,CAAA;wDAalB,KAAK,EAAA,CAAA;sBAAjB,KAAK;gBAuCG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAUG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;;;ME3DK,uBAAuB,CAAA;uGAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,EAJnB,YAAA,EAAA,CAAA,0BAA0B,CAC/B,EAAA,OAAA,EAAA,CAAA,YAAY,aACZ,0BAA0B,CAAA,EAAA,CAAA,CAAA;AAEzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,YAHxB,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAGX,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,0BAA0B,CAAC;oBAC1C,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,0BAA0B,CAAC;AACtC,iBAAA,CAAA;;;ACRD;;AAEG;;ACFH;;AAEG;;;;"}