@guajiritos/image-picker 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"file":"guajiritos-image-picker.mjs","sources":["../../../projects/guachos-image-picker/src/utils/calculate-size.pipe.ts","../../../projects/guachos-image-picker/src/utils/calculate-size.module.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/public-api.ts","../../../projects/guachos-image-picker/src/guajiritos-image-picker.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'calculateSize'\n})\nexport class CalculateSizePipe implements PipeTransform {\n\n transform(imageLength: number): number {\n if (!imageLength) {\n return 0;\n }\n\n if (imageLength) {\n return Math.ceil(((3 / 4) * imageLength) / 1024);\n } else {\n return 0;\n }\n }\n\n}\n","import { NgModule } from '@angular/core';\n\nimport { CalculateSizePipe } from './calculate-size.pipe';\n@NgModule({\n declarations: [CalculateSizePipe],\n exports: [CalculateSizePipe],\n})\nexport class CalculateSizeModule { }\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ResizeObserver } from 'resize-observer';\nimport { NgForOf, NgIf, NgStyle } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { FormsModule } from '@angular/forms';\nimport { Subject } from 'rxjs';\n\nimport { CalculateSizeModule } from '../utils/calculate-size.module';\n\nexport interface ImagePickerConf {\n width?: string;\n height?: string;\n borderRadius?: string;\n compressInitial?: boolean;\n language?: string;\n hideDeleteBtn?: boolean;\n hideDownloadBtn?: boolean;\n hideEditBtn?: boolean;\n hideAddBtn?: boolean;\n}\n\nexport interface ImageConverterInput {\n width?: number;\n height?: number;\n quality?: number;\n dataType?: string;\n maintainRatio?: boolean;\n changeHeight?: boolean;\n changeWidth?: boolean;\n}\n\nexport type ImageAllowedTypes =\n 'image/*'\n | '.webp'\n | '.png'\n | '.webp, .jpg, .jpeg'\n | '.webp, .png'\n | '.jpg, .jpeg'\n | '.png, .jpg, .jpeg'\n | '.webp, .png, .jpg, .jpeg';\n\n@Component({\n selector: 'guajiritos-image-picker',\n templateUrl: './guachos-image-picker.component.html',\n styleUrls: ['./guachos-image-picker.component.scss'],\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgIf,\n NgStyle,\n MatButtonModule,\n MatTooltipModule,\n MatIconModule,\n CalculateSizeModule,\n MatSliderModule,\n MatCheckboxModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n FormsModule,\n NgForOf,\n ],\n})\nexport class GuajiritosImagePicker implements OnDestroy {\n constructor(\n private _cdRef: ChangeDetectorRef,\n ) {\n }\n\n private unsubscribeAll$: Subject<void> = new Subject();\n private observer: any = null;\n private originImageSrc: any;\n private fileType: any;\n private urlImage: string | undefined;\n private lastOriginSrc: any;\n private labelEn: any = {\n 'Upload a image': 'Upload a image',\n 'You must edit the image in order to resize it': 'You must edit the image in order to resize it',\n 'too large': 'too large',\n 'Open the editor panel': 'Open the editor panel',\n 'Download the image': 'Download the image',\n 'Control Panel': 'Control Panel',\n Quality: 'Quality',\n save: 'Save',\n 'Max dimensions': 'Max dimensions',\n 'aspect-ratio': 'aspect-ratio',\n 'max-width(px)': 'max-width(px)',\n 'max-height(px)': 'max-height(px)',\n Format: 'Format',\n Crop: 'Crop',\n 'width(px)': 'width(px)',\n 'height(px)': 'height(px)',\n Remove: 'Remove',\n };\n private labelEs: any = {\n 'Upload a image': 'Suba una imagen',\n 'You must edit the image in order to resize it': 'Debe editar la imagen para disminuir su tamaño',\n 'too large': 'muy grande',\n 'Open the editor panel': 'Abra el panel de edición',\n 'Download the image': 'Descargue la imagen',\n 'Control Panel': 'Panel de control',\n Remove: 'Quitar',\n save: 'Guardar',\n Quality: 'Calidad',\n 'Max dimensions': 'Dimensiones',\n 'aspect-ratio': 'relación-aspecto',\n 'max-width(px)': 'max. ancho',\n 'max-height(px)': 'max. alto',\n Format: 'Formato',\n Crop: 'Recortar',\n 'width(px)': 'ancho(px)',\n 'height(px)': 'altura(px)',\n };\n private arrayCopiedImages: any[] = [];\n public config: ImagePickerConf = {\n height: '240px',\n width: '320px',\n borderRadius: '16px',\n compressInitial: true,\n language: 'en',\n hideDeleteBtn: false,\n hideDownloadBtn: false,\n hideEditBtn: false,\n hideAddBtn: false,\n };\n public showCrop: boolean = false;\n public imageSrc: any;\n public loadImage: boolean = false;\n public noEdit: boolean = false;\n public uuidFilePicker: string = Date.now().toString(20);\n public showEditPanel: boolean = false;\n public quality: number = 92;\n public format: string = 'jpeg';\n public allFormats: string[] = ['webp', 'jpeg', 'png'];\n public maxHeight: number = 2000;\n public maxWidth: number = 2000;\n public cropHeight: number = 150;\n public cropWidth: number = 150;\n public maintainAspectRatio: boolean = true;\n public imageName: string = 'download';\n public labels = this.labelEn;\n @Input() appearance: MatFormFieldAppearance = 'outline';\n @Input() color: 'primary' | 'warn' | 'accent' = 'primary';\n @Input() imagesAllowed: ImageAllowedTypes = 'image/*';\n @ViewChild('imagePicker', { static: false }) imagePicker: ElementRef | undefined;\n @Output() $imageChanged: EventEmitter<any> = new EventEmitter<any>();\n @Output() $imageOriginal: EventEmitter<any> = new EventEmitter<any>();\n\n @Input() set _imageSrc(image: string) {\n if (image) {\n let types = image.split('.');\n this.format = types[types.length - 1];\n\n if (!this.format || (this.format !== 'png' && this.format !== 'jpeg' && this.format !== 'webp')) {\n this.format = 'jpeg';\n }\n\n this.imageSrc = image;\n this.arrayCopiedImages = [];\n this.arrayCopiedImages.push(this.imageSrc);\n this.originImageSrc = image;\n this.lastOriginSrc = image;\n this.$imageOriginal.next(this.originImageSrc);\n this.loadImage = true;\n this.noEdit = true;\n this._cdRef.detectChanges();\n } else {\n this.imageSrc = null;\n this.originImageSrc = null;\n this.loadImage = false;\n this.noEdit = false;\n this.arrayCopiedImages = [];\n this.lastOriginSrc = null;\n this.$imageOriginal.next(null);\n this.format = 'jpeg';\n this.maxHeight = 2000;\n this.maxWidth = 2000;\n this.cropHeight = 150;\n this.cropWidth = 150;\n this.maintainAspectRatio = true;\n this.showEditPanel = false;\n this._cdRef.detectChanges();\n }\n }\n\n @Input() set _config(value: ImagePickerConf) {\n if (value && value.constructor == Object) {\n this.config = { ...this.config, ...value };\n if (value?.language !== undefined) {\n if (value.language === 'es') {\n this.labels = { ...this.labelEs };\n }\n if (value.language === 'en') {\n this.labels = { ...this.labelEn };\n }\n }\n }\n }\n\n private async handleReaderLoaded(readerEvt: { target: { result: any; }; }) {\n const binaryString = readerEvt.target.result;\n const base64textString = btoa(binaryString);\n this.originImageSrc = this.urlImage + base64textString;\n this.lastOriginSrc = this.urlImage + base64textString;\n if (this.config?.compressInitial) {\n this.quality = 92;\n const input: ImageConverterInput = {\n dataType: this.format,\n quality: 0.92,\n maintainRatio: true,\n };\n this.imageSrc = await this.resizeDataURL(this.urlImage + base64textString, input);\n } else {\n this.imageSrc = this.urlImage + base64textString;\n this.arrayCopiedImages = [];\n this.arrayCopiedImages.push({\n lastImage: this.imageSrc,\n width: this.maxWidth,\n height: this.maxHeight,\n quality: this.quality,\n });\n this.$imageOriginal.next(this.imageSrc);\n }\n this.$imageChanged.next(this.imageSrc);\n this.loadImage = true;\n this._cdRef.detectChanges();\n }\n\n private async resizeDataURL(datas: string, input: ImageConverterInput): Promise<any> {\n return await new Promise(async function(resolve) {\n let img = document.createElement('img');\n img.src = datas + '';\n img.crossOrigin = 'Anonymous';\n let quality: number = input?.quality ?? 1.0;\n let maintainRatio: boolean = input.maintainRatio !== undefined ? input.maintainRatio : true;\n\n img.onload = function() {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n let ratio: number = img.width / img.height;\n let width: number = input?.width ?? img.width;\n let height: number = input?.height ?? img.height;\n\n if (maintainRatio) {\n if (input.changeHeight) {\n canvas.width = height * ratio;\n canvas.height = height;\n } else {\n canvas.width = width;\n canvas.height = width / ratio;\n }\n } else {\n canvas.width = width;\n canvas.height = height;\n }\n\n ctx?.drawImage(img, 0, 0, canvas.width, canvas.height);\n let type = input.dataType ? input.dataType : 'webp';\n const dataURI = canvas.toDataURL(`image/${type}`, quality);\n resolve({\n dataUri: dataURI,\n width: canvas.width,\n height: canvas.height,\n });\n };\n }).then((data: any) => {\n this.maxHeight = data?.height;\n this.maxWidth = data?.width;\n if (this.arrayCopiedImages?.length <= 20) {\n this.arrayCopiedImages.push({\n lastImage: data?.dataUri,\n width: this.maxWidth,\n height: this.maxHeight,\n quality: this.quality,\n });\n }\n\n return data.dataUri;\n });\n }\n\n private wait(ms?: number | undefined): Promise<any> {\n ms = ms ? ms : 1000;\n return new Promise((resolve) => {\n setTimeout(() => {\n return resolve(true);\n }, ms);\n });\n }\n\n private dragElement(element: HTMLElement): void {\n let pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;\n\n let el = document.getElementById(element.id + '-header');\n if (el) {\n el.onmousedown = dragMouseDown;\n el.ontouchstart = dragMouseDown;\n } else {\n element.onmousedown = dragMouseDown;\n element.ontouchstart = dragMouseDown;\n }\n\n function dragMouseDown(e: any) {\n e = e || window.event;\n e?.preventDefault();\n pos3 = e?.clientX;\n pos4 = e?.clientY;\n document.onmouseup = closeDragElement;\n document.ontouchend = closeDragElement;\n document.onmousemove = elementDrag;\n document.ontouchmove = elementDrag;\n }\n\n function elementDrag(e: any) {\n let holderImage: any = document.getElementById('image-full');\n e = e || window.event;\n e?.preventDefault();\n pos1 = pos3 - e?.clientX;\n pos2 = pos4 - e?.clientY;\n pos3 = e?.clientX;\n pos4 = e?.clientY;\n\n const newTop = element.offsetTop - pos2;\n const newLeft = element.offsetLeft - pos1;\n const rectHolder = holderImage.getBoundingClientRect();\n const rectElement = element.getBoundingClientRect();\n if (newTop >= rectHolder.y + 8) {\n element.style.top = Math.min(newTop, rectHolder.y + rectHolder.height - rectElement.height - 4) + 'px';\n }\n if (newLeft > rectHolder.x + 4 && rectHolder.x + rectHolder.width > rectElement.x + rectElement.width + 2) {\n element.style.left = Math.min(newLeft, rectHolder.x + rectHolder.width - rectElement.width - 4) + 'px';\n }\n }\n\n function closeDragElement() {\n document.onmouseup = null;\n document.onmousemove = null;\n document.ontouchend = null;\n document.ontouchmove = null;\n }\n }\n\n public onUpload(event: { preventDefault: () => void; }): void {\n event.preventDefault();\n this.imagePicker?.nativeElement.click();\n }\n\n public handleFileSelect(evt: any): void {\n const files = evt?.target?.files;\n if (files) {\n const file = files[0];\n this.imageName = file?.name?.split('.')[0];\n this.fileType = file?.type;\n this.urlImage = `data:${file?.type};base64,`;\n this.noEdit = false;\n this._cdRef.detectChanges();\n\n if (files && file) {\n const reader: any = new FileReader();\n reader.onload = this.handleReaderLoaded.bind(this);\n reader.readAsBinaryString(file);\n }\n }\n }\n\n public onCloseEditPanel(): void {\n if (this.observer instanceof ResizeObserver) {\n let imageCropper: any = document.getElementById('image-cropper');\n let imageFull: any = document.getElementById('image-full');\n this.observer.unobserve(imageCropper);\n this.observer.unobserve(imageFull);\n }\n this.showCrop = false;\n this.showEditPanel = false;\n }\n\n public async onChangeQuality(): Promise<void> {\n const qualityItem: number = this.quality / 100;\n this.maxHeight = this.maxHeight ?? 2000;\n\n this.maxWidth = this.maxWidth ?? 2000;\n\n await this.wait(250);\n try {\n const input: ImageConverterInput = {\n height: this.maxHeight,\n width: this.maxWidth,\n dataType: this.format,\n quality: qualityItem,\n maintainRatio: this.maintainAspectRatio,\n };\n\n this.imageSrc = await this.resizeDataURL(this.originImageSrc, input);\n this.$imageChanged.next(this.imageSrc);\n this.loadImage = true;\n this._cdRef.detectChanges();\n } catch (error) {\n this.loadImage = true;\n this._cdRef.detectChanges();\n }\n }\n\n public async onChangeFormat(): Promise<void> {\n let qualityItem: number = this.quality / 100;\n this.maxHeight = this.maxHeight ?? 2000;\n this.maxWidth = this.maxWidth ?? 2000;\n\n await this.wait(250);\n try {\n let input: ImageConverterInput = {\n height: this.maxHeight,\n width: this.maxWidth,\n dataType: this.format,\n quality: qualityItem,\n maintainRatio: this.maintainAspectRatio,\n };\n this.imageSrc = await this.resizeDataURL(this.originImageSrc, input);\n this.$imageChanged.next(this.imageSrc);\n this.loadImage = true;\n this._cdRef.detectChanges();\n } catch (error) {\n this.loadImage = true;\n this._cdRef.detectChanges();\n }\n }\n\n public async onChangeSize(changeWidth?: any, changeHeight?: any): Promise<void> {\n let qualityItem: number = this.quality / 100;\n this.maxHeight = this.maxHeight ?? 2000;\n this.maxWidth = this.maxWidth ?? 2000;\n await this.wait(500);\n\n try {\n let input: ImageConverterInput = {\n height: this.maxHeight,\n width: this.maxWidth,\n dataType: this.format,\n quality: qualityItem,\n maintainRatio: this.maintainAspectRatio,\n changeHeight: changeHeight,\n changeWidth: changeWidth,\n };\n this.imageSrc = await this.resizeDataURL(this.originImageSrc, input);\n this.$imageChanged.next(this.imageSrc);\n this.loadImage = true;\n this._cdRef.detectChanges();\n } catch (error) {\n this.loadImage = true;\n this._cdRef.detectChanges();\n }\n }\n\n public onChangeCrop(): void {\n const cropper: any = document.getElementById('image-cropper');\n cropper.style.width = this.cropWidth + 'px';\n cropper.style.height = this.cropHeight + 'px';\n }\n\n public onCropStateChange(): void {\n const cropper: any = document.getElementById('image-cropper');\n if (this.showCrop) {\n cropper.style.opacity = '1.0';\n this.dragElement(cropper);\n this.observer = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n if (this.showEditPanel) {\n const elementCropper: any = document.getElementById('image-cropper');\n const elementFull: any = document.getElementById('image-full');\n const rectHolder: any = elementFull.getBoundingClientRect();\n const rectElement = elementCropper.getBoundingClientRect();\n const maxWidth = rectHolder.x + rectHolder.width - rectElement.x - 4;\n const maxHeight = rectHolder.y + rectHolder.height - rectElement.y - 4;\n elementCropper.style.maxWidth = maxWidth + 'px';\n elementCropper.style.maxHeight = maxHeight + 'px';\n this.cropWidth = rectElement.width;\n this.cropHeight = rectElement.height;\n if (entry.target.id == 'image-full') {\n if (rectHolder.top > 0) {\n elementCropper.style.top = rectHolder.top + 4 + 'px';\n }\n elementCropper.style.left = rectHolder.left + 4 + 'px';\n }\n }\n });\n });\n this.observer.observe(document.getElementById('image-cropper'));\n this.observer.observe(document.getElementById('image-full'));\n } else {\n cropper.style.opacity = '0.0';\n if (this.observer instanceof ResizeObserver) {\n const elementCropper: any = document.getElementById('image-cropper');\n const elementFull: any = document.getElementById('image-full');\n this.observer.unobserve(elementCropper);\n this.observer.unobserve(elementFull);\n }\n }\n }\n\n public onCrop(type?: any): void {\n type = type ?? this.format;\n const cropper: any = document.getElementById('image-cropper');\n const elementFull: any = document.getElementById('image-full');\n const rectCropper = cropper.getBoundingClientRect();\n const dataHolderRect = elementFull.getBoundingClientRect();\n const canvas = document.createElement('canvas');\n new Promise((resolve, reject) => {\n let ctx: CanvasRenderingContext2D | null = canvas.getContext('2d');\n let image: HTMLImageElement = new Image();\n image.src = this.imageSrc;\n image.onload = () => {\n let ratio: number = image.height / dataHolderRect.height;\n let newWidth: number = rectCropper.width * ratio;\n let newHeight: number = rectCropper.height * ratio;\n canvas.height = newHeight;\n canvas.width = newWidth;\n ctx?.drawImage(\n image,\n Math.abs(rectCropper.x * ratio) - Math.abs(dataHolderRect.x * ratio),\n Math.abs(rectCropper.y * ratio) - Math.abs(dataHolderRect.y * ratio),\n newWidth,\n newHeight,\n 0,\n 0,\n newWidth,\n newHeight,\n );\n // ctx.drawImage(image, 90, 130, 50, 60, 10, 10, 50, 60);\n resolve(canvas.toDataURL(`image/${type}`, 0.98));\n };\n image.onerror = (e) => {\n reject(e);\n };\n })\n .then((dataUri) => {\n this.imageSrc = dataUri;\n this.showCrop = false;\n this.onCropStateChange();\n this.maxWidth = canvas.width;\n this.maxHeight = canvas.height;\n this.lastOriginSrc = this.originImageSrc + '';\n this.originImageSrc = dataUri;\n this.$imageChanged.next(this.imageSrc);\n })\n .catch((e) => {\n console.log(e);\n });\n }\n\n public onRestore(): void {\n if (this.arrayCopiedImages.length) {\n let lastState = this.arrayCopiedImages.pop();\n this.imageSrc = lastState.lastImage;\n this.maxWidth = lastState.width;\n this.maxHeight = lastState.height;\n this.originImageSrc = this.lastOriginSrc + '';\n this.noEdit = false;\n this._cdRef.detectChanges();\n } else {\n this.imageSrc = this.lastOriginSrc;\n this.originImageSrc = this.lastOriginSrc + '';\n this.noEdit = false;\n this._cdRef.detectChanges();\n }\n\n this.$imageChanged.next(this.imageSrc);\n }\n\n public onRemove(): void {\n this.imageSrc = null;\n this.originImageSrc = null;\n this.loadImage = false;\n this.arrayCopiedImages = [];\n this.lastOriginSrc = null;\n this.$imageOriginal.next(null);\n this.$imageChanged.next(null);\n this.format = 'jpeg';\n this.maxHeight = 2000;\n this.maxWidth = 2000;\n this.cropHeight = 150;\n this.cropWidth = 150;\n this.maintainAspectRatio = true;\n this.showEditPanel = false;\n this.noEdit = false;\n this._cdRef.detectChanges();\n }\n\n ngOnDestroy(): void {\n this.unsubscribeAll$.next();\n this.unsubscribeAll$.complete();\n }\n}\n","<div *ngIf='!loadImage' class='place-image'>\n <div class='image-holder'\n [ngStyle]='{ width: config?.width,height: config?.height,borderRadius: config?.borderRadius}'>\n <button [matTooltip]=\"labels['Upload a image']\" class='image-upload-btn' mat-icon-button (click)='onUpload($event)'>\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\n </button>\n <input #imagePicker type='file' style='display: none' [id]=\"'filePicker-' + uuidFilePicker\"\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\n </div>\n</div>\n<div *ngIf='loadImage' class='place-image'>\n <div class='image-holder-loaded'\n [ngStyle]='{width: config?.width,height: config?.height,borderRadius: config?.borderRadius}'>\n <img [src]='imageSrc' alt='image-loaded' [ngStyle]='{ borderRadius: config.borderRadius }'>\n <input #imagePicker type='file' style='display: none' [id]=\"'filePicker-' + uuidFilePicker\"\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\n </div>\n <p *ngIf='imageSrc?.length' class='mat-caption image-caption'\n [ngStyle]=\"{color: (imageSrc?.length | calculateSize) > 120 ? '#f44336' : 'unset',fontWeight: (imageSrc?.length | calculateSize) > 120 ? '500' : 'unset'}\">\n size: {{ (imageSrc?.length | calculateSize) }}Kb &nbsp; {{ format }}\n </p>\n\n <div class='editing-bar-btn'\n style='flex-direction: row; box-sizing: border-box; display: flex; place-content: flex-start; align-items: flex-start'>\n <button id='upload-img' *ngIf='!config.hideAddBtn' mat-icon-button [matTooltip]=\"labels['Upload a image']\"\n (click)='onUpload($event)'>\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\n </button>\n <button id='edit-img' *ngIf='!config.hideEditBtn && !noEdit' mat-icon-button [matTooltip]=\"labels['Open the editor panel']\"\n (click)='showEditPanel = true'>\n <mat-icon class='mat-18'>edit</mat-icon>\n </button>\n <a id='download-img' *ngIf='!config.hideDownloadBtn' [matTooltip]=\"labels['Download the image']\"\n [href]='imageSrc' mat-icon-button [download]='imageName'>\n <mat-icon class='mat-18'>cloud_download</mat-icon>\n </a>\n <button id='delete-img' *ngIf='!config.hideDeleteBtn' mat-icon-button [matTooltip]=\"labels['Remove']\"\n (click)='onRemove()'>\n <mat-icon class='mat-18'>delete</mat-icon>\n </button>\n </div>\n</div>\n\n<div *ngIf='showEditPanel' id='popup' class='popup'>\n <div\n style='flex-direction: row; box-sizing: border-box; display: flex; place-content: center flex-end; align-items: center'>\n <button mat-icon-button (click)='onCloseEditPanel()'>\n <mat-icon class='mat-18'>clear</mat-icon>\n </button>\n </div>\n\n <div class='image-container'>\n <div class='image-holder-full'>\n <img id='image-full' [src]='imageSrc' alt=''>\n <div id='image-cropper' class='image-cropper'>\n <div id='image-cropper-header'>\n <mat-icon>drag_indicator</mat-icon>\n </div>\n </div>\n </div>\n\n <div class='control-panel'>\n <p class='title-panel'>{{ labels['Control Panel'] }}</p>\n\n <p class='item-panel'>{{ labels['Quality'] }}</p>\n <div\n style='flex-direction: row; box-sizing: border-box; display: flex; place-content: flex-start; align-items: flex-start'>\n <mat-slider ngDefaultControl [color]='color' style='max-width: 100%; width: 100%' (change)='onChangeQuality()'\n [max]='100' [min]='0' [step]='1' [discrete]='true' [showTickMarks]='true'>\n <input matSliderThumb [(ngModel)]='quality'>\n </mat-slider>\n </div>\n\n <div class='item-panel'>\n <span>{{ labels['Max dimensions'] }}</span>\n <mat-checkbox style='float: right' [(ngModel)]='maintainAspectRatio' [color]='color'>\n <span class='mat-caption'>{{ labels['aspect-ratio'] }}</span>\n </mat-checkbox>\n </div>\n\n <div\n style='margin-top: 16px !important; flex-flow: row; box-sizing: border-box; display: flex; place-content: flex-start space-between; align-items: flex-start'>\n <mat-form-field style='width: 48%' [appearance]='appearance' [color]='color'>\n <mat-label>{{ labels['max-width(px)'] }}</mat-label>\n <input (change)='onChangeSize(true, false)' matInput [placeholder]=\"labels['max-width(px)']\"\n [(ngModel)]='maxWidth' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n\n <mat-form-field style='width: 48%' [appearance]='appearance'\n [color]='color'>\n <mat-label>{{ labels['max-height(px)'] }}</mat-label>\n <input (change)='onChangeSize(false, true)' matInput [placeholder]=\"labels['max-height(px)']\"\n [(ngModel)]='maxHeight' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n </div>\n\n <p class='item-panel'>{{ labels['Format'] }}</p>\n <div\n style='margin-top: 8px !important; flex-direction: row; box-sizing: border-box; display: flex; place-content: flex-start; align-items: flex-start'>\n <mat-form-field style='max-width: 100%; width: 100%' [appearance]='appearance'\n [color]='color'>\n <mat-select [(ngModel)]='format' (selectionChange)='onChangeFormat()'>\n <mat-option *ngFor='let format of allFormats' [value]='format'>\n {{ format }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div>\n <mat-checkbox (change)='onCropStateChange()' [(ngModel)]='showCrop' [color]='color'>\n <p class='item-panel'>{{ labels['Crop'] }}</p>\n </mat-checkbox>\n <button style='float: right' mat-icon-button [color]='color' (click)='onRestore()'>\n <mat-icon>refresh</mat-icon>\n </button>\n </div>\n\n <ng-container *ngIf='showCrop'>\n <div\n style='margin-top: 8px !important; flex-flow: row wrap; box-sizing: border-box; display: flex; place-content: flex-start space-between; align-items: flex-start'>\n <mat-form-field style='max-width: 48%; width: 48%' [appearance]='appearance'\n [color]='color'>\n <mat-label>{{ labels['width(px)'] }}</mat-label>\n <input (change)='onChangeCrop()' matInput [placeholder]=\"labels['width(px)']\"\n [(ngModel)]='cropWidth' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n <mat-form-field style='max-width: 48%; width: 48%' [appearance]='appearance'\n [color]='color'>\n <mat-label>{{ labels['height(px)'] }}</mat-label>\n <input (change)='onChangeCrop()' matInput\n [placeholder]=\"labels['height(px)']\" [(ngModel)]='cropHeight' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n </div>\n\n <p style='margin-bottom: 4px !important'>\n <button mat-icon-button [color]='color' (click)='onCrop()'>\n <mat-icon> crop</mat-icon>\n </button>\n </p>\n </ng-container>\n\n <div\n style='flex-direction: row; box-sizing: border-box; display: flex; place-content: center space-between; align-items: center'>\n <button mat-flat-button (click)='onCloseEditPanel()' [color]='color'\n style='padding: 0 8px; height: 34px; box-sizing: border-box;'>\n {{labels['save']}}\n </button>\n\n <p *ngIf='imageSrc?.length' class='mat-caption image-caption'\n [ngStyle]=\"{color: (imageSrc?.length | calculateSize) > 120 ? '#f44336' : 'unset',fontWeight: (imageSrc?.length | calculateSize) > 120 ? '500' : 'unset'}\">\n size: {{ (imageSrc?.length | calculateSize) }}Kb &nbsp; {{ format }}\n </p>\n </div>\n </div>\n </div>\n</div>\n","/*\n * Public API Surface of guachos-image-picker\n */\n\nexport * from './lib/guachos-image-picker.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4.CalculateSizePipe"],"mappings":"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"}