{"version":3,"file":"ngx-file-helpers.mjs","sources":["../../../projects/ngx-file-helpers/src/lib/read-file-impl.ts","../../../projects/ngx-file-helpers/src/lib/read-mode.enum.ts","../../../projects/ngx-file-helpers/src/lib/helpers.ts","../../../projects/ngx-file-helpers/src/lib/file-handler.ts","../../../projects/ngx-file-helpers/src/lib/file-dropzone.directive.ts","../../../projects/ngx-file-helpers/src/lib/file-picker.directive.ts","../../../projects/ngx-file-helpers/src/lib/ngx-file-helpers.module.ts","../../../projects/ngx-file-helpers/src/public-api.ts","../../../projects/ngx-file-helpers/src/ngx-file-helpers.ts"],"sourcesContent":["import { ReadFile } from './read-file';\nimport { ReadMode } from './read-mode.enum';\n\nexport class ReadFileImpl implements ReadFile {\n  get name(): string {\n    return this.underlyingFile.name;\n  }\n\n  get size(): number {\n    return this.underlyingFile.size;\n  }\n\n  get type(): string {\n    return this.underlyingFile.type;\n  }\n\n  constructor(\n    public readonly underlyingFile: File,\n    public readonly readMode: ReadMode,\n    public readonly content?: any\n  ) {}\n}\n","export enum ReadMode {\n  ArrayBuffer,\n  BinaryString,\n  DataURL,\n  Text,\n  Skip,\n}\n","import { ReadFile } from './read-file';\nimport { ReadFileImpl } from './read-file-impl';\nimport { ReadMode } from './read-mode.enum';\n\nexport function coerceBooleanProperty(value: any): boolean {\n  return value != null && `${value}` !== 'false';\n}\n\nexport async function readFileAsync(\n  file: File,\n  readMode: ReadMode\n): Promise<ReadFile> {\n  return new Promise((resolve, reject) => {\n    const reader = new FileReader();\n\n    reader.onload = (event: ProgressEvent) => {\n      const fileReader = event.target as FileReader;\n      const readFile = new ReadFileImpl(file, readMode, fileReader.result);\n\n      resolve(readFile);\n    };\n\n    reader.onerror = (event: ProgressEvent) => {\n      reject(event);\n    };\n\n    switch (readMode) {\n      case ReadMode.ArrayBuffer:\n        reader.readAsArrayBuffer(file);\n        break;\n      case ReadMode.BinaryString:\n        reader.readAsBinaryString(file);\n        break;\n      case ReadMode.Text:\n        reader.readAsText(file);\n        break;\n      case ReadMode.Skip:\n        // Immediately return without reading the file\n        // See: https://github.com/fvilers/ngx-file-helpers/issues/57\n        resolve(new ReadFileImpl(file, readMode));\n        break;\n      case ReadMode.DataURL:\n      default:\n        reader.readAsDataURL(file);\n        break;\n    }\n  });\n}\n","import { Directive, input, output } from '@angular/core';\nimport { readFileAsync } from './helpers';\nimport { ReadFile } from './read-file';\nimport { ReadMode } from './read-mode.enum';\n\n@Directive()\nexport abstract class FileHandler {\n  public readonly readMode = input<ReadMode>(ReadMode.DataURL);\n\n  public readonly filter = input<(file: File, index: number, files: Array<File>) => boolean>(() => true);\n\n  public readonly readStart = output<number>();\n\n  public readonly readEnd = output<number>();\n\n  public readonly readError = output<{\n    file: File;\n    error: any;\n  }>();\n\n  protected async readFiles(\n    files: FileList,\n    onFileRead: (fileRead: ReadFile) => void\n  ): Promise<void> {\n    const filteredFiles = Array.from<File>(files).filter((file, index, array) =>\n      this.filter()(file, index, array)\n    );\n    const fileCount = filteredFiles.length;\n    let readCount = 0;\n\n    this.readStart.emit(fileCount);\n\n    await Promise.all(\n      filteredFiles.map(async (file) => {\n        try {\n          const readFile = await readFileAsync(file, this.readMode());\n          onFileRead(readFile);\n          readCount++;\n        } catch (err) {\n          this.readError.emit({ file, error: err });\n          // do not re-throw, the promise returned by readFiles is not awaited anywhere\n          // and re-throwing would result in \"unhandled rejections\" that the consumer cannot handle\n        }\n      })\n    ).finally(() => {\n      this.readEnd.emit(readCount);\n    });\n  }\n}\n","import { Directive, HostListener, output } from '@angular/core';\nimport { FileHandler } from './file-handler';\nimport { ReadFile } from './read-file';\n\n@Directive({\n  selector: '[ngxFileDropzone]',\n  exportAs: 'ngxFileDropzone',\n})\nexport class FileDropzoneDirective extends FileHandler {\n  public readonly fileDrop = output<ReadFile>();\n\n  @HostListener('dragenter', ['$event'])\n  public onDragEnter(event: DragEvent) {\n    event.stopPropagation();\n    event.preventDefault();\n  }\n\n  @HostListener('dragover', ['$event'])\n  public onDragOver(event: DragEvent) {\n    event.stopPropagation();\n    event.preventDefault();\n  }\n\n  @HostListener('drop', ['$event'])\n  public onDrop(event: DragEvent) {\n    event.stopPropagation();\n    event.preventDefault();\n\n    if (event.dataTransfer !== null) {\n      this.readFiles(event.dataTransfer.files, (readFile) =>\n        this.fileDrop.emit(readFile)\n      );\n    }\n  }\n}\n","import {\n  Directive,\n  ElementRef,\n  HostListener,\n  OnInit,\n  Renderer2,\n  booleanAttribute,\n  inject,\n  input,\n  output\n} from '@angular/core';\nimport { FileHandler } from './file-handler';\nimport { ReadFile } from './read-file';\n\n@Directive({\n  selector: '[ngxFilePicker]',\n  exportAs: 'ngxFilePicker',\n})\nexport class FilePickerDirective extends FileHandler implements OnInit {\n  readonly #el = inject(ElementRef);\n  readonly #renderer = inject(Renderer2);\n\n  public readonly accept = input('');\n\n  public readonly multiple = input<boolean, unknown>(false, {\n    transform: booleanAttribute,\n  });\n\n  public readonly filePick = output<ReadFile>();\n\n  private _input?: HTMLInputElement;\n\n  public ngOnInit() {\n    this._input = this.#renderer.createElement('input');\n    this.#renderer.appendChild(this.#el.nativeElement, this._input);\n\n    this.#renderer.setAttribute(this._input, 'type', 'file');\n    this.#renderer.setAttribute(this._input, 'accept', this.accept());\n    this.#renderer.setStyle(this._input, 'display', 'none');\n\n    if (this.multiple()) {\n      this.#renderer.setAttribute(this._input, 'multiple', 'multiple');\n    }\n\n    this.#renderer.listen(this._input, 'change', (event: Event) =>\n      this._onListen(event)\n    );\n  }\n\n  public reset() {\n    if (!this._input) {\n      console.error(\n        'It seems that ngOnInit() has not been executed or that the hidden _input element is null. Did you mess with the DOM?'\n      );\n      return;\n    }\n\n    this._input.value = '';\n  }\n\n  @HostListener('click')\n  public browse() {\n    if (!this._input) {\n      console.error(\n        'It seems that ngOnInit() has not been executed or that the hidden _input element is null. Did you mess with the DOM?'\n      );\n      return;\n    }\n\n    this._input.click();\n  }\n\n  // The callback signature prevent the async/await usage\n  private _onListen(event: Event) {\n    const target = event.target as HTMLInputElement;\n\n    if (target.files !== null) {\n      this.readFiles(target.files, (readFile) => this.filePick.emit(readFile))\n        // reset value to trick change event making it changeable every time\n        .finally(() => (target.value = ''));\n    }\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { FileDropzoneDirective } from './file-dropzone.directive';\nimport { FilePickerDirective } from './file-picker.directive';\n\n@NgModule({\n  imports: [FileDropzoneDirective, FilePickerDirective],\n  exports: [FileDropzoneDirective, FilePickerDirective],\n})\nexport class NgxFileHelpersModule { }\n","/*\n * Public API Surface of ngx-file-helpers\n */\n\nexport * from './lib/file-dropzone.directive';\nexport * from './lib/file-picker.directive';\nexport * from './lib/ngx-file-helpers.module';\nexport * from './lib/read-file';\nexport * from './lib/read-mode.enum';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}