UNPKG

51.1 kBSource Map (JSON)View Raw
1{"version":3,"file":"lib-sketch-tool.js.map","sources":["ng://lib-sketch-tool/app/lib-sketch-tool/constants/shape-data.ts","ng://lib-sketch-tool/app/lib-sketch-tool/services/canvas-manager.service.ts","ng://lib-sketch-tool/app/lib-sketch-tool/web-component/web-sketch-tool.component.ts","ng://lib-sketch-tool/app/lib-sketch-tool/web-sketch-tool.module.ts"],"sourcesContent":["export const SHAPE_DATA = {\n width: 200,\n height: 200,\n left: 50,\n top: 50,\n radius: 100,\n stroke: 10,\n freeDrawingBrushWidth: 10,\n cornerSize: 20\n};\n","import { Injectable } from '@angular/core';\nimport { fabric } from 'fabric';\n\nimport { AvailableGeometricShape } from './../constants/available-geometric-shapes';\nimport { SHAPE_DATA } from './../constants/shape-data';\n\ninterface ScaleData {\n scaleFactor: number;\n left: number;\n top: number;\n}\n\ninterface Position {\n x: number;\n y: number;\n}\n\n@Injectable()\nexport class CanvasManagerService {\n public canvas;\n\n private cropRectangle: fabric.Rect;\n private mousePosition: Position;\n private cropStartingPosition: Position;\n private lastPanPosition: fabric.Point;\n\n constructor() {\n this.emptyCanvas();\n this.mousePosition = {x: 0, y: 0};\n this.cropStartingPosition = {x: 0, y: 0};\n }\n\n get canvasObjects() {\n return this.canvas.getObjects();\n }\n\n get canvasBackgroundImage() {\n return this.canvas.backgroundImage;\n }\n\n get activeObject() {\n return this.canvas.getActiveObject();\n }\n\n get activeGroup() {\n return this.canvas.getActiveObjects();\n }\n\n get divCanvasContainer() {\n return document.getElementsByClassName('div-canvas-container')[0];\n }\n\n public emptyCanvas(): void {\n if (this.canvas) {\n this.canvas.dispose();\n }\n this.canvas = new fabric.Canvas('canvas');\n this.canvas.clear();\n this.canvas.remove(this.canvas.getObjects());\n }\n\n public loadNewImage(backgroundImageURL?: string): void {\n this.emptyCanvas();\n if (backgroundImageURL) {\n this.setBackgroundFromURL(backgroundImageURL);\n }\n }\n\n public renderCanvas(): void {\n this.markSelectedObjectsDirty();\n this.canvas.renderAll();\n }\n\n public addGeometricShape(strokeColor: string, fillColor: string, shape: AvailableGeometricShape): void {\n switch (shape) {\n case AvailableGeometricShape.Rectangle:\n this.addRectangle(strokeColor, fillColor);\n break;\n case AvailableGeometricShape.Circle:\n this.addCircle(strokeColor, fillColor);\n break;\n case AvailableGeometricShape.Triangle:\n this.addTriangle(strokeColor, fillColor);\n break;\n case AvailableGeometricShape.Line:\n this.addHorizontalLine(strokeColor, fillColor);\n break;\n case AvailableGeometricShape.Cross:\n this.addCross(strokeColor, fillColor);\n break;\n }\n }\n\n private addRectangle(strokeColor: string, fillColor: string): void {\n this.canvas.add(\n new fabric.Rect({\n width: SHAPE_DATA.width,\n height: SHAPE_DATA.height,\n left: SHAPE_DATA.left,\n top: SHAPE_DATA.top,\n fill: fillColor,\n stroke: strokeColor,\n strokeWidth: SHAPE_DATA.stroke,\n cornerSize: SHAPE_DATA.cornerSize\n })\n );\n }\n\n private addCircle(strokeColor: string, fillColor: string): void {\n this.canvas.add(\n new fabric.Circle({\n left: SHAPE_DATA.left,\n top: SHAPE_DATA.top,\n radius: SHAPE_DATA.radius,\n stroke: strokeColor,\n strokeWidth: SHAPE_DATA.stroke,\n fill: fillColor,\n cornerSize: SHAPE_DATA.cornerSize\n })\n );\n }\n\n private addTriangle(strokeColor: string, fillColor: string): void {\n this.canvas.add(\n new fabric.Triangle({\n width: SHAPE_DATA.width,\n height: SHAPE_DATA.height,\n left: SHAPE_DATA.left,\n top: SHAPE_DATA.top,\n fill: fillColor,\n stroke: strokeColor,\n strokeWidth: SHAPE_DATA.stroke,\n cornerSize: SHAPE_DATA.cornerSize\n })\n );\n }\n\n private addHorizontalLine(strokeColor: string, fillColor: string): void {\n this.canvas.add(this.createHorizontalLine(strokeColor));\n }\n\n private createHorizontalLine(strokeColor: string): fabric.Line {\n const line = new fabric.Line([100, 150, 200, 150], {\n left: 50,\n top: 100,\n stroke: strokeColor,\n strokeWidth: 5,\n cornerSize: SHAPE_DATA.cornerSize\n });\n\n line.setControlsVisibility({\n bl: false,\n br: false,\n tl: false,\n tr: false,\n mt: false,\n mb: false\n });\n\n return line;\n }\n\n private createVerticalLine(strokeColor: string): fabric.Line {\n const line = new fabric.Line([150, 100, 150, 200], {\n left: 100,\n top: 50,\n stroke: strokeColor,\n strokeWidth: 5,\n cornerSize: SHAPE_DATA.cornerSize\n });\n\n line.setControlsVisibility({\n bl: false,\n br: false,\n tl: false,\n tr: false,\n ml: false,\n mr: false\n });\n\n return line;\n }\n\n private addCross(strokeColor: string, fillColor: string): void {\n const horizontalLine = this.createHorizontalLine(strokeColor);\n const verticalLine = this.createVerticalLine(strokeColor);\n this.canvas.add(horizontalLine);\n this.canvas.add(verticalLine);\n }\n\n public toggleFreeDrawing(): void {\n this.canvas.isDrawingMode = !this.canvas.isDrawingMode;\n }\n\n public setFreeDrawingBrushColor(color: string): void {\n this.canvas.freeDrawingBrush.color = color;\n this.setFreeDrawingBrushWidthFromZoom(this.canvas.getZoom());\n }\n\n private setFreeDrawingBrushWidthFromZoom(zoom: number) {\n this.canvas.freeDrawingBrush.width = SHAPE_DATA.freeDrawingBrushWidth * (1 / zoom);\n }\n\n public addText(color: string, inputText: string): void {\n const text = new fabric.IText('text', {\n fontFamily: 'arial black',\n fontStyle: 'bold',\n left: SHAPE_DATA.left,\n top: SHAPE_DATA.top,\n cornerSize: SHAPE_DATA.cornerSize\n });\n\n text.setColor(color);\n\n this.canvas.add(text);\n }\n\n public addImage(imageURL: string): Promise<void> {\n return new Promise(\n (resolve, reject): void => {\n const canvas = this.canvas;\n\n const image = new Image();\n image.onload = function(img) {\n const fabricImage = new fabric.Image(image, {\n angle: 0,\n width: image.width,\n height: image.height,\n left: SHAPE_DATA.left,\n top: SHAPE_DATA.top,\n scaleX: 1,\n scaleY: 1,\n cornerSize: SHAPE_DATA.cornerSize\n });\n canvas.add(fabricImage);\n resolve();\n };\n image.src = imageURL;\n }\n );\n }\n\n public setBackgroundFromURL(backgroundImageURL: string): Promise<void> {\n const canvas = this.canvas;\n const resize = this.resizeCanvasAndComputeScaleFactor;\n\n return new Promise(\n (resolve, reject): void => {\n if (backgroundImageURL == null) {\n return reject();\n }\n const image = new Image();\n image.onload = function() {\n const f_img = new fabric.Image(image, {});\n\n const scaleData = resize(f_img, canvas);\n\n canvas.setBackgroundImage(f_img, canvas.renderAll.bind(canvas), {\n scaleX: scaleData.scaleFactor,\n scaleY: scaleData.scaleFactor\n });\n\n canvas.setWidth(f_img.width * scaleData.scaleFactor);\n canvas.setHeight(f_img.height * scaleData.scaleFactor);\n\n canvas.renderAll();\n resolve();\n };\n image.src = backgroundImageURL;\n }\n );\n }\n\n private resizeCanvasAndComputeScaleFactor(f_img: fabric.Image, canvas: fabric.Canvas): ScaleData {\n const container = document.getElementsByClassName(\n 'div-canvas-container'\n )[0];\n\n canvas.setWidth(container.clientWidth);\n canvas.setHeight(container.clientHeight);\n\n const canvasAspect = container.clientWidth / container.clientHeight;\n const imgAspect = f_img.width / f_img.height;\n let left, top, scaleFactor;\n\n if (canvasAspect <= imgAspect) {\n scaleFactor = container.clientWidth / f_img.width;\n left = 0;\n top = -(f_img.height * scaleFactor - container.clientHeight) / 2;\n } else {\n scaleFactor = container.clientHeight / f_img.height;\n top = 0;\n left = -(f_img.width * scaleFactor - container.clientWidth) / 2;\n }\n\n return { scaleFactor: scaleFactor, left: left, top: top };\n }\n\n public onOrientationChange() {\n this.mousePosition = {x: this.canvas.getWidth, y: this.canvas.getHeight };\n this.cropImage();\n }\n\n public changeSelectedObjectsFillColor(color: string): void {\n const activeObjects = this.canvas.getActiveObjects();\n\n if (activeObjects) {\n for (const object of activeObjects) {\n object.setColor(color);\n this.canvas.renderAll();\n }\n }\n }\n\n public changeSelectedObjectsStrokeColor(color: string): void {\n const activeObjects = this.canvas.getActiveObjects();\n\n if (activeObjects) {\n for (const object of activeObjects) {\n if (object.type === 'i-text') {\n object.setColor(color);\n } else {\n object.stroke = color;\n object.set('dirty', true);\n }\n }\n this.canvas.renderAll();\n }\n }\n\n public deleteSelectedObjects(): void {\n const activeObjects = this.canvas.getActiveObjects();\n\n if (activeObjects) {\n for (const object of activeObjects) {\n this.canvas.remove(object);\n }\n this.canvas.discardActiveObject();\n this.canvas.renderAll();\n }\n }\n\n public bringSelectedObjectsToFront(): void {\n const activeObjects = this.canvas.getActiveObjects();\n\n if (activeObjects) {\n for (const object of activeObjects) {\n this.canvas.bringToFront(object);\n }\n }\n }\n\n public sendSelectedObjectsToBack(): void {\n const activeObjects = this.canvas.getActiveObjects();\n\n if (activeObjects) {\n for (const object of activeObjects) {\n this.canvas.sendToBack(object);\n }\n }\n }\n\n public jsonFromCanvas(): JSON {\n return this.canvas.toJSON();\n }\n\n public loadfromJson(json: JSON): Promise<void> {\n const container = this.divCanvasContainer;\n\n this.setCanvasSize(container.clientWidth, container.clientHeight);\n\n return new Promise(\n (resolve, reject): void => {\n this.adjustCanvas(json);\n this.canvas.loadFromJSON(json, this.canvas.renderAll.bind(this.canvas));\n resolve();\n }\n );\n }\n\n public adjustCanvas(json: JSON): void {\n const backgroundImage = json['backgroundImage'];\n\n const container = this.divCanvasContainer;\n\n const width = backgroundImage['width'];\n const height = backgroundImage['height'];\n\n const canvasWidth = container.clientWidth;\n const canvasHeight = container.clientHeight;\n\n const canvasAspect = canvasWidth / canvasHeight;\n const imgAspect = width / height;\n let scaleFactor;\n\n if (canvasAspect <= imgAspect) {\n scaleFactor = canvasWidth / width;\n } else {\n scaleFactor = canvasHeight / height;\n }\n\n const objectScale = scaleFactor / backgroundImage['scaleX'];\n\n backgroundImage['scaleX'] = scaleFactor;\n backgroundImage['scaleY'] = scaleFactor;\n\n this.setCanvasSize(width * scaleFactor, height * scaleFactor);\n\n const objects = json['objects'];\n\n for (let i = 0; i < objects.length; i++) {\n objects[i]['left'] *= objectScale;\n objects[i]['top'] *= objectScale;\n objects[i]['scaleX'] *= objectScale;\n objects[i]['scaleY'] *= objectScale;\n }\n\n this.canvas.selectable = true;\n this.canvas.selection = true;\n\n this.canvas.renderAll();\n }\n\n public exportImageAsDataURL(): string {\n return this.canvas.toDataURL('image/png');\n }\n\n public selectItem(itemNumber: number): void {\n this.canvas.setActiveObject(this.canvas.item(itemNumber));\n }\n\n public getIndexOf(activeObject): number {\n return this.canvas.getObjects().indexOf(activeObject);\n }\n\n private selectLastObject(): void {\n const itemNumber = this.canvas.getObjects().length - 1;\n const object = this.canvas.item(itemNumber);\n this.canvas.setActiveObject(object);\n object.enterEditing();\n }\n\n private markSelectedObjectsDirty(): void {\n const activeObjects = this.canvas.getActiveObjects();\n\n if (activeObjects) {\n for (const object of activeObjects) {\n object.set('dirty', true);\n }\n }\n }\n\n public addSelectionRectangle(): void {\n this.cropRectangle = new fabric.Rect({\n fill: 'transparent',\n originX: 'left',\n originY: 'top',\n stroke: '#ccc',\n strokeDashArray: [2, 2],\n opacity: 1,\n width: 1,\n height: 1\n });\n\n this.cropRectangle.visible = false;\n this.canvas.add(this.cropRectangle);\n }\n\n public ajustCropRectangleFromMouse(event: MouseEvent): boolean {\n const x = Math.min(event.layerX, this.mousePosition.x),\n y = Math.min(event.layerY, this.mousePosition.y),\n w = Math.abs(event.layerX - this.mousePosition.x),\n h = Math.abs(event.layerY - this.mousePosition.y);\n\n if (!w || !h) {\n return false;\n }\n\n this.cropRectangle\n .set('top', y)\n .set('left', x)\n .set('width', w)\n .set('height', h);\n\n this.canvas.renderAll();\n\n return true;\n }\n\n public startSelectingCropRectangleFromMouse(event: MouseEvent): void {\n this.cropStartingPosition = { x: this.canvas.left, y: this.canvas.top };\n\n this.cropRectangle.left = event.layerX;\n this.cropRectangle.top = event.layerY;\n this.cropRectangle.setCoords();\n\n this.mousePosition = {x: event.layerX, y: event.layerY };\n\n this.canvas.renderAll();\n this.cropRectangle.visible = true;\n this.canvas.bringToFront(this.cropRectangle);\n }\n\n public cropImage(): void {\n const left = this.cropRectangle.left;\n const top = this.cropRectangle.top;\n\n const width = this.cropRectangle.width;\n const height = this.cropRectangle.height;\n\n const container = this.divCanvasContainer;\n\n const canvasWidth = container.clientWidth;\n const canvasHeight = container.clientHeight;\n\n const canvasAspect = canvasWidth / canvasHeight;\n const imgAspect = width / height;\n let scaleFactor;\n\n if (canvasAspect <= imgAspect) {\n scaleFactor = canvasWidth / width;\n } else {\n scaleFactor = canvasHeight / height;\n }\n\n this.setCanvasSize(width * scaleFactor, height * scaleFactor);\n\n this.canvas.backgroundImage.scaleX *= scaleFactor;\n this.canvas.backgroundImage.scaleY *= scaleFactor;\n\n this.canvas.backgroundImage.left -= left;\n this.canvas.backgroundImage.left *= scaleFactor;\n this.canvas.backgroundImage.top -= top - scaleFactor;\n this.canvas.backgroundImage.top *= scaleFactor;\n\n this.moveAllObjectsInCanvas(-1 * left, -1 * top, scaleFactor);\n\n this.enableSlection();\n this.cropRectangle.visible = false;\n\n this.canvas.remove(this.cropRectangle);\n\n this.canvas.renderAll();\n }\n\n public enableSlection() {\n this.canvas.selectable = true;\n this.canvas.selection = true;\n }\n\n public ajustCropRectangle(event): boolean {\n const touch = event.touches[0];\n\n const rect = event.target.getBoundingClientRect();\n\n const x = Math.min(touch.clientX - rect.left, this.mousePosition.x),\n y = Math.min(touch.clientY - rect.top, this.mousePosition.y),\n w = Math.abs(touch.clientX - rect.left - this.mousePosition.x),\n h = Math.abs(touch.clientY - rect.top - this.mousePosition.y);\n\n if (!w || !h) {\n return false;\n }\n\n this.cropRectangle\n .set('left', x)\n .set('top', y)\n .set('width', w)\n .set('height', h);\n\n this.canvas.renderAll();\n\n return true;\n }\n\n public startSelectingCropRectangle(event): void {\n this.cropStartingPosition = { x: this.canvas.left, y: this.canvas.top };\n\n const touch = event.touches[0];\n const rect = event.target.getBoundingClientRect();\n\n this.cropRectangle.left = touch.clientX - rect.left;\n this.cropRectangle.top = touch.clientY - rect.top;\n this.cropRectangle.setCoords();\n\n this.mousePosition = { x: touch.clientX - rect.left, y: touch.clientY - rect.top };\n\n this.canvas.renderAll();\n this.cropRectangle.visible = true;\n this.canvas.bringToFront(this.cropRectangle);\n }\n\n public disableSelection() {\n this.canvas.selection = false;\n }\n\n private moveAllObjectsInCanvas(x: number, y: number, scaleFactor: number): void {\n const objects = this.canvas.getObjects();\n for (const obj of objects) {\n obj.left += x;\n obj.left *= scaleFactor;\n obj.scaleX *= scaleFactor;\n obj.top += y;\n obj.scaleY *= scaleFactor;\n obj.top *= scaleFactor;\n obj.setCoords();\n }\n }\n\n public groupSelectedObjects(): void {\n const activeObjects = this.canvas.getActiveObjects();\n\n if (activeObjects) {\n const objects = [];\n\n for (const object of activeObjects) {\n objects.push(object);\n }\n this.deleteSelectedObjects();\n\n const group = new fabric.Group(objects);\n this.canvas.add(group);\n group.setCoords();\n\n this.canvas.setActiveObject(group);\n\n this.canvas.renderAll();\n }\n }\n\n public setLastPanPosition(event) {\n this.lastPanPosition = new fabric.Point(event.touches[0].clientX, event.touches[0].clientY);\n }\n\n public panCanvas(event): void {\n const delta = new fabric.Point(\n event.touches[0].clientX - this.lastPanPosition.x,\n event.touches[0].clientY - this.lastPanPosition.y\n );\n\n this.canvas.relativePan(delta);\n this.preventPanOutsideCanvas();\n\n this.canvas.renderAll();\n this.setLastPanPosition(event);\n }\n\n private preventPanOutsideCanvas() {\n const canvasViewPort = this.canvas.viewportTransform;\n\n const bottomEndPoint = this.canvas.height * (canvasViewPort[0] - 1);\n if (canvasViewPort[5] >= 0 || -bottomEndPoint > canvasViewPort[5]) {\n canvasViewPort[5] = (canvasViewPort[5] >= 0) ? 0 : -bottomEndPoint;\n }\n\n const rightEndPoint = this.canvas.width * (canvasViewPort[0] - 1);\n if (canvasViewPort[4] >= 0 || -rightEndPoint > canvasViewPort[4]) {\n canvasViewPort[4] = (canvasViewPort[4] >= 0) ? 0 : -rightEndPoint;\n }\n }\n\n public zoom(event): void {\n if (Math.abs(event.overallVelocity) > 0.005) {\n const point = new fabric.Point(event.center.x, event.center.y);\n\n let zoom = this.canvas.getZoom();\n zoom = zoom + (event.scale - zoom) / 20;\n\n\n if (zoom < 1) {\n zoom = 1;\n this.canvas.zoomToPoint(new fabric.Point(0, 0), zoom);\n this.canvas.absolutePan(new fabric.Point(0, 0));\n } else {\n if (zoom > 10) {\n zoom = 10;\n }\n this.canvas.zoomToPoint(point, zoom);\n }\n\n this.setFreeDrawingBrushWidthFromZoom(zoom);\n this.canvas.renderAll();\n }\n }\n\n private setCanvasSize(width: number, height: number) {\n this.canvas.setWidth(width);\n this.canvas.setHeight(height);\n }\n\n public resetZoom() {\n this.canvas.zoomToPoint(new fabric.Point(0, 0), 1);\n this.canvas.absolutePan(new fabric.Point(0, 0));\n }\n}\n","import { Component, OnInit, Input, HostListener, Output, OnChanges, EventEmitter } from '@angular/core';\nimport { forEach } from '@angular/router/src/utils/collection';\nimport { CanvasManagerService } from './../services/canvas-manager.service';\nimport { AvailableGeometricShape } from './../constants/available-geometric-shapes';\nimport { KEY_CODE } from './../constants/key-code';\nimport { fabric } from 'fabric';\n\nconst Black = '#000000';\nconst Transparent = 'transparent';\n\n@Component({\n selector: 'lib-web-sketch-tool',\n template: `<div\n class=\"div-canvas-container\"\n (mousedown)=\"mouseDown($event)\"\n (mousemove)=\"mouseMove($event)\"\n (mouseup)=\"mouseUp($event)\"\n>\n <canvas id=\"canvas\"></canvas>\n</div>\n\n<mat-toolbar class=\"edit-toolbar\">\n <button\n mat-button\n class=\"tool-button\"\n (click)=\"addShape('Rectangle')\"\n [disabled]=\"isDrawing\"\n >\n <i class=\"fas fa-square\"></i>\n </button>\n\n <button\n mat-button\n class=\"tool-button\"\n (click)=\"addShape('Circle')\"\n [disabled]=\"isDrawing\"\n >\n <i class=\"fas fa-circle\"></i>\n </button>\n\n <button\n mat-button\n class=\"tool-button\"\n (click)=\"addShape('Triangle')\"\n [disabled]=\"isDrawing\"\n >\n <i class=\"fas fa-caret-up\"></i>\n </button>\n\n <button\n mat-button\n class=\"tool-button\"\n (click)=\"addShape('Line')\"\n [disabled]=\"isDrawing\"\n >\n <i class=\"fas fa-minus\"></i>\n </button>\n\n <button\n mat-button\n class=\"tool-button\"\n (click)=\"addText()\"\n [disabled]=\"isDrawing\"\n >\n <i class=\"fas fa-font\"></i>\n </button>\n\n <button\n mat-button\n class=\"tool-button\"\n color=\"accent\"\n (click)=\"crop()\"\n [disabled]=\"isDrawing\"\n >\n <i class=\"fas fa-crop\"></i>\n </button>\n\n <button\n mat-button\n (click)=\"draw()\"\n class=\"tool-button\"\n >\n <i class=\"fas fa-pencil-alt\"></i>\n </button>\n\n <button\n mat-button\n class=\"tool-button\"\n (click)=\"group()\"\n [disabled]=\"isDrawing\"\n >\n <i class=\"fas fa-object-group\"></i>\n </button>\n\n <button\n mat-button\n class=\"tool-button\"\n color=\"accent\"\n (click)=\"bringFoward()\"\n [disabled]=\"isDrawing\"\n >\n <i class=\"fas fa-angle-up\"></i>\n </button>\n\n <button\n mat-button\n class=\"tool-button\"\n color=\"accent\"\n (click)=\"sendToBack()\"\n [disabled]=\"isDrawing\"\n >\n <i class=\"fas fa-angle-down\"></i>\n </button>\n\n <button\n mat-button\n class=\"tool-button\"\n (click)=\"deleteSelection()\"\n [disabled]=\"isDrawing\"\n >\n <i class=\"fas fa-trash\"></i>\n </button>\n\n <button\n mat-button\n (click)=\"saveImage()\"\n class=\"tool-button\"\n >\n <i class=\"fas fa-download\"></i>\n </button>\n\n <input\n mat-button\n class=\"colorPicker\"\n [(colorPicker)]=\"strokeColor\"\n [style.background]=\"strokeColor\"\n (colorPickerChange)=\"changeStrokeColor()\"\n >\n</mat-toolbar>\n`,\n styles: [`.div-canvas-container{text-align:center;margin:0 auto;padding:0;height:90%!important;width:100%!important;-o-object-fit:contain;object-fit:contain}.edit-toolbar{height:7%;justify-content:center}.toolbar-button{font-family:FontAwesome;display:inline-block;width:1.5em;min-width:0}.mat-button.tool-button{min-width:40px!important;width:50px;min-height:40px!important;height:40px;margin-right:10px}.colorPicker{width:40px;height:36px;margin-top:3px;color:transparent}i{font-size:1.5em;color:#000}`],\n providers: [CanvasManagerService]\n})\n\nexport class WebSketchToolComponent implements OnInit, OnChanges {\n public fillColor: string;\n public strokeColor: string;\n\n public availableGeometricShapes = AvailableGeometricShape;\n public isDrawing: boolean;\n public isCropping: boolean;\n public isLastImage: boolean;\n\n private isLoaded: boolean;\n private previousImageData: string;\n\n @Input() public imageData: string;\n @Input() public loadedJson: string;\n\n @Output() public canvas = new EventEmitter<fabric.Canvas>();\n\n constructor(private canvasManagerService: CanvasManagerService) {\n this.strokeColor = Black;\n this.fillColor = Transparent;\n this.isCropping = false;\n this.isLoaded = false;\n }\n\n ngOnInit() {\n this.setCanvas();\n }\n\n ngOnChanges() {\n this.setCanvas();\n }\n\n private setCanvas() {\n if (this.imageData) {\n this.canvasManagerService.emptyCanvas();\n this.canvasManagerService.resetZoom();\n if (this.loadedJson == null || this.loadedJson.length < 10) {\n this.canvasManagerService.setBackgroundFromURL(this.imageData);\n } else {\n this.canvasManagerService.loadfromJson(JSON.parse(this.loadedJson));\n }\n this.isLoaded = true;\n this.previousImageData = this.imageData;\n this.emitCanvas();\n }\n }\n\n public addText() {\n this.canvasManagerService.addText(this.strokeColor, ' ');\n this.emitCanvas();\n }\n\n public addShape(shape: string) {\n this.canvasManagerService.addGeometricShape(\n this.strokeColor,\n this.fillColor,\n AvailableGeometricShape[shape]\n );\n this.emitCanvas();\n }\n\n public changeStrokeColor() {\n this.canvasManagerService.changeSelectedObjectsStrokeColor(\n this.strokeColor\n );\n this.canvasManagerService.setFreeDrawingBrushColor(this.strokeColor);\n this.emitCanvas();\n }\n\n public bringFoward() {\n this.canvasManagerService.bringSelectedObjectsToFront();\n this.emitCanvas();\n }\n\n public sendToBack() {\n this.canvasManagerService.sendSelectedObjectsToBack();\n this.emitCanvas();\n }\n\n public draw() {\n this.isDrawing = !this.isDrawing;\n this.canvasManagerService.toggleFreeDrawing();\n this.canvasManagerService.setFreeDrawingBrushColor(this.strokeColor);\n }\n\n public saveImage() {\n const dataURL = this.canvasManagerService.exportImageAsDataURL();\n\n const link = document.createElement('a');\n link.download = 'image';\n\n link.href = dataURL;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n\n public crop() {\n this.isCropping = true;\n this.canvasManagerService.disableSelection();\n this.canvasManagerService.addSelectionRectangle();\n }\n\n @HostListener('window:keyup', ['$event'])\n keyEvent(event: KeyboardEvent) {\n if (event.keyCode === KEY_CODE.DELETE) {\n this.deleteSelection();\n }\n this.emitCanvas();\n }\n\n public deleteSelection() {\n this.canvasManagerService.deleteSelectedObjects();\n this.emitCanvas();\n }\n\n public mouseUp(event) {\n if (this.isCropping) {\n this.canvasManagerService.cropImage();\n this.isCropping = false;\n }\n this.emitCanvas();\n }\n\n public mouseMove(event: MouseEvent) {\n if (this.isCropping) {\n this.canvasManagerService.ajustCropRectangleFromMouse(event);\n }\n }\n\n public mouseDown(event: MouseEvent) {\n if (this.isCropping) {\n this.canvasManagerService.startSelectingCropRectangleFromMouse(event);\n }\n }\n\n public group() {\n this.canvasManagerService.groupSelectedObjects();\n this.emitCanvas();\n }\n\n public emitCanvas() {\n this.canvas.emit(this.canvasManagerService.canvas);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { ColorPickerModule } from 'ngx-color-picker';\nimport { MatButtonModule } from '@angular/material';\n\nimport { WebSketchToolComponent } from './web-component/web-sketch-tool.component';\n\n@NgModule({\n imports: [CommonModule, ColorPickerModule, MatButtonModule, MatToolbarModule],\n declarations: [WebSketchToolComponent],\n exports: [WebSketchToolComponent]\n})\nexport class WebSketchToolModule {}\n"],"names":["tslib_1.__values"],"mappings":"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"}