UNPKG

ngx-formcontrol-errors-msgs

Version:

A directive for showing errors in Angular form controls on reactive forms

1 lines 17.2 kB
{"version":3,"file":"ngx-formcontrol-errors-msgs.mjs","sources":["../../../projects/ngx-formcontrol-errors-msgs/src/lib/data/messages.ts","../../../projects/ngx-formcontrol-errors-msgs/src/lib/ngx-formcontrol-errors.component.ts","../../../projects/ngx-formcontrol-errors-msgs/src/lib/providers/error-msg-component-factory/error-msg-component-factory-token.ts","../../../projects/ngx-formcontrol-errors-msgs/src/lib/providers/error-msg-parser/error-msg-parser-token.ts","../../../projects/ngx-formcontrol-errors-msgs/src/lib/providers/messages/messages-provider-token.ts","../../../projects/ngx-formcontrol-errors-msgs/src/lib/providers/error-msg-parser/utils/validation-errors-parser.utils.ts","../../../projects/ngx-formcontrol-errors-msgs/src/lib/providers/error-msg-parser/error-msg-parser.service.ts","../../../projects/ngx-formcontrol-errors-msgs/src/lib/formcontrol-errors.directive.ts","../../../projects/ngx-formcontrol-errors-msgs/src/public-api.ts","../../../projects/ngx-formcontrol-errors-msgs/src/ngx-formcontrol-errors-msgs.ts"],"sourcesContent":["import { KeyValueObject } from '../types';\n\n/**\n * Readable messages for the built-in valitators\n */\nexport const Messages: KeyValueObject = {\n required: 'This field is required',\n min: 'The minimun allowed values is {{min}}',\n max: 'The max allowed value is {{max}}',\n minlength: 'The minimun allowed length is {{requiredLength}}',\n maxlength: 'The max allowed length is {{requiredLength}}',\n email: 'Invalid email',\n pattern: 'Invalid pattern',\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n} from '@angular/core';\n\nimport {\n ErrorMessage,\n ErrorMsgComponent,\n} from './providers/error-msg-component-factory/error-msg-component';\n\n@Component({\n selector: 'ngx-formcontrol-errors',\n standalone: true,\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgxFormcontrolErrorsComponent implements ErrorMsgComponent {\n @Input()\n set messages(msgs: ErrorMessage[]) {\n if (!msgs?.length) {\n this.elementRef.nativeElement.innerHTML = '';\n return;\n }\n const msg = msgs[0].message;\n this.elementRef.nativeElement.innerHTML = msg;\n }\n\n constructor(private readonly elementRef: ElementRef<HTMLElement>) {}\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { ErrorMessageComponentFactory } from './error-msg-component-factory';\n\nexport const ERROR_MSG_COMPONENT_FACTORY = new InjectionToken<\n ErrorMessageComponentFactory\n>('ERROR_MSG_COMPONENT_FACTORY');\n","import { InjectionToken } from '@angular/core';\n\nimport { ErrorMsgParser } from './error-msg-parser';\n\nexport const ERROR_MSG_PARSER = new InjectionToken<ErrorMsgParser>(\n 'ERROR_MSG_PARSER'\n);\n","import { InjectionToken } from '@angular/core';\n\nimport { KeyValueObject } from '../../types';\n\n/**\n * InjectionToken to allow customization of messages by injecting new ones\n */\nexport const FORM_ERROR_MESSAGES_PROVIDER = new InjectionToken<KeyValueObject>(\n 'FORM_ERROR_MESSAGES_PROVIDER'\n);\n","import { ValidationErrors } from '@angular/forms';\n\nexport function validationErrors2KeyValue(\n error: ValidationErrors\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n): { key: string; value: any }[] {\n const errorKeys = Object.keys(error);\n return errorKeys.map((keyError) => {\n const errorData = error[keyError];\n return { key: keyError, value: errorData };\n });\n}\n","import {\n Inject,\n Injectable,\n Optional,\n} from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\n\nimport { Messages } from '../../data';\nimport { KeyValueObject } from '../../types';\nimport {\n ErrorMessage,\n} from '../error-msg-component-factory/error-msg-component';\nimport { FORM_ERROR_MESSAGES_PROVIDER } from '../messages';\nimport { ErrorMsgParser } from './error-msg-parser';\nimport {\n validationErrors2KeyValue,\n} from './utils/validation-errors-parser.utils';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ErrorMsgParserService implements ErrorMsgParser {\n private errorMessages: KeyValueObject = { ...Messages };\n\n constructor(\n @Optional()\n @Inject(FORM_ERROR_MESSAGES_PROVIDER)\n private customErrorMessages: KeyValueObject\n ) {\n this.errorMessages = {\n ...this.errorMessages,\n ...(this.customErrorMessages || {}),\n };\n }\n\n getMessageByKey(key: string): string {\n return this.errorMessages[key];\n }\n\n errorMessageParser(\n errorKey: string,\n valueKey: string,\n value: string | number | null\n ): string {\n const message = this.getMessageByKey(errorKey);\n if (!message) {\n throw new Error(`Error message for ${errorKey} not found`);\n }\n\n return message.trim().replace(`{{${valueKey}}}`, (value ?? '').toString());\n }\n\n parse(error: ValidationErrors): ErrorMessage[] {\n return validationErrors2KeyValue(error).map(({ key, value }) => {\n let valueKey = key;\n\n if (valueKey === 'minlength' || valueKey === 'maxlength') {\n valueKey = 'requiredLength';\n }\n\n return {\n message: this.errorMessageParser(key, valueKey, value[valueKey]),\n value,\n };\n });\n }\n}\n","import {\n ComponentRef,\n Directive,\n Host,\n HostListener,\n Inject,\n OnDestroy,\n OnInit,\n Optional,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n FormControlName,\n FormGroupDirective,\n ValidationErrors,\n} from '@angular/forms';\n\nimport { Subscription } from 'rxjs';\n\nimport {\n NgxFormcontrolErrorsComponent,\n} from './ngx-formcontrol-errors.component';\nimport {\n ErrorMsgComponent,\n} from './providers/error-msg-component-factory/error-msg-component';\nimport {\n ErrorMessageComponentFactory,\n} from './providers/error-msg-component-factory/error-msg-component-factory';\nimport {\n ERROR_MSG_COMPONENT_FACTORY,\n} from './providers/error-msg-component-factory/error-msg-component-factory-token';\nimport {\n ERROR_MSG_PARSER,\n ErrorMsgParser,\n ErrorMsgParserService,\n} from './providers/error-msg-parser';\n\n/**\n * Allows ease way to display `ValidationErrors` in a form.\n *\n * @example\n *\n * ```typescript\n * @Component({\n * selector: 'app-form',\n * standalone: true,\n * imports: [FormcontrolErrorsDirective, ReactiveFormsModule],\n * template: `\n * <form [formGroup]=\"form\">\n * <div class=\"form-row\">\n * <label for=\"name\">Name</label>\n * <input id=\"name\" type=\"text\" formControlName=\"name\" ngxFormcontrolErrors>\n * </div>\n * <div class=\"form-row\">\n * <label for=\"email\">Email</label>\n * <input id=\"email\" type=\"email\" formControlName=\"email\" ngxFormcontrolErrors>\n * </div>\n * </form>\n * `\n * })\n * export class AppComponent {\n *\n * form = this.formBuilder.group({\n * name: ['', [Validators.required, Validators.maxLength(10)]],\n * email: ['', [Validators.required, Validators.email]],\n * });\n *\n * }\n * ```\n *\n */\n@Directive({\n selector: '[ngxFormcontrolErrors]',\n standalone: true,\n})\nexport class FormcontrolErrorsDirective implements OnInit, OnDestroy {\n private errorInfoComponent: ComponentRef<ErrorMsgComponent> | null = null;\n private control!: AbstractControl;\n private sub$ = new Subscription();\n private errorParser?: ErrorMsgParser;\n\n /**\n * @internal\n */\n @HostListener('blur')\n onBlur(): void {\n this.control.markAsTouched();\n this.validataStatus(this.control.status);\n }\n\n constructor(\n private readonly viewContainerRef: ViewContainerRef,\n private readonly errorMsgParser: ErrorMsgParserService,\n private formGroup: FormGroupDirective,\n @Optional() @Host() private readonly formControlName: FormControlName,\n @Optional() @Host() private readonly formControl: FormControl,\n @Optional()\n @Inject(ERROR_MSG_PARSER)\n private readonly customErrorMsgParser: ErrorMsgParser,\n @Optional()\n @Inject(ERROR_MSG_COMPONENT_FACTORY)\n private readonly errorMessageComponentFactory?: ErrorMessageComponentFactory\n ) {}\n\n /**\n * @internal\n */\n ngOnInit(): void {\n this.control = this.formControlName?.control || this.formControl;\n\n if (!this.control) {\n throw new Error(\n 'No control found, `ngxFormControlErrors` must be used with `formControlName` or `formControl`'\n );\n }\n\n this.errorParser = this.customErrorMsgParser || this.errorMsgParser;\n\n if (this.errorMessageComponentFactory) {\n this.errorInfoComponent =\n this.errorMessageComponentFactory.createComponent(\n this.viewContainerRef\n );\n } else {\n this.errorInfoComponent = this.viewContainerRef.createComponent(\n NgxFormcontrolErrorsComponent\n );\n }\n\n this.sub$.add(\n this.formGroup.ngSubmit.subscribe(() => {\n if (!this.control.touched) {\n this.control.markAsTouched();\n this.validataStatus(this.control?.status);\n }\n })\n );\n\n this.sub$.add(\n this.control.statusChanges?.subscribe((status) => {\n this.validataStatus(status);\n })\n );\n }\n\n /**\n * @internal\n */\n ngOnDestroy(): void {\n this.sub$.unsubscribe();\n }\n\n /**\n * @internal\n */\n validataStatus(status: string): void {\n if (!this.errorInfoComponent) {\n throw new Error('No error info component found');\n }\n\n if (!this.errorParser) {\n throw new Error('No error parser found');\n }\n\n if ('INVALID' === status && this.control?.touched) {\n this.errorInfoComponent.instance.messages = this.errorParser.parse(\n this.control.errors as ValidationErrors\n );\n } else if (\n 'DISABLED' === status ||\n status === 'VALID' ||\n this.control?.untouched\n ) {\n this.errorInfoComponent.instance.messages = null;\n this.errorInfoComponent.changeDetectorRef.detectChanges();\n }\n }\n}\n","/*\n * Public API Surface of ngx-formcontrol-errors\n */\n\nexport * from './lib/data';\nexport * from './lib/formcontrol-errors.directive';\nexport * from './lib/providers/error-msg-component-factory/error-msg-component';\nexport * from './lib/providers/error-msg-component-factory/error-msg-component-factory';\nexport * from './lib/providers/error-msg-component-factory/error-msg-component-factory-token';\nexport * from './lib/providers/error-msg-parser/error-msg-parser';\nexport * from './lib/providers/error-msg-parser/error-msg-parser-token';\nexport * from './lib/providers/error-msg-parser/error-msg-parser.service';\nexport * from './lib/providers/error-msg-parser/utils/validation-errors-parser.utils';\nexport * from './lib/providers/messages/messages-provider-token';\nexport * from './lib/types/key-value-object';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ErrorMsgParserService"],"mappings":";;;;;AAEA;;AAEG;AACU,MAAA,QAAQ,GAAmB;AACtC,IAAA,QAAQ,EAAE,wBAAwB;AAClC,IAAA,GAAG,EAAE,uCAAuC;AAC5C,IAAA,GAAG,EAAE,kCAAkC;AACvC,IAAA,SAAS,EAAE,kDAAkD;AAC7D,IAAA,SAAS,EAAE,8CAA8C;AACzD,IAAA,KAAK,EAAE,eAAe;AACtB,IAAA,OAAO,EAAE,iBAAiB;;;MCMf,6BAA6B,CAAA;IACxC,IACI,QAAQ,CAAC,IAAoB,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE;YACjB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,GAAG,EAAE;YAC5C;;QAEF,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO;QAC3B,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,GAAG,GAAG;;AAG/C,IAAA,WAAA,CAA6B,UAAmC,EAAA;QAAnC,IAAU,CAAA,UAAA,GAAV,UAAU;;8GAX5B,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,oHAH9B,CAAE,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGD,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBANzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAE,CAAA;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;+EAGK,QAAQ,EAAA,CAAA;sBADX;;;MCfU,2BAA2B,GAAG,IAAI,cAAc,CAE3D,6BAA6B;;MCFlB,gBAAgB,GAAG,IAAI,cAAc,CAChD,kBAAkB;;ACDpB;;AAEG;MACU,4BAA4B,GAAG,IAAI,cAAc,CAC5D,8BAA8B;;ACN1B,SAAU,yBAAyB,CACvC;AACF;;IAEE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACpC,IAAA,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;AAChC,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC;QACjC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;AAC5C,KAAC,CAAC;AACJ;;MCUa,qBAAqB,CAAA;AAGhC,IAAA,WAAA,CAGU,mBAAmC,EAAA;QAAnC,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;AALrB,QAAA,IAAA,CAAA,aAAa,GAAmB,EAAE,GAAG,QAAQ,EAAE;QAOrD,IAAI,CAAC,aAAa,GAAG;YACnB,GAAG,IAAI,CAAC,aAAa;AACrB,YAAA,IAAI,IAAI,CAAC,mBAAmB,IAAI,EAAE,CAAC;SACpC;;AAGH,IAAA,eAAe,CAAC,GAAW,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;;AAGhC,IAAA,kBAAkB,CAChB,QAAgB,EAChB,QAAgB,EAChB,KAA6B,EAAA;QAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QAC9C,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAA,UAAA,CAAY,CAAC;;QAG5D,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAA,EAAA,CAAI,EAAE,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC;;AAG5E,IAAA,KAAK,CAAC,KAAuB,EAAA;AAC3B,QAAA,OAAO,yBAAyB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAI;YAC7D,IAAI,QAAQ,GAAG,GAAG;YAElB,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,WAAW,EAAE;gBACxD,QAAQ,GAAG,gBAAgB;;YAG7B,OAAO;AACL,gBAAA,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAChE,KAAK;aACN;AACH,SAAC,CAAC;;AA3CO,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,qBAAqB,kBAKtB,4BAA4B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAL3B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA;;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAKI;;0BACA,MAAM;2BAAC,4BAA4B;;;ACaxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCG;MAKU,0BAA0B,CAAA;AAMrC;;AAEG;IAEH,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;QAC5B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;;AAG1C,IAAA,WAAA,CACmB,gBAAkC,EAClC,cAAqC,EAC9C,SAA6B,EACA,eAAgC,EAChC,WAAwB,EAG5C,oBAAoC,EAGpC,4BAA2D,EAAA;QAV3D,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAc,CAAA,cAAA,GAAd,cAAc;QACvB,IAAS,CAAA,SAAA,GAAT,SAAS;QACoB,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAW,CAAA,WAAA,GAAX,WAAW;QAG/B,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QAGpB,IAA4B,CAAA,4BAAA,GAA5B,4BAA4B;QAzBvC,IAAkB,CAAA,kBAAA,GAA2C,IAAI;AAEjE,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAE;;AA0BjC;;AAEG;IACH,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,OAAO,IAAI,IAAI,CAAC,WAAW;AAEhE,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,MAAM,IAAI,KAAK,CACb,+FAA+F,CAChG;;QAGH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,cAAc;AAEnE,QAAA,IAAI,IAAI,CAAC,4BAA4B,EAAE;AACrC,YAAA,IAAI,CAAC,kBAAkB;gBACrB,IAAI,CAAC,4BAA4B,CAAC,eAAe,CAC/C,IAAI,CAAC,gBAAgB,CACtB;;aACE;YACL,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAC7D,6BAA6B,CAC9B;;AAGH,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CACX,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAK;AACrC,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACzB,gBAAA,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;gBAC5B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;;SAE5C,CAAC,CACH;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CACX,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,MAAM,KAAI;AAC/C,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;SAC5B,CAAC,CACH;;AAGH;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;;AAGzB;;AAEG;AACH,IAAA,cAAc,CAAC,MAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAC5B,YAAA,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC;;AAGlD,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC;;QAG1C,IAAI,SAAS,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE;AACjD,YAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAChE,IAAI,CAAC,OAAO,CAAC,MAA0B,CACxC;;aACI,IACL,UAAU,KAAK,MAAM;AACrB,YAAA,MAAM,KAAK,OAAO;AAClB,YAAA,IAAI,CAAC,OAAO,EAAE,SAAS,EACvB;YACA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI;AAChD,YAAA,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,aAAa,EAAE;;;8GAnGlD,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAsB3B,gBAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAGhB,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAzB1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,MAAA,EAAA,UAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;0BAoBI;;0BAAY;;0BACZ;;0BAAY;;0BACZ;;0BACA,MAAM;2BAAC,gBAAgB;;0BAEvB;;0BACA,MAAM;2BAAC,2BAA2B;yCAfrC,MAAM,EAAA,CAAA;sBADL,YAAY;uBAAC,MAAM;;;ACtFtB;;AAEG;;ACFH;;AAEG;;;;"}