{"version":3,"file":"moxa-formoxa-mx-file-uploader.mjs","sources":["../../../../libs/formoxa/mx-file-uploader/src/lib/service/mx-file-uploader-intl.service.ts","../../../../libs/formoxa/mx-file-uploader/src/lib/components/mx-file-uploader-loading-mask.component.ts","../../../../libs/formoxa/mx-file-uploader/src/lib/components/mx-file-uploader.component.ts","../../../../libs/formoxa/mx-file-uploader/src/lib/components/mx-file-uploader.compoment.html","../../../../libs/formoxa/mx-file-uploader/src/lib/validators/mx-file-uploader.validator.ts","../../../../libs/formoxa/mx-file-uploader/src/moxa-formoxa-mx-file-uploader.ts"],"sourcesContent":["import { Injectable, Optional, Provider, SkipSelf } from '@angular/core';\nimport { TranslationLabels, TranslationService } from '@moxa/formoxa/mx-shared';\n\nexport interface MxFileUploaderIntlLabels extends TranslationLabels {\n  browseButtonLabel: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class MxFileUploaderIntlService extends TranslationService<MxFileUploaderIntlLabels> {\n  defaultLabels: MxFileUploaderIntlLabels = {\n    browseButtonLabel: 'Browse'\n  };\n\n  constructor() {\n    super();\n    this.registerTranslations('en', this.defaultLabels);\n  }\n}\n\nfunction MX_FILE_UPLOADER_INTL_PROVIDER_FACTORY(parent: MxFileUploaderIntlService): MxFileUploaderIntlService {\n  return parent || new MxFileUploaderIntlService();\n}\n\nexport const MX_FILE_UPLOADER_INTL_PROVIDER: Provider = {\n  provide: MxFileUploaderIntlService,\n  useFactory: MX_FILE_UPLOADER_INTL_PROVIDER_FACTORY,\n  deps: [[new Optional(), new SkipSelf(), MxFileUploaderIntlService]]\n};\n","import { Component } from '@angular/core';\nimport { MxProgressSpinnerComponent } from '@moxa/formoxa/mx-progress-spinner';\n\n@Component({\n  selector: 'mx-loading-mask',\n  imports: [MxProgressSpinnerComponent],\n  styleUrls: ['./mx-file-uploader-loading-mask.component.scss'],\n  template: ` <mx-progress-spinner></mx-progress-spinner> `,\n  host: { class: 'mx-loading-mask' }\n})\nexport class MxFileUploaderLoadingMaskComponent {}\n","import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  Input,\n  OnDestroy,\n  Optional,\n  Output,\n  Renderer2,\n  Self,\n  ViewContainerRef,\n  booleanAttribute,\n  forwardRef,\n  inject\n} from '@angular/core';\nimport {\n  ControlValueAccessor,\n  FormBuilder,\n  FormGroup,\n  FormsModule,\n  NgControl,\n  ReactiveFormsModule\n} from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Subject } from 'rxjs';\nimport { MX_FILE_UPLOADER_INTL_PROVIDER, MxFileUploaderIntlService } from '../service/mx-file-uploader-intl.service';\nimport { MxFileUploaderLoadingMaskComponent } from './mx-file-uploader-loading-mask.component';\n\n/** @deprecated */\ntype DeprecatedString = string;\n@Component({\n  selector: 'mx-file-uploader',\n  templateUrl: './mx-file-uploader.compoment.html',\n  styleUrls: ['./mx-file-uploader.component.scss'],\n  imports: [FormsModule, ReactiveFormsModule, MatIconModule, MatButtonModule],\n  providers: [\n    {\n      provide: MatFormFieldControl,\n      useExisting: forwardRef(() => MxFileUploaderComponent)\n    },\n    MX_FILE_UPLOADER_INTL_PROVIDER\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MxFileUploaderComponent implements OnDestroy, ControlValueAccessor, MatFormFieldControl<File> {\n  intl = inject(MxFileUploaderIntlService);\n\n  static nextId = 0;\n  value: File | null = null;\n  form!: FormGroup;\n  stateChanges = new Subject<void>();\n  focused = false;\n  touched = false;\n  controlType = 'mx-file-uploader';\n  describedBy = '';\n  shouldLabelFloat = true;\n\n  private onChange!: (value: File | null) => void;\n  private onTouched!: () => void;\n  private _cdr = inject(ChangeDetectorRef);\n\n  @Input()\n  get fileName() {\n    return this._fileName;\n  }\n  set fileName(fileName: string) {\n    this._fileName = fileName;\n    this.stateChanges.next();\n  }\n  private _fileName = '';\n\n  @Input()\n  get placeholder() {\n    return this._placeholder;\n  }\n  set placeholder(plh) {\n    this._placeholder = plh;\n    this.stateChanges.next();\n  }\n  private _placeholder = '';\n\n  @Input()\n  get required(): boolean {\n    return this._required;\n  }\n  set required(req: BooleanInput) {\n    this._required = coerceBooleanProperty(req);\n    this.stateChanges.next();\n  }\n  private _required = false;\n\n  @Input()\n  get disabled(): boolean {\n    return this._disabled;\n  }\n  set disabled(value: BooleanInput) {\n    this._disabled = coerceBooleanProperty(value);\n    if (value) {\n      this.form.get('file')?.disable();\n    } else {\n      this.form.get('file')?.enable();\n    }\n    this.stateChanges.next();\n  }\n  private _disabled = false;\n\n  @Input()\n  get readonly(): boolean {\n    return this._readonly;\n  }\n  set readonly(value: BooleanInput) {\n    this._readonly = coerceBooleanProperty(value);\n    if (value) {\n      this.form.get('file')?.disable();\n    } else {\n      this.form.get('file')?.enable();\n    }\n    this.stateChanges.next();\n  }\n  private _readonly = false;\n\n  @Input()\n  get errorState(): boolean {\n    return this._errorState || (!!this.ngControl?.invalid && this.touched);\n  }\n  set errorState(value: boolean) {\n    this._errorState = value;\n  }\n  private _errorState = false;\n\n  get empty(): boolean {\n    return !this.value;\n  }\n\n  @Input() accept: string = '';\n  @Input('aria-describedby') userAriaDescribedBy: string = '';\n\n  /**\n   * @deprecated This input will be removed in future versions. `MxFileUploaderIntlService` will handle all labels for i18n.\n   */\n  @Input() uploadLabel: DeprecatedString = 'Browse';\n  // TODO: Review after version 10.0.0\n\n  @Input({ transform: booleanAttribute }) isShowImgPreview = false;\n\n  @HostBinding() id = `mx-file-uploader-${MxFileUploaderComponent.nextId++}`;\n  @HostBinding('class') class = 'mx-file-uploader';\n\n  @Output() onClear = new EventEmitter<void>();\n  @Output() onUpload = new EventEmitter<File | null>();\n\n  constructor(\n    @Optional() @Self() public ngControl: NgControl,\n    private fb: FormBuilder,\n    private elRef: ElementRef<HTMLElement>,\n    private renderer: Renderer2,\n    private viewContainerRef: ViewContainerRef\n  ) {\n    this.form = this.fb.group({\n      file: [null]\n    });\n    if (this.ngControl != null) {\n      this.ngControl.valueAccessor = this;\n    }\n  }\n\n  ngDoCheck() {\n    if (this.ngControl && this.ngControl.control) {\n      const wasTouched = this.touched;\n      this.touched = this.ngControl.control.touched;\n\n      if (wasTouched !== this.touched) {\n        this.stateChanges.next();\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    this.stateChanges.next();\n    this.stateChanges.complete();\n  }\n\n  setDescribedByIds(ids: string[]): void {\n    this.elRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n    this._cdr.markForCheck();\n  }\n\n  onContainerClick(event: MouseEvent): void {\n    if ((event.target as Element).tagName.toLowerCase() !== 'input') {\n      (this.elRef.nativeElement.querySelector('.mx-file-uploader__browse-btn') as HTMLElement).focus();\n    }\n  }\n\n  registerOnChange(fn: (value: any) => void): void {\n    this.onChange = fn;\n    this.stateChanges.next();\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  writeValue(data: File) {\n    this.value = data;\n    this.fileName = data?.name || '';\n  }\n\n  onFocusIn(event: FocusEvent) {\n    if (!this.focused) {\n      this.focused = true;\n      this.stateChanges.next();\n    }\n  }\n\n  onFocusOut(event: FocusEvent) {\n    if (!this.elRef.nativeElement.contains(event.relatedTarget as Element)) {\n      this.touched = true;\n      this.focused = false;\n      this.stateChanges.next();\n      if (this.onTouched) {\n        this.onTouched();\n      }\n    }\n  }\n\n  onFileSelected(target: any): void {\n    this.value = target.files.item(0);\n    this.fileName = this.value?.name || '';\n    this.stateChanges.next();\n    this.onUpload.emit(this.value || null);\n    if (this.onChange) {\n      this.onChange(this.value || null);\n    }\n    if (\n      this.isShowImgPreview &&\n      this.value &&\n      this.value?.type.startsWith('image/') &&\n      !this.form.invalid &&\n      !this.errorState\n    ) {\n      const formField = this.elRef.nativeElement.closest('mat-form-field');\n      const existingImgWrapper = formField?.querySelector('.mx-file-uploader__img-wrapper');\n      if (existingImgWrapper) {\n        const loadingMask = this.viewContainerRef.createComponent(MxFileUploaderLoadingMaskComponent);\n        existingImgWrapper.appendChild(loadingMask.location.nativeElement);\n      } else {\n        const imgWrapper = this.renderer.createElement('div');\n        this.renderer.addClass(imgWrapper, 'mx-file-uploader__img-wrapper');\n        const loadingMask = this.viewContainerRef.createComponent(MxFileUploaderLoadingMaskComponent);\n        imgWrapper.appendChild(loadingMask.location.nativeElement);\n        formField?.appendChild(imgWrapper);\n      }\n\n      const reader = new FileReader();\n      reader.readAsDataURL(this.value);\n      reader.onload = (e: ProgressEvent<FileReader>) => {\n        const formField = this.elRef.nativeElement.closest('mat-form-field');\n        const loadingMask = formField?.querySelector('mx-loading-mask');\n        loadingMask?.remove();\n        const imgWrapper = formField?.querySelector('.mx-file-uploader__img-wrapper');\n        const img = imgWrapper?.querySelector('img');\n        if (img) {\n          img.src = e.target?.result as string;\n        } else {\n          const newImg = this.renderer.createElement('img');\n          newImg.src = e.target?.result as string;\n          imgWrapper?.append(newImg);\n        }\n      };\n    } else {\n      const formField = this.elRef.nativeElement.closest('mat-form-field');\n      const existingImgWrapper = formField?.querySelector('.mx-file-uploader__img-wrapper');\n      existingImgWrapper?.remove();\n    }\n  }\n\n  onClearFile(): void {\n    this.value = null;\n    this.fileName = '';\n    if (this.form.get('file')?.value) {\n      this.form.get('file')?.setValue('');\n    }\n\n    const formField = this.elRef.nativeElement.closest('mat-form-field');\n    const existingImgWrapper = formField?.querySelector('.mx-file-uploader__img-wrapper');\n    existingImgWrapper?.remove();\n\n    this.stateChanges.next();\n    this.onClear.emit();\n    if (this.onChange) {\n      this.onChange(null);\n    }\n  }\n}\n","<button\n  mat-stroked-button\n  type=\"button\"\n  class=\"mx-file-uploader__browse-btn\"\n  [disabled]=\"disabled || readonly\"\n  (focus)=\"onFocusIn($event)\"\n  (focusout)=\"onFocusOut($event)\"\n  (click)=\"inputFile.click()\"\n>\n  <mat-icon svgIcon=\"icon:attach_file\"></mat-icon>\n  {{ intl.translate('browseButtonLabel') }}\n</button>\n@if (fileName) {\n<span class=\"mx-file-uploader__file-name\" [class.disabled]=\"disabled\">{{ fileName }}</span>\n} @else {\n<span class=\"mx-file-uploader__placeholder\" [class.disabled]=\"disabled\">{{ placeholder }}</span>\n} @if (fileName) {\n<button\n  mat-icon-button\n  type=\"button\"\n  class=\"mx-file-uploader__clear-btn\"\n  [class.disabled]=\"disabled || readonly\"\n  (click)=\"onClearFile()\"\n>\n  <mat-icon svgIcon=\"icon:clear\"></mat-icon>\n</button>\n}\n\n<div role=\"group\" [formGroup]=\"form\" class=\"mx-file-uploader__hidden-form\">\n  <input\n    #inputFile\n    class=\"mx-file-uploader__hidden-input\"\n    type=\"file\"\n    [readonly]=\"readonly\"\n    [accept]=\"accept\"\n    (change)=\"onFileSelected($event.target)\"\n    formControlName=\"file\"\n  />\n</div>\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport class MxFileUploaderValidators {\n  static fileTypes(fileTypes: string): ValidatorFn {\n    return (control: AbstractControl): any | null => {\n      const file = control.value;\n      if (file && fileTypes) {\n        const extension = file.name.split('.').pop()?.toLowerCase();\n        const acceptExtensions = fileTypes.split(',').map((ext) => ext.trim().toLocaleLowerCase().replace(/\\./g, ''));\n        if (fileTypes && !acceptExtensions.includes(extension)) {\n          return {\n            fileTypes: { allowedTypes: fileTypes }\n          };\n        }\n      }\n      return null;\n    };\n  }\n\n  static maxFileSize(fileSize: number): ValidatorFn {\n    return (control: AbstractControl): any | null => {\n      const file = control.value;\n      if (file && fileSize) {\n        if (fileSize > 0 && file.size > fileSize) {\n          return {\n            maxFileSize: { maxSize: fileSize }\n          };\n        }\n      }\n      return null;\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}