{"version":3,"file":"ngx-image-uploader-next.mjs","sources":["../../../projects/ngx-image-uploader-next/src/lib/file-queue-status.ts","../../../projects/ngx-image-uploader-next/src/lib/file-queue-object.ts","../../../projects/ngx-image-uploader-next/src/lib/image-uploader.service.ts","../../../projects/ngx-image-uploader-next/src/lib/utils.ts","../../../projects/ngx-image-uploader-next/src/lib/image-uploader.component.ts","../../../projects/ngx-image-uploader-next/src/lib/image-uploader.component.html","../../../projects/ngx-image-uploader-next/src/lib/image-uploader.module.ts","../../../projects/ngx-image-uploader-next/src/public-api.ts","../../../projects/ngx-image-uploader-next/src/ngx-image-uploader-next.ts"],"sourcesContent":["export enum FileQueueStatus {\n  Pending,\n  Success,\n  Error,\n  Progress\n}\n","import { HttpErrorResponse, HttpResponse } from '@angular/common/http';\nimport { Subscription } from 'rxjs';\n\nimport { FileQueueStatus } from './file-queue-status';\n\nexport class FileQueueObject {\n  public file: any;\n  public status: FileQueueStatus = FileQueueStatus.Pending;\n  public progress: number = 0;\n  public request: Subscription = null;\n  public response: HttpResponse<any> | HttpErrorResponse = null;\n\n  constructor(file: any) {\n    this.file = file;\n  }\n\n  // actions\n  // public upload = () => { /* set in service */ };\n  // public cancel = () => { /* set in service */ };\n  // public remove = () => { /* set in service */ };\n\n  // statuses\n  public isPending = () => this.status === FileQueueStatus.Pending;\n  public isSuccess = () => this.status === FileQueueStatus.Success;\n  public isError = () => this.status === FileQueueStatus.Error;\n  public inProgress = () => this.status === FileQueueStatus.Progress;\n  public isUploadable = () => this.status === FileQueueStatus.Pending || this.status === FileQueueStatus.Error;\n}\n","import {\n    HttpClient, HttpErrorResponse, HttpEventType, HttpHeaders, HttpRequest, HttpResponse\n} from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, Observer } from 'rxjs';\n\nimport { FileQueueObject } from './file-queue-object';\nimport { FileQueueStatus } from './file-queue-status';\nimport { CropOptions, FileUploaderOptions } from './interfaces';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ImageUploaderService {\n\n  constructor(private http: HttpClient) {}\n\n  uploadFile(file: File, options: FileUploaderOptions, cropOptions?: CropOptions): Observable<FileQueueObject> {\n    this.setDefaults(options);\n\n    const form = new FormData();\n    form.append(options.fieldName, file, file.name);\n\n    if (cropOptions) {\n      form.append('X', cropOptions.x.toString());\n      form.append('Y', cropOptions.y.toString());\n      form.append('Width', cropOptions.width.toString());\n      form.append('Height', cropOptions.height.toString());\n    }\n\n    // upload file and report progress\n    const req = new HttpRequest('POST', options.uploadUrl, form, {\n      reportProgress: true,\n      withCredentials: options.withCredentials,\n      headers: this._buildHeaders(options)\n    });\n\n    return Observable.create(obs => {\n      const queueObj = new FileQueueObject(file);\n\n      queueObj.request = this.http.request(req).subscribe(\n        (event: any) => {\n          if (event.type === HttpEventType.UploadProgress) {\n            this._uploadProgress(queueObj, event);\n            obs.next(queueObj);\n          } else if (event instanceof HttpResponse) {\n            this._uploadComplete(queueObj, event);\n            obs.next(queueObj);\n            obs.complete();\n          }\n        },\n        (err: HttpErrorResponse) => {\n          if (err.error instanceof Error) {\n            // A client-side or network error occurred. Handle it accordingly.\n            this._uploadFailed(queueObj, err);\n            obs.next(queueObj);\n            obs.complete();\n          } else {\n            // The backend returned an unsuccessful response code.\n            this._uploadFailed(queueObj, err);\n            obs.next(queueObj);\n            obs.complete();\n          }\n        }\n      );\n    });\n  }\n\n  getFile(url: string, options: { authToken?: string, authTokenPrefix?: string }): Observable<File> {\n    return Observable.create((observer: Observer<File>) => {\n      let headers = new HttpHeaders();\n\n      if (options.authToken) {\n        headers = headers.append('Authorization', `${options.authTokenPrefix} ${options.authToken}`);\n      }\n\n      this.http.get(url, { responseType: 'blob', headers: headers}).subscribe(res => {\n        const file = new File([res], 'filename', { type: res.type });\n        observer.next(file);\n        observer.complete();\n      }, err => {\n        observer.error(err.status);\n        observer.complete();\n      });\n    });\n  }\n\n  private _buildHeaders(options: FileUploaderOptions): HttpHeaders {\n    let headers = new HttpHeaders();\n\n    if (options.authToken) {\n      headers = headers.append('Authorization', `${options.authTokenPrefix} ${options.authToken}`);\n    }\n\n    if (options.customHeaders) {\n      Object.keys(options.customHeaders).forEach((key) => {\n        headers = headers.append(key, options.customHeaders[key]);\n      });\n    }\n\n    return headers;\n  }\n\n  private _uploadProgress(queueObj: FileQueueObject, event: any) {\n    // update the FileQueueObject with the current progress\n    const progress = Math.round(100 * event.loaded / event.total);\n    queueObj.progress = progress;\n    queueObj.status = FileQueueStatus.Progress;\n    // this._queue.next(this._files);\n  }\n\n  private _uploadComplete(queueObj: FileQueueObject, response: HttpResponse<any>) {\n    // update the FileQueueObject as completed\n    queueObj.progress = 100;\n    queueObj.status = FileQueueStatus.Success;\n    queueObj.response = response;\n    // this._queue.next(this._files);\n    // this.onCompleteItem(queueObj, response.body);\n  }\n\n  private _uploadFailed(queueObj: FileQueueObject, response: HttpErrorResponse) {\n    // update the FileQueueObject as errored\n    queueObj.progress = 0;\n    queueObj.status = FileQueueStatus.Error;\n    queueObj.response = response;\n    // this._queue.next(this._files);\n  }\n\n  private setDefaults(options: FileUploaderOptions) {\n    options.withCredentials = options.withCredentials || false;\n    options.httpMethod = options.httpMethod || 'POST';\n    options.authTokenPrefix = options.authTokenPrefix || 'Bearer';\n    options.fieldName = options.fieldName || 'file';\n  }\n}\n","import { ResizeOptions } from './interfaces';\n\nexport function createImage(url: string, cb: (i: HTMLImageElement) => void) {\n  const image = new Image();\n  image.onload = function () {\n    cb(image);\n  };\n  image.src = url;\n}\n\nconst resizeAreaId = 'imageupload-resize-area';\n\nfunction getResizeArea() {\n  let resizeArea = document.getElementById(resizeAreaId);\n  if (!resizeArea) {\n    resizeArea = document.createElement('canvas');\n    resizeArea.id = resizeAreaId;\n    resizeArea.style.display = 'none';\n    document.body.appendChild(resizeArea);\n  }\n\n  return <HTMLCanvasElement>resizeArea;\n}\n\nexport function resizeImage(origImage: HTMLImageElement, {\n  resizeHeight,\n  resizeWidth,\n  resizeQuality = 0.7,\n  resizeType = 'image/jpeg',\n  resizeMode = 'fill'\n}: ResizeOptions = {}) {\n\n  const canvas = getResizeArea();\n\n  let height = origImage.height;\n  let width = origImage.width;\n  let offsetX = 0;\n  let offsetY = 0;\n\n  if (resizeMode === 'fill') {\n    // calculate the width and height, constraining the proportions\n    if (width / height > resizeWidth / resizeHeight) {\n      width = Math.round(height * resizeWidth / resizeHeight);\n    } else {\n      height = Math.round(width * resizeHeight / resizeWidth);\n    }\n\n    canvas.width = resizeWidth <= width ? resizeWidth : width;\n    canvas.height = resizeHeight <= height ? resizeHeight : height;\n\n    offsetX = origImage.width / 2 - width / 2;\n    offsetY = origImage.height / 2 - height / 2;\n\n    // draw image on canvas\n    const ctx = canvas.getContext('2d');\n    ctx.drawImage(origImage, offsetX, offsetY, width, height, 0, 0, canvas.width, canvas.height);\n  } else if (resizeMode === 'fit') {\n      // calculate the width and height, constraining the proportions\n      if (width > height) {\n          if (width > resizeWidth) {\n              height = Math.round(height *= resizeWidth / width);\n              width = resizeWidth;\n          }\n      } else {\n          if (height > resizeHeight) {\n              width = Math.round(width *= resizeHeight / height);\n              height = resizeHeight;\n          }\n      }\n\n      canvas.width = width;\n      canvas.height = height;\n\n      // draw image on canvas\n      const ctx = canvas.getContext('2d');\n      ctx.drawImage(origImage, 0, 0, width, height);\n  } else {\n    throw new Error('Unknown resizeMode: ' + resizeMode);\n  }\n\n  // get the data from canvas as 70% jpg (or specified type).\n  return canvas.toDataURL(resizeType, resizeQuality);\n}\n\n\n","import {\n  AfterViewChecked, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, HostListener, Input, OnDestroy,\n  OnInit, Output, Renderer2, ViewChild\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport Cropper from 'cropperjs';\nimport { FileQueueObject } from './file-queue-object';\n\nimport { ImageUploaderService } from './image-uploader.service';\nimport { CropOptions, ImageResult, ImageUploaderOptions, ResizeOptions } from './interfaces';\nimport { createImage, resizeImage } from './utils';\n\nexport enum Status {\n  NotSelected,\n  Selected,\n  Uploading,\n  Loading,\n  Loaded,\n  Error\n}\n\n@Component({\n  selector: 'ngx-image-uploader',\n  templateUrl: './image-uploader.component.html',\n  styleUrls: ['./image-uploader.component.css'],\n  host: {\n    '[style.width]': 'thumbnailWidth + \"px\"',\n    '[style.height]': 'thumbnailHeight + \"px\"'\n  },\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => ImageUploaderComponent),\n      multi: true\n    }\n  ]\n})\nexport class ImageUploaderComponent implements OnInit, OnDestroy, AfterViewChecked, ControlValueAccessor {\n  statusEnum = Status;\n  _status: Status = Status.NotSelected;\n\n  thumbnailWidth = 150;\n  thumbnailHeight = 150;\n  _imageThumbnail: any;\n  _errorMessage: string;\n  progress: number;\n  origImageWidth: number;\n  orgiImageHeight: number;\n\n  cropper: Cropper = undefined;\n  fileToUpload: File;\n\n  @ViewChild('imageElement') imageElement: ElementRef;\n  @ViewChild('fileInput', { static: true }) fileInputElement: ElementRef;\n  @ViewChild('dragOverlay', { static: true }) dragOverlayElement: ElementRef;\n  @Input() options: ImageUploaderOptions;\n  @Output() upload: EventEmitter<FileQueueObject> = new EventEmitter<FileQueueObject>();\n  @Output() statusChange: EventEmitter<Status> = new EventEmitter<Status>();\n\n  propagateChange = (_: any) => {};\n\n  constructor(\n    private renderer: Renderer2,\n    private uploader: ImageUploaderService,\n    private changeDetector: ChangeDetectorRef) { }\n\n  get imageThumbnail() {\n    return this._imageThumbnail;\n  }\n\n  set imageThumbnail(value) {\n    this._imageThumbnail = value;\n    this.propagateChange(this._imageThumbnail);\n\n    if (value !== undefined) {\n      this.status = Status.Selected;\n    } else {\n      this.status = Status.NotSelected;\n    }\n  }\n\n  get errorMessage() {\n    return this._errorMessage;\n  }\n\n  set errorMessage(value) {\n    this._errorMessage = value;\n\n    if (value) {\n      this.status = Status.Error;\n    } else {\n      this.status = Status.NotSelected;\n    }\n  }\n\n  get status() {\n    return this._status;\n  }\n\n  set status(value) {\n    this._status = value;\n    this.statusChange.emit(value);\n  }\n\n  writeValue(value: any) {\n    if (value) {\n      this.loadAndResize(value);\n    } else {\n      this._imageThumbnail = undefined;\n      this.status = Status.NotSelected;\n    }\n  }\n\n  registerOnChange(fn: (_: any) => void) {\n    this.propagateChange = fn;\n  }\n\n  registerOnTouched() {}\n\n  ngOnInit() {\n    if (this.options) {\n      if (this.options.thumbnailWidth) {\n        this.thumbnailWidth = this.options.thumbnailWidth;\n      }\n      if (this.options.thumbnailHeight) {\n        this.thumbnailHeight = this.options.thumbnailHeight;\n      }\n      if (this.options.resizeOnLoad === undefined) {\n        this.options.resizeOnLoad = true;\n      }\n      if (this.options.autoUpload === undefined) {\n        this.options.autoUpload = true;\n      }\n      if (this.options.cropEnabled === undefined) {\n        this.options.cropEnabled = false;\n      }\n\n      if (this.options.autoUpload && this.options.cropEnabled) {\n        throw new Error('autoUpload and cropEnabled cannot be enabled simultaneously');\n      }\n    }\n  }\n\n  ngAfterViewChecked() {\n    if (this.options && this.options.cropEnabled && this.imageElement && this.fileToUpload && !this.cropper) {\n      this.cropper = new Cropper(this.imageElement.nativeElement, {\n        viewMode: 1,\n        aspectRatio: this.options.cropAspectRatio ? this.options.cropAspectRatio : null\n      });\n    }\n  }\n\n  ngOnDestroy() {\n    if (this.cropper) {\n      this.cropper.destroy();\n      this.cropper = null;\n    }\n  }\n\n  loadAndResize(url: string) {\n    this.status = Status.Loading;\n\n    this.uploader.getFile(url, this.options).subscribe(file => {\n      if (this.options.resizeOnLoad) {\n        // thumbnail\n        const result: ImageResult = {\n          file: file,\n          url: URL.createObjectURL(file)\n        };\n\n        this.resize(result).then(r => {\n          this._imageThumbnail = r.resized.dataURL;\n          this.status = Status.Loaded;\n        });\n      } else {\n        const result: ImageResult = {\n          file: null,\n          url: null\n        };\n\n        this.fileToDataURL(file, result).then(r => {\n          this._imageThumbnail = r.dataURL;\n          this.status = Status.Loaded;\n        });\n      }\n    }, error => {\n      this.errorMessage = error || 'Error while getting an image';\n    });\n  }\n\n  onImageClicked() {\n    this.fileInputElement.nativeElement.click();\n  }\n\n  onFileChanged() {\n    const file = this.fileInputElement.nativeElement.files[0];\n    if (!file) {\n      return;\n    }\n\n    this.validateAndUpload(file);\n  }\n\n  validateAndUpload(file: File) {\n    this.propagateChange(null);\n\n    if (this.options && this.options.allowedImageTypes) {\n      if (!this.options.allowedImageTypes.some(allowedType => file.type === allowedType)) {\n        this.errorMessage = 'Only these image types are allowed: ' + this.options.allowedImageTypes.join(', ');\n        return;\n      }\n    }\n\n    if (this.options && this.options.maxImageSize) {\n      if (file.size > this.options.maxImageSize * 1024 * 1024) {\n        this.errorMessage = `Image must not be larger than ${this.options.maxImageSize} MB`;\n        return;\n      }\n    }\n\n    this.fileToUpload = file;\n\n    if (this.options && this.options.autoUpload) {\n      this.uploadImage();\n    }\n\n    // thumbnail\n    const result: ImageResult = {\n      file: file,\n      url: URL.createObjectURL(file)\n    };\n\n    this.resize(result).then(r => {\n      this._imageThumbnail = r.resized.dataURL;\n      this.origImageWidth = r.width;\n      this.orgiImageHeight = r.height;\n\n      if (this.options && !this.options.autoUpload) {\n        this.status = Status.Selected;\n      }\n    });\n  }\n\n  uploadImage() {\n    this.progress = 0;\n    this.status = Status.Uploading;\n\n    let cropOptions: CropOptions;\n\n    if (this.cropper) {\n      const scale = this.origImageWidth / this.cropper.getImageData().naturalWidth;\n      const cropData = this.cropper.getData();\n\n      cropOptions = {\n        x: Math.round(cropData.x * scale),\n        y: Math.round(cropData.y * scale),\n        width: Math.round(cropData.width * scale),\n        height: Math.round(cropData.height * scale)\n      };\n    }\n\n   // const queueObj = this.uploader.uploadFile(this.fileToUpload, this.options, cropOptions);\n\n    // file progress\n    this.uploader.uploadFile(this.fileToUpload, this.options, cropOptions).subscribe(file => {\n      this.progress = file.progress;\n\n      if (file.isError()) {\n        if (file.response.status || file.response.statusText) {\n          this.errorMessage = `${file.response.status}: ${file.response.statusText}`;\n        } else {\n          this.errorMessage = 'Error while uploading';\n        }\n        // on some upload errors change detection does not work, so we are forcing manually\n        this.changeDetector.detectChanges();\n      }\n\n      if (!file.inProgress()) {\n        // notify that value was changed only when image was uploaded and no error\n        if (file.isSuccess()) {\n          this.propagateChange(this._imageThumbnail);\n          this.status = Status.Selected;\n          this.fileToUpload = undefined;\n        }\n\n        this.upload.emit(file);\n      }\n    });\n  }\n\n  removeImage() {\n    this.fileInputElement.nativeElement.value = null;\n    this.imageThumbnail = undefined;\n\n    if (this.cropper) {\n      this.cropper.destroy();\n      this.cropper = null;\n    }\n  }\n\n  dismissError() {\n    this.errorMessage = undefined;\n    this.removeImage();\n  }\n\n  @HostListener('drop', ['$event']) drop(e: DragEvent) {\n    e.preventDefault();\n    e.stopPropagation();\n\n    if (!e.dataTransfer || !e.dataTransfer.files.length) {\n      return;\n    }\n\n    this.validateAndUpload(e.dataTransfer.files[0]);\n    this.updateDragOverlayStyles(false);\n  }\n\n  @HostListener('dragenter', ['$event']) dragenter(e: DragEvent) {\n    e.preventDefault();\n    e.stopPropagation();\n  }\n\n  @HostListener('dragover', ['$event']) dragover(e: DragEvent) {\n    e.preventDefault();\n    e.stopPropagation();\n    this.updateDragOverlayStyles(true);\n  }\n\n  @HostListener('dragleave', ['$event']) dragleave(e: DragEvent) {\n    e.preventDefault();\n    e.stopPropagation();\n    this.updateDragOverlayStyles(false);\n  }\n\n  private updateDragOverlayStyles(isDragOver: boolean) {\n    // TODO: find a way that does not trigger dragleave when displaying overlay\n    // if (isDragOver) {\n    //  this.renderer.setElementStyle(this.dragOverlayElement.nativeElement, 'display', 'block');\n    // } else {\n    //  this.renderer.setElementStyle(this.dragOverlayElement.nativeElement, 'display', 'none');\n    // }\n  }\n\n  private resize(result: ImageResult): Promise<ImageResult> {\n    const resizeOptions: ResizeOptions = {\n      resizeHeight: this.thumbnailHeight,\n      resizeWidth: this.thumbnailWidth,\n      resizeType: result.file.type,\n      resizeMode: this.options.thumbnailResizeMode\n    };\n\n    return new Promise((resolve) => {\n      createImage(result.url, image => {\n        const dataUrl = resizeImage(image, resizeOptions);\n\n        result.width = image.width;\n        result.height = image.height;\n        result.resized = {\n          dataURL: dataUrl,\n          type: this.getType(dataUrl)\n        };\n\n        resolve(result);\n      });\n    });\n  }\n\n  private getType(dataUrl: string) {\n    return dataUrl.match(/:(.+\\/.+;)/)[1];\n  }\n\n  private fileToDataURL(file: File, result: ImageResult): Promise<ImageResult> {\n    return new Promise((resolve) => {\n      const reader = new FileReader();\n      reader.onload = function (e) {\n        result.dataURL = reader.result instanceof ArrayBuffer\n            ? new TextDecoder('utf-8').decode(reader.result)\n            : reader.result;\n        \n        resolve(result);\n      };\n      reader.readAsDataURL(file);\n    });\n  }\n}\n","<div class=\"image-container\">\n  <div class=\"match-parent\" [ngSwitch]=\"status\">\n\n    <div class=\"match-parent\" *ngSwitchCase=\"statusEnum.NotSelected\">\n      <button type=\"button\" class=\"add-image-btn\" (click)=\"onImageClicked()\">\n          <div>\n            <p class=\"plus\">+</p>\n            <p>Click here to add image</p>\n            <p>Or drop image here</p>\n          </div>\n      </button>\n    </div>\n\n    <div class=\"selected-status-wrapper match-parent\" *ngSwitchCase=\"statusEnum.Loaded\">\n      <img [src]=\"imageThumbnail\" #imageElement>\n\n      <button type=\"button\" class=\"remove\" (click)=\"removeImage()\">×</button>\n    </div>\n\n    <div class=\"selected-status-wrapper match-parent\" *ngSwitchCase=\"statusEnum.Selected\">\n      <img [src]=\"imageThumbnail\" #imageElement>\n\n      <button type=\"button\" class=\"remove\" (click)=\"removeImage()\">×</button>\n    </div>\n\n    <div *ngSwitchCase=\"statusEnum.Uploading\">\n      <img [attr.src]=\"imageThumbnail ? imageThumbnail : null\" (click)=\"onImageClicked()\">\n\n      <div class=\"progress-bar\">\n        <div class=\"bar\" [style.width]=\"progress+'%'\"></div>\n      </div>\n    </div>\n\n    <div class=\"match-parent\" *ngSwitchCase=\"statusEnum.Loading\">\n      <div class=\"sk-fading-circle\">\n        <div class=\"sk-circle1 sk-circle\"></div>\n        <div class=\"sk-circle2 sk-circle\"></div>\n        <div class=\"sk-circle3 sk-circle\"></div>\n        <div class=\"sk-circle4 sk-circle\"></div>\n        <div class=\"sk-circle5 sk-circle\"></div>\n        <div class=\"sk-circle6 sk-circle\"></div>\n        <div class=\"sk-circle7 sk-circle\"></div>\n        <div class=\"sk-circle8 sk-circle\"></div>\n        <div class=\"sk-circle9 sk-circle\"></div>\n        <div class=\"sk-circle10 sk-circle\"></div>\n        <div class=\"sk-circle11 sk-circle\"></div>\n        <div class=\"sk-circle12 sk-circle\"></div>\n      </div>\n    </div>\n\n    <div class=\"match-parent\" *ngSwitchCase=\"statusEnum.Error\">\n      <div class=\"error\">\n        <div class=\"error-message\">\n          <p>{{errorMessage}}</p>\n        </div>\n        <button type=\"button\" class=\"remove\" (click)=\"dismissError()\">×</button>\n      </div>\n    </div>\n  </div>\n\n  <input type=\"file\" #fileInput (change)=\"onFileChanged()\">\n  <div class=\"drag-overlay\" [hidden]=\"true\" #dragOverlay></div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\n\nimport { ImageUploaderComponent } from './image-uploader.component';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    HttpClientModule\n  ],\n  declarations: [ImageUploaderComponent],\n  exports: [ImageUploaderComponent]\n})\nexport class ImageUploaderModule { }\n","/*\n * Public API Surface of image-uploader\n */\n\nexport * from './lib/image-uploader.service';\nexport * from './lib/image-uploader.component';\nexport * from './lib/image-uploader.module';\nexport * from './lib/interfaces';\nexport * from './lib/file-queue-object';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ImageUploaderService"],"mappings":"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"}