UNPKG

ngx-error-message

Version:

A package to display error messages in angular forms

1 lines 20.6 kB
{"version":3,"file":"ngx-error-message.mjs","sources":["../../../projects/ngx-error-message/src/lib/ngx-error-message-constant.ts","../../../projects/ngx-error-message/src/lib/ngx-error-message.token.ts","../../../projects/ngx-error-message/src/lib/ngx-error-message.service.ts","../../../projects/ngx-error-message/src/lib/ngx-error-message.pipe.ts","../../../projects/ngx-error-message/src/lib/ngx-error-message.component.ts","../../../projects/ngx-error-message/src/lib/ngx-error-message.directive.ts","../../../projects/ngx-error-message/src/lib/ngx-error-message.module.ts","../../../projects/ngx-error-message/src/public-api.ts","../../../projects/ngx-error-message/src/ngx-error-message.ts"],"sourcesContent":["const octetPattern = '(25[0-5]|2[0-4]\\\\d|1\\\\d{2}|\\\\d{1,2})'\nconst countryCode = '\\\\+?[-.\\\\s]?\\\\d{1,2}[-.\\\\s]?'\nconst areaCode = '\\\\(?\\\\d{3}\\\\)?'\nconst phoneNumber = '\\\\d{3}[-.\\\\s]?\\\\d{4}'\nconst protocol = '(https?:\\\\/\\\\/)?'\nconst domain = '[\\\\w\\\\d-]+(\\\\.[\\\\w\\\\d-]+)+'\nconst path = '(\\\\/[-\\\\w\\\\d.]*)*\\\\/?'\nconst query = '(\\\\?[\\\\w\\\\d=&]*)?'\nconst fragment = '(#[\\\\w\\\\d-]*)?'\n\nexport const regEx = {\n phoneNumber: new RegExp(\n `^(${countryCode})?${areaCode}[-.\\\\s]?${phoneNumber}$`,\n ),\n websiteUrl: new RegExp(`^${protocol}${domain}${path}${query}${fragment}$`),\n numeric: /^\\d+$/,\n smallLetters: /^[a-z]+$/,\n capitalLetters: /^[A-Z]+$/,\n alphabet: /^[a-zA-Z\\s\\u00C0-\\u017F]+$/,\n alphaNumeric: /^[a-zA-Z0-9\\s\\u00C0-\\u017F]+$/,\n ip: new RegExp(`^(${octetPattern})(\\\\.(${octetPattern})){3}$`),\n}\n\nexport const requiredRegex = /^((?!actual).)*$/\n","import { InjectionToken } from '@angular/core'\nimport { ErrorMessageConfig } from './ngx-error-message-interfaces'\n\nexport const ERROR_MESSAGE_CONFIG = new InjectionToken<ErrorMessageConfig>(\n 'ERROR_MESSAGE_CONFIG',\n)\n","import { Injectable, inject } from '@angular/core'\nimport { ValidationErrors } from '@angular/forms'\n\nimport { regEx, requiredRegex } from './ngx-error-message-constant'\nimport { TranslateService } from '@ngx-translate/core'\nimport { ErrorMessageConfig } from './ngx-error-message-interfaces'\nimport { ERROR_MESSAGE_CONFIG } from './ngx-error-message.token'\n\n@Injectable()\nexport class NgxErrorMessageService {\n private readonly config = inject<ErrorMessageConfig>(ERROR_MESSAGE_CONFIG)\n private readonly translate = inject(TranslateService, { optional: true })\n\n getErrorMessage(\n controlErrors: ValidationErrors,\n patternKey?: string,\n fieldName?: string,\n ) {\n const lastError = Object.entries(controlErrors).pop()\n if (!lastError) {\n return ''\n }\n\n const [errorKey, errorValue] = lastError\n\n if (typeof errorValue === 'boolean') {\n return this.getMessage(errorKey, fieldName)\n }\n\n if (errorKey === 'pattern') {\n const patternErrorKey = this.patternMatchExpression(\n errorValue,\n patternKey,\n )\n return this.getMessage(patternErrorKey, fieldName)\n }\n const requiredValue = this.getValueByRegexFromObject(\n errorValue,\n requiredRegex,\n )\n return this.getMessage(errorKey, fieldName, requiredValue)\n }\n\n private patternMatchExpression(\n value: Record<string, unknown>,\n patternKey?: string,\n ): string {\n const pattern = value['requiredPattern'] as string\n const regExpDefault = Object.entries(regEx).find(\n ([, val]) => val.toString() === pattern,\n )\n return `${this.config.patternsPrefix}.${regExpDefault ? regExpDefault[0] : patternKey}`\n }\n\n private getValueByRegexFromObject(\n obj: Record<string, unknown>,\n regex: RegExp,\n ): string {\n const [, findValue] =\n Object.entries(obj).find(([key]) => regex.test(key)) ?? []\n return findValue as string\n }\n\n private interpolateMessage(\n message: string,\n params: Record<string, string>,\n ): string {\n return message.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => params[key] ?? '')\n }\n\n private getNestedMessage(\n obj: Record<string, unknown>,\n path: string,\n ): string | undefined {\n return path\n .split('.')\n .reduce(\n (acc, key) => acc && (acc[key] as never),\n obj,\n ) as unknown as string\n }\n\n private getMessage(key: string, fieldName?: string, param?: string): string {\n const options = {\n ...(fieldName && { fieldName }),\n ...(param && { param }),\n }\n if (Object.keys(this.config.errorMessages!).length > 0) {\n const messageTemplate =\n this.getNestedMessage(this.config.errorMessages!, key) ?? ''\n return this.interpolateMessage(messageTemplate, options)\n }\n\n return param || fieldName\n ? this.translate?.instant(\n `${this.config.validationsPrefix}.${key}`,\n options,\n )\n : this.translate?.instant(`${this.config.validationsPrefix}.${key}`)\n }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core'\nimport { ValidationErrors } from '@angular/forms'\nimport { NgxErrorMessageService } from './ngx-error-message.service'\n\n@Pipe({\n name: 'ngxErrorMessage',\n})\nexport class NgxErrorMessagePipe implements PipeTransform {\n private readonly errorMessageService = inject(NgxErrorMessageService)\n private cachedData!: string\n private cachedError = ''\n private cachedLang = ''\n\n transform(\n value: ValidationErrors | null,\n lang?: string,\n patternKey?: string,\n fieldName?: string,\n ): string {\n if (!value) {\n return ''\n }\n if (lang !== this.cachedLang) {\n this.cachedLang = lang ?? ''\n this.cachedError = ''\n }\n const [lastErrorKey] = Object.keys(value).slice(-1)\n if (lastErrorKey !== this.cachedError) {\n this.cachedError = lastErrorKey\n this.cachedData = this.errorMessageService.getErrorMessage(\n value,\n patternKey,\n fieldName,\n )\n }\n return this.cachedData ?? ''\n }\n}\n","import {\n Component,\n Input,\n OnInit,\n ElementRef,\n Renderer2,\n inject,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { LangChangeEvent, TranslateService } from '@ngx-translate/core'\nimport { Subject, distinctUntilChanged } from 'rxjs'\nimport { ClassNames, ErrorWhenType } from './ngx-error-message-interfaces'\nimport { NgxErrorMessagePipe } from './ngx-error-message.pipe'\n\n@Component({\n selector: 'ngx-error-message',\n template: `\n @if (hasError) {\n <small [class]=\"classNames.message\">{{\n ngControl.errors | ngxErrorMessage: lang : patternKey : fieldName\n }}</small>\n }\n `,\n imports: [NgxErrorMessagePipe],\n})\nexport class NgxErrorMessageComponent implements OnInit {\n @Input() classNames!: ClassNames\n @Input() fieldName!: string\n @Input() ngControl!: NgControl\n @Input() when!: ErrorWhenType | ErrorWhenType[]\n @Input() patternKey?: string\n\n protected lang?: string\n private readonly translate = inject(TranslateService)\n private readonly elementRef = inject(ElementRef)\n private readonly renderer = inject(Renderer2)\n private readonly destroy$ = new Subject<void>()\n private previousErrorState = false\n\n get hasError(): boolean {\n const invalid = Array.isArray(this.when)\n ? this.when.every((condition) => this.ngControl[condition])\n : this.ngControl[this.when]\n if (this.previousErrorState !== invalid) {\n this.previousErrorState = !!invalid\n this.updateErrorContainer(!!invalid)\n }\n return !!invalid\n }\n\n ngOnInit(): void {\n this.translate.onLangChange\n .pipe(distinctUntilChanged())\n .subscribe(({ lang }: LangChangeEvent) => (this.lang = lang))\n }\n\n private updateErrorContainer(invalid: boolean): void {\n const inputElement = this.elementRef.nativeElement.previousElementSibling\n if (!inputElement) {\n return\n }\n const errorClass = this.classNames.control\n invalid\n ? this.renderer.addClass(inputElement, errorClass)\n : this.renderer.removeClass(inputElement, errorClass)\n }\n}\n","import {\n Directive,\n ViewContainerRef,\n OnInit,\n Input,\n inject,\n ComponentRef,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { NgxErrorMessageComponent } from './ngx-error-message.component'\nimport { ClassNames, ErrorWhenType } from './ngx-error-message-interfaces'\n\n@Directive({\n selector: '[ngxErrorMessage]',\n})\nexport class NgxErrorMessageDirective implements OnInit {\n @Input() set ngxErrorMessage(value: string) {\n this.fieldName = value\n if (!this.componentRef) {\n return\n }\n this.componentRef.instance.fieldName = this.fieldName\n }\n @Input() classNames: ClassNames = {\n control: 'error-container',\n message: 'error-message',\n }\n @Input() patternKey?: string\n @Input() when: ErrorWhenType | ErrorWhenType[] = ['invalid', 'touched']\n\n private fieldName: string = ''\n private readonly ngControl = inject(NgControl)\n private readonly container = inject(ViewContainerRef)\n private componentRef?: ComponentRef<NgxErrorMessageComponent>\n\n ngOnInit(): void {\n const hostViewContainerRef = this.container\n if (!this.componentRef) {\n hostViewContainerRef.clear()\n this.componentRef = hostViewContainerRef.createComponent(\n NgxErrorMessageComponent,\n )\n }\n const instance = this.componentRef.instance\n instance.classNames = this.classNames\n instance.ngControl = this.ngControl\n instance.patternKey = this.patternKey\n instance.when = this.when\n instance.fieldName = this.fieldName\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { TranslateModule } from '@ngx-translate/core'\n\nimport { NgxErrorMessageComponent } from './ngx-error-message.component'\nimport { NgxErrorMessageDirective } from './ngx-error-message.directive'\nimport { NgxErrorMessagePipe } from './ngx-error-message.pipe'\nimport { ErrorMessageConfig } from './ngx-error-message-interfaces'\nimport { ERROR_MESSAGE_CONFIG } from './ngx-error-message.token'\nimport { NgxErrorMessageService } from './ngx-error-message.service'\n\n@NgModule({\n imports: [\n CommonModule,\n TranslateModule,\n NgxErrorMessageComponent,\n NgxErrorMessageDirective,\n NgxErrorMessagePipe,\n ],\n exports: [NgxErrorMessageDirective],\n})\nexport class NgxErrorMessageModule {\n static forRoot(\n config?: ErrorMessageConfig,\n ): ModuleWithProviders<NgxErrorMessageModule> {\n return NgxErrorMessageModule.forRootOrChild(config)\n }\n\n static forChild(\n config?: ErrorMessageConfig,\n ): ModuleWithProviders<NgxErrorMessageModule> {\n return NgxErrorMessageModule.forRootOrChild(config)\n }\n\n private static forRootOrChild(\n config?: ErrorMessageConfig,\n ): ModuleWithProviders<NgxErrorMessageModule> {\n return {\n ngModule: NgxErrorMessageModule,\n providers: [\n {\n provide: ERROR_MESSAGE_CONFIG,\n useValue: {\n validationsPrefix: config?.validationsPrefix ?? 'validations',\n patternsPrefix: config?.patternsPrefix ?? 'pattern',\n errorMessages: config?.errorMessages ?? {},\n },\n },\n NgxErrorMessageService,\n ],\n }\n }\n}\n","/*\n * Public API Surface of ngx-error-message\n */\n\nexport * from './lib/ngx-error-message.directive'\nexport * from './lib/ngx-error-message.service'\nexport { regEx } from './lib/ngx-error-message-constant'\nexport * from './lib/ngx-error-message.module'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;AAAA,MAAM,YAAY,GAAG,sCAAsC;AAC3D,MAAM,WAAW,GAAG,8BAA8B;AAClD,MAAM,QAAQ,GAAG,gBAAgB;AACjC,MAAM,WAAW,GAAG,sBAAsB;AAC1C,MAAM,QAAQ,GAAG,kBAAkB;AACnC,MAAM,MAAM,GAAG,4BAA4B;AAC3C,MAAM,IAAI,GAAG,uBAAuB;AACpC,MAAM,KAAK,GAAG,mBAAmB;AACjC,MAAM,QAAQ,GAAG,gBAAgB;AAEpB,MAAA,KAAK,GAAG;IACnB,WAAW,EAAE,IAAI,MAAM,CACrB,CAAA,EAAA,EAAK,WAAW,CAAA,EAAA,EAAK,QAAQ,CAAA,QAAA,EAAW,WAAW,CAAA,CAAA,CAAG,CACvD;AACD,IAAA,UAAU,EAAE,IAAI,MAAM,CAAC,IAAI,QAAQ,CAAA,EAAG,MAAM,CAAA,EAAG,IAAI,CAAG,EAAA,KAAK,CAAG,EAAA,QAAQ,GAAG,CAAC;AAC1E,IAAA,OAAO,EAAE,OAAO;AAChB,IAAA,YAAY,EAAE,UAAU;AACxB,IAAA,cAAc,EAAE,UAAU;AAC1B,IAAA,QAAQ,EAAE,4BAA4B;AACtC,IAAA,YAAY,EAAE,+BAA+B;IAC7C,EAAE,EAAE,IAAI,MAAM,CAAC,KAAK,YAAY,CAAA,MAAA,EAAS,YAAY,CAAA,MAAA,CAAQ,CAAC;;AAGzD,MAAM,aAAa,GAAG,kBAAkB;;ACpBxC,MAAM,oBAAoB,GAAG,IAAI,cAAc,CACpD,sBAAsB,CACvB;;MCIY,sBAAsB,CAAA;AAChB,IAAA,MAAM,GAAG,MAAM,CAAqB,oBAAoB,CAAC;IACzD,SAAS,GAAG,MAAM,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEzE,IAAA,eAAe,CACb,aAA+B,EAC/B,UAAmB,EACnB,SAAkB,EAAA;QAElB,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,EAAE;QACrD,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,EAAE;;AAGX,QAAA,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,SAAS;AAExC,QAAA,IAAI,OAAO,UAAU,KAAK,SAAS,EAAE;YACnC,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC;;AAG7C,QAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CACjD,UAAU,EACV,UAAU,CACX;YACD,OAAO,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,SAAS,CAAC;;QAEpD,MAAM,aAAa,GAAG,IAAI,CAAC,yBAAyB,CAClD,UAAU,EACV,aAAa,CACd;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC;;IAGpD,sBAAsB,CAC5B,KAA8B,EAC9B,UAAmB,EAAA;AAEnB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,iBAAiB,CAAW;QAClD,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAC9C,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,QAAQ,EAAE,KAAK,OAAO,CACxC;QACD,OAAO,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAA,CAAA,EAAI,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE;;IAGjF,yBAAyB,CAC/B,GAA4B,EAC5B,KAAa,EAAA;AAEb,QAAA,MAAM,GAAG,SAAS,CAAC,GACjB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AAC5D,QAAA,OAAO,SAAmB;;IAGpB,kBAAkB,CACxB,OAAe,EACf,MAA8B,EAAA;QAE9B,OAAO,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;;IAGjE,gBAAgB,CACtB,GAA4B,EAC5B,IAAY,EAAA;AAEZ,QAAA,OAAO;aACJ,KAAK,CAAC,GAAG;AACT,aAAA,MAAM,CACL,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,IAAK,GAAG,CAAC,GAAG,CAAW,EACxC,GAAG,CACiB;;AAGlB,IAAA,UAAU,CAAC,GAAW,EAAE,SAAkB,EAAE,KAAc,EAAA;AAChE,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,IAAI,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;AAC/B,YAAA,IAAI,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;SACxB;AACD,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAc,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACtD,YAAA,MAAM,eAAe,GACnB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,aAAc,EAAE,GAAG,CAAC,IAAI,EAAE;YAC9D,OAAO,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE,OAAO,CAAC;;QAG1D,OAAO,KAAK,IAAI;AACd,cAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CACrB,CAAG,EAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAA,CAAA,EAAI,GAAG,CAAE,CAAA,EACzC,OAAO;AAEX,cAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,GAAG,CAAA,CAAE,CAAC;;uGAzF7D,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAtB,sBAAsB,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC;;;MCDY,mBAAmB,CAAA;AACb,IAAA,mBAAmB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAC7D,IAAA,UAAU;IACV,WAAW,GAAG,EAAE;IAChB,UAAU,GAAG,EAAE;AAEvB,IAAA,SAAS,CACP,KAA8B,EAC9B,IAAa,EACb,UAAmB,EACnB,SAAkB,EAAA;QAElB,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,EAAE;;AAEX,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,UAAU,EAAE;AAC5B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE;AAC5B,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;;AAEvB,QAAA,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnD,QAAA,IAAI,YAAY,KAAK,IAAI,CAAC,WAAW,EAAE;AACrC,YAAA,IAAI,CAAC,WAAW,GAAG,YAAY;AAC/B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,eAAe,CACxD,KAAK,EACL,UAAU,EACV,SAAS,CACV;;AAEH,QAAA,OAAO,IAAI,CAAC,UAAU,IAAI,EAAE;;uGA5BnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,iBAAiB;AACxB,iBAAA;;;MCmBY,wBAAwB,CAAA;AAC1B,IAAA,UAAU;AACV,IAAA,SAAS;AACT,IAAA,SAAS;AACT,IAAA,IAAI;AACJ,IAAA,UAAU;AAET,IAAA,IAAI;AACG,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACpC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;IACvC,kBAAkB,GAAG,KAAK;AAElC,IAAA,IAAI,QAAQ,GAAA;QACV,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI;AACrC,cAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;cACxD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,OAAO,EAAE;AACvC,YAAA,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,OAAO;AACnC,YAAA,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC;;QAEtC,OAAO,CAAC,CAAC,OAAO;;IAGlB,QAAQ,GAAA;QACN,IAAI,CAAC,SAAS,CAAC;aACZ,IAAI,CAAC,oBAAoB,EAAE;AAC3B,aAAA,SAAS,CAAC,CAAC,EAAE,IAAI,EAAmB,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;;AAGzD,IAAA,oBAAoB,CAAC,OAAgB,EAAA;QAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,sBAAsB;QACzE,IAAI,CAAC,YAAY,EAAE;YACjB;;AAEF,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO;QAC1C;cACI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,UAAU;cAC/C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,UAAU,CAAC;;uGAvC9C,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EATzB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACS,mBAAmB,EAAA,IAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,CAAA;;2FAElB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAXpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,QAAQ,EAAE;;;;;;AAMT,EAAA,CAAA;oBACD,OAAO,EAAE,CAAC,mBAAmB,CAAC;AAC/B,iBAAA;8BAEU,UAAU,EAAA,CAAA;sBAAlB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,UAAU,EAAA,CAAA;sBAAlB;;;MCfU,wBAAwB,CAAA;IACnC,IAAa,eAAe,CAAC,KAAa,EAAA;AACxC,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB;;QAEF,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;;AAE9C,IAAA,UAAU,GAAe;AAChC,QAAA,OAAO,EAAE,iBAAiB;AAC1B,QAAA,OAAO,EAAE,eAAe;KACzB;AACQ,IAAA,UAAU;AACV,IAAA,IAAI,GAAoC,CAAC,SAAS,EAAE,SAAS,CAAC;IAE/D,SAAS,GAAW,EAAE;AACb,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC7C,IAAA,YAAY;IAEpB,QAAQ,GAAA;AACN,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,SAAS;AAC3C,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,oBAAoB,CAAC,KAAK,EAAE;YAC5B,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAC,eAAe,CACtD,wBAAwB,CACzB;;AAEH,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ;AAC3C,QAAA,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;AACrC,QAAA,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;AACnC,QAAA,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;AACrC,QAAA,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;AACzB,QAAA,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;;uGAjC1B,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC9B,iBAAA;8BAEc,eAAe,EAAA,CAAA;sBAA3B;gBAOQ,UAAU,EAAA,CAAA;sBAAlB;gBAIQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,IAAI,EAAA,CAAA;sBAAZ;;;MCPU,qBAAqB,CAAA;IAChC,OAAO,OAAO,CACZ,MAA2B,EAAA;AAE3B,QAAA,OAAO,qBAAqB,CAAC,cAAc,CAAC,MAAM,CAAC;;IAGrD,OAAO,QAAQ,CACb,MAA2B,EAAA;AAE3B,QAAA,OAAO,qBAAqB,CAAC,cAAc,CAAC,MAAM,CAAC;;IAG7C,OAAO,cAAc,CAC3B,MAA2B,EAAA;QAE3B,OAAO;AACL,YAAA,QAAQ,EAAE,qBAAqB;AAC/B,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,oBAAoB;AAC7B,oBAAA,QAAQ,EAAE;AACR,wBAAA,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,IAAI,aAAa;AAC7D,wBAAA,cAAc,EAAE,MAAM,EAAE,cAAc,IAAI,SAAS;AACnD,wBAAA,aAAa,EAAE,MAAM,EAAE,aAAa,IAAI,EAAE;AAC3C,qBAAA;AACF,iBAAA;gBACD,sBAAsB;AACvB,aAAA;SACF;;uGA7BQ,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,YAR9B,YAAY;YACZ,eAAe;YACf,wBAAwB;YACxB,wBAAwB;AACxB,YAAA,mBAAmB,aAEX,wBAAwB,CAAA,EAAA,CAAA;AAEvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,YAR9B,YAAY;YACZ,eAAe,CAAA,EAAA,CAAA;;2FAON,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAVjC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,eAAe;wBACf,wBAAwB;wBACxB,wBAAwB;wBACxB,mBAAmB;AACpB,qBAAA;oBACD,OAAO,EAAE,CAAC,wBAAwB,CAAC;AACpC,iBAAA;;;ACpBD;;AAEG;;ACFH;;AAEG;;;;"}