{"version":3,"file":"ngx-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-material-file-input.ts"],"sourcesContent":["/**\n * The files to be uploaded\n */\nexport class FileInput {\n  private _fileNames: string;\n\n  constructor(private _files: File[] | null, private delimiter: string = ', ') {\n    this._fileNames = (this._files || []).map((f: File) => f.name).join(delimiter);\n  }\n\n  get files() {\n    return this._files || [];\n  }\n\n  get fileNames(): string {\n    return this._fileNames;\n  }\n}\n","import { FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport { ErrorStateMatcher, mixinErrorState } from '@angular/material/core';\nimport { Subject } from \"rxjs\";\n\n// Boilerplate for applying mixins to FileInput\n/** @docs-private */\nexport class FileInputBase {\n  constructor(\n    public _defaultErrorStateMatcher: ErrorStateMatcher,\n    public _parentForm: NgForm,\n    public _parentFormGroup: FormGroupDirective,\n    public ngControl: NgControl,\n    public stateChanges: Subject<void>\n  ) {}\n}\n\n/**\n * Allows to use a custom ErrorStateMatcher with the file-input component\n */\nexport const FileInputMixinBase = mixinErrorState(FileInputBase);\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 { Observable, 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})\nexport class FileInputComponent extends FileInputMixinBase implements MatFormFieldControl<FileInput>, ControlValueAccessor, OnInit, OnDestroy, DoCheck {\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() errorStateMatcher: ErrorStateMatcher;\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  /**\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}\n","<input #input type=\"file\" [attr.multiple]=\"multiple? '' : null\" [attr.accept]=\"accept\">\n<span class=\"filename\" [title]=\"fileNames\">{{ fileNames }}</span>\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Optional token to provide custom configuration to the module\n */\nexport const NGX_MAT_FILE_INPUT_CONFIG = new InjectionToken<FileInputConfig>(\n  'ngx-mat-file-input.config'\n);\n\n/**\n * Provide additional configuration to dynamically customize the module injection\n */\nexport interface FileInputConfig {\n  /**\n   * Unit used with the ByteFormatPipe, default value is *Byte*.\n   * The first letter is used for the short notation.\n   */\n  sizeUnit: string;\n}\n","import { Pipe, PipeTransform, Optional, Inject } from '@angular/core';\nimport { FileInputConfig, NGX_MAT_FILE_INPUT_CONFIG } from '../model/file-input-config.model';\n\n@Pipe({\n  name: 'byteFormat'\n})\nexport class ByteFormatPipe implements PipeTransform {\n  private unit: string;\n\n  constructor(\n    @Optional()\n    @Inject(NGX_MAT_FILE_INPUT_CONFIG)\n    private config: FileInputConfig\n  ) {\n    this.unit = config ? config.sizeUnit : 'Byte';\n  }\n\n  transform(value: any, args?: any): any {\n    if (parseInt(value, 10) >= 0) {\n      value = this.formatBytes(+value, +args);\n    }\n    return value;\n  }\n\n  private formatBytes(bytes: number, decimals?: number) {\n    if (bytes === 0) {\n      return '0 ' + this.unit;\n    }\n    const B = this.unit.charAt(0);\n    const k = 1024;\n    const dm = decimals || 2;\n    const sizes = [this.unit, 'K' + B, 'M' + B, 'G' + B, 'T' + B, 'P' + B, 'E' + B, 'Z' + B, 'Y' + B];\n    const i = Math.floor(Math.log(bytes) / Math.log(k));\n    return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { FileInputComponent } from './file-input/file-input.component';\nimport { ByteFormatPipe } from './pipe/byte-format.pipe';\n\n@NgModule({\n  declarations: [FileInputComponent, ByteFormatPipe],\n  providers: [FocusMonitor],\n  exports: [FileInputComponent, ByteFormatPipe]\n})\nexport class MaterialFileInputModule {}\n","import { ValidatorFn, AbstractControl } from '@angular/forms';\nimport { FileInput } from '../model/file-input.model';\n\nexport class FileValidator {\n  /**\n   * Function to control content of files\n   *\n   * @param bytes max number of bytes allowed\n   *\n   * @returns\n   */\n  static maxContentSize(bytes: number): ValidatorFn {\n    return (control: AbstractControl): { [key: string]: any } | null => {\n      const size = control && control.value ? (control.value as FileInput).files.map(f => f.size).reduce((acc, i) => acc + i, 0) : 0;\n      const condition = bytes >= size;\n      return condition\n        ? null\n        : {\n            maxContentSize: {\n              actualSize: size,\n              maxSize: bytes\n            }\n          };\n    };\n  }\n}\n","// Module\nexport { MaterialFileInputModule } from './lib/material-file-input.module';\n\n// Model & Constant\nexport { NGX_MAT_FILE_INPUT_CONFIG } from './lib/model/file-input-config.model';\nexport { FileInput } from './lib/model/file-input.model';\nexport { FileInputConfig } from './lib/model/file-input-config.model';\n\n// Components\nexport { FileInputComponent } from './lib/file-input/file-input.component';\n\n// Filters\nexport { ByteFormatPipe } from './lib/pipe/byte-format.pipe';\n\n// Utilities\nexport { FileValidator } from './lib/validator/file-validator';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}