UNPKG

83 kBSource Map (JSON)View Raw
1{"version":3,"file":"lib-sketch-tool.umd.js.map","sources":[null,"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/mobile-component/mobile-sketch-tool.component.ts","ng://lib-sketch-tool/app/lib-sketch-tool/sketch-tool.module.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","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 this.canvas.freeDrawingBrush.width = SHAPE_DATA.freeDrawingBrushWidth;\n }\n\n get backgroundImage() {\n return this.canvas;\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 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 }\n\n set freeDrawingBrushWidthFromZoom(zoom) {\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.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 canvasWidth = canvas.getWidth();\n const canvasHeight = canvas.getHeight();\n\n const canvasAspect = canvasWidth / canvasHeight;\n const imgAspect = f_img.width / f_img.height;\n let left, top, scaleFactor;\n\n if (canvasAspect <= imgAspect) {\n scaleFactor = canvasWidth / f_img.width;\n left = 0;\n top = -(f_img.height * scaleFactor - canvasHeight) / 2;\n } else {\n scaleFactor = canvasHeight / f_img.height;\n top = 0;\n left = -(f_img.width * scaleFactor - canvasWidth) / 2;\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 = document.getElementsByClassName(\n 'div-canvas-container'\n )[0];\n\n this.canvas.setWidth(container.clientWidth);\n this.canvas.setHeight(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 = document.getElementsByClassName(\n 'div-canvas-container'\n )[0];\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.canvas.setWidth(width * scaleFactor);\n this.canvas.setHeight(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 = document.getElementsByClassName(\n 'div-canvas-container'\n )[0];\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.canvas.setWidth(width * scaleFactor);\n this.canvas.setHeight(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.canvas.selectable = true;\n this.canvas.selection = true;\n this.cropRectangle.visible = false;\n\n this.canvas.remove(this.cropRectangle);\n\n this.canvas.renderAll();\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 imageHeight = this.canvas.height * canvasViewPort[0];\n const imageWidth = this.canvas.width * canvasViewPort[0];\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 const point = new fabric.Point(event.center.x, event.center.y);\n\n let zoom = this.canvas.getZoom();\n if (event.additionalEvent === 'pinchout') {\n zoom *= 1.05;\n }\n if (event.additionalEvent === 'pinchin') {\n zoom /= 1.05;\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.freeDrawingBrushWidthFromZoom(zoom);\n this.canvas.renderAll();\n }\n}\n","import { Component, Input, Output, OnInit, OnChanges, AfterViewInit, EventEmitter, transition, ElementRef, ViewChild, OnDestroy } from '@angular/core';\nimport { ActionSheetController } from 'ionic-angular';\nimport { Gesture } from 'ionic-angular/gestures/gesture';\nimport { AvailableGeometricShape } from './../constants/available-geometric-shapes';\nimport { CanvasManagerService } from './../services/canvas-manager.service';\nimport { fabric } from 'fabric';\nimport { TranslateService } from \"@ngx-translate/core\";\n\nconst Black = '#000000';\nconst Transparent = 'transparent';\n\n@Component({\n selector: 'lib-mobile-sketch-tool',\n template: `<ion-content>\n <div\n class=\"div-canvas-container\"\n (touchstart)=\"mouseDown($event)\"\n (touchmove)=\"mouseMove($event)\"\n (touchend)=\"mouseUp($event)\"\n #pinchElement\n >\n <canvas id=\"canvas\"></canvas>\n\n <div\n class=\"color-picker\"\n *ngIf=\"isSelectingColor\"\n >\n <ion-grid fixed>\n <ion-row>\n <ion-col\n style=\"background:#660000\"\n (tap)=\"setColor('#660000')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#663300\"\n (tap)=\"setColor('#663300')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#666600\"\n (tap)=\"setColor('#666600')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#006600\"\n (tap)=\"setColor('#006600')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#000066\"\n (tap)=\"setColor('#000066')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#660066\"\n (tap)=\"setColor('#660066')\"\n > \n </ion-col>\n\n </ion-row>\n <ion-row>\n <ion-col\n style=\"background:#CC0000\"\n (tap)=\"setColor('#CC0000')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#CC6600\"\n (tap)=\"setColor('#CC6600')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#CCCC00\"\n (tap)=\"setColor('#CCCC00')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#00CC00\"\n (tap)=\"setColor('#00CC00')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#0000CC\"\n (tap)=\"setColor('#0000CC')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#CC00CC\"\n (tap)=\"setColor('#CC00CC')\"\n > \n </ion-col>\n\n </ion-row>\n <ion-row>\n <ion-col\n style=\"background:#FF0000\"\n (tap)=\"setColor('#FF0000')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#FF8000\"\n (tap)=\"setColor('#FF8000')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#FFFF00\"\n (tap)=\"setColor('#FFFF00')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#00FF00\"\n (tap)=\"setColor('#00FF00')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#0000FF\"\n (tap)=\"setColor('#0000FF')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#FF00FF\"\n (tap)=\"setColor('#FF00FF')\"\n > \n </ion-col>\n\n </ion-row>\n <ion-row>\n <ion-col\n style=\"background:#FF6666\"\n (tap)=\"setColor('#FF6666')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#FFB266\"\n (tap)=\"setColor('#FFB266')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#FFFF66\"\n (tap)=\"setColor('#FFFF66')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#66FF66\"\n (tap)=\"setColor('#66FF66')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#6666FF\"\n (tap)=\"setColor('#6666FF')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#FF66FF\"\n (tap)=\"setColor('#FF66FF')\"\n > \n </ion-col>\n\n </ion-row>\n <ion-row>\n <ion-col\n style=\"background:#FF9999\"\n (tap)=\"setColor('#FF9999')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#FFCC99\"\n (tap)=\"setColor('#FFCC99')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#FFFF99\"\n (tap)=\"setColor('#FFFF99')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#99FF99\"\n (tap)=\"setColor('#99FF99')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#9999FF\"\n (tap)=\"setColor('#9999FF')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#FF99FF\"\n (tap)=\"setColor('#FF99FF')\"\n > \n </ion-col>\n\n </ion-row>\n <ion-row>\n <ion-col\n style=\"background:#FFFFFF\"\n (tap)=\"setColor('#FFFFFF')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#C0C0C0\"\n (tap)=\"setColor('#C0C0C0')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#808080\"\n (tap)=\"setColor('#808080')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#606060\"\n (tap)=\"setColor('#606060')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#303030\"\n (tap)=\"setColor('#606060')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#000000\"\n (tap)=\"setColor('#000000')\"\n > \n </ion-col>\n </ion-row>\n </ion-grid>\n </div>\n </div>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <div class=\"div-edit-toolbar\">\n <button\n class=\"button-edit-toolbar\"\n ion-button\n large\n [clear]=\"true\"\n (click)=\"presentShapeActionSheet()\"\n >\n <i\n class=\"fas fa-shapes\"\n id=\"icon\"\n ></i>\n </button>\n\n <button\n class=\"button-edit-toolbar\"\n ion-button\n large\n [clear]=\"true\"\n (click)=\"presentPictogramsActionSheet()\"\n *ngIf=\"hasPictograms\"\n >\n <i\n class=\"fas fa-images\"\n id=\"icon\"\n ></i>\n </button>\n\n <button\n class=\"button-edit-toolbar\"\n ion-button\n large\n [clear]=\"true\"\n (click)=\"presentEditActionSheet()\"\n >\n <i\n class=\"fas fa-edit\"\n id=\"icon\"\n ></i>\n </button>\n\n <button\n class=\"button-edit-toolbar\"\n ion-button\n large\n [clear]=\"true\"\n (click)=\"draw()\"\n >\n <i\n class=\"fas fa-pencil-alt\"\n id=\"icon\"\n ></i>\n </button>\n\n <button\n class=\"button-edit-toolbar\"\n ion-button\n large\n [clear]=\"true\"\n (click)=\"onColorClicked()\"\n >\n <i\n class=\"fas fa-palette\"\n id=\"icon\"\n ></i>\n </button>\n\n <button\n class=\"button-edit-toolbar\"\n ion-button\n large\n [clear]=\"true\"\n (click)=\"undo()\"\n *ngIf=\"isUndoAvailable\"\n >\n <i\n class=\"fas fa-undo\"\n id=\"icon\"\n ></i>\n </button>\n\n </div>\n </ion-toolbar>\n</ion-footer>\n`,\n styles: [`.div-canvas-container{text-align:center;height:100%;width:100%;-o-object-fit:contain;object-fit:contain}.scroll-content{padding:0!important;overflow-y:hidden}.div-edit-toolbar{text-align:center}.button-edit-toolbar{padding:4%!important;margin:0!important}.action-sheet-button{font-family:FontAwesome,Arial}.color-picker{position:absolute;width:100%;height:auto;bottom:0;left:0}#icon{color:#b32017}`],\n providers: [CanvasManagerService]\n})\nexport class MobileSketchToolComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n private gesture: Gesture;\n @ViewChild('pinchElement') element;\n\n public fillColor: string;\n public strokeColor: string;\n public isCropping: boolean;\n public isUndoAvailable: boolean;\n public isSelectingColor: boolean;\n public isDrawing: boolean;\n\n @Input() public imageData: string;\n @Input() public loadedJson: string;\n @Input() public iconsPath: string;\n @Input() public icons: [string];\n\n @Output() public canvas = new EventEmitter<fabric.Canvas>();\n\n private isLoaded: boolean;\n private isPanning: boolean;\n private previousImageData: string;\n private currentJson: JSON;\n private previousJson: JSON;\n\n constructor(\n public actionSheetCtrl: ActionSheetController,\n private canvasManagerService: CanvasManagerService,\n private translate: TranslateService\n ) {\n this.strokeColor = Black;\n this.fillColor = Transparent;\n this.isCropping = false;\n this.isLoaded = false;\n this.isUndoAvailable = false;\n this.isSelectingColor = false;\n }\n\n ngOnInit() {\n if (this.imageData) {\n this.canvasManagerService.emptyCanvas();\n if (this.loadedJson == null || this.loadedJson.length < 10) {\n this.canvasManagerService.setBackgroundFromURL(this.imageData);\n } else {\n this.previousJson = JSON.parse(this.loadedJson);\n this.currentJson = this.previousJson;\n this.canvasManagerService\n .loadfromJson(JSON.parse(this.loadedJson));\n }\n this.isLoaded = true;\n this.previousImageData = this.imageData;\n }\n this.emitCanvas();\n }\n\n ngOnChanges() {\n if (this.isLoaded) {\n if (this.loadedJson === null || this.loadedJson.length < 10 || this.imageData !== this.previousImageData) {\n this.canvasManagerService.emptyCanvas();\n this.canvasManagerService.setBackgroundFromURL(this.imageData);\n this.previousImageData = this.imageData;\n this.currentJson = null;\n } else if (this.loadedJson !== JSON.stringify(this.currentJson)) {\n this.previousJson = JSON.parse(this.loadedJson);\n this.currentJson = this.previousJson;\n this.canvasManagerService\n .loadfromJson(JSON.parse(this.loadedJson));\n }\n }\n this.emitCanvas();\n }\n\n ngAfterViewInit() {\n this.gesture = new Gesture(this.element.nativeElement);\n this.gesture.listen();\n this.gesture.on('pinch', $event => this.pinch($event));\n }\n\n ngOnDestroy() {\n this.gesture.destroy();\n}\n\n private pinchEvent(event) {\n this.canvasManagerService.emptyCanvas();\n }\n\n get hasPictograms(): boolean {\n return !(!this.icons);\n }\n\n public addText() {\n this.canvasManagerService.addText(this.strokeColor, 'text ');\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 addImage(source: string) {\n this.canvasManagerService.addImage(this.iconsPath + source);\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 crop() {\n this.isCropping = true;\n this.canvasManagerService.disableSelection();\n this.canvasManagerService.addSelectionRectangle();\n this.isUndoAvailable = true;\n this.previousJson = this.canvasManagerService.jsonFromCanvas();\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.isCropping = false;\n this.canvasManagerService.cropImage();\n this.isUndoAvailable = true;\n this.emitCanvas();\n }\n }\n\n public mouseMove(event) {\n if (this.isCropping) {\n this.canvasManagerService.ajustCropRectangle(event);\n } else if (event.touches.length === 3) {\n this.canvasManagerService.panCanvas(event);\n }\n }\n\n public mouseDown(event) {\n if (this.isCropping) {\n this.canvasManagerService.startSelectingCropRectangle(event);\n } else if (event.touches.length === 3) {\n this.canvasManagerService.setLastPanPosition(event);\n }\n }\n\n public pinch(event) {\n event.preventDefault();\n this.canvasManagerService.zoom(event);\n }\n\n public group() {\n this.canvasManagerService.groupSelectedObjects();\n this.emitCanvas();\n }\n\n public undo() {\n this.canvasManagerService.loadfromJson(this.previousJson);\n this.isUndoAvailable = false;\n this.emitCanvas();\n }\n\n public onColorClicked() {\n this.isSelectingColor = true;\n }\n\n public setColor(color: string) {\n this.strokeColor = color;\n this.changeStrokeColor();\n this.isSelectingColor = false;\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 private disableDrawing() {\n if (this.isDrawing) {\n this.isDrawing = false;\n this.canvasManagerService.toggleFreeDrawing();\n }\n }\n\n private translateShapeButtonsText(): Array<String> {\n const translationArray = [];\n translationArray.push(this.translate.instant('rectangle'));\n translationArray.push(this.translate.instant('triangle'));\n translationArray.push(this.translate.instant('circle'));\n translationArray.push(this.translate.instant('line'));\n translationArray.push(this.translate.instant('cross'));\n translationArray.push(this.translate.instant('text'));\n return translationArray;\n }\n\n public presentShapeActionSheet() {\n this.disableDrawing();\n\n const titleText = this.translate.instant('addGeometricShape');\n const buttonsText = this.translateShapeButtonsText();\n let i = 0;\n\n const actionSheet = this.actionSheetCtrl.create({\n title: titleText,\n buttons: [\n {\n text: '\\uf0c8 ' + buttonsText[i++],\n handler: () => {\n this.canvasManagerService.addGeometricShape(\n this.strokeColor,\n this.fillColor,\n AvailableGeometricShape.Rectangle\n );\n }\n },\n {\n text: '\\uf0d8 ' + buttonsText[i++],\n handler: () => {\n this.canvasManagerService.addGeometricShape(\n this.strokeColor,\n this.fillColor,\n AvailableGeometricShape.Triangle\n );\n }\n },\n {\n text: '\\uf111 ' + buttonsText[i++],\n handler: () => {\n this.canvasManagerService.addGeometricShape(\n this.strokeColor,\n this.fillColor,\n AvailableGeometricShape.Circle\n );\n }\n },\n {\n text: '\\uf068 ' + buttonsText[i++],\n handler: () => {\n this.canvasManagerService.addGeometricShape(\n this.strokeColor,\n this.fillColor,\n AvailableGeometricShape.Line\n );\n }\n },\n {\n text: '\\uf067 ' + buttonsText[i++],\n handler: () => {\n this.canvasManagerService.addGeometricShape(\n this.strokeColor,\n this.fillColor,\n AvailableGeometricShape.Cross\n );\n }\n },\n {\n text: '\\uf031 ' + buttonsText[i++],\n handler: () => {\n this.canvasManagerService.addText(this.strokeColor, '');\n }\n }\n ]\n });\n actionSheet.present();\n }\n\n private translateEditButtonsText(): Array<String> {\n const translationArray = [];\n translationArray.push(this.translate.instant('crop'));\n translationArray.push(this.translate.instant('group'));\n translationArray.push(this.translate.instant('bringToFront'));\n translationArray.push(this.translate.instant('sendToBack'));\n translationArray.push(this.translate.instant('delete'));\n return translationArray;\n }\n\n public presentEditActionSheet() {\n this.disableDrawing();\n\n const titleText = this.translate.instant('edition');\n\n const buttonsText = this.translateEditButtonsText();\n let i = 0;\n\n const actionSheet = this.actionSheetCtrl.create({\n title: titleText,\n buttons: [\n {\n text: '\\uf125 ' + buttonsText[i++],\n handler: () => {\n this.crop();\n }\n },\n {\n text: '\\uf247 ' + buttonsText[i++],\n handler: () => {\n this.group();\n }\n },\n {\n text: '\\uf0de ' + buttonsText[i++],\n handler: () => {\n this.bringFoward();\n }\n },\n {\n text: '\\uf0dd ' + buttonsText[i++],\n handler: () => {\n this.sendToBack();\n }\n },\n {\n text: '\\uf1f8 ' + buttonsText[i++],\n handler: () => {\n this.deleteSelection();\n }\n }\n ]\n });\n actionSheet.present();\n }\n\n public presentPictogramsActionSheet() {\n this.disableDrawing();\n\n const buttons = [];\n const actionSheetStyles = [];\n const images = this.icons;\n for (let i = 0; i < images.length; i++) {\n const style = document.createElement('style');\n style.type = 'text/css';\n style.innerHTML =\n '.customCSSClass' +\n i +\n '{background: url(' +\n \"'\" +\n this.iconsPath +\n images[i] +\n \"'\" +\n ') no-repeat !important;padding-left:50px !important;height:80px; background-position: left center !important;}';\n document.getElementsByTagName('head')[0].appendChild(style);\n actionSheetStyles.push(style);\n buttons.push({\n role: 'destructive',\n text: images[i],\n cssClass: 'customCSSClass' + i,\n handler: () => {\n this.addImage(images[i]);\n }\n });\n }\n\n const titleText = this.translate.instant('addPictogram');\n\n const actionSheet = this.actionSheetCtrl.create({\n title: titleText,\n buttons: buttons\n });\n actionSheet.onDidDismiss(() => {\n for (let i = 0; i < actionSheetStyles.length; i++) {\n if (actionSheetStyles[i].parentNode != null) {\n actionSheetStyles[i].parentNode.removeChild(actionSheetStyles[i]);\n }\n }\n });\n\n actionSheet.present();\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 { IonicModule } from 'ionic-angular';\n\nimport { MobileSketchToolComponent } from './mobile-component/mobile-sketch-tool.component';\nimport { CanvasManagerService } from './services/canvas-manager.service';\n\n@NgModule({\n imports: [CommonModule, IonicModule],\n declarations: [\n MobileSketchToolComponent,\n ],\n providers: [\n CanvasManagerService,\n ],\n exports: [MobileSketchToolComponent]\n})\nexport class SketchToolModule {}\n"],"names":["fabric","tslib_1.__values","Injectable","EventEmitter","Gesture","Component","ActionSheetController","TranslateService","ViewChild","Input","Output","NgModule","CommonModule","IonicModule"],"mappings":"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"}