UNPKG

@378q/ngx-photo-editor

Version:
1 lines 31.9 kB
{"version":3,"file":"378q-ngx-photo-editor.mjs","sources":["../../../projects/ngx-photo-editor/src/lib/ngx-photo-editor.component.ts","../../../projects/ngx-photo-editor/src/lib/ngx-photo-editor.component.html","../../../projects/ngx-photo-editor/src/lib/ngx-photo-editor.service.ts","../../../projects/ngx-photo-editor/src/lib/ngx-photo-editor.module.ts","../../../projects/ngx-photo-editor/src/public-api.ts","../../../projects/ngx-photo-editor/src/378q-ngx-photo-editor.ts"],"sourcesContent":["import {Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild} from '@angular/core';\nimport Cropper from \"cropperjs\";\nimport ViewMode = Cropper.ViewMode;\n\n@Component({\n selector: 'lib-ngx-photo-editor',\n templateUrl: './ngx-photo-editor.component.html',\n})\nexport class NgxPhotoEditorComponent implements OnDestroy {\n\n @ViewChild('image') image!: ElementRef;\n\n private cropper!: Cropper;\n public imgUrl!: string;\n private FILES_REGEX = /\\.(gif|jpe?g|tiff|png|webp|bmp)$/i;\n\n\n @Input() modalTitle = 'Photo Editor';\n @Input() hideModalHeader = false;\n @Input() aspectRatio = NaN;\n @Input() autoCropArea = 0.8;\n @Input() autoCrop = true;\n @Input() mask = true;\n @Input() guides = true;\n @Input() centerIndicator = true;\n @Input() viewMode: ViewMode = 0;\n @Input() modalMaxWidth = '500px';\n @Input() modalCentered = false;\n @Input() scalable = true;\n @Input() zoomable = true;\n @Input() cropBoxMovable = true;\n @Input() cropBoxResizable = true;\n @Input() darkTheme = true;\n @Input() roundCropper = false;\n @Input() canvasHeight = 400;\n\n @Input() resizeToWidth: number | any;\n @Input() resizeToHeight: number | any;\n @Input() imageSmoothingEnabled = true;\n @Input() imageSmoothingQuality: ImageSmoothingQuality = 'high';\n @Input() format: string | any;\n\n @Input() closeBtnText = 'Close';\n @Input() applyBtnText = 'Apply';\n\n quality = 92;\n\n @Input() set imageQuality(value: number) {\n if (value > 0 && value <= 100) {\n this.quality = value;\n } else {\n this.errorEvent.error('Invalid image quality');\n }\n }\n\n @Output() closeEvent = new EventEmitter<any>();\n @Output() imageCroppedEvent = new EventEmitter<NgxCroppedEvent>();\n @Output() errorEvent = new EventEmitter<any>();\n imageLoaded = false;\n isProcessing = false;\n\n\n @Input() set source(data: File | string | any) {\n if (data instanceof Event) {\n // @ts-ignore\n const file = (<HTMLInputElement>data.target).files[0];\n if (this.FILES_REGEX.test(file.name)) {\n if (!this.format) {\n // @ts-ignore\n this.format = data.target.files[0].type.split('/')[1];\n }\n const reader = new FileReader();\n reader.onload = (ev: any) => {\n this.imgUrl = ev.target.result;\n };\n // @ts-ignore\n reader.readAsDataURL(data.target.files[0]);\n } else {\n console.log('error');\n this.errorEvent.emit('Not supported INPUT');\n }\n } else if (data instanceof File) {\n if (this.FILES_REGEX.test(data.name)) {\n if (!this.format) {\n this.format = data.type.split('/')[1];\n }\n const reader = new FileReader();\n reader.onload = (ev: any) => {\n this.imgUrl = ev.target.result;\n };\n reader.readAsDataURL(data);\n } else {\n this.errorEvent.emit('Not supported INPUT');\n }\n } else if (typeof data === 'string') {\n if ((/^data:image\\/([a-zA-Z]*);base64,([^\\\"]*)$/).test(data)) {\n this.imgUrl = data;\n if (!this.format) {\n this.format = ((data.split(',')[0]).split(';')[0]).split(':')[1].split('/')[1];\n }\n } else if (this.isValidImageURL(data)) {\n this.imgUrl = data;\n if (!this.format) {\n // @ts-ignore\n this.format = data.split(/[#?]/)[0].split('.').pop().trim();\n }\n } else {\n this.errorEvent.emit('Not supported URL');\n }\n } else {\n this.errorEvent.emit('Not supported INPUT');\n }\n }\n\n isValidImageURL(str: string) {\n return str.match(/^http[^\\?]*.(jpg|jpeg|gif|png|tiff|bmp)(\\?(.*))?(\\#(.*))?$/gim);\n }\n\n rotateRight() {\n this.cropper.rotate(45);\n }\n\n rotateLeft() {\n this.cropper.rotate(-45);\n }\n\n crop() {\n this.cropper.setDragMode('crop');\n }\n\n move() {\n this.cropper.setDragMode('move');\n }\n\n zoomIn() {\n this.cropper.zoom(0.1);\n }\n\n zoomOut() {\n this.cropper.zoom(-0.1);\n }\n\n flipH() {\n this.cropper.scaleX(-this.cropper.getImageData().scaleX);\n }\n\n flipV() {\n this.cropper.scaleY(-this.cropper.getImageData().scaleY);\n }\n\n reset() {\n this.cropper.reset();\n }\n\n export() {\n this.isProcessing = true;\n this.imageLoaded = false;\n let cropedImage = this.cropper.getCroppedCanvas({\n width: this.resizeToWidth,\n height: this.resizeToHeight,\n imageSmoothingEnabled: this.imageSmoothingEnabled,\n imageSmoothingQuality: this.imageSmoothingQuality\n });\n\n const outputImage = cropedImage.toDataURL('image/' + this.format, this.quality);\n fetch(outputImage)\n .then(res => res.blob())\n .then(blob => {\n this.isProcessing = false;\n this.imageLoaded = true;\n this.imageCroppedEvent.emit({\n base64: outputImage,\n file: new File([blob],\n Date.now() + '.' + this.format,\n {type: 'image/' + this.format})\n });\n })\n }\n\n\n close() {\n this.closeEvent.emit();\n }\n\n onLoad() {\n this.image.nativeElement.addEventListener('ready', () => {\n this.imageLoaded = true;\n });\n\n this.cropper = new Cropper(this.image.nativeElement, {\n aspectRatio: this.aspectRatio,\n autoCropArea: this.autoCropArea,\n autoCrop: this.autoCrop,\n modal: this.mask, // black mask\n guides: this.guides, // grid\n center: this.centerIndicator, // center indicator\n viewMode: this.viewMode,\n scalable: this.scalable,\n zoomable: this.zoomable,\n background: false,\n cropBoxMovable: this.cropBoxMovable,\n cropBoxResizable: this.cropBoxResizable,\n });\n }\n\n ngOnDestroy(): void {\n }\n\n error() {\n this.errorEvent.emit('Error loading image');\n }\n}\n\nexport interface NgxCroppedEvent {\n base64?: string;\n file?: File;\n}\n\nexport type imageFormat = 'gif' | 'jpeg' | 'tiff' | 'png' | 'webp' | 'bmp';\n","<div class=\"ngx-pe-overlay-container\">\n <div class=\"ngx-pe-dialog-container\" [style.max-width]=\"modalMaxWidth\">\n <div class=\"ngx-pe-dialog-header\" *ngIf=\"!hideModalHeader\">\n {{modalTitle}}\n </div>\n <div class=\"ngx-pe-dialog-body\">\n <div class=\"ngx-pe-cropper-wrapper\" [class]=\"roundCropper ? 'ngx-pe-cropper-round' : ''\">\n <div class=\"ngx-pe-loading\" *ngIf=\"!imageLoaded\" [class.ngx-pe-processing]=\"isProcessing\">\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n style=\"margin: auto; display: block; shape-rendering: auto; animation-play-state: running; animation-delay: 0s;\"\n viewBox=\"0 0 100 100\" preserveAspectRatio=\"xMidYMid\">\n <circle cx=\"50\" cy=\"50\" fill=\"none\" stroke=\"#f3f3f3\" stroke-width=\"10\" r=\"35\"\n stroke-dasharray=\"164.93361431346415 56.97787143782138\"\n style=\"animation-play-state: running; animation-delay: 0s;\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" repeatCount=\"indefinite\" dur=\"1s\"\n values=\"0 50 50;360 50 50\" keyTimes=\"0;1\"\n style=\"animation-play-state: running; animation-delay: 0s;\"></animateTransform>\n </circle>\n </svg>\n </div>\n <img *ngIf=\"imgUrl\" class=\"ngx-pe-img\" #image loading=\"lazy\" (load)=\"onLoad()\" (error)=\"error()\" [src]=\"imgUrl\" alt=\"cropper-img\" crossorigin=\"anonymous\">\n <div class=\"ngx-pe-tool-bar\">\n <!--move-->\n <button (click)=\"move()\" title=\"Move\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\">\n <path\n d=\"M24 44 15.85 35.85 18.05 33.65 22.5 38.1V28.65H25.5V38.1L29.95 33.65L32.15 35.85ZM11.9 31.9 4 24 11.95 16.05 14.15 18.25 9.9 22.5H19.35V25.5H9.9L14.1 29.7ZM36.1 31.9 33.9 29.7 38.1 25.5H28.7V22.5H38.1L33.9 18.3L36.1 16.1L44 24ZM22.5 19.3V9.9L18.3 14.1L16.1 11.9L24 4L31.9 11.9L29.7 14.1L25.5 9.9V19.3Z\"/>\n </svg>\n </button>\n\n <!--crop-->\n <button (click)=\"crop()\" title=\"Crop\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\">\n <path\n d=\"M34.75 31.75V13.25Q34.75 13.25 34.75 13.25Q34.75 13.25 34.75 13.25H16.25V10.25H34.75Q35.95 10.25 36.85 11.15Q37.75 12.05 37.75 13.25V31.75ZM36.25 46Q35.6 46 35.175 45.575Q34.75 45.15 34.75 44.5V37.75H13.25Q12.05 37.75 11.15 36.85Q10.25 35.95 10.25 34.75V13.25H3.5Q2.85 13.25 2.425 12.825Q2 12.4 2 11.75Q2 11.1 2.425 10.675Q2.85 10.25 3.5 10.25H10.25V3.5Q10.25 2.85 10.675 2.425Q11.1 2 11.75 2Q12.4 2 12.825 2.425Q13.25 2.85 13.25 3.5V34.75Q13.25 34.75 13.25 34.75Q13.25 34.75 13.25 34.75H44.5Q45.15 34.75 45.575 35.175Q46 35.6 46 36.25Q46 36.9 45.575 37.325Q45.15 37.75 44.5 37.75H37.75V44.5Q37.75 45.15 37.325 45.575Q36.9 46 36.25 46Z\"/>\n </svg>\n </button>\n\n <!--zoom in-->\n <button (click)=\"zoomIn()\" title=\"Zoom In\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\">\n <path\n d=\"M38.7 40.85 26.65 28.8Q25.15 30.1 23.15 30.825Q21.15 31.55 18.9 31.55Q13.5 31.55 9.75 27.8Q6 24.05 6 18.75Q6 13.45 9.75 9.7Q13.5 5.95 18.85 5.95Q24.15 5.95 27.875 9.7Q31.6 13.45 31.6 18.75Q31.6 20.9 30.9 22.9Q30.2 24.9 28.8 26.65L40.95 38.7Q41.4 39.1 41.375 39.75Q41.35 40.4 40.9 40.85Q40.45 41.3 39.8 41.3Q39.15 41.3 38.7 40.85ZM18.85 28.55Q22.9 28.55 25.75 25.675Q28.6 22.8 28.6 18.75Q28.6 14.7 25.75 11.825Q22.9 8.95 18.85 8.95Q14.75 8.95 11.875 11.825Q9 14.7 9 18.75Q9 22.8 11.875 25.675Q14.75 28.55 18.85 28.55ZM18.8 24.3Q18.15 24.3 17.725 23.875Q17.3 23.45 17.3 22.8V20.2H14.65Q14.05 20.2 13.625 19.75Q13.2 19.3 13.2 18.65Q13.2 18.05 13.625 17.625Q14.05 17.2 14.7 17.2H17.3V14.6Q17.3 14 17.75 13.575Q18.2 13.15 18.85 13.15Q19.45 13.15 19.875 13.575Q20.3 14 20.3 14.65V17.2H22.9Q23.5 17.2 23.925 17.65Q24.35 18.1 24.35 18.7Q24.35 19.35 23.925 19.775Q23.5 20.2 22.85 20.2H20.3V22.85Q20.3 23.45 19.85 23.875Q19.4 24.3 18.8 24.3Z\"/>\n </svg>\n </button>\n\n <!--zoom out-->\n <button (click)=\"zoomOut()\" title=\"Zoom Out\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\">\n <path\n d=\"M38.7 40.85 26.65 28.8Q25.15 30.1 23.15 30.825Q21.15 31.55 18.9 31.55Q13.5 31.55 9.75 27.8Q6 24.05 6 18.75Q6 13.45 9.75 9.7Q13.5 5.95 18.85 5.95Q24.15 5.95 27.875 9.7Q31.6 13.45 31.6 18.75Q31.6 20.9 30.9 22.9Q30.2 24.9 28.8 26.65L40.95 38.7Q41.4 39.1 41.375 39.75Q41.35 40.4 40.9 40.85Q40.45 41.3 39.8 41.3Q39.15 41.3 38.7 40.85ZM18.85 28.55Q22.9 28.55 25.75 25.675Q28.6 22.8 28.6 18.75Q28.6 14.7 25.75 11.825Q22.9 8.95 18.85 8.95Q14.75 8.95 11.875 11.825Q9 14.7 9 18.75Q9 22.8 11.875 25.675Q14.75 28.55 18.85 28.55ZM15.2 20.2Q14.6 20.2 14.175 19.75Q13.75 19.3 13.75 18.65Q13.75 18.05 14.175 17.625Q14.6 17.2 15.25 17.2H22.35Q22.95 17.2 23.375 17.65Q23.8 18.1 23.8 18.7Q23.8 19.35 23.375 19.775Q22.95 20.2 22.3 20.2Z\"/>\n </svg>\n </button>\n\n <!--rotate left-->\n <button (click)=\"rotateLeft()\" title=\"Rotate Left\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\">\n <path\n d=\"M7.9 23.6Q7.15 23.6 6.7 23.075Q6.25 22.55 6.4 21.85Q6.75 20.3 7.325 18.85Q7.9 17.4 8.7 16.05Q9.1 15.4 9.775 15.35Q10.45 15.3 11 15.85Q11.4 16.2 11.45 16.75Q11.5 17.3 11.25 17.75Q10.55 18.9 10.075 20.075Q9.6 21.25 9.35 22.4Q9.25 22.95 8.85 23.275Q8.45 23.6 7.9 23.6ZM20.05 43.7Q18.6 43.35 17.15 42.775Q15.7 42.2 14.4 41.4Q13.75 41 13.7 40.3Q13.65 39.6 14.2 39Q14.55 38.65 15.05 38.6Q15.55 38.55 15.95 38.8Q17.1 39.5 18.225 39.975Q19.35 40.45 20.55 40.75Q21.05 40.85 21.4 41.275Q21.75 41.7 21.75 42.25Q21.75 43 21.25 43.425Q20.75 43.85 20.05 43.7ZM8.7 35.7Q7.9 34.4 7.325 32.925Q6.75 31.45 6.4 29.85Q6.25 29.15 6.675 28.625Q7.1 28.1 7.9 28.1Q8.4 28.1 8.825 28.425Q9.25 28.75 9.35 29.3Q9.6 30.55 10.05 31.725Q10.5 32.9 11.2 33.95Q11.5 34.4 11.45 34.95Q11.4 35.5 11 35.9Q10.45 36.45 9.775 36.4Q9.1 36.35 8.7 35.7ZM27.95 43.65Q27.25 43.85 26.75 43.425Q26.25 43 26.25 42.25Q26.25 41.75 26.6 41.325Q26.95 40.9 27.45 40.75Q32.5 39.4 35.75 35.375Q39 31.35 39 25.85Q39 19.5 34.675 15.175Q30.35 10.85 24 10.85H23L25.85 13.7Q26.3 14.15 26.3 14.8Q26.3 15.45 25.85 15.9Q25.4 16.35 24.75 16.35Q24.1 16.35 23.65 15.9L18.15 10.4Q17.9 10.15 17.8 9.9Q17.7 9.65 17.7 9.35Q17.7 9.05 17.8 8.8Q17.9 8.55 18.15 8.3L23.65 2.8Q24.1 2.35 24.75 2.35Q25.4 2.35 25.85 2.8Q26.3 3.25 26.3 3.9Q26.3 4.55 25.85 5L23 7.85H24Q31.55 7.85 36.775 13.075Q42 18.3 42 25.85Q42 32.4 38.075 37.275Q34.15 42.15 27.95 43.65Z\"/>\n </svg>\n </button>\n\n <!--rotate right-->\n <button (click)=\"rotateRight()\" title=\"Rotate Right\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\">\n <path\n d=\"M40.2 23.6Q39.7 23.6 39.275 23.25Q38.85 22.9 38.75 22.4Q38.5 21.2 38.025 20.05Q37.55 18.9 36.85 17.75Q36.6 17.3 36.65 16.75Q36.7 16.2 37.1 15.8Q37.65 15.25 38.35 15.325Q39.05 15.4 39.45 16.05Q40.25 17.35 40.8 18.775Q41.35 20.2 41.7 21.8Q41.85 22.5 41.4 23.05Q40.95 23.6 40.2 23.6ZM26.3 42.2Q26.3 41.7 26.65 41.275Q27 40.85 27.5 40.75Q28.65 40.5 29.8 40.025Q30.95 39.55 32.1 38.85Q32.55 38.6 33.075 38.625Q33.6 38.65 34 39.05Q34.55 39.6 34.475 40.3Q34.4 41 33.75 41.4Q32.4 42.25 30.975 42.8Q29.55 43.35 28.1 43.7Q27.4 43.85 26.85 43.4Q26.3 42.95 26.3 42.2ZM37.1 35.9Q36.75 35.55 36.7 34.975Q36.65 34.4 36.9 33.95Q37.6 32.8 38.05 31.65Q38.5 30.5 38.75 29.3Q38.85 28.8 39.25 28.45Q39.65 28.1 40.2 28.1Q40.95 28.1 41.375 28.625Q41.8 29.15 41.65 29.85Q41.25 31.45 40.7 32.9Q40.15 34.35 39.4 35.65Q39 36.3 38.325 36.375Q37.65 36.45 37.1 35.9ZM20.05 43.7Q13.9 42.3 10 37.35Q6.1 32.4 6.1 25.85Q6.1 18.3 11.325 13.075Q16.55 7.85 24.1 7.85H25.1L22.25 5Q21.8 4.55 21.8 3.9Q21.8 3.25 22.25 2.8Q22.7 2.35 23.35 2.35Q24 2.35 24.45 2.8L29.95 8.3Q30.2 8.55 30.3 8.8Q30.4 9.05 30.4 9.35Q30.4 9.65 30.3 9.9Q30.2 10.15 29.95 10.4L24.45 15.9Q24 16.35 23.35 16.35Q22.7 16.35 22.25 15.9Q21.8 15.45 21.8 14.8Q21.8 14.15 22.25 13.7L25.1 10.85H24.1Q17.75 10.85 13.425 15.175Q9.1 19.5 9.1 25.85Q9.1 31.35 12.35 35.375Q15.6 39.4 20.65 40.7Q21.15 40.8 21.5 41.225Q21.85 41.65 21.85 42.2Q21.85 42.95 21.3 43.4Q20.75 43.85 20.05 43.7Z\"/>\n </svg>\n </button>\n\n <!--flip vertical-->\n <button (click)=\"flipH()\" title=\"Flip Horizontal\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\">\n <path\n d=\"M9 42Q7.8 42 6.9 41.1Q6 40.2 6 39V9Q6 7.8 6.9 6.9Q7.8 6 9 6H18.1Q18.75 6 19.175 6.425Q19.6 6.85 19.6 7.5Q19.6 8.15 19.175 8.575Q18.75 9 18.1 9H9Q9 9 9 9Q9 9 9 9V39Q9 39 9 39Q9 39 9 39H18.1Q18.75 39 19.175 39.425Q19.6 39.85 19.6 40.5Q19.6 41.15 19.175 41.575Q18.75 42 18.1 42ZM24.1 46Q23.45 46 23.025 45.575Q22.6 45.15 22.6 44.5V3.5Q22.6 2.85 23.025 2.425Q23.45 2 24.1 2Q24.75 2 25.175 2.425Q25.6 2.85 25.6 3.5V44.5Q25.6 45.15 25.175 45.575Q24.75 46 24.1 46ZM39 9H38.3V6H39Q40.2 6 41.1 6.9Q42 7.8 42 9V9.7H39ZM39 26.75V21.25H42V26.75ZM39 42H38.3V39H39V38.3H42V39Q42 40.2 41.1 41.1Q40.2 42 39 42ZM39 18.25V12.7H42V18.25ZM39 35.3V29.75H42V35.3ZM28.6 42V39H35.3V42ZM28.6 9V6H35.3V9Z\"/>\n </svg>\n </button>\n\n <!--flip horizontal-->\n <button (click)=\"flipV()\" title=\"Flip Vertical\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\" transform='rotate(90)'>\n <path\n d=\"M9 42Q7.8 42 6.9 41.1Q6 40.2 6 39V9Q6 7.8 6.9 6.9Q7.8 6 9 6H18.1Q18.75 6 19.175 6.425Q19.6 6.85 19.6 7.5Q19.6 8.15 19.175 8.575Q18.75 9 18.1 9H9Q9 9 9 9Q9 9 9 9V39Q9 39 9 39Q9 39 9 39H18.1Q18.75 39 19.175 39.425Q19.6 39.85 19.6 40.5Q19.6 41.15 19.175 41.575Q18.75 42 18.1 42ZM24.1 46Q23.45 46 23.025 45.575Q22.6 45.15 22.6 44.5V3.5Q22.6 2.85 23.025 2.425Q23.45 2 24.1 2Q24.75 2 25.175 2.425Q25.6 2.85 25.6 3.5V44.5Q25.6 45.15 25.175 45.575Q24.75 46 24.1 46ZM39 9H38.3V6H39Q40.2 6 41.1 6.9Q42 7.8 42 9V9.7H39ZM39 26.75V21.25H42V26.75ZM39 42H38.3V39H39V38.3H42V39Q42 40.2 41.1 41.1Q40.2 42 39 42ZM39 18.25V12.7H42V18.25ZM39 35.3V29.75H42V35.3ZM28.6 42V39H35.3V42ZM28.6 9V6H35.3V9Z\"/>\n </svg>\n </button>\n <button (click)=\"reset()\" title=\"Reset\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\">\n <path\n d=\"M9.8 31.45Q8.8 29.65 8.4 27.825Q8 26 8 24.1Q8 17.55 12.725 12.825Q17.45 8.1 24 8.1H26.15L22.15 4.1L24.1 2.15L31.55 9.6L24.1 17.05L22.1 15.05L26.05 11.1H24Q18.65 11.1 14.825 14.925Q11 18.75 11 24.1Q11 25.55 11.275 26.85Q11.55 28.15 11.95 29.3ZM23.8 46 16.35 38.55 23.8 31.1 25.75 33.05 21.75 37.05H24Q29.35 37.05 33.175 33.225Q37 29.4 37 24.05Q37 22.6 36.75 21.3Q36.5 20 36 18.85L38.15 16.7Q39.15 18.5 39.575 20.325Q40 22.15 40 24.05Q40 30.6 35.275 35.325Q30.55 40.05 24 40.05H21.75L25.75 44.05Z\"/>\n </svg>\n </button>\n\n </div>\n </div>\n </div>\n <div class=\"ngx-pe-dialog-footer\">\n <button class=\"ngx-pe-btn ngx-pe-btn-outline-light\" (click)=\"close()\">{{closeBtnText}}</button>\n <button class=\"ngx-pe-btn ngx-pe-btn-primary\" [disabled]=\"isProcessing\" (click)=\"export()\">{{applyBtnText}}</button>\n </div>\n </div>\n</div>\n","import {\n ApplicationRef,\n ComponentFactoryResolver,\n ComponentRef,\n EmbeddedViewRef,\n Injectable,\n Injector\n} from '@angular/core';\nimport {Observable, Subject} from \"rxjs\";\nimport ViewMode = Cropper.ViewMode;\nimport {NgxCroppedEvent, NgxPhotoEditorComponent} from \"./ngx-photo-editor.component\";\nimport CropperEvent = Cropper.CropperEvent;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NgxPhotoEditorService {\n\n private ngxPESubscriber!: Subject<any>;\n private ngxPEComponentRef!: ComponentRef<NgxPhotoEditorComponent>;\n\n\n constructor(\n private componentFactoryResolver: ComponentFactoryResolver,\n private appRef: ApplicationRef,\n private injector: Injector) {\n }\n\n open(source: Event | string | File | any, options?: Options): Observable<NgxCroppedEvent> {\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(NgxPhotoEditorComponent);\n const componentRef = componentFactory.create(this.injector);\n this.appRef.attachView(componentRef.hostView);\n const domElem = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n document.body.appendChild(domElem);\n this.ngxPESubscriber = new Subject<string>();\n this.ngxPEComponentRef = componentRef;\n this.ngxPEComponentRef.instance.closeEvent.subscribe(() => this.close());\n this.ngxPEComponentRef.instance.errorEvent.subscribe((data) => this.errorHandler(data));\n this.ngxPEComponentRef.instance.imageCroppedEvent.subscribe((data) => this.export(data));\n if (options) {\n Object.keys(options).map(value => {\n // @ts-ignore\n this.ngxPEComponentRef.instance[value] = options[value];\n })\n }\n this.ngxPEComponentRef.instance.source = source;\n return this.ngxPESubscriber.asObservable();\n }\n\n private errorHandler(data: any) {\n this.ngxPESubscriber.error(data);\n this.close();\n }\n\n private close() {\n this.ngxPESubscriber.complete();\n this.ngxPEComponentRef.destroy();\n }\n\n private export(data: any) {\n this.ngxPESubscriber.next(data);\n this.close();\n }\n\n}\n\nexport interface Options {\n aspectRatio?: number | any;\n modalTitle?: string;\n hideModalHeader?: boolean;\n autoCropArea?: number;\n autoCrop?: boolean;\n mask?: boolean;\n guides?: boolean;\n centerIndicator?: boolean;\n viewMode?: ViewMode;\n modalMaxWidth?: string;\n scalable?: boolean;\n zoomable?: boolean;\n cropBoxMovable?: boolean;\n cropBoxResizable?: boolean;\n roundCropper?: boolean;\n resizeToWidth?: number | any;\n resizeToHeight?: number | any;\n imageSmoothingEnabled?: boolean;\n imageSmoothingQuality?: ImageSmoothingQuality;\n format?: string | any;\n imageQuality?: number;\n applyBtnText?: string;\n closeBtnText?: string;\n}\n","import {NgModule} from '@angular/core';\nimport {NgxPhotoEditorComponent} from './ngx-photo-editor.component';\nimport {CommonModule} from \"@angular/common\";\n\n\n@NgModule({\n declarations: [\n NgxPhotoEditorComponent\n ],\n imports: [\n CommonModule,\n ],\n exports: [\n NgxPhotoEditorComponent\n ]\n})\nexport class NgxPhotoEditorModule {\n}\n","/*\n * Public API Surface of ngx-photo-editor\n */\n\nexport * from './lib/ngx-photo-editor.service';\nexport * from './lib/ngx-photo-editor.component';\nexport * from './lib/ngx-photo-editor.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}