{"version":3,"file":"ngx-image-drawing-zone.mjs","sources":["../../../projects/ngx-image-drawing-zone/src/lib/image-drawing/image-drawing/i18n.ts","../../../projects/ngx-image-drawing-zone/src/lib/image-drawing/image-drawing/image-drawing.component.ts","../../../projects/ngx-image-drawing-zone/src/lib/image-drawing/image-drawing/image-drawing.component.html","../../../projects/ngx-image-drawing-zone/src/lib/image-drawing/image-drawing.module.ts","../../../projects/ngx-image-drawing-zone/src/public-api.ts","../../../projects/ngx-image-drawing-zone/src/ngx-image-drawing-zone.ts"],"sourcesContent":["export const I18nFr: I18nInterface = {\n    saveBtn: 'Enregistrer',\n    cancelBtn: 'Annuler',\n\n    loadImage: 'Charger une image depuis votre PC',\n    loadImageUrl: 'Charger une image depuis une URL',\n    loading: 'Chargement',\n    loadError: 'Erreur de chargement %@',\n    removeImage: 'Supprimer l\\'image',\n\n    sizes: {\n        small: 'Petit',\n        medium: 'Moyen',\n        large: 'Gros'\n    },\n\n    undo: 'Annuler',\n    redo: 'Répter',\n    clear: 'Effacer',\n\n    colors: {\n        black: 'Noir',\n        white: 'Blanc',\n        yellow: 'Jaune',\n        red: 'Rouge',\n        green: 'Vert',\n        blue: 'Blue',\n        purple: 'Violet'\n    },\n\n    tools: {\n        brush: 'Pinceau'\n    }\n};\n\nexport const I18nEn: I18nInterface = {\n    saveBtn: 'Save',\n    cancelBtn: 'Cancel',\n\n    loadImage: 'Load image',\n    loadImageUrl: 'Load image from URL',\n    loading: 'Loading',\n    loadError: 'Error loading %@',\n    removeImage: 'Remove image',\n\n    sizes: {\n        small: 'Small',\n        medium: 'Medium',\n        large: 'Large'\n    },\n    resize:\"Resize\",\n    undo: 'Undo',\n    redo: 'Redo',\n    clear: 'Clear',\n    crop: 'Crop',\n    mask:\"Mask\",\n    rotate:\"Rotate\",\n    colors: {\n        black: 'Black',\n        white: 'White',\n        yellow: 'Yellow',\n        red: 'Red',\n        green: 'Green',\n        blue: 'Blue',\n        purple: 'Purple',\n    },\n\n    tools: {\n        brush: 'Brush'\n    }\n};\nexport const I18nHe: I18nInterface = {\n    saveBtn: 'שמירה',\n    cancelBtn: 'ביטול',\n\n    loadImage: 'טוען תמונה',\n    loadImageUrl: 'טוען תמונה מנתיב',\n    loading: 'בטעינה',\n    loadError: 'שגיאה בטעינה',\n    removeImage: 'הסרת תמונה',\n    sizes: {\n        small: 'קטן',\n        medium: 'בינוני',\n        large: 'גדול'\n    },\n    rotate:\"הפיכת תמונה\",\n    resize:\"שנה גודל\",\n    undo: 'ביטול',\n    redo: 'שחזור',\n    clear: 'ניקןי',\n    crop: 'חיתוך תמונה',\n    mask:'ריבוע בחירה',\n    colors: {\n        black: 'שחור',\n        white: 'לבן',\n        yellow: 'צהוב',\n        red: 'אדום',\n        green: 'ירוק',\n        blue: 'כחול',\n        purple: 'סגול',\n    },\n\n    tools: {\n        brush: 'מברשת'\n    }\n};\nexport const i18nLanguages: { [name: string]: I18nInterface } = {\n    fr: I18nFr,\n    en: I18nEn,\n    he:I18nHe\n};\n\nexport interface I18nInterface {\n    saveBtn?: string;\n    cancelBtn?: string;\n\n    loadImage?: string;\n    loadImageUrl?: string;\n    loading?: string;\n    loadError?: string;\n    removeImage?: string;\n\n    sizes?: { [name: string]: string };\n    resize?:string;\n    undo?: string;\n    redo?: string;\n    clear?: string;\n    crop?:string;\n    mask?:string\n    rotate?:string\n    colors?: { [name: string]: string };\n\n    tools?: { [name: string]: string };\n}\n","import { Component, EventEmitter, Input, NgZone, OnChanges, OnInit, Output, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { fabric } from 'fabric';\r\nimport { I18nEn, I18nInterface, i18nLanguages } from './i18n';\r\nimport { Observable, of } from 'rxjs';\r\nimport { switchMap } from 'rxjs/operators';\nimport { NgTemplateOutlet, NgStyle, NgClass } from '@angular/common';\r\n\r\n@Component({\n    selector: 'image-drawing',\n    styleUrls: ['./image-drawing.component.scss'],\n    templateUrl: './image-drawing.component.html',\n    standalone: true,\n    imports: [NgTemplateOutlet, NgStyle, NgClass]\n})\r\nexport class ImageDrawingComponent implements OnInit, OnChanges {\r\n\r\n    @Input() public src?: string;\r\n    @Input() public width?: number;\r\n    @Input() public height?: number;\r\n\r\n    @Input() public saveBtnClass=\"button btn-primary\"\r\n    @Input() public cancelBtnClass=\"button btn-light\"\r\n\r\n    @Input() public forceSizeCanvas = true;\r\n    @Input() public forceSizeExport = false;\r\n    @Input() public enableRemoveImage = false;\r\n    @Input() public enableLoadAnotherImage = false;\r\n    @Input() public enableTooltip = true;\r\n    @Input() public showCancelButton = true;\r\n\r\n    // @ts-ignore\r\n    @Input('i18n') public i18nUser: I18nInterface;\r\n    @Input() public locale: string = 'en';\r\n    /* @deprecated Use i18n.saveBtn */\r\n    @Input() public saveBtnText = 'Save';\r\n    /* @deprecated Use i18n.cancelBtn */\r\n    @Input() public cancelBtnText = 'Cancel';\r\n    /* @deprecated Use i18n.loading */\r\n    @Input() public loadingText = 'Loading…';\r\n    /* @deprecated Use i18n.loadError */\r\n    @Input() public errorText = 'Error loading %@';\r\n\r\n    @Input() public loadingTemplate?: TemplateRef<any>;\r\n    @Input() public errorTemplate?: TemplateRef<any>;\r\n\r\n    @Input() public outputMimeType = 'image/jpeg';\r\n    @Input() public outputQuality = 0.8;\r\n\r\n    @Input() public borderCss: string = 'none';\r\n\r\n    @Input() public drawingSizes: { [name: string]: number } = {\r\n        small: 5,\r\n        medium: 10,\r\n        large: 25,\r\n    };\r\n\r\n    @Input() public colors: { [name: string]: string } = {\r\n        black: '#000',\r\n        white: '#fff',\r\n        yellow: '#ffeb3b',\r\n        red: '#f44336',\r\n        blue: '#2196f3',\r\n        green: '#4caf50',\r\n        purple: '#7a08af',\r\n    };\r\n\r\n    @Output() public save: EventEmitter<Blob> = new EventEmitter<Blob>();\r\n    @Output() public cancel: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n    public currentTool = '';\r\n    public currentSize = 'medium';\r\n    public currentColor = 'black';\r\n    public i18n: I18nInterface = I18nEn;\r\n    public shapesNames=[\r\n        {shape:'rectangle',icon:'rectangle'},\r\n        {shape:'circle',icon:'circle'},\r\n        {shape:'line',icon:' horizontal_rule'},\r\n        {shape:'arrow',icon:'arrow_back'}\r\n    ]\r\n    public canUndo = false;\r\n    public canRedo = false;\r\n    public isShapeMode=false;\r\n    public shapeType:string=''\r\n    public isLoading = false;\r\n    public hasError = false;\r\n    public errorMessage = '';\r\n    private shapedone=false;\r\n    private canvas: fabric.Canvas;\r\n    private stack: any[] = [];\r\n    private stackUndo: fabric.Object[] = [];\r\n    private stackUndoLocation:{type:string,loc:number}[]=[];\r\n    private stackRedoLocation:{type:string,loc:number}[]=[];\r\n    public colorsName: string[] = [];\r\n    public drawingSizesName: string[] = [];\r\n    private shapePoint:any\r\n    private imageUsed?: fabric.Image;\r\n    private clipPath:fabric.Rect;\r\n    private r:DOMRect\r\n    private isCrop:boolean=false\r\n    private pos = [0, 0];\r\n    private mousex = 0;\r\n    private mousey = 0;\r\n    private disabled:boolean=true\r\n    private lastSelectedPicture = null;\r\n    private isInsertingCropRectangle = false;\r\n    shape_rect:fabric.Rect\r\n    shape_circle:fabric.Circle\r\n    shape_line:fabric.Line\r\n    shape_arrow:fabric.Triangle\r\n    shape_line_copy:fabric.Line\r\n    shape_arrow_copy:fabric.Triangle\r\n    crop_rect\r\n    isDown:boolean\r\n    origX\r\n    origY\r\n    mask\r\n    target: fabric.Image;\r\n    done = false;\r\n    constructor(private zone:NgZone) {\r\n    }\r\n    get commons(){\r\n        return {\r\n            originX:'center',\r\n            originY:'center',\r\n            stroke:this.currentColor,\r\n            strokeWidth:this.drawingSizes[this.currentSize]\r\n        }\r\n    }\r\n    get commons1(){\r\n        return {\r\n\r\n            stroke:this.currentColor,\r\n            strokeWidth:this.drawingSizes[this.currentSize]\r\n        }\r\n    }\r\n    public ngOnInit(): void {\r\n        this.colorsName = Object.keys(this.colors);\r\n        this.drawingSizesName = Object.keys(this.drawingSizes);\r\n        this.initClipPath();\r\n\r\n        this.canvas = new fabric.Canvas('canvas', {\r\n            hoverCursor: 'pointer',\r\n            selection: true,\r\n            preserveObjectStacking: true,\r\n\r\n            //clipPath:clipPath\r\n            //isDrawingMode: true,\r\n        });\r\n        this.canvas.backgroundColor = 'white';\r\n\r\n        if (this.src) {\r\n            this.importPhotoFromSrc(this.src);\r\n            this.r = document.getElementById('canvas').getBoundingClientRect();\r\n            this.pos[0]=this.r.left\r\n            this.pos[1]=this.r.top\r\n        } else {\r\n            if (!this.width || !this.height) {\r\n                throw new Error('No width or hight given !');\r\n            }\r\n\r\n            this.canvas.setWidth(this.width);\r\n            this.canvas.setHeight(this.height);\r\n        }\r\n        //this.canvas.on('')\r\n        this.canvas.on('path:created', () => {\r\n            this.stack = [];\r\n            this.setUndoRedo();\r\n        });\r\n        this.canvas.on('object:added', (e)=> {\r\n\r\n          });\r\n\r\n          this.canvas.on('object:modified',(e)=> {\r\n            if(this.currentTool=== 'resize'){\r\n                const newWidth= e.target.width*e.target.scaleX;\r\n                const newHeight=e.target.height*e.target.scaleY\r\n                    e.target.set({ opacity: 1 });\r\n                    debugger;\r\n                    //var newWidth = (Math.round(e.target.width/ canvasGrid)) * canvasGrid;\r\n                    //var newHeight = (Math.round(e.target.height / canvasGrid)) * canvasGrid;\r\n\r\n                    if (e.target.width !== newWidth) {\r\n                     //e.target.set({ width: newWidth, height: newHeight, scaleX: 1, scaleY: 1, });\r\n                   }\r\n\r\n                this.imageUsed.scaleToWidth(e.target.width*e.target.scaleX)\r\n                this.imageUsed.scaleToHeight(e.target.height*e.target.scaleY)\r\n                this.canvas.setWidth(e.target.width*e.target.scaleX)\r\n                this.canvas.setHeight(e.target.height*e.target.scaleY)\r\n\r\n                e.target.setCoords();\r\n\r\n\r\n                this.canvas.renderAll();\r\n                const imageStr=this.canvas.toDataURL(\r\n                    {\r\n\r\n\r\n                        format:'jpeg'\r\n                    })\r\n               this.canvas.remove(this.imageUsed)\r\n                this.canvas.getObjects().forEach(\r\n                 e=>e.opacity=0\r\n             )\r\n             this.selectTool('')\r\n            //this.canvas.getObjects()[0].opacity=1\r\n               this.importPhotoFromSrc(imageStr,false,true)\r\n            }\r\n\r\n\r\n            //this.setUndoRedo()\r\n          });\r\n          this.canvas.on('mouse:down', (o) =>{\r\n            if( this.isInsertingCropRectangle == true ){\r\n            console.log('mouse down done = '+this.done);\r\n            if (this.done) {\r\n              this.canvas.renderAll();\r\n              return;\r\n            }\r\n            this.isDown = true;\r\n            var pointer = this.canvas.getPointer(o.e);\r\n            this.origX = pointer.x;\r\n            this.origY = pointer.y;\r\n            this.crop_rect = new fabric.Rect({\r\n              left: this.origX,\r\n              top: this.origY,\r\n              width: pointer.x - this.origX,\r\n              height: pointer.y - this.origY,\r\n              opacity: .3,\r\n              transparentCorners: false,\r\n              selectable: true,\r\n\r\n              //id: 'mask'\r\n            });\r\n            this.mask=this.crop_rect\r\n            this.canvas.add(this.crop_rect);\r\n            this.setUndoRedo();\r\n            this.canvas.renderAll();\r\n          }\r\n          else if(this.isShapeMode===true){\r\n            this.isDown = true;\r\n             if(this.shapeType==='rectangle'){\r\n\r\n                this.shapePoint = this.canvas.getPointer(o.e);\r\n                this.shape_rect=new fabric.Rect({\r\n                    ...this.commons,\r\n                    left:this.shapePoint.x,\r\n                    top:this.shapePoint.y,\r\n                    fill:'transparent',\r\n                    width: this.shapePoint.x - this.shapePoint.x,\r\n                    height: this.shapePoint.y - this.shapePoint.y,\r\n                    //centeredRotation:true,\r\n                    //centeredScaling:true,\r\n                    selectable: true,\r\n                })\r\n                this.canvas.add(this.shape_rect);\r\n                //this.setUndoRedo();\r\n                this.canvas.renderAll();\r\n             }else if(this.shapeType==='circle'){\r\n                this.shapePoint = this.canvas.getPointer(o.e);\r\n                this.shape_circle=new fabric.Circle({\r\n                    ...this.commons,\r\n                    left:this.shapePoint.x,\r\n                    top:this.shapePoint.y,\r\n                    fill:'transparent',\r\n                    radius: this.shapePoint.x - this.shapePoint.x,\r\n\r\n\r\n\r\n                    selectable: true,\r\n                })\r\n                this.canvas.add(this.shape_circle);\r\n                //this.setUndoRedo();\r\n                this.canvas.renderAll();\r\n             }else if(this.shapeType==='line'){\r\n                this.shapePoint = this.canvas.getPointer(o.e);\r\n                this.shape_line= new fabric.Line([this.shapePoint.x,this.shapePoint.y,this.shapePoint.x,this.shapePoint.y],this.commons)\r\n                this.canvas.add(this.shape_line)\r\n                this.canvas.renderAll();\r\n             }else if(this.shapeType==='arrow'){\r\n                this.shapePoint = this.canvas.getPointer(o.e);\r\n                var angle=Math.atan2(this.shapePoint.y-this.shapePoint.y,this.shapePoint.x-this.shapePoint.x);\r\n                angle*=180/Math.PI\r\n                angle+=90\r\n                this.shape_line= new fabric.Line([this.shapePoint.x,this.shapePoint.y,this.shapePoint.x,this.shapePoint.y],this.commons)\r\n                this.shape_arrow=new fabric.Triangle({\r\n                    ...this.commons,\r\n                    angle:angle,\r\n                    top:this.shape_line.y2,\r\n                    left:this.shape_line.x2,\r\n                    width:10,\r\n                    height:10\r\n\r\n                })\r\n                this.shape_line_copy= new fabric.Line([this.shapePoint.x,this.shapePoint.y,this.shapePoint.x,this.shapePoint.y],this.commons)\r\n                this.shape_arrow_copy=new fabric.Triangle({\r\n                    ...this.commons,\r\n                    angle:angle,\r\n                    top:this.shape_line.y2,\r\n                    left:this.shape_line.x2,\r\n                    width:10,\r\n                    height:10\r\n\r\n                })\r\n\r\n                this.canvas.add(this.shape_line);\r\n                this.canvas.add(this.shape_arrow);\r\n\r\n                this.canvas.renderAll();\r\n             }\r\n          }\r\n        });\r\n\r\n        this.canvas.on('mouse:move', (o)=> {\r\n            if( this.isInsertingCropRectangle == true ){\r\n            console.log('mouse move done = '+this.done);\r\n            if (this.done) {\r\n              this.canvas.renderAll();\r\n              return;\r\n            }\r\n            if (!this.isDown) return;\r\n            var pointer = this.canvas.getPointer(o.e);\r\n\r\n            if (this.origX > pointer.x) {\r\n              this.crop_rect.set({\r\n                left: Math.abs(pointer.x)\r\n              });\r\n            }\r\n            if (this.origY > pointer.y) {\r\n              this.crop_rect.set({\r\n                top: Math.abs(pointer.y)\r\n              });\r\n            }\r\n\r\n            this.crop_rect.set({\r\n              width: Math.abs(this.origX - pointer.x)\r\n            });\r\n            this.crop_rect.set({\r\n              height: Math.abs(this.origY - pointer.y)\r\n            });\r\n\r\n\r\n            this.crop_rect.setCoords();\r\n            this.canvas.renderAll();\r\n          }\r\n          else if(this.isShapeMode===true){\r\n            if (!this.isDown) return;\r\n            if(this.shapeType==='rectangle'){\r\n\r\n                var pointer = this.canvas.getPointer(o.e);\r\n\r\n                if (this.shapePoint.x > pointer.x) {\r\n                    this.shape_rect.set({\r\n                    left: Math.abs(pointer.x)\r\n                  });\r\n                }\r\n                if (this.shapePoint.y > pointer.y) {\r\n                    this.shape_rect.set({\r\n                    top: Math.abs(pointer.y)\r\n                  });\r\n                }\r\n\r\n                this.shape_rect.set({\r\n                  width: Math.abs(this.shapePoint.x - pointer.x)\r\n                });\r\n                this.shape_rect.set({\r\n                  height: Math.abs(this.shapePoint.y - pointer.y)\r\n                });\r\n\r\n\r\n                this.shape_rect.setCoords();\r\n                this.canvas.renderAll();\r\n            }else if(this.shapeType==='circle'){\r\n\r\n                var pointer = this.canvas.getPointer(o.e);\r\n\r\n                if (this.shapePoint.x > pointer.x) {\r\n                    this.shape_circle.set({\r\n                    left: Math.abs(pointer.x)\r\n                  });\r\n                }\r\n                if (this.shapePoint.y > pointer.y) {\r\n                    this.shape_circle.set({\r\n                    top: Math.abs(pointer.y)\r\n                  });\r\n                }\r\n\r\n                this.shape_circle.set({\r\n                  radius: Math.abs(this.shapePoint.x - pointer.x)/2\r\n                });\r\n               // this.shape_circle.set({\r\n                //  height: Math.abs(this.shapePoint.y - pointer.y)\r\n                //});\r\n\r\n\r\n                this.shape_circle.setCoords();\r\n                this.canvas.renderAll();\r\n            }else if(this.shapeType==='line'){\r\n\r\n                var pointer = this.canvas.getPointer(o.e);\r\n\r\n                if (this.shapePoint.x > pointer.x) {\r\n                    this.shape_line.set({\r\n                    left: Math.abs(pointer.x)\r\n                  });\r\n                }\r\n                if (this.shapePoint.y > pointer.y) {\r\n                    this.shape_line.set({\r\n                    top: Math.abs(pointer.y)\r\n                  });\r\n                }\r\n                this.shape_line.set({\r\n                    x2:pointer.x,\r\n                    y2:pointer.y\r\n                });\r\n                this.shape_line.setCoords();\r\n                this.canvas.renderAll();\r\n            }else if(this.shapeType==='arrow'){\r\n                var pointer = this.canvas.getPointer(o.e);\r\n                console.log(pointer);\r\n                console.log(this.shapePoint)\r\n                const py=pointer.y-this.shapePoint.y;\r\n                const px=pointer.x-this.shapePoint.x;\r\n\r\n                this.shape_line.set({\r\n                    x2:pointer.x,\r\n                    y2:pointer.y\r\n                });\r\n                this.shape_line_copy.set({\r\n                    x2:pointer.x,\r\n                    y2:pointer.y\r\n                });\r\n                this.shape_line.setCoords();\r\n                var angle=Math.atan2(py,px);\r\n                angle*=180/Math.PI\r\n                angle+=90\r\n                let pointX\r\n                let pointY\r\n                if(pointer.x>this.shapePoint.x)\r\n                {\r\n                    pointX=pointer.x+15\r\n\r\n                }else if(pointer.x<this.shapePoint.x){\r\n                    pointX=pointer.x-15\r\n                }else{\r\n                    pointX=pointer.x\r\n                }\r\n                if(pointer.y>this.shapePoint.y)\r\n                {\r\n                    pointY=pointer.y+7\r\n\r\n                }else if(pointer.y<this.shapePoint.y){\r\n                    pointY=pointer.y-7\r\n                }else{\r\n                    pointY=pointer.y\r\n                }\r\n                this.shape_arrow.set({\r\n                    angle:angle,\r\n                    top:pointer.y,\r\n                    left:pointer.x\r\n                })\r\n\r\n                this.shape_arrow_copy.set({\r\n                    angle:angle,\r\n                    top:pointer.y,\r\n                    left:pointer.x\r\n                })\r\n                console.log(this.shape_arrow)\r\n                console.log(this.shape_line)\r\n                this.shape_arrow.setCoords();\r\n                this.canvas.renderAll();\r\n\r\n            }\r\n\r\n          }\r\n        });\r\n\r\n        this.canvas.on('mouse:up', (o)=> {\r\n\r\n            if( this.isInsertingCropRectangle == true ){\r\n\r\n            console.log('mouse up done = '+this.done);\r\n            if (this.done) {\r\n              this.canvas.renderAll();\r\n              return;\r\n            }\r\n            this.isDown = false;\r\n\r\n            this.crop_rect.set({\r\n              selectable: true\r\n\r\n            });\r\n            this.done = true;\r\n\r\n          }\r\n          else if(this.isShapeMode===true){\r\n                if(this.shapedone) return;\r\n                if(this.shapeType==='arrow'){\r\n                    debugger;\r\n                    const line= new fabric.Line([this.shape_line.x1,this.shape_line.y1,this.shape_line.x2,this.shape_line.y2],this.commons1)\r\n                    line.set({\r\n                        x1:this.shape_line.x1,\r\n                        y1:this.shape_line.y1,\r\n                        x2:this.shape_line.x2,\r\n                        y2:this.shape_line.y2\r\n                    })\r\n                    const arrow=new fabric.Triangle({\r\n                        ...this.commons1,\r\n                        angle:this.shape_arrow.angle,\r\n                        top:this.shape_arrow.top,\r\n                        left:this.shape_arrow.left,\r\n                        width:10,\r\n                        height:10\r\n\r\n                    })\r\n                    line.setCoords()\r\n                    arrow.setCoords()\r\n\r\n                    var obj=[this.shape_arrow_copy,this.shape_line_copy];\r\n                    let myShape= new fabric.Group(obj,{\r\n                        left:Math.min(this.shape_line_copy.x1,this.shape_line_copy.x2) ,\r\n                        top:Math.min(this.shape_line_copy.y1,this.shape_line_copy.y2)\r\n                    })\r\n                    myShape.setCoords();\r\n                    console.log(myShape);\r\n                    this.canvas.add(myShape);\r\n                    this.canvas.renderAll();\r\n                    this.canvas.remove(this.shape_line);\r\n                    this.canvas.remove(this.shape_arrow);\r\n                    this.canvas.renderAll();\r\n                    this.shapedone=true;\r\n                    //this.isDown = false;\r\n                    //this.shapeType=''\r\n                    //this.isShapeMode=false;\r\n                    this.selectTool('');\r\n                    this.setUndoRedo();\r\n                    this.canvas.renderAll();\r\n\r\n                }else{\r\n                //this.isDown = false;\r\n                //this.shapeType=''\r\n                //this.isShapeMode=false;\r\n                this.selectTool('');\r\n                this.setUndoRedo();\r\n                this.canvas.renderAll();\r\n                }\r\n\r\n          }\r\n        });\r\n\r\n            this.canvas.on('selection:created', (event) =>{\r\n                console.log(\"canvas.on('selection:created'\");\r\n                this.selectionChanged(event);\r\n            });\r\n\r\n            this.canvas.on('selection:updated', (event) =>{\r\n                console.log(\"canvas.on('selection:updated'\");\r\n                this.selectionChanged(event);\r\n            });\r\n        this.selectColor(this.currentColor);\r\n        this.selectDrawingSize(this.currentSize);\r\n\r\n        if (this.locale && i18nLanguages[this.locale.toLowerCase()]) {\r\n            this.i18n = i18nLanguages[this.locale.toLowerCase()];\r\n        }\r\n\r\n        // FIXME remove after a while because properties are now deprecated\r\n        if (this.saveBtnText) {\r\n            this.i18n.saveBtn = this.saveBtnText;\r\n        }\r\n        if (this.cancelBtnText) {\r\n            this.i18n.cancelBtn = this.cancelBtnText;\r\n        }\r\n        if (this.loadingText) {\r\n            this.i18n.loading = this.loadingText;\r\n        }\r\n        if (this.errorText) {\r\n            this.i18n.loadError = this.errorText;\r\n        }\r\n    }\r\n    selectionChanged(event){\r\n\t\tconsole.log(\"selectionChanged\");\r\n\t\tconsole.log(\"selectionChanged type = \"+event.target?.type);\r\n\t\tswitch(event.target?.type) {\r\n\t\t\tcase 'textbox':\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'image':\r\n\t\t\t\tthis.lastSelectedPicture = event.target;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'rect':\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'group':\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t}\r\n    rotate(degrees:number,undo=true){\r\n      this.selectTool('rotate');\r\n\r\n\r\n\r\n      //this.canvas.setWidth(this.canvas.width+500)\r\n      //this.canvas.setHeight(this.canvas.height+500)\r\n      this.canvas.renderAll();\r\n       if(undo){\r\n         this.stackUndoLocation.push({type:'rotate',loc:this.canvas.getObjects().length})\r\n         this.stackUndo.push(this.imageUsed);\r\n         this.setUndoRedo();\r\n       }\r\n\r\n\r\n\r\n       const w = this.canvas.width\r\n       const h=this.canvas.height\r\n       this.canvas.setWidth(h)\r\n       this.canvas.setHeight(w)\r\n       let i=0;\r\n\r\n       this.canvas.getObjects().forEach((value:fabric.Object)=>{\r\n          console.log(value)\r\n          const t =value.top;\r\n          const l= value.left;\r\n\r\n          console.log(\"T L\",value.top,value.left)\r\n          //const dd=(value?.angle+degrees)\r\n          //const de=( (dd % 360)* Math.PI) / 180\r\n          value.centeredRotation=true;\r\n          if(i>0){\r\n            this.canvas.setActiveObject(value)\r\n          }\r\n          value.rotate(value?.angle+degrees).setCoords();\r\n          console.log(\"T1 L1\",value.top,value.left)\r\n          const w1=value.width>this.canvas.width&&value.width!==this.canvas.height?this.canvas.width:value.width;;\r\n          const h1=value.height>this.canvas.height&&value.height!==this.canvas.width?this.canvas.height:value.height;\r\n          //value.originX='left'\r\n          //value.originY='top'\r\n          console.log(\"w1 h1 \",w1,h1);\r\n          //value.or\r\n          let pref=Math.abs(w1/2-h1/2)\r\n\r\n          console.log(\"pref \" , pref);\r\n          // value.originX='left'\r\n          // value.originY='top'\r\n          console.log(\"i \",i);\r\n          if(i===0){\r\n\r\n\r\n          if((value.angle%360===90||value.angle%360===270)){\r\n            if(h>w){\r\n                pref=pref*-1\r\n            }\r\n            const t1=t-value.top;\r\n            const l1=h1-value.left;\r\n            console.log(t1,l1)\r\n            value.top=value.top+pref;\r\n            value.left=value.left-pref\r\n\r\n          }\r\n        //   if(value.angle%360===270){\r\n\r\n        //     const t1=t-value.top;\r\n        //     const l1=l-value.left;\r\n        //     console.log(t1,l1)\r\n        //     value.top=value.top+pref;\r\n        //     value.left=value.left-pref;\r\n        //   }\r\n\r\n          if(value.angle%360===180||value.angle%360===0){\r\n            if(h<w){\r\n                pref=pref*-1\r\n            }\r\n            const t1=h1+value.top;\r\n            const l1=l-value.left;\r\n            console.log(t1,l1)\r\n            value.top=value.top-pref;\r\n            value.left=value.left+pref\r\n          }\r\n        //   if(value.angle%360===0){\r\n        //     const t1=h1-value.top;\r\n        //     const l1=l-value.left;\r\n        //     console.log(t1,l1)\r\n        //     value.top=value.top-pref;\r\n        //     value.left=value.left+pref;\r\n        //   }\r\n          }else{\r\n\r\n\r\n\r\n                // if(value.angle%360===0){\r\n                //     value.top=300;\r\n\r\n\r\n                //     value.left=300;\r\n                //    console.log(\"TT LL\",value.top,value.left)\r\n                // }else{\r\n                    value.top=l;\r\n\r\n\r\n                value.left=this.canvas.width-t;\r\n               console.log(\"TT LL\",value.top,value.left)\r\n                //}\r\n\r\n\r\n\r\n          }\r\n\r\n\r\n          i=i+1;\r\n          console.log(value)\r\n      })\r\n\r\n       //imageR.rotate(Math.PI / 2)\r\n      // imageR.snapAngle =90;\r\n\r\n       this.canvas.renderAll()\r\n    }\r\n    shape(shapeT:string){\r\n       this.selectTool('shape');\r\n       this.shapedone=false;\r\n       this.isShapeMode=true;\r\n       this.shapeType=shapeT;\r\n    }\r\n    rescaleMask(target, mask){\r\n        mask.scaleX = 1;\r\n        mask.scaleY = 1;\r\n\r\n        mask.scaleX/=target.scaleX;\r\n        mask.scaleY/=target.scaleY;\r\n\r\n        const targetCenterX = target.width * target.scaleX / 2;\r\n        const targetCenterY = target.height * target.scaleY / 2;\r\n\r\n        const maskOverlapX = mask.left  - target.left;\r\n        const maskOverlapY = mask.top - target.top;\r\n          let centerBasedX = maskOverlapX - targetCenterX;\r\n          let centerBasedY = maskOverlapY - targetCenterY;\r\n\r\n        if( maskOverlapX >= targetCenterX){\r\n            centerBasedX = (maskOverlapX - targetCenterX)/target.scaleX;\r\n        }\r\n        else{\r\n\r\n            centerBasedX = (-(targetCenterX) + maskOverlapX)/target.scaleX;\r\n        }\r\n\r\n        if( maskOverlapY >= targetCenterY){\r\n            centerBasedY = (maskOverlapY - targetCenterY)/target.scaleY;\r\n        }\r\n        else{\r\n            centerBasedY = (-(targetCenterY) + maskOverlapY)/target.scaleY;\r\n        }\r\n\r\n\r\n\r\n\r\n        console.log('targetleft = '+target.left);\r\n        console.log('targettop = '+target.top);\r\n        console.log('targetCenterX = '+targetCenterX);\r\n        console.log('targetCenterY = '+targetCenterY);\r\n        console.log('maskleft = '+mask.left);\r\n        console.log('masktop = '+mask.top);\r\n          console.log('maskOverlapX = '+maskOverlapX);\r\n          console.log('maskOverlapY = '+maskOverlapY);\r\n        console.log('centerBasedX = '+centerBasedX);\r\n        console.log('centerBasedY = '+centerBasedY);\r\n\r\n        mask.left = centerBasedX;\r\n        mask.top = centerBasedY;\r\n        mask.originX = 'left';\r\n        mask.originY = 'top';\r\n\r\n        mask.setCoords();\r\n        mask.dirty=true;\r\n        this.canvas.renderAll();\r\n\r\n\r\n\r\n        //var newMask = mask;\r\n        return(mask);\r\n      }\r\n    initClipPath(){\r\n        this.clipPath = new fabric.Rect({\r\n            //left: 100,\r\n            //top: 100,\r\n            fill: 'transparent',\r\n            originX: 'left',\r\n            originY: 'top',\r\n            stroke: '#ccc',\r\n            strokeDashArray: [2, 2],\r\n            opacity: 1,\r\n            width: 1,\r\n            height: 1\r\n        });\r\n    }\r\n    // Tools\r\n    public selectTool(tool: string) {\r\n        this.currentTool = tool;\r\n        if(this.currentTool==='brush'){\r\n            this.canvas.isDrawingMode=true;\r\n        }else{\r\n            this.canvas.isDrawingMode=false;\r\n        }\r\n        if(this.currentTool!=='shape'){\r\n                this.isDown = false;\r\n                this.shapeType=''\r\n                this.isShapeMode=false;\r\n        }\r\n    }\r\n\r\n    public selectDrawingSize(size: string) {\r\n        this.currentSize = size;\r\n        if (this.canvas) {\r\n            this.canvas.freeDrawingBrush.width = this.drawingSizes[size];\r\n        }\r\n    }\r\n\r\n    public selectColor(color: string) {\r\n        this.currentColor = color;\r\n        if (this.canvas) {\r\n            this.canvas.freeDrawingBrush.color = this.colors[color];\r\n        }\r\n    }\r\n    public maskC(){\r\n        this.isInsertingCropRectangle = true;\r\n        this.selectTool('mask')\r\n\t\tthis.canvas.discardActiveObject();\r\n        this.target.selectable=false ;\r\n        this.target.setCoords();\r\n        this.target.dirty=true;\r\n\t\t//this.lastSelectedPicture.selectable = false;\r\n\t\t//this.lastSelectedPicture.setCoords();\r\n\t\t//this.lastSelectedPicture.dirty = true;\r\n\t\tthis.canvas.renderAll();\r\n        this.setUndoRedo();\r\n\t\tthis.canvas.discardActiveObject();\r\n        this.canvas.isDrawingMode=false;\r\n    }\r\n    // Actions\r\n    public crop(){\r\n        if (this.target !== null && this.mask !== null&&this.done) {\r\n            this.selectTool('crop')\r\n            this.target.setCoords();\r\n                // Re-scale mask\r\n            //this.mask = this.rescaleMask(this.target, this.mask);\r\n            this.mask.setCoords();\r\n\r\n            // Do the crop\r\n            //this.target.clipPath = this.mask;\r\n            //this.target.clipPath.setCoords();\r\n            //this.target.dirty=true;\r\n            //this.canvas.setActiveObject(this.target);\r\n            //this.canvas.bringToFront(this.target);\r\n            //this.target.clipPath.selectable = true;\r\n            this.setUndoRedo();\r\n            //this.stackUndoLocation.push(this.canvas.getObjects().length-2)\r\n            //this.stackUndo.push(this.mask);\r\n            this.canvas.remove(this.mask);\r\n\r\n            this.canvas.renderAll();\r\n            this.stackUndoLocation.push({type:'',loc:this.canvas.getObjects().length-1})\r\n            this.stackUndo.push(this.imageUsed)\r\n\r\n            this.setUndoRedo()\r\n            const scale2=Math.min(this.canvas.getWidth()/this.crop_rect.width,this.canvas.getHeight()/this.crop_rect.height)\r\n            const imageStr=this.canvas.toDataURL(\r\n                {\r\n\r\n                   width:this.crop_rect.width,//this.target.clipPath.width,\r\n                   height:this.crop_rect.height,\r\n                   left:this.crop_rect.left,//+this.canvas.width/2,\r\n                   top:this.crop_rect.top,//+this.canvas.height/2,\r\n                   quality:1,\r\n                   multiplier:scale2,\r\n                   format:'jpeg'\r\n                })\r\n\r\n           this.canvas.remove(this.imageUsed)\r\n            this.canvas.getObjects().forEach(\r\n             e=>e.opacity=0\r\n         )\r\n        //this.canvas.getObjects()[0].opacity=1\r\n           this.importPhotoFromSrc(imageStr)\r\n\r\n           this.imageUsed.sendToBack()\r\n\r\n           this.canvas.renderAll();\r\n           this.setUndoRedo()\r\n            console.log(this.target);\r\n        this.isInsertingCropRectangle=false;\r\n          this.done=false;\r\n          this.selectTool('')\r\n          }\r\n       //this.disabled=false;\r\n\r\n    }\r\n\r\n    public resize(){\r\n        this.selectTool('resize')\r\n        this.stackUndoLocation.push({type:'',loc:this.canvas.getObjects().length-1})\r\n            this.stackUndo.push(this.imageUsed)\r\n\r\n            this.setUndoRedo()\r\n        const imageStr=this.canvas.toDataURL(\r\n            {\r\n\r\n\r\n                format:'jpeg'\r\n            })\r\n       this.canvas.remove(this.imageUsed)\r\n        this.canvas.getObjects().forEach(\r\n         e=>e.opacity=0\r\n     )\r\n    //this.canvas.getObjects()[0].opacity=1\r\n       this.importPhotoFromSrc(imageStr,true)\r\n\r\n\r\n        //this.canvas.setWidth(this.canvas.width+500)\r\n        //this.canvas.setHeight(this.canvas.height+500)\r\n        this.canvas.renderAll();\r\n    }\r\n    public undo() {\r\n        if (this.canUndo) {\r\n            debugger;\r\n            if(this.stackUndo.length>0){\r\n              if(this.stackUndoLocation[this.stackUndoLocation.length-1].type==='rotate'){\r\n                const ob=this.stackUndo.pop();\r\n                const l=this.stackUndoLocation.pop().loc;\r\n                this.setUndoRedo();\r\n                this.rotate(-90,false);\r\n                this.stack.push('rotate')\r\n                this.stackRedoLocation.push({type:'rotate',loc:this.canvas.getObjects().length})\r\n                this.setUndoRedo();\r\n              }\r\n\r\n              else if(this.canvas.getObjects().length-this.stackUndoLocation[this.stackUndoLocation.length-1].loc>1){\r\n                const lastId = this.canvas.getObjects().length - 1;\r\n                const lastObj = this.canvas.getObjects()[lastId];\r\n                this.done=false;\r\n                this.stack.push(lastObj);\r\n                this.canvas.remove(lastObj);\r\n                this.setUndoRedo();\r\n                this.canvas.renderAll()\r\n              }else{\r\n                const ob=this.stackUndo.pop();\r\n                const l=this.stackUndoLocation.pop().loc;\r\n                if(ob instanceof fabric.Image){\r\n                    this.stack.push(this.imageUsed);\r\n                    for(var i=l;i>=0;i--){\r\n                        this.canvas.getObjects()[i].opacity=1\r\n                     }\r\n                    this.setUndoRedo();\r\n                     this.canvas.remove(this.imageUsed)\r\n                     this.importPhotoFromSrc((ob as fabric.Image).getSrc())\r\n                     debugger;\r\n\r\n                }else{\r\n                    this.canvas.add(ob)\r\n                }\r\n                this.canvas.renderAll();\r\n\r\n              }\r\n\r\n\r\n            }else{\r\n                const lastId = this.canvas.getObjects().length - 1;\r\n                const lastObj = this.canvas.getObjects()[lastId];\r\n                this.done=false;\r\n                this.stack.push(lastObj);\r\n                this.canvas.remove(lastObj);\r\n                this.setUndoRedo();\r\n                this.canvas.renderAll()\r\n              }\r\n\r\n\r\n\r\n        }\r\n    }\r\n\r\n    public redo() {\r\n        if (this.canRedo) {\r\n            const firstInStack = this.stack.splice(-1, 1)[0];\r\n            if (firstInStack) {\r\n                if(firstInStack instanceof fabric.Image){\r\n                    this.stackUndoLocation.push({type:'',loc:this.canvas.getObjects().length-1})\r\n                    this.stackUndo.push(this.imageUsed)\r\n                     this.canvas.remove(this.imageUsed)\r\n                     this.importPhotoFromSrc((firstInStack as fabric.Image).getSrc())\r\n                     this.setUndoRedo();\r\n                }\r\n                else if(firstInStack==='rotate'){\r\n                    this.rotate(90);\r\n                }\r\n                else{\r\n                    this.canvas.insertAt(firstInStack, this.canvas.getObjects().length, false);\r\n                    this.setUndoRedo();\r\n                }\r\n\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    public clearCanvas() {\r\n        if (this.canvas) {\r\n            this.canvas.clipPath=null;\r\n            this.canvas.remove(...this.canvas.getObjects());\r\n            //this.canvas.clear()\r\n            this.setUndoRedo();\r\n        }\r\n    }\r\n\r\n    public saveImage() {\r\n        if (!this.forceSizeExport || (this.forceSizeExport && this.width && this.height)) {\r\n            const canvasScaledElement: HTMLCanvasElement = document.createElement('canvas');\r\n            const canvasScaled = new fabric.Canvas(canvasScaledElement);\r\n            canvasScaled.backgroundColor = 'white';\r\n            let imageStr=null;\r\n            new Observable<fabric.Canvas>(observer => {\r\n                if (this.imageUsed) {\r\n                    if(this.target.clipPath){\r\n                        debugger;\r\n                        imageStr=this.canvas.toDataURL(\r\n                        {\r\n\r\n                            width:this.target.clipPath.width,\r\n                           height:this.target.clipPath.height,\r\n                           left:this.target.clipPath.left+this.canvas.width/2,\r\n                           top:this.target.clipPath.top+this.canvas.height/2,\r\n                            format:'jpeg'\r\n                        })\r\n                        console.log(imageStr);\r\n                    }\r\n\r\n                    if (this.forceSizeExport) {\r\n                        canvasScaled.setWidth(this.width);\r\n                        canvasScaled.setHeight(this.height);\r\n\r\n                        this.imageUsed.cloneAsImage(imageCloned => {\r\n                            imageCloned.scaleToWidth(this.width, false);\r\n                            imageCloned.scaleToHeight(this.height, false);\r\n\r\n                            canvasScaled.setBackgroundImage(imageCloned, (img: HTMLImageElement) => {\r\n                                if (!img) {\r\n                                    observer.error(new Error('Impossible to draw the image on the temporary canvas'));\r\n                                }\r\n\r\n                                observer.next(canvasScaled);\r\n                                observer.complete();\r\n                            }, {\r\n                                crossOrigin: 'anonymous',\r\n                                originX: 'left',\r\n                                originY: 'top'\r\n                            });\r\n                        });\r\n                    } else {\r\n                        //canvasScaled.clipPath=this.mask\r\n                        canvasScaled.setBackgroundImage(this.target, (img: any) => {\r\n                            if (!img) {\r\n                                observer.error(new Error('Impossible to draw the image on the temporary canvas'));\r\n                            }\r\n\r\n\r\n                             //canvasScaled.clipPath=this.clipPath\r\n                            //(canvasScaled.backgroundImage as fabric.Image).clipPath=(this.canvas.backgroundImage as fabric.Image).clipPath\r\n\r\n                            console.log(this.canvas.width)\r\n                            if(img.angle%360===90||img.angle%360===270){\r\n                                canvasScaled.setWidth(img.height*this.imageUsed.scaleX);\r\n                                canvasScaled.setHeight(img.width*this.imageUsed.scaleY);\r\n                            }else{\r\n                                canvasScaled.setWidth(img.width*this.imageUsed.scaleX);\r\n                                canvasScaled.setHeight(img.height*this.imageUsed.scaleY);\r\n                            }\r\n\r\n\r\n                            observer.next(canvasScaled);\r\n                            observer.complete();\r\n                        }, {\r\n                            crossOrigin: 'anonymous',\r\n                            originX: 'left',\r\n                            originY: 'top'\r\n                        });\r\n\r\n                        //(canvasScaled.backgroundImage as fabric.Image).clipPath=this.clipPath\r\n                    }\r\n                } else {\r\n                    canvasScaled.setWidth(this.width);\r\n                    canvasScaled.setHeight(this.height);\r\n                }\r\n            }).pipe(\r\n                switchMap(() => {\r\n                    let process = of(canvasScaled);\r\n\r\n                    if (this.canvas.getObjects().length > 1) {\r\n                        this.canvas.remove(this.imageUsed)\r\n                        const ratioX = canvasScaled.getWidth() / this.canvas.getWidth();\r\n                        const ratioY = canvasScaled.getHeight() / this.canvas.getHeight();\r\n\r\n                        this.canvas.getObjects().forEach((originalObject: fabric.Object, i: number) => {\r\n                            process = process.pipe(switchMap(() => {\r\n                                return new Observable<fabric.Canvas>(observerObject => {\r\n                                    originalObject.clone((clonedObject: fabric.Object) => {\r\n                                        clonedObject.set('left', originalObject.left * ratioX);\r\n                                        clonedObject.set('top', originalObject.top * ratioY);\r\n                                        clonedObject.scaleToWidth(originalObject.width * ratioX);\r\n                                        clonedObject.scaleToHeight(originalObject.height * ratioY);\r\n\r\n                                        canvasScaled.insertAt(clonedObject, i, false);\r\n                                        canvasScaled.renderAll();\r\n\r\n                                        observerObject.next(canvasScaled);\r\n                                        observerObject.complete();\r\n                                    });\r\n                                });\r\n                            }));\r\n                        });\r\n                    }\r\n                    return process;\r\n                }),\r\n            ).subscribe(() => {\r\n                canvasScaled.renderAll();\r\n                // console.log(\r\n                //     canvasScaled.toDataURL(\r\n                //         {width:this.clipPath.width,\r\n                //             height:this.clipPath.height,\r\n                //             left:(this.canvas.backgroundImage as fabric.Image).clipPath.left,\r\n                //             top:(this.canvas.backgroundImage as fabric.Image).clipPath.top,\r\n                //             format:'jpeg'\r\n                //         }))\r\n\r\n              const im=  canvasScaled.toDataURL({\r\n\r\n\r\n\r\n                    format:'jpeg'\r\n                }\r\n                )\r\n                console.log(im)\r\n                canvasScaled.getElement().toBlob(\r\n                    (data: Blob) =>this.zone.run(() =>{\r\n                        this.save.emit(data);\r\n\r\n                    }),\r\n                    this.outputMimeType,\r\n                    this.outputQuality\r\n                );\r\n            });\r\n        } else {\r\n            this.canvas.getElement().toBlob(\r\n                (data: Blob) =>this.zone.run(() => {\r\n                    this.save.emit(data);\r\n                }),\r\n                this.outputMimeType,\r\n                this.outputQuality\r\n            );\r\n        }\r\n    }\r\n\r\n    public cancelAction() {\r\n        this.cancel.emit();\r\n    }\r\n\r\n    public getTextTranslated(name: string): string {\r\n        let strOk = name.split('.').reduce((o, i) => o[i], this.i18n as any);\r\n\r\n        if (this.i18nUser) {\r\n            try {\r\n                const str = name.split('.').reduce((o, i) => o[i], this.i18nUser as any);\r\n                if (str) {\r\n                    strOk = str;\r\n                }\r\n            } catch (e) {\r\n                // if we pass here, ignored\r\n            }\r\n        }\r\n\r\n        if (!strOk) {\r\n            console.error(name + ' translation not found !');\r\n        }\r\n\r\n        return strOk;\r\n    }\r\n\r\n    public getTooltipTranslated(name: string): string {\r\n        if (this.enableTooltip) {\r\n            return this.getTextTranslated(name)\r\n        } else {\r\n            return '';\r\n        }\r\n    }\r\n\r\n    private setUndoRedo() {\r\n        this.canUndo = this.canvas.getObjects().length > 1||this.stackUndo.length>0;\r\n        this.canRedo = this.stack.length > 0;\r\n        // this.canvas.renderAll();\r\n    }\r\n\r\n    public importPhotoFromFile(event: Event | any) {\r\n        if (event.target.files && event.target.files.length > 0) {\r\n            const file = event.target.files[0];\r\n            if (file.type.match('image.*')) {\r\n                this.importPhotoFromBlob(file);\r\n            } else {\r\n                throw new Error('Not an image !');\r\n            }\r\n        }\r\n    }\r\n\r\n    public removeImage() {\r\n        if (this.imageUsed) {\r\n            this.imageUsed.dispose();\r\n            this.imageUsed = null;\r\n        }\r\n        this.canvas.backgroundImage = null;\r\n\r\n        if (this.width && this.height) {\r\n            this.canvas.setWidth(this.width);\r\n            this.canvas.setHeight(this.height);\r\n        }\r\n\r\n        this.canvas.renderAll();\r\n    }\r\n\r\n    public get hasImage(): boolean {\r\n        return !!this.canvas.backgroundImage;\r\n    }\r\n\r\n    private importPhotoFromSrc(src: string,select:boolean=false,stackundo=false) {\r\n        this.isLoading = true;\r\n        let isFirstTry = true;\r\n        const imgEl = new Image();\r\n        imgEl.setAttribute('crossorigin', 'anonymous');\r\n        imgEl.crossOrigin = \"anonymous\";\r\n        imgEl.src = src;\r\n        imgEl.onerror = () => {\r\n            // Retry with cors proxy\r\n           /* if (isFirstTry) {\r\n                imgEl.src = 'https://cors-anywhere.herokuapp.com/' + this.src;\r\n                isFirstTry = false;\r\n            }\r\n             else */\r\n             {\r\n                this.isLoading = false;\r\n                this.hasError = true;\r\n                this.errorMessage = this.getTextTranslated('loadError').replace('%@', this.src as string);\r\n            }\r\n        };\r\n        console.log(imgEl)\r\n        const scaleWidth = this.canvas.getWidth() / imgEl.width;\r\n            const scaleHeight = this.canvas.getHeight() / imgEl.height;\r\n            const scale = Math.min(scaleWidth, scaleHeight);\r\n            console.log(scale)\r\n        imgEl.onload = () => {\r\n            this.isLoading = false;\r\n\r\n            this.imageUsed = new fabric.Image(imgEl,{\r\n                selectable:false,\r\n                width:imgEl.width,\r\n                height:imgEl.height,\r\n\r\n\r\n            });\r\n            this.canvas.insertAt(this.imageUsed,0,false)\r\n            //this.canvas.sendToBack(this.imageUsed)\r\n            this.canvas.width=imgEl.width\r\n            this.canvas.height=imgEl.height\r\n            //this.canvas.setActiveObject(this.imageUsed)\r\n            console.log(this.imageUsed)\r\n            this.imageUsed.cloneAsImage(image => {\r\n                let width = imgEl.width;\r\n                let height = imgEl.height;\r\n\r\n                if (this.width&&this.width<width) {\r\n                    width = this.width;\r\n                }\r\n                if (this.height&&this.height<height) {\r\n                    height = this.height;\r\n                }\r\n                this.imageUsed.scaleToWidth(width)\r\n                this.imageUsed.scaleToHeight(height)\r\n                image.scaleToWidth(width, false);\r\n                image.scaleToHeight(height, false);\r\n                console.log(image,width,height)\r\n\r\n               // this.canvas.setBackgroundImage(image, ((img: HTMLImageElement) => {\r\n                 //   if (img) {\r\n                        if (this.forceSizeCanvas) {\r\n                            this.canvas.setWidth(width);\r\n                            this.canvas.setHeight(height);\r\n                        } else {\r\n\r\n                            this.canvas.setWidth(image.getScaledWidth());\r\n                            this.canvas.setHeight(image.getScaledHeight());\r\n                        }\r\n                  //  }\r\n               // }), {\r\n                 //   crossOrigin: 'Anonymous',\r\n                 //   originX: 'left',\r\n                //    originY: 'top'\r\n                //});\r\n\r\n                this.target=this.imageUsed\r\n                this.target.selectable=select;\r\n                if(select){\r\n                    this.target.lockMovementX=true\r\n                    this.target.lockMovementY=true\r\n                    this.canvas.setWidth(width+500);\r\n                    this.canvas.setHeight(height+500);\r\n                }\r\n                if(stackundo){\r\n                    this.stackUndoLocation.push({type:'',loc:this.canvas.getObjects().length-1})\r\n                    this.stackUndo.push(this.imageUsed)\r\n                    this.setUndoRedo()\r\n                }\r\n            });\r\n        };\r\n    }\r\n\r\n    private importPhotoFromBlob(file: Blob | File) {\r\n        const reader = new FileReader();\r\n        reader.readAsDataURL(file);\r\n        reader.onload = (evtReader: any) => {\r\n            if (evtReader.target.readyState == FileReader.DONE) {\r\n                this.importPhotoFromSrc(evtReader.target.result);\r\n            }\r\n        };\r\n    }\r\n\r\n    public importPhotoFromUrl() {\r\n        const url = prompt(this.getTooltipTranslated('loadImageUrl'));\r\n        if (url) {\r\n            this.importPhotoFromSrc(url);\r\n        }\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        if (changes.src && !changes.src.firstChange && changes.src.currentValue) {\r\n            if (typeof changes.src.currentValue === 'string') {\r\n                this.importPhotoFromSrc(changes.src.currentValue);\r\n            } else if (changes.src.currentValue) {\r\n                this.importPhotoFromBlob(changes.src.currentValue);\r\n            }\r\n        }\r\n    }\r\n}\r\n","\n\n@if (isLoading) {\n  <div class=\"loading\">\n    <ng-container *ngTemplateOutlet=\"loadingTemplate ? loadingTemplate : defaultLoading\"></ng-container>\n  </div>\n}\n@if (hasError) {\n  <div class=\"error\">\n    <ng-container *ngTemplateOutlet=\"errorTemplate ? errorTemplate : defaultError\"></ng-container>\n  </div>\n}\n\n<ng-template #defaultLoading><p>{{ getTextTranslated('loading') }}</p></ng-template>\n<ng-template #defaultError> <p>{{ errorMessage }}</p> </ng-template>\n\n<div [ngStyle]=\"{ border: borderCss }\">\n  <canvas id=\"canvas\"></canvas>\n</div>\n@if (!isLoading) {\n  <div class=\"toolbar\">\n    <div class=\"tools\">\n      <div class=\"row1\">\n        <i class=\"material-icons btn1\" [class.selected]=\"currentTool === 'brush'\" (click)=\"selectTool('brush')\"\n        [title]=\"getTooltipTranslated('tools.brush')\">brush</i>\n        @for (drawingSizeName of drawingSizesName; track drawingSizeName) {\n          <span class=\"size btn1\"\n            [style.width.px]=\"drawingSizes[drawingSizeName] * 0.8 + 8\"\n            [style.height.px]=\"drawingSizes[drawingSizeName] * 0.8 + 8\"\n            [style.borderRadius.px]=\"drawingSizes[drawingSizeName] * 0.4 + 4\"\n            [class.selected]=\"currentSize == drawingSizeName\"\n            [title]=\"getTooltipTranslated('sizes.' + drawingSizeName)\"\n            (click)=\"selectDrawingSize(drawingSizeName)\">\n          </span>\n        }\n        <input style=\"display: none\" type=\"file\" #fileInput (change)=\"importPhotoFromFile($event)\"\n          accept=\"image/*\"/>\n          @if (enableLoadAnotherImage && !hasImage) {\n            <i class=\"material-icons btn1\" (click)=\"fileInput.click();\"\n            [title]=\"getTooltipTranslated('loadImage')\">attach_file</i>\n          }\n          @if (enableLoadAnotherImage && !hasImage) {\n            <i class=\"material-icons btn1\" (click)=\"importPhotoFromUrl()\"\n            [title]=\"getTooltipTranslated('loadImageUrl')\">insert_drive_file</i>\n          }\n          @if (enableRemoveImage && hasImage) {\n            <i class=\"material-icons btn1\" (click)=\"removeImage()\"\n            [title]=\"getTooltipTranslated('removeImage')\">clear</i>\n          }\n          <i class=\"material-icons btn1\"  [class.selected]=\"currentTool === 'crop' || done===false\" (click)=\"crop()\"\n          [title]=\"getTooltipTranslated('crop')\">crop</i>\n          <i class=\"material-icons btn1\"  [class.selected]=\"currentTool === 'mask'\" (click)=\"maskC()\"\n          [title]=\"getTooltipTranslated('mask')\">crop_free</i>\n          <i class=\"material-icons btn1\" [class.selected]=\"currentTool === 'resize'\" (click)=\"resize()\"\n          [title]=\"getTooltipTranslated('resize')\">expand</i>\n          <i class=\"material-icons btn1\" [class.disabled]=\"!canUndo\" (click)=\"undo()\"\n          [title]=\"getTooltipTranslated('undo')\">undo</i>\n          <i class=\"material-icons btn1\" [class.disabled]=\"!canRedo\" (click)=\"redo()\"\n          [title]=\"getTooltipTranslated('redo')\">redo</i>\n          <!-- <i class=\"material-icons btn1\" (click)=\"clearCanvas()\" [title]=\"getTooltipTranslated('clear')\">delete</i> -->\n        </div>\n        <div class=\"row1\">\n          @for (shapeName of shapesNames; track shapeName) {\n            <div class=\"material-icons-outlined btn1\" (click)=\"shape(shapeName.shape)\">\n              {{shapeName.icon}}\n            </div>\n          }\n          <div class=\"material-icons btn1\" (click)=\"rotate(90)\">\n            rotate_right\n          </div>\n        </div>\n        <div class=\"row1\">\n          @for (colorName of colorsName; track colorName) {\n            <div [class.selected]=\"currentColor === colorName\" class=\"color\"\n              [ngClass]=\"colorName\"\n              [style.background]=\"colors[colorName]\" [title]=\"getTooltipTranslated('colors.' + colorName)\"\n              (click)=\"selectColor(colorName)\">\n            </div>\n          }\n        </div>\n      </div>\n      <!-- Any additional toolbar buttons to be projected by the consuming app -->\n      <ng-content></ng-content>\n    </div>\n  }\n  @if (!isLoading) {\n    <div class=\"buttons\">\n      @if (showCancelButton) {\n        <a href=\"#\" [class]=\"cancelBtnClass\"\n        (click)=\"cancelAction(); $event.preventDefault()\">{{ getTextTranslated('cancelBtn') }}</a>\n      }\n      <button  [class]=\"saveBtnClass\"\n      (click)=\"saveImage()\">{{ getTextTranslated('saveBtn') }}</button>\n    </div>\n  }\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ImageDrawingComponent } from './image-drawing/image-drawing.component';\nimport {MatIconModule} from '@angular/material/icon';\n@NgModule({\n    exports: [\n        ImageDrawingComponent,\n    ],\n    imports: [\n        CommonModule,\n        MatIconModule,\n        ImageDrawingComponent\n    ]\n})\nexport class ImageDrawingModule {}\n","/*\n * Public API Surface of ngx-image-drawing-zone\n */\n\nexport * from './lib/image-drawing/image-drawing.module';\nexport * from './lib/image-drawing/image-drawing/image-drawing.component';\nexport * from './lib/image-drawing/image-drawing/i18n';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}