{"version":3,"file":"ngneat-input-mask.mjs","sources":["../../../../projects/ngneat/input-mask/src/lib/config.ts","../../../../projects/ngneat/input-mask/src/lib/input-mask.directive.ts","../../../../projects/ngneat/input-mask/src/lib/input-mask.module.ts","../../../../projects/ngneat/input-mask/src/lib/constants.ts","../../../../projects/ngneat/input-mask/src/public-api.ts","../../../../projects/ngneat/input-mask/src/ngneat-input-mask.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport class InputMaskConfig {\n  isAsync = false;\n  inputSelector = 'input';\n}\n\nexport const INPUT_MASK_CONFIG = new InjectionToken<InputMaskConfig>(\n  'InputMaskConfig'\n);\n","/* eslint-disable @typescript-eslint/member-ordering */\nimport { isPlatformServer } from '@angular/common';\nimport {\n  Directive,\n  ElementRef,\n  HostListener,\n  Inject,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Optional,\n  PLATFORM_ID,\n  Renderer2,\n  Self,\n} from '@angular/core';\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  NgControl,\n  ValidationErrors,\n  Validator,\n} from '@angular/forms';\nimport _Inputmask from 'inputmask';\nimport type Inputmask from 'inputmask';\n\nimport { InputmaskOptions } from './types';\nimport { InputMaskConfig, INPUT_MASK_CONFIG } from './config';\n\n// The initial issue: https://github.com/ngneat/input-mask/issues/40\n// Webpack 5 has module resolution changes. Libraries should configure the `output.export`\n// (https://webpack.js.org/configuration/output/#outputlibraryexport) property when published in\n// a UMD format, to tell Webpack that there's a default export.\n// The `_Inputmask` is an object with 2 properties: `{ __esModule: true, default: Inputmask }`.\n// But we want to be backwards-compatible, so we try to read the `default` property first; otherwise, we fall back to `_Inputmask`.\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst InputmaskConstructor =\n  (_Inputmask as unknown as { default?: Inputmask.Static }).default ||\n  _Inputmask;\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: '[inputMask]',\n})\nexport class InputMaskDirective<T = any>\n  implements OnInit, OnDestroy, ControlValueAccessor, Validator\n{\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  static ngAcceptInputType_inputMask: InputmaskOptions<any> | null | undefined;\n\n  /**\n   * Helps you to create input-mask based on https://github.com/RobinHerbots/Inputmask\n   * Supports form-validation out-of-the box.\n   * Visit https://github.com/ngneat/input-mask for more info.\n   */\n  @Input()\n  set inputMask(inputMask: InputmaskOptions<T> | null | undefined) {\n    if (inputMask) {\n      this.inputMaskOptions = inputMask;\n      this.updateInputMask();\n    }\n  }\n\n  inputMaskPlugin: Inputmask.Instance | null = null;\n  nativeInputElement: HTMLInputElement | null = null;\n  defaultInputMaskConfig = new InputMaskConfig();\n\n  private inputMaskOptions: InputmaskOptions<T> | null = null;\n\n  /* The original `onChange` function coming from the `setUpControl`. */\n  private onChange: (value: T | null) => void = () => {};\n\n  private mutationObserver: MutationObserver | null = null;\n\n  constructor(\n    @Inject(PLATFORM_ID) private platformId: string,\n    private elementRef: ElementRef<HTMLInputElement | any>,\n    private renderer: Renderer2,\n    @Optional() @Self() public ngControl: NgControl | null,\n    @Inject(INPUT_MASK_CONFIG) config: InputMaskConfig,\n    private ngZone: NgZone\n  ) {\n    if (this.ngControl != null) {\n      this.ngControl.valueAccessor = this;\n    }\n    this.setNativeInputElement(config);\n  }\n\n  @HostListener('input', ['$event.target.value'])\n  onInput = (_: any) => {};\n\n  @HostListener('blur', ['$event.target.value'])\n  onTouched = (_: any) => {};\n\n  ngOnInit(): void {\n    if (this.control) {\n      this.control.setValidators(\n        this.control.validator\n          ? [this.control.validator, this.validate]\n          : [this.validate]\n      );\n\n      this.control.updateValueAndValidity();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.removeInputMaskPlugin();\n    this.mutationObserver?.disconnect();\n  }\n\n  writeValue(value: string): void {\n    const formatter = this.inputMaskOptions?.formatter;\n    if (this.nativeInputElement) {\n      this.renderer.setProperty(\n        this.nativeInputElement,\n        'value',\n        formatter && value ? formatter(value) : value ?? ''\n      );\n    }\n  }\n\n  registerOnChange(onChange: (value: T | null) => void): void {\n    this.onChange = onChange;\n    const parser = this.inputMaskOptions?.parser;\n    this.onInput = (value) => {\n      this.onChange(parser && value ? parser(value) : value);\n    };\n  }\n\n  registerOnTouched(fn: VoidFunction): void {\n    this.onTouched = fn;\n  }\n\n  validate = (control: AbstractControl): ValidationErrors | null =>\n    !control.value || !this.inputMaskPlugin || this.inputMaskPlugin.isValid()\n      ? null\n      : { inputMask: true };\n\n  setDisabledState(disabled: boolean): void {\n    if (this.nativeInputElement) {\n      this.renderer.setProperty(this.nativeInputElement, 'disabled', disabled);\n    }\n  }\n\n  private updateInputMask(): void {\n    this.removeInputMaskPlugin();\n    this.createInputMaskPlugin();\n    // This re-creates the `onInput` function since `inputMaskOptions` might be changed and the `parser`\n    // property now differs.\n    this.registerOnChange(this.onChange);\n  }\n\n  private createInputMaskPlugin(): void {\n    const { nativeInputElement, inputMaskOptions } = this;\n\n    if (\n      isPlatformServer(this.platformId) ||\n      !nativeInputElement ||\n      inputMaskOptions === null ||\n      Object.keys(inputMaskOptions).length === 0\n    ) {\n      return;\n    }\n\n    const { parser, formatter, ...options } = inputMaskOptions;\n    this.inputMaskPlugin = this.ngZone.runOutsideAngular(() =>\n      new InputmaskConstructor(options).mask(nativeInputElement)\n    );\n\n    if (this.control) {\n      setTimeout(() => {\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        this.control!.updateValueAndValidity();\n      });\n    }\n  }\n\n  private get control(): AbstractControl | null | undefined {\n    return this.ngControl?.control;\n  }\n\n  private setNativeInputElement(config: InputMaskConfig) {\n    if (this.elementRef.nativeElement.tagName === 'INPUT') {\n      this.nativeInputElement = this.elementRef.nativeElement;\n    } else {\n      this.defaultInputMaskConfig = {\n        ...this.defaultInputMaskConfig,\n        ...config,\n      };\n      if (this.defaultInputMaskConfig.isAsync) {\n        // Create an observer instance linked to the callback function\n        this.mutationObserver = new MutationObserver((mutationsList) => {\n          for (const mutation of mutationsList) {\n            if (mutation.type === 'childList') {\n              const nativeInputElement =\n                this.elementRef.nativeElement.querySelector(\n                  this.defaultInputMaskConfig.inputSelector\n                );\n              if (nativeInputElement) {\n                this.nativeInputElement = nativeInputElement;\n                this.mutationObserver?.disconnect();\n                this.createInputMaskPlugin();\n              }\n            }\n          }\n        });\n\n        // Start observing the target node for configured mutations\n        this.mutationObserver.observe(this.elementRef.nativeElement, {\n          childList: true,\n          subtree: true,\n        });\n      } else {\n        this.nativeInputElement = this.elementRef.nativeElement.querySelector(\n          this.defaultInputMaskConfig.inputSelector\n        );\n      }\n    }\n  }\n\n  private removeInputMaskPlugin(): void {\n    this.inputMaskPlugin?.remove();\n    this.inputMaskPlugin = null;\n  }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { InputMaskConfig, INPUT_MASK_CONFIG } from './config';\nimport { InputMaskDirective } from './input-mask.directive';\n\n@NgModule({\n  declarations: [InputMaskDirective],\n  exports: [InputMaskDirective],\n  providers: [\n    {\n      provide: INPUT_MASK_CONFIG,\n      useClass: InputMaskConfig,\n    },\n  ],\n})\nexport class InputMaskModule {\n  static forRoot(\n    config?: Partial<InputMaskConfig>\n  ): ModuleWithProviders<InputMaskModule> {\n    return {\n      ngModule: InputMaskModule,\n      providers: [{ provide: INPUT_MASK_CONFIG, useValue: config }],\n    };\n  }\n}\n","import { InputmaskOptions } from './types';\n\nexport const createMask = <T>(\n  options: string | InputmaskOptions<T>\n): InputmaskOptions<T> =>\n  typeof options === 'string' ? { mask: options } : options;\n","/*\n * Public API Surface of input-mask\n */\n\nexport * from './lib/input-mask.directive';\nexport * from './lib/input-mask.module';\nexport * from './lib/constants';\nexport * from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;MAEa,eAAe,CAAA;AAA5B,IAAA,WAAA,GAAA;QACE,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;QAChB,IAAa,CAAA,aAAA,GAAG,OAAO,CAAC;KACzB;AAAA,CAAA;AAEM,MAAM,iBAAiB,GAAG,IAAI,cAAc,CACjD,iBAAiB,CAClB;;ACTD;AA6BA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA,MAAM,oBAAoB,GACvB,UAAwD,CAAC,OAAO;AACjE,IAAA,UAAU,CAAC;MAMA,kBAAkB,CAAA;IA8B7B,WAC+B,CAAA,UAAkB,EACvC,UAA8C,EAC9C,QAAmB,EACA,SAA2B,EAC3B,MAAuB,EAC1C,MAAc,EAAA;QALO,IAAU,CAAA,UAAA,GAAV,UAAU,CAAQ;QACvC,IAAU,CAAA,UAAA,GAAV,UAAU,CAAoC;QAC9C,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAW;QACA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkB;QAE9C,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QAjBxB,IAAe,CAAA,eAAA,GAA8B,IAAI,CAAC;QAClD,IAAkB,CAAA,kBAAA,GAA4B,IAAI,CAAC;AACnD,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,eAAe,EAAE,CAAC;QAEvC,IAAgB,CAAA,gBAAA,GAA+B,IAAI,CAAC;;AAGpD,QAAA,IAAA,CAAA,QAAQ,GAA8B,MAAK,GAAG,CAAC;QAE/C,IAAgB,CAAA,gBAAA,GAA4B,IAAI,CAAC;AAiBzD,QAAA,IAAA,CAAA,OAAO,GAAG,CAAC,CAAM,KAAI,GAAG,CAAC;AAGzB,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,CAAM,KAAI,GAAG,CAAC;QA0C3B,IAAQ,CAAA,QAAA,GAAG,CAAC,OAAwB,KAClC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE;AACvE,cAAE,IAAI;AACN,cAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAvDxB,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC;AACrC,SAAA;AACD,QAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;KACpC;AApCD;;;;AAIG;IACH,IACI,SAAS,CAAC,SAAiD,EAAA;AAC7D,QAAA,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;YAClC,IAAI,CAAC,eAAe,EAAE,CAAC;AACxB,SAAA;KACF;IAiCD,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,aAAa,CACxB,IAAI,CAAC,OAAO,CAAC,SAAS;kBAClB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC;AACzC,kBAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CACpB,CAAC;AAEF,YAAA,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;AACvC,SAAA;KACF;IAED,WAAW,GAAA;QACT,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE,CAAC;KACrC;AAED,IAAA,UAAU,CAAC,KAAa,EAAA;AACtB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC;QACnD,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CACvB,IAAI,CAAC,kBAAkB,EACvB,OAAO,EACP,SAAS,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,EAAE,CACpD,CAAC;AACH,SAAA;KACF;AAED,IAAA,gBAAgB,CAAC,QAAmC,EAAA;AAClD,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC;AAC7C,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,KAAK,KAAI;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AACzD,SAAC,CAAC;KACH;AAED,IAAA,iBAAiB,CAAC,EAAgB,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAOD,IAAA,gBAAgB,CAAC,QAAiB,EAAA;QAChC,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC1E,SAAA;KACF;IAEO,eAAe,GAAA;QACrB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,qBAAqB,EAAE,CAAC;;;AAG7B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACtC;IAEO,qBAAqB,GAAA;AAC3B,QAAA,MAAM,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;AAEtD,QAAA,IACE,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;AACjC,YAAA,CAAC,kBAAkB;AACnB,YAAA,gBAAgB,KAAK,IAAI;YACzB,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,KAAK,CAAC,EAC1C;YACA,OAAO;AACR,SAAA;QAED,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,gBAAgB,CAAC;QAC3D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MACnD,IAAI,oBAAoB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAC3D,CAAC;QAEF,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,UAAU,CAAC,MAAK;;AAEd,gBAAA,IAAI,CAAC,OAAQ,CAAC,sBAAsB,EAAE,CAAC;AACzC,aAAC,CAAC,CAAC;AACJ,SAAA;KACF;AAED,IAAA,IAAY,OAAO,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;KAChC;AAEO,IAAA,qBAAqB,CAAC,MAAuB,EAAA;QACnD,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,KAAK,OAAO,EAAE;YACrD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;AACzD,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,sBAAsB,GAAG;gBAC5B,GAAG,IAAI,CAAC,sBAAsB;AAC9B,gBAAA,GAAG,MAAM;aACV,CAAC;AACF,YAAA,IAAI,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE;;gBAEvC,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,CAAC,aAAa,KAAI;AAC7D,oBAAA,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE;AACpC,wBAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE;AACjC,4BAAA,MAAM,kBAAkB,GACtB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CACzC,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAC1C,CAAC;AACJ,4BAAA,IAAI,kBAAkB,EAAE;AACtB,gCAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;AAC7C,gCAAA,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE,CAAC;gCACpC,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC9B,6BAAA;AACF,yBAAA;AACF,qBAAA;AACH,iBAAC,CAAC,CAAC;;gBAGH,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;AAC3D,oBAAA,SAAS,EAAE,IAAI;AACf,oBAAA,OAAO,EAAE,IAAI;AACd,iBAAA,CAAC,CAAC;AACJ,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CACnE,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAC1C,CAAC;AACH,aAAA;AACF,SAAA;KACF;IAEO,qBAAqB,GAAA;AAC3B,QAAA,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;KAC7B;;+GApLU,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EA+BnB,WAAW,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAIX,iBAAiB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAnChB,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,gCAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAET,oBAAA,QAAQ,EAAE,aAAa;AACxB,iBAAA,CAAA;;0BAgCI,MAAM;2BAAC,WAAW,CAAA;;0BAGlB,QAAQ;;0BAAI,IAAI;;0BAChB,MAAM;2BAAC,iBAAiB,CAAA;iEAvBvB,SAAS,EAAA,CAAA;sBADZ,KAAK;gBAkCN,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO,EAAE,CAAC,qBAAqB,CAAC,CAAA;gBAI9C,SAAS,EAAA,CAAA;sBADR,YAAY;uBAAC,MAAM,EAAE,CAAC,qBAAqB,CAAC,CAAA;;;MC9ElC,eAAe,CAAA;IAC1B,OAAO,OAAO,CACZ,MAAiC,EAAA;QAEjC,OAAO;AACL,YAAA,QAAQ,EAAE,eAAe;YACzB,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;SAC9D,CAAC;KACH;;4GARU,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;6GAAf,eAAe,EAAA,YAAA,EAAA,CATX,kBAAkB,CAAA,EAAA,OAAA,EAAA,CACvB,kBAAkB,CAAA,EAAA,CAAA,CAAA;AAQjB,eAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAPf,SAAA,EAAA;AACT,QAAA;AACE,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,QAAQ,EAAE,eAAe;AAC1B,SAAA;AACF,KAAA,EAAA,CAAA,CAAA;2FAEU,eAAe,EAAA,UAAA,EAAA,CAAA;kBAV3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,kBAAkB,CAAC;oBAClC,OAAO,EAAE,CAAC,kBAAkB,CAAC;AAC7B,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,QAAQ,EAAE,eAAe;AAC1B,yBAAA;AACF,qBAAA;AACF,iBAAA,CAAA;;;ACXY,MAAA,UAAU,GAAG,CACxB,OAAqC,KAErC,OAAO,OAAO,KAAK,QAAQ,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG;;ACLpD;;AAEG;;ACFH;;AAEG;;;;"}