{"version":3,"file":"file-selector.mjs","sources":["../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/file-selector/file-selector-base.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/file-selector/file-selector-types.service.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/file-selector/file-selector.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/file-selector/file-selector.html","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/file-selector/file-selector.module.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const SBB_FILE_SELECTOR_OPTIONS = new InjectionToken<SbbFileSelectorOptions>(\n  'FILE_SELECTOR_OPTIONS',\n);\n\nexport interface SbbFileSelectorOptions {\n  /**\n   * Categories of file types accepted by sbb-file-selector component.\n   * It is optional.\n   */\n  accept?: string;\n  /**\n   * Attribute whose state specifies the preferred facing mode for the media capture mechanism.\n   * The attribute's keywords are user and environment, which map to the respective states user and environment.\n   * It is optional.\n   */\n  capture?: 'user' | 'environment';\n  /**\n   * Mode on file selector component to chose more files to upload.\n   * It is optional.\n   */\n  multiple?: boolean;\n  /** Set if the component should add files on top of the already selected ones or keep default input file behaviour */\n  multipleMode?: 'default' | 'persistent';\n}\n\nexport type FileTypeCategory = 'generic' | 'doc' | 'image' | 'pdf' | 'audio' | 'video' | 'zip';\n\nexport const SBB_FILE_TYPES = {\n  TEXT: ['text/*'],\n\n  IMAGE: ['image/*'],\n  IMAGE_JPG: ['image/jpeg', 'image/pjpeg'],\n  IMAGE_PNG: ['image/png'],\n  IMAGE_SVG: ['image/svg+xml'],\n  IMAGE_GIF: ['image/gif'],\n\n  AUDIO: ['audio/*'],\n  AUDIO_MP4: ['audio/mp4'],\n  AUDIO_MP3: ['audio/mpeg', 'audio/mp3'],\n  AUDIO_OGG: ['audio/ogg'],\n  AUDIO_WAVE: ['audio/wave'],\n  AUDIO_WAV: ['audio/wav', 'audio/x-wav', 'audio/x-pn-wav', 'audio/webm'],\n\n  VIDEO: ['video/*'],\n  VIDEO_MP4: ['video/mp4'],\n  VIDEO_MPEG: ['video/mpeg'],\n  VIDEO_OGG: ['video/ogg'],\n  VIDEO_MOV: ['video/quicktime'],\n  VIDEO_WEBM: ['video/webm'],\n  VIDEO_AVI: ['video/x-msvideo'],\n  VIDEO_WMV: ['video/x-ms-wmv'],\n\n  PDF: ['application/pdf'],\n\n  MS_WORD_DOC: [\n    'application/msword',\n    'application/msword',\n    'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n    'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n    'application/vnd.ms-word.document.macroEnabled.12',\n    'application/vnd.ms-word.template.macroEnabled.12',\n  ],\n\n  MS_EXCEL: [\n    'application/vnd.ms-excel',\n    'application/vnd.ms-excel',\n    'application/vnd.ms-excel',\n    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n    'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n    'application/vnd.ms-excel.sheet.macroEnabled.12',\n    'application/vnd.ms-excel.template.macroEnabled.12',\n    'application/vnd.ms-excel.addin.macroEnabled.12',\n    'application/vnd.ms-excel.sheet.binary.macroEnabled.12',\n  ],\n\n  MS_POWERPOINT: [\n    'application/vnd.ms-powerpoint',\n    'application/vnd.ms-powerpoint',\n    'application/vnd.ms-powerpoint',\n    'application/vnd.ms-powerpoint',\n    'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n    'application/vnd.openxmlformats-officedocument.presentationml.template',\n    'application/vnd.openxmlformats-officedocument.presentationml.slideshow',\n    'application/vnd.ms-powerpoint.addin.macroEnabled.12',\n    'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\n    'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\n    'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',\n  ],\n\n  ZIP: [\n    'application/x-gtar',\n    'application/x-gcompress',\n    'application/compress',\n    'application/x-tar',\n    'application/x-rar-compressed',\n    'application/octet-stream',\n    'application/x-zip-compressed',\n    'application/zip-compressed',\n    'application/x-7z-compressed',\n    'application/gzip',\n    'application/zip',\n    'application/x-bzip2',\n  ],\n};\n\nexport const SBB_CATEGORY_MIME_TYPES = new Map<FileTypeCategory, string[]>()\n  .set('doc', [\n    ...SBB_FILE_TYPES.MS_WORD_DOC,\n    ...SBB_FILE_TYPES.MS_EXCEL,\n    ...SBB_FILE_TYPES.MS_POWERPOINT,\n  ])\n  .set('audio', [\n    ...SBB_FILE_TYPES.AUDIO_MP4,\n    ...SBB_FILE_TYPES.AUDIO_MP3,\n    ...SBB_FILE_TYPES.AUDIO_OGG,\n    ...SBB_FILE_TYPES.AUDIO_WAVE,\n    ...SBB_FILE_TYPES.AUDIO_WAV,\n  ])\n  .set('image', [\n    ...SBB_FILE_TYPES.IMAGE_GIF,\n    ...SBB_FILE_TYPES.IMAGE_JPG,\n    ...SBB_FILE_TYPES.IMAGE_PNG,\n    ...SBB_FILE_TYPES.IMAGE_SVG,\n  ])\n  .set('pdf', SBB_FILE_TYPES.PDF)\n  .set('video', [\n    ...SBB_FILE_TYPES.VIDEO_MP4,\n    ...SBB_FILE_TYPES.VIDEO_MPEG,\n    ...SBB_FILE_TYPES.VIDEO_OGG,\n    ...SBB_FILE_TYPES.VIDEO_MOV,\n    ...SBB_FILE_TYPES.VIDEO_WEBM,\n    ...SBB_FILE_TYPES.VIDEO_AVI,\n    ...SBB_FILE_TYPES.VIDEO_WMV,\n  ])\n  .set('zip', SBB_FILE_TYPES.ZIP);\n","import { Injectable } from '@angular/core';\n\nimport { FileTypeCategory, SBB_CATEGORY_MIME_TYPES, SBB_FILE_TYPES } from './file-selector-base';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class SbbFileSelectorTypesService {\n  /**\n   * Returns the file type category/ies from given mime type.\n   * @param mimeType Mime type of a file.\n   * @returns File type category/ies.\n   */\n  getFileTypeCategoryByMimeType(mimeType: string): FileTypeCategory {\n    return (\n      Array.from(SBB_CATEGORY_MIME_TYPES).find(\n        ([_f, mimeTypes]) => mimeTypes.indexOf(mimeType) >= 0,\n      )?.[0] ?? 'generic'\n    );\n  }\n\n  /**\n   * Returns all accepted formats.\n   * @param typeCats File type category/ies.\n   * @returns All formats accepted.\n   */\n  getAcceptString(...typeCats: FileTypeCategory[] | FileTypeCategory[][]): string {\n    return (typeCats as FileTypeCategory[][])\n      .reduce((current, next) => current.concat(next), [] as FileTypeCategory[])\n      .map((t) => this._buildAcceptString(t))\n      .filter((a) => !!a)\n      .join(',');\n  }\n\n  /**\n   * Returns the file extension from the given file name.\n   * Returns empty string, if the file name has no extension or has the pattern '.name'.\n   * @param fileName File name.\n   * @return File with the name in input.\n   */\n  fileExtension(fileName: string): string {\n    const res = fileName.split('.');\n    return res.length === 1 || (res.length === 2 && res[0] === '') ? '' : res.pop()!;\n  }\n\n  /**\n   * Returns the file extension of the file with name in input.\n   * @param fileName File name.\n   * @returns File extension.\n   */\n  removeFileExtension(fileName: string): string {\n    const extension = this.fileExtension(fileName);\n    return !extension ? fileName : fileName.substring(0, fileName.length - extension.length - 1);\n  }\n\n  /**\n   * Returns the file size with the correct unit of measure.\n   * @param bytes File size in bytes.\n   * @returns File size with the correct unit of measure.\n   */\n  formatFileSize(bytes: number): string {\n    if (bytes === 0) {\n      return '0 B';\n    }\n\n    const k = 1024;\n    const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n    const i = Math.floor(Math.log(bytes) / Math.log(k));\n    return parseFloat((bytes / Math.pow(k, i)).toFixed(0)) + ' ' + sizes[i];\n  }\n\n  private _buildAcceptString(fileTypeCategory: FileTypeCategory): string {\n    switch (fileTypeCategory) {\n      case 'doc':\n        return SBB_FILE_TYPES.MS_WORD_DOC.concat(\n          SBB_FILE_TYPES.MS_EXCEL,\n          SBB_FILE_TYPES.MS_POWERPOINT,\n        ).join(',');\n      case 'image':\n        return SBB_FILE_TYPES.IMAGE.join(',');\n      case 'pdf':\n        return SBB_FILE_TYPES.PDF.join(',');\n      case 'video':\n        return SBB_FILE_TYPES.VIDEO.join(',');\n      case 'audio':\n        return SBB_FILE_TYPES.AUDIO.join(',');\n      case 'zip':\n        return SBB_FILE_TYPES.ZIP.join(',');\n      default:\n        return '';\n    }\n  }\n}\n","// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/// <reference types=\"@angular/localize/init\" />\n\nimport {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  inject,\n  Input,\n  Output,\n  Renderer2,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SbbIconModule } from '@sbb-esta/angular/icon';\n\nimport {\n  FileTypeCategory,\n  SbbFileSelectorOptions,\n  SBB_FILE_SELECTOR_OPTIONS,\n} from './file-selector-base';\nimport { SbbFileSelectorTypesService } from './file-selector-types.service';\n\nlet nextId = 0;\n\n@Component({\n  selector: 'sbb-file-selector',\n  exportAs: 'sbbFileSelector',\n  templateUrl: './file-selector.html',\n  styleUrls: ['./file-selector.css'],\n  host: {\n    class: 'sbb-file-selector',\n    '[attr.id]': 'this.id',\n  },\n  inputs: ['disabled'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => SbbFileSelector),\n      multi: true,\n    },\n  ],\n  imports: [SbbIconModule],\n})\nexport class SbbFileSelector implements ControlValueAccessor, SbbFileSelectorOptions {\n  private _fileTypeService = inject(SbbFileSelectorTypesService);\n  private _renderer = inject(Renderer2);\n  private _changeDetector = inject(ChangeDetectorRef);\n\n  _labelUploadFile: string = $localize`:Button label to select files for upload@@sbbFileSelectorUploadFile:Upload file`;\n\n  _labelRemoveFile: string = $localize`:Hidden button label to remove a file from the selection list@@sbbFileSelectorRemoveFile:Remove file`;\n\n  private _uniqueId = `sbb-file-selector-${++nextId}`;\n\n  /** Whether the file selector is disabled. */\n  @Input({ transform: booleanAttribute }) disabled: boolean = false;\n\n  /** Unique id of the element. */\n  @Input() id: string = this._uniqueId;\n\n  /** Id for the inner input field. */\n  get inputId() {\n    return `${this.id || this._uniqueId}-input`;\n  }\n\n  /** Categories of file types accepted by sbb-file-selector component. */\n  @Input() accept?: string;\n  /** Attribute whose state specifies the preferred facing mode for the media capture mechanism. */\n  @Input() capture?: 'user' | 'environment';\n\n  /** Mode on file selector component to chose more files to upload. */\n  @Input({ transform: booleanAttribute })\n  multiple: boolean = false;\n\n  /** Set if the component should add files on top of the already selected ones or keep default input file behaviour. */\n  @Input() multipleMode: 'default' | 'persistent' = 'default';\n\n  /** Event emitted to a change on file selector component (for example the uploading of files). */\n  @Output() fileChanged: EventEmitter<File[]> = new EventEmitter<File[]>();\n  /** @docs-private */\n  @ViewChild('fileInput', { static: true }) fileInput!: ElementRef<HTMLInputElement>;\n\n  /** List of files uploaded. */\n  filesList!: File[];\n\n  /** Property that listens changes on file selector. */\n  _onChange: (_: any) => void = (_) => {};\n\n  /** Property that catches the interaction with user. */\n  _onTouched: () => void = () => {};\n\n  constructor(...args: unknown[]);\n  constructor() {\n    const options = inject<SbbFileSelectorOptions>(SBB_FILE_SELECTOR_OPTIONS, { optional: true })!;\n\n    if (options) {\n      this.accept = options.accept;\n      this.capture = options.capture;\n      this.multiple = !!options.multiple;\n      this.multipleMode = options.multipleMode || this.multipleMode;\n    }\n  }\n\n  /**\n   * Applies changes on the list of files uploaded.\n   * @param files Files uploaded.\n   */\n  fileChange(files: FileList | Event) {\n    if (!files) {\n      return;\n    }\n    if (files instanceof FileList) {\n      this.applyChanges(Array.from(files));\n      return;\n    }\n\n    const target: HTMLInputElement | null = files.target as any;\n    if (target && target.files) {\n      this.applyChanges(Array.from(target.files));\n    }\n  }\n\n  /**\n   * Applies changes on sbb-file-selector.\n   * @param files Files uploaded.\n   * @param action add or remove\n   */\n  applyChanges(files: File[], action: 'add' | 'remove' = 'add'): void {\n    const filesToAdd = action === 'add' ? this._getFileListByMode(files) : files;\n    this._renderer.setProperty(this.fileInput.nativeElement, 'value', null);\n    this._onChange(filesToAdd);\n    this.writeValue(filesToAdd);\n    this.fileChanged.emit(filesToAdd);\n  }\n\n  /**\n   * Returns the list of files without the file deleted.\n   * @param file File to delete.\n   * @returns List of files without the file deleted.\n   */\n  removeFile(file: File): void {\n    const filteredList = this.filesList.filter((f) => !this._checkFileEquality(f, file));\n    this.applyChanges(filteredList, 'remove');\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  writeValue(value: any) {\n    this.filesList = value;\n    this._changeDetector.detectChanges();\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  registerOnChange(fn: any) {\n    this._onChange = fn;\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  registerOnTouched(fn: any) {\n    this._onTouched = fn;\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  setDisabledState(isDisabled: boolean) {\n    this.disabled = isDisabled;\n    this._changeDetector.markForCheck();\n  }\n\n  /** Returns the file type category by the file type in input. */\n  _resolveFileTypeCategory(file: File): FileTypeCategory {\n    return this._fileTypeService.getFileTypeCategoryByMimeType(file.type);\n  }\n\n  /** Get the file name without the extension. */\n  _fileNameNoExtension(file: File): string {\n    return this._fileTypeService.removeFileExtension(file.name);\n  }\n\n  /** Get the file extension of the given file. */\n  _fileExtension(file: File): string {\n    return this._fileTypeService.fileExtension(file.name);\n  }\n\n  /** Returns the formatted file size of the given file. */\n  _fileSizeFormatted(file: File): string {\n    return this._fileTypeService.formatFileSize(file.size);\n  }\n\n  private _getFileListByMode(incomingFiles: File[]): File[] {\n    if (this.multiple && this.multipleMode === 'persistent') {\n      return incomingFiles\n        .filter(\n          (f) => this.filesList.findIndex((flItem) => this._checkFileEquality(f, flItem)) === -1,\n        )\n        .concat(this.filesList);\n    }\n\n    return incomingFiles;\n  }\n\n  private _checkFileEquality(file1: File, file2: File): boolean {\n    return (\n      file1.name === file2.name &&\n      file1.size === file2.size &&\n      file1.lastModified === file2.lastModified\n    );\n  }\n}\n","<label\n  class=\"sbb-file-selector-label sbb-secondary-button\"\n  [class.sbb-disabled]=\"disabled\"\n  [for]=\"inputId\"\n>\n  <input\n    type=\"file\"\n    class=\"cdk-visually-hidden\"\n    #fileInput\n    [attr.id]=\"inputId\"\n    [attr.accept]=\"accept\"\n    [attr.capture]=\"capture\"\n    [attr.multiple]=\"multiple || null\"\n    [disabled]=\"disabled\"\n    (change)=\"fileChange($event)\"\n    (blur)=\"_onTouched()\"\n  />\n  {{ _labelUploadFile }}\n  <span class=\"sbb-file-selector-upload-icon\">\n    <sbb-icon class=\"sbb-icon-scaled\" svgIcon=\"upload-small\"></sbb-icon>\n  </span>\n</label>\n\n@if (filesList && filesList.length) {\n  <ul class=\"sbb-file-selector-list sbb-clean-list sbb-icon-scaled\">\n    @for (file of filesList; track file) {\n      <li>\n        <div role=\"presentation\" class=\"sbb-file-selector-list-type-icon\">\n          @switch (_resolveFileTypeCategory(file)) {\n            @case ('doc') {\n              <sbb-icon svgIcon=\"document-text-small\"></sbb-icon>\n            }\n            @case ('image') {\n              <sbb-icon svgIcon=\"document-image-small\"></sbb-icon>\n            }\n            @case ('pdf') {\n              <sbb-icon svgIcon=\"document-pdf-small\"></sbb-icon>\n            }\n            @case ('audio') {\n              <sbb-icon svgIcon=\"document-sound-small\"></sbb-icon>\n            }\n            @case ('video') {\n              <sbb-icon svgIcon=\"document-video-small\"></sbb-icon>\n            }\n            @case ('zip') {\n              <sbb-icon svgIcon=\"document-zip-small\"></sbb-icon>\n            }\n            @default {\n              <sbb-icon svgIcon=\"document-standard-small\"></sbb-icon>\n            }\n          }\n        </div>\n        <span class=\"sbb-file-selector-list-desc\"\n          >{{ _fileNameNoExtension(file) }} (<span class=\"sbb-file-selector-list-file-ext\">{{\n            _fileExtension(file)\n          }}</span\n          >, {{ _fileSizeFormatted(file) }})</span\n        >\n        <button\n          type=\"button\"\n          class=\"sbb-file-selector-list-remove-icon sbb-button-reset-frameless\"\n          (click)=\"removeFile(file)\"\n        >\n          <span class=\"cdk-visually-hidden\">{{ _labelRemoveFile }}</span>\n          <sbb-icon svgIcon=\"trash-small\"></sbb-icon>\n        </button>\n      </li>\n    }\n  </ul>\n}\n","import { NgModule } from '@angular/core';\nimport { SbbCommonModule } from '@sbb-esta/angular/core';\nimport { SbbIconModule } from '@sbb-esta/angular/icon';\n\nimport { SbbFileSelector } from './file-selector';\n\n@NgModule({\n  imports: [SbbCommonModule, SbbIconModule, SbbFileSelector],\n  exports: [SbbFileSelector],\n})\nexport class SbbFileSelectorModule {}\n"],"names":[],"mappings":";;;;;;;MAEa,yBAAyB,GAAG,IAAI,cAAc,CACzD,uBAAuB;AA0BlB,MAAM,cAAc,GAAG;EAC5B,IAAI,EAAE,CAAC,QAAQ,CAAC;EAEhB,KAAK,EAAE,CAAC,SAAS,CAAC;AAClB,EAAA,SAAS,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC;EACxC,SAAS,EAAE,CAAC,WAAW,CAAC;EACxB,SAAS,EAAE,CAAC,eAAe,CAAC;EAC5B,SAAS,EAAE,CAAC,WAAW,CAAC;EAExB,KAAK,EAAE,CAAC,SAAS,CAAC;EAClB,SAAS,EAAE,CAAC,WAAW,CAAC;AACxB,EAAA,SAAS,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC;EACtC,SAAS,EAAE,CAAC,WAAW,CAAC;EACxB,UAAU,EAAE,CAAC,YAAY,CAAC;EAC1B,SAAS,EAAE,CAAC,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,YAAY,CAAC;EAEvE,KAAK,EAAE,CAAC,SAAS,CAAC;EAClB,SAAS,EAAE,CAAC,WAAW,CAAC;EACxB,UAAU,EAAE,CAAC,YAAY,CAAC;EAC1B,SAAS,EAAE,CAAC,WAAW,CAAC;EACxB,SAAS,EAAE,CAAC,iBAAiB,CAAC;EAC9B,UAAU,EAAE,CAAC,YAAY,CAAC;EAC1B,SAAS,EAAE,CAAC,iBAAiB,CAAC;EAC9B,SAAS,EAAE,CAAC,gBAAgB,CAAC;EAE7B,GAAG,EAAE,CAAC,iBAAiB,CAAC;AAExB,EAAA,WAAW,EAAE,CACX,oBAAoB,EACpB,oBAAoB,EACpB,yEAAyE,EACzE,yEAAyE,EACzE,kDAAkD,EAClD,kDAAkD,CACnD;AAED,EAAA,QAAQ,EAAE,CACR,0BAA0B,EAC1B,0BAA0B,EAC1B,0BAA0B,EAC1B,mEAAmE,EACnE,sEAAsE,EACtE,gDAAgD,EAChD,mDAAmD,EACnD,gDAAgD,EAChD,uDAAuD,CACxD;EAED,aAAa,EAAE,CACb,+BAA+B,EAC/B,+BAA+B,EAC/B,+BAA+B,EAC/B,+BAA+B,EAC/B,2EAA2E,EAC3E,uEAAuE,EACvE,wEAAwE,EACxE,qDAAqD,EACrD,4DAA4D,EAC5D,4DAA4D,EAC5D,yDAAyD,CAC1D;EAED,GAAG,EAAE,CACH,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,EACnB,8BAA8B,EAC9B,0BAA0B,EAC1B,8BAA8B,EAC9B,4BAA4B,EAC5B,6BAA6B,EAC7B,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB;;AAIlB,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAA8B,CACzE,GAAG,CAAC,KAAK,EAAE,CACV,GAAG,cAAc,CAAC,WAAW,EAC7B,GAAG,cAAc,CAAC,QAAQ,EAC1B,GAAG,cAAc,CAAC,aAAa,CAChC,CAAC,CACD,GAAG,CAAC,OAAO,EAAE,CACZ,GAAG,cAAc,CAAC,SAAS,EAC3B,GAAG,cAAc,CAAC,SAAS,EAC3B,GAAG,cAAc,CAAC,SAAS,EAC3B,GAAG,cAAc,CAAC,UAAU,EAC5B,GAAG,cAAc,CAAC,SAAS,CAC5B,CAAC,CACD,GAAG,CAAC,OAAO,EAAE,CACZ,GAAG,cAAc,CAAC,SAAS,EAC3B,GAAG,cAAc,CAAC,SAAS,EAC3B,GAAG,cAAc,CAAC,SAAS,EAC3B,GAAG,cAAc,CAAC,SAAS,CAC5B,CAAC,CACD,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,CAC9B,GAAG,CAAC,OAAO,EAAE,CACZ,GAAG,cAAc,CAAC,SAAS,EAC3B,GAAG,cAAc,CAAC,UAAU,EAC5B,GAAG,cAAc,CAAC,SAAS,EAC3B,GAAG,cAAc,CAAC,SAAS,EAC3B,GAAG,cAAc,CAAC,UAAU,EAC5B,GAAG,cAAc,CAAC,SAAS,EAC3B,GAAG,cAAc,CAAC,SAAS,CAC5B,CAAC,CACD,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG;;MCjInB,2BAA2B,CAAA;EAMtC,6BAA6B,CAAC,QAAgB,EAAA;AAC5C,IAAA,OACE,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,IAAI,CACtC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,KAAK,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CACtD,GAAG,CAAC,CAAC,IAAI,SAAS;AAEvB,EAAA;EAOA,eAAe,CAAC,GAAG,QAAmD,EAAA;AACpE,IAAA,OAAQ,QAAiC,CACtC,MAAM,CAAC,CAAC,OAAO,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAwB,CAAC,CACzE,GAAG,CAAE,CAAC,IAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CACtC,MAAM,CAAE,CAAC,IAAK,CAAC,CAAC,CAAC,CAAC,CAClB,IAAI,CAAC,GAAG,CAAC;AACd,EAAA;EAQA,aAAa,CAAC,QAAgB,EAAA;AAC5B,IAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;IAC/B,OAAO,GAAG,CAAC,MAAM,KAAK,CAAC,IAAK,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,EAAG,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,EAAG;AAClF,EAAA;EAOA,mBAAmB,CAAC,QAAgB,EAAA;AAClC,IAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;IAC9C,OAAO,CAAC,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9F,EAAA;EAOA,cAAc,CAAC,KAAa,EAAA;IAC1B,IAAI,KAAK,KAAK,CAAC,EAAE;AACf,MAAA,OAAO,KAAK;AACd,IAAA;IAEA,MAAM,CAAC,GAAG,IAAI;IACd,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AACnE,IAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnD,OAAO,UAAU,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;AACzE,EAAA;EAEQ,kBAAkB,CAAC,gBAAkC,EAAA;AAC3D,IAAA,QAAQ,gBAAgB;AACtB,MAAA,KAAK,KAAK;AACR,QAAA,OAAO,cAAc,CAAC,WAAW,CAAC,MAAM,CACtC,cAAc,CAAC,QAAQ,EACvB,cAAc,CAAC,aAAa,CAC7B,CAAC,IAAI,CAAC,GAAG,CAAC;AACb,MAAA,KAAK,OAAO;AACV,QAAA,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AACvC,MAAA,KAAK,KAAK;AACR,QAAA,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AACrC,MAAA,KAAK,OAAO;AACV,QAAA,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AACvC,MAAA,KAAK,OAAO;AACV,QAAA,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AACvC,MAAA,KAAK,KAAK;AACR,QAAA,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AACrC,MAAA;AACE,QAAA,OAAO,EAAE;AACb;AACF,EAAA;;;;;UApFW,2BAA2B;AAAA,IAAA,IAAA,EAAA,EAAA;AAAA,IAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA;AAAA,GAAA,CAAA;AAA3B,EAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA;AAAA,IAAA,UAAA,EAAA,QAAA;AAAA,IAAA,OAAA,EAAA,QAAA;AAAA,IAAA,QAAA,EAAA,EAAA;AAAA,IAAA,IAAA,EAAA,2BAA2B;gBAF1B;AAAM,GAAA,CAAA;;;;;;QAEP,2BAA2B;AAAA,EAAA,UAAA,EAAA,CAAA;UAHvC,UAAU;AAAC,IAAA,IAAA,EAAA,CAAA;AACV,MAAA,UAAU,EAAE;KACb;;;;ACsBD,IAAI,MAAM,GAAG,CAAC;MAuBD,eAAe,CAAA;AAClB,EAAA,gBAAgB,GAAG,MAAM,CAAC,2BAA2B,CAAC;AACtD,EAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,EAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;EAEnD,gBAAgB,GAAW,SAAS,CAAA,+EAAA,CAAiF;EAErH,gBAAgB,GAAW,SAAS,CAAA,oGAAA,CAAsG;AAElI,EAAA,SAAS,GAAG,CAAA,kBAAA,EAAqB,EAAE,MAAM,CAAA,CAAE;AAGX,EAAA,QAAQ,GAAY,KAAK;EAGxD,EAAE,GAAW,IAAI,CAAC,SAAS;AAGpC,EAAA,IAAI,OAAO,GAAA;IACT,OAAO,CAAA,EAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,CAAA,MAAA,CAAQ;AAC7C,EAAA;EAGS,MAAM;EAEN,OAAO;AAIhB,EAAA,QAAQ,GAAY,KAAK;AAGhB,EAAA,YAAY,GAA6B,SAAS;AAGjD,EAAA,WAAW,GAAyB,IAAI,YAAY,EAAU;EAE9B,SAAS;EAGnD,SAAS;AAGT,EAAA,SAAS,GAAsB,CAAC,IAAI,CAAE,CAAC;EAGvC,UAAU,GAAe,MAAK,CAAE,CAAC;AAGjC,EAAA,WAAA,GAAA;AACE,IAAA,MAAM,OAAO,GAAG,MAAM,CAAyB,yBAAyB,EAAE;AAAE,MAAA,QAAQ,EAAE;AAAI,KAAE,CAAE;AAE9F,IAAA,IAAI,OAAO,EAAE;AACX,MAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;AAC5B,MAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO;AAC9B,MAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ;MAClC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY;AAC/D,IAAA;AACF,EAAA;EAMA,UAAU,CAAC,KAAuB,EAAA;IAChC,IAAI,CAAC,KAAK,EAAE;AACV,MAAA;AACF,IAAA;IACA,IAAI,KAAK,YAAY,QAAQ,EAAE;MAC7B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpC,MAAA;AACF,IAAA;AAEA,IAAA,MAAM,MAAM,GAA4B,KAAK,CAAC,MAAa;AAC3D,IAAA,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE;MAC1B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7C,IAAA;AACF,EAAA;AAOA,EAAA,YAAY,CAAC,KAAa,EAAE,MAAA,GAA2B,KAAK,EAAA;AAC1D,IAAA,MAAM,UAAU,GAAG,MAAM,KAAK,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,KAAK;AAC5E,IAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AACvE,IAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AAC1B,IAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;AAC3B,IAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AACnC,EAAA;EAOA,UAAU,CAAC,IAAU,EAAA;AACnB,IAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAE,CAAC,IAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACpF,IAAA,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC;AAC3C,EAAA;EAGA,UAAU,CAAC,KAAU,EAAA;IACnB,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,IAAA,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;AACtC,EAAA;EAGA,gBAAgB,CAAC,EAAO,EAAA;IACtB,IAAI,CAAC,SAAS,GAAG,EAAE;AACrB,EAAA;EAGA,iBAAiB,CAAC,EAAO,EAAA;IACvB,IAAI,CAAC,UAAU,GAAG,EAAE;AACtB,EAAA;EAGA,gBAAgB,CAAC,UAAmB,EAAA;IAClC,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,IAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AACrC,EAAA;EAGA,wBAAwB,CAAC,IAAU,EAAA;IACjC,OAAO,IAAI,CAAC,gBAAgB,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC;AACvE,EAAA;EAGA,oBAAoB,CAAC,IAAU,EAAA;IAC7B,OAAO,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7D,EAAA;EAGA,cAAc,CAAC,IAAU,EAAA;IACvB,OAAO,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AACvD,EAAA;EAGA,kBAAkB,CAAC,IAAU,EAAA;IAC3B,OAAO,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AACxD,EAAA;EAEQ,kBAAkB,CAAC,aAAqB,EAAA;IAC9C,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY,EAAE;AACvD,MAAA,OAAO,aAAa,CACjB,MAAM,CACJ,CAAC,IAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,MAAM,IAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,EAAE,CACvF,CACA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;AAC3B,IAAA;AAEA,IAAA,OAAO,aAAa;AACtB,EAAA;AAEQ,EAAA,kBAAkB,CAAC,KAAW,EAAE,KAAW,EAAA;IACjD,OACE,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IACzB,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IACzB,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY;AAE7C,EAAA;;;;;UAlKW,eAAe;AAAA,IAAA,IAAA,EAAA,EAAA;AAAA,IAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA;AAAA,GAAA,CAAA;AAAf,EAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA;AAAA,IAAA,UAAA,EAAA,QAAA;AAAA,IAAA,OAAA,EAAA,QAAA;AAAA,IAAA,IAAA,EAAA,eAAe;AAAA,IAAA,YAAA,EAAA,IAAA;AAAA,IAAA,QAAA,EAAA,mBAAA;AAAA,IAAA,MAAA,EAAA;AAAA,MAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAYN,gBAAgB,CAAA;AAAA,MAAA,EAAA,EAAA,IAAA;AAAA,MAAA,MAAA,EAAA,QAAA;AAAA,MAAA,OAAA,EAAA,SAAA;AAAA,MAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAgBhB,gBAAgB,CAAA;AAAA,MAAA,YAAA,EAAA;KAAA;AAAA,IAAA,OAAA,EAAA;AAAA,MAAA,WAAA,EAAA;KAAA;AAAA,IAAA,IAAA,EAAA;AAAA,MAAA,UAAA,EAAA;AAAA,QAAA,SAAA,EAAA;OAAA;AAAA,MAAA,cAAA,EAAA;KAAA;AAAA,IAAA,SAAA,EArCzB,CACT;AACE,MAAA,OAAO,EAAE,iBAAiB;AAC1B,MAAA,WAAW,EAAE,UAAU,CAAC,MAAM,eAAe,CAAC;AAC9C,MAAA,KAAK,EAAE;AACR,KAAA,CACF;AAAA,IAAA,WAAA,EAAA,CAAA;AAAA,MAAA,YAAA,EAAA,WAAA;AAAA,MAAA,KAAA,EAAA,IAAA;MAAA,SAAA,EAAA,CAAA,WAAA,CAAA;AAAA,MAAA,WAAA,EAAA,IAAA;AAAA,MAAA,MAAA,EAAA;AAAA,KAAA,CAAA;IAAA,QAAA,EAAA,CAAA,iBAAA,CAAA;AAAA,IAAA,QAAA,EAAA,EAAA;AAAA,IAAA,QAAA,EChDH,u0EAsEA;;;;YDrBY;AAAa,KAAA,EAAA;AAAA,MAAA,IAAA,EAAA,WAAA;MAAA,IAAA,EAAA,EAAA,CAAA,OAAA;AAAA,MAAA,QAAA,EAAA,UAAA;AAAA,MAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,IAAA,CAAA;MAAA,QAAA,EAAA,CAAA,SAAA;AAAA,KAAA,CAAA;AAAA,IAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA;AAAA,IAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA;AAAA,GAAA,CAAA;;;;;;QAEZ,eAAe;AAAA,EAAA,UAAA,EAAA,CAAA;UArB3B,SAAS;;gBACE,mBAAmB;AAAA,MAAA,QAAA,EACnB,iBAAiB;AAAA,MAAA,IAAA,EAGrB;AACJ,QAAA,KAAK,EAAE,mBAAmB;AAC1B,QAAA,WAAW,EAAE;OACd;MAAA,MAAA,EACO,CAAC,UAAU,CAAC;MAAA,eAAA,EACH,uBAAuB,CAAC,MAAM;MAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI;AAAA,MAAA,SAAA,EAC1B,CACT;AACE,QAAA,OAAO,EAAE,iBAAiB;AAC1B,QAAA,WAAW,EAAE,UAAU,CAAC,qBAAqB,CAAC;AAC9C,QAAA,KAAK,EAAE;AACR,OAAA,CACF;MAAA,OAAA,EACQ,CAAC,aAAa,CAAC;AAAA,MAAA,QAAA,EAAA,u0EAAA;MAAA,MAAA,EAAA,CAAA,stHAAA;KAAA;;;;;YAcvB,KAAK;aAAC;AAAE,QAAA,SAAS,EAAE;OAAkB;;;YAGrC;;;YAQA;;;YAEA;;;YAGA,KAAK;aAAC;AAAE,QAAA,SAAS,EAAE;OAAkB;;;YAIrC;;;YAGA;;;YAEA,SAAS;MAAC,IAAA,EAAA,CAAA,WAAW,EAAE;AAAE,QAAA,MAAM,EAAE;OAAM;;;;;ME9E7B,qBAAqB,CAAA;;;;;UAArB,qBAAqB;AAAA,IAAA,IAAA,EAAA,EAAA;AAAA,IAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA;AAAA,GAAA,CAAA;AAArB,EAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA;AAAA,IAAA,UAAA,EAAA,QAAA;AAAA,IAAA,OAAA,EAAA,QAAA;AAAA,IAAA,QAAA,EAAA,EAAA;AAAA,IAAA,IAAA,EAAA,qBAAqB;cAHtB,eAAe,EAAE,aAAa,EAAE,eAAe;cAC/C,eAAe;AAAA,GAAA,CAAA;AAEd,EAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA;AAAA,IAAA,UAAA,EAAA,QAAA;AAAA,IAAA,OAAA,EAAA,QAAA;AAAA,IAAA,QAAA,EAAA,EAAA;AAAA,IAAA,IAAA,EAAA,qBAAqB;AAAA,IAAA,OAAA,EAAA,CAHtB,eAAe,EAAE,aAAa,EAAE,eAAe;AAAA,GAAA,CAAA;;;;;;QAG9C,qBAAqB;AAAA,EAAA,UAAA,EAAA,CAAA;UAJjC,QAAQ;AAAC,IAAA,IAAA,EAAA,CAAA;AACR,MAAA,OAAO,EAAE,CAAC,eAAe,EAAE,aAAa,EAAE,eAAe,CAAC;MAC1D,OAAO,EAAE,CAAC,eAAe;KAC1B;;;;;;"}