{"version":3,"file":"asoftwareworld-form-builder-image-drawing.mjs","sources":["../../src/components/image-drawing/image-drawing.ts","../../src/components/image-drawing/image-drawing.html","../../src/components/image-drawing/image-drawing.module.ts","../../src/components/image-drawing/public_api.ts","../../src/components/image-drawing/asoftwareworld-form-builder-image-drawing.ts"],"sourcesContent":["/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\nimport {\r\n    Component,\r\n    EventEmitter,\r\n    Inject,\r\n    Input,\r\n    OnChanges,\r\n    OnInit,\r\n    Output,\r\n    SimpleChanges,\r\n    TemplateRef,\r\n} from '@angular/core';\r\nimport { NgForm } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { fabric } from 'fabric';\r\n\r\n@Component({\r\n    selector: 'asw-image-drawing',\r\n    styleUrls: ['./image-drawing.scss'],\r\n    templateUrl: './image-drawing.html'\r\n})\r\nexport class AswImageDrawing implements OnInit, OnChanges {\r\n\r\n    @Input() public src?: string;\r\n    @Input() public width = 680;\r\n    @Input() public height = 250;\r\n\r\n    @Input() public forceSizeCanvas = true;\r\n    @Input() public forceSizeExport = true;\r\n    @Input() public enableRemoveImage = true;\r\n    @Input() public enableLoadAnotherImage = true;\r\n    @Input() public enableTooltip = true;\r\n    @Input() public showCancelButton = true;\r\n\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\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 = 'none';\r\n\r\n    @Input() public drawingSizes: { [name: string]: number } = {\r\n        small: 3, medium: 10, large: 25, extra: 50\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 = 'brush';\r\n    public currentSize = 3;\r\n    public currentColor = 'black';\r\n    // public i18n: I18nInterface = I18nEn;\r\n    public canUndo = false;\r\n    public canRedo = false;\r\n\r\n    public isLoading = false;\r\n    public hasError = false;\r\n    public errorMessage = '';\r\n\r\n    private canvas!: fabric.Canvas;\r\n    private stack: fabric.Object[] = [];\r\n\r\n    public colorsName: string[] = [];\r\n    public drawingSizesName: string[] = [];\r\n\r\n    private imageUsed?: fabric.Image;\r\n\r\n    constructor(\r\n        public dialogRef: MatDialogRef<AswImageDrawing>,\r\n        @Inject(MAT_DIALOG_DATA) public control: any\r\n    ) {\r\n    }\r\n\r\n    public ngOnInit(): void {\r\n        if (this.control.controlType === 'signature') {\r\n            this.enableLoadAnotherImage = false;\r\n        }\r\n        this.src = this.control.imageUrl;\r\n        this.colorsName = Object.keys(this.colors);\r\n        this.drawingSizesName = Object.keys(this.drawingSizes);\r\n        this.canvas = new fabric.Canvas('aswCanvas', {\r\n            hoverCursor: 'pointer',\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        } 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\r\n        this.canvas.on('path:created', () => {\r\n            this.stack = [];\r\n            this.setUndoRedo();\r\n        });\r\n\r\n        this.selectTool(this.currentTool);\r\n        this.selectColor(this.currentColor);\r\n        this.selectDrawingSize(this.currentSize);\r\n    }\r\n\r\n    // Tools\r\n    public selectTool(tool: string): void {\r\n        this.currentTool = tool;\r\n    }\r\n\r\n    public selectDrawingSize(size: number): void {\r\n        this.currentSize = size;\r\n        if (this.canvas) {\r\n            this.canvas.freeDrawingBrush.width = size;\r\n        }\r\n    }\r\n\r\n    public selectColor(color: string): void {\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\r\n    // Actions\r\n\r\n    public undo(): void {\r\n        if (this.canUndo) {\r\n            const lastId = this.canvas.getObjects().length - 1;\r\n            const lastObj = this.canvas.getObjects()[lastId];\r\n            this.stack.push(lastObj);\r\n            this.canvas.remove(lastObj);\r\n            this.setUndoRedo();\r\n        }\r\n    }\r\n\r\n    public redo(): void {\r\n        if (this.canRedo) {\r\n            const firstInStack = this.stack.splice(-1, 1)[0];\r\n            if (firstInStack) {\r\n                this.canvas.insertAt(firstInStack, this.canvas.getObjects().length - 1, false);\r\n            }\r\n            this.setUndoRedo();\r\n        }\r\n    }\r\n\r\n    public clearCanvas(): void {\r\n        if (this.canvas) {\r\n            this.canvas.remove(...this.canvas.getObjects());\r\n            this.setUndoRedo();\r\n        }\r\n    }\r\n\r\n    public saveImage(): void {\r\n        this.canvas.getElement().toBlob(\r\n            (data: any) => {\r\n                const reader = new FileReader();\r\n                reader.readAsDataURL(data);\r\n                reader.onloadend = () => {\r\n                    const base64data = reader.result;\r\n                    this.control.imageUrl = base64data;\r\n                };\r\n            },\r\n            this.outputMimeType,\r\n            this.outputQuality\r\n        );\r\n    }\r\n\r\n    private setUndoRedo(): void {\r\n        this.canUndo = this.canvas.getObjects().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): void {\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(): void {\r\n        if (this.imageUsed) {\r\n            this.imageUsed.dispose();\r\n            this.imageUsed = null as any;\r\n        }\r\n        this.canvas.backgroundImage = null as any;\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): void {\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.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            } else {\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        imgEl.onload = () => {\r\n            this.isLoading = false;\r\n            this.imageUsed = new fabric.Image(imgEl);\r\n\r\n            this.imageUsed.cloneAsImage((image: any) => {\r\n                let width = imgEl.width;\r\n                let height = imgEl.height;\r\n                const ratio = (640 / width < 480 / height\r\n                    ? 640 / width\r\n                    : 480 / width\r\n                );\r\n                width = width * ratio;\r\n                height = height * ratio;\r\n\r\n                image.scaleToWidth(width, false);\r\n                image.scaleToHeight(height, false);\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                            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        };\r\n    }\r\n\r\n    private importPhotoFromBlob(file: Blob | File): void {\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    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 instanceof Blob) {\r\n                this.importPhotoFromBlob(changes.src.currentValue);\r\n            }\r\n        }\r\n    }\r\n\r\n    onNoClick(): void {\r\n        this.dialogRef.close();\r\n    }\r\n\r\n    onSubmit(aswEditPropertyForm: NgForm): void {\r\n        if (aswEditPropertyForm.invalid) {\r\n            return;\r\n        }\r\n        this.saveImage();\r\n        this.dialogRef.close(this.control);\r\n    }\r\n}\r\n","<h4 mat-dialog-title>Edit Property</h4>\r\n<mat-divider></mat-divider>\r\n<form #aswEditPropertyForm=\"ngForm\" (ngSubmit)=\"onSubmit(aswEditPropertyForm)\" novalidate>\r\n    <mat-dialog-content class=\"mat-typography\">\r\n        <div class=\"asw-drawing-card\">\r\n            <div class=\"loading\" *ngIf=\"isLoading\">\r\n                <ng-container *ngTemplateOutlet=\"loadingTemplate ? loadingTemplate : defaultLoading\"></ng-container>\r\n            </div>\r\n            <div class=\"error\" *ngIf=\"hasError\">\r\n                <ng-container *ngTemplateOutlet=\"errorTemplate ? errorTemplate : defaultError\"></ng-container>\r\n            </div>\r\n            \r\n            <ng-template #defaultLoading><p>{{ loadingText }}</p></ng-template>\r\n            <ng-template #defaultError> <p>{{ errorMessage }}</p> </ng-template>\r\n                \r\n            <div class=\"asw-drawing\">\r\n                <canvas #aswCanvas id=\"aswCanvas\" class=\"asw-drawing-canvas\"></canvas>\r\n            </div>\r\n        </div>\r\n        <div class=\"row asw-pt-10\" *ngIf=\"!isLoading\">\r\n            <div class=\"col-md-12\">\r\n                <div class=\"asw-buttons\">\r\n                    <button class=\"asw-image-load-btn\" type=\"button\"\r\n                        *ngIf=\"enableLoadAnotherImage && !hasImage\" \r\n                        (click)=\"fileInput.click();\"\r\n                        matTooltip=\"Load image\">\r\n                        <input style=\"display: none\" \r\n                                type=\"file\" \r\n                                #fileInput \r\n                                (change)=\"importPhotoFromFile($event)\"\r\n                                accept=\"image/*\"/>\r\n                        Load image\r\n                    </button>\r\n                    <button class=\"asw-image-load-btn\" type=\"button\"\r\n                            *ngIf=\"enableRemoveImage && hasImage\" \r\n                            (click)=\"removeImage()\"\r\n                            matTooltip=\"Remove image\">\r\n                            Remove image\r\n                    </button>\r\n                </div>\r\n            </div>\r\n            <div class=\"col-md-6\">\r\n                <ul class=\"asw-options\">\r\n                    <li class=\"option tool\" style=\"display: none\"\r\n                        [class.selected]=\"currentTool == 'brush'\" \r\n                        (click)=\"selectTool('brush')\"\r\n                        id=\"brush\">\r\n                        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14.445\" height=\"14.462\" viewBox=\"0 0 14.445 14.462\">\r\n                            <path id=\"Path_153\" data-name=\"Path 153\" d=\"M8.319,8.378l6.014-6.535a.4.4,0,0,0-.024-.577L13.155.111a.4.4,0,0,0-.553,0L6.066,6.125a.4.4,0,0,0,0,.577L7.742,8.378a.4.4,0,0,0,.577,0Zm-3.44-.89,2.093,2.1a.8.8,0,0,1,.249.457v.393a3.208,3.208,0,0,1-.938,2.277,6.223,6.223,0,0,1-4.739,1.732,2.326,2.326,0,0,1-1.427-.481.4.4,0,0,1-.048-.505,4.772,4.772,0,0,0,.714-2.609A3.626,3.626,0,0,1,1.744,8.17a3.208,3.208,0,0,1,2.269-.938,3.134,3.134,0,0,1,.393,0A.874.874,0,0,1,4.879,7.488Z\" fill=\"#5a6168\" fill-rule=\"evenodd\"/>\r\n                        </svg>\r\n                        <span>Brush</span>\r\n                    </li>\r\n                    <li class=\"option\">\r\n                        <input type=\"range\" \r\n                            [(ngModel)]=\"currentSize\"\r\n                            #input=\"ngModel\"\r\n                            name=\"sliders\"\r\n                            id=\"size-slider\"\r\n                            min=\"1\"\r\n                            (change)=\"selectDrawingSize(currentSize)\"\r\n                            max=\"30\">\r\n                    </li>\r\n                </ul>\r\n            </div>\r\n            <div class=\"col-md-6\">\r\n                <div class=\"asw-pb-10\">\r\n                    <mat-button-toggle-group class=\"asw-width\">\r\n                        <mat-button-toggle matTooltip=\"Undo\"\r\n                                [disabled]=\"!canUndo\"\r\n                                class=\"asw-width\"\r\n                                (change)=\"undo()\">\r\n                            Undo\r\n                        </mat-button-toggle>\r\n                        <mat-button-toggle matTooltip=\"Redo\"\r\n                                [disabled]=\"!canRedo\"\r\n                                class=\"asw-width\"\r\n                                (change)=\"redo()\">\r\n                            Redo\r\n                        </mat-button-toggle>\r\n                    </mat-button-toggle-group>\r\n                </div>\r\n            </div>\r\n            <div class=\"col-md-6\">\r\n                <div class=\"asw-color-picker\">\r\n                    <div *ngFor=\"let colorName of colorsName\" \r\n                        [class.selected]=\"currentColor == colorName\" \r\n                        class=\"color\"\r\n                        [ngClass]=\"colorName\"\r\n                        [style.background]=\"colors[colorName]\" \r\n                        title=\"{{colorName}}\"\r\n                        (click)=\"selectColor(colorName)\">\r\n                    </div>\r\n                </div>                \r\n            </div>\r\n            <div class=\"col-md-6 asw-buttons\">\r\n                <button class=\"asw-clear-canvas\" type=\"button\"\r\n                (click)=\"clearCanvas()\">Clear Canvas</button>\r\n            </div>\r\n        </div>\r\n    </mat-dialog-content>\r\n    <mat-dialog-actions align=\"end\">\r\n        <button type=\"button\"\r\n                class=\"btn btn-danger mr-2 me-2 mb-1\"\r\n                (click)=\"onNoClick()\">\r\n            No\r\n        </button>\r\n        <button type=\"submit\"\r\n                class=\"btn btn-primary mb-1\"\r\n                cdkFocusInitial>\r\n            Yes\r\n        </button>\r\n    </mat-dialog-actions>\r\n</form>\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { AswImageDrawing } from './image-drawing';\r\n\r\n@NgModule({\r\n    declarations: [\r\n        AswImageDrawing\r\n    ],\r\n    exports: [\r\n        AswImageDrawing,\r\n    ],\r\n    imports: [\r\n        CommonModule,\r\n        FormsModule,\r\n        MatDialogModule,\r\n        MatIconModule,\r\n        MatDividerModule,\r\n        MatButtonToggleModule\r\n    ]\r\n})\r\nexport class AswImageDrawingModule {}\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nexport * from './image-drawing.module';\r\nexport * from './image-drawing';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}