{"version":3,"file":"guachos-image-picker.mjs","sources":["../../../projects/guachos-image-picker/src/utils/pipes/calculate-size/calculate-size.pipe.ts","../../../projects/guachos-image-picker/src/utils/pipes/i18n/i18n.pipe.ts","../../../projects/guachos-image-picker/src/lib/guachos-image-picker.component.ts","../../../projects/guachos-image-picker/src/lib/guachos-image-picker.component.html","../../../projects/guachos-image-picker/src/utils/pipes/calculate-size/calculate-size.module.ts","../../../projects/guachos-image-picker/src/utils/pipes/i18n/i18n.module.ts","../../../projects/guachos-image-picker/src/lib/guachos-image-picker.module.ts","../../../projects/guachos-image-picker/src/public-api.ts","../../../projects/guachos-image-picker/src/guachos-image-picker.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n  name: 'calculateSize'\r\n})\r\nexport class CalculateSizePipe implements PipeTransform {\r\n\r\n  transform(imageLength: number): number {\r\n    if (!imageLength) {\r\n      return 0;\r\n    }\r\n\r\n    if (imageLength) {\r\n      return Math.ceil(((3 / 4) * imageLength) / 1024);\r\n    } else {\r\n      return 0;\r\n    }\r\n  }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n  name: 'i18n'\r\n})\r\nexport class I18nPipe implements PipeTransform {\r\n  private en: any = {\r\n    UPLOAD_A_IMAGE: 'Upload an image',\r\n    MUST_EDIT: 'You must edit the image in order to resize it',\r\n    TOO_LARGE: 'too large',\r\n    OPEN_EDITOR_PANEL: 'Open the editor panel',\r\n    DOWNLOAD: 'Download the image',\r\n    CONTROL_PANEL: 'Control Panel',\r\n    QUALITY: 'Quality',\r\n    SAVE: 'Save',\r\n    MAX_DIMENSIONS: 'Max dimensions',\r\n    ASPECT_RATIO: 'Aspect ratio',\r\n    MAX_WIDTH_PX: 'max-width(px)',\r\n    MAX_HEIGHT_PX: 'max-height(px)',\r\n    FORMAT: 'Format',\r\n    CROP: 'Crop',\r\n    WIDTH_PX: 'width(px)',\r\n    HEIGHT_PX: 'height(px)',\r\n    REMOVE: 'Remove',\r\n    SIZE: 'Size'\r\n  };\r\n\r\n  private es: any = {\r\n    UPLOAD_A_IMAGE: 'Suba una imagen',\r\n    MUST_EDIT: 'Debe editar la imagen para disminuir su tamaño',\r\n    TOO_LARGE: 'muy grande',\r\n    OPEN_EDITOR_PANEL: 'Abra el panel de edición',\r\n    DOWNLOAD: 'Descargue la imagen',\r\n    CONTROL_PANEL: 'Panel de control',\r\n    REMOVE: 'Quitar',\r\n    SAVE: 'Guardar',\r\n    QUALITY: 'Calidad',\r\n    MAX_DIMENSIONS: 'Dimensiones',\r\n    ASPECT_RATIO: 'Relación-Aspecto',\r\n    MAX_WIDTH_PX: 'max. ancho',\r\n    MAX_HEIGHT_PX: 'max. alto',\r\n    FORMAT: 'Formato',\r\n    CROP: 'Recortar',\r\n    WIDTH_PX: 'ancho(px)',\r\n    HEIGHT_PX: 'altura(px)',\r\n    SIZE: 'Tamaño'\r\n  };\r\n\r\n  transform(key: string, language: string): string {\r\n    return language === 'en' ? this.en?.[key] : this.es?.[key];\r\n  }\r\n}\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  OnDestroy,\r\n  Output,\r\n  ViewChild,\r\n  ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { ResizeObserver } from 'resize-observer';\r\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\r\nimport { Subject } from 'rxjs';\r\nimport { ResizeObserverEntry } from 'resize-observer/lib/ResizeObserverEntry';\r\nimport { ThemePalette } from '@angular/material/core';\r\n\r\nexport interface ImagePickerConf {\r\n  width?: string;\r\n  height?: string;\r\n  borderRadius?: string;\r\n  compressInitial?: boolean;\r\n  language?: string;\r\n  hideDeleteBtn?: boolean;\r\n  hideDownloadBtn?: boolean;\r\n  hideEditBtn?: boolean;\r\n  hideAddBtn?: boolean;\r\n}\r\n\r\nexport interface ImageConverterInput {\r\n  width?: number;\r\n  height?: number;\r\n  quality?: number;\r\n  dataType?: string;\r\n  maintainRatio?: boolean;\r\n  changeHeight?: boolean;\r\n  changeWidth?: boolean;\r\n}\r\n\r\nexport type ImageAllowedTypes =\r\n  'image/*'\r\n  | '.webp'\r\n  | '.png'\r\n  | '.webp, .jpg, .jpeg'\r\n  | '.webp, .png'\r\n  | '.jpg, .jpeg'\r\n  | '.png, .jpg, .jpeg'\r\n  | '.webp, .png, .jpg, .jpeg';\r\n\r\n@Component({\r\n  selector: 'guachos-image-picker',\r\n  templateUrl: './guachos-image-picker.component.html',\r\n  styleUrls: ['./guachos-image-picker.component.scss'],\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class GuachosImagePickerComponent implements OnDestroy {\r\n  constructor(\r\n    private _cdRef: ChangeDetectorRef,\r\n  ) {\r\n  }\r\n\r\n  private unsubscribeAll$: Subject<void> = new Subject();\r\n  private observer: any = null;\r\n  private originImageSrc: any;\r\n  private fileType: any;\r\n  private urlImage: string | undefined;\r\n  private lastOriginSrc: any;\r\n\r\n  private arrayCopiedImages: any[] = [];\r\n\r\n  public config: ImagePickerConf = {\r\n    height: '240px',\r\n    width: '320px',\r\n    borderRadius: '16px',\r\n    compressInitial: true,\r\n    language: 'es',\r\n    hideDeleteBtn: false,\r\n    hideDownloadBtn: false,\r\n    hideEditBtn: false,\r\n    hideAddBtn: false,\r\n  };\r\n  public showCrop: boolean = false;\r\n  public imageSrc: any;\r\n  public loadImage: boolean = false;\r\n  public noEdit: boolean = false;\r\n  public uuidFilePicker: string = Date.now().toString(20);\r\n  public showEditPanel: boolean = false;\r\n  public quality: number = 70;\r\n  public format: string = 'webp';\r\n  public allFormats: string[] = ['webp', 'jpeg', 'png'];\r\n  public maxHeight: number = 2000;\r\n  public maxWidth: number = 2000;\r\n  public cropHeight: number = 150;\r\n  public cropWidth: number = 150;\r\n  public maintainAspectRatio: boolean = true;\r\n  public imageName: string = 'download';\r\n  public currentLanguage: string = 'es';\r\n\r\n  @Input() appearance: MatFormFieldAppearance = 'outline';\r\n  @Input() color: ThemePalette = 'primary';\r\n  @Input() imagesAllowed: ImageAllowedTypes = 'image/*';\r\n\r\n  @ViewChild('imagePicker', { static: false }) imagePicker: ElementRef | undefined;\r\n\r\n  @Output() $imageChanged: EventEmitter<any> = new EventEmitter<any>();\r\n  @Output() $imageOriginal: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n  @Input() set _imageSrc(image: string) {\r\n    if (image) {\r\n      let types: string[] = image.split('.');\r\n      this.format = types[types.length - 1];\r\n\r\n      if (!this.format || (this.format !== 'png' && this.format !== 'jpeg' && this.format !== 'webp')) {\r\n        this.format = 'jpeg';\r\n      }\r\n\r\n      this.imageSrc = image;\r\n      this.arrayCopiedImages = [];\r\n      this.arrayCopiedImages.push(this.imageSrc);\r\n      this.originImageSrc = image;\r\n      this.lastOriginSrc = image;\r\n      this.$imageOriginal.next(this.originImageSrc);\r\n      this.loadImage = true;\r\n      this.noEdit = true;\r\n      this._cdRef.detectChanges();\r\n    } else {\r\n      this.imageSrc = null;\r\n      this.originImageSrc = null;\r\n      this.loadImage = false;\r\n      this.noEdit = false;\r\n      this.arrayCopiedImages = [];\r\n      this.lastOriginSrc = null;\r\n      this.$imageOriginal.next(null);\r\n      this.format = 'jpeg';\r\n      this.maxHeight = 2000;\r\n      this.maxWidth = 2000;\r\n      this.cropHeight = 150;\r\n      this.cropWidth = 150;\r\n      this.maintainAspectRatio = true;\r\n      this.showEditPanel = false;\r\n      this._cdRef.detectChanges();\r\n    }\r\n  }\r\n\r\n  @Input() set _config(value: ImagePickerConf) {\r\n    if (value && value.constructor == Object) {\r\n      this.config = { ...this.config, ...value };\r\n    }\r\n  }\r\n\r\n  private async handleReaderLoaded(readerEvt: { target: { result: any; }; }): Promise<void> {\r\n    const binaryString: string = readerEvt.target.result;\r\n    const base64textString: string = btoa(binaryString);\r\n    this.originImageSrc = this.urlImage + base64textString;\r\n    this.lastOriginSrc = this.urlImage + base64textString;\r\n    if (this.config?.compressInitial) {\r\n      this.quality = 70;\r\n      const input: ImageConverterInput = {\r\n        dataType: this.format,\r\n        quality: 0.70,\r\n        maintainRatio: true,\r\n      };\r\n      this.imageSrc = await this.resizeDataURL(this.urlImage + base64textString, input);\r\n    } else {\r\n      this.imageSrc = this.urlImage + base64textString;\r\n      this.arrayCopiedImages = [];\r\n      this.arrayCopiedImages.push({\r\n        lastImage: this.imageSrc,\r\n        width: this.maxWidth,\r\n        height: this.maxHeight,\r\n        quality: this.quality,\r\n      });\r\n      this.$imageOriginal.next(this.imageSrc);\r\n    }\r\n    this.$imageChanged.next(this.imageSrc);\r\n    this.loadImage = true;\r\n    this._cdRef.detectChanges();\r\n  }\r\n\r\n  private async resizeDataURL(datas: string, input: ImageConverterInput): Promise<any> {\r\n    return await new Promise(async function(resolve): Promise<void> {\r\n      let img: HTMLImageElement = document.createElement('img');\r\n      img.src = datas + '';\r\n      img.crossOrigin = 'Anonymous';\r\n      let quality: number = input?.quality ?? 1.0;\r\n      let maintainRatio: boolean = input.maintainRatio !== undefined ? input.maintainRatio : true;\r\n\r\n      img.onload = function(): void {\r\n        const canvas: HTMLCanvasElement = document.createElement('canvas');\r\n        const ctx: CanvasRenderingContext2D = canvas.getContext('2d');\r\n        let ratio: number = img.width / img.height;\r\n        let width: number = input?.width ?? img.width;\r\n        let height: number = input?.height ?? img.height;\r\n\r\n        if (maintainRatio) {\r\n          if (input.changeHeight) {\r\n            canvas.width = height * ratio;\r\n            canvas.height = height;\r\n          } else {\r\n            canvas.width = width;\r\n            canvas.height = width / ratio;\r\n          }\r\n        } else {\r\n          canvas.width = width;\r\n          canvas.height = height;\r\n        }\r\n\r\n        ctx?.drawImage(img, 0, 0, canvas.width, canvas.height);\r\n        let type: string = input.dataType ? input.dataType : 'webp';\r\n        const dataURI: string = canvas.toDataURL(`image/${type}`, quality);\r\n        resolve({\r\n          dataUri: dataURI,\r\n          width: canvas.width,\r\n          height: canvas.height,\r\n        });\r\n      };\r\n    }).then((data: any) => {\r\n      this.maxHeight = data?.height;\r\n      this.maxWidth = data?.width;\r\n      if (this.arrayCopiedImages?.length <= 20) {\r\n        this.arrayCopiedImages.push({\r\n          lastImage: data?.dataUri,\r\n          width: this.maxWidth,\r\n          height: this.maxHeight,\r\n          quality: this.quality,\r\n        });\r\n      }\r\n\r\n      return data.dataUri;\r\n    });\r\n  }\r\n\r\n  private wait(ms?: number | undefined): Promise<any> {\r\n    ms = ms ?? 1000;\r\n    return new Promise((resolve): void => {\r\n      setTimeout(() => {\r\n        return resolve(true);\r\n      }, ms);\r\n    });\r\n  }\r\n\r\n  private dragElement(element: HTMLElement): void {\r\n    let pos1: number = 0, pos2: number = 0, pos3: number = 0, pos4: number = 0;\r\n\r\n    let el: HTMLElement = document.getElementById(element.id + '-header');\r\n    if (el) {\r\n      el.onmousedown = dragMouseDown;\r\n      el.ontouchstart = dragMouseDown;\r\n    } else {\r\n      element.onmousedown = dragMouseDown;\r\n      element.ontouchstart = dragMouseDown;\r\n    }\r\n\r\n    function dragMouseDown(e: any): void {\r\n      e = e || window.event;\r\n      e?.preventDefault();\r\n      pos3 = e?.clientX;\r\n      pos4 = e?.clientY;\r\n      document.onmouseup = closeDragElement;\r\n      document.ontouchend = closeDragElement;\r\n      document.onmousemove = elementDrag;\r\n      document.ontouchmove = elementDrag;\r\n    }\r\n\r\n    function elementDrag(e: any): void {\r\n      let holderImage: any = document.getElementById('image-full');\r\n      e = e || window.event;\r\n      e?.preventDefault();\r\n      pos1 = pos3 - e?.clientX;\r\n      pos2 = pos4 - e?.clientY;\r\n      pos3 = e?.clientX;\r\n      pos4 = e?.clientY;\r\n\r\n      const newTop: number = element.offsetTop - pos2;\r\n      const newLeft: number = element.offsetLeft - pos1;\r\n      const rectHolder = holderImage.getBoundingClientRect();\r\n      const rectElement: DOMRect = element.getBoundingClientRect();\r\n      if (newTop >= rectHolder.y + 8) {\r\n        element.style.top = Math.min(newTop, rectHolder.y + rectHolder.height - rectElement.height - 4) + 'px';\r\n      }\r\n      if (newLeft > rectHolder.x + 4 && rectHolder.x + rectHolder.width > rectElement.x + rectElement.width + 2) {\r\n        element.style.left = Math.min(newLeft, rectHolder.x + rectHolder.width - rectElement.width - 4) + 'px';\r\n      }\r\n    }\r\n\r\n    function closeDragElement(): void {\r\n      document.onmouseup = null;\r\n      document.onmousemove = null;\r\n      document.ontouchend = null;\r\n      document.ontouchmove = null;\r\n    }\r\n  }\r\n\r\n  public onUpload(event: { preventDefault: () => void; }): void {\r\n    event.preventDefault();\r\n    this.imagePicker?.nativeElement.click();\r\n  }\r\n\r\n  public handleFileSelect(evt: any): void {\r\n    const files = evt?.target?.files;\r\n    if (files) {\r\n      const file = files[0];\r\n      this.imageName = file?.name?.split('.')[0];\r\n      this.fileType = file?.type;\r\n      this.urlImage = `data:${file?.type};base64,`;\r\n      this.noEdit = false;\r\n      this._cdRef.detectChanges();\r\n\r\n      if (files && file) {\r\n        const reader: any = new FileReader();\r\n        reader.onload = this.handleReaderLoaded.bind(this);\r\n        reader.readAsBinaryString(file);\r\n      }\r\n    }\r\n  }\r\n\r\n  public onCloseEditPanel(): void {\r\n    if (this.observer instanceof ResizeObserver) {\r\n      let imageCropper: any = document.getElementById('image-cropper');\r\n      let imageFull: any = document.getElementById('image-full');\r\n      this.observer.unobserve(imageCropper);\r\n      this.observer.unobserve(imageFull);\r\n      this._cdRef.detectChanges();\r\n    }\r\n    this.showCrop = false;\r\n    this.showEditPanel = false;\r\n    this._cdRef.detectChanges();\r\n  }\r\n\r\n  public async onChangeQuality(): Promise<void> {\r\n    const qualityItem: number = this.quality / 100;\r\n    this.maxHeight = this.maxHeight ?? 2000;\r\n    this.maxWidth = this.maxWidth ?? 2000;\r\n\r\n    await this.wait(250);\r\n    try {\r\n      const input: ImageConverterInput = {\r\n        height: this.maxHeight,\r\n        width: this.maxWidth,\r\n        dataType: this.format,\r\n        quality: qualityItem,\r\n        maintainRatio: this.maintainAspectRatio,\r\n      };\r\n\r\n      this.imageSrc = await this.resizeDataURL(this.originImageSrc, input);\r\n      this.$imageChanged.next(this.imageSrc);\r\n      this.loadImage = true;\r\n      this._cdRef.detectChanges();\r\n    } catch (error) {\r\n      this.loadImage = true;\r\n      this._cdRef.detectChanges();\r\n    }\r\n  }\r\n\r\n  public async onChangeFormat(): Promise<void> {\r\n    let qualityItem: number = this.quality / 100;\r\n    this.maxHeight = this.maxHeight ?? 2000;\r\n    this.maxWidth = this.maxWidth ?? 2000;\r\n\r\n    await this.wait(250);\r\n    try {\r\n      let input: ImageConverterInput = {\r\n        height: this.maxHeight,\r\n        width: this.maxWidth,\r\n        dataType: this.format,\r\n        quality: qualityItem,\r\n        maintainRatio: this.maintainAspectRatio,\r\n      };\r\n      this.imageSrc = await this.resizeDataURL(this.originImageSrc, input);\r\n      this.$imageChanged.next(this.imageSrc);\r\n      this.loadImage = true;\r\n      this._cdRef.detectChanges();\r\n    } catch (error) {\r\n      this.loadImage = true;\r\n      this._cdRef.detectChanges();\r\n    }\r\n  }\r\n\r\n  public async onChangeSize(changeWidth?: any, changeHeight?: any): Promise<void> {\r\n    let qualityItem: number = this.quality / 100;\r\n    this.maxHeight = this.maxHeight ?? 2000;\r\n    this.maxWidth = this.maxWidth ?? 2000;\r\n    await this.wait(500);\r\n\r\n    try {\r\n      let input: ImageConverterInput = {\r\n        height: this.maxHeight,\r\n        width: this.maxWidth,\r\n        dataType: this.format,\r\n        quality: qualityItem,\r\n        maintainRatio: this.maintainAspectRatio,\r\n        changeHeight: changeHeight,\r\n        changeWidth: changeWidth,\r\n      };\r\n      this.imageSrc = await this.resizeDataURL(this.originImageSrc, input);\r\n      this.$imageChanged.next(this.imageSrc);\r\n      this.loadImage = true;\r\n      this._cdRef.detectChanges();\r\n    } catch (error) {\r\n      this.loadImage = true;\r\n      this._cdRef.detectChanges();\r\n    }\r\n  }\r\n\r\n  public onChangeCrop(): void {\r\n    const cropper: any = document.getElementById('image-cropper');\r\n    cropper.style.width = this.cropWidth + 'px';\r\n    cropper.style.height = this.cropHeight + 'px';\r\n    this._cdRef.detectChanges();\r\n  }\r\n\r\n  public onCropStateChange(): void {\r\n    const cropper: HTMLElement = document.getElementById('image-cropper');\r\n    const fullImage: HTMLElement = document.getElementById('image-full');\r\n    const aspectRatio: number = fullImage.offsetWidth / fullImage.offsetHeight;\r\n\r\n    if (this.showCrop) {\r\n      cropper.style.opacity = '1.0';\r\n      this.dragElement(cropper);\r\n      this.observer = new ResizeObserver((entries: ResizeObserverEntry[]): void => {\r\n        entries.forEach((entry: ResizeObserverEntry): void => {\r\n          if (this.showEditPanel) {\r\n            const elementCropper: HTMLElement = document.getElementById('image-cropper');\r\n            const elementFull: HTMLElement = document.getElementById('image-full');\r\n\r\n            const rectHolder: DOMRect = elementFull.getBoundingClientRect();\r\n            const rectElement: DOMRect = elementCropper.getBoundingClientRect();\r\n\r\n            const maxWidth: number = rectHolder.x + rectHolder.width - rectElement.x - 4;\r\n            const maxHeight: number = rectHolder.y + rectHolder.height - rectElement.y - 4;\r\n\r\n            // Obtener el tamaño del área de recorte seleccionada por el usuario\r\n            const cropWidth: number = elementCropper.offsetWidth;\r\n            const cropHeight: number = elementCropper.offsetHeight;\r\n\r\n            // Calcular el ancho y el alto del área de recorte manteniendo la relación de aspecto de la imagen original\r\n            let newWidth: number = cropWidth;\r\n            let newHeight: number = cropHeight;\r\n\r\n            if (this.maintainAspectRatio) {\r\n                if (cropWidth / cropHeight > aspectRatio) {\r\n                newHeight = cropWidth / aspectRatio;\r\n              } else {\r\n                newWidth = cropHeight * aspectRatio;\r\n              }\r\n            }\r\n\r\n            // Ajustar el ancho y el alto del área de recorte si supera los límites\r\n            newWidth = Math.min(newWidth, maxWidth);\r\n            newHeight = Math.min(newHeight, maxHeight);\r\n\r\n            // Establecer el tamaño y la posición del área de recorte\r\n            elementCropper.style.width = `${newWidth}px`;\r\n            elementCropper.style.height = `${newHeight}px`;\r\n\r\n            this.cropWidth = rectElement.width;\r\n            this.cropHeight = rectElement.height;\r\n\r\n            if (entry.target.id == 'image-full') {\r\n              if (rectHolder.top > 0) {\r\n                elementCropper.style.top = rectHolder.top + 4 + 'px';\r\n              }\r\n              elementCropper.style.left = rectHolder.left + 4 + 'px';\r\n            }\r\n            this._cdRef.detectChanges();\r\n          }\r\n        });\r\n      });\r\n      this.observer.observe(document.getElementById('image-cropper'));\r\n      this.observer.observe(document.getElementById('image-full'));\r\n    } else {\r\n      cropper.style.opacity = '0.0';\r\n      if (this.observer instanceof ResizeObserver) {\r\n        const elementCropper: HTMLElement = document.getElementById('image-cropper');\r\n        const elementFull: HTMLElement = document.getElementById('image-full');\r\n        this.observer.unobserve(elementCropper);\r\n        this.observer.unobserve(elementFull);\r\n      }\r\n    }\r\n  }\r\n\r\n  public onCrop(type?: any): void {\r\n    type = type ?? this.format;\r\n    const cropper: HTMLElement = document.getElementById('image-cropper');\r\n    const elementFull: HTMLElement = document.getElementById('image-full');\r\n    const rectCropper: DOMRect = cropper.getBoundingClientRect();\r\n    const dataHolderRect: DOMRect = elementFull.getBoundingClientRect();\r\n    const canvas: HTMLCanvasElement = document.createElement('canvas');\r\n    new Promise((resolve, reject): void => {\r\n      let ctx: CanvasRenderingContext2D | null = canvas.getContext('2d');\r\n      let image: HTMLImageElement = new Image();\r\n      image.src = this.imageSrc;\r\n      image.onload = (): void => {\r\n        let ratio: number = image.height / dataHolderRect.height;\r\n        let newWidth: number = rectCropper.width * ratio;\r\n        let newHeight: number = rectCropper.height * ratio;\r\n        canvas.width = newWidth;\r\n        canvas.height = newHeight;\r\n        ctx?.drawImage(\r\n          image,\r\n          Math.abs(rectCropper.x * ratio) - Math.abs(dataHolderRect.x * ratio),\r\n          Math.abs(rectCropper.y * ratio) - Math.abs(dataHolderRect.y * ratio),\r\n          newWidth,\r\n          newHeight,\r\n          0,\r\n          0,\r\n          newWidth,\r\n          newHeight,\r\n        );\r\n\r\n        resolve(canvas.toDataURL(`image/${type}`, this.quality));\r\n        this._cdRef.detectChanges();\r\n      };\r\n      image.onerror = (e: string | Event): void => {\r\n        reject(e);\r\n      };\r\n      this._cdRef.detectChanges();\r\n    })\r\n      .then((dataUri): void => {\r\n        this.imageSrc = dataUri;\r\n        this.showCrop = false;\r\n        this.onCropStateChange();\r\n        this.maxWidth = canvas?.width;\r\n        this.maxHeight = canvas?.height;\r\n        this.lastOriginSrc = this.originImageSrc + '';\r\n        this.originImageSrc = dataUri;\r\n        this.$imageChanged.next(this.imageSrc);\r\n        this._cdRef.detectChanges();\r\n      })\r\n      .catch((e): void => {\r\n        console.log(e);\r\n      });\r\n  }\r\n\r\n  public onRestore(): void {\r\n    if (this.arrayCopiedImages.length) {\r\n      let lastState = this.arrayCopiedImages.pop();\r\n      this.imageSrc = lastState.lastImage;\r\n      this.maxWidth = lastState.width;\r\n      this.maxHeight = lastState.height;\r\n      this.originImageSrc = this.lastOriginSrc + '';\r\n      this.noEdit = false;\r\n      this._cdRef.detectChanges();\r\n    } else {\r\n      this.imageSrc = this.lastOriginSrc;\r\n      this.originImageSrc = this.lastOriginSrc + '';\r\n      this.noEdit = false;\r\n      this._cdRef.detectChanges();\r\n    }\r\n\r\n    this.$imageChanged.next(this.imageSrc);\r\n  }\r\n\r\n  public onRemove(): void {\r\n    this.imageSrc = null;\r\n    this.originImageSrc = null;\r\n    this.loadImage = false;\r\n    this.arrayCopiedImages = [];\r\n    this.lastOriginSrc = null;\r\n    this.$imageOriginal.next(null);\r\n    this.$imageChanged.next(null);\r\n    this.format = 'jpeg';\r\n    this.maxHeight = 2000;\r\n    this.maxWidth = 2000;\r\n    this.cropHeight = 150;\r\n    this.cropWidth = 150;\r\n    this.maintainAspectRatio = true;\r\n    this.showEditPanel = false;\r\n    this.noEdit = false;\r\n    this._cdRef.detectChanges();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.unsubscribeAll$.next();\r\n    this.unsubscribeAll$.complete();\r\n  }\r\n}\r\n","<div *ngIf='!loadImage' class='place-image'>\r\n  <div class='image-holder'\r\n       [ngStyle]='{ width: config?.width,height: config?.height,borderRadius: config?.borderRadius}'>\r\n    <button [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config?.language\" class='image-upload-btn' mat-icon-button\r\n            (click)='onUpload($event)'>\r\n      <mat-icon class='mat-18'>add_a_photo</mat-icon>\r\n    </button>\r\n    <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\r\n           (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\r\n  </div>\r\n</div>\r\n\r\n<div *ngIf='loadImage' class='place-image'>\r\n  <div class='image-holder-loaded'\r\n       [ngStyle]='{width: config?.width,height: config?.height,borderRadius: config?.borderRadius}'>\r\n    <img [src]='imageSrc' alt='image-loaded' [ngStyle]='{ borderRadius: config?.borderRadius }'>\r\n    <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\r\n           (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\r\n  </div>\r\n  <p *ngIf='imageSrc?.length' class='mat-caption image-caption' [class.warn]='(imageSrc?.length | calculateSize) > 200'\r\n     [class.fw-500]='(imageSrc?.length | calculateSize) > 200'>\r\n    {{\"SIZE\" | i18n: currentLanguage}}: {{ (imageSrc?.length | calculateSize) }}Kb &nbsp; {{ format }}\r\n  </p>\r\n\r\n  <div class='editing-bar-btn'>\r\n    <button id='upload-img' *ngIf='!config?.hideAddBtn' mat-icon-button (click)='onUpload($event)'\r\n            [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config?.language\">\r\n      <mat-icon class='mat-18'>add_a_photo</mat-icon>\r\n    </button>\r\n    <button id='edit-img' *ngIf='!config?.hideEditBtn && !noEdit' mat-icon-button (click)='showEditPanel = true'\r\n            [matTooltip]=\"'OPEN_EDITOR_PANEL' | i18n: config?.language\">\r\n      <mat-icon class='mat-18'>edit</mat-icon>\r\n    </button>\r\n    <a id='download-img' *ngIf='!config?.hideDownloadBtn' [matTooltip]=\"'DOWNLOAD' | i18n: config?.language\"\r\n       [href]='imageSrc' mat-icon-button [download]='imageName'>\r\n      <mat-icon class='mat-18'>cloud_download</mat-icon>\r\n    </a>\r\n    <button id='delete-img' *ngIf='!config?.hideDeleteBtn' mat-icon-button (click)='onRemove()'\r\n            [matTooltip]=\"'REMOVE' | i18n: config?.language\">\r\n      <mat-icon class='mat-18'>delete</mat-icon>\r\n    </button>\r\n  </div>\r\n</div>\r\n\r\n<div *ngIf='showEditPanel' id='popup' class='popup'>\r\n  <div class='popup-clear'>\r\n    <button mat-icon-button (click)='onCloseEditPanel()'>\r\n      <mat-icon class='mat-18'>clear</mat-icon>\r\n    </button>\r\n  </div>\r\n\r\n  <div class='image-container'>\r\n    <div class='image-holder-full'>\r\n      <img id='image-full' [src]='imageSrc' alt=''>\r\n      <div id='image-cropper' class='image-cropper'>\r\n        <div id='image-cropper-header'>\r\n          <mat-icon>drag_indicator</mat-icon>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <div class='control-panel'>\r\n      <p class='title-panel'></p>\r\n\r\n      <p class='item-panel'>{{ 'QUALITY' | i18n: config?.language }}</p>\r\n      <div class='quality-container'>\r\n        <mat-slider [color]='color' class='w-100 mw-100' (change)='onChangeQuality()' [(ngModel)]='quality' [min]='0'\r\n                    [max]='100' [step]='1' [thumbLabel]='true'>\r\n        </mat-slider>\r\n      </div>\r\n\r\n      <div class='item-panel'>\r\n        <span>{{ 'MAX_DIMENSIONS' | i18n: config?.language }}</span>\r\n        <mat-checkbox class='float-right' [(ngModel)]='maintainAspectRatio' [color]='color'>\r\n          <span class='mat-caption'>{{ 'ASPECT_RATIO' | i18n: config?.language }}</span>\r\n        </mat-checkbox>\r\n      </div>\r\n\r\n      <div class='max-dimension-container'>\r\n        <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\r\n          <mat-label>{{ 'MAX_WIDTH_PX' | i18n: config?.language }}</mat-label>\r\n          <input (change)='onChangeSize(true, false)' matInput [placeholder]=\"'MAX_WIDTH_PX' | i18n: config?.language\"\r\n                 [(ngModel)]='maxWidth' type='number' [min]='0' [max]='2000'>\r\n        </mat-form-field>\r\n\r\n        <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\r\n          <mat-label>{{ 'MAX_HEIGHT_PX' | i18n: config?.language }}</mat-label>\r\n          <input (change)='onChangeSize(false, true)' matInput [placeholder]=\"'MAX_HEIGHT_PX' | i18n: config?.language\"\r\n                 [(ngModel)]='maxHeight' type='number' [min]='0' [max]='2000'>\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <p class='item-panel'>{{ 'FORMAT' | i18n: config?.language }}</p>\r\n      <div class='formats-selection'>\r\n        <mat-form-field class='w-100 mw-100' [appearance]='appearance' [color]='color'>\r\n          <mat-select [(ngModel)]='format' (selectionChange)='onChangeFormat()'>\r\n            <mat-option *ngFor='let format of allFormats' [value]='format'>\r\n              {{ format }}\r\n            </mat-option>\r\n          </mat-select>\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div class='refresh-container'>\r\n        <mat-checkbox (change)='onCropStateChange()' [(ngModel)]='showCrop' [color]='color'>\r\n          <p class='item-panel'>{{ 'CROP' | i18n: config?.language }}</p>\r\n        </mat-checkbox>\r\n        <div class='d-flex'>\r\n          <button class='float-right' mat-icon-button [color]='color' (click)='onRestore()'>\r\n            <mat-icon>refresh</mat-icon>\r\n          </button>\r\n          <p class='mb-4px' *ngIf='showCrop'>\r\n            <button mat-icon-button [color]='color' (click)='onCrop()'>\r\n              <mat-icon>crop</mat-icon>\r\n            </button>\r\n          </p>\r\n        </div>\r\n      </div>\r\n\r\n      <ng-container *ngIf='showCrop'>\r\n        <div class='dimension-container'>\r\n          <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\r\n            <mat-label>{{ 'WIDTH_PX' | i18n: config?.language }}</mat-label>\r\n            <input (change)='onChangeCrop()' matInput [placeholder]=\"'WIDTH_PX' | i18n: config?.language\"\r\n                   [(ngModel)]='cropWidth' type='number' [min]='0' [max]='2000'>\r\n          </mat-form-field>\r\n          <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\r\n            <mat-label>{{ 'HEIGHT_PX' | i18n: config?.language }}</mat-label>\r\n            <input (change)='onChangeCrop()' matInput [placeholder]=\"'HEIGHT_PX' | i18n: config?.language\"\r\n                   [(ngModel)]='cropHeight' type='number' [min]='0' [max]='2000'>\r\n          </mat-form-field>\r\n        </div>\r\n      </ng-container>\r\n\r\n      <div class='save-container'>\r\n        <button mat-flat-button (click)='onCloseEditPanel()' [color]='color' class='save-button'>\r\n          {{ 'SAVE' | i18n: config?.language}}\r\n        </button>\r\n\r\n        <p *ngIf='imageSrc?.length' class='mat-caption image-caption'\r\n           [class.warn]='(imageSrc?.length | calculateSize) > 200'\r\n           [class.fw-500]='(imageSrc?.length | calculateSize) > 200'>\r\n          {{\"SIZE\" | i18n: currentLanguage}}: {{ (imageSrc?.length | calculateSize) }}Kb &nbsp; {{ format }}\r\n        </p>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CalculateSizePipe } from './calculate-size.pipe';\r\n@NgModule({\r\n  declarations: [CalculateSizePipe],\r\n  exports: [CalculateSizePipe],\r\n})\r\nexport class CalculateSizeModule { }\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { I18nPipe } from './i18n.pipe';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    I18nPipe,\r\n  ],\r\n  exports: [\r\n    I18nPipe,\r\n  ],\r\n})\r\nexport class I18nModule {\r\n}\r\n","import { GuachosImagePickerComponent } from './guachos-image-picker.component';\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatSelectModule } from '@angular/material/select';\r\n\r\nimport { CalculateSizeModule } from '../utils/pipes/calculate-size/calculate-size.module';\r\nimport { I18nModule } from '../utils/pipes/i18n/i18n.module';\r\n\r\n@NgModule({\r\n  declarations: [GuachosImagePickerComponent],\r\n  imports: [\r\n    CommonModule,\r\n    MatTooltipModule,\r\n    MatIconModule,\r\n    CalculateSizeModule,\r\n    MatButtonModule,\r\n    MatCheckboxModule,\r\n    MatSliderModule,\r\n    MatFormFieldModule,\r\n    MatInputModule,\r\n    FormsModule,\r\n    MatSelectModule,\r\n    I18nModule,\r\n  ],\r\n  exports: [GuachosImagePickerComponent],\r\n})\r\nexport class GuachosImagePickerModule {}\r\n","/*\r\n * Public API Surface of guachos-image-picker\r\n */\r\n\r\nexport * from './lib/guachos-image-picker.component';\r\nexport * from './lib/guachos-image-picker.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i12.CalculateSizePipe","i13.I18nPipe"],"mappings":"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"}