{"version":3,"file":"ngx-om-material-file-input.mjs","sources":["../../../libs/material-file-input/src/lib/model/file-input.model.ts","../../../libs/material-file-input/src/lib/file-input/file-input-mixin.ts","../../../libs/material-file-input/src/lib/file-input/file-input.component.ts","../../../libs/material-file-input/src/lib/file-input/file-input.component.html","../../../libs/material-file-input/src/lib/model/file-input-config.model.ts","../../../libs/material-file-input/src/lib/pipe/byte-format.pipe.ts","../../../libs/material-file-input/src/lib/material-file-input.module.ts","../../../libs/material-file-input/src/lib/validator/file-validator.ts","../../../libs/material-file-input/src/index.ts","../../../libs/material-file-input/src/ngx-om-material-file-input.ts"],"sourcesContent":["/**\r\n * The files to be uploaded\r\n */\r\nexport class FileInput {\r\n  private _fileNames: string;\r\n\r\n  constructor(private _files: File[] | null, private delimiter: string = ', ') {\r\n    this._fileNames = (this._files || []).map((f: File) => f.name).join(delimiter);\r\n  }\r\n\r\n  get files() {\r\n    return this._files || [];\r\n  }\r\n\r\n  get fileNames(): string {\r\n    return this._fileNames;\r\n  }\r\n}\r\n","import { FormGroupDirective, NgControl, NgForm } from '@angular/forms';\r\nimport { ErrorStateMatcher } from '@angular/material/core';\r\nimport { Subject } from \"rxjs\";\r\n\r\n/**\r\n * Class that tracks the error state of a component.\r\n * @docs-private\r\n */\r\nexport class ErrorStateTracker {\r\n  public _defaultMatcher;\r\n  public _parentFormGroup;\r\n  public _parentForm;\r\n  public _stateChanges;\r\n  public ngControl;\r\n  public errorState;\r\n  public matcher;\r\n\r\n\r\n  constructor(_defaultMatcher, ngControl, _parentFormGroup, _parentForm, _stateChanges) {\r\n    this._defaultMatcher = _defaultMatcher;\r\n    this.ngControl = ngControl;\r\n    this._parentFormGroup = _parentFormGroup;\r\n    this._parentForm = _parentForm;\r\n    this._stateChanges = _stateChanges;\r\n    /** Whether the tracker is currently in an error state. */\r\n    this.errorState = false;\r\n  }\r\n  /** Updates the error state based on the provided error state matcher. */\r\n  updateErrorState() {\r\n    const oldState = this.errorState;\r\n    const parent = this._parentFormGroup || this._parentForm;\r\n    const matcher = this.matcher || this._defaultMatcher;\r\n    const control = this.ngControl ? this.ngControl.control : null;\r\n    const newState = matcher?.isErrorState(control, parent) ?? false;\r\n    if (newState !== oldState) {\r\n      this.errorState = newState;\r\n      this._stateChanges.next();\r\n    }\r\n  }\r\n}\r\n\r\nfunction mixinErrorState(base) {\r\n  return class extends base {\r\n    /** Whether the component is in an error state. */\r\n    get errorState() {\r\n      return this._getTracker().errorState;\r\n    }\r\n    set errorState(value) {\r\n      this._getTracker().errorState = value;\r\n    }\r\n    /** An object used to control the error state of the component. */\r\n    get errorStateMatcher() {\r\n      return this._getTracker().matcher;\r\n    }\r\n    set errorStateMatcher(value) {\r\n      this._getTracker().matcher = value;\r\n    }\r\n    /** Updates the error state based on the provided error state matcher. */\r\n    updateErrorState() {\r\n      this._getTracker().updateErrorState();\r\n    }\r\n    _getTracker() {\r\n      if (!this._tracker) {\r\n        this._tracker = new ErrorStateTracker(this._defaultErrorStateMatcher, this.ngControl, this._parentFormGroup, this._parentForm, this.stateChanges);\r\n      }\r\n      return this._tracker;\r\n    }\r\n    constructor(...args) {\r\n      super(...args);\r\n    }\r\n  };\r\n}\r\n\r\n// Boilerplate for applying mixins to FileInput\r\n/** @docs-private */\r\nexport class FileInputBase {\r\n  constructor(\r\n    public _defaultErrorStateMatcher: ErrorStateMatcher,\r\n    public _parentForm: NgForm,\r\n    public _parentFormGroup: FormGroupDirective,\r\n    public ngControl: NgControl,\r\n    public stateChanges: Subject<void>\r\n  ) {}\r\n}\r\n\r\n/**\r\n * Allows to use a custom ErrorStateMatcher with the file-input component\r\n */\r\nexport const FileInputMixinBase = mixinErrorState(FileInputBase);\r\n","import { Component, OnInit, Input, ElementRef, OnDestroy, HostBinding, Renderer2, HostListener, Optional, Self, DoCheck } from '@angular/core';\nimport { ControlValueAccessor, NgControl, NgForm, FormGroupDirective } from '@angular/forms';\n\n\nimport { FileInput } from '../model/file-input.model';\nimport { FileInputMixinBase } from './file-input-mixin';\nimport { MatFormFieldControl } from \"@angular/material/form-field\";\nimport { ErrorStateMatcher } from \"@angular/material/core\";\nimport { coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport { FocusMonitor } from \"@angular/cdk/a11y\";\nimport { Subject } from \"rxjs\";\n\n@Component({\n  selector: 'ngx-mat-file-input',\n  templateUrl: './file-input.component.html',\n  styleUrls: ['./file-input.component.css'],\n  providers: [{ provide: MatFormFieldControl, useExisting: FileInputComponent }],\n  standalone: false,\n})\nexport class FileInputComponent\n  extends FileInputMixinBase\n  implements MatFormFieldControl<FileInput>, ControlValueAccessor, OnInit, OnDestroy, DoCheck\n{\n  static nextId = 0;\n\n  focused = false;\n  controlType = 'file-input';\n\n  @Input() autofilled = false;\n\n  private _placeholder: string;\n  private _required = false;\n  private _multiple: boolean;\n\n  @Input() valuePlaceholder: string;\n  @Input() accept: string | null = null;\n  @Input()\n  private _errorStateMatcher: ErrorStateMatcher;\n  public get errorStateMatcher(): ErrorStateMatcher {\n    return this._errorStateMatcher;\n  }\n  public set errorStateMatcher(value: ErrorStateMatcher) {\n    this._errorStateMatcher = value;\n  }\n\n  @HostBinding() id = `ngx-mat-file-input-${FileInputComponent.nextId++}`;\n  @HostBinding('attr.aria-describedby') describedBy = '';\n\n  setDescribedByIds(ids: string[]) {\n    this.describedBy = ids.join(' ');\n  }\n\n  @Input()\n  get value(): FileInput | null {\n    return this.empty ? null : new FileInput(this._elementRef.nativeElement.value || []);\n  }\n  set value(fileInput: FileInput | null) {\n    if (fileInput) {\n      this.writeValue(fileInput);\n      this.stateChanges.next();\n    }\n  }\n\n  @Input()\n  get multiple(): boolean {\n    return this._multiple;\n  }\n  set multiple(value: boolean | string) {\n    this._multiple = coerceBooleanProperty(value);\n    this.stateChanges.next();\n  }\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\n  /**\n   * Whether the current input has files\n   */\n  get empty() {\n    return !this._elementRef.nativeElement.value || this._elementRef.nativeElement.value.length === 0;\n  }\n\n  @HostBinding('class.mat-form-field-should-float')\n  get shouldLabelFloat() {\n    return this.focused || !this.empty || this.valuePlaceholder !== undefined;\n  }\n\n  @Input()\n  get required(): boolean {\n    return this._required;\n  }\n  set required(req: boolean | string) {\n    this._required = coerceBooleanProperty(req);\n    this.stateChanges.next();\n  }\n\n  @HostBinding('class.file-input-disabled')\n  get isDisabled() {\n    return this.disabled;\n  }\n  @Input()\n  get disabled(): boolean {\n    return this._elementRef.nativeElement.disabled;\n  }\n  set disabled(dis: boolean | string) {\n    this.setDisabledState(coerceBooleanProperty(dis));\n    this.stateChanges.next();\n  }\n\n  onContainerClick(event: MouseEvent) {\n    if ((event.target as Element).tagName.toLowerCase() !== 'input' && !this.disabled) {\n      this._elementRef.nativeElement.querySelector('input').focus();\n      this.focused = true;\n      this.open();\n    }\n  }\n\n  /** Whether the component is in an error state. */\n  private _errorState = false;\n\n  get errorState() {\n    return this._errorState;\n  }\n  set errorState(value) {\n    this._errorState = value;\n  }\n\n  /**\n   * @see https://angular.io/api/forms/ControlValueAccessor\n   */\n  constructor(\n    private fm: FocusMonitor,\n    private _elementRef: ElementRef,\n    private _renderer: Renderer2,\n    public _defaultErrorStateMatcher: ErrorStateMatcher,\n    @Optional()\n    @Self()\n    public ngControl: NgControl,\n    @Optional() public _parentForm: NgForm,\n    @Optional() public _parentFormGroup: FormGroupDirective\n  ) {\n    super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl, new Subject<void>());\n\n    if (this.ngControl != null) {\n      this.ngControl.valueAccessor = this;\n    }\n    fm.monitor(_elementRef.nativeElement, true).subscribe((origin) => {\n      this.focused = !!origin;\n      this.stateChanges.next();\n    });\n  }\n\n  private _onChange = (_: any) => {};\n  private _onTouched = () => {};\n\n  get fileNames() {\n    return this.value ? this.value.fileNames : this.valuePlaceholder;\n  }\n\n  writeValue(obj: FileInput | null): void {\n    this._renderer.setProperty(this._elementRef.nativeElement, 'value', obj instanceof FileInput ? obj.files : null);\n  }\n\n  registerOnChange(fn: (_: any) => void): void {\n    this._onChange = fn;\n  }\n\n  registerOnTouched(fn: any): void {\n    this._onTouched = fn;\n  }\n\n  /**\n   * Remove all files from the file input component\n   * @param [event] optional event that may have triggered the clear action\n   */\n  clear(event?: Event) {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    this.value = new FileInput([]);\n    this._elementRef.nativeElement.querySelector('input').value = null;\n    this._onChange(this.value);\n  }\n\n  @HostListener('change', ['$event'])\n  change(event: Event) {\n    const fileList: FileList | null = (<HTMLInputElement>event.target).files;\n    const fileArray: File[] = [];\n    if (fileList) {\n      for (let i = 0; i < fileList.length; i++) {\n        fileArray.push(fileList[i]);\n      }\n    }\n    this.value = new FileInput(fileArray);\n    this._onChange(this.value);\n  }\n\n  @HostListener('focusout')\n  blur() {\n    this.focused = false;\n    this._onTouched();\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n  }\n\n  ngOnInit() {\n    this.multiple = coerceBooleanProperty(this.multiple);\n  }\n\n  open() {\n    if (!this.disabled) {\n      this._elementRef.nativeElement.querySelector('input').click();\n    }\n  }\n\n  ngOnDestroy() {\n    this.stateChanges.complete();\n    this.fm.stopMonitoring(this._elementRef.nativeElement);\n  }\n\n  ngDoCheck(): void {\n    if (this.ngControl) {\n      // We need to re-evaluate this on every change detection cycle, because there are some\n      // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n      // that whatever logic is in here has to be super lean or we risk destroying the performance.\n      this.updateErrorState();\n    }\n  }\n\n  readonly stateChanges = new Subject<void>();\n\n  public updateErrorState() {\n    const parentSubmitted = this._parentFormGroup?.submitted || this._parentForm?.submitted;\n    const touchedOrParentSubmitted = parentSubmitted;\n\n    const newState = this.ngControl?.invalid && touchedOrParentSubmitted;\n\n    if (this.errorState !== newState) {\n      this.errorState = newState;\n      this.stateChanges.next(); // Notify listeners of state changes.\n    }\n  }\n}\n","<input #input type=\"file\" [attr.multiple]=\"multiple? '' : null\" [attr.accept]=\"accept\">\r\n<span class=\"filename\" [title]=\"fileNames\">{{ fileNames }}</span>\r\n","import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Optional token to provide custom configuration to the module\r\n */\r\nexport const NGX_MAT_FILE_INPUT_CONFIG = new InjectionToken<FileInputConfig>(\r\n  'ngx-mat-file-input.config'\r\n);\r\n\r\n/**\r\n * Provide additional configuration to dynamically customize the module injection\r\n */\r\nexport interface FileInputConfig {\r\n  /**\r\n   * Unit used with the ByteFormatPipe, default value is *Byte*.\r\n   * The first letter is used for the short notation.\r\n   */\r\n  sizeUnit: string;\r\n}\r\n","import { Pipe, PipeTransform, Optional, Inject } from '@angular/core';\r\nimport { FileInputConfig, NGX_MAT_FILE_INPUT_CONFIG } from '../model/file-input-config.model';\r\n\r\n@Pipe({\n    name: 'byteFormat',\n    standalone: false\n})\r\nexport class ByteFormatPipe implements PipeTransform {\r\n  private unit: string;\r\n\r\n  constructor(\r\n    @Optional()\r\n    @Inject(NGX_MAT_FILE_INPUT_CONFIG)\r\n    private config: FileInputConfig\r\n  ) {\r\n    this.unit = config ? config.sizeUnit : 'Byte';\r\n  }\r\n\r\n  transform(value: any, args?: any): any {\r\n    if (parseInt(value, 10) >= 0) {\r\n      value = this.formatBytes(+value, +args);\r\n    }\r\n    return value;\r\n  }\r\n\r\n  private formatBytes(bytes: number, decimals?: number) {\r\n    if (bytes === 0) {\r\n      return '0 ' + this.unit;\r\n    }\r\n    const B = this.unit.charAt(0);\r\n    const k = 1024;\r\n    const dm = decimals || 2;\r\n    const sizes = [this.unit, 'K' + B, 'M' + B, 'G' + B, 'T' + B, 'P' + B, 'E' + B, 'Z' + B, 'Y' + B];\r\n    const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n    return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { FocusMonitor } from '@angular/cdk/a11y';\r\nimport { FileInputComponent } from './file-input/file-input.component';\r\nimport { ByteFormatPipe } from './pipe/byte-format.pipe';\r\n\r\n@NgModule({\r\n  declarations: [FileInputComponent, ByteFormatPipe],\r\n  providers: [FocusMonitor],\r\n  exports: [FileInputComponent, ByteFormatPipe]\r\n})\r\nexport class MaterialFileInputModule {}\r\n","import { ValidatorFn, AbstractControl } from '@angular/forms';\r\nimport { FileInput } from '../model/file-input.model';\r\n\r\nexport class FileValidator {\r\n  /**\r\n   * Function to control content of files\r\n   *\r\n   * @param bytes max number of bytes allowed\r\n   *\r\n   * @returns\r\n   */\r\n  static maxContentSize(bytes: number): ValidatorFn {\r\n    return (control: AbstractControl): { [key: string]: any } | null => {\r\n      const size = control && control.value ? (control.value as FileInput).files.map(f => f.size).reduce((acc, i) => acc + i, 0) : 0;\r\n      const condition = bytes >= size;\r\n      return condition\r\n        ? null\r\n        : {\r\n            maxContentSize: {\r\n              actualSize: size,\r\n              maxSize: bytes\r\n            }\r\n          };\r\n    };\r\n  }\r\n}\r\n","// Module\r\nexport { MaterialFileInputModule } from './lib/material-file-input.module';\r\n\r\n// Model & Constant\r\nexport { NGX_MAT_FILE_INPUT_CONFIG } from './lib/model/file-input-config.model';\r\nexport { FileInput } from './lib/model/file-input.model';\r\nexport { FileInputConfig } from './lib/model/file-input-config.model';\r\n\r\n// Components\r\nexport { FileInputComponent } from './lib/file-input/file-input.component';\r\n\r\n// Filters\r\nexport { ByteFormatPipe } from './lib/pipe/byte-format.pipe';\r\n\r\n// Utilities\r\nexport { FileValidator } from './lib/validator/file-validator';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}