@syncfusion/ej2-image-editor 20.3.56 → 20.4.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/.eslintrc.json +16 -1
  2. package/CHANGELOG.md +5 -5
  3. package/README.md +65 -2
  4. package/dist/ej2-image-editor.umd.min.js +2 -2
  5. package/dist/ej2-image-editor.umd.min.js.map +1 -1
  6. package/dist/es6/ej2-image-editor.es2015.js +6191 -4168
  7. package/dist/es6/ej2-image-editor.es2015.js.map +1 -1
  8. package/dist/es6/ej2-image-editor.es5.js +2505 -474
  9. package/dist/es6/ej2-image-editor.es5.js.map +1 -1
  10. package/dist/global/ej2-image-editor.min.js +2 -2
  11. package/dist/global/ej2-image-editor.min.js.map +1 -1
  12. package/dist/global/index.d.ts +1 -1
  13. package/package.json +23 -24
  14. package/src/image-editor/image-editor-model.d.ts +114 -20
  15. package/src/image-editor/image-editor.d.ts +251 -33
  16. package/src/image-editor/image-editor.js +2505 -473
  17. package/styles/bootstrap-dark.css +36 -0
  18. package/styles/bootstrap.css +36 -0
  19. package/styles/bootstrap4.css +36 -0
  20. package/styles/bootstrap5-dark.css +36 -0
  21. package/styles/bootstrap5.css +36 -0
  22. package/styles/fabric-dark.css +36 -0
  23. package/styles/fabric.css +36 -0
  24. package/styles/fluent-dark.css +36 -0
  25. package/styles/fluent.css +36 -0
  26. package/styles/highcontrast-light.css +36 -0
  27. package/styles/highcontrast.css +36 -0
  28. package/styles/image-editor/_bootstrap-dark-definition.scss +1 -0
  29. package/styles/image-editor/_bootstrap-definition.scss +1 -0
  30. package/styles/image-editor/_bootstrap4-definition.scss +1 -0
  31. package/styles/image-editor/_bootstrap5-definition.scss +1 -0
  32. package/styles/image-editor/_fabric-dark-definition.scss +1 -0
  33. package/styles/image-editor/_fabric-definition.scss +1 -0
  34. package/styles/image-editor/_fluent-definition.scss +1 -0
  35. package/styles/image-editor/_fusionnew-definition.scss +1 -0
  36. package/styles/image-editor/_highcontrast-definition.scss +1 -0
  37. package/styles/image-editor/_highcontrast-light-definition.scss +1 -0
  38. package/styles/image-editor/_layout.scss +38 -0
  39. package/styles/image-editor/_material-dark-definition.scss +1 -0
  40. package/styles/image-editor/_material-definition.scss +1 -0
  41. package/styles/image-editor/_material3-definition.scss +1 -0
  42. package/styles/image-editor/_tailwind-definition.scss +1 -0
  43. package/styles/image-editor/_theme.scss +11 -0
  44. package/styles/image-editor/bootstrap-dark.css +36 -0
  45. package/styles/image-editor/bootstrap.css +36 -0
  46. package/styles/image-editor/bootstrap4.css +36 -0
  47. package/styles/image-editor/bootstrap5-dark.css +36 -0
  48. package/styles/image-editor/bootstrap5.css +36 -0
  49. package/styles/image-editor/fabric-dark.css +36 -0
  50. package/styles/image-editor/fabric.css +36 -0
  51. package/styles/image-editor/fluent-dark.css +36 -0
  52. package/styles/image-editor/fluent.css +36 -0
  53. package/styles/image-editor/highcontrast-light.css +36 -0
  54. package/styles/image-editor/highcontrast.css +36 -0
  55. package/styles/image-editor/material-dark.css +36 -0
  56. package/styles/image-editor/material.css +36 -0
  57. package/styles/image-editor/tailwind-dark.css +36 -0
  58. package/styles/image-editor/tailwind.css +36 -0
  59. package/styles/material-dark.css +36 -0
  60. package/styles/material.css +36 -0
  61. package/styles/tailwind-dark.css +36 -0
  62. package/styles/tailwind.css +36 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ej2-image-editor.min.js","sources":["../../src/image-editor/image-editor.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { NotifyPropertyChanges, Property, addClass, removeClass, extend } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, getComponent, getInstance, isNullOrUndefined, L10n, getUniqueID } from '@syncfusion/ej2-base';\nimport { SignatureBase } from '@syncfusion/ej2-inputs';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { ColorPicker, Uploader } from '@syncfusion/ej2-inputs';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { compile, compile as templateCompiler, Browser, detach, select } from '@syncfusion/ej2-base';\n/**\n * Image Editor is a graphical user interface that helps to edit an image by performing actions like selection,\n * cropping, rotating, inserting text and shapes (rectangles, ellipses, lines), and drawing free hand on top of an image.\n *\n ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({});\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\nvar ImageEditor = /** @class */ (function (_super) {\n __extends(ImageEditor, _super);\n /**\n *\n * Constructor for creating the widget\n *\n * @param {ImageEditorModel} options - Specifies the image editor model\n * @param {string|HTMLDivElement} element - Specifies the target element\n */\n function ImageEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.degree = 0; // current rotated state\n _this.isUndoRedo = false;\n _this.dragCanvas = false;\n _this.dragElement = '';\n _this.keyHistory = ''; // text history\n _this.flipState = ''; // current flip state whether horizontal or vertical or none\n _this.mouseDownPoint = { x: 0, y: 0 };\n _this.previousPoint = { x: 0, y: 0 }; // updates prev x and y points in mouseMove\n _this.dragPoint = { startX: 0, startY: 0, endX: 0, endY: 0 }; // updates drag start and end points in mousedown and mousemove\n _this.diffPoint = { x: 0, y: 0 }; // updates resize points\n _this.oldPoint = {};\n _this.objColl = []; // shapes, text obj collection\n _this.undoRedoColl = [];\n _this.imgDataColl = []; // collection of Image Data mainly used for reset state\n _this.strokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n _this.textSettings = { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n _this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n _this.tempTextSettings = { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n _this.toolbarHeight = 46;\n _this.pannStart = {};\n _this.pannEnd = {};\n _this.togglePan = false;\n _this.lastX = 0;\n _this.lastY = 0;\n _this.dragStart = { x: 0, y: 0 };\n _this.dragged = false;\n _this.factor = 1; // current zoomed state\n _this.currFlipState = '';\n _this.touchEndPoint = {};\n _this.flipMethod = false;\n _this.flipDirection = '';\n _this.prevX = 0;\n _this.currX = 0;\n _this.prevY = 0;\n _this.currY = 0;\n _this.togglePen = false;\n _this.rotateMethod = false;\n _this.isBoldbtn = false;\n _this.isItalicbtn = false;\n _this.lastAction = '';\n _this.currentToolbar = 'main';\n _this.textStartPoints = { x: 0, y: 0 };\n _this.fontSizeColl = [];\n _this.tempKeyHistory = '';\n _this.penDrawColl = [];\n _this.allowDrag = false;\n _this.textRow = 1;\n _this.activeObj = { activePoint: { startX: 0, startY: 0, endX: 0, endY: 0, width: 0, height: 0 },\n flipObjColl: [] };\n _this.currObjType = { shape: '', isDragging: false, isActiveObj: false, isText: false, isInitialText: false, isLine: false,\n isInitialLine: false, isCustomCrop: false, isZoomed: false };\n _this.defToolbarItems = [];\n _this.baseImgSrc = '';\n _this.isTimer = false;\n _this.isScreenOriented = false;\n return _this;\n }\n ImageEditor_1 = ImageEditor;\n ImageEditor.prototype.preRender = function () {\n // pre render code snippets\n this.element.id = this.element.id || getUniqueID('ej2-image-editor');\n if (Browser.isDevice) {\n this.element.classList.add('e-device');\n }\n this.themeColl = {\n Bootstrap5: { primaryColor: '#0d6efd', secondaryColor: '#fff' },\n Bootstrap5Dark: { primaryColor: '#0d6efd', secondaryColor: '#fff' },\n Tailwind: { primaryColor: '#4f46e5', secondaryColor: '#fff' },\n TailwindDark: { primaryColor: '#22d3ee', secondaryColor: '#fff' },\n Fluent: { primaryColor: '#0078d4', secondaryColor: '#fff' },\n FluentDark: { primaryColor: '#0078d4', secondaryColor: '#fff' },\n Bootstrap4: { primaryColor: '#007bff', secondaryColor: '#fff' },\n Bootstrap: { primaryColor: '#317ab9', secondaryColor: '#fff' },\n BootstrapDark: { primaryColor: '#317ab9', secondaryColor: '#fff' },\n Material: { primaryColor: '#e3165b', secondaryColor: '#fff' },\n MaterialDark: { primaryColor: '#00b0ff', secondaryColor: '#fff' },\n Fabric: { primaryColor: '#0078d6', secondaryColor: '#fff' },\n FabricDark: { primaryColor: '#0074cc', secondaryColor: '#fff' },\n Highcontrast: { primaryColor: '#000000', secondaryColor: '#fff' }\n };\n this.defaultLocale = {\n Crop: 'Crop',\n ZoomIn: 'Zoom In',\n ZoomOut: 'Zoom Out',\n Transform: 'Transform',\n Annotation: 'Annotation',\n Text: 'Add Text',\n Pen: 'Pen',\n Reset: 'Reset',\n Save: 'Save',\n Select: 'Select',\n RotateLeft: 'Rotate Left',\n RotateRight: 'Rotate Right',\n HorizontalFlip: 'Horizontal Flip',\n VerticalFlip: 'Vertical Flip',\n OK: 'OK',\n Cancel: 'Cancel',\n FillColor: 'Fill Color',\n StrokeColor: 'Stroke Color',\n StrokeWidth: 'Stroke Width',\n FontFamily: 'Font Family',\n FontStyle: 'Font Style',\n FontSize: 'Font Size',\n FontColor: 'Font Color',\n Pan: 'Pan',\n Move: 'Move',\n Load: 'Load',\n Custom: 'Custom',\n Square: 'Square',\n Circle: 'Circle',\n Ellipse: 'Ellipse',\n Rectangle: 'Rectangle',\n Line: 'Line',\n Default: 'Default',\n Bold: 'Bold',\n Italic: 'Italic',\n BoldItalic: 'Bold Italic',\n XSmall: 'X-Small',\n Small: 'Small',\n Medium: 'Medium',\n Large: 'Large',\n XLarge: 'X-Large',\n ABC: 'ABC'\n };\n this.l10n = new L10n('image-editor', this.defaultLocale, this.locale);\n };\n /**\n *\n * To Initialize the component rendering\n *\n * @private\n * @returns {void}\n */\n ImageEditor.prototype.render = function () {\n this.initialize();\n };\n /**\n * To get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n ImageEditor.prototype.getModuleName = function () {\n return 'image-editor';\n };\n /**\n *\n * To get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n * @private\n */\n ImageEditor.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n *\n * Called internally if any of the property value changed.\n *\n * @param {ImageEditorModel} newProperties - Specifies new properties\n * @param {ImageEditorModel} oldProperties - Specifies old properties\n * @returns {void}\n * @private\n */\n ImageEditor.prototype.onPropertyChanged = function (newProperties, oldProperties) {\n for (var _i = 0, _a = Object.keys(newProperties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (oldProperties.cssClass) {\n removeClass([this.element], oldProperties.cssClass.split(' '));\n }\n if (newProperties.cssClass) {\n addClass([this.element], newProperties.cssClass.split(' '));\n }\n break;\n case 'disabled':\n if (newProperties.disabled) {\n this.element.classList.add('e-disabled');\n this.unwireEvent();\n }\n else {\n this.element.classList.remove('e-disabled');\n this.wireEvent();\n }\n break;\n case 'height':\n this.element.style.height = newProperties.height;\n break;\n case 'width':\n this.element.style.width = newProperties.width;\n break;\n case 'theme':\n if (newProperties.theme) {\n this.updateTheme();\n this.upperContext.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n this.upperContext.fillStyle = this.themeColl[this.theme]['secondaryColor'];\n }\n break;\n }\n }\n };\n ImageEditor.prototype.destroy = function () {\n var classList = [];\n this.element.removeAttribute('tabindex');\n if (this.cssClass) {\n classList = classList.concat(this.cssClass.split(' '));\n }\n removeClass([this.element], classList);\n if (!this.element.getAttribute('class')) {\n this.element.removeAttribute('class');\n }\n this.destroySubComponents();\n this.unwireEvent();\n _super.prototype.destroy.call(this);\n this.element.innerHTML = '';\n this.trigger('destroyed');\n };\n ImageEditor.prototype.initialize = function () {\n this.createToolbar();\n this.createCanvas();\n this.wireEvent();\n this.updateContext(this.lowerContext);\n this.updateContext(this.upperContext);\n this.pannStart = { startX: 0, startY: 0, width: 0, height: 0 };\n this.pannEnd = { startX: 0, startY: 0, width: 0, height: 0 };\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n if (this.element) {\n createSpinner({\n target: this.element\n });\n }\n };\n /**\n *\n * This Method will add events to component (element, event, method, current reference)\n *\n * @returns {void}.\n */\n ImageEditor.prototype.wireEvent = function () {\n EventHandler.add(document, 'keydown', this.keyDownEventHandler, this);\n EventHandler.add(document, 'keypress', this.keyUpEventHandler, this);\n EventHandler.add(this.upperCanvas, 'mousedown', this.mouseDownEventHandler, this);\n EventHandler.add(this.upperCanvas, 'mousemove', this.mouseMoveEventHandler, this);\n EventHandler.add(this.upperCanvas, 'mouseup', this.mouseUpEventHandler, this);\n EventHandler.add(document, 'mouseup', this.mouseUpEventHandler, this);\n EventHandler.add(this.lowerCanvas, 'mousedown', this.canvasMouseDownHandler, this);\n EventHandler.add(this.lowerCanvas, 'mousemove', this.canvasMouseMoveHandler, this);\n EventHandler.add(this.lowerCanvas, 'mouseup', this.canvasMouseUpHandler, this);\n EventHandler.add(document, 'mouseup', this.canvasMouseUpHandler, this);\n EventHandler.add(this.upperCanvas, 'touchstart', this.touchStartHandler, this);\n EventHandler.add(this.lowerCanvas, 'touchstart', this.touchStartHandler, this);\n EventHandler.add(this.upperCanvas, 'dblclick', this.findTextPoint, this);\n EventHandler.add(this.textBox, 'mousedown', this.findTextPoint, this);\n window.addEventListener('resize', this.windowResizeHandler.bind(this));\n if ((!Browser.isIos && Browser.info.name !== 'safari')) {\n screen.orientation.addEventListener('change', this.screenOrientation.bind(this));\n }\n };\n /**\n *\n * This Method will remove events from component\n *\n * @returns {void}.\n */\n ImageEditor.prototype.unwireEvent = function () {\n EventHandler.remove(document, 'keydown', this.keyDownEventHandler);\n EventHandler.remove(document, 'keypress', this.keyUpEventHandler);\n EventHandler.remove(this.upperCanvas, 'mousedown', this.mouseDownEventHandler);\n EventHandler.remove(this.upperCanvas, 'mousemove', this.mouseMoveEventHandler);\n EventHandler.remove(this.upperCanvas, 'mouseup', this.mouseUpEventHandler);\n EventHandler.remove(document, 'mouseup', this.mouseUpEventHandler);\n EventHandler.remove(this.lowerCanvas, 'mousedown', this.canvasMouseDownHandler);\n EventHandler.remove(this.lowerCanvas, 'mousemove', this.canvasMouseMoveHandler);\n EventHandler.remove(this.lowerCanvas, 'mouseup', this.canvasMouseUpHandler);\n EventHandler.remove(document, 'mouseup', this.canvasMouseUpHandler);\n };\n ImageEditor.prototype.destroySubComponents = function () {\n var inputElement = this.element.querySelectorAll('input.e-control');\n var divElement = this.element.querySelectorAll('div.e-control:not(.e-handle)');\n var btnElement = this.element.querySelectorAll('button.e-control');\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-color-picker')) {\n getComponent(inputElement[i], 'color-picker').destroy();\n detach(select('input#' + inputElement[i].id, this.element));\n }\n }\n for (var i = 0, len = btnElement.length; i < len; i++) {\n if (btnElement[i].classList.contains('e-dropdown-btn')) {\n getComponent(btnElement[i], 'dropdown-btn').destroy();\n detach(select('button#' + btnElement[i].id, this.element));\n }\n else if (btnElement[i].classList.contains('e-btn')) {\n getComponent(btnElement[i], 'btn').destroy();\n detach(select('button#' + btnElement[i].id, this.element));\n }\n }\n };\n ImageEditor.prototype.updateTheme = function () {\n if (this.theme !== '') {\n this.theme = this.toPascalCase(this.theme);\n }\n };\n ImageEditor.prototype.toPascalCase = function (str) {\n var strArr = str.toLowerCase().split('-');\n for (var i = 0; i < strArr.length; i++) {\n strArr[i] = strArr[i].charAt(0).toUpperCase() + strArr[i].slice(1);\n }\n return strArr.join('');\n };\n ImageEditor.prototype.createCanvas = function () {\n var height = this.toolbarHeight;\n this.element.style.width = this.width;\n this.element.style.height = this.height;\n var canvasWrapper = this.element.appendChild(this.createElement('div', { id: this.element.id + '_canvasWrapper',\n className: 'e-canvas-wrapper', attrs: { style: 'height:' + (this.element.offsetHeight - height) + 'px; width:' +\n (this.element.offsetWidth)\n + 'px; position: relative; overflow: hidden; margin: 0 auto;' }\n }));\n this.lowerCanvas = canvasWrapper.appendChild(this.createElement('canvas', {\n id: this.element.id + '_lowerCanvas', attrs: { name: 'canvasImage' }\n }));\n this.upperCanvas = canvasWrapper.appendChild(this.createElement('canvas', {\n id: this.element.id + '_upperCanvas', attrs: { name: 'canvasImage' }\n }));\n this.inMemoryCanvas = this.createElement('canvas', {\n id: this.element.id + '_inMemoryCanvas', attrs: { name: 'canvasImage' }\n });\n this.textBox = canvasWrapper.appendChild(this.createElement('textarea', {\n id: this.element.id + '_textBox', attrs: { name: 'textBox' }\n }));\n this.textBox.setAttribute('spellcheck', 'false');\n this.upperCanvas.width = this.lowerCanvas.width = this.inMemoryCanvas.width = this.element.offsetWidth;\n this.upperCanvas.height = this.lowerCanvas.height = this.inMemoryCanvas.height = (this.element.offsetHeight - this.toolbarHeight);\n this.upperCanvas.style.position = this.lowerCanvas.style.position = this.textBox.style.position = 'absolute';\n this.textBox.style.backgroundColor = 'transparent';\n this.textBox.style.display = 'none';\n this.textBox.style.resize = 'none';\n this.lowerContext = this.lowerCanvas.getContext('2d');\n this.baseImg = this.createElement('img', {\n id: this.element.id + '_orgImg', attrs: { name: 'Image', crossorigin: 'anonymous' }\n });\n this.upperCanvas.style.cursor = 'default';\n this.upperCanvas.style.display = 'none';\n this.upperContext = this.upperCanvas.getContext('2d');\n this.inMemoryContext = this.inMemoryCanvas.getContext('2d');\n };\n ImageEditor.prototype.createToolbar = function () {\n var _this = this;\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n this.element.appendChild(this.createElement('div', {\n id: this.element.id + '_toolbarArea', className: 'e-toolbar-area'\n }));\n if (this.toolbarTemplate) {\n this.toolbarTemplateFn();\n }\n else {\n var toolbarItems = { cssClass: 'e-image-upload', align: 'Left', type: 'Input', template: new Uploader({}) };\n if (isNullOrUndefined(this.defToolbarItems)) {\n this.defToolbarItems = [];\n }\n this.defToolbarItems.push(toolbarItems);\n var toolbarArea = document.getElementById(this.element.id + '_toolbarArea');\n var toolbar_1 = this.createElement('div', {\n id: this.element.id + '_toolbar'\n });\n toolbarArea.appendChild(toolbar_1);\n var uploadItems = [\n {\n cssClass: 'e-image-upload',\n align: 'Left', type: 'Input',\n template: new Uploader({\n selected: function () {\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 &&\n (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar'))) {\n getComponent(document.getElementById(_this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, Browser.isDevice);\n _this.createBottomToolbar();\n }\n else {\n if (_this.defToolbarItems.length > 0 &&\n (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, false);\n }\n }\n })\n }\n ];\n new Toolbar({ items: uploadItems, width: '100%',\n created: function () {\n _this.trigger('toolbarCreated', { toolbarType: 'main' });\n },\n clicked: this.defToolbarClicked.bind(this) }, '#' + this.element.id + '_toolbar');\n this.createLeftToolbarControls();\n }\n if (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar'))) {\n this.toolbarHeight = document.getElementById(this.element.id + '_toolbar').clientHeight;\n }\n }\n else {\n this.toolbarHeight = 0;\n }\n };\n ImageEditor.prototype.createBottomToolbar = function () {\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n this.element.appendChild(this.createElement('div', {\n id: this.element.id + '_bottomToolbarArea', className: 'e-bottom-toolbar'\n }));\n if (!this.toolbarTemplate) {\n document.getElementById(this.element.id + '_canvasWrapper').style.height = (this.element.offsetHeight\n - this.toolbarHeight * 2) - 3 + 'px';\n var toolbarArea = document.getElementById(this.element.id + '_bottomToolbarArea');\n var toolbarElem = this.createElement('div', {\n id: this.element.id + '_bottomToolbar'\n });\n toolbarArea.appendChild(toolbarElem);\n }\n this.initBottomToolbar();\n }\n };\n ImageEditor.prototype.initBottomToolbar = function () {\n var _this = this;\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n if (this.toolbarTemplate) {\n this.toolbarTemplateFn();\n }\n else {\n var items = this.getMainToolbarItem();\n new Toolbar({ items: items, width: '100%',\n created: function () {\n _this.renderAnnotationBtn();\n _this.renderCropBtn();\n _this.renderTransformBtn();\n _this.trigger('toolbarCreated', { toolbarType: 'main' });\n },\n clicked: this.defToolbarClicked.bind(this)\n }, '#' + this.element.id + '_bottomToolbar');\n if (this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(this.element.id + '_bottomToolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_2 = getComponent(this.element.id + '_bottomToolbar', 'toolbar');\n toolbar_2.refreshOverflow();\n }\n }\n }\n };\n ImageEditor.prototype.toolbarTemplateFn = function () {\n var template;\n var templateID = this.element.id + '_toolbar';\n var toolbarArea = this.element.querySelector('#' + this.element.id + '_toolbarArea');\n if (this.toolbarTemplate) {\n this.toolbarFn = this.templateParser(this.toolbarTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.toolbarFn({ type: 'toolbar' }, this, 'Template', templateID)[0];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.toolbarFn({ type: 'toolbar' }, this, 'Template', templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n }\n else {\n template = this.toolbarFn({ type: 'toolbar' }, this, 'Template', templateID)[0];\n }\n toolbarArea.appendChild(template);\n this.renderReactTemplates();\n }\n };\n ImageEditor.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (error) {\n return templateCompiler(template);\n }\n }\n return undefined;\n };\n ImageEditor.prototype.getLeftToolbarItem = function (isOkBtn) {\n var toolbarItems = [];\n if (!isOkBtn) {\n toolbarItems.push({ cssClass: 'e-image-upload', align: 'Left', type: 'Input', template: new Uploader({}) });\n toolbarItems.push({ visible: false, cssClass: 'e-image-position e-btn e-flat', tooltipText: 'Position', align: 'Left' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('ZoomOut') > -1)) {\n toolbarItems.push({ id: this.element.id + '_zoomOut', prefixIcon: 'e-icons e-zoom-out', cssClass: 'top-icon e-dec-zoom',\n tooltipText: this.l10n.getConstant('ZoomOut'), align: 'Left' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('ZoomIn') > -1)) {\n toolbarItems.push({ id: this.element.id + '_zoomIn', prefixIcon: 'e-icons e-zoom-in', cssClass: 'top-icon e-inc-zoom',\n tooltipText: this.l10n.getConstant('ZoomIn'), align: 'Left' });\n }\n var tempToolbarItems = this.processToolbar('left');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getRightToolbarItem = function (isOkBtn) {\n var toolbarItems = [];\n if (isOkBtn) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Reset') > -1)) {\n toolbarItems.push({ id: this.element.id + '_reset', prefixIcon: 'e-icons e-btn-reset', cssClass: 'top-icon e-img-reset',\n tooltipText: this.l10n.getConstant('Reset'), align: 'Right' });\n }\n if (!isOkBtn) {\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Save') > -1)) {\n toolbarItems.push({ id: this.element.id + '_save', prefixIcon: 'e-icons e-btn-save', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Save'), align: 'Right', template: '<button id=\"' + this.element.id + '_saveBtn\"></button>' });\n }\n }\n var tempToolbarItems = this.processToolbar('right');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getMainToolbarItem = function (isApplyOption) {\n var toolbarItems = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Crop') > -1)) {\n toolbarItems.push({ id: this.element.id + '_crop', tooltipText: this.l10n.getConstant('Crop'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_cropBtn\"></button>'\n });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Annotate') > -1)) {\n toolbarItems.push({ id: this.element.id + '_annotation', tooltipText: this.l10n.getConstant('Annotation'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_annotationBtn\"></button>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Transform') > -1)) {\n toolbarItems.push({ id: this.element.id + '_transform', tooltipText: this.l10n.getConstant('Transform'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_transformBtn\"></button>'\n });\n }\n var tempToolbarItems = this.processToolbar('center');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (isApplyOption) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getZoomToolbarItem = function () {\n var toolbarItems = [];\n if (this.factor > 1) {\n toolbarItems = [\n { id: this.element.id + '_pan', prefixIcon: 'e-icons e-pan', cssClass: 'top-icon e-img-pan',\n tooltipText: this.l10n.getConstant('Pan'), align: 'Left' }\n ];\n }\n return toolbarItems;\n };\n ImageEditor.prototype.processToolbar = function (position) {\n var toolbarItems = [];\n if (this.toolbar) {\n for (var i = 0, len = this.toolbar.length; i < len; i++) {\n if (typeof (this.toolbar[i]) === 'object') {\n if (isNullOrUndefined(this.toolbar[i].align)) {\n if (position === 'left') {\n toolbarItems.push(this.toolbar[i]);\n }\n }\n else if (this.toolbar[i].align.toLowerCase() === position) {\n toolbarItems.push(this.toolbar[i]);\n }\n }\n }\n }\n return toolbarItems;\n };\n ImageEditor.prototype.processSubToolbar = function (items) {\n var toolbarItems = [];\n if (items) {\n for (var i = 0, len = items.length; i < len; i++) {\n if (typeof (items[i]) === 'object') {\n items[i].align = 'Center';\n toolbarItems.push(items[i]);\n }\n }\n }\n return toolbarItems;\n };\n ImageEditor.prototype.isToolbar = function () {\n return (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)\n || !isNullOrUndefined(this.toolbarTemplate));\n };\n ImageEditor.prototype.initToolbarItem = function (isApplyOption, isDevice, isOkBtn) {\n var _this = this;\n if (this.isToolbar()) {\n var leftItem = this.getLeftToolbarItem(isOkBtn);\n var rightItem = this.getRightToolbarItem(isOkBtn);\n var mainItem = this.getMainToolbarItem(isApplyOption);\n var zoomItem = this.getZoomToolbarItem();\n if (isDevice) {\n this.defToolbarItems = leftItem.concat(zoomItem, rightItem);\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n if (!isDevice) {\n _this.renderAnnotationBtn();\n _this.renderCropBtn();\n _this.renderTransformBtn();\n }\n _this.renderSaveBtn();\n _this.trigger('toolbarCreated', { toolbarType: 'main' });\n }\n }, '#' + this.element.id + '_toolbar');\n this.createLeftToolbarControls();\n var zoomIn = document.querySelector('#' + this.element.id + '_zoomIn');\n if (!isNullOrUndefined(zoomIn) && this.factor >= 8) {\n zoomIn.classList.add('e-disabled');\n }\n else if (!isNullOrUndefined(zoomIn)) {\n zoomIn.classList.remove('e-disabled');\n }\n var zoomOut = document.querySelector('#' + this.element.id + '_zoomOut');\n if (!isNullOrUndefined(zoomOut) && this.factor === 1) {\n zoomOut.classList.add('e-disabled');\n }\n else if (!isNullOrUndefined(zoomOut)) {\n zoomOut.classList.remove('e-disabled');\n }\n var pan = document.querySelector('#' + this.element.id + '_pan');\n if (!isNullOrUndefined(pan) && this.factor === 1) {\n pan.style.display = 'none';\n }\n else if (!isNullOrUndefined(pan)) {\n pan.style.display = 'block';\n }\n if (this.isToolbar() && (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_3 = getComponent(this.element.id + '_toolbar', 'toolbar');\n toolbar_3.refreshOverflow();\n }\n }\n };\n ImageEditor.prototype.createLeftToolbarControls = function () {\n if (this.defToolbarItems !== undefined && this.defToolbarItems.length > 0 &&\n (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n var uploadDiv = document.getElementById(this.element.id + '_toolbar')\n .querySelector('.e-image-upload');\n if (uploadDiv) {\n var uploadElem = uploadDiv.getElementsByTagName('input')[0];\n var uploadBtnElem = uploadDiv.getElementsByTagName('button')[0];\n uploadBtnElem.className = 'e-tbar-btn e-tbtn-txt e-btn top-icon';\n uploadBtnElem.innerHTML = '';\n uploadBtnElem.appendChild(this.createElement('span', {\n className: 'e-btn-icon e-icons e-upload-icon e-icon-left'\n }));\n uploadElem.onchange = this.fileSelect.bind(this, uploadElem);\n }\n }\n };\n ImageEditor.prototype.renderAnnotationBtn = function () {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var items = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Pen') > -1)) {\n items.push({ text: this.l10n.getConstant('Pen'), id: 'pen', iconCss: 'e-icons e-free-pen' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Line') > -1)) {\n items.push({ text: this.l10n.getConstant('Line'), id: 'line', iconCss: 'e-icons e-line' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Rectangle') > -1)) {\n items.push({ text: this.l10n.getConstant('Rectangle'), id: 'rectangle', iconCss: 'e-icons e-rectangle' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Ellipse') > -1)) {\n items.push({ text: this.l10n.getConstant('Ellipse'), id: 'ellipse', iconCss: 'e-icons e-circle' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Text') > -1)) {\n items.push({ text: this.l10n.getConstant('Text'), id: 'text', iconCss: 'e-icons e-add-text' });\n }\n var drpDownBtn = new DropDownButton({ items: items, iconCss: 'e-icons e-annotation',\n cssClass: 'e-image-popup',\n open: function (args) {\n if (_this.togglePan) {\n _this.cancelPan();\n }\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n },\n select: function (args) {\n var isCropSelection = false;\n var splitWords;\n if (_this.activeObj.shape !== undefined) {\n splitWords = _this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && _this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n _this.currObjType.isCustomCrop = false;\n if (isCropSelection || _this.togglePan) {\n _this.refreshActiveObj();\n _this.upperContext.clearRect(0, 0, _this.upperCanvas.width, _this.upperCanvas.height);\n _this.refreshToolbar('main');\n }\n switch (args.item.id) {\n case 'pen':\n proxy.currentToolbar = 'pen';\n _this.freeHandDraw(true);\n break;\n case 'text':\n proxy.currentToolbar = 'text';\n _this.drawShapeText();\n break;\n default:\n proxy.currentToolbar = 'shapes';\n proxy.drawShape((args.item.id).toLowerCase());\n break;\n }\n _this.updateToolbarItems(_this.calcRatio());\n }\n });\n // Render initialized DropDownButton.\n drpDownBtn.appendTo('#' + this.element.id + '_annotationBtn');\n };\n ImageEditor.prototype.renderCropBtn = function () {\n var _this = this;\n var items = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('CustomSelection') > -1)) {\n items.push({ text: this.l10n.getConstant('Custom'), id: 'custom', iconCss: 'e-icons e-custom' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('CircleSelection') > -1)) {\n items.push({ text: this.l10n.getConstant('Circle'), id: 'ellipse', iconCss: 'e-icons e-circle' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('SquareSelection') > -1)) {\n items.push({ text: this.l10n.getConstant('Square'), id: 'square', iconCss: 'e-icons e-square' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('RatioSelection') > -1)) {\n items.push({ text: '3:2', id: '3:2', iconCss: 'e-icons e-custom-a' });\n items.push({ text: '4:3', id: '4:3', iconCss: 'e-icons e-custom-b' });\n items.push({ text: '5:4', id: '5:4', iconCss: 'e-icons e-custom-c' });\n items.push({ text: '7:5', id: '7:5', iconCss: 'e-icons e-custom-d' });\n items.push({ text: '16:9', id: '16:9', iconCss: 'e-icons e-custom-e' });\n }\n var drpDownBtn = new DropDownButton({\n open: function (args) {\n if (_this.togglePan) {\n _this.cancelPan();\n }\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n },\n items: items, select: this.cropSelect.bind(this),\n iconCss: 'e-icons e-select', cssClass: 'e-image-popup'\n });\n drpDownBtn.appendTo('#' + this.element.id + '_cropBtn');\n };\n ImageEditor.prototype.renderTransformBtn = function () {\n var _this = this;\n var items = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('RotateLeft') > -1)) {\n items.push({ text: this.l10n.getConstant('RotateLeft'), id: 'rotateleft', iconCss: 'e-icons e-anti-clock-wise' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('RotateRight') > -1)) {\n items.push({ text: this.l10n.getConstant('RotateRight'), id: 'rotateright', iconCss: 'e-icons e-clock-wise' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('FlipHorizontal') > -1)) {\n items.push({ text: this.l10n.getConstant('HorizontalFlip'), id: 'horizontalflip', iconCss: 'e-icons e-horizontal-flip' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('FlipVertical') > -1)) {\n items.push({ text: this.l10n.getConstant('VerticalFlip'), id: 'verticalflip', iconCss: 'e-icons e-vertical-flip' });\n }\n var drpDownBtn = new DropDownButton({\n open: function (args) {\n if (_this.togglePan) {\n _this.cancelPan();\n }\n if (Browser.isDevice) {\n var ht = args.element.parentElement.offsetHeight;\n args.element.parentElement.style.display = 'none';\n args.element.parentElement.style.top = drpDownBtn.element.getBoundingClientRect().top -\n ht + 'px';\n args.element.parentElement.style.display = 'block';\n }\n },\n items: items, select: this.transformSelect.bind(this),\n iconCss: 'e-icons e-transform', cssClass: 'e-image-popup'\n });\n drpDownBtn.appendTo('#' + this.element.id + '_transformBtn');\n };\n ImageEditor.prototype.renderSaveBtn = function () {\n var _this = this;\n var imageEditorObj = getInstance(document.getElementById(this.element.id), ImageEditor_1);\n var saveItems = [\n { text: 'JPEG', id: 'jpeg' },\n { text: 'PNG', id: 'png' },\n { text: 'SVG', id: 'svg' }\n ];\n var ddbElem = document.getElementById(this.element.id + '_saveBtn');\n if (ddbElem) {\n // Initialize the DropDownButton component.\n var saveDrpDownBtn = new DropDownButton({ items: saveItems, cssClass: 'e-caret-hide e-image-popup', iconCss: 'e-icons e-save',\n select: function (args) {\n if (_this.togglePan) {\n _this.cancelPan();\n }\n imageEditorObj.export(args.item.text);\n }\n });\n saveDrpDownBtn.appendTo('#' + this.element.id + '_saveBtn');\n }\n };\n ImageEditor.prototype.cropSelect = function (args) {\n var text = args.item.text;\n this.select(text);\n this.refreshToolbar('main', true, true);\n };\n ImageEditor.prototype.transformSelect = function (args) {\n var text = args.item.id;\n switch (text) {\n case 'rotateleft':\n this.rotate(-90);\n break;\n case 'rotateright':\n this.rotate(90);\n break;\n case 'horizontalflip':\n this.flip('Horizontal');\n break;\n case 'verticalflip':\n this.flip('Vertical');\n break;\n }\n };\n ImageEditor.prototype.getShapesToolbarItem = function (items) {\n var toolbarItems = [];\n if (items.indexOf('fillColor') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', id: this.element.id + '_fillcolor',\n cssClass: 'top-icon e-fill', tooltipText: this.l10n.getConstant('FillColor'), align: 'Center', type: 'Input',\n template: '<button id=\"' + this.element.id + '_fillColorBtn\"></button>' });\n }\n if (items.indexOf('strokeColor') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', id: this.element.id + '_strokecolor',\n cssClass: 'top-icon e-stroke', tooltipText: this.l10n.getConstant('StrokeColor'), align: 'Center', type: 'Input',\n template: '<button id=\"' + this.element.id + '_borderColorBtn\"></button>' });\n }\n if (items.indexOf('strokeWidth') > -1) {\n toolbarItems.push({ id: this.element.id + '_strokeWidth', cssClass: 'top-icon e-size', tooltipText: 'Stroke Width', align: 'Center',\n type: 'Input', template: '<button id=\"' + this.element.id + '_borderWidthBtn\"></button>' });\n }\n var tempToolbarItems = this.processSubToolbar(items);\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.initShapesToolbarItem = function (items) {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getShapesToolbarItem(items);\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.createShapeColor(items);\n _this.createShapeBtn(items);\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n _this.trigger('toolbarCreated', { toolbarType: 'shapes' });\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n };\n ImageEditor.prototype.createShapeColor = function (items) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (items.indexOf('fillColor') > -1) {\n this.element.querySelector('.e-template.e-fill').appendChild(this.createElement('input', {\n id: this.element.id + '_shape_fill'\n }));\n var fillColor = new ColorPicker({\n modeSwitcher: false, noColor: true, value: '',\n showButtons: false, mode: 'Palette', cssClass: 'e-shape-fill-color',\n change: function (args) {\n proxy.activeObj.strokeSettings.fillColor = args.currentValue.hex;\n proxy.strokeSettings.fillColor = proxy.activeObj.strokeSettings.fillColor;\n proxy.redrawShape(_this.activeObj);\n if (args.currentValue.rgba === '') {\n fillDDB_1.element.children[0].classList.add('e-nocolor-item');\n }\n else {\n fillDDB_1.element.children[0].classList.remove('e-nocolor-item');\n fillDDB_1.element.children[0].style.backgroundColor = args.currentValue.rgba;\n }\n fillDDB_1.toggle();\n }\n }, '#' + this.element.id + '_shape_fill');\n var fillDDB_1 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fillDDB_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-shape-fill-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_fillColorBtn');\n fillColor.inline = true;\n this.element.querySelector('.e-fill.e-template .e-dropdownbtn-preview').classList.add('e-nocolor-item');\n }\n if (items.indexOf('strokeColor') > -1) {\n this.element.querySelector('.e-template.e-stroke').appendChild(this.createElement('input', {\n id: this.element.id + '_shape_stroke'\n }));\n var strokeColor = new ColorPicker({\n modeSwitcher: false, noColor: false, value: '#fff',\n showButtons: false, mode: 'Palette', cssClass: 'e-shape-stroke-color',\n change: function (args) {\n proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n proxy.strokeSettings.strokeColor = proxy.activeObj.strokeSettings.strokeColor;\n if (!proxy.togglePen) {\n proxy.redrawShape(_this.activeObj);\n }\n strokeDDB_1.element.children[0].style.backgroundColor = args.currentValue.rgba;\n strokeDDB_1.toggle();\n }\n }, '#' + this.element.id + '_shape_stroke');\n var strokeDDB_1 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = strokeDDB_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-shape-stroke-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_borderColorBtn');\n strokeColor.inline = true;\n this.element.querySelector('.e-stroke.e-template .e-dropdownbtn-preview').style.background = '#fff';\n }\n };\n ImageEditor.prototype.createShapeBtn = function (items) {\n var _this = this;\n var strokeWidthItems = [\n { id: '1', text: this.l10n.getConstant('XSmall') },\n { id: '2', text: this.l10n.getConstant('Small') },\n { id: '3', text: this.l10n.getConstant('Medium') },\n { id: '4', text: this.l10n.getConstant('Large') },\n { id: '5', text: this.l10n.getConstant('XLarge') }\n ];\n var ratio = this.calcRatio();\n if (items.indexOf('strokeWidth') > -1) {\n var strokeWidthBtn = document.getElementById(this.element.id + '_borderWidthBtn');\n var spanElem_1 = document.createElement('span');\n spanElem_1.innerHTML = this.l10n.getConstant('Small');\n spanElem_1.className = 'e-shape-stroke-width';\n strokeWidthBtn.appendChild(spanElem_1);\n // Initialize the DropDownButton component.\n var drpDownBtn_1 = new DropDownButton({ items: strokeWidthItems,\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var activeBtn = spanElem_1.innerHTML;\n if (activeBtn !== '') {\n args.element.querySelector('[aria-label = ' + '\"' + activeBtn + '\"' + ']').classList.add('e-selected-btn');\n }\n },\n select: function (args) {\n spanElem_1.textContent = args.item.text;\n _this.activeObj.strokeSettings.strokeWidth = parseInt(args.item.id, 10);\n if (_this.lowerCanvas.width > _this.lowerCanvas.height) {\n _this.activeObj.strokeSettings.strokeWidth *= ((ratio.width + ratio.height) / _this.factor);\n }\n else {\n _this.activeObj.strokeSettings.strokeWidth *= ((ratio.height + ratio.width) / _this.factor);\n }\n _this.strokeSettings.strokeWidth = _this.activeObj.strokeSettings.strokeWidth;\n _this.redrawShape(_this.activeObj);\n if (Browser.isDevice) {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_4 = getComponent(_this.element.id + '_bottomToolbar', 'toolbar');\n toolbar_4.refreshOverflow();\n }\n }\n else {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_5 = getComponent(_this.element.id + '_toolbar', 'toolbar');\n toolbar_5.refreshOverflow();\n }\n }\n }\n });\n // Render initialized DropDownButton.\n drpDownBtn_1.appendTo('#' + this.element.id + '_borderWidthBtn');\n }\n };\n ImageEditor.prototype.getTextToolbarItem = function (items) {\n var toolbarItems = [];\n if (items.indexOf('fontFamily') > -1) {\n toolbarItems.push({ id: this.element.id + '_fontFamily', cssClass: 'top-icon e-img-font-family',\n tooltipText: this.l10n.getConstant('FontFamily'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_fontFamilyBtn\"></button>' });\n }\n if (items.indexOf('fontStyle') > -1) {\n toolbarItems.push({ id: this.element.id + '_fontStyle', cssClass: 'top-icon e-img-font-style',\n tooltipText: this.l10n.getConstant('FontStyle'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_fontStyleBtn\"></button>' });\n }\n if (items.indexOf('fontSize') > -1) {\n toolbarItems.push({ id: this.element.id + '_fontSize', cssClass: 'top-icon e-img-font-size',\n tooltipText: this.l10n.getConstant('FontSize'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_fontSizeBtn\"></button>' });\n }\n if (items.indexOf('fontColor') > -1) {\n toolbarItems.push({ cssClass: 'top-icon e-text-font-color', id: this.element.id + '_text_strokecolor',\n tooltipText: this.l10n.getConstant('FontColor'), align: 'Center',\n type: 'Input', template: '<button id=\"' + this.element.id + '_fontColorBtn\"></button>' });\n }\n var tempToolbarItems = this.processSubToolbar(items);\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getFontFamilyItems = function () {\n if (Browser.isDevice) {\n return [{ id: 'arial', text: 'ABC' }, { id: 'calibri', text: 'ABC' }, { id: 'georgia', text: 'ABC' },\n { id: 'roboto', text: 'ABC' }, { id: 'tahoma', text: 'ABC' }];\n }\n return [{ id: 'arial', text: 'Arial' }, { id: 'calibri', text: 'Calibri' }, { id: 'georgia', text: 'Georgia' },\n { id: 'roboto', text: 'Roboto' }, { id: 'tahoma', text: 'Tahoma' }];\n };\n ImageEditor.prototype.getFontSizeItems = function () {\n if (Browser.isDevice) {\n return [{ id: 'default', text: this.l10n.getConstant('ABC') }, { id: 'bold', text: this.l10n.getConstant('ABC') },\n { id: 'italic', text: this.l10n.getConstant('ABC') }, { id: 'bolditalic', text: this.l10n.getConstant('ABC') }];\n }\n return [{ id: 'default', text: this.l10n.getConstant('Default') }, { id: 'bold', text: this.l10n.getConstant('Bold') },\n { id: 'italic', text: this.l10n.getConstant('Italic') }, { id: 'bolditalic', text: this.l10n.getConstant('BoldItalic') }];\n };\n ImageEditor.prototype.initTextToolbarItem = function (items) {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getTextToolbarItem(items);\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.createTextColor(items);\n _this.createTextBtn(items);\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n _this.trigger('toolbarCreated', { toolbarType: 'text' });\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n };\n ImageEditor.prototype.createTextColor = function (items) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (items.indexOf('fontColor') > -1) {\n this.element.querySelector('.e-template.e-text-font-color').appendChild(this.createElement('input', {\n id: this.element.id + '_text_font'\n }));\n var fontColor = new ColorPicker({\n modeSwitcher: false, value: '#fff',\n showButtons: false, mode: 'Palette', cssClass: 'e-text-fontt-color',\n change: function (args) {\n if (proxy.textBox.style.display === 'none') {\n proxy.strokeSettings.strokeColor = proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n if (!proxy.togglePen) {\n proxy.redrawShape(_this.activeObj);\n }\n }\n else if (proxy.textBox.style.display === 'block') {\n proxy.textBox.style.color = args.currentValue.hex;\n }\n else if (!proxy.togglePen) {\n proxy.redrawShape(_this.activeObj);\n }\n strokeDDB_2.element.children[0].style.backgroundColor = args.currentValue.rgba;\n strokeDDB_2.toggle();\n }\n }, '#' + this.element.id + '_text_font');\n var strokeDDB_2 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = strokeDDB_2.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-text-fontt-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_fontColorBtn');\n fontColor.inline = true;\n this.element.querySelector('.e-text-font-color.e-template .e-dropdownbtn-preview').style.background\n = '#fff';\n }\n };\n ImageEditor.prototype.createTextBtn = function (items) {\n var _this = this;\n var ratio = this.calcRatio();\n if (items.indexOf('fontFamily') > -1) {\n var fontNameBtn = document.getElementById(this.element.id + '_fontFamilyBtn');\n var spanElem_2 = document.createElement('span');\n if (Browser.isDevice) {\n spanElem_2.innerHTML = 'ABC';\n spanElem_2.setAttribute('style', 'font-family: arial');\n }\n else {\n spanElem_2.innerHTML = 'Arial';\n }\n spanElem_2.className = 'e-text-font-family';\n fontNameBtn.appendChild(spanElem_2);\n var fontFamilyBtn_1 = new DropDownButton({ items: this.getFontFamilyItems(),\n cssClass: 'e-font-family',\n createPopupOnClick: true,\n beforeItemRender: function (args) {\n args.element.setAttribute('style', 'font-family:' + args.element.id);\n },\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fontFamilyBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var fontFamily;\n if (_this.textBox.style.display === 'block') {\n fontFamily = _this.textBox.style.fontFamily;\n }\n else {\n fontFamily = _this.activeObj.textSettings.fontFamily;\n }\n args.element.querySelector('[id *= ' + '\"' + fontFamily.toLowerCase()\n + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n spanElem_2.textContent = args.item.text;\n if (Browser.isDevice) {\n spanElem_2.setAttribute('style', 'font-family:' + args.item.id);\n }\n if (_this.textBox.style.display === 'block') {\n var temp = _this.activeObj.textSettings.fontFamily;\n _this.activeObj.textSettings.fontFamily = _this.toPascalCase(args.item.id);\n _this.updateFontStyles();\n var width = _this.upperContext.measureText(_this.activeObj.keyHistory).width +\n _this.activeObj.textSettings.fontSize * 0.5;\n _this.textBox.style.width = Browser.isDevice ? width + 'px' : (width * ((ratio.width + ratio.height) / 2)) + 'px';\n _this.textBox.style.fontFamily = _this.toPascalCase(args.item.id);\n _this.activeObj.textSettings.fontFamily = temp;\n _this.updateFontStyles();\n }\n else {\n _this.textSettings.fontFamily = _this.activeObj.textSettings.fontFamily = _this.toPascalCase(args.item.id);\n _this.redrawText(ratio);\n _this.redrawShape(_this.activeObj);\n }\n }\n });\n fontFamilyBtn_1.appendTo('#' + this.element.id + '_fontFamilyBtn');\n }\n if (items.indexOf('fontStyle') > -1) {\n var fontStyleBtnElem = document.getElementById(this.element.id + '_fontStyleBtn');\n var span1Elem_1 = document.createElement('span');\n if (Browser.isDevice) {\n span1Elem_1.innerHTML = this.l10n.getConstant('ABC');\n }\n else {\n span1Elem_1.innerHTML = this.l10n.getConstant('Default');\n }\n span1Elem_1.className = 'e-text-font-style';\n fontStyleBtnElem.appendChild(span1Elem_1);\n var fontStyleBtn_1 = new DropDownButton({ items: this.getFontSizeItems(),\n cssClass: 'e-font-style',\n createPopupOnClick: true,\n beforeItemRender: function (args) {\n if (Browser.isDevice) {\n if (args.element.id === 'bold') {\n args.element.setAttribute('style', 'font-weight: bold');\n }\n else if (args.element.id === 'italic') {\n args.element.setAttribute('style', 'font-style: italic');\n }\n else if (args.element.id === 'bolditalic') {\n args.element.setAttribute('style', 'font-style: italic;font-weight: bold');\n }\n }\n },\n open: function (args) {\n var fontStyle = 'default';\n if (_this.textBox.style.display === 'block') {\n if (_this.textBox.style.fontWeight === 'bold') {\n fontStyle = 'bold';\n }\n if (_this.textBox.style.fontStyle === 'italic') {\n fontStyle = fontStyle.replace('default', '');\n fontStyle += 'italic';\n }\n }\n else {\n if (_this.activeObj.textSettings.bold) {\n fontStyle = 'bold';\n }\n if (_this.activeObj.textSettings.italic) {\n fontStyle = fontStyle.replace('default', '');\n fontStyle += 'italic';\n }\n }\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fontStyleBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n args.element.querySelector('[id *= ' + '\"' + fontStyle + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n if (Browser.isDevice) {\n if (args.item.id === 'bold') {\n span1Elem_1.setAttribute('style', 'font-weight: bold');\n }\n else if (args.item.id === 'italic') {\n span1Elem_1.setAttribute('style', 'font-style: italic');\n }\n else if (args.item.id === 'bolditalic') {\n span1Elem_1.setAttribute('style', 'font-style: italic;font-weight: bold');\n }\n _this.applyFontStyle(args.item.id, ratio);\n }\n else {\n span1Elem_1.textContent = args.item.text;\n _this.applyFontStyle(args.item.id, ratio);\n }\n }\n });\n fontStyleBtn_1.appendTo('#' + this.element.id + '_fontStyleBtn');\n }\n if (items.indexOf('fontSize') > -1) {\n var fontSizeBtnElem = document.getElementById(this.element.id + '_fontSizeBtn');\n var fontSizeSpanElem_1 = document.createElement('span');\n var fontSizes = this.getFontSizes();\n fontSizeSpanElem_1.innerHTML = fontSizes[0].text;\n fontSizeSpanElem_1.className = 'e-text-font-size';\n fontSizeBtnElem.appendChild(fontSizeSpanElem_1);\n var fontSizeBtn_1 = new DropDownButton({\n cssClass: 'e-font-size',\n items: fontSizes,\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fontSizeBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var activeBtn = fontSizeSpanElem_1.innerHTML;\n args.element.querySelector('[aria-label *= ' + '\"' + activeBtn + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n fontSizeSpanElem_1.textContent = args.item.text;\n if (_this.textBox.style.display === 'block') {\n var temp = _this.activeObj.textSettings.fontSize;\n _this.activeObj.textSettings.fontSize = parseInt(_this.fontSizeColl[(parseInt(args.item.text, 10) - 1)].text, 10);\n var textStyle = '';\n if (_this.textBox.style.fontWeight === 'bold') {\n textStyle = 'bold ';\n }\n if (_this.textBox.style.fontStyle === 'italic') {\n textStyle = 'italic ';\n }\n if (_this.textBox.style.fontWeight === 'bold' && _this.textBox.style.fontStyle === 'italic') {\n textStyle = 'italic bold ';\n }\n _this.upperContext.font = textStyle + _this.activeObj.textSettings.fontSize + 'px' + ' ' + _this.textBox.style.fontFamily;\n var rows = _this.textBox.value.split('\\n');\n var text = _this.getMaxText(true);\n var width = _this.upperContext.measureText(text).width +\n _this.activeObj.textSettings.fontSize * 0.5;\n _this.textBox.style.width = width + 'px';\n _this.textBox.style.height = rows.length * (_this.activeObj.textSettings.fontSize + _this.activeObj.textSettings.fontSize * 0.25) + 'px';\n _this.activeObj.textSettings.fontSize = temp;\n _this.upperContext.font = _this.activeObj.textSettings.fontSize + 'px' + ' ' + _this.activeObj.textSettings.fontFamily;\n _this.textBox.style.fontSize = parseInt(_this.fontSizeColl[(parseInt(args.item.text, 10) - 1)].text, 10) + 'px';\n if (_this.textBox.style.fontFamily === 'georgia') {\n _this.textBox.style.width = parseFloat(_this.textBox.style.width) + parseFloat(_this.textBox.style.fontSize) + 'px';\n }\n }\n else {\n _this.textSettings.fontSize = _this.activeObj.textSettings.fontSize = parseInt(_this.fontSizeColl[(parseInt(args.item.text, 10) - 1)].text, 10);\n _this.upperContext.font = _this.activeObj.textSettings.fontSize + 'px' + ' ' + _this.activeObj.textSettings.fontFamily;\n var rows = _this.activeObj.keyHistory.split('\\n');\n var text = _this.getMaxText();\n var width = _this.upperContext.measureText(text).width +\n _this.activeObj.textSettings.fontSize * 0.5;\n var height = rows.length * (_this.activeObj.textSettings.fontSize + _this.activeObj.textSettings.fontSize * 0.25);\n _this.setTextSelection(width, height);\n _this.updateActiveObject(ratio, _this.activeObj.activePoint, _this.activeObj);\n _this.redrawShape(_this.activeObj);\n _this.redrawText(ratio);\n }\n }\n });\n fontSizeBtn_1.appendTo('#' + this.element.id + '_fontSizeBtn');\n }\n };\n ImageEditor.prototype.getFontSizes = function () {\n var items = [];\n this.fontSizeColl = [];\n var fontSize;\n if (this.degree === 0 || this.degree % 180 === 0) {\n fontSize = this.lowerCanvas.width / 20;\n }\n else {\n fontSize = this.lowerCanvas.height / 20;\n }\n for (var i = 1; i <= 10; i++) {\n this.fontSizeColl.push({ text: (i * (Math.round(fontSize / 2))).toString() });\n items.push({ text: (i.toString()) });\n }\n return items;\n };\n ImageEditor.prototype.getTextAreaWidth = function (item) {\n var tempBold = this.activeObj.textSettings.bold;\n var tempItalic = this.activeObj.textSettings.italic;\n switch (item) {\n case 'default':\n this.activeObj.textSettings.bold = false;\n this.activeObj.textSettings.italic = false;\n break;\n case 'bold':\n this.activeObj.textSettings.bold = true;\n this.activeObj.textSettings.italic = false;\n break;\n case 'italic':\n this.activeObj.textSettings.bold = false;\n this.activeObj.textSettings.italic = true;\n break;\n case 'bolditalic':\n this.activeObj.textSettings.bold = true;\n this.activeObj.textSettings.italic = true;\n break;\n }\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.activeObj.keyHistory).width +\n this.activeObj.textSettings.fontSize * 0.5;\n this.activeObj.textSettings.bold = tempBold;\n this.activeObj.textSettings.italic = tempItalic;\n return width;\n };\n ImageEditor.prototype.applyFontStyle = function (item, ratio) {\n switch (item) {\n case 'default':\n if (this.textBox.style.display === 'block') {\n var width = this.getTextAreaWidth(item);\n this.textBox.style.width = Browser.isDevice ? width + 'px' : (width * ((ratio.width + ratio.height) / 2)) + 'px';\n this.textBox.style.fontWeight = 'normal';\n this.textBox.style.fontStyle = 'normal';\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = false;\n this.textSettings.italic = this.activeObj.textSettings.italic = false;\n this.redrawText(ratio);\n }\n break;\n case 'bold':\n if (this.textBox.style.display === 'block') {\n var width = this.getTextAreaWidth(item);\n this.textBox.style.width = Browser.isDevice ? width + 'px' : (width * ((ratio.width + ratio.height) / 2)) + 'px';\n this.textBox.style.fontWeight = 'bold';\n this.textBox.style.fontStyle = 'normal';\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = true;\n this.textSettings.italic = this.activeObj.textSettings.italic = false;\n this.redrawText(ratio);\n }\n break;\n case 'italic':\n if (this.textBox.style.display === 'block') {\n var width = this.getTextAreaWidth(item);\n this.textBox.style.width = Browser.isDevice ? width + 'px' : (width * ((ratio.width + ratio.height) / 2)) + 'px';\n this.textBox.style.fontWeight = 'normal';\n this.textBox.style.fontStyle = 'italic';\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = false;\n this.textSettings.italic = this.activeObj.textSettings.italic = true;\n this.redrawText(ratio);\n }\n break;\n case 'bolditalic':\n if (this.textBox.style.display === 'block') {\n var width = this.getTextAreaWidth(item);\n this.textBox.style.width = (width / ratio.width) + 'px';\n this.textBox.style.fontWeight = 'bold';\n this.textBox.style.fontStyle = 'italic';\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = true;\n this.textSettings.italic = this.activeObj.textSettings.italic = true;\n this.redrawText(ratio);\n }\n break;\n }\n };\n ImageEditor.prototype.initZoomToolbarItem = function () {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var zoomItem = this.getZoomToolbarItem();\n this.defToolbarItems = leftItem.concat(zoomItem, rightItem);\n new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.renderSaveBtn();\n _this.trigger('toolbarCreated', { toolbarType: 'zoom' });\n }\n }, '#' + this.element.id + '_toolbar');\n this.createLeftToolbarControls();\n if (this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_6 = getComponent(this.element.id + '_toolbar', 'toolbar');\n toolbar_6.refreshOverflow();\n }\n };\n ImageEditor.prototype.defToolbarClicked = function (args) {\n var ratio = this.calcRatio();\n var zoomIn;\n var type = args.item.id.replace(this.element.id + '_', '').toLowerCase();\n var imageEditorObj = getInstance(document.getElementById(this.element.id), ImageEditor_1);\n var isCropSelection = false;\n var panBtn;\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if (!this.disabled) {\n switch (type) {\n case 'zoomin':\n if (this.togglePen) {\n this.currObjType.isZoomed = true;\n this.freeHandDraw(false);\n }\n imageEditorObj.zoom(.1);\n if (!this.togglePan) {\n this.callMainToolbar(false, true);\n }\n if (this.factor > 0.95 && this.factor < 1.05) {\n this.dragCanvas = this.togglePan = false;\n this.callMainToolbar(false, true);\n }\n if (isNullOrUndefined(this.activeObj.activePoint) || this.activeObj.activePoint.width === 0) {\n this.refreshToolbar('main');\n }\n else {\n this.refreshToolbar('main', true, true);\n }\n panBtn = this.element.querySelector('.e-img-pan .e-btn');\n if (!isNullOrUndefined(panBtn) && this.togglePan) {\n panBtn.classList.add('e-selected-btn');\n }\n else if (!isNullOrUndefined(panBtn)) {\n panBtn.classList.remove('e-selected-btn');\n }\n break;\n case 'zoomout':\n if (this.togglePen) {\n this.currObjType.isZoomed = true;\n this.freeHandDraw(false);\n }\n imageEditorObj.zoom(-.1);\n if (!this.togglePan) {\n this.callMainToolbar(false, true);\n }\n if (this.factor > 0.95 && this.factor < 1.05) {\n this.dragCanvas = this.togglePan = false;\n this.callMainToolbar(false, true);\n }\n if (isNullOrUndefined(this.activeObj.activePoint) || this.activeObj.activePoint.width === 0) {\n this.refreshToolbar('main');\n }\n else {\n this.refreshToolbar('main', true, true);\n }\n panBtn = this.element.querySelector('.e-img-pan .e-btn');\n if (!isNullOrUndefined(panBtn) && this.togglePan) {\n panBtn.classList.add('e-selected-btn');\n }\n else if (!isNullOrUndefined(panBtn)) {\n panBtn.classList.remove('e-selected-btn');\n }\n break;\n case 'pan':\n this.currObjType.isCustomCrop = false;\n if (isCropSelection) {\n this.currObjType.isCustomCrop = false;\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.refreshToolbar('main');\n }\n if (this.togglePan) {\n this.cancelPan();\n }\n else {\n panBtn = this.element.querySelector('.e-img-pan .e-btn');\n panBtn.classList.add('e-selected-btn');\n imageEditorObj.pan(true);\n }\n zoomIn = document.querySelector('#' + this.element.id + '_zoomIn');\n if (!isNullOrUndefined(zoomIn) && this.factor >= 8) {\n zoomIn.classList.add('e-disabled');\n }\n else if (!isNullOrUndefined(zoomIn)) {\n zoomIn.classList.remove('e-disabled');\n }\n break;\n case 'cancel':\n if (this.textBox.style.display === 'block') {\n this.textBox.style.display = 'none';\n this.textBox.value = '';\n this.textBox.style.transform = '';\n this.activeObj.strokeSettings = this.tempStrokeSettings;\n this.activeObj.textSettings = this.tempTextSettings;\n }\n this.cancelItems();\n break;\n case 'ok':\n if (isCropSelection) {\n this.crop();\n }\n else if (this.togglePen) {\n this.freeHandDraw(false);\n }\n else if (this.textBox.style.display === 'block') {\n this.redrawActObj();\n }\n else {\n this.applyActObj();\n }\n this.callMainToolbar(false);\n break;\n case 'reset':\n imageEditorObj.reset();\n break;\n }\n }\n this.trigger('toolbarItemClicked', args);\n };\n ImageEditor.prototype.cancelPan = function () {\n this.applyActObj();\n var panBtn = this.element.querySelector('.e-img-pan .e-btn');\n panBtn.classList.remove('e-selected-btn');\n this.pan(false);\n };\n ImageEditor.prototype.callMainToolbar = function (isApplyBtn, isZooming) {\n if (this.factor === 1) {\n this.refreshToolbar('main', isApplyBtn, false, isZooming);\n }\n else {\n this.refreshToolbar('main', isApplyBtn, false, isZooming);\n }\n };\n ImageEditor.prototype.cancelItems = function () {\n var ratio = this.calcRatio();\n var isCropSelection = false;\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if (this.togglePen) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.togglePen = false;\n this.upperCanvas.style.cursor = 'default';\n this.penDrawColl = [];\n this.imageEditorPointsColl = [];\n }\n else if (this.activeObj.shape === 'text') {\n this.activeObj.strokeSettings = this.tempStrokeSettings;\n this.activeObj.textSettings = this.tempTextSettings;\n if (this.activeObj.keyHistory === 'Enter Text' && this.activeObj.activePoint.startX === this.textStartPoints.x\n && this.activeObj.activePoint.startY === this.textStartPoints.y) {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.drawShapeText();\n }\n else {\n this.redrawText(ratio);\n this.redrawShape(this.activeObj);\n if (!isCropSelection && this.activeObj.topLeftCircle !== undefined) {\n this.applyActObj();\n }\n this.clearSelection();\n }\n this.tempTextSettings = { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n }\n else if (this.activeObj.shape === 'rectangle' || this.activeObj.shape === 'ellipse' || this.activeObj.shape === 'line') {\n this.activeObj.strokeSettings = this.tempStrokeSettings;\n this.redrawShape(this.activeObj);\n this.applyActObj();\n }\n else {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.isCustomCrop = false;\n this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n this.callMainToolbar();\n };\n ImageEditor.prototype.gradient = function (a, b) {\n return (b.y - a.y) / (b.x - a.x);\n };\n ImageEditor.prototype.applyPenDraw = function () {\n if (this.togglePen && this.factor === 1 && !this.currObjType.isZoomed) {\n this.apply();\n this.penDrawColl = [];\n this.imageEditorPointsColl = [];\n }\n else {\n var tempCanvas = this.lowerCanvas.appendChild(this.createElement('canvas', {\n id: this.element.id + '_tempCanvas', attrs: { name: 'canvasImage' }\n }));\n var tempContext = tempCanvas.getContext('2d');\n tempCanvas.width = this.lowerCanvas.width;\n tempCanvas.height = this.lowerCanvas.height;\n tempContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n for (var i = 0; i < this.penDrawColl.length; i++) {\n tempContext.lineWidth = 2 * this.penDrawColl[i].strokeWidth;\n tempContext.strokeStyle = this.penDrawColl[i].strokeColor;\n var nexP = void 0;\n var preP = void 0;\n var f = 0.3;\n var t = 1;\n tempContext.beginPath();\n tempContext.moveTo(this.penDrawColl[i].points[0].x, this.penDrawColl[i].points[0].y);\n var m = 0;\n var dx1 = 0;\n var dx2 = 0;\n var dy1 = 0;\n var dy2 = 0;\n preP = this.penDrawColl[i].points[0];\n for (var j = 1; j < this.penDrawColl[i].points.length; j++) {\n var curP = this.penDrawColl[i].points[j];\n nexP = this.penDrawColl[i].points[j + 1];\n if (nexP) {\n m = this.gradient(preP, nexP);\n dx2 = (nexP.x - curP.x) * -f;\n dy2 = dx2 * m * t;\n }\n else {\n dx2 = 0;\n dy2 = 0;\n }\n tempContext.bezierCurveTo(preP.x - dx1, preP.y - dy1, curP.x + dx2, curP.y + dy2, curP.x, curP.y);\n dx1 = dx2;\n dy1 = dy2;\n preP = curP;\n if (this.penDrawColl[i].points.length > 2) {\n this.penDrawColl[i].points.shift();\n }\n tempContext.stroke();\n }\n }\n this.penDrawColl = [];\n this.imageEditorPointsColl = [];\n this.togglePen = false;\n var imgData = tempContext.getImageData(0, 0, tempCanvas.width, tempCanvas.height);\n var tempObj = void 0;\n for (var index = 0; index < this.imgDataColl.length; index++) {\n if (this.imgDataColl[index].operation !== 'freehanddraw') {\n tempObj = this.imgDataColl[index];\n break;\n }\n }\n this.imgDataColl.splice(0, 1, { operation: 'freehanddraw', value: imgData });\n this.imgDataColl.splice(1, 1, tempObj);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.inMemoryCanvas.width = imgData.width;\n this.inMemoryCanvas.height = imgData.height;\n this.inMemoryContext.putImageData(imgData, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.currObjType.isZoomed = false;\n }\n };\n ImageEditor.prototype.refreshToolbar = function (type, isApplyBtn, isCropping, isZooming) {\n var args = { toolbarType: type };\n if (document.getElementById(this.element.id + '_toolbar') && this.defToolbarItems.length > 0) {\n getComponent(document.getElementById(this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (document.getElementById(this.element.id + '_bottomToolbar') && this.defToolbarItems.length > 0) {\n if (document.getElementById(this.element.id + '_bottomToolbar').className.indexOf('e-control') > -1) {\n getComponent(document.getElementById(this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n }\n switch (type) {\n case 'main':\n if (Browser.isDevice) {\n if (isCropping) {\n this.initToolbarItem(false, true, true);\n }\n else {\n this.initToolbarItem(false, true);\n }\n }\n else if (!Browser.isDevice || isZooming) {\n this.initToolbarItem(isApplyBtn, Browser.isDevice);\n }\n if (Browser.isDevice) {\n this.initBottomToolbar();\n }\n break;\n case 'shapes':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n if (this.activeObj.shape === 'line') {\n args.toolbarItems = ['strokeColor', 'strokeWidth'];\n }\n else {\n args.toolbarItems = ['fillColor', 'strokeColor', 'strokeWidth'];\n }\n this.trigger('toolbarUpdating', args);\n this.initShapesToolbarItem(args.toolbarItems);\n break;\n case 'text':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n args.toolbarItems = ['fontFamily', 'fontStyle', 'fontSize', 'fontColor'];\n this.trigger('toolbarUpdating', args);\n this.initTextToolbarItem(args.toolbarItems);\n break;\n case 'pen':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n args.toolbarItems = ['strokeColor', 'strokeWidth'];\n this.trigger('toolbarUpdating', args);\n this.initPenToolbarItem(args.toolbarItems);\n break;\n case 'pan':\n this.initZoomToolbarItem();\n break;\n }\n };\n ImageEditor.prototype.getPenToolbarItem = function (items) {\n var toolbarItems = [];\n if (items.indexOf('strokeColor') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', id: this.element.id + '_pen_strokecolor',\n cssClass: 'top-icon e-pen-stroke-color',\n tooltipText: this.l10n.getConstant('StrokeColor'), align: 'Center', type: 'Input',\n template: '<button id=\"' + this.element.id + '_penColorBtn\"></button>' });\n }\n if (items.indexOf('strokeWidth') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', cssClass: 'top-icon e-size',\n tooltipText: this.l10n.getConstant('StrokeWidth'),\n align: 'Center', type: 'Input', template: '<button id=\"' + this.element.id + '_penStrokeWidth\"></button>' });\n }\n var tempToolbarItems = this.processSubToolbar(items);\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.initPenToolbarItem = function (items) {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getPenToolbarItem(items);\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.createPenColor(items);\n _this.createPenBtn(items);\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n _this.trigger('toolbarCreated', { toolbarType: 'pen' });\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n };\n ImageEditor.prototype.createPenColor = function (items) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (items.indexOf('strokeColor') > -1) {\n this.element.querySelector('.e-template.e-pen-stroke-color').appendChild(this.createElement('input', {\n id: this.element.id + '_pen_stroke'\n }));\n var penColor = new ColorPicker({\n modeSwitcher: false, value: '#fff',\n showButtons: false, mode: 'Palette', cssClass: 'e-pen-color',\n change: function (args) {\n proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n if (!proxy.togglePen) {\n proxy.redrawShape(_this.activeObj);\n }\n strokeDDB_3.element.children[0].style.backgroundColor = args.currentValue.rgba;\n strokeDDB_3.toggle();\n }\n }, '#' + this.element.id + '_pen_stroke');\n var strokeDDB_3 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = strokeDDB_3.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-pen-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_penColorBtn');\n penColor.inline = true;\n this.element.querySelector('.e-pen-stroke-color.e-template .e-dropdownbtn-preview').style.background\n = '#fff';\n }\n };\n ImageEditor.prototype.createPenBtn = function (items) {\n var _this = this;\n var ratio = this.calcRatio();\n var strokeWidthItems = [\n { id: '1', text: this.l10n.getConstant('XSmall') },\n { id: '2', text: this.l10n.getConstant('Small') },\n { id: '3', text: this.l10n.getConstant('Medium') },\n { id: '4', text: this.l10n.getConstant('Large') },\n { id: '5', text: this.l10n.getConstant('XLarge') }\n ];\n if (items.indexOf('strokeWidth') > -1) {\n var strokeWidthBtn = document.getElementById(this.element.id + '_penStrokeWidth');\n var spanElem_3 = document.createElement('span');\n spanElem_3.innerHTML = this.l10n.getConstant('Small');\n spanElem_3.className = 'e-pen-stroke-width';\n strokeWidthBtn.appendChild(spanElem_3);\n var drpDownBtn_2 = new DropDownButton({ items: strokeWidthItems,\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn_2.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var activeBtn = spanElem_3.innerHTML;\n args.element.querySelector('[aria-label = ' + '\"' + activeBtn + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n spanElem_3.textContent = args.item.text;\n _this.setPenStroke(args.item.id, ratio);\n if (Browser.isDevice) {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_7 = getComponent(_this.element.id + '_bottomToolbar', 'toolbar');\n toolbar_7.refreshOverflow();\n }\n }\n else {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_8 = getComponent(_this.element.id + '_toolbar', 'toolbar');\n toolbar_8.refreshOverflow();\n }\n }\n }\n });\n // Render initialized DropDownButton.\n drpDownBtn_2.appendTo('#' + this.element.id + '_penStrokeWidth');\n }\n };\n ImageEditor.prototype.setPenStroke = function (args, ratio) {\n switch (parseInt(args, 10)) {\n case 1:\n this.penStrokeWidth = (ratio.width + ratio.height) * 0.4;\n break;\n case 2:\n this.penStrokeWidth = (ratio.width + ratio.height) * 0.8;\n break;\n case 3:\n this.penStrokeWidth = (ratio.width + ratio.height) * 1.2;\n break;\n case 4:\n this.penStrokeWidth = (ratio.width + ratio.height) * 1.6;\n break;\n case 5:\n this.penStrokeWidth = (ratio.width + ratio.height) * 2;\n break;\n }\n };\n ImageEditor.prototype.updateCanvas = function () {\n this.lastX = this.baseImg.width / 2;\n this.lastY = this.baseImg.height / 2;\n var wrapperWidth;\n var canvasWrapper = document.querySelector('#' + this.element.id + '_canvasWrapper');\n if (this.isScreenOriented) {\n wrapperWidth = parseFloat(canvasWrapper.style.width);\n }\n else {\n wrapperWidth = this.element.clientWidth;\n }\n var maxDimension = this.calcMaxDimension(this.baseImg.width, this.baseImg.height);\n var toolbarHeight = 0;\n if (!isNullOrUndefined(this.toolbarTemplate) && !isNullOrUndefined(document.querySelector('.e-toolbar'))) {\n toolbarHeight = document.querySelector('.e-toolbar').clientHeight;\n maxDimension.width -= toolbarHeight;\n maxDimension.height -= toolbarHeight;\n }\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerCanvas.width = this.upperCanvas.width = this.inMemoryCanvas.width = this.baseImg.width;\n this.lowerCanvas.height = this.upperCanvas.height = this.inMemoryCanvas.height = this.baseImg.height;\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.style.left = this.upperCanvas.style.left = (wrapperWidth - maxDimension.width) / 2 + 1 + 'px';\n if (!isNullOrUndefined(this.toolbarTemplate)) {\n this.lowerCanvas.style.left = parseFloat(this.lowerCanvas.style.left) + (toolbarHeight / 2) + 'px';\n }\n if (canvasWrapper) {\n this.lowerCanvas.style.top = this.upperCanvas.style.top = (parseFloat(canvasWrapper.style.height) - maxDimension.height - 1) / 2 + 'px';\n }\n this.lowerContext.drawImage(this.baseImg, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.updateInMemoryCanvas('updateCanvas');\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n if (this.isUndoRedo) {\n if (this.flipState !== '') {\n this.flip(this.flipState);\n }\n }\n if (this.disabled) {\n this.element.setAttribute('class', 'e-disabled');\n }\n this.trigger('fileOpened');\n };\n ImageEditor.prototype.imageOnLoad = function (src) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n proxy.baseImg.src = proxy.baseImgSrc = src;\n this.baseImg.onload = function () {\n _this.lowerContext.drawImage(_this.baseImg, 0, 0, _this.lowerCanvas.width, _this.lowerCanvas.height);\n if (_this.togglePen) {\n // eslint-disable-next-line @typescript-eslint/tslint/config\n _this.lowerCanvas.toBlob(function (blob) {\n showSpinner(proxy.element);\n proxy.baseImg.src = URL.createObjectURL(blob);\n proxy.togglePen = false;\n }, 'image/png');\n _this.inMemoryContext.clearRect(0, 0, _this.inMemoryCanvas.width, _this.inMemoryCanvas.height);\n var imgData = _this.lowerContext.getImageData(0, 0, _this.lowerCanvas.width, _this.lowerCanvas.height);\n _this.inMemoryContext.putImageData(imgData, 0, 0);\n var temp = _this.imgDataColl[0];\n _this.imgDataColl.splice(0, 1, { operation: 'freehanddraw', value: imgData });\n _this.imgDataColl.splice(1, 1, temp);\n }\n else {\n hideSpinner(_this.element);\n _this.element.style.opacity = '1';\n _this.updateCanvas();\n _this.isUndoRedo = false;\n }\n if (Browser.isDevice) {\n if (_this.isToolbar() && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) &&\n (!isNullOrUndefined(getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar')) &&\n (!isNullOrUndefined(getComponent(document.getElementById(_this.element.id + '_bottomToolbar'), 'toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, Browser.isDevice);\n _this.createBottomToolbar();\n }\n else {\n if (_this.isToolbar() && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) &&\n (!isNullOrUndefined(getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, false);\n }\n };\n };\n ImageEditor.prototype.refreshActiveObj = function () {\n this.activeObj = {};\n this.activeObj.activePoint = { startX: 0, startY: 0, endX: 0, endY: 0, width: 0, height: 0 };\n this.activeObj.flipObjColl = [];\n this.activeObj.strokeSettings = this.strokeSettings;\n this.activeObj.textSettings = this.textSettings;\n };\n ImageEditor.prototype.redrawText = function (ratio) {\n if (this.activeObj.textSettings.bold) {\n this.upperContext.font = 'bold ' + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n if (this.activeObj.textSettings.italic) {\n this.upperContext.font = 'bold ' + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n this.upperContext.font = 'italic bold ' + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n if (!this.activeObj.textSettings.bold && !this.activeObj.textSettings.italic) {\n this.upperContext.font = this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n var rows = this.activeObj.keyHistory.split('\\n');\n var text = this.textBox.style.display === 'block' ? this.getMaxText(true) : this.getMaxText();\n var width = this.upperContext.measureText(text).width + this.activeObj.textSettings.fontSize * 0.5;\n var height = rows.length * (this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25);\n this.setTextSelection(width, height);\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n this.redrawShape(this.activeObj);\n };\n ImageEditor.prototype.setTextSelection = function (width, height) {\n var degree = this.degree;\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n for (var i = 0; i < this.activeObj.flipObjColl.length; i++) {\n if (degree === 0) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.endX - width,\n startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (height ? height : 0) };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + (width ? width : 0)),\n endY: this.activeObj.activePoint.endY };\n }\n else {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + (width ? width : 0)),\n endY: this.activeObj.activePoint.startY + (height ? height : 0) };\n }\n }\n else if (degree === 90) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - width,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.endY };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n else {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n }\n else if (degree === 180) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + width),\n endY: this.activeObj.activePoint.endY };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + height;\n this.activeObj.activePoint = { endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY,\n startX: (this.activeObj.activePoint.endX - (width ? width : 0)),\n startY: this.activeObj.activePoint.startY };\n }\n else {\n this.activeObj.activePoint = { endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY,\n startX: (this.activeObj.activePoint.endX - (width ? width : 0)),\n startY: this.activeObj.activePoint.endY - (height ? height : 0) };\n }\n }\n else if (degree === 270) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + height),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - (width ? width : 0),\n endX: this.activeObj.activePoint.endX,\n endY: this.activeObj.activePoint.endY };\n }\n else {\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - (width ? width : 0),\n endX: this.activeObj.activePoint.endX,\n endY: this.activeObj.activePoint.endY };\n }\n }\n }\n if (this.activeObj.flipObjColl.length === 0) {\n if (degree === 0) {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + (width ? width : 0)),\n endY: this.activeObj.activePoint.startY + (height ? height : 0) };\n }\n else if (degree === 90) {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n else if (degree === 180) {\n this.activeObj.activePoint = { endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY,\n startX: (this.activeObj.activePoint.endX - (width ? width : 0)),\n startY: this.activeObj.activePoint.endY - (height ? height : 0) };\n }\n else if (degree === 270) {\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - (width ? width : 0),\n endX: this.activeObj.activePoint.endX,\n endY: this.activeObj.activePoint.endY };\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n if (this.degree === 360 || this.degree === -360) {\n this.degree = 0;\n }\n };\n ImageEditor.prototype.updateUndoRedoColl = function (operation, value, previousObj, currentObj) {\n this.undoRedoColl.push({ operation: operation, value: value, previousObj: previousObj, currentObj: currentObj });\n };\n ImageEditor.prototype.fileSelect = function (inputElement, args) {\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var filesData = args.target.files[0];\n if (this.imgDataColl.length > 0) {\n this.imgDataColl = [];\n this.reset();\n }\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var URL = window.URL;\n var url = URL.createObjectURL(filesData);\n this.imageOnLoad(url.toString());\n inputElement.value = '';\n };\n ImageEditor.prototype.findTextPoint = function (e) {\n if (this.activeObj.shape === 'text') {\n this.textBox.style.transformOrigin = '0 0';\n var degree = void 0;\n var scale = '';\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (this.activeObj.flipObjColl.length > 0) {\n // need to add scale value according to length.\n for (var i = 0; i < this.activeObj.flipObjColl.length; i++) {\n if (degree !== 0 && degree % 90 === 0 && degree !== 180) {\n scale += this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal' ? 'scale(1, -1)' :\n 'scale(-1, 1)';\n }\n else {\n scale += this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal' ? 'scale(-1, 1)' :\n 'scale(1, -1)';\n }\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.textBox.style.transform = 'rotate(' + degree + 'deg)' + scale;\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.textBox.style.transform = 'rotate(' + degree + 'deg)' + scale;\n }\n }\n }\n else {\n this.textBox.style.transform = 'rotate(' + degree + 'deg)';\n }\n this.findTextTarget(e);\n }\n };\n ImageEditor.prototype.getStrokeWidth = function (text) {\n var strokeWidth;\n switch (text) {\n case '1':\n strokeWidth = this.l10n.getConstant('XSmall');\n break;\n case '2':\n strokeWidth = this.l10n.getConstant('Small');\n break;\n case '3':\n strokeWidth = this.l10n.getConstant('Medium');\n break;\n case '4':\n strokeWidth = this.l10n.getConstant('Large');\n break;\n case '5':\n strokeWidth = this.l10n.getConstant('XLarge');\n break;\n }\n return strokeWidth;\n };\n ImageEditor.prototype.updateToolbarItems = function (ratio) {\n var selFillElem = this.element.querySelector('.e-fill.e-template .e-dropdownbtn-preview');\n var selStrokeElem = this.element.querySelector('.e-stroke.e-template .e-dropdownbtn-preview');\n var selTextStrokeElem = this.element.querySelector('.e-text-font-color.e-template .e-dropdownbtn-preview');\n var selPenStrokeElem = this.element.querySelector('.e-pen-stroke-color.e-template .e-dropdownbtn-preview');\n var strokeWidthElem = this.element.querySelector('.e-shape-stroke-width');\n var fontFamilyElem = this.element.querySelector('.e-text-font-family');\n var fontSizeElem = this.element.querySelector('.e-text-font-size');\n var fontStyleElem = this.element.querySelector('.e-text-font-style');\n if (selFillElem) {\n if (this.activeObj.strokeSettings.fillColor === '') {\n selFillElem.classList.add('e-nocolor-item');\n }\n else {\n selFillElem.classList.remove('e-nocolor-item');\n selFillElem.style.background = this.activeObj.strokeSettings.fillColor;\n }\n getComponent(this.element.id + '_shape_fill', 'colorpicker').value\n = this.activeObj.strokeSettings.fillColor + 'ff';\n }\n if (selStrokeElem) {\n selStrokeElem.style.background = this.activeObj.strokeSettings.strokeColor;\n getComponent(this.element.id + '_shape_stroke', 'colorpicker').value\n = this.activeObj.strokeSettings.strokeColor + 'ff';\n }\n if (selTextStrokeElem) {\n selTextStrokeElem.style.background = this.activeObj.strokeSettings.strokeColor;\n getComponent(this.element.id + '_text_font', 'colorpicker').value\n = this.activeObj.strokeSettings.strokeColor + 'ff';\n }\n if (selPenStrokeElem) {\n selPenStrokeElem.style.background = this.activeObj.strokeSettings.strokeColor;\n getComponent(this.element.id + '_pen_stroke', 'colorpicker').value\n = this.activeObj.strokeSettings.strokeColor + 'ff';\n }\n if (fontFamilyElem) {\n if (Browser.isDevice) {\n fontFamilyElem.setAttribute('style', 'font-family:' + this.activeObj.textSettings.fontFamily.toLowerCase());\n }\n else {\n fontFamilyElem.textContent = this.activeObj.textSettings.fontFamily;\n }\n }\n if (fontSizeElem) {\n for (var i = 0; i < this.fontSizeColl.length; i++) {\n if (parseInt(this.fontSizeColl[i].text, 10) >= this.activeObj.textSettings.fontSize) {\n fontSizeElem.textContent = (i + 1).toString();\n break;\n }\n }\n }\n if (fontStyleElem) {\n if (Browser.isDevice) {\n if (!this.activeObj.textSettings.bold && !this.activeObj.textSettings.italic) {\n fontStyleElem.setAttribute('style', '');\n }\n else if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n fontStyleElem.setAttribute('style', 'font-style: italic;font-weight: bold');\n }\n else if (this.activeObj.textSettings.bold) {\n fontStyleElem.setAttribute('style', 'font-weight: bold');\n }\n else {\n fontStyleElem.setAttribute('style', 'font-style: italic');\n }\n }\n else {\n if (!this.activeObj.textSettings.bold && !this.activeObj.textSettings.italic) {\n fontStyleElem.textContent = 'Default';\n }\n else if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n fontStyleElem.textContent = 'Bold Italic';\n }\n else if (this.activeObj.textSettings.bold) {\n fontStyleElem.textContent = 'Bold';\n }\n else {\n fontStyleElem.textContent = 'Italic';\n }\n }\n }\n if (strokeWidthElem) {\n var strokeWidth = Math.round((this.activeObj.strokeSettings.strokeWidth /\n (ratio.width + ratio.height))).toString();\n strokeWidthElem.textContent = this.getStrokeWidth(strokeWidth);\n }\n };\n ImageEditor.prototype.setTimer = function (e) {\n if (!this.isTimer && this.timer > 10) {\n this.findTextPoint(e);\n if (Browser.isDevice) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n }\n };\n ImageEditor.prototype.touchStartHandler = function (e) {\n e.preventDefault();\n this.timer = setTimeout(this.setTimer.bind(this), 1000, e);\n this.mouseDownEventHandler(e);\n EventHandler.add(this.lowerCanvas, 'touchend', this.mouseUpEventHandler, this);\n EventHandler.add(this.lowerCanvas, 'touchmove', this.mouseMoveEventHandler, this); // Unbind mousedown to prevent double triggers from touch devices\n EventHandler.add(this.upperCanvas, 'touchend', this.mouseUpEventHandler, this);\n EventHandler.add(this.upperCanvas, 'touchmove', this.mouseMoveEventHandler, this); // Unbind mousedown to prevent double triggers from touch devices\n };\n ImageEditor.prototype.mouseDownEventHandler = function (e) {\n if (e.type === 'touchstart' && e.currentTarget === this.lowerCanvas && this.imgDataColl.length === 0) {\n return;\n }\n var ratio = this.calcRatio();\n if (this.dragCanvas) {\n this.canvasMouseDownHandler(e);\n }\n else {\n e.preventDefault();\n var x = void 0;\n var y = void 0;\n if (e.type === 'mousedown') {\n x = e.clientX;\n y = e.clientY;\n }\n else {\n this.touchEndPoint.x = x = e.touches[0].clientX;\n this.touchEndPoint.y = y = e.touches[0].clientY;\n }\n this.redrawActObj(x, y);\n if (this.upperCanvas.style.cursor === 'crosshair' || (Browser.isDevice && this.togglePen)) {\n if (this.togglePen) {\n this.canvasRatio = this.calcRatio();\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n if (isNullOrUndefined(this.penStrokeWidth)) {\n this.penStrokeWidth = (ratio.width + ratio.height) * 0.8;\n }\n if (this.activeObj.strokeSettings.strokeWidth === (ratio.width + ratio.height) * 0.4 &&\n this.strokeSettings.strokeWidth === (ratio.width + ratio.height) * 0.4) {\n this.activeObj.strokeSettings.strokeWidth = this.strokeSettings.strokeWidth =\n 2 * ((ratio.width + ratio.height) / this.factor);\n }\n this.minStrokeWidth = this.maxStrokeWidth = this.penStrokeWidth;\n this.velocity = 0.7;\n this.upperContext.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n this.upperContext.fillStyle = this.activeObj.strokeSettings.strokeColor;\n this.mouseDownHandler(e, this.upperCanvas, this.pannStart, this.factor); // To call signature base\n }\n else {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n this.currObjType.isActiveObj = false;\n this.dragElement = '';\n this.dragPoint.startX = this.dragPoint.startY = this.dragPoint.endX = this.dragPoint.endY = 0;\n }\n if ((this.upperCanvas.style.cursor !== 'crosshair' && e.type.toLowerCase() === 'touchstart') ||\n (this.currObjType.isActiveObj && this.upperCanvas.style.cursor !== 'default' && !this.togglePen)) {\n this.findTarget(x, y, e.type);\n }\n else if ((this.currObjType.shape === '' || this.currObjType.isCustomCrop) && !this.togglePen && this.upperCanvas.style.cursor !== 'default') {\n this.setActivePoint(x, y);\n }\n if (!isNullOrUndefined(this.activeObj)) {\n var isCropSelection = false;\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && (this.currObjType.isCustomCrop || this.togglePen)) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if ((this.activeObj.shape === 'rectangle') || (this.activeObj.shape === 'ellipse')\n || (this.activeObj.shape === 'line')) {\n this.refreshToolbar('shapes');\n }\n else if (this.activeObj.shape === 'text') {\n this.refreshToolbar('text');\n }\n else if (!isCropSelection) {\n this.callMainToolbar();\n }\n this.updateToolbarItems(ratio);\n }\n }\n };\n ImageEditor.prototype.mouseMoveEventHandler = function (e) {\n e.preventDefault();\n if (this.textBox.style.display === 'none') {\n this.isTimer = true;\n }\n var x;\n var y;\n if (e.type === 'mousemove') {\n x = e.clientX;\n y = e.clientY;\n }\n else {\n this.touchEndPoint.x = x = e.touches[0].clientX;\n this.touchEndPoint.y = y = e.touches[0].clientY;\n }\n this.canvasMouseMoveHandler(e);\n if (this.currObjType.isActiveObj && (this.activeObj.activePoint !== undefined || this.objColl.length > 0) &&\n !this.dragCanvas || this.activeObj.activePoint !== undefined) {\n if (this.dragElement === '') {\n this.setCursor(x, y);\n this.findTarget(x, y, e.type);\n }\n }\n if (this.currObjType.isDragging) {\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var initialDraw = this.updateActivePoint(x, y);\n this.drawObject('duplicate', null, initialDraw);\n }\n };\n ImageEditor.prototype.mouseUpEventHandler = function (e) {\n e.preventDefault();\n var x;\n var y;\n if (e.type === 'mouseup') {\n x = e.clientX;\n y = e.clientY;\n }\n else {\n x = this.touchEndPoint.x;\n y = this.touchEndPoint.y;\n }\n if (e.type === 'touchend') {\n if (this.textBox.style.display === 'none') {\n this.isTimer = false;\n this.timer = 0;\n }\n }\n var bbox = this.upperCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n y = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n }\n if (e.currentTarget === this.upperCanvas) {\n this.currObjType.shape = this.currObjType.shape.toLowerCase();\n if (!this.togglePen && !this.dragCanvas) {\n this.applyCurrActObj(x, y);\n }\n }\n if (this.togglePen && e.currentTarget === this.upperCanvas) {\n this.penDrawColl.push({ strokeWidth: this.penStrokeWidth, strokeColor: this.activeObj.strokeSettings.strokeColor, points: this.imageEditorPointsColl });\n this.imageEditorPointsColl = [];\n }\n else {\n this.currObjType.shape = '';\n }\n this.dragElement = '';\n this.currObjType.isInitialLine = this.currObjType.isDragging = false;\n this.oldPoint.x = undefined;\n this.oldPoint.y = undefined;\n };\n ImageEditor.prototype.keyDownEventHandler = function (e) {\n var _this = this;\n var shapeChangingArgs = {};\n var beforeSave = { fileName: 'ImageEditor', fileType: 'Png', cancel: false };\n switch (e.key) {\n case (e.ctrlKey && 's'):\n this.trigger('beforeSave', beforeSave, function (observableSaveArgs) {\n if (!beforeSave.cancel) {\n _this.export(observableSaveArgs.fileType, observableSaveArgs.fileName);\n }\n });\n e.preventDefault();\n e.stopImmediatePropagation();\n break;\n case 'Delete':\n shapeChangingArgs = { action: 'delete', previousShapeSettings: this.activeObj, currentShapeSettings: null };\n this.keyHistory = '';\n this.clearSelection();\n this.trigger('shapeChanging', shapeChangingArgs);\n this.refreshToolbar('main');\n break;\n case 'Escape':\n if (this.togglePan) {\n this.refreshToolbar(this.currentToolbar);\n this.pan(false);\n }\n else {\n this.cancelItems();\n }\n break;\n case 'Enter':\n this.crop();\n break;\n default:\n if (Browser.isDevice && this.textBox.style.display === 'block') {\n setTimeout(this.textKeyDown.bind(this), 1, e);\n }\n break;\n }\n };\n ImageEditor.prototype.keyUpEventHandler = function (e) {\n setTimeout(this.textKeyDown.bind(this), 1, e);\n };\n ImageEditor.prototype.canvasMouseDownHandler = function (e) {\n e.preventDefault();\n var ratio = this.calcRatio();\n if (e.type === 'mousedown') {\n this.lastX = e.offsetX || (e.pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.offsetY || (e.pageY - this.lowerCanvas.offsetTop);\n }\n else {\n this.lastX = e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop);\n }\n this.lastX *= ratio.width;\n this.lastY *= ratio.height;\n if (this.dragCanvas || this.factor !== 1) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.dragStart = this.lowerContext.transformedPoint(this.lastX, this.lastY);\n this.dragged = false;\n }\n };\n ImageEditor.prototype.canvasMouseMoveHandler = function (e) {\n if (this.dragCanvas && this.factor > 1) {\n this.lowerCanvas.style.cursor = 'grab';\n }\n else {\n this.dragCanvas = this.togglePan = false;\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'default';\n }\n var ratio = this.calcRatio();\n if (e.type === 'mousemove') {\n this.lastX = e.offsetX || (e.pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.offsetY || (e.pageY - this.lowerCanvas.offsetTop);\n }\n else {\n this.lastX = e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop);\n }\n this.lastX *= ratio.width;\n this.lastY *= ratio.height;\n this.dragged = true;\n if (this.dragStart && this.dragCanvas) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt = this.lowerContext.transformedPoint(this.lastX, this.lastY);\n var transitionArgs = { startPoint: { x: this.dragStart.x, y: this.dragStart.y },\n endPoint: { x: pt.x, y: pt.y } };\n this.trigger('panning', transitionArgs);\n var xDiff = pt.x - this.dragStart.x;\n var yDiff = pt.y - this.dragStart.y;\n var xxDiff = xDiff;\n var yyDiff = yDiff;\n this.lowerContext.translate(xDiff, yDiff);\n this.upperContext.translate(xDiff, yDiff);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt1 = this.lowerContext.transformedPoint(0, 0);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt2 = this.lowerContext.transformedPoint(this.lowerCanvas.width, this.lowerCanvas.height);\n if (xDiff >= 0) {\n if (pt1.x < 1) {\n xDiff = 0;\n }\n }\n else {\n if (pt2.x > this.lowerCanvas.width) {\n xDiff = 0;\n }\n }\n if (yDiff >= 0) {\n if (pt1.y < 1) {\n yDiff = 0;\n }\n }\n else {\n if (pt2.y > this.lowerCanvas.height) {\n yDiff = 0;\n }\n }\n this.lowerContext.translate(-xxDiff, -yyDiff);\n this.upperContext.translate(-xxDiff, -yyDiff);\n this.lowerContext.translate(xDiff, yDiff);\n this.upperContext.translate(xDiff, yDiff);\n this.redraw();\n }\n };\n ImageEditor.prototype.canvasMouseUpHandler = function (e) {\n e.preventDefault();\n this.dragStart = null;\n this.currObjType.isDragging = false;\n };\n ImageEditor.prototype.textKeyDown = function (e) {\n if (String.fromCharCode(e.which) === '\\r') {\n this.textRow += 1;\n }\n this.textBox.setAttribute('rows', this.textRow.toString());\n this.textBox.style.height = 'auto';\n this.textBox.style.height = this.textBox.scrollHeight + 'px';\n this.setTextBoxWidth(e);\n if (Browser.isDevice) {\n this.textBox.style.width = parseFloat(this.textBox.style.width) + this.textBox.style.fontSize + 'px';\n }\n var rows = this.textBox.value.split('\\n');\n this.textRow = rows.length;\n this.textBox.setAttribute('rows', this.textRow.toString());\n };\n ImageEditor.prototype.adjustToScreen = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n this.applyActObj();\n this.refreshActiveObj();\n if (this.imgDataColl.length > 0) {\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n }\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.lowerCanvas.width = this.upperCanvas.width = this.element.offsetWidth;\n this.lowerCanvas.height = this.upperCanvas.height = this.element.offsetHeight;\n var canvasWrapper = document.querySelector('#' + this.element.id + '_canvasWrapper');\n if (!isNullOrUndefined(canvasWrapper)) {\n canvasWrapper.style.width = this.element.offsetWidth + 'px';\n canvasWrapper.style.height = this.element.offsetHeight + 'px';\n if (Browser.isDevice) {\n canvasWrapper.style.height = (parseFloat(canvasWrapper.style.height) - (2 * this.toolbarHeight)) - 3 + 'px';\n }\n else {\n canvasWrapper.style.height = (parseFloat(canvasWrapper.style.height) - this.toolbarHeight) - 3 + 'px';\n }\n }\n this.redrawImg();\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.lowerCanvas.toBlob(function (blob) {\n proxy.baseImg.src = URL.createObjectURL(blob);\n }, 'image/png');\n if (this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_9 = getComponent(proxy.element.id + '_toolbar', 'toolbar');\n toolbar_9.refreshOverflow();\n }\n };\n ImageEditor.prototype.screenOrientation = function () {\n if (Browser.isDevice) {\n this.isScreenOriented = true;\n setTimeout(this.adjustToScreen.bind(this), 100);\n }\n };\n ImageEditor.prototype.windowResizeHandler = function () {\n if (!Browser.isDevice) {\n this.adjustToScreen();\n }\n };\n ImageEditor.prototype.redrawImg = function () {\n var wrapperWidth;\n var canvasWrapper = document.querySelector('#' + this.element.id + '_canvasWrapper');\n if (this.isScreenOriented) {\n wrapperWidth = parseFloat(canvasWrapper.style.width);\n }\n else {\n wrapperWidth = this.element.clientWidth;\n }\n var maxDimension = this.calcMaxDimension(this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.lowerCanvas.width = this.upperCanvas.width = this.inMemoryCanvas.width;\n this.lowerCanvas.height = this.upperCanvas.height = this.inMemoryCanvas.height;\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.style.left = this.upperCanvas.style.left = (wrapperWidth - maxDimension.width) / 2 + 1 + 'px';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = (this.element.offsetHeight - this.toolbarHeight - maxDimension.height) / 2 + 1 + 'px';\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.updateContext = function (ctx) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var xform = new DOMMatrix([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);\n ctx.getTransform = function () {\n return xform;\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var savedTransforms = [];\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var save = ctx.save;\n ctx.save = function () {\n savedTransforms.push(xform.translate(0, 0));\n return save.call(ctx);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var restore = ctx.restore;\n ctx.restore = function () {\n xform = savedTransforms.pop();\n return restore.call(ctx);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var scale = ctx.scale;\n ctx.scale = function (sx, sy) {\n xform = _this.scaleNonUniform(xform, sx, sy);\n proxy.factor = xform.a;\n return scale.call(ctx, sx, sy);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var rotate = ctx.rotate;\n ctx.rotate = function (radians) {\n xform = xform.rotate(radians * 180 / Math.PI);\n return rotate.call(ctx, radians);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var translate = ctx.translate;\n ctx.translate = function (dx, dy) {\n xform = xform.translate(dx, dy);\n return translate.call(ctx, dx, dy);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var transform = ctx.transform;\n ctx.transform = function (a, b, c, d, e, f) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var m2 = new DOMMatrix([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);\n m2.a = a;\n m2.b = b;\n m2.c = c;\n m2.d = d;\n m2.e = e;\n m2.f = f;\n xform = xform.multiply(m2);\n return transform.call(ctx, a, b, c, d, e, f);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var setTransform = ctx.setTransform;\n ctx.setTransform = function (a, b, c, d, e, f) {\n xform.a = a;\n xform.b = b;\n xform.c = c;\n xform.d = d;\n xform.e = e;\n xform.f = f;\n return setTransform.call(ctx, a, b, c, d, e, f);\n };\n var pt = new DOMPoint();\n ctx.transformedPoint = function (x, y) {\n pt.x = x;\n pt.y = y;\n return pt.matrixTransform(xform.inverse());\n };\n };\n ImageEditor.prototype.scaleNonUniform = function (xform, sx, sy) {\n xform.m11 *= sx;\n xform.m12 *= sx;\n xform.m13 *= sx;\n xform.m14 *= sx;\n xform.m21 *= sy;\n xform.m22 *= sy;\n xform.m23 *= sy;\n xform.m24 *= sy;\n return xform;\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.zoomImg = function (clicks) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt = this.lowerContext.transformedPoint(this.lastX, this.lastY);\n var scaleFactor = 1.1;\n var transitionArgs = { zoomPoint: { x: pt.x, y: pt.y }, zoomLevel: clicks };\n this.trigger('zooming', transitionArgs);\n this.lowerContext.translate(pt.x, pt.y);\n this.upperContext.translate(pt.x, pt.y);\n var factor = Math.pow(scaleFactor, clicks);\n this.factor += (factor - 1);\n this.lowerContext.scale(factor, factor);\n this.upperContext.scale(factor, factor);\n this.lowerContext.translate(-pt.x, -pt.y);\n this.upperContext.translate(-pt.x, -pt.y);\n var ratio = this.calcRatio();\n if (!isNullOrUndefined(this.strokeSettings.strokeWidth)) {\n this.strokeSettings.strokeWidth = 2 * (ratio.width + ratio.height) / this.factor;\n }\n if (this.factor > 0.99 && this.factor < 1.01) {\n this.factor = 1;\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n }\n else {\n if (this.factor > 1) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt1 = this.lowerContext.transformedPoint(0, 0);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt2 = this.lowerContext.transformedPoint(this.lowerCanvas.width, this.lowerCanvas.height);\n var xDiff = pt.x;\n var yDiff = pt.y;\n if (pt1.x < 1) {\n xDiff = -xDiff;\n }\n else if (pt2.x > this.lowerCanvas.width) {\n xDiff = pt2.x - this.lowerCanvas.width;\n }\n if (pt1.y < 1) {\n yDiff = -yDiff;\n }\n else if (pt2.y > this.lowerCanvas.height) {\n yDiff = pt2.y - this.lowerCanvas.height;\n }\n if (xDiff !== pt.x || yDiff !== pt.y) {\n if (xDiff === pt.x) {\n xDiff = 0;\n }\n if (yDiff === pt.y) {\n yDiff = 0;\n }\n this.lowerContext.translate(xDiff, yDiff);\n this.upperContext.translate(xDiff, yDiff);\n }\n }\n this.redraw();\n }\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.handleScroll = function (e) {\n var delta = e.wheelDelta ? e.wheelDelta / 40 : e.detail ? -e.detail : 0;\n if (delta) {\n this.zoom(delta);\n }\n return e.preventDefault() && false;\n };\n ImageEditor.prototype.redraw = function () {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var p1 = this.lowerContext.transformedPoint(0, 0);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var p2 = this.lowerContext.transformedPoint(this.lowerCanvas.width, this.lowerCanvas.height);\n this.pannStart.startX = p1.x;\n this.pannStart.startY = p1.y;\n this.pannEnd.startX = this.lowerCanvas.width - p2.x;\n this.pannEnd.startY = this.lowerCanvas.height - p2.y;\n this.lowerContext.clearRect(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y);\n this.upperContext.clearRect(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y);\n this.lowerContext.save();\n this.upperContext.save();\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.restore();\n this.upperContext.restore();\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n };\n ImageEditor.prototype.applyCurrActObj = function (x, y) {\n var isInside = false;\n var ratio = this.calcRatio();\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (isNullOrUndefined(actObj.activePoint)) {\n return;\n }\n if ((x >= Math.floor(actObj.activePoint.startX) && x <= Math.ceil(actObj.activePoint.endX) &&\n y >= Math.floor(actObj.activePoint.startY) && y <= Math.ceil(actObj.activePoint.endY)) ||\n (actObj.shape === 'text')) {\n isInside = true;\n }\n if (!isInside) {\n if (this.activeObj.horTopLine !== undefined && this.activeObj.horTopLine.startX !== 0 && this.activeObj.horTopLine.endX !== 0\n && !this.currObjType.isCustomCrop && this.currObjType.shape !== '') {\n this.objColl.push(extend({}, this.activeObj, {}, true));\n }\n if (this.activeObj.shape === 'text' || (this.currObjType.shape === 'ellipse' || this.currObjType.shape === 'rectangle' ||\n this.currObjType.shape === 'line')) {\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n }\n this.apply('shape');\n }\n }\n };\n ImageEditor.prototype.updateTextFromTextArea = function (ratio) {\n this.activeObj.keyHistory = this.textBox.value;\n this.textBox.style.display = 'none';\n this.textBox.value = '';\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.activeObj.keyHistory).width +\n this.activeObj.textSettings.fontSize * 0.5;\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n var rows = this.activeObj.keyHistory.split('\\n');\n if (rows.length > 1) {\n height *= rows.length;\n var widthColl = [];\n for (var i = 0; i < rows.length; i++) {\n widthColl.push(this.upperContext.measureText(rows[i]).width +\n this.activeObj.textSettings.fontSize * 0.5);\n }\n width = Math.max.apply(Math, widthColl);\n }\n this.setTextSelection(width, height);\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n };\n ImageEditor.prototype.redrawActObj = function (x, y) {\n var ratio = this.calcRatio();\n var splitWords;\n var bbox = this.upperCanvas.getBoundingClientRect();\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.activeObj.horTopLine !== undefined && (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n if (this.textBox.style.display === 'block') {\n this.activeObj.textSettings.fontFamily = this.textBox.style.fontFamily;\n this.activeObj.strokeSettings.strokeColor = this.textBox.style.color;\n if (this.textBox.style.fontWeight === 'bold') {\n this.activeObj.textSettings.bold = true;\n }\n else {\n this.activeObj.textSettings.bold = false;\n }\n if (this.textBox.style.fontStyle === 'italic') {\n this.activeObj.textSettings.italic = true;\n }\n else {\n this.activeObj.textSettings.italic = false;\n }\n this.activeObj.textSettings.fontSize = (parseFloat(this.textBox.style.fontSize) * ((ratio.width + ratio.height) / 2)) / this.factor;\n if (x && y) {\n x -= bbox.left;\n y -= bbox.top;\n if ((x !== this.activeObj.activePoint.startX / ratio.width) && (y !== this.activeObj.activePoint.startY /\n ratio.height)) {\n this.updateTextFromTextArea(ratio);\n this.applyActObj();\n }\n }\n else {\n this.updateTextFromTextArea(ratio);\n this.apply(this.activeObj.shape, this.activeObj);\n this.objColl.push(this.activeObj);\n this.refreshActiveObj();\n this.textBox.style.transform = '';\n this.refreshToolbar('main');\n }\n }\n else {\n this.applyActObj();\n }\n }\n };\n ImageEditor.prototype.setTextBoxPos = function (actObj, degree, flip, x, y, ratio) {\n var point = { x: x, y: y };\n if (degree === 0) {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left) -\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) - actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n else if (degree === 90) {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n else if (degree === 180) {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n }\n else if (degree === 270) {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left) -\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) - actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n }\n return point;\n };\n ImageEditor.prototype.setTextBoxPoints = function (actObj, degree, flip, x, y, ratio) {\n var point = { x: x, y: y };\n if (degree === 0) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left +\n actObj.activePoint.width / ratio.width);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n }\n else if (degree === 90) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n }\n else if (degree === 180) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left)\n + actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n }\n else if (degree === 270) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n }\n return point;\n };\n ImageEditor.prototype.findTextTarget = function (e) {\n var x;\n var y;\n if (e.type === 'dblclick') {\n x = e.clientX;\n y = e.clientY;\n }\n else if (e.type === 'touchstart') {\n this.touchEndPoint.x = x = e.touches[0].clientX;\n this.touchEndPoint.y = y = e.touches[0].clientY;\n }\n var bbox = this.upperCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n var degree;\n var flip = '';\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (this.activeObj.shapeFlip === this.currFlipState) {\n flip = '';\n }\n else {\n flip = this.currFlipState;\n }\n var temp;\n if (this.textBox.style.display === 'block') {\n x -= bbox.left;\n y -= bbox.top;\n }\n else {\n temp = extend({}, this.activeObj, {}, true);\n for (var i = 0; i < this.objColl.length; i++) {\n if (JSON.stringify(this.activeObj) === JSON.stringify(this.objColl[i])) {\n this.objColl.splice(i, 1);\n }\n }\n this.lowerContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n this.activeObj = temp;\n this.updateFontStyles();\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n y = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n }\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (x >= (actObj.activePoint.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.activePoint.endX + actObj.topLeftCircle.radius) &&\n y >= (actObj.activePoint.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.activePoint.endY + actObj.topLeftCircle.radius)) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n if (actObj.flipObjColl.length === 4) {\n actObj.flipObjColl = [];\n flip = '';\n }\n if (flip === '' && actObj.flipObjColl.length > 1) {\n flip = actObj.flipObjColl[actObj.flipObjColl.length - 1];\n }\n if (actObj.flipObjColl.length <= 1) {\n var points = this.setTextBoxPos(actObj, degree, flip, x, y, ratio);\n x = points.x;\n y = points.y;\n }\n else {\n var points = this.setTextBoxPoints(actObj, degree, flip, x, y, ratio);\n x = points.x;\n y = points.y;\n }\n this.textBox.style.display = 'block';\n this.textBox.style.left = x + 'px';\n this.textBox.style.top = y + 'px';\n this.textBox.style.fontFamily = actObj.textSettings.fontFamily;\n this.textBox.style.fontSize = actObj.textSettings.fontSize / ((ratio.width + ratio.height) / 2) * this.factor + 'px';\n this.textBox.style.color = actObj.strokeSettings.strokeColor;\n this.textBox.style.fontWeight = actObj.textSettings.bold ? 'bold' : 'normal';\n this.textBox.style.fontStyle = actObj.textSettings.italic ? 'italic' : 'normal';\n this.textBox.style.border = '2px solid ' + this.themeColl[this.theme]['primaryColor'];\n this.textBox.value = actObj.keyHistory;\n this.textBox.style.overflow = 'hidden';\n this.textBox.style.height = 'auto';\n if (degree % 90 === 0 && degree % 180 !== 0 && degree !== 0) {\n if (this.factor === 1) {\n this.textBox.style.width = (actObj.activePoint.height / ratio.height) + 'px';\n this.textBox.style.height = (actObj.activePoint.width / ratio.width) + 'px';\n }\n else {\n this.textBox.style.width = actObj.activePoint.height + 'px';\n this.textBox.style.height = actObj.activePoint.width + 'px';\n }\n }\n else {\n if (this.factor === 1) {\n this.textBox.style.width = (actObj.activePoint.width / ratio.width) + 'px';\n this.textBox.style.height = (actObj.activePoint.height / ratio.height) + 'px';\n }\n else {\n this.textBox.style.width = actObj.activePoint.width + 'px';\n this.textBox.style.height = actObj.activePoint.height + 'px';\n }\n }\n this.setTextBoxWidth();\n this.setTextBoxHeight();\n }\n else {\n this.applyActObj();\n }\n }\n };\n ImageEditor.prototype.setTextBoxHeight = function () {\n var ratio = this.calcRatio();\n var textBoxTop;\n var degree;\n var flip = '';\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (actObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - actObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (actObj.shapeFlip === this.currFlipState) {\n flip = '';\n }\n else {\n flip = this.currFlipState;\n }\n if (degree === 0) {\n if (flip.toLowerCase() === 'vertical') {\n this.textBox.style.maxHeight = (parseFloat(this.lowerCanvas.style.maxHeight) - (parseFloat(this.lowerCanvas.style.maxHeight)\n - parseFloat(this.textBox.style.top))) + 'px';\n }\n else {\n textBoxTop = parseFloat(this.textBox.style.top) - parseFloat(this.lowerCanvas.style.top);\n this.textBox.style.maxHeight = (parseFloat(this.lowerCanvas.style.maxHeight) - textBoxTop) + 'px';\n }\n }\n else if (degree === 90) {\n if (flip.toLowerCase() === 'horizontal') {\n this.textBox.style.maxHeight = (parseFloat(this.lowerCanvas.style.maxWidth) - (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left))) + 'px';\n }\n else {\n this.textBox.style.maxHeight = (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left)) + 'px';\n }\n }\n else if (degree === 180) {\n if (flip.toLowerCase() === 'vertical') {\n textBoxTop = parseFloat(this.textBox.style.top) - parseFloat(this.lowerCanvas.style.top);\n this.textBox.style.maxHeight = (parseFloat(this.lowerCanvas.style.maxHeight) - textBoxTop) + 'px';\n }\n else {\n this.textBox.style.maxHeight = (parseFloat(this.textBox.style.top)\n - parseFloat(this.lowerCanvas.style.top)) + 'px';\n }\n }\n else if (degree === 270) {\n if (flip.toLowerCase() === 'horizontal') {\n this.textBox.style.maxHeight = (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left)) + 'px';\n }\n else {\n this.textBox.style.maxHeight = parseFloat(this.lowerCanvas.style.maxWidth) - (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left)) + 'px';\n }\n }\n this.textBox.style.maxHeight = ((parseFloat(this.textBox.style.maxHeight) - parseFloat(this.textBox.style.fontSize) * 0.5)) + 'px';\n };\n ImageEditor.prototype.setTextBoxWidth = function (e) {\n var ratio = this.calcRatio();\n var text = this.getMaxText(true);\n if (this.textBox.style.display === 'block') {\n this.updateFontStyles(true);\n }\n else {\n this.updateFontStyles();\n }\n var textBoxWidth = (this.upperContext.measureText(text).width + (parseFloat(this.textBox.style.fontSize) / 2));\n var letterWidth = e ? this.upperContext.measureText(String.fromCharCode(e.which)).width : 0;\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n var degree;\n var flip = '';\n if (actObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - actObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (actObj.shapeFlip === this.currFlipState) {\n flip = '';\n }\n else {\n flip = this.currFlipState;\n }\n if ((!isNullOrUndefined(e) && parseFloat(this.textBox.style.width) < (textBoxWidth + letterWidth)) || isNullOrUndefined(e)) {\n if (degree === 0) {\n if (flip.toLowerCase() === 'horizontal') {\n if ((parseFloat(this.textBox.style.left) - parseFloat(this.lowerCanvas.style.left)) - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((parseFloat(this.lowerCanvas.style.maxWidth) - (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left))) > (textBoxWidth + letterWidth)) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n }\n else if (degree === 90) {\n if (flip.toLowerCase() === 'vertical') {\n if ((parseFloat(this.textBox.style.top) - parseFloat(this.lowerCanvas.style.top)) - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((parseFloat(this.lowerCanvas.style.maxHeight) - (parseFloat(this.textBox.style.top)\n - parseFloat(this.lowerCanvas.style.top))) > (textBoxWidth + letterWidth)) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n }\n else if (degree === 180) {\n if (flip.toLowerCase() === 'horizontal') {\n if ((parseFloat(this.lowerCanvas.style.maxWidth) - (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left))) > (textBoxWidth + letterWidth)) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((parseFloat(this.textBox.style.left) - parseFloat(this.lowerCanvas.style.left)) - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n }\n else if (degree === 270) {\n if (flip.toLowerCase() === 'vertical') {\n if ((parseFloat(this.lowerCanvas.style.maxHeight) - (parseFloat(this.textBox.style.top)\n - parseFloat(this.lowerCanvas.style.top))) > (textBoxWidth + letterWidth)) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((parseFloat(this.textBox.style.top) - parseFloat(this.lowerCanvas.style.top)) - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n }\n }\n };\n ImageEditor.prototype.setActivePoint = function (startX, startY) {\n if (isNullOrUndefined(this.activeObj.activePoint)) {\n return;\n }\n if (this.currObjType.isText) {\n var textWidth = startX ? startX : 0;\n var textHeight = startY ? startY : this.activeObj.textSettings.fontSize;\n if (this.activeObj.textSettings.fontSize === undefined) {\n this.activeObj.textSettings.fontSize = (Math.abs(this.baseImg.width - this.baseImg.height)) * 0.1;\n }\n this.setTextSelection(textWidth, textHeight);\n this.mouseDownPoint.x = this.activeObj.activePoint.endX;\n this.mouseDownPoint.y = this.activeObj.activePoint.endY;\n if (this.activeObj.horTopLine !== undefined) {\n this.activeObj.activePoint = extend({}, this.activeObj.activePoint, {}, true);\n }\n this.drawObject('duplicate');\n }\n else if (startX && startY) {\n this.activeObj.activePoint.startX = this.mouseDownPoint.x = startX;\n this.activeObj.activePoint.startY = this.mouseDownPoint.y = startY;\n this.currObjType.isDragging = true;\n }\n else {\n var selectInfo = this.activeObj;\n this.activeObj.activePoint = { startX: selectInfo.horTopLine.startX, startY: selectInfo.horTopLine.startY,\n endX: selectInfo.horTopLine.endX, endY: selectInfo.horTopLine.endY };\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.updateActivePoint = function (x, y) {\n var initialDraw = false;\n var bbox = this.lowerCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n if (this.dragElement !== '') {\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = ((x - bbox.left) * ratio.width) / this.factor + this.pannStart.startX;\n y = ((y - bbox.top) * ratio.height) / this.factor + this.pannStart.startY;\n }\n }\n var maxDimension = this.calcMaxDimension(this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n var shapeResizingArgs = { action: 'resize', previousShapeSettings: this.activeObj };\n var shapeMovingArgs = { action: 'move', previousShapeSettings: this.activeObj };\n switch (this.dragElement.toLowerCase()) {\n case 'nw-resize':\n this.updateNWPoints(x, y, maxDimension);\n break;\n case 'n-resize':\n this.updateNPoints(x, y);\n break;\n case 'ne-resize':\n this.updateNEPoints(x, y, maxDimension);\n break;\n case 'w-resize':\n this.updateWPoints(x, y);\n break;\n case 'e-resize':\n this.updateEPoints(x, y);\n break;\n case 'sw-resize':\n this.updateSWPoints(x, y, maxDimension);\n break;\n case 's-resize':\n this.updateSPoints(x, y);\n break;\n case 'se-resize':\n this.updateSEPoints(x, y, maxDimension);\n break;\n default:\n if (this.dragPoint.startX) {\n var width = (this.dragPoint.endX - this.previousPoint.x);\n var height = (this.dragPoint.endY - this.previousPoint.y);\n if (this.factor !== 1) {\n width = (width * ratio.width) / this.factor;\n height = (height * ratio.height) / this.factor;\n }\n this.activeObj.activePoint.startX += width;\n this.activeObj.activePoint.endX += width;\n this.activeObj.activePoint.startY += height;\n this.activeObj.activePoint.endY += height;\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n if (this.activeObj.shape !== 'text' && !this.allowDrag) {\n if (this.factor > 1 && (this.activeObj.activePoint.startX < this.pannStart.startX ||\n this.activeObj.activePoint.endX > endPoint.x) && (this.activeObj.activePoint.startY < this.pannStart.startY ||\n this.activeObj.activePoint.endY > endPoint.y)) {\n this.activeObj.activePoint.startX -= width;\n this.activeObj.activePoint.endX -= width;\n this.activeObj.activePoint.startY -= height;\n this.activeObj.activePoint.endY -= height;\n }\n else if (this.factor > 1 && (this.activeObj.activePoint.startX < this.pannStart.startX ||\n this.activeObj.activePoint.endX > endPoint.x)) {\n this.activeObj.activePoint.startX -= width;\n this.activeObj.activePoint.endX -= width;\n }\n else if (this.factor > 1 && (this.activeObj.activePoint.startY < this.pannStart.startY ||\n this.activeObj.activePoint.endY > endPoint.y)) {\n this.activeObj.activePoint.startY -= height;\n this.activeObj.activePoint.endY -= height;\n }\n }\n if (this.activeObj.activePoint.startX >= this.pannStart.startX && this.activeObj.activePoint.startY >=\n this.pannStart.startY && this.activeObj.activePoint.endX <= endPoint.x && this.activeObj.activePoint.endY\n <= endPoint.y) {\n this.allowDrag = false;\n }\n }\n else {\n this.activeObj.activePoint.startX = x < this.mouseDownPoint.x ? x : this.mouseDownPoint.x;\n this.activeObj.activePoint.startY = y < this.mouseDownPoint.y ? y : this.mouseDownPoint.y;\n if (this.factor === 1) {\n this.activeObj.activePoint.startX = (this.activeObj.activePoint.startX - bbox.left) * ratio.width;\n this.activeObj.activePoint.startY = (this.activeObj.activePoint.startY - bbox.top) * ratio.height;\n initialDraw = false;\n }\n else {\n this.activeObj.activePoint.startX = (this.activeObj.activePoint.startX - bbox.left) + ((this.pannStart.startX)\n / ratio.width * this.factor);\n this.activeObj.activePoint.startY = (this.activeObj.activePoint.startY - bbox.top) + ((this.pannStart.startY)\n / ratio.height * this.factor);\n initialDraw = true;\n }\n x = x < this.mouseDownPoint.x ? this.mouseDownPoint.x : x;\n y = y < this.mouseDownPoint.y ? this.mouseDownPoint.y : y;\n if (this.factor === 1) {\n this.activeObj.activePoint.endX = (x - bbox.left) * ratio.width;\n this.activeObj.activePoint.endY = (y - bbox.top) * ratio.height;\n initialDraw = false;\n }\n else {\n this.activeObj.activePoint.endX = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n this.activeObj.activePoint.endY = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n initialDraw = true;\n }\n }\n break;\n }\n shapeResizingArgs.currentShapeSettings = this.activeObj;\n shapeMovingArgs.currentShapeSettings = this.activeObj;\n this.trigger('shapeChanging', shapeMovingArgs);\n this.trigger('shapeChanging', shapeResizingArgs);\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n return initialDraw;\n };\n ImageEditor.prototype.updateNWPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = this.activeObj.activePoint.startX - x;\n this.diffPoint.y = this.activeObj.activePoint.startY - y;\n }\n else {\n this.diffPoint.x = this.oldPoint.x - x;\n this.diffPoint.y = this.oldPoint.y - y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x <= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = diff / 10;\n this.activeObj.activePoint.startX -= (maxDimension.width / 100) * percentage;\n this.activeObj.activePoint.startY -= (maxDimension.height / 100) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n var degree = void 0;\n var maxText = this.getMaxText();\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree === 180) {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.width / maxText.length) * 2;\n }\n else {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.height / maxText.length) * 2;\n }\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.startY = y;\n if (this.activeObj.activePoint.startX > this.activeObj.activePoint.endX) {\n var temp = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = temp;\n this.dragElement = 'ne-resize';\n }\n if (this.activeObj.activePoint.startY > this.activeObj.activePoint.endY) {\n var temp = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = temp;\n this.dragElement = 'sw-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.startX < x && this.activeObj.activePoint.startY < y) {\n width = x - this.activeObj.activePoint.startX;\n height = y - this.activeObj.activePoint.startY;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n }\n }\n else {\n width = this.activeObj.activePoint.startX - x;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.updateNPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startY = y;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n if (this.activeObj.activePoint.startY > this.activeObj.activePoint.endY) {\n var temp = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = temp;\n this.dragElement = 's-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.startY < y) {\n width = this.activeObj.activePoint.endX - x;\n height = y - this.activeObj.activePoint.startY;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = this.activeObj.activePoint.startY - y;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateNEPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = x - this.activeObj.activePoint.endX;\n this.diffPoint.y = this.activeObj.activePoint.startY - y;\n }\n else {\n this.diffPoint.x = x - this.oldPoint.x;\n this.diffPoint.y = this.oldPoint.y - y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x <= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = diff / 10;\n this.activeObj.activePoint.endX += (maxDimension.width / 100) * percentage;\n this.activeObj.activePoint.startY -= (maxDimension.height / 100) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n var degree = void 0;\n var maxText = this.getMaxText();\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree === 180) {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.width / maxText.length) * 2;\n }\n else {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.height / maxText.length) * 2;\n }\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endX = x;\n this.activeObj.activePoint.startY = y;\n if (this.activeObj.activePoint.endX < this.activeObj.activePoint.startX) {\n var temp = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = temp;\n this.dragElement = 'nw-resize';\n }\n if (this.activeObj.activePoint.startY > this.activeObj.activePoint.endY) {\n var temp = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = temp;\n this.dragElement = 'se-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.startY < y) {\n width = this.activeObj.activePoint.endX - x;\n height = y - this.activeObj.activePoint.startY;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = this.activeObj.activePoint.startY - y;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.updateWPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n if (this.activeObj.activePoint.startX > this.activeObj.activePoint.endX) {\n var temp = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = temp;\n this.dragElement = 'e-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.startX < x && this.activeObj.activePoint.endY > y) {\n width = x - this.activeObj.activePoint.startX;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = this.activeObj.activePoint.startX - x;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateEPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endX = x;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n if (this.activeObj.activePoint.endX < this.activeObj.activePoint.startX) {\n var temp = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = temp;\n this.dragElement = 'w-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.endY > y) {\n width = this.activeObj.activePoint.endX - x;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateSWPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = this.activeObj.activePoint.startX - x;\n this.diffPoint.y = y - this.activeObj.activePoint.endY;\n }\n else {\n this.diffPoint.x = this.oldPoint.x - x;\n this.diffPoint.y = y - this.oldPoint.y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x <= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = diff / 10;\n this.activeObj.activePoint.startX -= (maxDimension.width / 100) * percentage;\n this.activeObj.activePoint.endY += (maxDimension.height / 100) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n var degree = void 0;\n var maxText = this.getMaxText();\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree === 180) {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.width / maxText.length) * 2;\n }\n else {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.height / maxText.length) * 2;\n }\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.endY = y;\n if (this.activeObj.activePoint.startX > this.activeObj.activePoint.endX) {\n var temp = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = temp;\n this.dragElement = 'se-resize';\n }\n if (this.activeObj.activePoint.endY < this.activeObj.activePoint.startY) {\n var temp = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = temp;\n this.dragElement = 'nw-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.startX < x && this.activeObj.activePoint.endY > y) {\n width = x - this.activeObj.activePoint.startX;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = this.activeObj.activePoint.startX - x;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.updateSPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endY = y;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n if (this.activeObj.activePoint.endY < this.activeObj.activePoint.startY) {\n var temp = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = temp;\n this.dragElement = 'n-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.endY > y) {\n width = this.activeObj.activePoint.endX - x;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.x;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateSEPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = x - this.activeObj.activePoint.endX;\n this.diffPoint.y = y - this.activeObj.activePoint.endY;\n }\n else {\n this.diffPoint.x = x - this.oldPoint.x;\n this.diffPoint.y = y - this.oldPoint.y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x >= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = diff / 10;\n this.activeObj.activePoint.endX += (maxDimension.width / 50) * percentage;\n this.activeObj.activePoint.endY += (maxDimension.height / 50) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n var degree = void 0;\n var maxText = this.getMaxText();\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree === 180) {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.width / maxText.length) * 2;\n }\n else {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.height / maxText.length) * 2;\n }\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endX = x;\n this.activeObj.activePoint.endY = y;\n if (this.activeObj.activePoint.endX < this.activeObj.activePoint.startX) {\n var temp = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = temp;\n this.dragElement = 'sw-resize';\n }\n if (this.activeObj.activePoint.endY < this.activeObj.activePoint.startY) {\n var temp = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = temp;\n this.dragElement = 'ne-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.endY > y) {\n width = this.activeObj.activePoint.endX - x;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var ratio = this.activeObj.shape.split('-');\n ratio = ratio[1].split(':');\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.getScaleRatio = function (scale) {\n var point = { x: scale, y: scale };\n if (!this.currObjType.isCustomCrop && this.activeObj.shape !== 'crop-circle' && this.activeObj.shape !== 'crop-square') {\n var ratio = this.activeObj.shape.split('-');\n ratio = ratio[1].split(':');\n var newScale = scale / (parseInt(ratio[1], 10));\n point.x = newScale * (parseInt(ratio[0], 10));\n point.y = newScale * (parseInt(ratio[1], 10));\n }\n return point;\n };\n ImageEditor.prototype.getMaxText = function (isTextBox) {\n var text = isTextBox ? this.textBox.value : this.activeObj.keyHistory;\n var maxi;\n var rows = text.split('\\n');\n var maxStr = rows[0].length;\n var maxText = rows[0];\n for (var i = 1; i < rows.length; i++) {\n maxi = rows[i].length;\n if (maxi > maxStr) {\n maxText = rows[i];\n maxStr = maxi;\n }\n }\n return maxText;\n };\n ImageEditor.prototype.setDragLimit = function () {\n if (this.factor === 1 && this.activeObj.activePoint !== undefined && this.activeObj.shape !== 'text') {\n if (this.activeObj.activePoint.startX < 0) {\n this.activeObj.activePoint.startX = 0;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.width;\n }\n else if (this.activeObj.activePoint.endX > this.lowerCanvas.width) {\n this.activeObj.activePoint.endX = this.lowerCanvas.width;\n this.activeObj.activePoint.startX = this.lowerCanvas.width - this.activeObj.activePoint.width;\n }\n if (this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.startY = 0;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.height;\n }\n else if (this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.endY = this.lowerCanvas.height;\n this.activeObj.activePoint.startY = this.lowerCanvas.height - this.activeObj.activePoint.height;\n }\n }\n };\n ImageEditor.prototype.lineDraw = function (ratio) {\n if (this.activeObj.activePoint.height < 10 * ratio.height) {\n this.activeObj.activePoint.startY -= 10 * ratio.height;\n this.activeObj.activePoint.endY += 10 * ratio.height;\n this.activeObj.lineDraw = 'horizontal';\n }\n else if (this.activeObj.activePoint.width < 10 * ratio.width) {\n this.activeObj.activePoint.startX -= 10 * ratio.width;\n this.activeObj.activePoint.endX += 10 * ratio.width;\n this.activeObj.lineDraw = 'vertical';\n }\n else if (this.currObjType.isInitialLine) {\n this.activeObj.lineDraw = 'normal';\n this.currObjType.isInitialLine = false;\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n };\n ImageEditor.prototype.shapeCircle = function (canvasDraw, selectionWidth, selectionHeight) {\n var ratio = this.calcRatio();\n canvasDraw.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n canvasDraw.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n canvasDraw.fillStyle = 'rgb(0, 0, 0, 0.5)';\n canvasDraw.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var tempWidth = canvasDraw.lineWidth;\n canvasDraw.lineWidth = (2 * (ratio.width + ratio.height)) / this.factor;\n canvasDraw.beginPath();\n canvasDraw.ellipse(this.activeObj.horTopLine.startX + (selectionWidth / 2), this.activeObj.horTopLine.startY\n + (selectionHeight / 2), selectionWidth / 2, selectionHeight / 2, 0, 0, 2 * Math.PI, false);\n canvasDraw.stroke();\n canvasDraw.closePath();\n canvasDraw.save();\n canvasDraw.beginPath();\n canvasDraw.arc(((this.activeObj.activePoint.endX - this.activeObj.activePoint.startX) / 2) + this.activeObj.activePoint.startX, ((this.activeObj.activePoint.endY - this.activeObj.activePoint.startY) / 2) + this.activeObj.activePoint.startY, (this.activeObj.activePoint.width / 2), 0, Math.PI * 2);\n canvasDraw.closePath();\n canvasDraw.clip();\n canvasDraw.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n canvasDraw.restore();\n canvasDraw.lineWidth = tempWidth;\n this.drawOuterSelection(canvasDraw, null, true);\n this.currObjType.shape = '';\n };\n ImageEditor.prototype.drawOuterSelection = function (canvasDraw, isInitialDraw, isCropCircle) {\n var splitWords;\n var ratio = this.calcRatio();\n canvasDraw.lineWidth = (0.5 * (ratio.width + ratio.height)) / this.factor;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n var tempObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n if (isInitialDraw) {\n tempObj = this.getZoomShape(tempObj, ratio);\n }\n }\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (((splitWords !== undefined && splitWords[0] === 'crop') || this.activeObj.shape === undefined) && !isCropCircle) {\n this.upperContext.fillStyle = 'rgb(0, 0, 0, 0.5)';\n this.upperContext.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(this.activeObj.activePoint.startX, this.activeObj.activePoint.startY, this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n }\n canvasDraw.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n canvasDraw.fillStyle = this.themeColl[this.theme]['secondaryColor'];\n if (this.activeObj.shape !== 'rectangle') {\n canvasDraw.beginPath();\n canvasDraw.rect(tempObj.activePoint.startX, tempObj.activePoint.startY, tempObj.activePoint.width, tempObj.activePoint.height);\n canvasDraw.stroke();\n canvasDraw.closePath();\n }\n canvasDraw.lineWidth *= 2;\n canvasDraw.beginPath();\n canvasDraw.moveTo(tempObj.topLeftCircle.startX, tempObj.topLeftCircle.startY);\n canvasDraw.arc(tempObj.topLeftCircle.startX, tempObj.topLeftCircle.startY, tempObj.topLeftCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(tempObj.topRightCircle.startX, tempObj.topRightCircle.startY);\n canvasDraw.arc(tempObj.topRightCircle.startX, tempObj.topRightCircle.startY, tempObj.topRightCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(tempObj.bottomLeftCircle.startX, tempObj.bottomLeftCircle.startY);\n canvasDraw.arc(tempObj.bottomLeftCircle.startX, tempObj.bottomLeftCircle.startY, tempObj.bottomLeftCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(tempObj.bottomRightCircle.startX, tempObj.bottomRightCircle.startY);\n canvasDraw.arc(tempObj.bottomRightCircle.startX, tempObj.bottomRightCircle.startY, tempObj.bottomRightCircle.radius, 0, 2 * Math.PI);\n canvasDraw.stroke();\n canvasDraw.fill();\n canvasDraw.closePath();\n canvasDraw.lineWidth /= 2;\n if ((splitWords === undefined || splitWords[0] !== 'crop') && this.activeObj.shape !== 'text') {\n this.drawCenterCircles(canvasDraw);\n }\n this.activeObj = extend({}, tempObj, {}, true);\n };\n ImageEditor.prototype.getZoomShape = function (tempObj, ratio) {\n var obj = extend({}, tempObj, {}, true);\n obj.activePoint.startX = (obj.activePoint.startX / this.factor) * ratio.width;\n obj.activePoint.startY = (obj.activePoint.startY / this.factor) * ratio.height;\n obj.activePoint.endX = (obj.activePoint.endX / this.factor) * ratio.width;\n obj.activePoint.endY = (obj.activePoint.endY / this.factor) * ratio.height;\n obj.activePoint.width = obj.activePoint.endX - obj.activePoint.startX;\n obj.activePoint.height = obj.activePoint.endY - obj.activePoint.startY;\n this.updateActiveObject(ratio, obj.activePoint, obj);\n return obj;\n };\n ImageEditor.prototype.drawObject = function (canvas, obj, isInitialDraw, isCropRatio, points) {\n var canvasDraw;\n if (canvas.toLowerCase() === 'original') {\n canvasDraw = this.lowerContext;\n }\n else {\n canvasDraw = this.upperContext;\n }\n this.setDragLimit();\n var ratio = this.calcRatio();\n if (this.currObjType.isLine && canvas !== 'original' && !obj) {\n this.lineDraw(ratio);\n }\n var splitWords = this.currObjType.shape.split('-');\n if (splitWords[0].toLowerCase() === 'crop' && isCropRatio) {\n this.drawCropRatio();\n }\n if (points) {\n this.activeObj.activePoint.startX = points.startX;\n this.activeObj.activePoint.startY = points.startY;\n this.activeObj.activePoint.endX = points.endX;\n this.activeObj.activePoint.endY = points.endY;\n this.activeObj.activePoint.width = points.width;\n this.activeObj.activePoint.height = points.height;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings.strokeWidth)) {\n this.activeObj.strokeSettings.strokeWidth = 2 * (ratio.width + ratio.height) / this.factor;\n }\n if (obj) {\n this.activeObj = extend({}, obj, {}, true);\n if (this.factor !== 1) {\n this.updateActiveObject(ratio);\n }\n }\n else {\n this.updateActiveObject(ratio);\n }\n if (this.currObjType.isText) {\n this.activeObj.keyHistory = this.keyHistory;\n }\n if (canvas.toLowerCase() !== 'original') {\n var splitWords_1;\n var isCrop = false;\n if (this.activeObj.shape) {\n splitWords_1 = this.activeObj.shape.split('-');\n if (splitWords_1[0] === 'crop') {\n isCrop = true;\n }\n }\n if (isCrop) {\n this.upperContext.fillStyle = 'rgb(0, 0, 0, 0.5)';\n this.upperContext.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(this.activeObj.activePoint.startX + ratio.width, this.activeObj.activePoint.startY + ratio.height, this.activeObj.activePoint.width - ratio.width, this.activeObj.activePoint.height - ratio.height);\n }\n this.drawOuterSelection(canvasDraw, isInitialDraw);\n }\n this.currObjType.isActiveObj = true;\n if (obj) {\n this.drawShapeObj(canvas, obj.shape);\n }\n else if (this.keyHistory !== '' && this.currObjType.isText) {\n this.drawShapeObj(canvas, 'text');\n }\n else if (this.activeObj.shape) {\n this.drawShapeObj(canvas, this.activeObj.shape);\n }\n else {\n this.drawShapeObj(canvas, undefined);\n }\n };\n ImageEditor.prototype.updateActiveObject = function (ratio, actPoint, obj, isMouseMove) {\n actPoint = actPoint ? actPoint : extend({}, this.activeObj.activePoint, {}, true);\n obj = obj ? obj : extend({}, this.activeObj, {}, true);\n var horCircleWidth = actPoint.width / 2;\n var verCircleHeight = actPoint.height / 2;\n var radius = 7.5;\n obj.horTopLine = { startX: actPoint.startX, startY: actPoint.startY,\n endX: actPoint.endX, endY: actPoint.endY };\n obj.horBottomLine = { startX: actPoint.startX, startY: actPoint.endY,\n endX: actPoint.endX, endY: actPoint.endY };\n obj.verLeftLine = { startX: actPoint.startX, startY: actPoint.startY,\n endX: actPoint.startX, endY: actPoint.endY };\n obj.verRightLine = { startX: actPoint.endX, startY: actPoint.startY,\n endX: actPoint.endX, endY: actPoint.endY };\n obj.topLeftCircle = { startX: actPoint.startX, startY: actPoint.startY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.topCenterCircle = { startX: actPoint.startX + horCircleWidth, startY: actPoint.startY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.topRightCircle = { startX: actPoint.endX, startY: actPoint.startY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.centerLeftCircle = { startX: actPoint.startX, startY: actPoint.startY + verCircleHeight,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.centerRightCircle = { startX: actPoint.endX, startY: actPoint.startY + verCircleHeight,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.bottomLeftCircle = { startX: actPoint.startX, startY: actPoint.endY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.bottomCenterCircle = { startX: actPoint.startX + horCircleWidth, startY: actPoint.endY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.bottomRightCircle = { startX: actPoint.endX, startY: actPoint.endY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.activePoint = actPoint;\n if (isNullOrUndefined(isMouseMove)) {\n this.activeObj = extend({}, obj, {}, true);\n }\n };\n ImageEditor.prototype.drawShapeObj = function (canvas, shape) {\n var currentShape = shape !== undefined ? shape : this.currObjType.shape;\n this.currObjType.shape = currentShape;\n var canvasDraw;\n if (canvas.toLowerCase() === 'original') {\n canvasDraw = this.lowerContext;\n }\n else {\n canvasDraw = this.upperContext;\n }\n if (this.currObjType.shape.toLowerCase() === 'rectangle' || this.currObjType.shape.toLowerCase() === 'ellipse'\n || this.currObjType.shape.toLowerCase() === 'line') {\n this.activeObj.shape = this.currObjType.shape;\n }\n canvasDraw.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n if (shape === 'text' || shape === 'freehanddraw') {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n }\n else {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.fillColor;\n }\n var horLineWidth = this.activeObj.activePoint.width / 3;\n var verLineHeight = this.activeObj.activePoint.height / 3;\n var selectionWidth = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n var selectionHeight = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n switch (this.currObjType.shape.toLowerCase()) {\n case 'rectangle':\n this.drawSquareLines(canvasDraw);\n if (canvasDraw === this.upperContext) {\n this.drawOuterSelection(canvasDraw);\n }\n break;\n case 'ellipse':\n canvasDraw.beginPath();\n canvasDraw.ellipse(this.activeObj.activePoint.startX + (selectionWidth / 2), this.activeObj.activePoint.startY + (selectionHeight / 2), selectionWidth / 2, selectionHeight / 2, 0, 0, 2 * Math.PI, false);\n if (this.activeObj.strokeSettings.fillColor !== '') {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.fillColor;\n canvasDraw.fill();\n }\n canvasDraw.ellipse(this.activeObj.activePoint.startX + (selectionWidth / 2), this.activeObj.activePoint.startY + (selectionHeight / 2), (selectionWidth / 2) - (this.activeObj.strokeSettings.strokeWidth), (selectionHeight / 2) - (this.activeObj.strokeSettings.strokeWidth), 0, 0, 2 * Math.PI, false);\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n canvasDraw.fill('evenodd');\n canvasDraw.closePath();\n if (canvasDraw === this.upperContext) {\n this.drawOuterSelection(canvasDraw);\n }\n break;\n case 'crop-circle':\n this.shapeCircle(canvasDraw, selectionWidth, selectionHeight);\n break;\n case 'line':\n this.shapeLine(canvasDraw, selectionWidth, selectionHeight);\n if (canvasDraw === this.upperContext) {\n this.drawOuterSelection(canvasDraw);\n }\n break;\n case 'text':\n this.shapeText(canvasDraw);\n break;\n case 'crop-square':\n case 'crop-3:4':\n case 'crop-4:3':\n case 'crop-6:9':\n case 'crop-9:6':\n case 'crop-9:16':\n case 'crop-16:9':\n this.drawSelection(horLineWidth, verLineHeight);\n this.currObjType.shape = '';\n break;\n default:\n this.drawSelection(horLineWidth, verLineHeight);\n break;\n }\n };\n ImageEditor.prototype.shapeLine = function (canvasDraw, selectionWidth, selectionHeight) {\n var startX;\n var startY;\n var endX;\n var endY;\n var degree;\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree % 180 === 0) {\n startX = this.activeObj.activePoint.startX;\n startY = this.activeObj.activePoint.startY + (selectionHeight / 2);\n endX = this.activeObj.activePoint.endX;\n endY = this.activeObj.activePoint.startY + (selectionHeight / 2);\n }\n else {\n startX = this.activeObj.activePoint.startX + (selectionWidth / 2);\n startY = this.activeObj.activePoint.startY;\n endX = this.activeObj.activePoint.startX + (selectionWidth / 2);\n endY = this.activeObj.activePoint.endY;\n }\n var tempLineWidth = canvasDraw.lineWidth;\n canvasDraw.lineWidth = (this.activeObj.strokeSettings.strokeWidth) / Math.abs(this.factor);\n canvasDraw.beginPath();\n switch (this.activeObj.lineDraw.toLowerCase()) {\n case 'horizontal':\n case 'vertical':\n canvasDraw.moveTo(startX, startY);\n canvasDraw.lineTo(endX, endY);\n break;\n case 'normal':\n canvasDraw.moveTo(this.activeObj.horTopLine.startX, this.activeObj.horTopLine.startY);\n canvasDraw.lineTo(this.activeObj.horBottomLine.endX, this.activeObj.horBottomLine.endY);\n break;\n }\n canvasDraw.stroke();\n canvasDraw.lineWidth = tempLineWidth;\n };\n ImageEditor.prototype.shapeText = function (canvasDraw) {\n var rows = this.activeObj.keyHistory.split('\\n');\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n var lineHeight = ((height * rows.length) - (this.activeObj.textSettings.fontSize * rows.length)) / rows.length;\n for (var i = 0; i < rows.length; i++) {\n var text = rows[i];\n var yPoint = ((i + 1) * this.activeObj.textSettings.fontSize * 0.85) + (i * lineHeight);\n if (this.degree === -360) {\n this.degree = 0;\n }\n if (this.degree === 0 || this.degree === 180) {\n if (this.activeObj.textSettings.fontSize > this.activeObj.activePoint.height) {\n this.activeObj.textSettings.fontSize = this.activeObj.activePoint.height -\n (this.activeObj.activePoint.height * 0.1);\n }\n }\n else {\n if (this.activeObj.textSettings.fontSize > this.activeObj.activePoint.width) {\n this.activeObj.textSettings.fontSize = this.activeObj.activePoint.width -\n (this.activeObj.activePoint.width * 0.1);\n }\n }\n canvasDraw.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n var textStyle = '';\n if (this.activeObj.textSettings.bold) {\n textStyle = 'bold ';\n }\n if (this.activeObj.textSettings.italic) {\n textStyle = 'italic ';\n }\n if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n textStyle = 'italic bold ';\n }\n canvasDraw.font = textStyle + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n if (this.activeObj.flipObjColl.length === 4) {\n this.activeObj.flipObjColl = [];\n }\n for (var j = 0; j < this.activeObj.flipObjColl.length; j++) {\n if (this.activeObj.flipObjColl[j].toLowerCase() === 'horizontal') {\n this.lowerContext.translate(this.lowerContext.canvas.width, 0);\n this.lowerContext.scale(-1, 1);\n this.upperContext.translate(this.upperContext.canvas.width, 0);\n this.upperContext.scale(-1, 1);\n this.updateActPoint('horizontal');\n }\n else if (this.activeObj.flipObjColl[j].toLowerCase() === 'vertical') {\n this.lowerContext.translate(0, this.lowerContext.canvas.height);\n this.lowerContext.scale(1, -1);\n this.upperContext.translate(0, this.upperContext.canvas.height);\n this.upperContext.scale(1, -1);\n this.updateActPoint('vertical');\n }\n }\n if (this.activeObj.shapeDegree !== this.degree) {\n this.rotateText(canvasDraw);\n }\n else {\n canvasDraw.fillText(text, this.activeObj.activePoint.startX + this.activeObj.textSettings.fontSize * 0.1, this.activeObj.activePoint.startY + yPoint);\n }\n for (var k = 0; k < this.activeObj.flipObjColl.length; k++) {\n if (this.activeObj.flipObjColl[k].toLowerCase() === 'horizontal') {\n this.lowerContext.translate(this.lowerContext.canvas.width, 0);\n this.lowerContext.scale(-1, 1);\n this.upperContext.translate(this.upperContext.canvas.width, 0);\n this.upperContext.scale(-1, 1);\n this.updateActPoint('horizontal');\n }\n else if (this.activeObj.flipObjColl[k].toLowerCase() === 'vertical') {\n this.lowerContext.translate(0, this.lowerContext.canvas.height);\n this.lowerContext.scale(1, -1);\n this.upperContext.translate(0, this.upperContext.canvas.height);\n this.upperContext.scale(1, -1);\n this.updateActPoint('vertical');\n }\n }\n }\n this.currObjType.isText = false;\n };\n ImageEditor.prototype.updateActPoint = function (degree) {\n var ratio = this.calcRatio();\n if (degree.toLowerCase() === 'horizontal') {\n if (this.activeObj.activePoint.startX <= this.lowerCanvas.width / 2) {\n this.activeObj.activePoint.startX = this.lowerCanvas.width / 2 + ((this.lowerCanvas.width / 2) -\n this.activeObj.activePoint.endX);\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n }\n else if (this.activeObj.activePoint.startX >= this.lowerCanvas.width / 2) {\n this.activeObj.activePoint.startX = this.lowerCanvas.width - this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n }\n }\n else if (degree.toLowerCase() === 'vertical') {\n if (this.activeObj.activePoint.startY <= this.lowerCanvas.height / 2) {\n this.activeObj.activePoint.startY = this.lowerCanvas.height / 2 + ((this.lowerCanvas.height / 2) -\n this.activeObj.activePoint.endY);\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n }\n else if (this.activeObj.activePoint.startY >= this.lowerCanvas.height / 2) {\n this.activeObj.activePoint.startY = this.lowerCanvas.height - this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n }\n }\n };\n ImageEditor.prototype.drawSquareLines = function (canvasDraw) {\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords[0] === 'crop') {\n canvasDraw.strokeStyle = '#fff';\n }\n else {\n canvasDraw.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n }\n canvasDraw.beginPath();\n canvasDraw.rect(this.activeObj.activePoint.startX, this.activeObj.activePoint.startY, this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n if (this.activeObj.strokeSettings.fillColor !== '') {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.fillColor;\n canvasDraw.fill();\n }\n canvasDraw.rect(this.activeObj.activePoint.startX + this.activeObj.strokeSettings.strokeWidth, this.activeObj.activePoint.startY + this.activeObj.strokeSettings.strokeWidth, this.activeObj.activePoint.width - (2 * this.activeObj.strokeSettings.strokeWidth), this.activeObj.activePoint.height - (2 * this.activeObj.strokeSettings.strokeWidth));\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n canvasDraw.fill('evenodd');\n canvasDraw.closePath();\n };\n ImageEditor.prototype.drawSelection = function (horLineWidth, verLineHeight) {\n this.upperContext.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n this.upperContext.beginPath();\n this.activeObj.horTopInnerLine = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY +\n verLineHeight, endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY + verLineHeight };\n this.activeObj.horBottomInnerLine = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY +\n (2 * verLineHeight), endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY + (2 * verLineHeight) };\n this.activeObj.verLeftInnerLine = { startX: this.activeObj.activePoint.startX + horLineWidth,\n startY: this.activeObj.activePoint.startY, endX: this.activeObj.activePoint.startX + horLineWidth,\n endY: this.activeObj.activePoint.endY };\n this.activeObj.verRightInnerLine = { startX: this.activeObj.activePoint.startX + (2 * horLineWidth),\n startY: this.activeObj.activePoint.startY, endX: this.activeObj.activePoint.startX + (2 * horLineWidth),\n endY: this.activeObj.activePoint.endY };\n this.upperContext.moveTo(this.activeObj.horTopInnerLine.startX, this.activeObj.horTopInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.horTopInnerLine.endX, this.activeObj.horTopInnerLine.startY);\n this.upperContext.moveTo(this.activeObj.horBottomInnerLine.startX, this.activeObj.horBottomInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.horBottomInnerLine.endX, this.activeObj.horBottomInnerLine.startY);\n this.upperContext.moveTo(this.activeObj.verLeftInnerLine.startX, this.activeObj.verLeftInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.verLeftInnerLine.endX, this.activeObj.verLeftInnerLine.endY);\n this.upperContext.moveTo(this.activeObj.verRightInnerLine.startX, this.activeObj.verRightInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.verRightInnerLine.endX, this.activeObj.verRightInnerLine.endY);\n this.upperContext.stroke();\n this.upperContext.closePath();\n };\n ImageEditor.prototype.drawCenterCircles = function (canvasDraw) {\n canvasDraw.lineWidth *= 2;\n canvasDraw.beginPath();\n canvasDraw.moveTo(this.activeObj.topCenterCircle.startX, this.activeObj.topCenterCircle.startY);\n canvasDraw.arc(this.activeObj.topCenterCircle.startX, this.activeObj.topCenterCircle.startY, this.activeObj.topCenterCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(this.activeObj.centerLeftCircle.startX, this.activeObj.centerLeftCircle.startY);\n canvasDraw.arc(this.activeObj.centerLeftCircle.startX, this.activeObj.centerLeftCircle.startY, this.activeObj.centerLeftCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(this.activeObj.centerRightCircle.startX, this.activeObj.centerRightCircle.startY);\n canvasDraw.arc(this.activeObj.centerRightCircle.startX, this.activeObj.centerRightCircle.startY, this.activeObj.centerRightCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(this.activeObj.bottomCenterCircle.startX, this.activeObj.bottomCenterCircle.startY);\n canvasDraw.arc(this.activeObj.bottomCenterCircle.startX, this.activeObj.bottomCenterCircle.startY, this.activeObj.bottomCenterCircle.radius, 0, 2 * Math.PI);\n canvasDraw.stroke();\n canvasDraw.fill();\n canvasDraw.closePath();\n canvasDraw.lineWidth /= 2;\n };\n ImageEditor.prototype.findTarget = function (x, y, type) {\n var bbox = this.upperCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n y = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n }\n if (type.toLowerCase() === 'mousedown' || type.toLowerCase() === 'touchstart') {\n var splitWords = void 0;\n var isCrop = false;\n if (this.activeObj.shape) {\n splitWords = this.activeObj.shape.split('-');\n if (splitWords[0] === 'crop') {\n isCrop = true;\n }\n }\n this.findTargetObj(x, y, ratio, isCrop);\n this.updateCursorStyles(x, y, ratio, type);\n }\n else {\n switch (this.dragElement.toLowerCase()) {\n case 'nw-resize':\n this.activeObj.topLeftCircle.startX = x;\n this.activeObj.topLeftCircle.startY = y;\n break;\n case 'n-resize':\n this.activeObj.topCenterCircle.startX = x;\n this.activeObj.topCenterCircle.startY = y;\n break;\n case 'ne-resize':\n this.activeObj.topRightCircle.startX = x;\n this.activeObj.topRightCircle.startY = y;\n break;\n case 'w-resize':\n this.activeObj.centerLeftCircle.startX = x;\n this.activeObj.centerLeftCircle.startY = y;\n break;\n case 'e-resize':\n this.activeObj.centerRightCircle.startX = x;\n this.activeObj.centerRightCircle.startY = y;\n break;\n case 'sw-resize':\n this.activeObj.bottomLeftCircle.startX = x;\n this.activeObj.bottomLeftCircle.startY = y;\n break;\n case 's-resize':\n this.activeObj.bottomCenterCircle.startX = x;\n this.activeObj.bottomCenterCircle.startY = y;\n break;\n case 'se-resize':\n this.activeObj.bottomRightCircle.startX = x;\n this.activeObj.bottomRightCircle.startY = y;\n break;\n default:\n if (this.dragPoint.startX && this.dragPoint.startY) {\n this.previousPoint.x = this.dragPoint.endX;\n this.previousPoint.y = this.dragPoint.endY;\n this.dragPoint.endX = x;\n this.dragPoint.endY = y;\n }\n break;\n }\n }\n };\n ImageEditor.prototype.findTargetObj = function (x, y, ratio, isCrop) {\n if (this.objColl.length !== 0 && !this.currObjType.isCustomCrop && !isCrop) {\n var diffX = 0;\n var i = void 0;\n for (var index = 0; index < this.objColl.length; index++) {\n var actObj = extend({}, this.objColl[index], {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio);\n }\n if (x >= (actObj.activePoint.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.activePoint.endX + actObj.topLeftCircle.radius) &&\n y >= (actObj.activePoint.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.activePoint.endY + actObj.topLeftCircle.radius)) {\n if (diffX === 0 || diffX > x - actObj.activePoint.startX) {\n diffX = x - this.objColl[index].activePoint.startX;\n i = index;\n }\n }\n }\n if (isNullOrUndefined(i)) {\n this.refreshActiveObj();\n return;\n }\n this.currObjType.isCustomCrop = false;\n var temp = this.activeObj = extend({}, this.objColl[i], {}, true);\n this.objColl.splice(i, 1);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n if (this.degree === 0) {\n this.inMemoryContext.putImageData(this.imgDataColl[0].value, 0, 0);\n }\n else {\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n }\n if (this.flipState !== '') {\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n }\n this.setActivePoint();\n this.upperContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n for (var j = 0; j < this.objColl.length; j++) {\n if (this.objColl[j].shape === 'text' && this.objColl[j].shapeFlip !== this.currFlipState) {\n this.objColl[j].flippedText = true;\n }\n this.apply(this.objColl[j].shape, this.objColl[j]);\n }\n this.activeObj = extend({}, temp, {}, true);\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n if (this.factor !== 1 && (this.activeObj.activePoint.startX < this.pannStart.startX || this.activeObj.activePoint.startY <\n this.pannStart.startY) || (this.activeObj.activePoint.endX > endPoint.x || this.activeObj.activePoint.endY > endPoint.y)) {\n this.allowDrag = true;\n }\n this.tempStrokeSettings = extend({}, this.activeObj.strokeSettings, {}, true);\n this.tempTextSettings = extend({}, this.activeObj.textSettings, {}, true);\n if (this.activeObj.shape === 'text' && this.activeObj.shapeFlip !== this.currFlipState) {\n this.activeObj.flippedText = true;\n }\n if (this.activeObj.activePoint) {\n this.drawObject('duplicate', this.activeObj);\n }\n var shapeChangingArgs = { action: 'select', previousShapeSettings: this.activeObj, currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n }\n };\n ImageEditor.prototype.updateCursorStyles = function (x, y, ratio, type) {\n var isResize = false;\n if (this.activeObj.keyHistory !== '' && this.activeObj.shape === undefined && !this.currObjType.isCustomCrop &&\n !this.currObjType.isLine && this.currObjType.isText) {\n this.activeObj.shape = 'text';\n }\n var actObj = extend({}, this.activeObj, {}, true);\n if (isNullOrUndefined(actObj.topLeftCircle)) {\n return;\n }\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (x >= (actObj.topLeftCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.topLeftCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.topLeftCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.topLeftCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'nw-resize') {\n actObj.topLeftCircle.startX = actObj.topLeftCircle.startY = 0;\n this.upperCanvas.style.cursor = 'nw-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.topCenterCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.topCenterCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.topCenterCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.topCenterCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'n-resize') {\n actObj.topCenterCircle.startX = actObj.topCenterCircle.startY = 0;\n this.upperCanvas.style.cursor = 'n-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.topRightCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.topRightCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.topRightCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.topRightCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'ne-resize') {\n actObj.topRightCircle.startX = actObj.topRightCircle.startY = 0;\n this.upperCanvas.style.cursor = 'ne-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.centerLeftCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.centerLeftCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.centerLeftCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.centerLeftCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'w-resize') {\n actObj.centerLeftCircle.startX = actObj.centerLeftCircle.startY = 0;\n this.upperCanvas.style.cursor = 'w-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.centerRightCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.centerRightCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.centerRightCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.centerRightCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'e-resize') {\n actObj.centerRightCircle.startX = actObj.centerRightCircle.startY = 0;\n this.upperCanvas.style.cursor = 'e-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.bottomLeftCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.bottomLeftCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.bottomLeftCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.bottomLeftCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'sw-resize') {\n actObj.bottomLeftCircle.startX = actObj.bottomLeftCircle.startY = 0;\n this.upperCanvas.style.cursor = 'sw-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.bottomCenterCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.bottomCenterCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.bottomCenterCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.bottomCenterCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 's-resize') {\n actObj.bottomCenterCircle.startX = actObj.bottomCenterCircle.startY = 0;\n this.upperCanvas.style.cursor = 's-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.bottomRightCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.bottomRightCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.bottomRightCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.bottomRightCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'se-resize') {\n actObj.bottomRightCircle.startX = actObj.bottomRightCircle.startY = 0;\n this.upperCanvas.style.cursor = 'se-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else {\n this.dragPoint.startX = this.previousPoint.x = this.dragPoint.endX = x;\n this.dragPoint.startY = this.previousPoint.y = this.dragPoint.endY = y;\n }\n this.previousPoint.x = this.previousPoint.y = this.diffPoint.x = this.diffPoint.y = 0;\n if (type === 'touchstart') {\n if (isResize || (x >= actObj.activePoint.startX && x <= actObj.activePoint.endX\n && y >= actObj.activePoint.startY && y <= actObj.activePoint.endY)) {\n this.currObjType.isDragging = true;\n }\n }\n else {\n this.currObjType.isDragging = true;\n }\n };\n ImageEditor.prototype.drawCropRatio = function () {\n var x;\n var y;\n switch (this.currObjType.shape.toLowerCase()) {\n case 'crop-square':\n case 'crop-circle':\n this.setDragDirection();\n if (this.lowerCanvas.width > this.lowerCanvas.height) {\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.activeObj.activePoint.width = this.activeObj.activePoint.height;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n }\n else {\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.width;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n }\n break;\n case 'crop-3:2':\n x = 3;\n y = 2;\n break;\n case 'crop-4:3':\n x = 4;\n y = 3;\n break;\n case 'crop-5:4':\n x = 5;\n y = 4;\n break;\n case 'crop-7:5':\n x = 7;\n y = 5;\n break;\n case 'crop-16:9':\n x = 16;\n y = 9;\n break;\n }\n if (x !== undefined && y !== undefined) {\n this.calcShapeRatio(x, y);\n }\n };\n ImageEditor.prototype.setDragDirection = function () {\n var ratio = this.calcRatio();\n var arcRadius = (7.5 * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor;\n if (this.lowerCanvas.width > this.lowerCanvas.height) {\n if (this.factor === 1) {\n this.activeObj.activePoint.startX = this.dragPoint.startX = ((this.lowerCanvas.width / 2) - (this.lowerCanvas.height / 2))\n + arcRadius;\n this.activeObj.activePoint.startY = this.dragPoint.startY = ((this.lowerCanvas.height / 2) - (this.lowerCanvas.height / 2))\n + arcRadius;\n this.activeObj.activePoint.endX = ((this.lowerCanvas.width / 2) + (this.lowerCanvas.height / 2)) - arcRadius;\n this.activeObj.activePoint.endY = ((this.lowerCanvas.height / 2) + (this.lowerCanvas.height / 2)) - arcRadius;\n }\n else {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n var visibleWidth = endPoint.x - this.pannStart.startX;\n var visibleHeight = endPoint.y - this.pannStart.startY;\n var centerX = (this.dragPoint.startX = visibleWidth / 2) + this.pannStart.startX;\n var centerY = this.dragPoint.startY = visibleHeight / 2;\n this.activeObj.activePoint.startX = (centerX - centerY) + arcRadius;\n this.activeObj.activePoint.startY = (this.pannStart.startY) + arcRadius;\n this.activeObj.activePoint.endX = (this.activeObj.activePoint.startX + visibleHeight) - arcRadius;\n this.activeObj.activePoint.endY = (this.activeObj.activePoint.startY + visibleHeight) - (2 * arcRadius);\n }\n }\n else {\n if (this.factor === 1) {\n this.activeObj.activePoint.startY = this.dragPoint.startX = ((this.lowerCanvas.height / 2) - (this.lowerCanvas.width) / 2)\n + arcRadius;\n this.activeObj.activePoint.endY = ((this.lowerCanvas.height / 2) + (this.lowerCanvas.width) / 2) - arcRadius;\n this.activeObj.activePoint.startX = this.dragPoint.startX = arcRadius;\n this.activeObj.activePoint.endX = this.lowerCanvas.width - arcRadius;\n }\n else {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n var visibleWidth = endPoint.x - this.pannStart.startX;\n var visibleHeight = endPoint.y - this.pannStart.startY;\n var centerX = this.dragPoint.startX = visibleWidth / 2;\n var centerY = (this.dragPoint.startY = visibleHeight / 2) + this.pannStart.startY;\n this.activeObj.activePoint.startX = this.pannStart.startX + arcRadius;\n this.activeObj.activePoint.startY = (centerY - centerX) + arcRadius;\n this.activeObj.activePoint.endX = (this.activeObj.activePoint.startX + visibleWidth) - arcRadius;\n this.activeObj.activePoint.endY = (this.activeObj.activePoint.startY + visibleWidth) - arcRadius;\n }\n }\n };\n ImageEditor.prototype.calcShapeRatio = function (x, y) {\n var ratio = this.calcRatio();\n var arcRadius = (7.5 * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor;\n var originalWidth = this.factor === 1 ? this.lowerCanvas.width : this.lowerCanvas.width / this.factor;\n var originalHeight = this.factor === 1 ? this.lowerCanvas.height : this.lowerCanvas.height / this.factor;\n var presetRatio = x / y;\n var standardSize = originalWidth >= originalHeight ? originalWidth : originalHeight;\n var width = standardSize * presetRatio;\n var height = standardSize;\n var scaleWidth = this.getScale(width, originalWidth);\n var snippetArray = [];\n for (var i = 0; i < 2; i++) {\n if (i === 0) {\n snippetArray.push(width * scaleWidth);\n }\n else {\n snippetArray.push(height * scaleWidth);\n }\n }\n width = snippetArray[0];\n height = snippetArray[1];\n var scaleHeight = this.getScale(height, originalHeight);\n var snippetArray1 = [];\n for (var i = 0; i < 2; i++) {\n if (i === 0) {\n snippetArray1.push(width * scaleHeight);\n }\n else {\n snippetArray1.push(height * scaleHeight);\n }\n }\n width = snippetArray1[0];\n height = snippetArray1[1];\n this.activeObj.activePoint.width = width;\n this.activeObj.activePoint.height = height;\n this.activeObj.activePoint.startX = (this.dragPoint.startX = (originalWidth - width) / 2) + arcRadius;\n this.activeObj.activePoint.startY = (this.dragPoint.startY = (originalHeight - height) / 2) + arcRadius;\n this.activeObj.activePoint.endX = ((originalWidth - width) / 2 + width) - arcRadius;\n this.activeObj.activePoint.endY = ((originalHeight - height) / 2 + height) - arcRadius;\n if (this.factor !== 1) {\n this.activeObj.activePoint.startX += this.pannStart.startX;\n this.activeObj.activePoint.startY += this.pannStart.startY;\n this.activeObj.activePoint.endX += this.pannStart.startX;\n this.activeObj.activePoint.endY += this.pannStart.startY;\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n };\n ImageEditor.prototype.getScale = function (value, originalValue) {\n return value > originalValue ? originalValue / value : 1;\n };\n ImageEditor.prototype.calcRatio = function () {\n var widthRatio;\n var heightRatio;\n if (this.degree === 0 || this.degree % 180 === 0) {\n widthRatio = this.baseImg.width / parseInt(this.lowerCanvas.style.maxWidth, 10);\n heightRatio = this.baseImg.height / parseInt(this.lowerCanvas.style.maxHeight, 10);\n }\n else {\n widthRatio = this.baseImg.height / parseInt(this.lowerCanvas.style.maxWidth, 10);\n heightRatio = this.baseImg.width / parseInt(this.lowerCanvas.style.maxHeight, 10);\n }\n return { width: widthRatio, height: heightRatio };\n };\n ImageEditor.prototype.calcMaxDimension = function (width, height) {\n var canvasMaxWidth = this.element.clientWidth;\n var canvasMaxHeight = this.element.clientHeight - this.toolbarHeight;\n canvasMaxHeight = Browser.isDevice ? canvasMaxHeight - this.toolbarHeight : canvasMaxHeight;\n canvasMaxWidth -= 30;\n canvasMaxHeight -= 30;\n var widthScale = canvasMaxWidth / width;\n var heightScale = canvasMaxHeight / height;\n var cssMaxWidth = Math.min(width, canvasMaxWidth);\n var cssMaxHeight = Math.min(height, canvasMaxHeight);\n if (widthScale < 1 && widthScale < heightScale) {\n cssMaxWidth = width * widthScale;\n cssMaxHeight = height * widthScale;\n }\n else if (heightScale < 1 && heightScale < widthScale) {\n cssMaxWidth = width * heightScale;\n cssMaxHeight = height * heightScale;\n }\n return { width: cssMaxWidth, height: cssMaxHeight };\n };\n ImageEditor.prototype.setMaximumDimension = function (degree) {\n var newWidth;\n var newHeight;\n if (degree % 90 === 0 && degree % 180 !== 0) {\n newWidth = this.baseImg.height;\n newHeight = this.baseImg.width;\n }\n else if (degree % 180 === 0 || degree === 0) {\n newWidth = this.baseImg.width;\n newHeight = this.baseImg.height;\n }\n this.lowerCanvas.width = this.upperCanvas.width = newWidth;\n this.lowerCanvas.height = this.upperCanvas.height = newHeight;\n var maxDimension = this.calcMaxDimension(newWidth, newHeight);\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n };\n ImageEditor.prototype.setCursor = function (x, y) {\n var bbox = this.upperCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n y = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n }\n if (this.activeObj.horTopLine !== undefined) {\n if (this.togglePan) {\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n }\n else {\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (x >= (actObj.topLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'nw-resize';\n }\n else if (x >= (actObj.topCenterCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topCenterCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topCenterCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topCenterCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'n-resize';\n }\n else if (x >= (actObj.topRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'ne-resize';\n }\n else if (x >= (actObj.centerLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.centerLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.centerLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.centerLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'w-resize';\n }\n else if (x >= (actObj.centerRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.centerRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.centerRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.centerRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'e-resize';\n }\n else if (x >= (actObj.bottomLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'sw-resize';\n }\n else if (x >= (actObj.bottomCenterCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomCenterCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomCenterCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomCenterCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 's-resize';\n }\n else if (x >= (actObj.bottomRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'se-resize';\n }\n else if ((x >= actObj.activePoint.startX &&\n x <= actObj.activePoint.endX) && (y >= actObj.activePoint.startY &&\n y <= actObj.activePoint.endY)) {\n this.upperCanvas.style.cursor = 'move';\n }\n else {\n if (this.currObjType.isCustomCrop) {\n this.upperCanvas.style.cursor = 'cross-hair';\n }\n this.upperCanvas.style.cursor = 'default';\n }\n }\n }\n else if (this.togglePan) {\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n }\n else {\n if (this.currObjType.isCustomCrop || this.togglePen) {\n this.upperCanvas.style.cursor = 'crosshair';\n }\n else {\n this.upperCanvas.style.cursor = 'default';\n }\n }\n if (this.upperCanvas.style.cursor === 'default') {\n if (this.objColl.length > 0) {\n this.setCursorFromObj(x, y, this.objColl, ratio);\n }\n }\n };\n ImageEditor.prototype.setCursorFromObj = function (x, y, obj, ratio) {\n if (this.togglePan) {\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n }\n else {\n for (var i = 0; i < obj.length; i++) {\n var actObj = extend({}, obj[i], {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(obj[i], ratio, true);\n }\n if (x >= (actObj.topLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'nw-resize';\n break;\n }\n else if (x >= (actObj.topCenterCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topCenterCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topCenterCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topCenterCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'n-resize';\n break;\n }\n else if (x >= (actObj.topRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'ne-resize';\n break;\n }\n else if (x >= (actObj.centerLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.centerLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.centerLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.centerLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'w-resize';\n break;\n }\n else if (x >= (actObj.centerRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.centerRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.centerRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.centerRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'e-resize';\n break;\n }\n else if (x >= (actObj.bottomLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'sw-resize';\n break;\n }\n else if (x >= (actObj.bottomCenterCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomCenterCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomCenterCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomCenterCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 's-resize';\n break;\n }\n else if (x >= (actObj.bottomRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'se-resize';\n break;\n }\n else if ((x >= actObj.activePoint.startX &&\n x <= actObj.activePoint.endX) && (y >= actObj.activePoint.startY &&\n y <= actObj.activePoint.endY)) {\n this.upperCanvas.style.cursor = 'move';\n break;\n }\n else {\n if (this.currObjType.isCustomCrop) {\n this.upperCanvas.style.cursor = 'cross-hair';\n }\n this.upperCanvas.style.cursor = 'default';\n }\n }\n }\n };\n ImageEditor.prototype.setCursorForZoomState = function (obj, ratio, isMouseMove) {\n var tempObj = extend({}, obj, {}, true);\n tempObj.activePoint.startX = (tempObj.activePoint.startX / ratio.width) * this.factor;\n tempObj.activePoint.startY = (tempObj.activePoint.startY / ratio.width) * this.factor;\n tempObj.activePoint.endX = (tempObj.activePoint.endX / ratio.width) * this.factor;\n tempObj.activePoint.endY = (tempObj.activePoint.endY / ratio.width) * this.factor;\n tempObj.activePoint.width = tempObj.activePoint.endX - tempObj.activePoint.startX;\n tempObj.activePoint.height = tempObj.activePoint.endY - tempObj.activePoint.startY;\n this.updateActiveObject(ratio, tempObj.activePoint, tempObj, isMouseMove);\n tempObj.topLeftCircle.radius = (tempObj.topLeftCircle.radius / ratio.width) * this.factor;\n return tempObj;\n };\n ImageEditor.prototype.downloadImg = function (blob, fileName) {\n var a = document.createElement('a');\n a.href = blob;\n a.target = '_parent';\n a.download = fileName;\n (document.body || document.documentElement).appendChild(a);\n a.click();\n a.parentNode.removeChild(a);\n };\n ImageEditor.prototype.toSVGImg = function (fileName) {\n var dataUrl = this.lowerCanvas.toDataURL();\n var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('width', this.lowerCanvas.style.maxWidth);\n svg.setAttribute('height', this.lowerCanvas.style.maxHeight);\n var XLinkNS = 'http://www.w3.org/1999/xlink';\n var img = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n img.setAttributeNS(null, 'height', this.lowerCanvas.height.toString());\n img.setAttributeNS(null, 'width', this.lowerCanvas.width.toString());\n img.setAttributeNS(XLinkNS, 'xlink:href', dataUrl);\n svg.appendChild(img);\n var prefix = 'data:image/svg+xml;base64,';\n var header = '<svg' + ' xmlns=\"http://www.w3.org/2000/svg\"' + ' xmlns:xlink=\"http://www.w3.org/1999/xlink\"'\n + (\" width=\\\"\" + this.lowerCanvas.width + \"\\\"\") + (\" height=\\\"\" + this.lowerCanvas.height + \"\\\"\") + '>';\n var footer = '</svg>';\n var body = svg.innerHTML;\n var data = header + body + footer;\n var svgDataUrl = prefix + btoa(data);\n if (fileName === null) {\n return svgDataUrl;\n }\n else {\n this.downloadImg(svgDataUrl, fileName + '.' + 'svg');\n return null;\n }\n };\n ImageEditor.prototype.toBlobFn = function (fileName, type) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.lowerCanvas.toBlob(function (blob) {\n var blobUrl = URL.createObjectURL(blob);\n proxy.baseImg.src = blobUrl;\n proxy.downloadImg(blobUrl, fileName + '.' + type);\n }, 'image/png');\n };\n ImageEditor.prototype.addLetter = function (letter) {\n if (this.textBox.style.display === 'none' && (this.currObjType.isText || this.activeObj.shape === 'text')) {\n if (letter === 'Backspace') {\n this.keyHistory = this.keyHistory.slice(0, -1);\n }\n else {\n this.keyHistory += letter;\n }\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.keyHistory + this.tempKeyHistory).width\n + this.activeObj.textSettings.fontSize * 0.5;\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n this.upperContext.fillText(this.keyHistory + this.tempKeyHistory, this.activeObj.activePoint.startX, this.activeObj.activePoint.startY +\n this.activeObj.textSettings.fontSize);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.currObjType.isText = true;\n this.setActivePoint(width, height);\n }\n };\n ImageEditor.prototype.updateFontStyles = function (isTextBox) {\n this.upperContext.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n this.upperContext.fillStyle = this.activeObj.strokeSettings.strokeColor;\n var textStyle = '';\n if (this.activeObj.textSettings.bold) {\n textStyle = 'bold ';\n }\n if (this.activeObj.textSettings.italic) {\n textStyle = 'italic ';\n }\n if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n textStyle = 'italic bold ';\n }\n var fontSize = isTextBox ? parseFloat(this.textBox.style.fontSize) : this.activeObj.textSettings.fontSize;\n var fontFamily = this.textBox.style.display === 'block' ? this.textBox.style.fontFamily : this.activeObj.textSettings.fontFamily;\n this.upperContext.font = textStyle + fontSize + 'px' + ' ' + fontFamily;\n };\n ImageEditor.prototype.updateInMemoryCanvas = function (operation) {\n if (!this.disabled) {\n var imgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.imgDataColl.push({ operation: operation, value: imgData });\n this.inMemoryCanvas.width = imgData.width;\n this.inMemoryCanvas.height = imgData.height;\n this.inMemoryContext.putImageData(imgData, 0, 0);\n }\n };\n ImageEditor.prototype.drawBaseImg = function () {\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.inMemoryCanvas.width = this.lowerCanvas.width = this.imgDataColl[0].value.width;\n this.inMemoryCanvas.height = this.lowerCanvas.height = this.imgDataColl[0].value.height;\n this.inMemoryContext.putImageData(this.imgDataColl[0].value, 0, 0);\n var maxDimension = this.calcMaxDimension(this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.style.left = this.upperCanvas.style.left = (this.element.clientWidth - maxDimension.width) / 2 + 1 + 'px';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = (this.element.clientHeight - this.toolbarHeight - maxDimension.height) / 2 + 1 + 'px';\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n };\n ImageEditor.prototype.calcPrevRatio = function () {\n var oldWidthRatio;\n var oldHeightRatio;\n var maxDimension;\n if (this.degree === 0 || this.degree % 180 === 0) {\n maxDimension = this.calcMaxDimension(this.baseImg.height, this.baseImg.width);\n oldWidthRatio = this.baseImg.height / maxDimension.width;\n oldHeightRatio = this.baseImg.width / maxDimension.height;\n }\n else {\n maxDimension = this.calcMaxDimension(this.baseImg.width, this.baseImg.height);\n oldWidthRatio = this.baseImg.width / maxDimension.width;\n oldHeightRatio = this.baseImg.height / maxDimension.height;\n }\n return { width: oldWidthRatio, height: oldHeightRatio };\n };\n ImageEditor.prototype.textFlipDegree = function (canvasDraw, startX, startY) {\n var rows = this.activeObj.keyHistory.split('\\n');\n var height = this.activeObj.textSettings.fontSize;\n var lineHeight = ((height * rows.length) - (this.activeObj.textSettings.fontSize * rows.length)) / rows.length;\n var yPoint = (this.activeObj.textSettings.fontSize * 0.85) + lineHeight;\n for (var i = 0; i < rows.length; i++) {\n var text = rows[i];\n if (i > 0) {\n if (i === 1) {\n yPoint -= (this.activeObj.textSettings.fontSize * 0.85);\n }\n yPoint += this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.15;\n }\n canvasDraw.fillText(text, startX + this.activeObj.textSettings.fontSize * 0.15, startY +\n yPoint + (i > 0 ? this.activeObj.textSettings.fontSize * 0.25 : -this.activeObj.textSettings.fontSize * 0.35));\n }\n };\n ImageEditor.prototype.rotateText = function (canvasDraw) {\n var startX = this.activeObj.activePoint.startX;\n var startY = this.activeObj.activePoint.startY;\n var degree;\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (degree % 360 === 0 && (this.degree !== -360 || this.currFlipState === '')) {\n startX = this.activeObj.activePoint.startX + this.activeObj.textSettings.fontSize * 0.15;\n startY = this.activeObj.activePoint.startY + (this.activeObj.activePoint.endY - this.activeObj.activePoint.startY);\n var rows = this.activeObj.keyHistory.split('\\n');\n for (var i = 0; i < rows.length; i++) {\n startY = this.activeObj.activePoint.startY + (i * this.activeObj.textSettings.fontSize +\n this.activeObj.textSettings.fontSize * 0.25);\n canvasDraw.fillText(rows[i], startX, startY);\n }\n }\n else if (degree % 90 === 0 && degree % 180 !== 0) {\n canvasDraw.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n canvasDraw.rotate(Math.PI / 180 * degree);\n canvasDraw.translate(-this.lowerCanvas.height / 2, -this.lowerCanvas.width / 2);\n if (degree % 90 === 0 && degree % 270 !== 0) {\n startY = (this.lowerCanvas.width - this.activeObj.activePoint.endX) + this.activeObj.textSettings.fontSize * 0.4;\n startX = this.activeObj.activePoint.startY;\n }\n else if (degree % 270 === 0) {\n startX = this.lowerCanvas.height - this.activeObj.activePoint.endY;\n startY = this.activeObj.activePoint.startX + this.activeObj.textSettings.fontSize * 0.4;\n }\n this.textFlipDegree(canvasDraw, startX, startY);\n canvasDraw.translate(this.lowerCanvas.height / 2, this.lowerCanvas.width / 2);\n canvasDraw.rotate(Math.PI / 180 * -degree);\n canvasDraw.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n }\n else {\n canvasDraw.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n canvasDraw.rotate(Math.PI / 180 * degree);\n startX = this.lowerCanvas.width - this.activeObj.activePoint.endX;\n startY = (this.lowerCanvas.height - this.activeObj.activePoint.endY) + this.activeObj.textSettings.fontSize * 0.4;\n canvasDraw.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n this.textFlipDegree(canvasDraw, startX, startY);\n canvasDraw.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n canvasDraw.rotate(Math.PI / 180 * -degree);\n canvasDraw.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n }\n if (this.degree === 360 || this.degree === -360) {\n this.degree = 0;\n }\n };\n ImageEditor.prototype.redrawSelection = function () {\n var ratio = this.calcRatio();\n this.activeObj.activePoint.startX = 0;\n this.activeObj.activePoint.startY = 0;\n this.activeObj.activePoint.endX = this.lowerCanvas.width;\n this.activeObj.activePoint.endY = this.lowerCanvas.height;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n };\n ImageEditor.prototype.redrawObj = function (degree) {\n if (this.objColl.length > 0) {\n if (degree === 'horizontal' || degree === 'vertical' || degree === 'Horizontal' || degree === 'Vertical') {\n this.updateCurrentActiveObjPoint(degree);\n }\n else if (degree === 90 || degree === -90) {\n this.updateCurrentActiveObjPoint(degree);\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n }\n else {\n this.updateCurrentActiveObjPoint('zoom');\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n }\n }\n else if (this.objColl.length === 0 && (degree === 'horizontal' || degree === 'vertical' || degree === 'Horizontal' || degree === 'Vertical')) {\n if (this.activeObj.horTopLine !== undefined && (this.activeObj.shape === undefined)) {\n this.redrawSelection();\n }\n else if (this.activeObj.horTopLine !== undefined && this.activeObj.shape !== undefined) {\n var splitWords = this.activeObj.shape.split('-');\n if (splitWords[0] === 'crop') {\n this.select(splitWords[1]);\n }\n }\n }\n else if ((degree === 'horizontal' || degree === 'vertical' || degree === 'Horizontal' || degree === 'Vertical')) {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords !== undefined && splitWords[0] === 'crop') {\n this.select(splitWords[1]);\n }\n else {\n this.redrawSelection();\n }\n }\n };\n ImageEditor.prototype.updateCurrentActiveObjPoint = function (degree) {\n var oldRatio = this.calcPrevRatio();\n var ratio = this.calcRatio();\n var currActObjIndex;\n for (var index = 0; index < this.objColl.length; index++) {\n if (this.activeObj.shape === this.objColl[index].shape &&\n this.activeObj.activePoint.startX === this.objColl[index].activePoint.startX &&\n this.activeObj.activePoint.startY === this.objColl[index].activePoint.startY &&\n this.activeObj.activePoint.endX === this.objColl[index].activePoint.endX &&\n this.activeObj.activePoint.endY === this.objColl[index].activePoint.endY &&\n this.activeObj.currIndex === this.objColl[index].currIndex) {\n currActObjIndex = index;\n break;\n }\n }\n if (degree === 'horizontal' || degree === 'vertical' || degree === 'Horizontal' || degree === 'Vertical') {\n if (degree === 'horizontal' || degree === 'Horizontal') {\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].activePoint.startX <= this.lowerCanvas.width / 2) {\n this.objColl[i].activePoint.startX = this.lowerCanvas.width / 2 + ((this.lowerCanvas.width / 2) -\n this.objColl[i].activePoint.endX);\n this.objColl[i].activePoint.endX = this.objColl[i].activePoint.startX + this.objColl[i].activePoint.width;\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n else if (this.objColl[i].activePoint.startX >= this.lowerCanvas.width / 2) {\n this.objColl[i].activePoint.startX = this.lowerCanvas.width - this.objColl[i].activePoint.endX;\n this.objColl[i].activePoint.endX = this.objColl[i].activePoint.startX + this.objColl[i].activePoint.width;\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n }\n }\n else if (degree === 'vertical' || degree === 'Vertical') {\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].activePoint.startY <= this.lowerCanvas.height / 2) {\n this.objColl[i].activePoint.startY = this.lowerCanvas.height / 2 + ((this.lowerCanvas.height / 2) -\n this.objColl[i].activePoint.endY);\n this.objColl[i].activePoint.endY = this.objColl[i].activePoint.startY + this.objColl[i].activePoint.height;\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n else if (this.objColl[i].activePoint.startY >= this.lowerCanvas.height / 2) {\n this.objColl[i].activePoint.startY = this.lowerCanvas.height - this.objColl[i].activePoint.endY;\n this.objColl[i].activePoint.endY = this.objColl[i].activePoint.startY + this.objColl[i].activePoint.height;\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n }\n }\n if (currActObjIndex !== undefined) {\n this.activeObj = extend({}, this.objColl[currActObjIndex], {}, true);\n }\n }\n else if (degree === 90 || degree === -90) {\n for (var i = 0; i < this.objColl.length; i++) {\n this.objColl[i].activePoint.startX /= oldRatio.width;\n this.objColl[i].activePoint.startY /= oldRatio.height;\n this.objColl[i].activePoint.endX /= oldRatio.width;\n this.objColl[i].activePoint.endY /= oldRatio.height;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endX - this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endY - this.objColl[i].activePoint.startY;\n this.objColl[i].strokeSettings.strokeWidth /= (oldRatio.width / this.factor);\n this.calcCurrPoints(degree, this.objColl[i]);\n this.objColl[i].activePoint.endX = this.objColl[i].activePoint.startX + this.objColl[i].activePoint.width;\n this.objColl[i].activePoint.endY = this.objColl[i].activePoint.startY + this.objColl[i].activePoint.height;\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endX - this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endY - this.objColl[i].activePoint.startY;\n }\n for (var i = 0; i < this.objColl.length; i++) {\n this.objColl[i].activePoint.startX *= oldRatio.width;\n this.objColl[i].activePoint.startY *= oldRatio.height;\n this.objColl[i].activePoint.endX *= oldRatio.width;\n this.objColl[i].activePoint.endY *= oldRatio.height;\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endX - this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endY - this.objColl[i].activePoint.startY;\n this.objColl[i].strokeSettings.strokeWidth *= ratio.width;\n }\n for (var i = 0; i < this.objColl.length; i++) {\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n }\n };\n ImageEditor.prototype.calcCurrPoints = function (degree, obj) {\n var oldRatio = this.calcPrevRatio();\n if (degree > 0) {\n var x = obj.activePoint.startX;\n obj.activePoint.startX = (this.lowerCanvas.width / oldRatio.width) - (obj.activePoint.startY + obj.activePoint.width);\n obj.activePoint.startY = x;\n }\n else {\n var y = obj.activePoint.startY;\n obj.activePoint.startY = (this.lowerCanvas.height / oldRatio.height) - (obj.activePoint.startX + obj.activePoint.height);\n obj.activePoint.startX = y;\n }\n };\n ImageEditor.prototype.redrawShape = function (obj) {\n for (var i = 0; i < this.objColl.length; i++) {\n if (JSON.stringify(obj) === JSON.stringify(this.objColl[i])) {\n this.objColl.splice(i, 1);\n break;\n }\n }\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.drawObject('duplicate', obj);\n };\n ImageEditor.prototype.applyActObj = function () {\n var isActObj = false;\n if (this.activeObj.shape !== undefined && this.activeObj.shape === 'text' && this.activeObj.keyHistory === '') {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n else {\n var splitWords = void 0;\n var isCropSelection = false;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if (this.activeObj.activePoint.width !== 0 && this.activeObj.activePoint.height !== 0 && !isCropSelection) {\n for (var i = 0; i < this.objColl.length; i++) {\n if (JSON.stringify(this.activeObj) === JSON.stringify(this.objColl[i])) {\n isActObj = true;\n break;\n }\n }\n if (!isActObj) {\n if (isNullOrUndefined(this.activeObj.currIndex)) {\n this.activeObj.currIndex = 'shape_' + (this.objColl.length + 1);\n }\n var splitWords_2 = this.activeObj.currIndex.split('_');\n var tempObjColl = this.objColl.splice(0, parseInt(splitWords_2[1], 10) - 1);\n tempObjColl.push(extend({}, this.activeObj, {}, true));\n for (var i = 0; i < this.objColl.length; i++) {\n tempObjColl.push(this.objColl[i]);\n }\n this.objColl = tempObjColl;\n tempObjColl = [];\n this.refreshActiveObj();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n this.activeObj.flippedText = false;\n this.currObjType.shape = '';\n this.refreshActiveObj();\n }\n }\n }\n };\n ImageEditor.prototype.apply = function (shape, obj, canvas) {\n if (!this.disabled) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n if ((this.togglePen) && !this.currObjType.isCustomCrop) {\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.upperCanvas.toBlob(function (blob) {\n showSpinner(proxy_1.element);\n proxy_1.element.style.opacity = '0.5';\n proxy_1.lowerContext.clearRect(0, 0, proxy_1.lowerCanvas.width, proxy_1.lowerCanvas.height);\n proxy_1.lowerContext.drawImage(proxy_1.inMemoryCanvas, 0, 0);\n proxy_1.baseImg.src = URL.createObjectURL(blob);\n proxy_1.upperContext.clearRect(0, 0, proxy_1.upperCanvas.width, proxy_1.upperCanvas.height);\n proxy_1.togglePen = false;\n proxy_1.upperCanvas.style.cursor = 'default';\n for (var i = 0, len = proxy_1.objColl.length; i < len; i++) {\n proxy_1.apply(proxy_1.objColl[i].shape, proxy_1.objColl[i], 'duplicate');\n }\n proxy_1.togglePen = true;\n }, 'image/png');\n this.isUndoRedo = false;\n this.degree = 0;\n }\n else {\n canvas = canvas ? canvas : 'original';\n this.currObjType.shape = shape !== undefined ? shape : this.currObjType.shape;\n if (this.currObjType.shape !== '') {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.drawObject(canvas, obj);\n this.activeObj.shape = this.currObjType.shape.toLowerCase();\n if (!shape && this.currObjType.shape !== '' && !this.currObjType.isCustomCrop) {\n this.objColl.push(extend({}, this.activeObj, {}, true));\n }\n this.keyHistory = '';\n }\n this.isUndoRedo = false;\n }\n }\n };\n ImageEditor.prototype.setCenterPoints = function (text, width, height) {\n var renderWidth;\n var renderHeight;\n if (text && width && height) {\n renderWidth = width;\n renderHeight = height;\n }\n else {\n renderWidth = this.activeObj.activePoint.width;\n renderHeight = this.activeObj.activePoint.height;\n }\n if (this.factor === 1) {\n this.activeObj.activePoint.startX = (this.lowerCanvas.width / 2) - renderWidth / 2;\n this.activeObj.activePoint.startY = (this.lowerCanvas.height / 2) - renderHeight / 2;\n this.activeObj.activePoint.endX = (this.lowerCanvas.width / 2) + renderWidth / 2;\n this.activeObj.activePoint.endY = (this.lowerCanvas.height / 2) + renderHeight / 2;\n }\n else {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n var visibleWidth = endPoint.x - this.pannStart.startX;\n var visibleHeight = endPoint.y - this.pannStart.startY;\n var centerX = (this.dragPoint.startX = visibleWidth / 2) + this.pannStart.startX;\n var centerY = this.dragPoint.startY = visibleHeight / 2 + this.pannStart.startY;\n this.activeObj.activePoint.startX = centerX - (renderWidth / 2);\n this.activeObj.activePoint.startY = centerY - (renderHeight / 2);\n this.activeObj.activePoint.endX = centerX + (renderWidth / 2);\n this.activeObj.activePoint.endY = centerY + (renderHeight / 2);\n }\n if (text && width && height) {\n this.textStartPoints.x = this.activeObj.activePoint.startX;\n this.textStartPoints.y = this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.drawShape = function (type, strokeWidth, strokeColor, fillColor, start, width, height) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n var ratio = this.calcRatio();\n this.redrawActObj();\n this.togglePen = false;\n this.keyHistory = '';\n this.upperCanvas.style.display = 'block';\n this.refreshActiveObj();\n this.currObjType.shape = type;\n if (this.currObjType.shape.toLowerCase() !== 'freehanddraw' && this.currObjType.shape.toLowerCase() !== '') {\n this.activeObj.shape = this.currObjType.shape.toLowerCase();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n this.activeObj.strokeSettings.strokeWidth = strokeWidth ? strokeWidth : this.activeObj.strokeSettings.strokeWidth;\n this.activeObj.strokeSettings.strokeColor = strokeColor ? strokeColor : this.activeObj.strokeSettings.strokeColor;\n this.activeObj.strokeSettings.fillColor = fillColor ? fillColor : this.activeObj.strokeSettings.fillColor;\n var tempWidth = 100 / this.factor;\n var tempHeight = 100 / this.factor;\n this.activeObj.activePoint.width = tempWidth * ratio.width;\n this.activeObj.activePoint.height = tempHeight * ratio.height;\n if (this.currObjType.shape.toLowerCase() === 'line') {\n this.activeObj.lineDraw = 'horizontal';\n this.activeObj.activePoint.height /= 2;\n }\n else if (this.currObjType.shape.toLowerCase() === 'rectangle') {\n this.activeObj.activePoint.width += this.activeObj.activePoint.width / 2;\n }\n if (this.currObjType.shape.toLowerCase() === 'ellipse' && width) {\n this.activeObj.activePoint.width = 2 * width;\n this.activeObj.activePoint.height = 2 * height;\n }\n if (width && height) {\n this.activeObj.activePoint.width = width;\n this.activeObj.activePoint.height = height;\n }\n if (start !== undefined) {\n this.activeObj.activePoint.startX = start.x;\n this.activeObj.activePoint.startY = start.y;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n }\n else {\n this.setCenterPoints();\n }\n this.currObjType.isDragging = this.currObjType.isCustomCrop = false;\n this.activeObj.shapeDegree = this.degree;\n this.activeObj.flipObjColl = [];\n this.drawObject('duplicate');\n this.refreshToolbar('shapes');\n }\n }\n };\n ImageEditor.prototype.drawShapeText = function (text, fontFamily, fontSize, bold, italic, strokeColor, x, y) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n var ratio = this.calcRatio();\n this.togglePen = false;\n this.redrawActObj();\n this.keyHistory = '';\n this.refreshActiveObj();\n var shapeChangingArgs = { action: 'insert', previousShapeSettings: this.activeObj, currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n this.currObjType.isCustomCrop = false;\n this.currObjType.isText = this.currObjType.isInitialText = true;\n this.upperCanvas.style.display = 'block';\n this.currObjType.shape = this.activeObj.shape = 'text';\n if (isNullOrUndefined(this.activeObj.textSettings)) {\n this.activeObj.textSettings = this.textSettings;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n this.activeObj.strokeSettings.strokeColor = strokeColor ? strokeColor : this.activeObj.strokeSettings.strokeColor;\n this.activeObj.textSettings.text = text ? text : this.activeObj.textSettings.text;\n this.activeObj.textSettings.fontFamily = fontFamily ? fontFamily : this.activeObj.textSettings.fontFamily;\n this.activeObj.textSettings.text = text ? text : this.activeObj.textSettings.text;\n this.activeObj.textSettings.fontFamily = fontFamily ? fontFamily : this.activeObj.textSettings.fontFamily;\n this.activeObj.textSettings.fontSize = fontSize ? fontSize : this.activeObj.textSettings.fontSize;\n this.activeObj.textSettings.bold = bold ? bold : this.activeObj.textSettings.bold;\n this.activeObj.textSettings.italic = italic ? italic : this.activeObj.textSettings.italic;\n if (isNullOrUndefined(this.activeObj.textSettings.fontSize)) {\n if (this.lowerCanvas.width > this.lowerCanvas.height) {\n this.activeObj.textSettings.fontSize = Math.floor((this.lowerCanvas.width / 20));\n }\n else {\n this.activeObj.textSettings.fontSize = Math.floor((this.lowerCanvas.height / 20));\n }\n if (this.activeObj.textSettings.fontSize < 20 * (ratio.width + ratio.height)) {\n this.activeObj.textSettings.fontSize = 20 * (ratio.width + ratio.height);\n }\n }\n this.activeObj.shapeDegree = this.degree;\n this.activeObj.shapeFlip = this.currFlipState;\n this.activeObj.flipObjColl = [];\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.activeObj.textSettings.text).width +\n this.activeObj.textSettings.fontSize * 0.5;\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n if (!isNullOrUndefined(x) && !isNullOrUndefined(y)) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.startY = y;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + width;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + height;\n }\n else {\n this.setCenterPoints(true, width, height);\n }\n this.addLetter(this.activeObj.textSettings.text);\n this.refreshToolbar('text');\n }\n };\n ImageEditor.prototype.drawPen = function (context) {\n var ratio = this.calcRatio();\n context = context ? context : this.upperContext;\n this.upperCanvas.style.display = 'block';\n this.canvasRatio = this.calcRatio();\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings.strokeWidth)) {\n this.activeObj.strokeSettings.strokeWidth = (ratio.width + ratio.height) * 0.4;\n }\n context.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n context.lineWidth = 2 * (this.activeObj.strokeSettings.strokeWidth) / this.factor;\n context.beginPath();\n context.moveTo(this.prevX, this.prevY);\n context.lineTo(this.currX, this.currY);\n context.stroke();\n context.closePath();\n };\n ImageEditor.prototype.getObjDetails = function (obj) {\n var shapeDetails = {};\n shapeDetails.id = obj.currIndex;\n shapeDetails.type = obj.shape;\n shapeDetails.startX = obj.activePoint.startX;\n shapeDetails.startY = obj.activePoint.startY;\n if (obj.shape === 'rectangle') {\n shapeDetails.width = obj.activePoint.width;\n shapeDetails.height = obj.activePoint.height;\n shapeDetails.strokeColor = obj.strokeSettings.strokeColor;\n shapeDetails.fillColor = obj.strokeSettings.fillColor;\n shapeDetails.strokeWidth = obj.strokeSettings.strokeWidth;\n }\n else if (obj.shape === 'ellipse') {\n shapeDetails.radius = obj.activePoint.width / 2;\n shapeDetails.strokeColor = obj.strokeSettings.strokeColor;\n shapeDetails.fillColor = obj.strokeSettings.fillColor;\n shapeDetails.strokeWidth = obj.strokeSettings.strokeWidth;\n }\n else if (obj.shape === 'line') {\n shapeDetails.length = obj.activePoint.width;\n shapeDetails.strokeColor = obj.strokeSettings.strokeColor;\n shapeDetails.strokeWidth = obj.strokeSettings.strokeWidth;\n }\n else if (obj.shape === 'text') {\n shapeDetails.text = obj.keyHistory;\n shapeDetails.fontSize = obj.textSettings.fontSize;\n shapeDetails.color = obj.strokeSettings.strokeColor;\n shapeDetails.fontStyle = [];\n if (obj.textSettings.bold) {\n shapeDetails.fontStyle.push('bold');\n }\n if (obj.textSettings.italic) {\n shapeDetails.fontStyle.push('italic');\n }\n }\n return shapeDetails;\n };\n ImageEditor.prototype.isPointsInRange = function (x, y) {\n var inRange = false;\n if (this.factor === 1) {\n if (x >= 0 && y >= 0 && x <= this.lowerCanvas.width && y <= this.lowerCanvas.width) {\n inRange = true;\n }\n }\n else {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n if (x >= this.pannStart.startX && y >= this.pannStart.startY && x <= endPoint.x && y <= endPoint.y) {\n inRange = true;\n }\n }\n return inRange;\n };\n ImageEditor.prototype.rotateMultiple = function (length, degree) {\n for (var i = 0; i < length; i++) {\n if (degree > 0) {\n this.degree += 90;\n }\n else {\n this.degree -= 90;\n }\n if (this.degree === 360) {\n this.degree = 0;\n }\n this.lowerContext.save();\n this.setMaximumDimension(90 * (i + 1));\n this.lowerContext.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n if (degree > 0) {\n this.lowerContext.rotate(Math.PI / 180 * 90);\n }\n else {\n this.lowerContext.rotate(Math.PI / 180 * -90);\n }\n this.lowerCanvas.style.left = this.upperCanvas.style.left = (this.element.clientWidth - parseInt(this.lowerCanvas.style.maxWidth, 10) - 18) / 2 + 1 + 'px';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = (this.element.clientHeight - this.toolbarHeight - parseInt(this.lowerCanvas.style.maxHeight, 10)) / 2 + 1 + 'px';\n this.lowerContext.drawImage(this.inMemoryCanvas, -this.lowerCanvas.height / 2, -this.lowerCanvas.width / 2);\n if (degree > 0) {\n this.lowerContext.rotate(Math.PI / 180 * -90);\n }\n else {\n this.lowerContext.rotate(Math.PI / 180 * 90);\n }\n this.lowerContext.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n this.lowerContext.restore();\n this.currImgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n if (degree > 0) {\n this.redrawObj(90);\n }\n else {\n this.redrawObj(-90);\n }\n }\n };\n /**\n * Clear a current selection.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.clearSelection = function () {\n if (!this.disabled && this.imgDataColl.length > 0) {\n this.togglePen = false;\n this.refreshActiveObj();\n this.dragElement = '';\n this.dragPoint.startX = this.dragPoint.startY = this.dragPoint.endX = this.dragPoint.endY = 0;\n this.currObjType.shape = '';\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.currObjType.isActiveObj = true;\n this.currObjType.isCustomCrop = false;\n this.upperCanvas.style.cursor = 'default';\n }\n };\n /**\n * Crops an image based on the selection.\n * The selection can be done through programmatically using the select method or through UI interactions.\n *\n * @returns {boolean}.\n */\n ImageEditor.prototype.crop = function () {\n var isCrop = false;\n var splitWords;\n var transitionArgs = { startPoint: { x: this.activeObj.activePoint.startX, y: this.activeObj.activePoint.startY }, endPoint: { x: this.activeObj.activePoint.endX, y: this.activeObj.activePoint.endY } };\n this.trigger('cropping', transitionArgs);\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (!this.disabled && this.activeObj.horTopLine !== undefined && (this.currObjType.isCustomCrop || splitWords[0] === 'crop')) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_2 = this;\n isCrop = true;\n this.upperCanvas.style.display = 'none';\n var widthRatio = void 0;\n var heightRatio = void 0;\n var imgData = void 0;\n var zoomedRotate = false;\n if (this.factor === 1) {\n imgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n widthRatio = this.lowerCanvas.width / parseInt(this.lowerCanvas.style.maxWidth, 10);\n heightRatio = this.lowerCanvas.height / parseInt(this.lowerCanvas.style.maxHeight, 10);\n }\n else {\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n imgData = this.imgDataColl[0].value;\n widthRatio = this.lowerCanvas.width / parseInt(this.lowerCanvas.style.maxWidth, 10);\n heightRatio = this.lowerCanvas.height / parseInt(this.lowerCanvas.style.maxHeight, 10);\n if (this.degree !== 0 && this.flipState !== '') {\n this.degree = 0;\n }\n if (this.degree !== 0) {\n zoomedRotate = true;\n this.lowerCanvas.width = this.upperCanvas.width = this.baseImg.width;\n this.lowerCanvas.height = this.upperCanvas.height = this.baseImg.height;\n var tempObj = extend({}, this.activeObj, {}, true);\n this.factor = 1;\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n if (this.degree === 180) {\n this.updateInMemoryContext(imgData);\n }\n var maxDimension = this.calcMaxDimension(tempObj.activePoint.width, tempObj.activePoint.height);\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.width = this.upperCanvas.width = maxDimension.width * widthRatio;\n this.lowerCanvas.height = this.upperCanvas.height = maxDimension.height * heightRatio;\n if (this.degree !== 180) {\n this.updateInMemoryContext(imgData);\n }\n this.degree = 0;\n this.lowerContext.drawImage(this.inMemoryCanvas, tempObj.activePoint.startX, tempObj.activePoint.startY, tempObj.activePoint.width, tempObj.activePoint.height, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n if (this.flipState !== '') {\n zoomedRotate = true;\n var tempObj = extend({}, this.activeObj, {}, true);\n this.flipState = '';\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.updateInMemoryContext(imgData);\n var maxDimension = this.calcMaxDimension(tempObj.activePoint.width, tempObj.activePoint.height);\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.width = this.upperCanvas.width = maxDimension.width * widthRatio;\n this.lowerCanvas.height = this.upperCanvas.height = maxDimension.height * heightRatio;\n this.lowerContext.drawImage(this.inMemoryCanvas, tempObj.activePoint.startX, tempObj.activePoint.startY, tempObj.activePoint.width, tempObj.activePoint.height, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n }\n if (!zoomedRotate) {\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = imgData.width;\n this.inMemoryCanvas.height = imgData.height;\n this.inMemoryContext.putImageData(imgData, 0, 0);\n this.updateInMemoryContext(imgData);\n var maxDimension = this.calcMaxDimension(this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.width = this.upperCanvas.width = maxDimension.width * widthRatio;\n this.lowerCanvas.height = this.upperCanvas.height = maxDimension.height * heightRatio;\n var cssObj = window.getComputedStyle(this.lowerCanvas);\n this.lowerCanvas.style.left = this.upperCanvas.style.left =\n ((this.element.clientWidth - parseInt(cssObj.width, 10) - 18) / 2) + 1 + 'px';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = ((this.element.clientHeight - this.toolbarHeight\n - parseInt(cssObj.height, 10)) / 2) + 1 + 'px';\n this.lowerContext.drawImage(this.inMemoryCanvas, this.activeObj.activePoint.startX, this.activeObj.activePoint.startY, this.activeObj.activePoint.width, this.activeObj.activePoint.height, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n if (this.activeObj.shape === 'crop-circle') {\n var imgData_1 = this.lowerContext.getImageData(0, 0, this.baseImg.width, this.baseImg.height);\n this.inMemoryCanvas.width = imgData_1.width;\n this.inMemoryCanvas.height = imgData_1.height;\n this.inMemoryContext.putImageData(imgData_1, 0, 0);\n this.lowerContext.save();\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.baseImg.width, this.baseImg.height);\n this.lowerContext.globalCompositeOperation = 'destination-in';\n this.lowerContext.beginPath();\n this.lowerContext.arc(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2, this.lowerCanvas.width / 2, 0, Math.PI * 2);\n this.lowerContext.closePath();\n this.lowerContext.fill();\n this.lowerContext.restore();\n this.currObjType.isActiveObj = true;\n }\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n var blobUrl_1;\n var data_1;\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.lowerCanvas.toBlob(function (blob) {\n blobUrl_1 = URL.createObjectURL(blob);\n proxy_2.isUndoRedo = false;\n proxy_2.baseImg.src = blobUrl_1;\n data_1 = proxy_2.lowerContext.getImageData(0, 0, proxy_2.lowerCanvas.width, proxy_2.lowerCanvas.height);\n proxy_2.imgDataColl = [];\n if (!proxy_2.isUndoRedo) {\n proxy_2.updateUndoRedoColl('crop', data_1, proxy_2.objColl);\n }\n proxy_2.isUndoRedo = false;\n }, 'image/png');\n this.objColl = [];\n this.refreshActiveObj();\n this.degree = 0;\n this.flipState = '';\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.globalAlpha = 0;\n this.lowerContext.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.factor = 1;\n }\n return isCrop;\n };\n ImageEditor.prototype.updateInMemoryContext = function (imgData) {\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n var temp = extend({}, this.activeObj, {}, true);\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n this.activeObj = temp;\n imgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = imgData.width;\n this.inMemoryCanvas.height = imgData.height;\n this.inMemoryContext.putImageData(imgData, 0, 0);\n };\n /**\n * Flips an image by horizontally or vertically.\n *\n * @param {Direction } direction - Specifies the direction to flip the image.\n * @returns {void}.\n */\n ImageEditor.prototype.flip = function (direction) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.factor !== 1) {\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.factor = 1;\n this.refreshToolbar('main');\n }\n var transitionArgs = { direction: direction };\n this.trigger('flipping', transitionArgs);\n this.lastAction = 'flip';\n this.flipMethod = true;\n var splitWords = [];\n var activeObjShape = void 0;\n if (!isNullOrUndefined(this.activeObj.activePoint)) {\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || splitWords[0] === 'crop') {\n activeObjShape = this.currObjType.isCustomCrop ? 'custom' : splitWords[1];\n }\n }\n this.redrawActObj();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n if (direction.toLowerCase() === 'horizontal') {\n this.lowerContext.translate(this.lowerContext.canvas.width, 0);\n this.lowerContext.scale(-1, 1);\n this.upperContext.translate(this.upperContext.canvas.width, 0);\n this.upperContext.scale(-1, 1);\n this.flipDirection = 'horizontal';\n if (this.flipState === '' || this.flipState.toLowerCase() === 'vertical') {\n this.flipState = 'horizontal';\n }\n if (this.currFlipState.toLowerCase() === 'horizontal') {\n this.currFlipState = '';\n }\n else {\n this.currFlipState = 'horizontal';\n }\n }\n else {\n this.lowerContext.translate(0, this.lowerContext.canvas.height);\n this.lowerContext.scale(1, -1);\n this.upperContext.translate(0, this.upperContext.canvas.height);\n this.upperContext.scale(1, -1);\n this.flipDirection = 'vertical';\n if (this.flipState.toLowerCase() === '' || this.flipState.toLowerCase() === 'horizontal') {\n this.flipState = 'vertical';\n }\n if (this.currFlipState.toLowerCase() === 'vertical') {\n this.currFlipState = '';\n }\n else {\n this.currFlipState = 'vertical';\n }\n }\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.currImgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n if (this.flipState.toLowerCase() === 'horizontal') {\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n this.objColl[i].flippedText = false;\n if (this.objColl[i].shapeFlip !== '' && this.objColl[i].shapeFlip === this.currFlipState) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n else {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n }\n this.lowerContext.translate(this.lowerContext.canvas.width, 0);\n this.lowerContext.scale(-1, 1);\n this.upperContext.translate(this.upperContext.canvas.width, 0);\n this.upperContext.scale(-1, 1);\n this.flipDirection = '';\n }\n else if (this.flipState.toLowerCase() === 'vertical') {\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n this.objColl[i].flippedText = false;\n if (this.objColl[i].shapeFlip !== '' && this.objColl[i].shapeFlip === this.currFlipState) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n else {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n }\n this.lowerContext.translate(0, this.lowerContext.canvas.height);\n this.lowerContext.scale(1, -1);\n this.upperContext.translate(0, this.upperContext.canvas.height);\n this.upperContext.scale(1, -1);\n this.flipDirection = '';\n }\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n if (this.objColl[i].flipObjColl.length === 0) {\n this.objColl[i].flipObjColl.push(direction);\n }\n else if (this.objColl[i].flipObjColl[this.objColl[i].flipObjColl.length - 1] === direction) {\n this.objColl[i].flipObjColl.pop();\n }\n else {\n this.objColl[i].flipObjColl.push(direction);\n }\n }\n this.redrawObj(direction.toLowerCase());\n if (this.flipState === '') {\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n }\n this.refreshActiveObj();\n if (!this.isUndoRedo) {\n this.updateUndoRedoColl('flip', direction, this.objColl);\n }\n this.isUndoRedo = this.flipMethod = false;\n if (!isNullOrUndefined(activeObjShape)) {\n if (activeObjShape === 'custom') {\n this.activeObj.activePoint = { startX: 0, startY: 0, endX: this.lowerCanvas.width,\n endY: this.lowerCanvas.height, width: this.lowerCanvas.width, height: this.lowerCanvas.height };\n this.updateActiveObject(this.calcRatio(), this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n }\n else {\n this.select(activeObjShape);\n }\n }\n }\n };\n /**\n * Return an image as ImageData.\n *\n * @returns {ImageData}.\n */\n ImageEditor.prototype.getImageData = function () {\n var data = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n return data;\n };\n /**\n * Load/opens an image for editing within an image editor.\n *\n * @param {string | ImageData } data - Specifies url of the Image or image data.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.open = function (data) {\n if (!this.disabled) {\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n var toolbar_10 = document.querySelector('#' + this.element.id + '_currPos');\n if (toolbar_10) {\n toolbar_10.style.display = 'none';\n }\n if (this.defToolbarItems.length === 0 &&\n (isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n this.toolbarHeight = 0;\n }\n if (isNullOrUndefined(this.toolbarTemplate)) {\n this.update();\n }\n var type = typeof (data);\n if (type === 'string') {\n this.imageOnLoad(data);\n }\n else {\n this.lowerCanvas = document.querySelector('#' + this.element.id + '_lowerCanvas');\n this.upperCanvas = document.querySelector('#' + this.element.id + '_upperCanvas');\n this.lowerContext = this.lowerCanvas.getContext('2d');\n this.upperContext = this.upperCanvas.getContext('2d');\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = this.baseImg.width = data.width;\n this.inMemoryCanvas.height = this.baseImg.height = data.height;\n this.inMemoryContext.putImageData(data, 0, 0);\n this.imgDataColl.push({ operation: 'open', value: data });\n this.lowerCanvas.width = this.upperCanvas.width = data.width;\n this.lowerCanvas.height = this.upperCanvas.height = data.height;\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.updateCanvas();\n hideSpinner(this.element);\n this.element.style.opacity = '1';\n }\n }\n };\n /**\n * Reset all the changes and revert to original image.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.reset = function () {\n if (!this.disabled) {\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.upperContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.upperContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n if (this.imgDataColl.length > 0) {\n if (this.imgDataColl[0].operation === 'freehanddraw') {\n this.imgDataColl.splice(0, 1);\n this.imgDataColl.splice(1, 1);\n }\n this.inMemoryCanvas.width = this.imgDataColl[0].value.width;\n this.inMemoryCanvas.height = this.imgDataColl[0].value.height;\n this.inMemoryContext.putImageData(this.imgDataColl[0].value, 0, 0);\n this.redrawImg();\n }\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.baseImg.src = this.baseImgSrc;\n this.factor = 1;\n this.refreshToolbar('main');\n if (Browser.isDevice && document.getElementById(this.element.id + '_bottomToolbar')) {\n getComponent(document.getElementById(this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n this.objColl = [];\n this.imgDataColl = [];\n this.degree = 0;\n this.flipState = this.keyHistory = this.currFlipState = this.flipDirection = '';\n this.upperCanvas.style.display = 'none';\n this.upperCanvas.style.cursor = this.lowerCanvas.style.cursor = 'default';\n this.undoRedoColl = [];\n this.dragCanvas = this.dragged = this.isUndoRedo = this.activeObj.flippedText = this.flipMethod = false;\n this.currImgData = {};\n this.pannStart = { startX: 0, startY: 0, width: 0, height: 0 };\n this.pannEnd = { startX: 0, startY: 0, width: 0, height: 0 };\n this.lowerContext.lineWidth = this.upperContext.lineWidth = undefined;\n this.togglePan = this.togglePen = this.rotateMethod = false;\n this.lastX = this.lastY = 0;\n this.dragStart = { x: 0, y: 0 };\n this.touchEndPoint = {};\n this.prevX = this.currX = this.prevY = this.currY = 0;\n this.lastAction = this.tempKeyHistory = '';\n this.isBoldbtn = this.isItalicbtn = false;\n this.currentToolbar = 'main';\n this.textStartPoints = { x: 0, y: 0 };\n this.fontSizeColl = this.penDrawColl = [];\n this.textBox.value = this.textBox.textContent = '';\n this.textBox.style.display = 'none';\n this.strokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n this.textSettings =\n { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n this.penStrokeWidth = undefined;\n this.tempTextSettings =\n { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n this.refreshActiveObj();\n this.timer = undefined;\n this.isScreenOriented = false;\n this.currObjType = { shape: '', isDragging: false, isActiveObj: false, isText: false, isInitialText: false, isLine: false,\n isInitialLine: false, isCustomCrop: false, isZoomed: false };\n }\n };\n /**\n * Rotate an image to clockwise and anti-clockwise.\n *\n * @param {number} degree - Specifies a degree to rotate an image.\n * positive integer value for clockwise and negative integer value for anti-clockwise rotation.\n *\n * @returns {boolean}.\n */\n ImageEditor.prototype.rotate = function (degree) {\n var isRotate = false;\n if (!this.disabled && this.imgDataColl.length > 0 && (degree % 90 === 0)) {\n isRotate = true;\n var transitionArgs = { degree: degree };\n this.trigger('rotating', transitionArgs);\n var splitWords = [];\n var activeObjShape = void 0;\n if (!isNullOrUndefined(this.activeObj.activePoint)) {\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || splitWords[0] === 'crop') {\n activeObjShape = this.currObjType.isCustomCrop ? 'custom' : splitWords[1];\n }\n }\n this.redrawActObj();\n var factor = this.factor;\n if (this.factor !== 1) {\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.factor = 1;\n this.refreshToolbar('main');\n }\n var length_1 = Math.abs(degree / 90);\n if (length_1 > 1) {\n this.rotateMultiple(length_1, degree);\n }\n else {\n this.degree += degree;\n if (this.degree === 360) {\n this.degree = 0;\n }\n this.lowerContext.save();\n this.setMaximumDimension(this.degree);\n this.lowerContext.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n this.lowerContext.rotate(Math.PI / 180 * degree);\n this.lowerCanvas.style.left = this.upperCanvas.style.left = (this.element.clientWidth - parseInt(this.lowerCanvas.style.maxWidth, 10) - 18) / 2 + 1 + 'px';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = (this.element.clientHeight - this.toolbarHeight - parseInt(this.lowerCanvas.style.maxHeight, 10)) / 2 + 1 + 'px';\n this.lowerContext.drawImage(this.inMemoryCanvas, -this.lowerCanvas.height / 2, -this.lowerCanvas.width / 2);\n this.lowerContext.rotate(Math.PI / 180 * -degree);\n this.lowerContext.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n this.lowerContext.restore();\n this.currImgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.redrawObj(degree);\n }\n if (!isNullOrUndefined(activeObjShape)) {\n if (activeObjShape === 'custom') {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n this.activeObj.activePoint = { startX: this.pannStart.startX, startY: this.pannStart.startY, endX: endPoint.x,\n endY: endPoint.y, width: endPoint.x - this.pannStart.startX, height: endPoint.y - this.pannStart.startY };\n this.updateActiveObject(this.calcRatio(), this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n }\n else {\n this.select(activeObjShape);\n }\n this.refreshToolbar('main', true, true);\n }\n this.factor = 1;\n if (!this.isUndoRedo) {\n this.updateUndoRedoColl('rotate', degree, this.objColl, null);\n }\n this.isUndoRedo = false;\n this.refreshToolbar('main');\n }\n return isRotate;\n };\n /**\n * Export an image using the specified file name and the extension.\n *\n * @param {string} type - Specifies a format of image to be saved.\n * @param {string} fileName – Specifies a file name to be saved\n *\n * @returns {void}.\n */\n ImageEditor.prototype.export = function (type, fileName) {\n var _this = this;\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.togglePen) {\n this.currObjType.isZoomed = true;\n this.applyPenDraw();\n }\n this.applyActObj();\n if (this.factor !== 1) {\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.factor = 1;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n }\n type = type ? type : 'Png';\n this.redrawActObj();\n var beforeSave = { cancel: false, fileName: fileName ? fileName : 'ImageEditor', fileType: type };\n var saved_1 = { fileName: fileName ? fileName : 'ImageEditor', fileType: type };\n this.trigger('beforeSave', beforeSave, function (observableSaveArgs) {\n if (!observableSaveArgs.cancel) {\n fileName = observableSaveArgs.fileName ? observableSaveArgs.fileName : fileName;\n if (type.toLowerCase() === 'svg') {\n fileName = fileName || 'ImageEditor';\n _this.toSVGImg(fileName);\n }\n else if (type.toLowerCase() === 'jpeg') {\n fileName = fileName || 'ImageEditor';\n _this.toBlobFn(fileName, type.toLowerCase());\n }\n else {\n fileName = fileName || 'ImageEditor';\n _this.toBlobFn(fileName, type.toLowerCase());\n }\n _this.trigger('saved', saved_1);\n _this.refreshToolbar('main');\n }\n });\n }\n };\n /**\n * Perform selection in an image editor. The selection helps to crop an image.\n *\n * @param {string} type - Specifies the shape - circle / square / custom selection / pre-defined ratios.\n * @param {number} startX – Specifies the start x-coordinate point of the selection.\n * @param {number} startY – Specifies the start y-coordinate point of the selection.\n * @param {number} width - Specifies the width of the selection area.\n * @param {number} height - Specifies the height of the selection area.\n * @returns {void}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created : () => {\n * imageObj.select('16:9', 10, 10);\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.select = function (type, startX, startY, width, height) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n var ratio = this.calcRatio();\n var points = void 0;\n this.redrawActObj();\n this.refreshActiveObj();\n this.keyHistory = '';\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.upperCanvas.style.display = 'block';\n var cropShape = 'crop-' + type;\n if (cropShape.toLowerCase() === 'crop-custom') {\n if (this.currObjType.shape === '') {\n this.currObjType.isCustomCrop = true;\n this.upperContext.fillStyle = 'rgb(0, 0, 0, 0.5)';\n this.upperContext.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperCanvas.style.cursor = 'crosshair';\n if (Browser.isDevice) {\n var arcRadius = (7.5 * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor;\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n this.activeObj.activePoint = { startX: this.pannStart.startX + arcRadius, startY: this.pannStart.startY + arcRadius,\n endX: endPoint.x - arcRadius, endY: endPoint.y - arcRadius };\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.updateActiveObject(this.calcRatio(), this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n this.upperCanvas.style.cursor = 'default';\n }\n }\n if (startX && startY) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.currObjType.shape = this.activeObj.shape = cropShape.toLowerCase();\n this.activeObj.activePoint.startX = startX + ratio.width;\n this.activeObj.activePoint.startY = startY + ratio.height;\n this.activeObj.activePoint.endX = this.baseImg.width - (2 * ratio.width);\n this.activeObj.activePoint.endY = this.baseImg.height - (2 * ratio.height);\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.drawObject('duplicate');\n }\n }\n else if (cropShape.toLowerCase() === 'crop-canvas') {\n this.upperCanvas.style.display = 'none';\n this.dragCanvas = true;\n }\n else {\n this.currObjType.isCustomCrop = false;\n this.currObjType.shape = cropShape.toLowerCase();\n if (width && height) {\n points = { startX: startX, startY: startY, endX: startX + width, endY: startY + height,\n width: width, height: height };\n }\n else if (width && cropShape === 'crop-circle') {\n points = { startX: startX, startY: startY, endX: startX + width, endY: startY + width,\n width: width, height: width };\n }\n this.activeObj.shape = cropShape.toLowerCase();\n this.drawObject('duplicate', null, null, true, points);\n }\n }\n };\n /**\n * Enable or disable a freehand drawing in an Image Editor.\n *\n * @param {boolean} value - Specifies a value whether enable or disable freehand drawing.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.freeHandDraw = function (value) {\n if (value) {\n this.togglePen = true;\n this.upperCanvas.style.cursor = 'cross-hair';\n this.drawPen();\n }\n else {\n this.upperCanvas.style.cursor = 'default';\n this.applyPenDraw();\n }\n this.refreshToolbar('pen');\n };\n /**\n * Enable or disable a freehand drawing in an Image Editor.\n *\n * @param {boolean} value - Specifies a value whether enable or disable freehand drawing.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.freehandDraw = function (value) {\n this.freeHandDraw(value);\n };\n /**\n * Enable or disable a panning on the Image Editor.\n *\n * @param {boolean} value - Specifies a value whether enable or disable panning.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.pan = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (value) {\n this.togglePan = true;\n this.redrawActObj();\n this.dragCanvas = true;\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n }\n else {\n this.dragCanvas = this.togglePan = false;\n this.refreshActiveObj();\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'default';\n }\n }\n };\n /**\n * Increase / Decrease the magnification of an image.\n *\n * @param {boolean} value - Specifies a value to be zoomed on the image.\n * @returns {void}.\n */\n ImageEditor.prototype.zoom = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if ((this.factor === 1 && value < 0) || (this.factor > 8 && value > 0)) {\n return;\n }\n var splitWords = [];\n var activeObjShape = void 0;\n if (!isNullOrUndefined(this.activeObj.activePoint)) {\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || splitWords[0] === 'crop') {\n activeObjShape = this.currObjType.isCustomCrop ? 'custom' : splitWords[1];\n }\n }\n this.redrawActObj();\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperCanvas.style.cursor = 'default';\n var zoomState = void 0;\n if (value === 3.75 || value === 1) {\n zoomState = 0.1;\n }\n else if (value === -3.75) {\n zoomState = -0.1;\n }\n else {\n zoomState = value;\n }\n if (this.degree !== 0) {\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n }\n if (value === 0.1 || value === -0.1) {\n this.lastX = this.lowerCanvas.width / 2;\n this.lastY = this.lowerCanvas.height / 2;\n }\n if (value > 0) {\n this.zoomImg(3.75);\n }\n else {\n this.zoomImg(-3.75);\n }\n this.refreshActiveObj();\n if (!isNullOrUndefined(activeObjShape)) {\n if (activeObjShape === 'custom') {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n this.activeObj.activePoint = { startX: this.pannStart.startX, startY: this.pannStart.startY, endX: endPoint.x,\n endY: endPoint.y, width: endPoint.x - this.pannStart.startX, height: endPoint.y - this.pannStart.startY };\n this.updateActiveObject(this.calcRatio(), this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n }\n else {\n this.select(activeObjShape);\n }\n this.refreshToolbar('main', true, true);\n }\n if (!this.isUndoRedo) {\n this.updateUndoRedoColl('zoom', zoomState, this.objColl);\n }\n this.isUndoRedo = false;\n var zoomOut = document.querySelector('#' + this.element.id + '_zoomOut');\n if (!isNullOrUndefined(zoomOut) && this.factor === 1) {\n zoomOut.classList.add('e-disabled');\n }\n else if (!isNullOrUndefined(zoomOut)) {\n zoomOut.classList.remove('e-disabled');\n }\n }\n };\n /**\n * Draw ellipse on an image.\n *\n * @param {number} x - Specifies x-coordinate of ellipse.\n * @param {number} y - Specifies y-coordinate of ellipse.\n * @param {number} radiusX - the radius x point for the ellipse.\n * @param {number} radiusY - the radius y point for the ellipse.\n * @param {number} strokeWidth - the stroke width of ellipse.\n * @param {string} strokeColor - the stroke color of ellipse.\n * @param {string} fillColor - the fill color of the ellipse.\n * @returns {boolean}.\n *\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.drawEllipse(10, 10, 40, 60);\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.drawEllipse = function (x, y, radiusX, radiusY, strokeWidth, strokeColor, fillColor) {\n var isEllipse = false;\n var inRange = this.isPointsInRange(x, y);\n if (!this.disabled && this.imgDataColl.length > 0 && inRange) {\n isEllipse = true;\n var shapeChangingArgs = { action: 'insert', previousShapeSettings: this.activeObj, currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.currObjType.isCustomCrop = false;\n var start = { x: x, y: y };\n this.drawShape('ellipse', strokeWidth, strokeColor, fillColor, start, radiusX, radiusY);\n }\n return isEllipse;\n };\n /**\n * Draw line on an image.\n *\n * @param {number} startX – Specifies start point x-coordinate of line.\n * @param {number} startY – Specifies start point y-coordinate of line.\n * @param {number} endX - Specifies end point x-coordinates of line.\n * @param {number} endY - Specifies end point y-coordinates of the line.\n * @param {number} strokeWidth - Specifies the stroke width of line.\n * @param {string} strokeColor - Specifies the stroke color of line.\n * @returns {boolean}.\n */\n ImageEditor.prototype.drawLine = function (startX, startY, endX, endY, strokeWidth, strokeColor) {\n var isLine = false;\n var inRange = this.isPointsInRange(startX, startY);\n if (!this.disabled && this.imgDataColl.length > 0 && inRange) {\n isLine = true;\n var shapeChangingArgs = { action: 'insert', previousShapeSettings: this.activeObj, currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.currObjType.isCustomCrop = false;\n var start = { x: startX, y: startY };\n var width = endX - startX;\n var height = endY - startY;\n this.drawShape('line', strokeWidth, strokeColor, null, start, width, height);\n }\n return isLine;\n };\n /**\n * Draw a rectangle on an image.\n *\n * @param {number} x - Specifies x-coordinate of rectangle.\n * @param {number} y - Specifies y-coordinate of rectangle.\n * @param {number} width - Specifies the width of the rectangle.\n * @param {number} height - Specifies the height of the rectangle.\n * @param {number} strokeWidth - Specifies the stroke width of rectangle.\n * @param {string} strokeColor - Specifies the stroke color of rectangle.\n * @param {string} fillColor - the fill color of the rectangle.\n * @returns {boolean}.\n */\n ImageEditor.prototype.drawRectangle = function (x, y, width, height, strokeWidth, strokeColor, fillColor) {\n var isRectangle = false;\n var inRange = this.isPointsInRange(x, y);\n if (!this.disabled && this.imgDataColl.length > 0 && inRange) {\n isRectangle = true;\n var shapeChangingArgs = { action: 'insert', previousShapeSettings: this.activeObj,\n currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.currObjType.isCustomCrop = false;\n var start = { x: x, y: y };\n this.drawShape('rectangle', strokeWidth, strokeColor, fillColor, start, width, height);\n }\n return isRectangle;\n };\n /**\n * Draw a text on an image.\n *\n * @param {number} x - Specifies x-coordinate of text.\n * @param {number} y - Specifies y-coordinate of text.\n * @param {string} text - Specifies the text to add on an image.\n * @param {string} fontFamily - Specifies the font family of the text.\n * @param {number} fontSize - Specifies the font size of the text.\n * @param {boolean} bold - Specifies whether the text is bold or not.\n * @param {boolean} italic - Specifies whether the text is italic or not.\n * @param {string} color - Specifies font color of the text.\n * @returns {boolean}.\n *\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.drawText(10, 10, 'Syncfusion', 'Arial', 12, true, true, '#000');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n *\n * </script>\n * ```\n */\n ImageEditor.prototype.drawText = function (x, y, text, fontFamily, fontSize, bold, italic, color) {\n var isText = false;\n var inRange = this.isPointsInRange(x, y);\n if (!this.disabled && this.imgDataColl.length > 0 && inRange) {\n isText = true;\n this.drawShapeText(text, fontFamily, fontSize, bold, italic, color, x, y);\n }\n return isText;\n };\n /**\n * Selects a shape based on the given shape id. The id can be got from the public method ‘getShapeSettings’.\n *\n * @param {string} id - Specifies the shape id to select a shape on an image.\n * @returns {boolean}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.selectShape('shape_1');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.selectShape = function (id) {\n this.applyActObj();\n var obj;\n var isSelected;\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].currIndex === id) {\n obj = extend({}, this.objColl[i], {}, true);\n break;\n }\n }\n if (isNullOrUndefined(obj)) {\n isSelected = false;\n }\n else {\n isSelected = true;\n this.activeObj = obj;\n this.redrawShape(this.activeObj);\n if (this.activeObj.shape === 'text') {\n this.refreshToolbar('text');\n }\n else if (this.activeObj.shape === 'pen') {\n this.refreshToolbar('pen');\n }\n else {\n this.refreshToolbar('shapes');\n }\n this.updateToolbarItems(this.calcRatio());\n }\n return isSelected;\n };\n /**\n * Deletes a shape based on the given shape id. The id can be got from the public method getShapeSettings.\n *\n * @param {string} id - Specifies the shape id to delete the shape on an image.\n * @returns {void}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.deleteShape('shape_1');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.deleteShape = function (id) {\n this.applyActObj();\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].currIndex === id) {\n this.objColl.splice(i, 1);\n break;\n }\n }\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.refreshToolbar('main');\n };\n /**\n * Get particular shapes details based on id of the shape which is drawn on an image editor.\n *\n * @param {string} id - Specifies the shape id on an image.\n * @returns {ShapeSettings}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.getShapeSetting('shape_1');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.getShapeSetting = function (id) {\n this.applyActObj();\n var obj;\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].currIndex === id) {\n obj = extend({}, this.objColl[i], {}, true);\n break;\n }\n }\n var shapeDetails = this.getObjDetails(obj);\n return shapeDetails;\n };\n /**\n * Get all the shapes details which is drawn on an image editor.\n *\n * @returns {ShapeSettings[]}.\n */\n ImageEditor.prototype.getShapeSettings = function () {\n this.applyActObj();\n var shapeDetailsColl = [];\n for (var i = 0; i < this.objColl.length; i++) {\n var shapeDetails = this.getObjDetails(this.objColl[i]);\n shapeDetailsColl.push(shapeDetails);\n }\n return shapeDetailsColl;\n };\n /**\n * To refresh the Canvas Wrapper.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.update = function () {\n var canvasWrapper = document.querySelector('#' + this.element.id + '_canvasWrapper');\n canvasWrapper.style.width = this.element.offsetWidth + 'px';\n this.lowerCanvas.width = this.upperCanvas.width = this.element.offsetWidth;\n if (Browser.isDevice) {\n canvasWrapper.style.height = this.element.offsetHeight - (2 * this.toolbarHeight) - 3 + 'px';\n this.lowerCanvas.height = this.upperCanvas.height = this.element.offsetHeight - (2 * this.toolbarHeight) - 3;\n }\n else {\n canvasWrapper.style.height = this.element.offsetHeight - this.toolbarHeight - 1 + 'px';\n this.lowerCanvas.height = this.upperCanvas.height = this.element.offsetHeight - this.toolbarHeight - 1;\n }\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n };\n /**\n * To check whether the undo collection is empty or not.\n *\n * @returns {boolean}.\n * @private\n */\n ImageEditor.prototype.canUndo = function () {\n return false;\n };\n /**\n * To check whether the redo collection is empty or not.\n *\n * @returns {boolean}.\n * @private\n */\n ImageEditor.prototype.canRedo = function () {\n return false;\n };\n /**\n * Erases all the signature strokes signed by user.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.clear = function () {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.clear.call(this);\n }\n };\n /**\n * To draw the signature based on the given text, with the font family and font size.\n *\n * @param {string} text - specify text to be drawn as signature.\n * @param {string} fontFamily - specify font family of a signature.\n * @param {number} fontSize - specify font size of a signature.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.draw = function (text, fontFamily, fontSize) {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.draw.call(this, text, fontFamily, fontSize);\n }\n };\n /**\n * To get the signature as Blob.\n *\n * @param {string} url - specify the url/base 64 string to get blob of the signature.\n * @returns {Blob}.\n * @private\n */\n ImageEditor.prototype.getBlob = function (url) {\n return null;\n };\n /**\n * To check whether the signature is empty or not.\n *\n * @returns {boolean}.\n * @private\n */\n ImageEditor.prototype.isEmpty = function () {\n return false;\n };\n /**\n * To load the signature with the given base 64 string, height and width.\n *\n * @param {string} signature - specify the url/base 64 string to be drawn as signature.\n * @param {number} width - specify the width of the loaded signature image.\n * @param {number} height - specify the height of the loaded signature image.\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.load = function (signature, width, height) {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.load.call(this, signature, width, height);\n }\n };\n /**\n * Undo the last user action.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.undo = function () {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.undo.call(this);\n }\n };\n /**\n * Redo the last user action.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.redo = function () {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.redo.call(this);\n }\n };\n /**\n * To save the signature with the given file type and file name.\n *\n * @param {SignatureFileType} type - specify type of the file to be saved a signature.\n * @param {string} fileName - specify name of the file to be saved a signature.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.save = function (type, fileName) {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.save.call(this, type, fileName);\n }\n };\n /**\n * To save the signature as Blob.\n *\n * @returns {Blob}.\n * @private\n */\n ImageEditor.prototype.saveAsBlob = function () {\n return null;\n };\n /**\n * Returns the persistence data for component.\n *\n * @returns any.\n * @private\n */\n ImageEditor.prototype.getLocalData = function () {\n return null;\n };\n var ImageEditor_1;\n __decorate([\n Property('')\n ], ImageEditor.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"disabled\", void 0);\n __decorate([\n Property('100%')\n ], ImageEditor.prototype, \"height\", void 0);\n __decorate([\n Property('Bootstrap5')\n ], ImageEditor.prototype, \"theme\", void 0);\n __decorate([\n Property()\n ], ImageEditor.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], ImageEditor.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property('100%')\n ], ImageEditor.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], ImageEditor.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property('')\n ], ImageEditor.prototype, \"backgroundImage\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"isReadOnly\", void 0);\n __decorate([\n Property(true)\n ], ImageEditor.prototype, \"saveWithBackground\", void 0);\n __decorate([\n Property('#000000')\n ], ImageEditor.prototype, \"strokeColor\", void 0);\n __decorate([\n Property(0.5)\n ], ImageEditor.prototype, \"minStrokeWidth\", void 0);\n __decorate([\n Property(2)\n ], ImageEditor.prototype, \"maxStrokeWidth\", void 0);\n __decorate([\n Property(0.7)\n ], ImageEditor.prototype, \"velocity\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"enablePersistence\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"beforeSave\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"zooming\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"panning\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"cropping\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"rotating\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"flipping\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"shapeChanging\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"fileOpened\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"saved\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"toolbarCreated\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"toolbarUpdating\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"toolbarItemClicked\", void 0);\n ImageEditor = ImageEditor_1 = __decorate([\n NotifyPropertyChanges\n ], ImageEditor);\n return ImageEditor;\n}(SignatureBase));\nexport { ImageEditor };\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","ImageEditor","_super","options","element","_this","call","degree","isUndoRedo","dragCanvas","dragElement","keyHistory","flipState","mouseDownPoint","x","y","previousPoint","dragPoint","startX","startY","endX","endY","diffPoint","oldPoint","objColl","undoRedoColl","imgDataColl","strokeSettings","strokeColor","fillColor","strokeWidth","textSettings","text","fontFamily","fontSize","bold","italic","underline","tempStrokeSettings","tempTextSettings","toolbarHeight","pannStart","pannEnd","togglePan","lastX","lastY","dragStart","dragged","factor","currFlipState","touchEndPoint","flipMethod","flipDirection","prevX","currX","prevY","currY","togglePen","rotateMethod","isBoldbtn","isItalicbtn","lastAction","currentToolbar","textStartPoints","fontSizeColl","tempKeyHistory","penDrawColl","allowDrag","textRow","activeObj","activePoint","width","height","flipObjColl","currObjType","shape","isDragging","isActiveObj","isText","isInitialText","isLine","isInitialLine","isCustomCrop","isZoomed","defToolbarItems","baseImgSrc","isTimer","isScreenOriented","ImageEditor_1","preRender","id","getUniqueID","Browser","isDevice","classList","add","themeColl","Bootstrap5","primaryColor","secondaryColor","Bootstrap5Dark","Tailwind","TailwindDark","Fluent","FluentDark","Bootstrap4","Bootstrap","BootstrapDark","Material","MaterialDark","Fabric","FabricDark","Highcontrast","defaultLocale","Crop","ZoomIn","ZoomOut","Transform","Annotation","Text","Pen","Reset","Save","Select","RotateLeft","RotateRight","HorizontalFlip","VerticalFlip","OK","Cancel","FillColor","StrokeColor","StrokeWidth","FontFamily","FontStyle","FontSize","FontColor","Pan","Move","Load","Custom","Square","Circle","Ellipse","Rectangle","Line","Default","Bold","Italic","BoldItalic","XSmall","Small","Medium","Large","XLarge","ABC","l10n","L10n","locale","render","initialize","getModuleName","getPersistData","addOnPersist","onPropertyChanged","newProperties","oldProperties","_i","_a","keys","cssClass","removeClass","split","addClass","disabled","unwireEvent","remove","wireEvent","style","theme","updateTheme","upperContext","strokeStyle","fillStyle","destroy","removeAttribute","concat","getAttribute","destroySubComponents","innerHTML","trigger","createToolbar","createCanvas","updateContext","lowerContext","createSpinner","EventHandler","document","keyDownEventHandler","keyUpEventHandler","upperCanvas","mouseDownEventHandler","mouseMoveEventHandler","mouseUpEventHandler","lowerCanvas","canvasMouseDownHandler","canvasMouseMoveHandler","canvasMouseUpHandler","touchStartHandler","findTextPoint","textBox","window","addEventListener","windowResizeHandler","bind","isIos","info","name","screen","orientation","screenOrientation","inputElement","querySelectorAll","btnElement","len","contains","getComponent","detach","select","toPascalCase","str","strArr","toLowerCase","charAt","toUpperCase","slice","join","canvasWrapper","appendChild","createElement","className","attrs","offsetHeight","inMemoryCanvas","setAttribute","offsetWidth","position","backgroundColor","display","resize","getContext","baseImg","crossorigin","cursor","inMemoryContext","isNullOrUndefined","toolbar","toolbarTemplate","toolbarTemplateFn","toolbarItems","align","type","template","Uploader","push","toolbarArea","getElementById","toolbar_1","uploadItems","selected","initToolbarItem","createBottomToolbar","Toolbar","items","created","toolbarType","clicked","defToolbarClicked","createLeftToolbarControls","clientHeight","toolbarElem","initBottomToolbar","getMainToolbarItem","renderAnnotationBtn","renderCropBtn","renderTransformBtn","refreshOverflow","templateID","querySelector","toolbarFn","templateParser","isReact","isAngular","templateColl","nodeType","renderReactTemplates","templateCompiler","trim","compile","error","getLeftToolbarItem","isOkBtn","visible","tooltipText","indexOf","prefixIcon","getConstant","tempToolbarItems","processToolbar","getRightToolbarItem","isApplyOption","getZoomToolbarItem","processSubToolbar","isToolbar","leftItem","rightItem","mainItem","zoomItem","renderSaveBtn","zoomIn","zoomOut","pan","undefined","uploadDiv","uploadElem","getElementsByTagName","uploadBtnElem","onchange","fileSelect","proxy","iconCss","drpDownBtn","DropDownButton","open","args","cancelPan","parentElement","top","getBoundingClientRect","splitWords","isCropSelection","refreshActiveObj","clearRect","refreshToolbar","item","freeHandDraw","drawShapeText","drawShape","updateToolbarItems","calcRatio","appendTo","cropSelect","ht","transformSelect","imageEditorObj","getInstance","saveItems","export","rotate","flip","getShapesToolbarItem","initShapesToolbarItem","createShapeColor","createShapeBtn","ColorPicker","modeSwitcher","noColor","value","showButtons","mode","change","currentValue","hex","redrawShape","rgba","fillDDB_1","children","toggle","left","offsetLeft","inline","strokeDDB_1","background","strokeWidthItems","ratio","strokeWidthBtn","spanElem_1","drpDownBtn_1","activeBtn","textContent","parseInt","getTextToolbarItem","getFontFamilyItems","getFontSizeItems","initTextToolbarItem","createTextColor","createTextBtn","fontColor","color","strokeDDB_2","fontNameBtn","spanElem_2","fontFamilyBtn_1","createPopupOnClick","beforeItemRender","temp","updateFontStyles","measureText","redrawText","fontStyleBtnElem","span1Elem_1","fontStyleBtn_1","fontStyle","fontWeight","replace","applyFontStyle","fontSizeBtnElem","fontSizeSpanElem_1","fontSizes","getFontSizes","fontSizeBtn_1","textStyle","font","rows","getMaxText","parseFloat","setTextSelection","updateActiveObject","Math","round","toString","getTextAreaWidth","tempBold","tempItalic","initZoomToolbarItem","panBtn","zoom","callMainToolbar","transform","cancelItems","crop","redrawActObj","applyActObj","reset","isApplyBtn","isZooming","imageEditorPointsColl","topLeftCircle","clearSelection","gradient","a","applyPenDraw","apply","tempCanvas","tempContext","drawImage","lineWidth","nexP","preP","beginPath","moveTo","points","m","dx1","dx2","dy1","dy2","j","curP","bezierCurveTo","shift","stroke","imgData","getImageData","tempObj","index","operation","splice","putImageData","isCropping","initPenToolbarItem","getPenToolbarItem","createPenColor","createPenBtn","penColor","strokeDDB_3","spanElem_3","drpDownBtn_2","setPenStroke","penStrokeWidth","updateCanvas","wrapperWidth","clientWidth","maxDimension","calcMaxDimension","maxWidth","maxHeight","updateInMemoryCanvas","imageOnLoad","src","onload","toBlob","blob","showSpinner","URL","createObjectURL","hideSpinner","opacity","shapeDegree","updateUndoRedoColl","previousObj","currentObj","filesData","files","url","e","transformOrigin","scale","findTextTarget","getStrokeWidth","selFillElem","selStrokeElem","selTextStrokeElem","selPenStrokeElem","strokeWidthElem","fontFamilyElem","fontSizeElem","fontStyleElem","setTimer","timer","preventDefault","setTimeout","currentTarget","clientX","clientY","touches","canvasRatio","minStrokeWidth","maxStrokeWidth","velocity","mouseDownHandler","findTarget","setActivePoint","setCursor","initialDraw","updateActivePoint","drawObject","bbox","applyCurrActObj","shapeChangingArgs","beforeSave","fileName","fileType","cancel","ctrlKey","observableSaveArgs","stopImmediatePropagation","action","previousShapeSettings","currentShapeSettings","textKeyDown","offsetX","pageX","offsetY","pageY","offsetTop","transformedPoint","pt","transitionArgs","startPoint","endPoint","xDiff","yDiff","xxDiff","yyDiff","translate","pt1","pt2","redraw","String","fromCharCode","which","scrollHeight","setTextBoxWidth","adjustToScreen","redrawImg","ctx","xform","DOMMatrix","getTransform","savedTransforms","save","restore","pop","sx","sy","scaleNonUniform","radians","PI","dx","dy","f","m2","multiply","setTransform","DOMPoint","matrixTransform","inverse","m11","m12","m13","m14","m21","m22","m23","m24","zoomImg","clicks","zoomPoint","zoomLevel","pow","handleScroll","delta","wheelDelta","detail","p1","p2","isInside","actObj","extend","setCursorForZoomState","floor","ceil","horTopLine","updateTextFromTextArea","widthColl","max","setTextBoxPos","point","setTextBoxPoints","shapeFlip","JSON","stringify","radius","border","overflow","setTextBoxHeight","textBoxTop","textBoxWidth","letterWidth","textWidth","textHeight","abs","selectInfo","shapeResizingArgs","shapeMovingArgs","updateNWPoints","updateNPoints","updateNEPoints","updateWPoints","updateEPoints","updateSWPoints","updateSPoints","updateSEPoints","percentage","prevDiffX","prevDiffY","min","maxText","newScale","getScaleRatio","isTextBox","maxi","maxStr","setDragLimit","lineDraw","shapeCircle","canvasDraw","selectionWidth","selectionHeight","fillRect","tempWidth","ellipse","closePath","arc","clip","drawOuterSelection","isInitialDraw","isCropCircle","getZoomShape","rect","topRightCircle","bottomLeftCircle","bottomRightCircle","fill","drawCenterCircles","obj","canvas","isCropRatio","drawCropRatio","isCrop","drawShapeObj","actPoint","isMouseMove","horCircleWidth","verCircleHeight","horBottomLine","verLeftLine","verRightLine","topCenterCircle","centerLeftCircle","centerRightCircle","bottomCenterCircle","currentShape","horLineWidth","verLineHeight","drawSquareLines","shapeLine","shapeText","drawSelection","tempLineWidth","lineTo","lineHeight","yPoint","updateActPoint","rotateText","fillText","k","horTopInnerLine","horBottomInnerLine","verLeftInnerLine","verRightInnerLine","findTargetObj","updateCursorStyles","diffX","currImgData","flippedText","isResize","setDragDirection","calcShapeRatio","arcRadius","visibleWidth","visibleHeight","centerX","centerY","originalWidth","originalHeight","presetRatio","standardSize","scaleWidth","getScale","snippetArray","scaleHeight","snippetArray1","originalValue","widthRatio","heightRatio","canvasMaxWidth","canvasMaxHeight","widthScale","heightScale","cssMaxWidth","cssMaxHeight","setMaximumDimension","newWidth","newHeight","setCursorFromObj","downloadImg","href","download","body","documentElement","click","parentNode","removeChild","toSVGImg","dataUrl","toDataURL","svg","createElementNS","img","setAttributeNS","data","svgDataUrl","btoa","toBlobFn","blobUrl","addLetter","letter","drawBaseImg","calcPrevRatio","oldWidthRatio","oldHeightRatio","textFlipDegree","redrawSelection","redrawObj","updateCurrentActiveObjPoint","currActObjIndex","oldRatio","currIndex","calcCurrPoints","isActObj","splitWords_2","tempObjColl","proxy_1","setCenterPoints","renderWidth","renderHeight","start","tempHeight","drawPen","context","getObjDetails","shapeDetails","isPointsInRange","inRange","rotateMultiple","proxy_2","zoomedRotate","updateInMemoryContext","cssObj","getComputedStyle","imgData_1","globalCompositeOperation","blobUrl_1","data_1","globalAlpha","direction","activeObjShape","toolbar_10","update","isRotate","length_1","saved_1","cropShape","freehandDraw","zoomState","drawEllipse","radiusX","radiusY","isEllipse","drawLine","drawRectangle","isRectangle","drawText","selectShape","isSelected","deleteShape","getShapeSetting","getShapeSettings","shapeDetailsColl","canUndo","canRedo","clear","draw","getBlob","isEmpty","load","signature","undo","redo","saveAsBlob","getLocalData","Property","Event","NotifyPropertyChanges","SignatureBase"],"mappings":"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AAkB,IAC5CE,GACI42B,WAAS,KACV91B,EAAYhB,UAAW,eAAY,IACtCE,GACI42B,YAAS,IACV91B,EAAYhB,UAAW,gBAAa,IACvCE,GACI42B,YAAS,IACV91B,EAAYhB,UAAW,wBAAqB,IAC/CE,GACI62B,WACD/1B,EAAYhB,UAAW,iBAAc,IACxCE,GACI62B,WACD/1B,EAAYhB,UAAW,cAAW,IACrCE,GACI62B,WACD/1B,EAAYhB,UAAW,gBAAa,IACvCE,GACI62B,WACD/1B,EAAYhB,UAAW,cAAW,IACrCE,GACI62B,WACD/1B,EAAYhB,UAAW,cAAW,IACrCE,GACI62B,WACD/1B,EAAYhB,UAAW,eAAY,IACtCE,GACI62B,WACD/1B,EAAYhB,UAAW,eAAY,IACtCE,GACI62B,WACD/1B,EAAYhB,UAAW,eAAY,IACtCE,GACI62B,WACD/1B,EAAYhB,UAAW,oBAAiB,IAC3CE,GACI62B,WACD/1B,EAAYhB,UAAW,iBAAc,IACxCE,GACI62B,WACD/1B,EAAYhB,UAAW,YAAS,IACnCE,GACI62B,WACD/1B,EAAYhB,UAAW,qBAAkB,IAC5CE,GACI62B,WACD/1B,EAAYhB,UAAW,sBAAmB,IAC7CE,GACI62B,WACD/1B,EAAYhB,UAAW,yBAAsB,IAChDgB,EAAcuF,EAAgBrG,GAC1B82B,yBACDh2B,IAELi2B"}
1
+ {"version":3,"file":"ej2-image-editor.min.js","sources":["../../src/image-editor/image-editor.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { NotifyPropertyChanges, Property, addClass, removeClass, extend } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, getComponent, getInstance, isNullOrUndefined, L10n, getUniqueID } from '@syncfusion/ej2-base';\nimport { SignatureBase } from '@syncfusion/ej2-inputs';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { ColorPicker, Uploader, Slider } from '@syncfusion/ej2-inputs';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { Complex, compile, compile as templateCompiler, Browser, detach, select, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Interface for image finetune values.\n */\nvar FinetuneSettings = /** @class */ (function (_super) {\n __extends(FinetuneSettings, _super);\n function FinetuneSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"brightness\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"contrast\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"hue\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"saturation\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"exposure\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"blur\", void 0);\n return FinetuneSettings;\n}(ChildProperty));\nexport { FinetuneSettings };\n/**\n * Image Editor is a graphical user interface that helps to edit an image by performing actions like selection,\n * cropping, rotating, inserting text and shapes (rectangles, ellipses, lines), and drawing free hand on top of an image.\n *\n ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({});\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\nvar ImageEditor = /** @class */ (function (_super) {\n __extends(ImageEditor, _super);\n /**\n *\n * Constructor for creating the widget\n *\n * @param {ImageEditorModel} options - Specifies the image editor model\n * @param {string|HTMLDivElement} element - Specifies the target element\n */\n function ImageEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.degree = 0; // current rotated state\n _this.dragCanvas = false;\n _this.dragElement = '';\n _this.keyHistory = ''; // text history\n _this.flipState = ''; // current flip state whether horizontal or vertical or none\n _this.mouseDownPoint = { x: 0, y: 0 };\n _this.previousPoint = { x: 0, y: 0 }; // updates prev x and y points in mouseMove\n _this.dragPoint = { startX: 0, startY: 0, endX: 0, endY: 0 }; // updates drag start and end points in mousedown and mousemove\n _this.diffPoint = { x: 0, y: 0 }; // updates resize points\n _this.oldPoint = {};\n _this.objColl = []; // shapes, text obj collection\n _this.undoRedoColl = [];\n _this.imgDataColl = []; // collection of Image Data mainly used for reset state\n _this.strokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n _this.textSettings = { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n _this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n _this.tempTextSettings = { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n _this.toolbarHeight = 46;\n _this.pannStart = {};\n _this.pannEnd = {};\n _this.togglePan = false;\n _this.disablePan = false;\n _this.lastX = 0;\n _this.lastY = 0;\n _this.dragStart = { x: 0, y: 0 };\n _this.factor = 1; // current zoomed state\n _this.currFlipState = '';\n _this.touchEndPoint = {};\n _this.prevX = 0;\n _this.currX = 0;\n _this.prevY = 0;\n _this.currY = 0;\n _this.togglePen = false;\n _this.currentToolbar = 'main';\n _this.textStartPoints = { x: 0, y: 0 };\n _this.fontSizeColl = [];\n _this.tempKeyHistory = '';\n _this.penDrawColl = [];\n _this.allowDrag = false;\n _this.textRow = 1;\n _this.activeObj = { activePoint: { startX: 0, startY: 0, endX: 0, endY: 0, width: 0, height: 0 },\n flipObjColl: [] };\n _this.currObjType = { shape: '', isDragging: false, isActiveObj: false, isText: false, isInitialText: false, isLine: false,\n isInitialLine: false, isCustomCrop: false, isZoomed: false, isFiltered: false, isSave: false };\n _this.defToolbarItems = [];\n _this.baseImgSrc = {};\n _this.isTimer = false;\n _this.isScreenOriented = false;\n _this.isFirstMove = false;\n _this.startTouches = [];\n _this.tempTouches = [];\n _this.adjustmentLevel = { brightness: 0, contrast: 0, hue: 0, opacity: 100, saturation: 0, blur: 0,\n exposure: 0, sharpen: false, bw: false };\n _this.tempAdjustmentLevel = { brightness: 0, contrast: 0, hue: 0, opacity: 100, saturation: 0, blur: 0,\n exposure: 0, sharpen: false, bw: false };\n _this.adjustmentValue = '';\n _this.initialAdjustmentValue = '';\n _this.tempAdjustmentValue = '';\n _this.currentFilter = '';\n _this.tempFilter = '';\n _this.canvasFilter = '';\n _this.sharpenedImgData = false;\n _this.tempSharpenFilter = false;\n _this.tempBWFilter = false;\n _this.isBrightnessAdjusted = false;\n _this.isInitialLoading = false;\n _this.imageFileName = '';\n return _this;\n }\n ImageEditor_1 = ImageEditor;\n ImageEditor.prototype.preRender = function () {\n // pre render code snippets\n this.element.id = this.element.id || getUniqueID('ej2-image-editor');\n if (Browser.isDevice) {\n this.element.classList.add('e-device');\n }\n this.themeColl = {\n Bootstrap5: { primaryColor: '#0d6efd', secondaryColor: '#fff' },\n Bootstrap5Dark: { primaryColor: '#0d6efd', secondaryColor: '#fff' },\n Tailwind: { primaryColor: '#4f46e5', secondaryColor: '#fff' },\n TailwindDark: { primaryColor: '#22d3ee', secondaryColor: '#fff' },\n Fluent: { primaryColor: '#0078d4', secondaryColor: '#fff' },\n FluentDark: { primaryColor: '#0078d4', secondaryColor: '#fff' },\n Bootstrap4: { primaryColor: '#007bff', secondaryColor: '#fff' },\n Bootstrap: { primaryColor: '#317ab9', secondaryColor: '#fff' },\n BootstrapDark: { primaryColor: '#317ab9', secondaryColor: '#fff' },\n Material: { primaryColor: '#e3165b', secondaryColor: '#fff' },\n MaterialDark: { primaryColor: '#00b0ff', secondaryColor: '#fff' },\n Fabric: { primaryColor: '#0078d6', secondaryColor: '#fff' },\n FabricDark: { primaryColor: '#0074cc', secondaryColor: '#fff' },\n Highcontrast: { primaryColor: '#000000', secondaryColor: '#fff' }\n };\n this.defaultLocale = {\n Crop: 'Crop',\n ZoomIn: 'Zoom In',\n ZoomOut: 'Zoom Out',\n Undo: 'Undo',\n Redo: 'Redo',\n Transform: 'Transform',\n Annotation: 'Annotation',\n Finetune: 'Finetune',\n Brightness: 'Brightness',\n Contrast: 'Contrast',\n Hue: 'Hue',\n Saturation: 'Saturation',\n Opacity: 'Opacity',\n Blur: 'Blur',\n Sharpen: 'Sharpen',\n Exposure: 'Exposure',\n Filter: 'Filter',\n Default: 'Default',\n Chrome: 'Chrome',\n Cold: 'Cold',\n Warm: 'Warm',\n Grayscale: 'Grayscale',\n BlackAndWhite: 'Black and White',\n Sepia: 'Sepia',\n Invert: 'Invert',\n Text: 'Add Text',\n Pen: 'Pen',\n Reset: 'Reset',\n Save: 'Save',\n Select: 'Select',\n RotateLeft: 'Rotate Left',\n RotateRight: 'Rotate Right',\n HorizontalFlip: 'Horizontal Flip',\n VerticalFlip: 'Vertical Flip',\n OK: 'OK',\n Cancel: 'Cancel',\n FillColor: 'Fill Color',\n StrokeColor: 'Stroke Color',\n StrokeWidth: 'Stroke Width',\n FontFamily: 'Font Family',\n FontStyle: 'Font Style',\n FontSize: 'Font Size',\n FontColor: 'Font Color',\n Pan: 'Pan',\n Move: 'Move',\n Load: 'Load',\n Custom: 'Custom',\n Square: 'Square',\n Circle: 'Circle',\n Ellipse: 'Ellipse',\n Rectangle: 'Rectangle',\n Line: 'Line',\n Bold: 'Bold',\n Italic: 'Italic',\n BoldItalic: 'Bold Italic',\n XSmall: 'X-Small',\n Small: 'Small',\n Medium: 'Medium',\n Large: 'Large',\n XLarge: 'X-Large',\n ABC: 'ABC',\n Browse: 'Browse'\n };\n this.l10n = new L10n('image-editor', this.defaultLocale, this.locale);\n };\n /**\n *\n * To Initialize the component rendering\n *\n * @private\n * @returns {void}\n */\n ImageEditor.prototype.render = function () {\n this.initialize();\n };\n /**\n * To get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n ImageEditor.prototype.getModuleName = function () {\n return 'image-editor';\n };\n /**\n *\n * To get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n * @private\n */\n ImageEditor.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n *\n * Called internally if any of the property value changed.\n *\n * @param {ImageEditorModel} newProperties - Specifies new properties\n * @param {ImageEditorModel} oldProperties - Specifies old properties\n * @returns {void}\n * @private\n */\n ImageEditor.prototype.onPropertyChanged = function (newProperties, oldProperties) {\n for (var _i = 0, _a = Object.keys(newProperties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (oldProperties.cssClass) {\n removeClass([this.element], oldProperties.cssClass.split(' '));\n }\n if (newProperties.cssClass) {\n addClass([this.element], newProperties.cssClass.split(' '));\n }\n break;\n case 'disabled':\n if (newProperties.disabled) {\n this.element.classList.add('e-disabled');\n this.unwireEvent();\n }\n else {\n this.element.classList.remove('e-disabled');\n this.wireEvent();\n }\n break;\n case 'height':\n this.element.style.height = newProperties.height;\n break;\n case 'width':\n this.element.style.width = newProperties.width;\n break;\n case 'theme':\n if (newProperties.theme) {\n this.updateTheme();\n this.upperContext.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n this.upperContext.fillStyle = this.themeColl[this.theme]['secondaryColor'];\n }\n break;\n case 'finetuneSettings':\n if (newProperties.finetuneSettings) {\n this.finetuneSettings = newProperties.finetuneSettings;\n this.updateFinetunes();\n }\n break;\n }\n }\n };\n ImageEditor.prototype.destroy = function () {\n var classList = [];\n this.element.removeAttribute('tabindex');\n if (this.cssClass) {\n classList = classList.concat(this.cssClass.split(' '));\n }\n removeClass([this.element], classList);\n if (!this.element.getAttribute('class')) {\n this.element.removeAttribute('class');\n }\n this.destroySubComponents();\n this.unwireEvent();\n _super.prototype.destroy.call(this);\n this.element.innerHTML = '';\n this.trigger('destroyed');\n };\n ImageEditor.prototype.initialize = function () {\n this.updateFinetunes();\n this.createToolbar();\n this.createContextualToolbar();\n this.createCanvas();\n this.wireEvent();\n this.updateContext(this.lowerContext);\n this.updateContext(this.upperContext);\n this.pannStart = { startX: 0, startY: 0, width: 0, height: 0 };\n this.pannEnd = { startX: 0, startY: 0, width: 0, height: 0 };\n this.lowerContext.filter = this.canvasFilter = this.initialAdjustmentValue = this.adjustmentValue = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n if (this.element) {\n createSpinner({\n target: this.element\n });\n }\n };\n ImageEditor.prototype.updateFinetunes = function () {\n if (this.finetuneSettings) {\n if (this.finetuneSettings.brightness) {\n this.adjustmentLevel.brightness = this.finetuneSettings.brightness.defaultValue;\n this.tempAdjustmentLevel.brightness = this.finetuneSettings.brightness.defaultValue;\n }\n if (this.finetuneSettings.contrast) {\n this.adjustmentLevel.contrast = this.finetuneSettings.contrast.defaultValue;\n this.tempAdjustmentLevel.contrast = this.finetuneSettings.contrast.defaultValue;\n }\n if (this.finetuneSettings.hue) {\n this.adjustmentLevel.hue = this.finetuneSettings.hue.defaultValue;\n this.tempAdjustmentLevel.hue = this.finetuneSettings.hue.defaultValue;\n }\n if (this.finetuneSettings.saturation) {\n this.adjustmentLevel.saturation = this.finetuneSettings.saturation.defaultValue;\n this.tempAdjustmentLevel.saturation = this.finetuneSettings.saturation.defaultValue;\n }\n if (this.finetuneSettings.exposure) {\n this.adjustmentLevel.exposure = this.finetuneSettings.exposure.defaultValue;\n this.tempAdjustmentLevel.exposure = this.finetuneSettings.exposure.defaultValue;\n }\n if (this.finetuneSettings.opacity) {\n this.adjustmentLevel.opacity = this.finetuneSettings.opacity.defaultValue;\n this.tempAdjustmentLevel.opacity = this.finetuneSettings.opacity.defaultValue;\n }\n if (this.finetuneSettings.blur) {\n this.adjustmentLevel.blur = this.finetuneSettings.blur.defaultValue;\n this.tempAdjustmentLevel.blur = this.finetuneSettings.blur.defaultValue;\n }\n this.isInitialLoading = true;\n }\n };\n /**\n *\n * This Method will add events to component (element, event, method, current reference)\n *\n * @returns {void}.\n */\n ImageEditor.prototype.wireEvent = function () {\n EventHandler.add(document, 'keydown', this.keyDownEventHandler, this);\n EventHandler.add(document, 'keypress', this.keyUpEventHandler, this);\n EventHandler.add(this.upperCanvas, 'mousedown', this.mouseDownEventHandler, this);\n EventHandler.add(this.upperCanvas, 'mousemove', this.mouseMoveEventHandler, this);\n EventHandler.add(this.upperCanvas, 'mouseup', this.mouseUpEventHandler, this);\n EventHandler.add(document, 'mouseup', this.mouseUpEventHandler, this);\n EventHandler.add(this.lowerCanvas, 'mousedown', this.canvasMouseDownHandler, this);\n EventHandler.add(this.lowerCanvas, 'mousemove', this.canvasMouseMoveHandler, this);\n EventHandler.add(this.lowerCanvas, 'mouseup', this.canvasMouseUpHandler, this);\n EventHandler.add(document, 'mouseup', this.canvasMouseUpHandler, this);\n EventHandler.add(this.upperCanvas, 'touchstart', this.touchStartHandler, this);\n EventHandler.add(this.lowerCanvas, 'touchstart', this.touchStartHandler, this);\n EventHandler.add(this.upperCanvas, 'dblclick', this.findTextPoint, this);\n EventHandler.add(this.textBox, 'mousedown', this.findTextPoint, this);\n window.addEventListener('resize', this.windowResizeHandler.bind(this));\n if (!Browser.isIos && Browser.info.name !== 'safari' && screen && screen.orientation) {\n screen.orientation.addEventListener('change', this.screenOrientation.bind(this));\n }\n };\n /**\n *\n * This Method will remove events from component\n *\n * @returns {void}.\n */\n ImageEditor.prototype.unwireEvent = function () {\n EventHandler.remove(document, 'keydown', this.keyDownEventHandler);\n EventHandler.remove(document, 'keypress', this.keyUpEventHandler);\n EventHandler.remove(this.upperCanvas, 'mousedown', this.mouseDownEventHandler);\n EventHandler.remove(this.upperCanvas, 'mousemove', this.mouseMoveEventHandler);\n EventHandler.remove(this.upperCanvas, 'mouseup', this.mouseUpEventHandler);\n EventHandler.remove(document, 'mouseup', this.mouseUpEventHandler);\n EventHandler.remove(this.lowerCanvas, 'mousedown', this.canvasMouseDownHandler);\n EventHandler.remove(this.lowerCanvas, 'mousemove', this.canvasMouseMoveHandler);\n EventHandler.remove(this.lowerCanvas, 'mouseup', this.canvasMouseUpHandler);\n EventHandler.remove(document, 'mouseup', this.canvasMouseUpHandler);\n };\n ImageEditor.prototype.initializeFilter = function () {\n this.setBrightness(this.adjustmentLevel.brightness);\n this.setContrast(this.adjustmentLevel.contrast);\n this.setHue(this.adjustmentLevel.hue);\n this.setSaturation(this.adjustmentLevel.saturation);\n this.setExposure(this.adjustmentLevel.exposure);\n this.setOpacity(this.adjustmentLevel.opacity);\n this.setBlur(this.adjustmentLevel.blur);\n };\n ImageEditor.prototype.destroySubComponents = function () {\n var inputElement = this.element.querySelectorAll('input.e-control');\n var btnElement = this.element.querySelectorAll('button.e-control');\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-color-picker')) {\n getComponent(inputElement[i], 'color-picker').destroy();\n detach(select('input#' + inputElement[i].id, this.element));\n }\n }\n for (var i = 0, len = btnElement.length; i < len; i++) {\n if (btnElement[i].classList.contains('e-dropdown-btn')) {\n getComponent(btnElement[i], 'dropdown-btn').destroy();\n detach(select('button#' + btnElement[i].id, this.element));\n }\n else if (btnElement[i].classList.contains('e-btn')) {\n getComponent(btnElement[i], 'btn').destroy();\n detach(select('button#' + btnElement[i].id, this.element));\n }\n }\n };\n ImageEditor.prototype.updateTheme = function () {\n if (this.theme !== '') {\n this.theme = this.toPascalCase(this.theme);\n }\n };\n ImageEditor.prototype.toPascalCase = function (str) {\n var strArr = str.toLowerCase().split('-');\n for (var i = 0; i < strArr.length; i++) {\n strArr[i] = strArr[i].charAt(0).toUpperCase() + strArr[i].slice(1);\n }\n return strArr.join('');\n };\n ImageEditor.prototype.createCanvas = function () {\n var height = this.toolbarHeight;\n this.element.style.width = this.width;\n this.element.style.height = this.height;\n var canvasWrapper = this.element.appendChild(this.createElement('div', { id: this.element.id + '_canvasWrapper',\n className: 'e-canvas-wrapper', attrs: { style: 'height:' + (this.element.offsetHeight - height) + 'px; width:' +\n (this.element.offsetWidth)\n + 'px; position: relative; overflow: hidden; margin: 0 auto;' }\n }));\n this.lowerCanvas = canvasWrapper.appendChild(this.createElement('canvas', {\n id: this.element.id + '_lowerCanvas', attrs: { name: 'canvasImage' }\n }));\n this.upperCanvas = canvasWrapper.appendChild(this.createElement('canvas', {\n id: this.element.id + '_upperCanvas', attrs: { name: 'canvasImage' }\n }));\n this.inMemoryCanvas = this.createElement('canvas', {\n id: this.element.id + '_inMemoryCanvas', attrs: { name: 'canvasImage' }\n });\n this.textBox = canvasWrapper.appendChild(this.createElement('textarea', {\n id: this.element.id + '_textBox', attrs: { name: 'textBox' }\n }));\n this.textBox.setAttribute('spellcheck', 'false');\n this.upperCanvas.width = this.lowerCanvas.width = this.inMemoryCanvas.width = this.element.offsetWidth;\n this.upperCanvas.height = this.lowerCanvas.height = this.inMemoryCanvas.height = (this.element.offsetHeight - this.toolbarHeight);\n this.upperCanvas.style.position = this.lowerCanvas.style.position = this.textBox.style.position = 'absolute';\n this.textBox.style.backgroundColor = 'transparent';\n this.textBox.style.display = 'none';\n this.textBox.style.resize = 'none';\n this.lowerContext = this.lowerCanvas.getContext('2d');\n this.baseImg = this.createElement('img', {\n id: this.element.id + '_orgImg', attrs: { name: 'Image', crossorigin: 'anonymous' }\n });\n this.upperCanvas.style.cursor = 'default';\n this.upperCanvas.style.display = 'none';\n this.upperContext = this.upperCanvas.getContext('2d');\n this.inMemoryContext = this.inMemoryCanvas.getContext('2d');\n };\n ImageEditor.prototype.createToolbar = function () {\n var _this = this;\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n this.element.appendChild(this.createElement('div', {\n id: this.element.id + '_toolbarArea', className: 'e-toolbar-area'\n }));\n if (this.toolbarTemplate) {\n this.toolbarTemplateFn();\n }\n else {\n var toolbarItems = { cssClass: 'e-image-upload', align: 'Left', type: 'Input', template: new Uploader({}) };\n if (isNullOrUndefined(this.defToolbarItems)) {\n this.defToolbarItems = [];\n }\n this.defToolbarItems.push(toolbarItems);\n var toolbarArea = document.getElementById(this.element.id + '_toolbarArea');\n var toolbar_1 = this.createElement('div', {\n id: this.element.id + '_toolbar'\n });\n toolbarArea.appendChild(toolbar_1);\n var uploadItems = [\n {\n cssClass: 'e-image-upload',\n align: 'Left', type: 'Input',\n template: new Uploader({\n selected: function () {\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 &&\n (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar'))) {\n getComponent(document.getElementById(_this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, Browser.isDevice);\n _this.createBottomToolbar();\n }\n else {\n if (_this.defToolbarItems.length > 0 &&\n (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, false);\n }\n }\n })\n }\n ];\n new Toolbar({ items: uploadItems, width: '100%',\n created: function () {\n _this.trigger('toolbarCreated', { toolbarType: 'main' });\n },\n clicked: this.defToolbarClicked.bind(this) }, '#' + this.element.id + '_toolbar');\n this.createLeftToolbarControls();\n }\n if (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar'))) {\n this.toolbarHeight = document.getElementById(this.element.id + '_toolbar').clientHeight;\n }\n }\n else {\n this.toolbarHeight = 0;\n }\n };\n ImageEditor.prototype.createContextualToolbar = function () {\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n this.element.appendChild(this.createElement('div', { id: this.element.id + '_contextualToolbarArea',\n className: 'e-contextual-toolbar-wrapper e-hide', attrs: { style: 'position: absolute;' }\n }));\n var toolbarArea = document.getElementById(this.element.id + '_contextualToolbarArea');\n var toolbar_2 = this.createElement('div', { id: this.element.id + '_contextualToolbar' });\n toolbarArea.appendChild(toolbar_2);\n }\n };\n ImageEditor.prototype.updateContextualToolbar = function (type, cType) {\n if (this.toolbarTemplate) {\n this.toolbarTemplateFn();\n }\n else {\n var toolbarArea = this.element.querySelector('#' + this.element.id + '_toolbarArea');\n var contextualToolbarArea = this.element.querySelector('#' + this.element.id + '_contextualToolbarArea');\n if (!isNullOrUndefined(toolbarArea) && !isNullOrUndefined(contextualToolbarArea)) {\n contextualToolbarArea.classList.remove('e-hide');\n contextualToolbarArea.style.left = toolbarArea.offsetLeft + 'px';\n }\n if (type === 'filter') {\n if (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')) && this.defToolbarItems.length > 0) {\n getComponent(document.getElementById(this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n else {\n this.initToolbarItem(true);\n }\n this.refreshSlider();\n this.initFilterToolbarItem();\n }\n else {\n if (!isNullOrUndefined(document.querySelector('#' + this.element.id + '_contextualToolbar'))\n && document.querySelector('#' + this.element.id + '_contextualToolbar').classList.contains('e-control')) {\n getComponent(document.getElementById(this.element.id + '_contextualToolbar'), 'toolbar').destroy();\n }\n this.refreshSlider();\n this.renderSlider(cType);\n }\n if (Browser.isDevice) {\n var cHt = contextualToolbarArea.offsetHeight;\n var ht = this.element.querySelector('#' + this.element.id + '_canvasWrapper').offsetHeight;\n contextualToolbarArea.style.top = this.toolbarHeight + ht - cHt + 'px';\n }\n else {\n contextualToolbarArea.style.top = this.toolbarHeight + 1 + 'px';\n }\n }\n };\n ImageEditor.prototype.createBottomToolbar = function () {\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n this.element.appendChild(this.createElement('div', {\n id: this.element.id + '_bottomToolbarArea', className: 'e-bottom-toolbar'\n }));\n if (!this.toolbarTemplate) {\n document.getElementById(this.element.id + '_canvasWrapper').style.height = (this.element.offsetHeight\n - this.toolbarHeight * 2) - 3 + 'px';\n var toolbarArea = document.getElementById(this.element.id + '_bottomToolbarArea');\n var toolbarElem = this.createElement('div', {\n id: this.element.id + '_bottomToolbar'\n });\n toolbarArea.appendChild(toolbarElem);\n }\n this.initBottomToolbar();\n }\n };\n ImageEditor.prototype.initBottomToolbar = function () {\n var _this = this;\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n if (this.toolbarTemplate) {\n this.toolbarTemplateFn();\n }\n else {\n var items = this.getMainToolbarItem();\n new Toolbar({ items: items, width: '100%',\n created: function () {\n _this.renderAnnotationBtn();\n _this.renderCropBtn();\n _this.renderTransformBtn();\n _this.trigger('toolbarCreated', { toolbarType: 'main' });\n },\n clicked: this.defToolbarClicked.bind(this)\n }, '#' + this.element.id + '_bottomToolbar');\n if (this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(this.element.id + '_bottomToolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_3 = getComponent(this.element.id + '_bottomToolbar', 'toolbar');\n toolbar_3.refreshOverflow();\n }\n }\n }\n };\n ImageEditor.prototype.toolbarTemplateFn = function () {\n var template;\n var templateID = this.element.id + '_toolbar';\n var toolbarArea = this.element.querySelector('#' + this.element.id + '_toolbarArea');\n if (this.toolbarTemplate) {\n this.toolbarFn = this.templateParser(this.toolbarTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.toolbarFn({ type: 'toolbar' }, this, 'Template', templateID)[0];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.toolbarFn({ type: 'toolbar' }, this, 'Template', templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n }\n else {\n template = this.toolbarFn({ type: 'toolbar' }, this, 'Template', templateID)[0];\n }\n toolbarArea.appendChild(template);\n this.renderReactTemplates();\n }\n };\n ImageEditor.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (error) {\n return templateCompiler(template);\n }\n }\n return undefined;\n };\n ImageEditor.prototype.getLeftToolbarItem = function (isOkBtn) {\n var toolbarItems = [];\n if (!isOkBtn) {\n toolbarItems.push({ cssClass: 'e-image-upload', align: 'Left', type: 'Input', template: new Uploader({}) });\n toolbarItems.push({ visible: false, cssClass: 'e-image-position e-btn e-flat', tooltipText: 'Position', align: 'Left' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('ZoomOut') > -1)) {\n toolbarItems.push({ id: this.element.id + '_zoomOut', prefixIcon: 'e-icons e-zoom-out', cssClass: 'top-icon e-dec-zoom',\n tooltipText: this.l10n.getConstant('ZoomOut'), align: 'Left' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('ZoomIn') > -1)) {\n toolbarItems.push({ id: this.element.id + '_zoomIn', prefixIcon: 'e-icons e-zoom-in', cssClass: 'top-icon e-inc-zoom',\n tooltipText: this.l10n.getConstant('ZoomIn'), align: 'Left' });\n }\n var tempToolbarItems = this.processToolbar('left');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getRightToolbarItem = function (isOkBtn) {\n var toolbarItems = [];\n if (isOkBtn) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Reset') > -1)) {\n toolbarItems.push({ id: this.element.id + '_reset', prefixIcon: 'e-icons e-btn-reset', cssClass: 'top-icon e-img-reset',\n tooltipText: this.l10n.getConstant('Reset'), align: 'Right' });\n }\n if (!isOkBtn) {\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Save') > -1)) {\n toolbarItems.push({ id: this.element.id + '_save', prefixIcon: 'e-icons e-btn-save', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Save'), align: 'Right', template: '<button id=\"' + this.element.id + '_saveBtn\"></button>' });\n }\n }\n var tempToolbarItems = this.processToolbar('right');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getMainToolbarItem = function (isApplyOption) {\n var toolbarItems = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Crop') > -1)) {\n toolbarItems.push({ id: this.element.id + '_crop', tooltipText: this.l10n.getConstant('Crop'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_cropBtn\"></button>'\n });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Annotate') > -1)) {\n toolbarItems.push({ id: this.element.id + '_annotation', tooltipText: this.l10n.getConstant('Annotation'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_annotationBtn\"></button>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Transform') > -1)) {\n toolbarItems.push({ id: this.element.id + '_transform', tooltipText: this.l10n.getConstant('Transform'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_transformBtn\"></button>'\n });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Finetune') > -1)) {\n toolbarItems.push({ id: this.element.id + '_adjustment', prefixIcon: 'e-icons e-adjustment', cssClass: 'top-icon e-adjustment',\n tooltipText: this.l10n.getConstant('Finetune'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Filter') > -1)) {\n toolbarItems.push({ id: this.element.id + '_filter', prefixIcon: 'e-icons e-filters', cssClass: 'top-icon e-filters',\n tooltipText: this.l10n.getConstant('Filter'), align: 'Center' });\n }\n var tempToolbarItems = this.processToolbar('center');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (isApplyOption) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getZoomToolbarItem = function () {\n var toolbarItems = [];\n if (this.factor > 1) {\n toolbarItems = [\n { id: this.element.id + '_pan', prefixIcon: 'e-icons e-pan', cssClass: 'top-icon e-img-pan',\n tooltipText: this.l10n.getConstant('Pan'), align: 'Left' }\n ];\n }\n return toolbarItems;\n };\n ImageEditor.prototype.processToolbar = function (position) {\n var toolbarItems = [];\n if (this.toolbar) {\n for (var i = 0, len = this.toolbar.length; i < len; i++) {\n if (typeof (this.toolbar[i]) === 'object') {\n if (isNullOrUndefined(this.toolbar[i].align)) {\n if (position === 'left') {\n toolbarItems.push(this.toolbar[i]);\n }\n }\n else if (this.toolbar[i].align.toLowerCase() === position) {\n toolbarItems.push(this.toolbar[i]);\n }\n }\n }\n }\n return toolbarItems;\n };\n ImageEditor.prototype.processSubToolbar = function (items) {\n var toolbarItems = [];\n if (items) {\n for (var i = 0, len = items.length; i < len; i++) {\n if (typeof (items[i]) === 'object') {\n items[i].align = 'Center';\n toolbarItems.push(items[i]);\n }\n }\n }\n return toolbarItems;\n };\n ImageEditor.prototype.isToolbar = function () {\n return (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)\n || !isNullOrUndefined(this.toolbarTemplate));\n };\n ImageEditor.prototype.initToolbarItem = function (isApplyOption, isDevice, isOkBtn) {\n var _this = this;\n if (this.isToolbar()) {\n var leftItem = this.getLeftToolbarItem(isOkBtn);\n var rightItem = this.getRightToolbarItem(isOkBtn);\n var mainItem = this.getMainToolbarItem(isApplyOption);\n var zoomItem = this.getZoomToolbarItem();\n if (isDevice) {\n this.defToolbarItems = leftItem.concat(zoomItem, rightItem);\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n if (!isDevice) {\n _this.renderAnnotationBtn();\n _this.renderCropBtn();\n _this.renderTransformBtn();\n }\n _this.renderSaveBtn();\n _this.trigger('toolbarCreated', { toolbarType: 'main' });\n }\n }, '#' + this.element.id + '_toolbar');\n this.createLeftToolbarControls();\n var zoomIn = document.querySelector('#' + this.element.id + '_zoomIn');\n if (!isNullOrUndefined(zoomIn) && this.factor >= 8) {\n zoomIn.classList.add('e-disabled');\n }\n else if (!isNullOrUndefined(zoomIn)) {\n zoomIn.classList.remove('e-disabled');\n }\n var zoomOut = document.querySelector('#' + this.element.id + '_zoomOut');\n if (!isNullOrUndefined(zoomOut) && this.factor === 1) {\n zoomOut.classList.add('e-disabled');\n }\n else if (!isNullOrUndefined(zoomOut)) {\n zoomOut.classList.remove('e-disabled');\n }\n var pan = document.querySelector('#' + this.element.id + '_pan');\n if (!isNullOrUndefined(pan) && this.factor === 1) {\n pan.style.display = 'none';\n }\n else if (!isNullOrUndefined(pan)) {\n pan.style.display = 'block';\n }\n if (this.isToolbar() && (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_4 = getComponent(this.element.id + '_toolbar', 'toolbar');\n toolbar_4.refreshOverflow();\n }\n }\n };\n ImageEditor.prototype.createLeftToolbarControls = function () {\n if (this.defToolbarItems !== undefined && this.defToolbarItems.length > 0 &&\n (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n var uploadDiv = document.getElementById(this.element.id + '_toolbar')\n .querySelector('.e-image-upload');\n if (uploadDiv) {\n var uploadElem = uploadDiv.getElementsByTagName('input')[0];\n var uploadBtnElem = uploadDiv.getElementsByTagName('button')[0];\n uploadBtnElem.className = 'e-tbar-btn e-tbtn-txt e-btn top-icon';\n uploadBtnElem.innerHTML = '';\n uploadBtnElem.appendChild(this.createElement('span', {\n className: 'e-btn-icon e-icons e-upload-icon e-icon-left'\n }));\n uploadElem.onchange = this.fileSelect.bind(this, uploadElem);\n }\n }\n };\n ImageEditor.prototype.renderAnnotationBtn = function () {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var items = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Pen') > -1)) {\n items.push({ text: this.l10n.getConstant('Pen'), id: 'pen', iconCss: 'e-icons e-free-pen' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Line') > -1)) {\n items.push({ text: this.l10n.getConstant('Line'), id: 'line', iconCss: 'e-icons e-line' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Rectangle') > -1)) {\n items.push({ text: this.l10n.getConstant('Rectangle'), id: 'rectangle', iconCss: 'e-icons e-rectangle' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Ellipse') > -1)) {\n items.push({ text: this.l10n.getConstant('Ellipse'), id: 'ellipse', iconCss: 'e-icons e-circle' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Text') > -1)) {\n items.push({ text: this.l10n.getConstant('Text'), id: 'text', iconCss: 'e-icons e-add-text' });\n }\n var drpDownBtn = new DropDownButton({ items: items, iconCss: 'e-icons e-annotation',\n cssClass: 'e-image-popup',\n open: function (args) {\n if (_this.togglePan) {\n _this.cancelPan();\n }\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n },\n select: function (args) {\n var isCropSelection = false;\n var splitWords;\n if (_this.activeObj.shape !== undefined) {\n splitWords = _this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && _this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n _this.currObjType.isCustomCrop = false;\n if (isCropSelection || _this.togglePan) {\n _this.refreshActiveObj();\n _this.upperContext.clearRect(0, 0, _this.upperCanvas.width, _this.upperCanvas.height);\n _this.refreshToolbar('main');\n }\n switch (args.item.id) {\n case 'pen':\n proxy.currentToolbar = 'pen';\n _this.freeHandDraw(true);\n break;\n case 'text':\n proxy.currentToolbar = 'text';\n _this.drawShapeText();\n break;\n default:\n proxy.currentToolbar = 'shapes';\n proxy.drawShape((args.item.id).toLowerCase());\n break;\n }\n _this.updateToolbarItems(_this.calcRatio());\n }\n });\n // Render initialized DropDownButton.\n drpDownBtn.appendTo('#' + this.element.id + '_annotationBtn');\n };\n ImageEditor.prototype.renderCropBtn = function () {\n var _this = this;\n var items = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('CustomSelection') > -1)) {\n items.push({ text: this.l10n.getConstant('Custom'), id: 'custom', iconCss: 'e-icons e-custom' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('CircleSelection') > -1)) {\n items.push({ text: this.l10n.getConstant('Circle'), id: 'circle', iconCss: 'e-icons e-circle' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('SquareSelection') > -1)) {\n items.push({ text: this.l10n.getConstant('Square'), id: 'square', iconCss: 'e-icons e-square' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('RatioSelection') > -1)) {\n items.push({ text: '3:2', id: '3:2', iconCss: 'e-icons e-custom-a' });\n items.push({ text: '4:3', id: '4:3', iconCss: 'e-icons e-custom-b' });\n items.push({ text: '5:4', id: '5:4', iconCss: 'e-icons e-custom-c' });\n items.push({ text: '7:5', id: '7:5', iconCss: 'e-icons e-custom-d' });\n items.push({ text: '16:9', id: '16:9', iconCss: 'e-icons e-custom-e' });\n }\n var drpDownBtn = new DropDownButton({\n open: function (args) {\n if (_this.togglePan) {\n _this.cancelPan();\n }\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n },\n items: items, select: this.cropSelect.bind(this),\n iconCss: 'e-icons e-select', cssClass: 'e-image-popup'\n });\n drpDownBtn.appendTo('#' + this.element.id + '_cropBtn');\n };\n ImageEditor.prototype.renderTransformBtn = function () {\n var _this = this;\n var items = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('RotateLeft') > -1)) {\n items.push({ text: this.l10n.getConstant('RotateLeft'), id: 'rotateleft', iconCss: 'e-icons e-anti-clock-wise' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('RotateRight') > -1)) {\n items.push({ text: this.l10n.getConstant('RotateRight'), id: 'rotateright', iconCss: 'e-icons e-clock-wise' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('FlipHorizontal') > -1)) {\n items.push({ text: this.l10n.getConstant('HorizontalFlip'), id: 'horizontalflip', iconCss: 'e-icons e-horizontal-flip' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('FlipVertical') > -1)) {\n items.push({ text: this.l10n.getConstant('VerticalFlip'), id: 'verticalflip', iconCss: 'e-icons e-vertical-flip' });\n }\n var drpDownBtn = new DropDownButton({\n open: function (args) {\n if (_this.togglePan) {\n _this.cancelPan();\n }\n if (Browser.isDevice) {\n var ht = args.element.parentElement.offsetHeight;\n args.element.parentElement.style.display = 'none';\n args.element.parentElement.style.top = drpDownBtn.element.getBoundingClientRect().top -\n ht + 'px';\n args.element.parentElement.style.display = 'block';\n }\n },\n items: items, select: this.transformSelect.bind(this),\n iconCss: 'e-icons e-transform', cssClass: 'e-image-popup'\n });\n drpDownBtn.appendTo('#' + this.element.id + '_transformBtn');\n };\n ImageEditor.prototype.renderSaveBtn = function () {\n var _this = this;\n var imageEditorObj = getInstance(document.getElementById(this.element.id), ImageEditor_1);\n var saveItems = [\n { text: 'JPEG', id: 'jpeg' },\n { text: 'PNG', id: 'png' },\n { text: 'SVG', id: 'svg' }\n ];\n var ddbElem = document.getElementById(this.element.id + '_saveBtn');\n if (ddbElem) {\n // Initialize the DropDownButton component.\n var saveDrpDownBtn = new DropDownButton({ items: saveItems, cssClass: 'e-caret-hide e-image-popup', iconCss: 'e-icons e-save',\n select: function (args) {\n if (_this.togglePan) {\n _this.cancelPan();\n }\n imageEditorObj.export(args.item.text);\n }\n });\n saveDrpDownBtn.appendTo('#' + this.element.id + '_saveBtn');\n }\n };\n ImageEditor.prototype.cropSelect = function (args) {\n var text = args.item.id;\n this.select(text);\n this.refreshToolbar('main', true, true);\n };\n ImageEditor.prototype.transformSelect = function (args) {\n var text = args.item.id;\n switch (text) {\n case 'rotateleft':\n this.rotate(-90);\n break;\n case 'rotateright':\n this.rotate(90);\n break;\n case 'horizontalflip':\n this.flip('Horizontal');\n break;\n case 'verticalflip':\n this.flip('Vertical');\n break;\n }\n };\n ImageEditor.prototype.getShapesToolbarItem = function (items) {\n var toolbarItems = [];\n if (items.indexOf('fillColor') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', id: this.element.id + '_fillcolor',\n cssClass: 'top-icon e-fill', tooltipText: this.l10n.getConstant('FillColor'), align: 'Center', type: 'Input',\n template: '<button id=\"' + this.element.id + '_fillColorBtn\"></button>' });\n }\n if (items.indexOf('strokeColor') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', id: this.element.id + '_strokecolor',\n cssClass: 'top-icon e-stroke', tooltipText: this.l10n.getConstant('StrokeColor'), align: 'Center', type: 'Input',\n template: '<button id=\"' + this.element.id + '_borderColorBtn\"></button>' });\n }\n if (items.indexOf('strokeWidth') > -1) {\n toolbarItems.push({ id: this.element.id + '_strokeWidth', cssClass: 'top-icon e-size', tooltipText: 'Stroke Width', align: 'Center',\n type: 'Input', template: '<button id=\"' + this.element.id + '_borderWidthBtn\"></button>' });\n }\n var tempToolbarItems = this.processSubToolbar(items);\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.initShapesToolbarItem = function (items) {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getShapesToolbarItem(items);\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.createShapeColor(items);\n _this.createShapeBtn(items);\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n _this.trigger('toolbarCreated', { toolbarType: 'shapes' });\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n };\n ImageEditor.prototype.createShapeColor = function (items) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (items.indexOf('fillColor') > -1) {\n this.element.querySelector('.e-template.e-fill').appendChild(this.createElement('input', {\n id: this.element.id + '_shape_fill'\n }));\n var fillColor = new ColorPicker({\n modeSwitcher: false, noColor: true, value: '',\n showButtons: false, mode: 'Palette', cssClass: 'e-shape-fill-color',\n change: function (args) {\n _this.pushActItemIntoObj();\n var objColl = extend([], _this.objColl, [], true);\n _this.objColl.pop();\n proxy.activeObj.strokeSettings.fillColor = args.currentValue.hex;\n proxy.strokeSettings.fillColor = proxy.activeObj.strokeSettings.fillColor;\n _this.objColl.push(_this.activeObj);\n proxy.undoRedoColl.push({ operation: 'shapeTransform', value: null,\n currentObj: extend([], proxy.objColl, [], true), previousObj: objColl, factor: proxy.factor,\n sharpen: proxy.adjustmentLevel.sharpen, bw: proxy.adjustmentLevel.bw });\n proxy.redrawShape(proxy.objColl[proxy.objColl.length - 1]);\n if (args.currentValue.rgba === '') {\n fillDDB_1.element.children[0].classList.add('e-nocolor-item');\n }\n else {\n fillDDB_1.element.children[0].classList.remove('e-nocolor-item');\n fillDDB_1.element.children[0].style.backgroundColor = args.currentValue.rgba;\n }\n fillDDB_1.toggle();\n }\n }, '#' + this.element.id + '_shape_fill');\n var fillDDB_1 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fillDDB_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-shape-fill-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_fillColorBtn');\n fillColor.inline = true;\n this.element.querySelector('.e-fill.e-template .e-dropdownbtn-preview').classList.add('e-nocolor-item');\n }\n if (items.indexOf('strokeColor') > -1) {\n this.element.querySelector('.e-template.e-stroke').appendChild(this.createElement('input', {\n id: this.element.id + '_shape_stroke'\n }));\n var strokeColor = new ColorPicker({\n modeSwitcher: false, noColor: false, value: '#fff',\n showButtons: false, mode: 'Palette', cssClass: 'e-shape-stroke-color',\n change: function (args) {\n _this.pushActItemIntoObj();\n var objColl = extend([], _this.objColl, [], true);\n _this.objColl.pop();\n proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n proxy.strokeSettings.strokeColor = proxy.activeObj.strokeSettings.strokeColor;\n if (!proxy.togglePen) {\n _this.objColl.push(_this.activeObj);\n proxy.undoRedoColl.push({ operation: 'shapeTransform', value: null,\n currentObj: extend([], proxy.objColl, [], true), previousObj: objColl, factor: proxy.factor,\n sharpen: proxy.adjustmentLevel.sharpen, bw: proxy.adjustmentLevel.bw });\n proxy.redrawShape(proxy.objColl[proxy.objColl.length - 1]);\n }\n strokeDDB_1.element.children[0].style.backgroundColor = args.currentValue.rgba;\n strokeDDB_1.toggle();\n }\n }, '#' + this.element.id + '_shape_stroke');\n var strokeDDB_1 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = strokeDDB_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-shape-stroke-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_borderColorBtn');\n strokeColor.inline = true;\n this.element.querySelector('.e-stroke.e-template .e-dropdownbtn-preview').style.background = '#fff';\n }\n };\n ImageEditor.prototype.createShapeBtn = function (items) {\n var _this = this;\n var strokeWidthItems = [\n { id: '1', text: this.l10n.getConstant('XSmall') },\n { id: '2', text: this.l10n.getConstant('Small') },\n { id: '3', text: this.l10n.getConstant('Medium') },\n { id: '4', text: this.l10n.getConstant('Large') },\n { id: '5', text: this.l10n.getConstant('XLarge') }\n ];\n var ratio = this.calcRatio();\n if (items.indexOf('strokeWidth') > -1) {\n var strokeWidthBtn = document.getElementById(this.element.id + '_borderWidthBtn');\n var spanElem_1 = document.createElement('span');\n spanElem_1.innerHTML = this.l10n.getConstant('Small');\n spanElem_1.className = 'e-shape-stroke-width';\n strokeWidthBtn.appendChild(spanElem_1);\n // Initialize the DropDownButton component.\n var drpDownBtn_1 = new DropDownButton({ items: strokeWidthItems,\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var activeBtn = spanElem_1.innerHTML;\n if (activeBtn !== '') {\n args.element.querySelector('[aria-label = ' + '\"' + activeBtn + '\"' + ']').classList.add('e-selected-btn');\n }\n },\n select: function (args) {\n _this.pushActItemIntoObj();\n var objColl = extend([], _this.objColl, [], true);\n _this.objColl.pop();\n spanElem_1.textContent = args.item.text;\n _this.activeObj.strokeSettings.strokeWidth = parseInt(args.item.id, 10);\n if (_this.lowerCanvas.width > _this.lowerCanvas.height) {\n _this.activeObj.strokeSettings.strokeWidth *= ((ratio.width + ratio.height) / _this.factor);\n }\n else {\n _this.activeObj.strokeSettings.strokeWidth *= ((ratio.height + ratio.width) / _this.factor);\n }\n _this.strokeSettings.strokeWidth = _this.activeObj.strokeSettings.strokeWidth;\n _this.objColl.push(_this.activeObj);\n _this.undoRedoColl.push({ operation: 'shapeTransform', value: null,\n currentObj: extend([], _this.objColl, [], true), previousObj: objColl, factor: _this.factor,\n sharpen: _this.adjustmentLevel.sharpen, bw: _this.adjustmentLevel.bw });\n _this.redrawShape(_this.objColl[_this.objColl.length - 1]);\n if (Browser.isDevice) {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_5 = getComponent(_this.element.id + '_bottomToolbar', 'toolbar');\n toolbar_5.refreshOverflow();\n }\n }\n else {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_6 = getComponent(_this.element.id + '_toolbar', 'toolbar');\n toolbar_6.refreshOverflow();\n }\n }\n }\n });\n // Render initialized DropDownButton.\n drpDownBtn_1.appendTo('#' + this.element.id + '_borderWidthBtn');\n }\n };\n ImageEditor.prototype.getTextToolbarItem = function (items) {\n var toolbarItems = [];\n if (items.indexOf('fontFamily') > -1) {\n toolbarItems.push({ id: this.element.id + '_fontFamily', cssClass: 'top-icon e-img-font-family',\n tooltipText: this.l10n.getConstant('FontFamily'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_fontFamilyBtn\"></button>' });\n }\n if (items.indexOf('fontStyle') > -1) {\n toolbarItems.push({ id: this.element.id + '_fontStyle', cssClass: 'top-icon e-img-font-style',\n tooltipText: this.l10n.getConstant('FontStyle'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_fontStyleBtn\"></button>' });\n }\n if (items.indexOf('fontSize') > -1) {\n toolbarItems.push({ id: this.element.id + '_fontSize', cssClass: 'top-icon e-img-font-size',\n tooltipText: this.l10n.getConstant('FontSize'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_fontSizeBtn\"></button>' });\n }\n if (items.indexOf('fontColor') > -1) {\n toolbarItems.push({ cssClass: 'top-icon e-text-font-color', id: this.element.id + '_text_strokecolor',\n tooltipText: this.l10n.getConstant('FontColor'), align: 'Center',\n type: 'Input', template: '<button id=\"' + this.element.id + '_fontColorBtn\"></button>' });\n }\n var tempToolbarItems = this.processSubToolbar(items);\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getFontFamilyItems = function () {\n if (Browser.isDevice) {\n return [{ id: 'arial', text: 'ABC' }, { id: 'calibri', text: 'ABC' }, { id: 'georgia', text: 'ABC' },\n { id: 'roboto', text: 'ABC' }, { id: 'tahoma', text: 'ABC' }];\n }\n return [{ id: 'arial', text: 'Arial' }, { id: 'calibri', text: 'Calibri' }, { id: 'georgia', text: 'Georgia' },\n { id: 'roboto', text: 'Roboto' }, { id: 'tahoma', text: 'Tahoma' }];\n };\n ImageEditor.prototype.getFontSizeItems = function () {\n if (Browser.isDevice) {\n return [{ id: 'default', text: this.l10n.getConstant('ABC') }, { id: 'bold', text: this.l10n.getConstant('ABC') },\n { id: 'italic', text: this.l10n.getConstant('ABC') }, { id: 'bolditalic', text: this.l10n.getConstant('ABC') }];\n }\n return [{ id: 'default', text: this.l10n.getConstant('Default') }, { id: 'bold', text: this.l10n.getConstant('Bold') },\n { id: 'italic', text: this.l10n.getConstant('Italic') }, { id: 'bolditalic', text: this.l10n.getConstant('BoldItalic') }];\n };\n ImageEditor.prototype.initTextToolbarItem = function (items) {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getTextToolbarItem(items);\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.createTextColor(items);\n _this.createTextBtn(items);\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n _this.trigger('toolbarCreated', { toolbarType: 'text' });\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n };\n ImageEditor.prototype.createTextColor = function (items) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (items.indexOf('fontColor') > -1) {\n this.element.querySelector('.e-template.e-text-font-color').appendChild(this.createElement('input', {\n id: this.element.id + '_text_font'\n }));\n var fontColor = new ColorPicker({\n modeSwitcher: false, value: '#fff',\n showButtons: false, mode: 'Palette', cssClass: 'e-text-fontt-color',\n change: function (args) {\n _this.pushActItemIntoObj();\n _this.objColl.pop();\n if (proxy.textBox.style.display === 'none') {\n proxy.strokeSettings.strokeColor = proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n if (!proxy.togglePen) {\n _this.objColl.push(_this.activeObj);\n proxy.redrawShape(proxy.objColl[proxy.objColl.length - 1]);\n }\n }\n else if (proxy.textBox.style.display === 'block') {\n proxy.textBox.style.color = args.currentValue.hex;\n var temp = proxy.activeObj.strokeSettings.strokeColor;\n proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n _this.objColl.push(_this.activeObj);\n _this.objColl.pop();\n proxy.activeObj.strokeSettings.strokeColor = temp;\n }\n else if (!proxy.togglePen) {\n _this.objColl.push(_this.activeObj);\n proxy.redrawShape(proxy.objColl[proxy.objColl.length - 1]);\n }\n strokeDDB_2.element.children[0].style.backgroundColor = args.currentValue.rgba;\n strokeDDB_2.toggle();\n }\n }, '#' + this.element.id + '_text_font');\n var strokeDDB_2 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = strokeDDB_2.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-text-fontt-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_fontColorBtn');\n fontColor.inline = true;\n this.element.querySelector('.e-text-font-color.e-template .e-dropdownbtn-preview').style.background\n = '#fff';\n }\n };\n ImageEditor.prototype.pushActItemIntoObj = function () {\n if (this.textBox.style.display === 'none') {\n this.objColl.push(this.activeObj);\n }\n else {\n var temp = extend({}, this.activeObj, {}, true);\n this.setTextBoxStylesToActObj();\n this.objColl.push(this.activeObj);\n this.activeObj = temp;\n }\n };\n ImageEditor.prototype.createTextBtn = function (items) {\n var _this = this;\n var ratio = this.calcRatio();\n if (items.indexOf('fontFamily') > -1) {\n var fontNameBtn = document.getElementById(this.element.id + '_fontFamilyBtn');\n var spanElem_2 = document.createElement('span');\n if (Browser.isDevice) {\n spanElem_2.innerHTML = 'ABC';\n spanElem_2.setAttribute('style', 'font-family: arial');\n }\n else {\n spanElem_2.innerHTML = 'Arial';\n }\n spanElem_2.className = 'e-text-font-family';\n fontNameBtn.appendChild(spanElem_2);\n var fontFamilyBtn_1 = new DropDownButton({ items: this.getFontFamilyItems(),\n cssClass: 'e-font-family',\n createPopupOnClick: true,\n beforeItemRender: function (args) {\n args.element.setAttribute('style', 'font-family:' + args.element.id);\n },\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fontFamilyBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var fontFamily;\n if (_this.textBox.style.display === 'block') {\n fontFamily = _this.textBox.style.fontFamily;\n }\n else {\n fontFamily = _this.activeObj.textSettings.fontFamily;\n }\n args.element.querySelector('[id *= ' + '\"' + fontFamily.toLowerCase()\n + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n _this.pushActItemIntoObj();\n _this.objColl.pop();\n spanElem_2.textContent = args.item.text;\n if (Browser.isDevice) {\n spanElem_2.setAttribute('style', 'font-family:' + args.item.id);\n }\n if (_this.textBox.style.display === 'block') {\n var temp = _this.activeObj.textSettings.fontFamily;\n _this.activeObj.textSettings.fontFamily = _this.toPascalCase(args.item.id);\n _this.redrawText(ratio);\n _this.objColl.push(_this.activeObj);\n _this.objColl.pop();\n _this.upperContext.clearRect(0, 0, _this.upperCanvas.width, _this.upperCanvas.height);\n var width = _this.activeObj.activePoint.width +\n _this.activeObj.textSettings.fontSize * 0.25;\n _this.textBox.style.width = width / ratio.width + 'px';\n _this.textBox.style.fontFamily = _this.toPascalCase(args.item.id);\n _this.activeObj.textSettings.fontFamily = temp;\n _this.updateFontStyles();\n }\n else {\n _this.textSettings.fontFamily = _this.activeObj.textSettings.fontFamily = _this.toPascalCase(args.item.id);\n _this.redrawText(ratio);\n _this.objColl.push(_this.activeObj);\n _this.redrawShape(_this.objColl[_this.objColl.length - 1]);\n }\n }\n });\n fontFamilyBtn_1.appendTo('#' + this.element.id + '_fontFamilyBtn');\n }\n if (items.indexOf('fontStyle') > -1) {\n var fontStyleBtnElem = document.getElementById(this.element.id + '_fontStyleBtn');\n var span1Elem_1 = document.createElement('span');\n if (Browser.isDevice) {\n span1Elem_1.innerHTML = this.l10n.getConstant('ABC');\n }\n else {\n span1Elem_1.innerHTML = this.l10n.getConstant('Default');\n }\n span1Elem_1.className = 'e-text-font-style';\n fontStyleBtnElem.appendChild(span1Elem_1);\n var fontStyleBtn_1 = new DropDownButton({ items: this.getFontSizeItems(),\n cssClass: 'e-font-style',\n createPopupOnClick: true,\n beforeItemRender: function (args) {\n if (Browser.isDevice) {\n if (args.element.id === 'bold') {\n args.element.setAttribute('style', 'font-weight: bold');\n }\n else if (args.element.id === 'italic') {\n args.element.setAttribute('style', 'font-style: italic');\n }\n else if (args.element.id === 'bolditalic') {\n args.element.setAttribute('style', 'font-style: italic;font-weight: bold');\n }\n }\n },\n open: function (args) {\n var fontStyle = 'default';\n if (_this.textBox.style.display === 'block') {\n if (_this.textBox.style.fontWeight === 'bold') {\n fontStyle = 'bold';\n }\n if (_this.textBox.style.fontStyle === 'italic') {\n fontStyle = fontStyle.replace('default', '');\n fontStyle += 'italic';\n }\n }\n else {\n if (_this.activeObj.textSettings.bold) {\n fontStyle = 'bold';\n }\n if (_this.activeObj.textSettings.italic) {\n fontStyle = fontStyle.replace('default', '');\n fontStyle += 'italic';\n }\n }\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fontStyleBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n args.element.querySelector('[id *= ' + '\"' + fontStyle + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n if (Browser.isDevice) {\n if (args.item.id === 'bold') {\n span1Elem_1.setAttribute('style', 'font-weight: bold');\n }\n else if (args.item.id === 'italic') {\n span1Elem_1.setAttribute('style', 'font-style: italic');\n }\n else if (args.item.id === 'bolditalic') {\n span1Elem_1.setAttribute('style', 'font-style: italic;font-weight: bold');\n }\n _this.applyFontStyle(args.item.id, ratio);\n }\n else {\n span1Elem_1.textContent = args.item.text;\n _this.applyFontStyle(args.item.id, ratio);\n }\n }\n });\n fontStyleBtn_1.appendTo('#' + this.element.id + '_fontStyleBtn');\n }\n if (items.indexOf('fontSize') > -1) {\n var fontSizeBtnElem = document.getElementById(this.element.id + '_fontSizeBtn');\n var fontSizeSpanElem_1 = document.createElement('span');\n var fontSizes = this.getFontSizes();\n fontSizeSpanElem_1.innerHTML = fontSizes[0].text;\n fontSizeSpanElem_1.className = 'e-text-font-size';\n fontSizeBtnElem.appendChild(fontSizeSpanElem_1);\n var fontSizeBtn_1 = new DropDownButton({\n cssClass: 'e-font-size',\n items: fontSizes,\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fontSizeBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var activeBtn = fontSizeSpanElem_1.innerHTML;\n args.element.querySelector('[aria-label *= ' + '\"' + activeBtn + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n _this.pushActItemIntoObj();\n _this.objColl.pop();\n fontSizeSpanElem_1.textContent = args.item.text;\n if (_this.textBox.style.display === 'block') {\n var temp = _this.activeObj.textSettings.fontSize;\n _this.activeObj.textSettings.fontSize = parseInt(_this.fontSizeColl[(parseInt(args.item.text, 10) - 1)].text, 10);\n _this.objColl.push(_this.activeObj);\n _this.objColl.pop();\n var textStyle = '';\n if (_this.textBox.style.fontWeight === 'bold') {\n textStyle = 'bold ';\n }\n if (_this.textBox.style.fontStyle === 'italic') {\n textStyle = 'italic ';\n }\n if (_this.textBox.style.fontWeight === 'bold' && _this.textBox.style.fontStyle === 'italic') {\n textStyle = 'italic bold ';\n }\n _this.upperContext.font = textStyle + _this.activeObj.textSettings.fontSize + 'px' + ' ' + _this.textBox.style.fontFamily;\n var rows = _this.textBox.value.split('\\n');\n var text = _this.getMaxText(true);\n var width = _this.upperContext.measureText(text).width +\n _this.activeObj.textSettings.fontSize * 0.5;\n _this.textBox.style.width = width + 'px';\n _this.textBox.style.height = rows.length * (_this.activeObj.textSettings.fontSize + _this.activeObj.textSettings.fontSize * 0.25) + 'px';\n _this.activeObj.textSettings.fontSize = temp;\n _this.upperContext.font = _this.activeObj.textSettings.fontSize + 'px' + ' ' + _this.activeObj.textSettings.fontFamily;\n _this.textBox.style.fontSize = parseInt(_this.fontSizeColl[(parseInt(args.item.text, 10) - 1)].text, 10) + 'px';\n if (_this.textBox.style.fontFamily === 'georgia') {\n _this.textBox.style.width = parseFloat(_this.textBox.style.width) + parseFloat(_this.textBox.style.fontSize) + 'px';\n }\n }\n else {\n _this.textSettings.fontSize = _this.activeObj.textSettings.fontSize = parseInt(_this.fontSizeColl[(parseInt(args.item.text, 10) - 1)].text, 10);\n _this.upperContext.font = _this.activeObj.textSettings.fontSize + 'px' + ' ' + _this.activeObj.textSettings.fontFamily;\n var rows = _this.activeObj.keyHistory.split('\\n');\n var text = _this.getMaxText();\n var width = _this.upperContext.measureText(text).width +\n _this.activeObj.textSettings.fontSize * 0.5;\n var height = rows.length * (_this.activeObj.textSettings.fontSize +\n _this.activeObj.textSettings.fontSize * 0.25);\n _this.setTextSelection(width, height);\n _this.updateActiveObject(ratio, _this.activeObj.activePoint, _this.activeObj);\n _this.redrawText(ratio);\n _this.objColl.push(_this.activeObj);\n _this.redrawShape(_this.objColl[_this.objColl.length - 1]);\n }\n }\n });\n fontSizeBtn_1.appendTo('#' + this.element.id + '_fontSizeBtn');\n }\n };\n ImageEditor.prototype.getFontSizes = function () {\n var items = [];\n this.fontSizeColl = [];\n var fontSize;\n if (this.degree === 0 || this.degree % 180 === 0) {\n fontSize = this.lowerCanvas.width / 20;\n }\n else {\n fontSize = this.lowerCanvas.height / 20;\n }\n for (var i = 1; i <= 10; i++) {\n this.fontSizeColl.push({ text: (i * (Math.round(fontSize / 2))).toString() });\n items.push({ text: (i.toString()) });\n }\n return items;\n };\n ImageEditor.prototype.getTextAreaWidth = function (item) {\n var tempBold = this.activeObj.textSettings.bold;\n var tempItalic = this.activeObj.textSettings.italic;\n switch (item) {\n case 'default':\n this.activeObj.textSettings.bold = false;\n this.activeObj.textSettings.italic = false;\n break;\n case 'bold':\n this.activeObj.textSettings.bold = true;\n this.activeObj.textSettings.italic = false;\n break;\n case 'italic':\n this.activeObj.textSettings.bold = false;\n this.activeObj.textSettings.italic = true;\n break;\n case 'bolditalic':\n this.activeObj.textSettings.bold = true;\n this.activeObj.textSettings.italic = true;\n break;\n }\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.activeObj.keyHistory).width +\n this.activeObj.textSettings.fontSize * 0.5;\n this.activeObj.textSettings.bold = tempBold;\n this.activeObj.textSettings.italic = tempItalic;\n return width;\n };\n ImageEditor.prototype.updateObjColl = function (item) {\n var tempBold = this.activeObj.textSettings.bold;\n var tempItalic = this.activeObj.textSettings.italic;\n switch (item) {\n case 'default':\n this.activeObj.textSettings.bold = false;\n this.activeObj.textSettings.italic = false;\n break;\n case 'bold':\n this.activeObj.textSettings.bold = true;\n this.activeObj.textSettings.italic = false;\n break;\n case 'italic':\n this.activeObj.textSettings.bold = false;\n this.activeObj.textSettings.italic = true;\n break;\n case 'bolditalic':\n this.activeObj.textSettings.bold = true;\n this.activeObj.textSettings.italic = true;\n break;\n }\n this.objColl.push(this.activeObj);\n this.objColl.pop();\n this.activeObj.textSettings.bold = tempBold;\n this.activeObj.textSettings.italic = tempItalic;\n };\n ImageEditor.prototype.applyFontStyle = function (item, ratio) {\n this.pushActItemIntoObj();\n this.objColl.pop();\n switch (item) {\n case 'default':\n if (this.textBox.style.display === 'block') {\n var width = this.getTextAreaWidth(item) / ratio.width;\n this.textBox.style.width = width + 'px';\n this.textBox.style.fontWeight = 'normal';\n this.textBox.style.fontStyle = 'normal';\n this.updateObjColl(item);\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = false;\n this.textSettings.italic = this.activeObj.textSettings.italic = false;\n this.redrawText(ratio);\n }\n break;\n case 'bold':\n if (this.textBox.style.display === 'block') {\n var width = this.getTextAreaWidth(item) / ratio.width;\n this.textBox.style.width = width + 'px';\n this.textBox.style.fontWeight = 'bold';\n this.textBox.style.fontStyle = 'normal';\n this.updateObjColl(item);\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = true;\n this.textSettings.italic = this.activeObj.textSettings.italic = false;\n this.redrawText(ratio);\n }\n break;\n case 'italic':\n if (this.textBox.style.display === 'block') {\n var width = this.getTextAreaWidth(item) / ratio.width;\n this.textBox.style.width = width + 'px';\n this.textBox.style.fontWeight = 'normal';\n this.textBox.style.fontStyle = 'italic';\n this.updateObjColl(item);\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = false;\n this.textSettings.italic = this.activeObj.textSettings.italic = true;\n this.redrawText(ratio);\n }\n break;\n case 'bolditalic':\n if (this.textBox.style.display === 'block') {\n var width = this.getTextAreaWidth(item) / ratio.width;\n this.textBox.style.width = width + 'px';\n this.textBox.style.fontWeight = 'bold';\n this.textBox.style.fontStyle = 'italic';\n this.updateObjColl(item);\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = true;\n this.textSettings.italic = this.activeObj.textSettings.italic = true;\n this.redrawText(ratio);\n }\n break;\n }\n };\n ImageEditor.prototype.initZoomToolbarItem = function () {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var zoomItem = this.getZoomToolbarItem();\n this.defToolbarItems = leftItem.concat(zoomItem, rightItem);\n new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.renderSaveBtn();\n _this.trigger('toolbarCreated', { toolbarType: 'zoom' });\n }\n }, '#' + this.element.id + '_toolbar');\n this.createLeftToolbarControls();\n if (this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_7 = getComponent(this.element.id + '_toolbar', 'toolbar');\n toolbar_7.refreshOverflow();\n }\n };\n ImageEditor.prototype.contextualToolbarClicked = function (args) {\n var selEle = this.element.querySelector('.e-contextual-toolbar-wrapper .e-toolbar-item.e-selected');\n if (selEle) {\n selEle.classList.remove('e-selected');\n }\n document.getElementById(args.item.id + 'Canvas').parentElement.parentElement.classList.add('e-selected');\n this.currObjType.isFiltered = true;\n var type = args.item.id.replace(this.element.id, '').split('_')[1];\n var imageFiltering = { filter: this.toPascalCase(type) };\n this.trigger('imageFiltering', imageFiltering);\n this.setFilter(type.toLowerCase());\n this.currentFilter = args.item.id;\n };\n ImageEditor.prototype.defToolbarClicked = function (args) {\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n var zoomIn;\n var type = args.item.id.replace(this.element.id + '_', '').toLowerCase();\n var imageEditorObj = getInstance(document.getElementById(this.element.id), ImageEditor_1);\n var isCropSelection = false;\n var panBtn;\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if (!this.disabled) {\n switch (type) {\n case 'zoomin':\n this.currObjType.isFiltered = false;\n if (this.togglePen) {\n this.currObjType.isZoomed = true;\n this.freeHandDraw(false);\n }\n imageEditorObj.zoom(.1);\n break;\n case 'zoomout':\n this.currObjType.isFiltered = false;\n if (this.togglePen) {\n this.currObjType.isZoomed = true;\n this.freeHandDraw(false);\n }\n imageEditorObj.zoom(-.1);\n break;\n case 'pan':\n this.currObjType.isCustomCrop = this.currObjType.isFiltered = false;\n if (isCropSelection) {\n this.currObjType.isCustomCrop = false;\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.refreshToolbar('main');\n }\n if (this.togglePan) {\n this.cancelPan();\n this.disablePan = true;\n }\n else {\n panBtn = this.element.querySelector('.e-img-pan .e-btn');\n panBtn.classList.add('e-selected-btn');\n imageEditorObj.pan(true);\n this.disablePan = false;\n }\n zoomIn = document.querySelector('#' + this.element.id + '_zoomIn');\n if (!isNullOrUndefined(zoomIn) && this.factor >= 8) {\n zoomIn.classList.add('e-disabled');\n }\n else if (!isNullOrUndefined(zoomIn)) {\n zoomIn.classList.remove('e-disabled');\n }\n break;\n case 'cancel':\n if (this.textBox.style.display === 'block') {\n this.textBox.style.display = 'none';\n this.textBox.value = '';\n this.textBox.style.transform = '';\n this.activeObj.strokeSettings = this.tempStrokeSettings;\n this.activeObj.textSettings = this.tempTextSettings;\n }\n else if (!isNullOrUndefined(document.querySelector('#' + this.element.id + '_sliderWrapper')) ||\n this.currObjType.isFiltered) {\n this.lowerContext.filter = this.adjustmentValue = this.initialAdjustmentValue = this.tempAdjustmentValue;\n this.currentFilter = this.tempFilter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.currObjType.isFiltered = false;\n if (this.adjustmentLevel.sharpen || this.adjustmentLevel.bw) {\n if (this.adjustmentLevel.sharpen) {\n this.setSharpness(false);\n }\n else if (this.adjustmentLevel.bw) {\n this.setBlackAndWhiteFilter(false);\n }\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = tempFilter;\n }\n this.adjustmentLevel = extend({}, this.tempAdjustmentLevel, {}, true);\n if (this.currentFilter === this.element.id + '_sharpen' || this.currentFilter === this.element.id + '_blackandwhite'\n || this.tempSharpenFilter || this.tempBWFilter) {\n if (this.currentFilter === this.element.id + '_sharpen' || this.tempSharpenFilter) {\n this.setSharpness(true);\n }\n else if (this.currentFilter === this.element.id + '_blackandwhite' || this.tempBWFilter) {\n this.setBlackAndWhiteFilter(true);\n }\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = tempFilter;\n this.tempSharpenFilter = this.tempBWFilter = false;\n }\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n }\n this.cancelItems();\n break;\n case 'ok':\n this.okBtn();\n break;\n case 'reset':\n imageEditorObj.reset();\n break;\n case 'adjustment':\n this.upperCanvas.style.display = 'block';\n this.refreshToolbar('adjustment');\n this.lowerContext.filter = this.initialAdjustmentValue;\n this.tempAdjustmentValue = this.lowerContext.filter;\n this.tempAdjustmentLevel = extend({}, this.adjustmentLevel, {}, true);\n this.tempFilter = this.currentFilter;\n this.tempSharpenFilter = this.adjustmentLevel.sharpen;\n this.tempBWFilter = this.adjustmentLevel.bw;\n break;\n case 'brightness':\n case 'contrast':\n case 'hue':\n case 'saturation':\n case 'opacity':\n case 'blur':\n case 'exposure':\n this.unselectBtn();\n this.currObjType.isFiltered = true;\n this.refreshToolbar('color', null, null, null, type);\n document.getElementById(this.element.id + '_' + type).classList.add('e-selected-btn');\n break;\n case 'filter':\n this.upperCanvas.style.display = 'block';\n this.refreshToolbar('filter');\n this.lowerContext.filter = this.initialAdjustmentValue;\n this.tempAdjustmentValue = this.lowerContext.filter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.tempAdjustmentLevel = extend({}, this.adjustmentLevel, {}, true);\n this.tempFilter = this.currentFilter;\n this.tempSharpenFilter = this.adjustmentLevel.sharpen;\n this.tempBWFilter = this.adjustmentLevel.bw;\n break;\n case 'default':\n case 'chrome':\n case 'cold':\n case 'warm':\n case 'grayscale':\n case 'blackandwhite':\n case 'sepia':\n case 'invert':\n case 'sharpen':\n this.currObjType.isFiltered = true;\n this.setFilter(type);\n break;\n }\n }\n this.trigger('toolbarItemClicked', args);\n };\n ImageEditor.prototype.okBtn = function () {\n var isCropSelection = false;\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n var selElem = this.element.querySelector('.e-contextual-toolbar-wrapper .e-toolbar-item.e-selected');\n if (selElem) {\n this.currentFilter = selElem.children[0].children[0].id.replace('Canvas', '');\n }\n if (isCropSelection) {\n this.crop();\n }\n else if (this.togglePen) {\n this.freeHandDraw(false);\n }\n else if (this.textBox.style.display === 'block') {\n this.redrawActObj();\n }\n else if (!isNullOrUndefined(document.querySelector('#' + this.element.id + '_sliderWrapper')) ||\n this.currObjType.isFiltered) {\n this.initialAdjustmentValue = this.canvasFilter = this.lowerContext.filter;\n this.currObjType.isFiltered = false;\n }\n else {\n this.applyActObj();\n }\n this.callMainToolbar(false);\n };\n ImageEditor.prototype.unselectBtn = function () {\n if (document.querySelector('#' + this.element.id + '_brightness').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_brightness').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_contrast').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_contrast').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_hue').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_hue').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_saturation').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_saturation').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_opacity').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_opacity').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_blur').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_blur').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_exposure').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_exposure').classList.remove('e-selected-btn');\n }\n };\n ImageEditor.prototype.refreshSlider = function () {\n var sliderWrapper = document.querySelector('#' + this.element.id + '_sliderWrapper');\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var slider = document.querySelector('.e-slider');\n var hdrWrapper = document.querySelector('#' + this.element.id + '_headWrapper');\n if (hdrWrapper) {\n hdrWrapper.style.display = 'none';\n }\n if (!isNullOrUndefined(sliderWrapper) && !isNullOrUndefined(slider)) {\n slider.ej2_instances[0].destroy();\n sliderWrapper.remove();\n }\n };\n ImageEditor.prototype.updateAdjustment = function (type, value, isPreview) {\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var splitWords = this.lowerContext.filter.split(' ');\n var values = [];\n var opacityValue;\n var brightnessValue;\n if (splitWords[4] !== undefined) {\n opacityValue = parseFloat(splitWords[4].split('(')[1]);\n }\n if (splitWords[0] !== undefined) {\n brightnessValue = parseFloat(splitWords[0].split('(')[1]);\n }\n var brightness = this.getFilterValue(this.adjustmentLevel.brightness);\n var saturation = this.getFilterValue(this.adjustmentLevel.saturation);\n if (type !== 'brightness' && type !== 'contrast' && type !== 'hue' && type !== 'saturation' && type !== 'exposure'\n && type !== 'opacity' && type !== 'blur') {\n if (isNullOrUndefined(isPreview) && (this.adjustmentLevel.sharpen || this.adjustmentLevel.bw)) {\n if (this.adjustmentLevel.sharpen) {\n this.setSharpness(false);\n }\n else if (this.adjustmentLevel.bw) {\n this.setBlackAndWhiteFilter(false);\n }\n var temp_1 = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp_1;\n }\n }\n if (brightness !== 1) {\n splitWords[4] = 'opacity(' + (opacityValue - 0.3) + ')';\n }\n var saturate;\n var bright;\n var contrast;\n var saturatePercentage;\n var saturatePercent;\n var tempFilter;\n var temp;\n switch (type) {\n case 'brightness':\n if (splitWords[3].split) {\n if (parseFloat(splitWords[3].split('(')[1]) !== 100) {\n value += 0.1;\n }\n }\n splitWords[0] = 'brightness(' + value + ')';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'contrast':\n splitWords[1] = 'contrast(' + value + '%)';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'hue':\n splitWords[2] = 'hue-rotate(' + value + 'deg)';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'saturation':\n splitWords[3] = 'saturate(' + value + '%)';\n if (saturation !== 1) {\n splitWords[0] = 'brightness(' + (brightnessValue + 0.1) + ')';\n }\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'opacity':\n if (parseFloat(splitWords[0].split('(')[1]) !== 1) {\n value -= 0.2;\n }\n splitWords[4] = 'opacity(' + value + ')';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'blur':\n splitWords[5] = 'blur(' + value + 'px)';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'exposure':\n if (brightness !== 1) {\n splitWords[4] = 'opacity(' + (opacityValue - 0.3) + ')';\n }\n if (value > 1) {\n value -= 1;\n value += brightness;\n }\n else if (value < 1) {\n value = 1 - value;\n value = brightness - value;\n }\n splitWords[0] = 'brightness(' + value + ')';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'chrome':\n saturate = this.getSaturationFilterValue(this.adjustmentLevel.saturation);\n saturate *= 100;\n value = saturate + (saturate * 0.4);\n splitWords[3] = 'saturate(' + value + '%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'cold':\n // Adjusting Brightness\n bright = this.getFilterValue(this.adjustmentLevel.brightness);\n bright *= 100;\n value = bright * 0.9;\n splitWords[0] = 'brightness(' + value + '%)';\n // Adjusting Contrast\n contrast = this.getFilterValue(this.adjustmentLevel.contrast);\n contrast *= 100;\n value = contrast + (contrast * 0.5);\n splitWords[1] = 'contrast(' + value + '%)';\n // Adjusting Saturation\n saturatePercentage = this.getSaturationFilterValue(this.adjustmentLevel.saturation);\n saturatePercentage *= 100;\n value = saturatePercentage;\n splitWords[3] = 'saturate(' + value + '%)';\n values = this.adjustmentValue.split(' ');\n splitWords[2] = values[2];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'warm':\n saturatePercent = this.getSaturationFilterValue(this.adjustmentLevel.saturation);\n saturatePercent *= 100;\n value = saturatePercent + (saturatePercent * 0.4);\n splitWords[3] = 'saturate(' + value + '%)';\n splitWords[6] = 'sepia(25%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'grayscale':\n splitWords[7] = 'grayscale(100%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'blackandwhite':\n values = this.adjustmentValue.split(' ');\n if (isPreview) {\n tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n this.setBlackAndWhiteFilter(true);\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n }\n else {\n tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n this.setBlackAndWhiteFilter(true);\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n this.lowerContext.filter = this.initialAdjustmentValue = splitWords.join(' ');\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = tempFilter;\n }\n break;\n case 'sepia':\n splitWords[6] = 'sepia(100%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'invert':\n splitWords[8] = 'invert(100%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n break;\n case 'sharpen':\n values = this.adjustmentValue.split(' ');\n if (isPreview) {\n temp = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n }\n else {\n temp = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n this.setSharpness(true);\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n this.lowerContext.filter = this.initialAdjustmentValue = splitWords.join(' ');\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n temp = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp;\n }\n break;\n }\n if (type !== 'sharpen' && type !== 'blackandwhite') {\n if (isNullOrUndefined(isPreview)) {\n if (type === 'default') {\n splitWords = this.getDefaultFilter(splitWords);\n }\n this.lowerContext.filter = splitWords.join(' ');\n }\n splitWords = this.setTempFilterValue(brightness, isPreview, splitWords, type);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n if (brightness !== 1) {\n splitWords[4] = 'opacity(' + opacityValue + ')';\n }\n else if (saturation !== 1) {\n splitWords[0] = 'brightness(' + brightnessValue + ')';\n }\n if (type === 'exposure' && brightness !== 1) {\n splitWords[0] = 'brightness(' + brightnessValue + ')';\n }\n splitWords = this.setTempFilterValue(brightness, isPreview, splitWords, type);\n if (isNullOrUndefined(isPreview)) {\n this.lowerContext.filter = this.initialAdjustmentValue = splitWords.join(' ');\n }\n var tempFilter_1 = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = tempFilter_1;\n if (brightness === 1) {\n this.isBrightnessAdjusted = false;\n }\n else {\n this.isBrightnessAdjusted = true;\n }\n }\n var filter = splitWords.join(' ');\n return filter;\n };\n ImageEditor.prototype.updateBrightnessFilter = function () {\n var splitWords = this.lowerContext.filter.split(' ');\n if (this.isBrightnessAdjusted && splitWords.length > 0 && !isNullOrUndefined(splitWords[4])) {\n var opacityValue = parseFloat(splitWords[4].split('(')[1]);\n splitWords[4] = 'opacity(' + (opacityValue - 0.3) + ')';\n this.lowerContext.filter = splitWords.join(' ');\n }\n };\n ImageEditor.prototype.autoEnablePan = function () {\n if (this.factor > 0.95 && this.factor < 1.05) {\n this.dragCanvas = this.togglePan = false;\n this.callMainToolbar(false, true);\n this.pan(false);\n this.disablePan = false;\n }\n else if (!this.disablePan) {\n this.pan(true);\n }\n else if (this.disablePan) {\n this.pan(false);\n }\n };\n ImageEditor.prototype.setTempFilterValue = function (brightness, isPreview, splitWords, type) {\n if (isPreview && brightness !== 1) {\n var tempSplitWords = this.lowerContext.filter.split(' ');\n tempSplitWords[4] = splitWords[4];\n this.lowerContext.filter = tempSplitWords.join(' ');\n }\n else if (isPreview && type === 'default') {\n splitWords = this.getDefaultFilter(splitWords);\n }\n return splitWords;\n };\n ImageEditor.prototype.getDefaultFilter = function (splitWords) {\n var values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n return splitWords;\n };\n ImageEditor.prototype.setAdjustment = function (type) {\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var splitWords = this.lowerContext.filter.split(' ');\n var value;\n var valueArr;\n switch (type) {\n case 'brightness':\n valueArr = splitWords[0].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n this.adjustmentLevel.brightness = this.setFilterValue(value);\n break;\n case 'contrast':\n valueArr = splitWords[1].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n value /= 100;\n this.adjustmentLevel.contrast = this.setFilterValue(value);\n break;\n case 'hue':\n valueArr = splitWords[2].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n value /= 3;\n this.adjustmentLevel.hue = value;\n break;\n case 'saturation':\n valueArr = splitWords[3].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n value /= 100;\n this.adjustmentLevel.saturation = this.setSaturationFilterValue(value);\n break;\n case 'opacity':\n valueArr = splitWords[4].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n if (value === 0.45) {\n value = 40;\n }\n else if (value === 0.40) {\n value = 30;\n }\n else if (value === 0.35) {\n value = 20;\n }\n else if (value === 0.30) {\n value = 10;\n }\n else if (value === 0.25) {\n value = 0;\n }\n else {\n value *= 100;\n }\n this.adjustmentLevel.opacity = value;\n break;\n case 'blur':\n valueArr = splitWords[5].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n value *= 20;\n this.adjustmentLevel.blur = value;\n break;\n case 'exposure':\n valueArr = splitWords[0].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n this.adjustmentLevel.exposure = this.setFilterValue(value);\n break;\n }\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp;\n };\n ImageEditor.prototype.renderSlider = function (type) {\n var _this = this;\n var canvasWrapper = document.querySelector('#' + this.element.id + '_contextualToolbarArea');\n var hdrWrapper = document.querySelector('#' + this.element.id + '_headWrapper');\n var labelWrapper = document.querySelector('#' + this.element.id + '_labelWrapper');\n if (!hdrWrapper && !isNullOrUndefined(canvasWrapper)) {\n hdrWrapper = canvasWrapper.appendChild(this.createElement('div', {\n id: this.element.id + '_headWrapper',\n styles: 'position: relative'\n }));\n labelWrapper = hdrWrapper.appendChild(this.createElement('label', {\n id: this.element.id + '_labelWrapper',\n styles: Browser.isDevice ? 'position: absolute; top: 25%; left: calc(50% - 150px); font-size: 15px; text-transform: capitalize; font-weight: 400;'\n : 'position: absolute; top: 25%; left: calc(50% - 226px); font-size: 15px; text-transform: capitalize; font-weight: 400;'\n }));\n }\n else {\n hdrWrapper.style.display = 'block';\n }\n labelWrapper.textContent = this.l10n.getConstant(this.toPascalCase(type));\n var sliderWrapper = hdrWrapper.appendChild(this.createElement('div', {\n id: this.element.id + '_sliderWrapper',\n styles: 'position: absolute'\n }));\n var value = this.getCurrAdjustmentValue(type);\n var min;\n var max;\n var slider;\n if (type === 'brightness' || type === 'contrast' || type === 'saturation' || type === 'exposure') {\n if (this.finetuneSettings) {\n if (type === 'brightness' && this.finetuneSettings.brightness) {\n min = this.finetuneSettings.brightness.min;\n max = this.finetuneSettings.brightness.max;\n }\n else if (type === 'contrast' && this.finetuneSettings.contrast) {\n min = this.finetuneSettings.contrast.min;\n max = this.finetuneSettings.contrast.max;\n }\n else if (type === 'saturation' && this.finetuneSettings.saturation) {\n min = this.finetuneSettings.saturation.min;\n max = this.finetuneSettings.saturation.max;\n }\n else if (type === 'exposure' && this.finetuneSettings.exposure) {\n min = this.finetuneSettings.exposure.min;\n max = this.finetuneSettings.exposure.max;\n }\n else {\n min = -100;\n max = 100;\n }\n }\n else {\n min = -100;\n max = 100;\n }\n slider = new Slider({\n value: value,\n tooltip: { isVisible: true, placement: 'Before', showOn: 'Always' },\n type: 'MinRange',\n min: min,\n max: max,\n step: 10,\n width: Browser.isDevice ? '200px' : '300px',\n cssClass: 'e-slider',\n change: function (args) {\n _this.setCurrAdjustmentValue(type, args.value);\n }\n });\n }\n else if (type === 'hue' || type === 'blur' || type === 'opacity') {\n if (this.finetuneSettings) {\n if (type === 'hue' && this.finetuneSettings.hue) {\n min = this.finetuneSettings.hue.min;\n max = this.finetuneSettings.hue.max;\n }\n else if (type === 'blur' && this.finetuneSettings.blur) {\n min = this.finetuneSettings.blur.min;\n max = this.finetuneSettings.blur.max;\n }\n else if (type === 'opacity' && this.finetuneSettings.opacity) {\n min = this.finetuneSettings.opacity.min;\n max = this.finetuneSettings.opacity.max;\n }\n else {\n min = 0;\n max = 100;\n }\n }\n else {\n min = 0;\n max = 100;\n }\n slider = new Slider({\n value: value,\n tooltip: { isVisible: true, placement: 'Before', showOn: 'Always' },\n type: 'MinRange',\n min: min,\n max: max,\n step: 10,\n width: Browser.isDevice ? '200px' : '300px',\n cssClass: 'e-slider',\n change: function (args) {\n _this.setCurrAdjustmentValue(type, args.value);\n }\n });\n }\n slider.appendTo('#' + this.element.id + '_sliderWrapper');\n sliderWrapper.style.left = (parseFloat(canvasWrapper.style.width) - parseFloat(slider.width)) / 2 + 'px';\n };\n ImageEditor.prototype.getCurrAdjustmentValue = function (type) {\n var value;\n switch (type) {\n case 'brightness':\n value = this.adjustmentLevel.brightness;\n break;\n case 'contrast':\n value = this.adjustmentLevel.contrast;\n break;\n case 'hue':\n value = this.adjustmentLevel.hue;\n break;\n case 'saturation':\n value = this.adjustmentLevel.saturation;\n break;\n case 'opacity':\n value = this.adjustmentLevel.opacity;\n break;\n case 'blur':\n value = this.adjustmentLevel.blur;\n break;\n case 'exposure':\n value = this.adjustmentLevel.exposure;\n break;\n }\n return value;\n };\n ImageEditor.prototype.setCurrAdjustmentValue = function (type, value) {\n var fineTuneValueChanging = { finetune: this.toPascalCase(type), value: value };\n this.trigger('fineTuneValueChanging', fineTuneValueChanging);\n switch (type) {\n case 'brightness':\n this.setBrightness(value);\n break;\n case 'contrast':\n this.setContrast(value);\n break;\n case 'hue':\n this.setHue(value);\n break;\n case 'saturation':\n this.setSaturation(value);\n break;\n case 'opacity':\n this.setOpacity(value);\n break;\n case 'blur':\n this.setBlur(value);\n break;\n case 'exposure':\n this.setExposure(value);\n break;\n }\n };\n ImageEditor.prototype.cancelPan = function () {\n this.applyActObj();\n var panBtn = this.element.querySelector('.e-img-pan .e-btn');\n panBtn.classList.remove('e-selected-btn');\n this.pan(false);\n };\n ImageEditor.prototype.callMainToolbar = function (isApplyBtn, isZooming) {\n this.refreshToolbar('main', isApplyBtn, false, isZooming);\n };\n ImageEditor.prototype.cancelItems = function () {\n var ratio = this.calcRatio();\n var isCropSelection = false;\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if (this.togglePen) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.togglePen = false;\n this.upperCanvas.style.cursor = 'default';\n this.penDrawColl = [];\n this.imageEditorPointsColl = [];\n }\n else if (this.activeObj.shape === 'text') {\n this.activeObj.strokeSettings = this.tempStrokeSettings;\n this.activeObj.textSettings = this.tempTextSettings;\n if (this.activeObj.keyHistory === 'Enter Text' && this.activeObj.activePoint.startX === this.textStartPoints.x\n && this.activeObj.activePoint.startY === this.textStartPoints.y) {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.drawShapeText();\n }\n else {\n this.redrawText(ratio);\n this.redrawShape(this.activeObj);\n if (!isCropSelection && this.activeObj.topLeftCircle !== undefined) {\n this.applyActObj();\n }\n this.clearSelection();\n }\n this.tempTextSettings = { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n }\n else if (this.activeObj.shape === 'rectangle' || this.activeObj.shape === 'ellipse' || this.activeObj.shape === 'line') {\n this.activeObj.strokeSettings = this.tempStrokeSettings;\n this.redrawShape(this.activeObj);\n this.applyActObj();\n }\n else {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.isCustomCrop = false;\n this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n this.callMainToolbar();\n };\n ImageEditor.prototype.gradient = function (a, b) {\n return (b.y - a.y) / (b.x - a.x);\n };\n ImageEditor.prototype.applyPenDraw = function () {\n if (this.togglePen && this.factor === 1 && !this.currObjType.isZoomed) {\n this.apply();\n this.penDrawColl = [];\n this.imageEditorPointsColl = [];\n }\n else {\n var tempCanvas = this.lowerCanvas.appendChild(this.createElement('canvas', {\n id: this.element.id + '_tempCanvas', attrs: { name: 'canvasImage' }\n }));\n var tempContext = tempCanvas.getContext('2d');\n tempCanvas.width = this.lowerCanvas.width;\n tempCanvas.height = this.lowerCanvas.height;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n tempContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n for (var i = 0; i < this.penDrawColl.length; i++) {\n tempContext.lineWidth = 2 * this.penDrawColl[i].strokeWidth;\n tempContext.strokeStyle = this.penDrawColl[i].strokeColor;\n var nexP = void 0;\n var preP = void 0;\n var f = 0.3;\n var t = 1;\n tempContext.beginPath();\n tempContext.moveTo(this.penDrawColl[i].points[0].x, this.penDrawColl[i].points[0].y);\n var m = 0;\n var dx1 = 0;\n var dx2 = 0;\n var dy1 = 0;\n var dy2 = 0;\n preP = this.penDrawColl[i].points[0];\n for (var j = 1; j < this.penDrawColl[i].points.length; j++) {\n var curP = this.penDrawColl[i].points[j];\n nexP = this.penDrawColl[i].points[j + 1];\n if (nexP) {\n m = this.gradient(preP, nexP);\n dx2 = (nexP.x - curP.x) * -f;\n dy2 = dx2 * m * t;\n }\n else {\n dx2 = 0;\n dy2 = 0;\n }\n tempContext.bezierCurveTo(preP.x - dx1, preP.y - dy1, curP.x + dx2, curP.y + dy2, curP.x, curP.y);\n dx1 = dx2;\n dy1 = dy2;\n preP = curP;\n if (this.penDrawColl[i].points.length > 2) {\n this.penDrawColl[i].points.shift();\n }\n tempContext.stroke();\n }\n }\n this.penDrawColl = [];\n this.imageEditorPointsColl = [];\n this.togglePen = false;\n var imgData = tempContext.getImageData(0, 0, tempCanvas.width, tempCanvas.height);\n var tempObj = void 0;\n for (var index = 0; index < this.imgDataColl.length; index++) {\n if (this.imgDataColl[index].operation !== 'freehanddraw') {\n tempObj = this.imgDataColl[index];\n break;\n }\n }\n this.imgDataColl.splice(0, 1, { operation: 'freehanddraw', value: imgData });\n this.imgDataColl.splice(1, 1, tempObj);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.inMemoryCanvas.width = imgData.width;\n this.inMemoryCanvas.height = imgData.height;\n this.inMemoryContext.putImageData(imgData, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.currObjType.isZoomed = false;\n }\n };\n ImageEditor.prototype.redrawImgWithObj = function () {\n this.lowerContext.filter = this.canvasFilter;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp;\n };\n ImageEditor.prototype.refreshToolbar = function (type, isApplyBtn, isCropping, isZooming, cType) {\n var args = { toolbarType: type };\n if (type !== 'filter' && type !== 'color') {\n if (document.getElementById(this.element.id + '_toolbar') && this.defToolbarItems.length > 0) {\n getComponent(document.getElementById(this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (document.getElementById(this.element.id + '_bottomToolbar') && this.defToolbarItems.length > 0) {\n if (document.getElementById(this.element.id + '_bottomToolbar').className.indexOf('e-control') > -1) {\n getComponent(document.getElementById(this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n }\n }\n this.refreshSlider();\n switch (type) {\n case 'main':\n if (Browser.isDevice) {\n if (isCropping) {\n this.initToolbarItem(false, true, true);\n }\n else {\n this.initToolbarItem(false, true);\n }\n }\n else if (!Browser.isDevice || isZooming) {\n this.initToolbarItem(isApplyBtn, Browser.isDevice);\n }\n if (Browser.isDevice) {\n this.initBottomToolbar();\n }\n break;\n case 'shapes':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n if (this.activeObj.shape === 'line') {\n args.toolbarItems = ['strokeColor', 'strokeWidth'];\n }\n else {\n args.toolbarItems = ['fillColor', 'strokeColor', 'strokeWidth'];\n }\n this.trigger('toolbarUpdating', args);\n this.initShapesToolbarItem(args.toolbarItems);\n break;\n case 'text':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n args.toolbarItems = ['fontFamily', 'fontStyle', 'fontSize', 'fontColor'];\n this.trigger('toolbarUpdating', args);\n this.initTextToolbarItem(args.toolbarItems);\n break;\n case 'pen':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n args.toolbarItems = ['strokeColor', 'strokeWidth'];\n this.trigger('toolbarUpdating', args);\n this.initPenToolbarItem(args.toolbarItems);\n break;\n case 'pan':\n this.initZoomToolbarItem();\n break;\n case 'adjustment':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n this.initAdjustmentToolbarItem();\n break;\n case 'filter':\n this.updateContextualToolbar(type);\n break;\n case 'color':\n this.updateContextualToolbar(type, cType);\n break;\n }\n };\n ImageEditor.prototype.getAdjustmentToolbarItem = function () {\n var toolbarItems = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Brightness') > -1)) {\n toolbarItems.push({ id: this.element.id + '_brightness', prefixIcon: 'e-icons e-brightness', cssClass: 'top-icon e-brightness',\n tooltipText: this.l10n.getConstant('Brightness'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Contrast') > -1)) {\n toolbarItems.push({ id: this.element.id + '_contrast', prefixIcon: 'e-icons e-contrast', cssClass: 'top-icon e-contrast',\n tooltipText: this.l10n.getConstant('Contrast'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Hue') > -1)) {\n toolbarItems.push({ id: this.element.id + '_hue', prefixIcon: 'e-icons e-fade', cssClass: 'top-icon e-fade',\n tooltipText: this.l10n.getConstant('Hue'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Saturation') > -1)) {\n toolbarItems.push({ id: this.element.id + '_saturation', prefixIcon: 'e-icons e-saturation', cssClass: 'top-icon e-saturation',\n tooltipText: this.l10n.getConstant('Saturation'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Exposure') > -1)) {\n toolbarItems.push({ id: this.element.id + '_exposure', prefixIcon: 'e-icons e-grain', cssClass: 'top-icon e-grain',\n tooltipText: this.l10n.getConstant('Exposure'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Opacity') > -1)) {\n toolbarItems.push({ id: this.element.id + '_opacity', prefixIcon: 'e-icons e-opacity', cssClass: 'top-icon e-opacity',\n tooltipText: this.l10n.getConstant('Opacity'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Blur') > -1)) {\n toolbarItems.push({ id: this.element.id + '_blur', prefixIcon: 'e-icons e-tint', cssClass: 'top-icon e-tint',\n tooltipText: this.l10n.getConstant('Blur'), align: 'Center' });\n }\n var tempToolbarItems = this.processToolbar('center');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getFilterToolbarItem = function () {\n var toolbarItems = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Default') > -1)) {\n toolbarItems.push({ id: this.element.id + '_default', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Default'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_defaultCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Default') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Chrome') > -1)) {\n toolbarItems.push({ id: this.element.id + '_chrome', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Chrome'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_chromeCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Chrome') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Cold') > -1)) {\n toolbarItems.push({ id: this.element.id + '_cold', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Cold'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_coldCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Cold') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Warm') > -1)) {\n toolbarItems.push({ id: this.element.id + '_warm', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Warm'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_warmCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Warm') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Grayscale') > -1)) {\n toolbarItems.push({ id: this.element.id + '_grayscale', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Grayscale'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_grayscaleCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Grayscale') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Sepia') > -1)) {\n toolbarItems.push({ id: this.element.id + '_sepia', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Sepia'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_sepiaCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Sepia') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Invert') > -1)) {\n toolbarItems.push({ id: this.element.id + '_invert', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Invert'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_invertCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Invert') + '</span></div></div>' });\n }\n var tempToolbarItems = this.processToolbar('center');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getPenToolbarItem = function (items) {\n var toolbarItems = [];\n if (items.indexOf('strokeColor') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', id: this.element.id + '_pen_strokecolor',\n cssClass: 'top-icon e-pen-stroke-color',\n tooltipText: this.l10n.getConstant('StrokeColor'), align: 'Center', type: 'Input',\n template: '<button id=\"' + this.element.id + '_penColorBtn\"></button>' });\n }\n if (items.indexOf('strokeWidth') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', cssClass: 'top-icon e-size',\n tooltipText: this.l10n.getConstant('StrokeWidth'),\n align: 'Center', type: 'Input', template: '<button id=\"' + this.element.id + '_penStrokeWidth\"></button>' });\n }\n var tempToolbarItems = this.processSubToolbar(items);\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.initPenToolbarItem = function (items) {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getPenToolbarItem(items);\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.createPenColor(items);\n _this.createPenBtn(items);\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n _this.trigger('toolbarCreated', { toolbarType: 'pen' });\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n };\n ImageEditor.prototype.createPenColor = function (items) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (items.indexOf('strokeColor') > -1) {\n this.element.querySelector('.e-template.e-pen-stroke-color').appendChild(this.createElement('input', {\n id: this.element.id + '_pen_stroke'\n }));\n var penColor = new ColorPicker({\n modeSwitcher: false, value: '#fff',\n showButtons: false, mode: 'Palette', cssClass: 'e-pen-color',\n change: function (args) {\n proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n if (!proxy.togglePen) {\n proxy.redrawShape(_this.activeObj);\n }\n strokeDDB_3.element.children[0].style.backgroundColor = args.currentValue.rgba;\n strokeDDB_3.toggle();\n }\n }, '#' + this.element.id + '_pen_stroke');\n var strokeDDB_3 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = strokeDDB_3.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-pen-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_penColorBtn');\n penColor.inline = true;\n this.element.querySelector('.e-pen-stroke-color.e-template .e-dropdownbtn-preview').style.background\n = '#fff';\n }\n };\n ImageEditor.prototype.createPenBtn = function (items) {\n var _this = this;\n var ratio = this.calcRatio();\n var strokeWidthItems = [\n { id: '1', text: this.l10n.getConstant('XSmall') },\n { id: '2', text: this.l10n.getConstant('Small') },\n { id: '3', text: this.l10n.getConstant('Medium') },\n { id: '4', text: this.l10n.getConstant('Large') },\n { id: '5', text: this.l10n.getConstant('XLarge') }\n ];\n if (items.indexOf('strokeWidth') > -1) {\n var strokeWidthBtn = document.getElementById(this.element.id + '_penStrokeWidth');\n var spanElem_3 = document.createElement('span');\n if (isNullOrUndefined(this.penStrokeWidth)) {\n spanElem_3.innerHTML = this.l10n.getConstant('Small');\n }\n else {\n spanElem_3.innerHTML = this.getPenStroke(this.penStrokeWidth, this.calcRatio());\n }\n spanElem_3.className = 'e-pen-stroke-width';\n strokeWidthBtn.appendChild(spanElem_3);\n var drpDownBtn_2 = new DropDownButton({ items: strokeWidthItems,\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn_2.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var activeBtn = spanElem_3.innerHTML;\n args.element.querySelector('[aria-label = ' + '\"' + activeBtn + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n spanElem_3.textContent = args.item.text;\n _this.setPenStroke(args.item.id, ratio);\n if (Browser.isDevice) {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_8 = getComponent(_this.element.id + '_bottomToolbar', 'toolbar');\n toolbar_8.refreshOverflow();\n }\n }\n else {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_9 = getComponent(_this.element.id + '_toolbar', 'toolbar');\n toolbar_9.refreshOverflow();\n }\n }\n }\n });\n // Render initialized DropDownButton.\n drpDownBtn_2.appendTo('#' + this.element.id + '_penStrokeWidth');\n }\n };\n ImageEditor.prototype.setPenStroke = function (args, ratio) {\n switch (parseInt(args, 10)) {\n case 1:\n this.penStrokeWidth = (ratio.width + ratio.height) * 0.4;\n break;\n case 2:\n this.penStrokeWidth = (ratio.width + ratio.height) * 0.8;\n break;\n case 3:\n this.penStrokeWidth = (ratio.width + ratio.height) * 1.2;\n break;\n case 4:\n this.penStrokeWidth = (ratio.width + ratio.height) * 1.6;\n break;\n case 5:\n this.penStrokeWidth = (ratio.width + ratio.height) * 2;\n break;\n }\n };\n ImageEditor.prototype.getPenStroke = function (value, ratio) {\n var textContent = '';\n if (Math.round(value / 0.4) === Math.round(ratio.width + ratio.height)) {\n textContent = this.l10n.getConstant('XSmall');\n }\n else if (Math.round(value / 0.8) === Math.round(ratio.width + ratio.height)) {\n textContent = this.l10n.getConstant('Small');\n }\n else if (Math.round(value / 1.2) === Math.round(ratio.width + ratio.height)) {\n textContent = this.l10n.getConstant('Medium');\n }\n else if (Math.round(value / 1.6) === Math.round(ratio.width + ratio.height)) {\n textContent = this.l10n.getConstant('Large');\n }\n else if (Math.round(value / 2) === Math.round(ratio.width + ratio.height)) {\n textContent = this.l10n.getConstant('XLarge');\n }\n return textContent;\n };\n ImageEditor.prototype.initAdjustmentToolbarItem = function () {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getAdjustmentToolbarItem();\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n };\n ImageEditor.prototype.initFilterToolbarItem = function () {\n var _this = this;\n var mainItem = this.getFilterToolbarItem();\n if (!isNullOrUndefined(document.querySelector('#' + this.element.id + '_contextualToolbar')) &&\n document.querySelector('#' + this.element.id + '_contextualToolbar').classList.contains('e-control')) {\n getComponent(document.getElementById(this.element.id + '_contextualToolbar'), 'toolbar').destroy();\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: mainItem,\n clicked: this.contextualToolbarClicked.bind(this),\n created: function () {\n _this.createCanvasFilter();\n if (_this.currentFilter === '') {\n _this.currentFilter = _this.element.id + '_default';\n }\n var hdrWrapper = document.querySelector('#' + _this.element.id + '_headWrapper');\n if (hdrWrapper) {\n hdrWrapper.style.display = 'none';\n }\n document.getElementById(_this.currentFilter + 'Canvas').parentElement.parentElement.classList.add('e-selected');\n toolbar.refreshOverflow();\n }\n });\n toolbar.appendTo('#' + this.element.id + '_contextualToolbar');\n };\n ImageEditor.prototype.createCanvasFilter = function () {\n if (this.adjustmentLevel.sharpen || this.adjustmentLevel.bw) {\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = this.tempImageData.width;\n this.inMemoryCanvas.height = this.tempImageData.height;\n this.inMemoryContext.putImageData(this.tempImageData, 0, 0);\n }\n var noFilter = document.querySelector('#' + this.element.id + '_defaultCanvas');\n noFilter.style.width = '100px';\n noFilter.style.height = '100px';\n noFilter.style.filter = this.updateAdjustment('default', null, true);\n var ctx = noFilter.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var chrome = document.querySelector('#' + this.element.id + '_chromeCanvas');\n chrome.style.width = '100px';\n chrome.style.height = '100px';\n chrome.style.filter = this.updateAdjustment('chrome', null, true);\n ctx = chrome.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var cold = document.querySelector('#' + this.element.id + '_coldCanvas');\n cold.style.width = '100px';\n cold.style.height = '100px';\n cold.style.filter = this.updateAdjustment('cold', null, true);\n ctx = cold.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var warm = document.querySelector('#' + this.element.id + '_warmCanvas');\n warm.style.width = '100px';\n warm.style.height = '100px';\n warm.style.filter = this.updateAdjustment('warm', null, true);\n ctx = warm.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var temp = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp;\n var grayscale = document.querySelector('#' + this.element.id + '_grayscaleCanvas');\n grayscale.style.width = '100px';\n grayscale.style.height = '100px';\n grayscale.style.filter = this.updateAdjustment('grayscale', null, true);\n ctx = grayscale.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = tempFilter;\n var sepia = document.querySelector('#' + this.element.id + '_sepiaCanvas');\n sepia.style.width = '100px';\n sepia.style.height = '100px';\n sepia.style.filter = this.updateAdjustment('sepia', null, true);\n ctx = sepia.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var invert = document.querySelector('#' + this.element.id + '_invertCanvas');\n invert.style.width = '100px';\n invert.style.height = '100px';\n invert.style.filter = this.updateAdjustment('invert', null, true);\n ctx = invert.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n };\n ImageEditor.prototype.updateCanvas = function () {\n var fileOpened = { fileName: this.imageFileName, fileType: this.imageFileType };\n this.lastX = this.baseImg.width / 2;\n this.lastY = this.baseImg.height / 2;\n var wrapperWidth;\n var canvasWrapper = document.querySelector('#' + this.element.id + '_canvasWrapper');\n if (this.isScreenOriented) {\n wrapperWidth = parseFloat(canvasWrapper.style.width);\n }\n else {\n wrapperWidth = this.element.clientWidth;\n }\n var maxDimension = this.calcMaxDimension(this.baseImg.width, this.baseImg.height);\n var toolbarHeight = 0;\n if (!isNullOrUndefined(this.toolbarTemplate) && !isNullOrUndefined(document.querySelector('.e-toolbar'))) {\n toolbarHeight = document.querySelector('.e-toolbar').clientHeight;\n maxDimension.width -= toolbarHeight;\n maxDimension.height -= toolbarHeight;\n }\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerCanvas.width = this.upperCanvas.width = this.baseImg.width;\n this.lowerCanvas.height = this.upperCanvas.height = this.baseImg.height;\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.style.left = this.upperCanvas.style.left = (wrapperWidth - maxDimension.width) / 2 + 1 + 'px';\n if (!isNullOrUndefined(this.toolbarTemplate)) {\n this.lowerCanvas.style.left = parseFloat(this.lowerCanvas.style.left) + (toolbarHeight / 2) + 'px';\n }\n if (canvasWrapper) {\n this.lowerCanvas.style.top = this.upperCanvas.style.top = (parseFloat(canvasWrapper.style.height) - maxDimension.height - 1) / 2 + 'px';\n }\n this.lowerContext.filter = tempFilter;\n if (this.lowerContext.filter === 'none' || this.lowerContext.filter === 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)' ||\n this.isInitialLoading) {\n this.lowerContext.drawImage(this.baseImg, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.updateInMemoryCanvas('updateCanvas');\n if (this.canvasFilter !== 'none') {\n this.lowerContext.filter = this.canvasFilter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n }\n if (this.isInitialLoading) {\n this.initializeFilter();\n this.isInitialLoading = false;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.baseImg, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n }\n else {\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n }\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n this.lowerContext.filter = tempFilter;\n if (this.disabled) {\n this.element.setAttribute('class', 'e-disabled');\n }\n this.trigger('fileOpened', fileOpened);\n };\n ImageEditor.prototype.imageOnLoad = function (src) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n proxy.baseImg.src = proxy.baseImgSrc.id = src;\n this.baseImg.onload = function () {\n _this.lowerContext.drawImage(_this.baseImg, 0, 0, _this.lowerCanvas.width, _this.lowerCanvas.height);\n if (_this.togglePen) {\n // eslint-disable-next-line @typescript-eslint/tslint/config\n _this.lowerCanvas.toBlob(function (blob) {\n showSpinner(proxy.element);\n proxy.baseImg.src = URL.createObjectURL(blob);\n proxy.togglePen = false;\n }, 'image/png');\n _this.inMemoryContext.clearRect(0, 0, _this.inMemoryCanvas.width, _this.inMemoryCanvas.height);\n var imgData = _this.lowerContext.getImageData(0, 0, _this.lowerCanvas.width, _this.lowerCanvas.height);\n _this.inMemoryContext.putImageData(imgData, 0, 0);\n var temp = _this.imgDataColl[0];\n _this.imgDataColl.splice(0, 1, { operation: 'freehanddraw', value: imgData });\n _this.imgDataColl.splice(1, 1, temp);\n }\n else {\n hideSpinner(_this.element);\n _this.element.style.opacity = '1';\n _this.updateCanvas();\n }\n if (Browser.isDevice) {\n if (_this.isToolbar() && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) &&\n (!isNullOrUndefined(getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar')) &&\n (!isNullOrUndefined(getComponent(document.getElementById(_this.element.id + '_bottomToolbar'), 'toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, Browser.isDevice);\n _this.createBottomToolbar();\n }\n else {\n if (_this.isToolbar() && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) &&\n (!isNullOrUndefined(getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, false);\n }\n };\n };\n ImageEditor.prototype.refreshActiveObj = function () {\n this.activeObj = {};\n this.activeObj.activePoint = { startX: 0, startY: 0, endX: 0, endY: 0, width: 0, height: 0 };\n this.activeObj.flipObjColl = [];\n this.activeObj.strokeSettings = this.strokeSettings;\n this.activeObj.textSettings = this.textSettings;\n };\n ImageEditor.prototype.redrawText = function (ratio) {\n if (this.activeObj.textSettings.bold) {\n this.upperContext.font = 'bold ' + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n if (this.activeObj.textSettings.italic) {\n this.upperContext.font = 'bold ' + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n this.upperContext.font = 'italic bold ' + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n if (!this.activeObj.textSettings.bold && !this.activeObj.textSettings.italic) {\n this.upperContext.font = this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n var rows = this.activeObj.keyHistory.split('\\n');\n var text = this.textBox.style.display === 'block' ? this.getMaxText(true) : this.getMaxText();\n var width = this.upperContext.measureText(text).width + this.activeObj.textSettings.fontSize * 0.5;\n var height = rows.length * (this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25);\n this.setTextSelection(width, height);\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n this.redrawShape(this.activeObj);\n };\n ImageEditor.prototype.setTextSelection = function (width, height) {\n var degree = this.degree;\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n for (var i = 0; i < this.activeObj.flipObjColl.length; i++) {\n if (degree === 0) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.endX - width,\n startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (height ? height : 0) };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + (width ? width : 0)),\n endY: this.activeObj.activePoint.endY };\n }\n else {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + (width ? width : 0)),\n endY: this.activeObj.activePoint.startY + (height ? height : 0) };\n }\n }\n else if (degree === 90) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - width,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.endY };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n else {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n }\n else if (degree === 180) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + width),\n endY: this.activeObj.activePoint.endY };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + height;\n this.activeObj.activePoint = { endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY,\n startX: (this.activeObj.activePoint.endX - (width ? width : 0)),\n startY: this.activeObj.activePoint.startY };\n }\n else {\n this.activeObj.activePoint = { endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY,\n startX: (this.activeObj.activePoint.endX - (width ? width : 0)),\n startY: this.activeObj.activePoint.endY - (height ? height : 0) };\n }\n }\n else if (degree === 270) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + height),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - (width ? width : 0),\n endX: this.activeObj.activePoint.endX,\n endY: this.activeObj.activePoint.endY };\n }\n else {\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - (width ? width : 0),\n endX: this.activeObj.activePoint.endX,\n endY: this.activeObj.activePoint.endY };\n }\n }\n }\n if (this.activeObj.flipObjColl.length === 0) {\n if (degree === 0) {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + (width ? width : 0)),\n endY: this.activeObj.activePoint.startY + (height ? height : 0) };\n }\n else if (degree === 90) {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n else if (degree === 180) {\n this.activeObj.activePoint = { endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY,\n startX: (this.activeObj.activePoint.endX - (width ? width : 0)),\n startY: this.activeObj.activePoint.endY - (height ? height : 0) };\n }\n else if (degree === 270) {\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - (width ? width : 0),\n endX: this.activeObj.activePoint.endX,\n endY: this.activeObj.activePoint.endY };\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n if (this.degree === 360 || this.degree === -360) {\n this.degree = 0;\n }\n };\n ImageEditor.prototype.fileSelect = function (inputElement, args) {\n this.imageFileName = inputElement.value.split('\\\\')[inputElement.value.split('\\\\').length - 1];\n this.imageFileName = this.imageFileName.split('.')[0];\n var fileType = inputElement.value.split('.');\n if (fileType[fileType.length - 1].toLowerCase() === 'jpg' || fileType[fileType.length - 1].toLowerCase() === 'jpeg') {\n this.imageFileType = 'Jpeg';\n }\n else if (fileType[fileType.length - 1].toLowerCase() === 'png') {\n this.imageFileType = 'Png';\n }\n else if (fileType[fileType.length - 1].toLowerCase() === 'svg') {\n this.imageFileType = 'Svg';\n }\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var filesData = args.target.files[0];\n if (this.imgDataColl.length > 0) {\n this.imgDataColl = [];\n this.reset();\n }\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var URL = window.URL;\n var url = URL.createObjectURL(filesData);\n this.imageOnLoad(url.toString());\n inputElement.value = '';\n };\n ImageEditor.prototype.findTextPoint = function (e) {\n if (this.activeObj.shape === 'text') {\n this.textBox.style.transformOrigin = '0 0';\n var degree = void 0;\n var scale = '';\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (this.activeObj.flipObjColl.length > 0) {\n // need to add scale value according to length.\n for (var i = 0; i < this.activeObj.flipObjColl.length; i++) {\n if (degree !== 0 && degree % 90 === 0 && degree !== 180) {\n scale += this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal' ? 'scale(1, -1)' :\n 'scale(-1, 1)';\n }\n else {\n scale += this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal' ? 'scale(-1, 1)' :\n 'scale(1, -1)';\n }\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.textBox.style.transform = 'rotate(' + degree + 'deg)' + scale;\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.textBox.style.transform = 'rotate(' + degree + 'deg)' + scale;\n }\n }\n }\n else {\n this.textBox.style.transform = 'rotate(' + degree + 'deg)';\n }\n this.findTextTarget(e);\n }\n };\n ImageEditor.prototype.getStrokeWidth = function (text) {\n var strokeWidth;\n switch (text) {\n case '1':\n strokeWidth = this.l10n.getConstant('XSmall');\n break;\n case '2':\n strokeWidth = this.l10n.getConstant('Small');\n break;\n case '3':\n strokeWidth = this.l10n.getConstant('Medium');\n break;\n case '4':\n strokeWidth = this.l10n.getConstant('Large');\n break;\n case '5':\n strokeWidth = this.l10n.getConstant('XLarge');\n break;\n }\n return strokeWidth;\n };\n ImageEditor.prototype.updateToolbarItems = function (ratio) {\n var selFillElem = this.element.querySelector('.e-fill.e-template .e-dropdownbtn-preview');\n var selStrokeElem = this.element.querySelector('.e-stroke.e-template .e-dropdownbtn-preview');\n var selTextStrokeElem = this.element.querySelector('.e-text-font-color.e-template .e-dropdownbtn-preview');\n var selPenStrokeElem = this.element.querySelector('.e-pen-stroke-color.e-template .e-dropdownbtn-preview');\n var strokeWidthElem = this.element.querySelector('.e-shape-stroke-width');\n var fontFamilyElem = this.element.querySelector('.e-text-font-family');\n var fontSizeElem = this.element.querySelector('.e-text-font-size');\n var fontStyleElem = this.element.querySelector('.e-text-font-style');\n if (selFillElem) {\n if (this.activeObj.strokeSettings.fillColor === '') {\n selFillElem.classList.add('e-nocolor-item');\n }\n else {\n selFillElem.classList.remove('e-nocolor-item');\n selFillElem.style.background = this.activeObj.strokeSettings.fillColor;\n }\n getComponent(this.element.id + '_shape_fill', 'colorpicker').value\n = this.activeObj.strokeSettings.fillColor + 'ff';\n }\n if (selStrokeElem) {\n selStrokeElem.style.background = this.activeObj.strokeSettings.strokeColor;\n getComponent(this.element.id + '_shape_stroke', 'colorpicker').value\n = this.activeObj.strokeSettings.strokeColor + 'ff';\n }\n if (selTextStrokeElem) {\n selTextStrokeElem.style.background = this.activeObj.strokeSettings.strokeColor;\n getComponent(this.element.id + '_text_font', 'colorpicker').value\n = this.activeObj.strokeSettings.strokeColor + 'ff';\n }\n if (selPenStrokeElem) {\n selPenStrokeElem.style.background = this.activeObj.strokeSettings.strokeColor;\n getComponent(this.element.id + '_pen_stroke', 'colorpicker').value\n = this.activeObj.strokeSettings.strokeColor + 'ff';\n }\n if (fontFamilyElem) {\n if (Browser.isDevice) {\n fontFamilyElem.setAttribute('style', 'font-family:' + this.activeObj.textSettings.fontFamily.toLowerCase());\n }\n else {\n fontFamilyElem.textContent = this.activeObj.textSettings.fontFamily;\n }\n }\n if (fontSizeElem) {\n for (var i = 0; i < this.fontSizeColl.length; i++) {\n if (parseInt(this.fontSizeColl[i].text, 10) >= this.activeObj.textSettings.fontSize) {\n fontSizeElem.textContent = (i + 1).toString();\n break;\n }\n }\n }\n if (fontStyleElem) {\n if (Browser.isDevice) {\n if (!this.activeObj.textSettings.bold && !this.activeObj.textSettings.italic) {\n fontStyleElem.setAttribute('style', '');\n }\n else if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n fontStyleElem.setAttribute('style', 'font-style: italic;font-weight: bold');\n }\n else if (this.activeObj.textSettings.bold) {\n fontStyleElem.setAttribute('style', 'font-weight: bold');\n }\n else {\n fontStyleElem.setAttribute('style', 'font-style: italic');\n }\n }\n else {\n if (!this.activeObj.textSettings.bold && !this.activeObj.textSettings.italic) {\n fontStyleElem.textContent = 'Default';\n }\n else if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n fontStyleElem.textContent = 'Bold Italic';\n }\n else if (this.activeObj.textSettings.bold) {\n fontStyleElem.textContent = 'Bold';\n }\n else {\n fontStyleElem.textContent = 'Italic';\n }\n }\n }\n if (strokeWidthElem) {\n var strokeWidth = Math.round((this.activeObj.strokeSettings.strokeWidth /\n (ratio.width + ratio.height)) * this.factor).toString();\n strokeWidthElem.textContent = this.getStrokeWidth(strokeWidth);\n }\n };\n ImageEditor.prototype.setTimer = function (e) {\n if (!this.isTimer && this.timer > 10) {\n this.findTextPoint(e);\n if (Browser.isDevice) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n }\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.targetTouches = function (touches) {\n var p1 = { x: touches[0].pageX, y: touches[0].pageY };\n var p2 = { x: touches[1].pageX, y: touches[1].pageY };\n var points = [p1, p2];\n return points;\n };\n ImageEditor.prototype.calculateScale = function (startTouches, endTouches) {\n var startDistance = this.getDistance(startTouches[0], startTouches[1]);\n var endDistance = this.getDistance(endTouches[0], endTouches[1]);\n return endDistance / startDistance;\n };\n ImageEditor.prototype.getDistance = function (a, b) {\n var x = a.x - b.x;\n var y = a.y - b.y;\n return Math.sqrt(x * x + y * y);\n };\n ImageEditor.prototype.touchStartHandler = function (e) {\n e.preventDefault();\n if (e.touches.length === 2) {\n this.isFirstMove = true;\n }\n else {\n this.timer = setTimeout(this.setTimer.bind(this), 1000, e);\n this.mouseDownEventHandler(e);\n }\n EventHandler.add(this.lowerCanvas, 'touchend', this.mouseUpEventHandler, this);\n EventHandler.add(this.lowerCanvas, 'touchmove', this.mouseMoveEventHandler, this); // Unbind mousedown to prevent double triggers from touch devices\n EventHandler.add(this.upperCanvas, 'touchend', this.mouseUpEventHandler, this);\n EventHandler.add(this.upperCanvas, 'touchmove', this.mouseMoveEventHandler, this); // Unbind mousedown to prevent double triggers from touch devices\n };\n ImageEditor.prototype.mouseDownEventHandler = function (e) {\n if (e.type === 'touchstart' && e.currentTarget === this.lowerCanvas && this.imgDataColl.length === 0) {\n return;\n }\n var ratio = this.calcRatio();\n if (this.dragCanvas) {\n this.canvasMouseDownHandler(e);\n }\n else {\n e.preventDefault();\n var x = void 0;\n var y = void 0;\n if (e.type === 'mousedown') {\n x = e.clientX;\n y = e.clientY;\n }\n else {\n this.touchEndPoint.x = x = e.touches[0].clientX;\n this.touchEndPoint.y = y = e.touches[0].clientY;\n }\n this.redrawActObj(x, y);\n if ((!isNullOrUndefined(this.element.querySelector('#' + this.element.id + '_contextualToolbar')) &&\n !this.element.querySelector('#' + this.element.id + '_contextualToolbar').parentElement.classList.contains('e-hide')) ||\n (!isNullOrUndefined(this.element.querySelector('#' + this.element.id + '_headWrapper'))\n && !this.element.querySelector('#' + this.element.id + '_headWrapper').parentElement.classList.contains('e-hide'))) {\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n this.okBtn();\n this.refreshToolbar('main');\n }\n if (this.upperCanvas.style.cursor === 'crosshair' || (Browser.isDevice && this.togglePen)) {\n if (this.togglePen) {\n this.canvasRatio = this.calcRatio();\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n if (isNullOrUndefined(this.penStrokeWidth)) {\n this.penStrokeWidth = (ratio.width + ratio.height) * 0.8;\n }\n if (this.activeObj.strokeSettings.strokeWidth === (ratio.width + ratio.height) * 0.4 &&\n this.strokeSettings.strokeWidth === (ratio.width + ratio.height) * 0.4) {\n this.activeObj.strokeSettings.strokeWidth = this.strokeSettings.strokeWidth =\n 2 * ((ratio.width + ratio.height) / this.factor);\n }\n this.minStrokeWidth = this.maxStrokeWidth = this.penStrokeWidth;\n this.velocity = 0.7;\n this.upperContext.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n this.upperContext.fillStyle = this.activeObj.strokeSettings.strokeColor;\n this.mouseDownHandler(e, this.upperCanvas, this.pannStart, this.factor); // To call signature base\n }\n else {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n this.currObjType.isActiveObj = false;\n this.dragElement = '';\n this.dragPoint.startX = this.dragPoint.startY = this.dragPoint.endX = this.dragPoint.endY = 0;\n }\n if ((this.upperCanvas.style.cursor !== 'crosshair' && e.type.toLowerCase() === 'touchstart') ||\n (this.currObjType.isActiveObj && this.upperCanvas.style.cursor !== 'default' && !this.togglePen)) {\n this.findTarget(x, y, e.type);\n }\n else if ((this.currObjType.shape === '' || this.currObjType.isCustomCrop) && !this.togglePen && this.upperCanvas.style.cursor !== 'default') {\n this.setActivePoint(x, y);\n }\n if (!isNullOrUndefined(this.activeObj)) {\n var isCropSelection = false;\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && (this.currObjType.isCustomCrop || this.togglePen)) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if ((this.activeObj.shape === 'rectangle') || (this.activeObj.shape === 'ellipse')\n || (this.activeObj.shape === 'line')) {\n this.refreshToolbar('shapes');\n }\n else if (this.activeObj.shape === 'text') {\n this.refreshToolbar('text');\n }\n else if (!isCropSelection) {\n this.callMainToolbar();\n }\n this.updateToolbarItems(ratio);\n }\n }\n };\n ImageEditor.prototype.mouseMoveEventHandler = function (e) {\n e.preventDefault();\n if (e.type === 'touchmove' && e.touches.length === 2) {\n if (this.isFirstMove) {\n this.startTouches = this.targetTouches(e.touches);\n this.tempTouches = [];\n this.tempTouches.push({ x: e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft),\n y: e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop) });\n this.tempTouches.push({ x: e.touches[1].clientX || (e.touches[1].pageX - this.lowerCanvas.offsetLeft),\n y: e.touches[1].clientY || (e.touches[1].pageY - this.lowerCanvas.offsetTop) });\n }\n else {\n var ratio = this.calcRatio();\n var firstFingerX = e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft);\n var firstFingerY = e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop);\n var secondFingerX = e.touches[1].clientX || (e.touches[1].pageX - this.lowerCanvas.offsetLeft);\n var secondFingerY = e.touches[1].clientY || (e.touches[1].pageY - this.lowerCanvas.offsetTop);\n this.lastX = firstFingerX > secondFingerX ? secondFingerX + (firstFingerX - secondFingerX) : firstFingerX +\n (secondFingerX - firstFingerX);\n this.lastY = firstFingerY > secondFingerY ? secondFingerY + (firstFingerY - secondFingerY) : firstFingerY +\n (secondFingerY - firstFingerY);\n this.lastX *= ratio.width;\n this.lastY *= ratio.height;\n var scale = this.calculateScale(this.startTouches, this.targetTouches(e.touches));\n // Need to set lastX and lastY points\n if (this.tempTouches[0].x !== firstFingerX && this.tempTouches[0].y !== firstFingerY &&\n this.tempTouches[1].x !== secondFingerX && this.tempTouches[1].y !== secondFingerY) {\n if (scale > 1) {\n this.zoom(1.1);\n }\n else {\n this.zoom(-1.1);\n }\n this.tempTouches = [];\n this.tempTouches.push({ x: e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft),\n y: e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop) });\n this.tempTouches.push({ x: e.touches[1].clientX || (e.touches[1].pageX - this.lowerCanvas.offsetLeft),\n y: e.touches[1].clientY || (e.touches[1].pageY - this.lowerCanvas.offsetTop) });\n }\n }\n this.isFirstMove = false;\n return;\n }\n if (this.textBox.style.display === 'none') {\n this.isTimer = true;\n }\n var x;\n var y;\n if (e.type === 'mousemove') {\n x = e.clientX;\n y = e.clientY;\n }\n else {\n this.touchEndPoint.x = x = e.touches[0].clientX;\n this.touchEndPoint.y = y = e.touches[0].clientY;\n }\n this.canvasMouseMoveHandler(e);\n if (this.currObjType.isActiveObj && (this.activeObj.activePoint !== undefined || this.objColl.length > 0) &&\n !this.dragCanvas || this.activeObj.activePoint !== undefined) {\n if (this.dragElement === '') {\n this.setCursor(x, y);\n if (this.activeObj.activePoint.width === 0 && this.upperCanvas.style.cursor !== 'default' &&\n this.upperCanvas.style.cursor !== 'move' && this.upperCanvas.style.cursor !== 'crosshair'\n && this.upperCanvas.style.cursor !== 'grab') {\n this.upperCanvas.style.cursor = 'move';\n }\n this.findTarget(x, y, e.type);\n }\n }\n if (this.currObjType.isDragging) {\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var initialDraw = this.updateActivePoint(x, y);\n this.drawObject('duplicate', null, initialDraw);\n }\n };\n ImageEditor.prototype.mouseUpEventHandler = function (e) {\n e.preventDefault();\n var x;\n var y;\n if (e.type === 'mouseup') {\n x = e.clientX;\n y = e.clientY;\n }\n else {\n x = this.touchEndPoint.x;\n y = this.touchEndPoint.y;\n }\n if (e.type === 'touchend') {\n this.startTouches = this.tempTouches = [];\n this.isFirstMove = false;\n if (this.textBox.style.display === 'none') {\n this.isTimer = false;\n this.timer = 0;\n }\n }\n var bbox = this.upperCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n y = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n }\n if (e.currentTarget === this.upperCanvas) {\n this.currObjType.shape = this.currObjType.shape.toLowerCase();\n if (!this.togglePen && !this.dragCanvas) {\n if (!isNullOrUndefined(this.tempObjColl) && this.activeObj.activePoint.width !== 0) {\n this.objColl.push(this.activeObj);\n this.redrawShape(this.objColl[this.objColl.length - 1]);\n this.tempObjColl = undefined;\n }\n this.applyCurrActObj(x, y);\n }\n else if (this.dragCanvas) {\n this.setPanPoints();\n }\n }\n if (this.togglePen && e.currentTarget === this.upperCanvas) {\n this.penDrawColl.push({ strokeWidth: this.penStrokeWidth, strokeColor: this.activeObj.strokeSettings.strokeColor, points: this.imageEditorPointsColl });\n this.imageEditorPointsColl = [];\n }\n else {\n this.currObjType.shape = '';\n }\n this.dragElement = '';\n this.currObjType.isInitialLine = this.currObjType.isDragging = false;\n this.oldPoint.x = undefined;\n this.oldPoint.y = undefined;\n };\n ImageEditor.prototype.keyDownEventHandler = function (e) {\n var _this = this;\n var shapeChangingArgs = {};\n var beforeSave = { fileName: 'ImageEditor', fileType: 'Png', cancel: false };\n switch (e.key) {\n case (e.ctrlKey && 's'):\n this.trigger('beforeSave', beforeSave, function (observableSaveArgs) {\n if (!beforeSave.cancel) {\n _this.export(observableSaveArgs.fileType, observableSaveArgs.fileName);\n }\n });\n e.preventDefault();\n e.stopImmediatePropagation();\n break;\n case 'Delete':\n if (this.textBox.style.display === 'none') {\n shapeChangingArgs = { action: 'delete', previousShapeSettings: this.activeObj, currentShapeSettings: null };\n this.keyHistory = '';\n this.clearSelection();\n this.trigger('shapeChanging', shapeChangingArgs);\n this.refreshToolbar('main');\n }\n break;\n case 'Escape':\n if (this.togglePan) {\n this.refreshToolbar(this.currentToolbar);\n this.pan(false);\n }\n else {\n this.cancelItems();\n }\n break;\n case 'Enter':\n this.crop();\n break;\n default:\n if (Browser.isDevice && this.textBox.style.display === 'block') {\n setTimeout(this.textKeyDown.bind(this), 1, e);\n }\n break;\n }\n };\n ImageEditor.prototype.keyUpEventHandler = function (e) {\n // eslint-disable-next-line\n if (this.textBox.style.display === 'block' && e.target.id === this.element.id + '_textBox') {\n setTimeout(this.textKeyDown.bind(this), 1, e);\n }\n };\n ImageEditor.prototype.canvasMouseDownHandler = function (e) {\n e.preventDefault();\n var ratio = this.calcRatio();\n if (e.type === 'mousedown') {\n this.lastX = e.offsetX || (e.pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.offsetY || (e.pageY - this.lowerCanvas.offsetTop);\n }\n else {\n this.lastX = e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop);\n }\n this.lastX *= ratio.width;\n this.lastY *= ratio.height;\n if (this.dragCanvas || this.factor !== 1) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.dragStart = this.lowerContext.transformedPoint(this.lastX, this.lastY);\n }\n };\n ImageEditor.prototype.canvasMouseMoveHandler = function (e) {\n if (this.dragCanvas && this.factor > 1) {\n this.lowerCanvas.style.cursor = 'grab';\n }\n else {\n this.dragCanvas = this.togglePan = false;\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'default';\n }\n var ratio = this.calcRatio();\n if (e.type === 'mousemove') {\n this.lastX = e.offsetX || (e.pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.offsetY || (e.pageY - this.lowerCanvas.offsetTop);\n }\n else {\n this.lastX = e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop);\n }\n this.lastX *= ratio.width;\n this.lastY *= ratio.height;\n if (this.dragStart && this.dragCanvas) {\n this.drawPanImg();\n }\n };\n ImageEditor.prototype.canvasMouseUpHandler = function (e) {\n e.preventDefault();\n if (this.togglePan && e.currentTarget === this.lowerCanvas) {\n var ratio = this.calcRatio();\n if (e.type === 'mouseup') {\n this.lastX = e.offsetX || (e.pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.offsetY || (e.pageY - this.lowerCanvas.offsetTop);\n }\n else {\n this.lastX = e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop);\n }\n this.lastX *= ratio.width;\n this.lastY *= ratio.height;\n this.setPanPoints();\n }\n this.dragStart = null;\n // zooms on mouse click point\n // if (e.currentTarget !== document) {\n // this.zoom(e.shiftKey ? -1 : 1 );\n // }\n this.currObjType.isDragging = false;\n };\n ImageEditor.prototype.setPanPoints = function () {\n if (this.dragCanvas || this.factor !== 1) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.dragStart = this.lowerContext.transformedPoint(this.lastX, this.lastY);\n }\n };\n ImageEditor.prototype.textKeyDown = function (e) {\n if (String.fromCharCode(e.which) === '\\r') {\n this.textRow += 1;\n }\n this.textBox.setAttribute('rows', this.textRow.toString());\n this.textBox.style.height = 'auto';\n this.textBox.style.height = this.textBox.scrollHeight + 'px';\n this.setTextBoxWidth(e);\n if (Browser.isDevice) {\n this.textBox.style.width = parseFloat(this.textBox.style.width) + this.textBox.style.fontSize + 'px';\n }\n var rows = this.textBox.value.split('\\n');\n this.textRow = rows.length;\n this.textBox.setAttribute('rows', this.textRow.toString());\n };\n ImageEditor.prototype.adjustToScreen = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var tempFilter = this.lowerContext.filter;\n this.okBtn();\n this.applyActObj();\n this.refreshActiveObj();\n if (this.imgDataColl.length > 0) {\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n }\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.lowerCanvas.width = this.upperCanvas.width = this.element.offsetWidth;\n this.lowerCanvas.height = this.upperCanvas.height = this.element.offsetHeight;\n var canvasWrapper = document.querySelector('#' + this.element.id + '_canvasWrapper');\n if (!isNullOrUndefined(canvasWrapper)) {\n canvasWrapper.style.width = this.element.offsetWidth + 'px';\n canvasWrapper.style.height = this.element.offsetHeight + 'px';\n if (Browser.isDevice) {\n canvasWrapper.style.height = (parseFloat(canvasWrapper.style.height) - (2 * this.toolbarHeight)) - 3 + 'px';\n }\n else {\n canvasWrapper.style.height = (parseFloat(canvasWrapper.style.height) - this.toolbarHeight) - 3 + 'px';\n }\n }\n this.redrawImg(tempFilter);\n if (!this.currObjType.isSave) {\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.lowerCanvas.toBlob(function (blob) {\n proxy.lowerContext.filter = proxy.initialAdjustmentValue = proxy.adjustmentValue = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n if (proxy.cssClass) {\n addClass([proxy.element], proxy.cssClass.split(' '));\n }\n proxy.lowerContext.clearRect(0, 0, proxy.lowerCanvas.width, proxy.lowerCanvas.height);\n proxy.lowerContext.drawImage(proxy.inMemoryCanvas, 0, 0);\n proxy.baseImg.src = URL.createObjectURL(blob);\n proxy.lowerContext.filter = tempFilter;\n }, 'image/png');\n }\n else {\n hideSpinner(this.element);\n this.element.style.opacity = '1';\n }\n if (this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_10 = getComponent(proxy.element.id + '_toolbar', 'toolbar');\n toolbar_10.refreshOverflow();\n if (!isNullOrUndefined(this.element.querySelector('.e-contextual-toolbar-wrapper'))) {\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n }\n }\n };\n ImageEditor.prototype.screenOrientation = function () {\n if (Browser.isDevice) {\n this.isScreenOriented = true;\n setTimeout(this.adjustToScreen.bind(this), 100);\n }\n };\n ImageEditor.prototype.windowResizeHandler = function () {\n if (!Browser.isDevice) {\n this.adjustToScreen();\n }\n };\n ImageEditor.prototype.drawPanImg = function () {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt = this.lowerContext.transformedPoint(this.lastX, this.lastY);\n var transitionArgs = { startPoint: { x: this.dragStart.x, y: this.dragStart.y },\n endPoint: { x: pt.x, y: pt.y } };\n this.trigger('panning', transitionArgs);\n var xDiff = pt.x - this.dragStart.x;\n var yDiff = pt.y - this.dragStart.y;\n var xxDiff = xDiff;\n var yyDiff = yDiff;\n this.lowerContext.translate(xDiff, yDiff);\n this.upperContext.translate(xDiff, yDiff);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt1 = this.lowerContext.transformedPoint(0, 0);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt2 = this.lowerContext.transformedPoint(this.lowerCanvas.width, this.lowerCanvas.height);\n if (xDiff >= 0) {\n if (pt1.x < 1) {\n xDiff = 0;\n }\n }\n else {\n if (pt2.x > this.lowerCanvas.width) {\n xDiff = 0;\n }\n }\n if (yDiff >= 0) {\n if (pt1.y < 1) {\n yDiff = 0;\n }\n }\n else {\n if (pt2.y > this.lowerCanvas.height) {\n yDiff = 0;\n }\n }\n this.lowerContext.translate(-xxDiff, -yyDiff);\n this.upperContext.translate(-xxDiff, -yyDiff);\n this.lowerContext.translate(xDiff, yDiff);\n this.upperContext.translate(xDiff, yDiff);\n this.redraw();\n };\n ImageEditor.prototype.redrawImg = function (tempFilter) {\n var wrapperWidth;\n var canvasWrapper = document.querySelector('#' + this.element.id + '_canvasWrapper');\n if (this.isScreenOriented) {\n wrapperWidth = parseFloat(canvasWrapper.style.width);\n }\n else {\n wrapperWidth = this.element.clientWidth;\n }\n var maxDimension = this.calcMaxDimension(this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.lowerCanvas.width = this.upperCanvas.width = this.inMemoryCanvas.width;\n this.lowerCanvas.height = this.upperCanvas.height = this.inMemoryCanvas.height;\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.style.left = this.upperCanvas.style.left = (wrapperWidth - maxDimension.width) / 2 + 1 + 'px';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = (this.element.offsetHeight - this.toolbarHeight - maxDimension.height) / 2 + 1 + 'px';\n this.lowerContext.filter = tempFilter;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp;\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.updateContext = function (ctx) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var xform = new DOMMatrix([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);\n ctx.getTransform = function () {\n return xform;\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var savedTransforms = [];\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var save = ctx.save;\n ctx.save = function () {\n savedTransforms.push(xform.translate(0, 0));\n return save.call(ctx);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var restore = ctx.restore;\n ctx.restore = function () {\n xform = savedTransforms.pop();\n return restore.call(ctx);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var scale = ctx.scale;\n ctx.scale = function (sx, sy) {\n xform = _this.scaleNonUniform(xform, sx, sy);\n proxy.factor = xform.a;\n return scale.call(ctx, sx, sy);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var rotate = ctx.rotate;\n ctx.rotate = function (radians) {\n xform = xform.rotate(radians * 180 / Math.PI);\n return rotate.call(ctx, radians);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var translate = ctx.translate;\n ctx.translate = function (dx, dy) {\n xform = xform.translate(dx, dy);\n return translate.call(ctx, dx, dy);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var transform = ctx.transform;\n ctx.transform = function (a, b, c, d, e, f) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var m2 = new DOMMatrix();\n m2.a = a;\n m2.b = b;\n m2.c = c;\n m2.d = d;\n m2.e = e;\n m2.f = f;\n xform = xform.multiply(m2);\n return transform.call(ctx, a, b, c, d, e, f);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var setTransform = ctx.setTransform;\n ctx.setTransform = function (a, b, c, d, e, f) {\n xform.a = a;\n xform.b = b;\n xform.c = c;\n xform.d = d;\n xform.e = e;\n xform.f = f;\n return setTransform.call(ctx, a, b, c, d, e, f);\n };\n var pt = new DOMPoint();\n ctx.transformedPoint = function (x, y) {\n pt.x = x;\n pt.y = y;\n return pt.matrixTransform(xform.inverse());\n };\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.scaleNonUniform = function (xform, sx, sy) {\n xform.m11 *= sx;\n xform.m12 *= sx;\n xform.m13 *= sx;\n xform.m14 *= sx;\n xform.m21 *= sy;\n xform.m22 *= sy;\n xform.m23 *= sy;\n xform.m24 *= sy;\n return xform;\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.zoomImg = function (clicks) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt = this.lowerContext.transformedPoint(this.lastX, this.lastY);\n var scaleFactor = 1.1;\n var transitionArgs = { zoomPoint: { x: pt.x, y: pt.y }, zoomLevel: clicks };\n this.trigger('zooming', transitionArgs);\n this.lowerContext.translate(pt.x, pt.y);\n this.upperContext.translate(pt.x, pt.y);\n var factor = Math.pow(scaleFactor, clicks);\n this.factor += (factor - 1);\n this.lowerContext.scale(factor, factor);\n this.upperContext.scale(factor, factor);\n this.lowerContext.translate(-pt.x, -pt.y);\n this.upperContext.translate(-pt.x, -pt.y);\n var ratio = this.calcRatio();\n if (!isNullOrUndefined(this.strokeSettings.strokeWidth)) {\n this.strokeSettings.strokeWidth = 2 * (ratio.width + ratio.height) / this.factor;\n }\n if (this.factor > 0.99 && this.factor < 1.01) {\n this.factor = 1;\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.redrawImgWithObj();\n }\n else {\n if (this.factor > 1) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt1 = this.lowerContext.transformedPoint(0, 0);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt2 = this.lowerContext.transformedPoint(this.lowerCanvas.width, this.lowerCanvas.height);\n var xDiff = pt.x;\n var yDiff = pt.y;\n if (pt1.x < 1) {\n xDiff = -xDiff;\n }\n else if (pt2.x > this.lowerCanvas.width) {\n xDiff = pt2.x - this.lowerCanvas.width;\n }\n if (pt1.y < 1) {\n yDiff = -yDiff;\n }\n else if (pt2.y > this.lowerCanvas.height) {\n yDiff = pt2.y - this.lowerCanvas.height;\n }\n if (xDiff !== pt.x || yDiff !== pt.y) {\n if (xDiff === pt.x) {\n xDiff = 0;\n }\n if (yDiff === pt.y) {\n yDiff = 0;\n }\n this.lowerContext.translate(xDiff, yDiff);\n this.upperContext.translate(xDiff, yDiff);\n }\n }\n this.redraw();\n }\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.handleScroll = function (e) {\n var delta = e.wheelDelta ? e.wheelDelta / 40 : e.detail ? -e.detail : 0;\n if (delta) {\n this.zoom(delta);\n }\n return e.preventDefault() && false;\n };\n ImageEditor.prototype.redraw = function () {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var p1 = this.lowerContext.transformedPoint(0, 0);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var p2 = this.lowerContext.transformedPoint(this.lowerCanvas.width, this.lowerCanvas.height);\n this.pannStart.startX = p1.x;\n this.pannStart.startY = p1.y;\n this.pannEnd.startX = this.lowerCanvas.width - p2.x;\n this.pannEnd.startY = this.lowerCanvas.height - p2.y;\n this.lowerContext.clearRect(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y);\n this.upperContext.clearRect(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y);\n this.lowerContext.save();\n this.upperContext.save();\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.restore();\n this.upperContext.restore();\n this.redrawImgWithObj();\n };\n ImageEditor.prototype.applyCurrActObj = function (x, y) {\n var isInside = false;\n var ratio = this.calcRatio();\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (isNullOrUndefined(actObj.activePoint)) {\n return;\n }\n if ((x >= Math.floor(actObj.activePoint.startX) && x <= Math.ceil(actObj.activePoint.endX) &&\n y >= Math.floor(actObj.activePoint.startY) && y <= Math.ceil(actObj.activePoint.endY)) ||\n (actObj.shape === 'text')) {\n isInside = true;\n }\n if (!isInside) {\n if (this.activeObj.horTopLine !== undefined && this.activeObj.horTopLine.startX !== 0 && this.activeObj.horTopLine.endX !== 0\n && !this.currObjType.isCustomCrop && this.currObjType.shape !== '') {\n this.objColl.push(extend({}, this.activeObj, {}, true));\n }\n if (this.activeObj.shape === 'text' || (this.currObjType.shape === 'ellipse' || this.currObjType.shape === 'rectangle' ||\n this.currObjType.shape === 'line')) {\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n }\n this.lowerContext.filter = tempFilter;\n this.apply('shape');\n }\n }\n };\n ImageEditor.prototype.updateTextFromTextArea = function (ratio) {\n this.activeObj.keyHistory = this.textBox.value;\n this.textBox.style.display = 'none';\n this.textBox.value = '';\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.activeObj.keyHistory).width +\n this.activeObj.textSettings.fontSize * 0.5;\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n var rows = this.activeObj.keyHistory.split('\\n');\n if (rows.length > 1) {\n height *= rows.length;\n var widthColl = [];\n for (var i = 0; i < rows.length; i++) {\n widthColl.push(this.upperContext.measureText(rows[i]).width +\n this.activeObj.textSettings.fontSize * 0.5);\n }\n width = Math.max.apply(Math, widthColl);\n }\n this.setTextSelection(width, height);\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n };\n ImageEditor.prototype.setTextBoxStylesToActObj = function () {\n var ratio = this.calcRatio();\n this.activeObj.textSettings.fontFamily = this.textBox.style.fontFamily;\n this.activeObj.strokeSettings.strokeColor = this.textBox.style.color;\n if (this.textBox.style.fontWeight === 'bold') {\n this.activeObj.textSettings.bold = true;\n }\n else {\n this.activeObj.textSettings.bold = false;\n }\n if (this.textBox.style.fontStyle === 'italic') {\n this.activeObj.textSettings.italic = true;\n }\n else {\n this.activeObj.textSettings.italic = false;\n }\n this.activeObj.textSettings.fontSize = (parseFloat(this.textBox.style.fontSize) * ((ratio.width + ratio.height) / 2)) / this.factor;\n };\n ImageEditor.prototype.redrawActObj = function (x, y) {\n var ratio = this.calcRatio();\n var splitWords;\n var bbox = this.upperCanvas.getBoundingClientRect();\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.activeObj.horTopLine !== undefined && (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n if (this.textBox.style.display === 'block') {\n this.setTextBoxStylesToActObj();\n if (x && y) {\n x -= bbox.left;\n y -= bbox.top;\n if ((x !== this.activeObj.activePoint.startX / ratio.width) && (y !== this.activeObj.activePoint.startY /\n ratio.height)) {\n this.updateTextFromTextArea(ratio);\n this.applyActObj();\n }\n }\n else {\n this.updateTextFromTextArea(ratio);\n this.apply(this.activeObj.shape, this.activeObj);\n this.objColl.push(this.activeObj);\n this.refreshActiveObj();\n this.textBox.style.transform = '';\n this.refreshToolbar('main');\n }\n }\n else {\n this.applyActObj();\n }\n }\n };\n ImageEditor.prototype.setTextBoxPos = function (actObj, degree, flip, x, y, ratio) {\n var point = { x: x, y: y };\n if (degree === 0) {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left) -\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) - actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n else if (degree === 90) {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n else if (degree === 180) {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n }\n else if (degree === 270) {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left) -\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) - actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n }\n return point;\n };\n ImageEditor.prototype.setTextBoxPoints = function (actObj, degree, flip, x, y, ratio) {\n var point = { x: x, y: y };\n if (degree === 0) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left +\n actObj.activePoint.width / ratio.width);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n }\n else if (degree === 90) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n }\n else if (degree === 180) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left)\n + actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n }\n else if (degree === 270) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n }\n return point;\n };\n ImageEditor.prototype.findTextTarget = function (e) {\n var x;\n var y;\n if (e.type === 'dblclick') {\n x = e.clientX;\n y = e.clientY;\n }\n else if (e.type === 'touchstart') {\n this.touchEndPoint.x = x = e.touches[0].clientX;\n this.touchEndPoint.y = y = e.touches[0].clientY;\n }\n var bbox = this.upperCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n var degree;\n var flip = '';\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (this.activeObj.shapeFlip === this.currFlipState) {\n flip = '';\n }\n else {\n flip = this.currFlipState;\n }\n var temp;\n if (this.textBox.style.display === 'block') {\n x -= bbox.left;\n y -= bbox.top;\n }\n else {\n temp = extend({}, this.activeObj, {}, true);\n for (var i = 0; i < this.objColl.length; i++) {\n if (JSON.stringify(this.activeObj) === JSON.stringify(this.objColl[i])) {\n this.objColl.splice(i, 1);\n }\n }\n this.lowerContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.redrawImgWithObj();\n this.activeObj = temp;\n this.updateFontStyles();\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n y = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n }\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (x >= (actObj.activePoint.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.activePoint.endX + actObj.topLeftCircle.radius) &&\n y >= (actObj.activePoint.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.activePoint.endY + actObj.topLeftCircle.radius)) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n if (actObj.flipObjColl.length === 4) {\n actObj.flipObjColl = [];\n flip = '';\n }\n if (flip === '' && actObj.flipObjColl.length > 1) {\n flip = actObj.flipObjColl[actObj.flipObjColl.length - 1];\n }\n if (actObj.flipObjColl.length <= 1) {\n var points = this.setTextBoxPos(actObj, degree, flip, x, y, ratio);\n x = points.x;\n y = points.y;\n }\n else {\n var points = this.setTextBoxPoints(actObj, degree, flip, x, y, ratio);\n x = points.x;\n y = points.y;\n }\n this.textBox.style.display = 'block';\n this.textBox.style.left = x + 'px';\n this.textBox.style.top = y + 'px';\n this.textBox.style.fontFamily = actObj.textSettings.fontFamily;\n this.textBox.style.fontSize = actObj.textSettings.fontSize / ((ratio.width + ratio.height) / 2) * this.factor + 'px';\n this.textBox.style.color = actObj.strokeSettings.strokeColor;\n this.textBox.style.fontWeight = actObj.textSettings.bold ? 'bold' : 'normal';\n this.textBox.style.fontStyle = actObj.textSettings.italic ? 'italic' : 'normal';\n this.textBox.style.border = '2px solid ' + this.themeColl[this.theme]['primaryColor'];\n this.textBox.value = actObj.keyHistory;\n this.textBox.style.overflow = 'hidden';\n this.textBox.style.height = 'auto';\n if (degree % 90 === 0 && degree % 180 !== 0 && degree !== 0) {\n if (this.factor === 1) {\n this.textBox.style.width = (actObj.activePoint.height / ratio.height) + 'px';\n this.textBox.style.height = (actObj.activePoint.width / ratio.width) + 'px';\n }\n else {\n this.textBox.style.width = actObj.activePoint.height + 'px';\n this.textBox.style.height = actObj.activePoint.width + 'px';\n }\n }\n else {\n if (this.factor === 1) {\n this.textBox.style.width = (actObj.activePoint.width / ratio.width) + 'px';\n this.textBox.style.height = (actObj.activePoint.height / ratio.height) + 'px';\n }\n else {\n this.textBox.style.width = actObj.activePoint.width + 'px';\n this.textBox.style.height = actObj.activePoint.height + 'px';\n }\n }\n this.setTextBoxWidth();\n this.setTextBoxHeight();\n }\n else {\n this.applyActObj();\n }\n }\n };\n ImageEditor.prototype.setTextBoxHeight = function () {\n var ratio = this.calcRatio();\n var textBoxTop;\n var degree;\n var flip = '';\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (actObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - actObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (actObj.shapeFlip === this.currFlipState) {\n flip = '';\n }\n else {\n flip = this.currFlipState;\n }\n if (degree === 0) {\n if (flip.toLowerCase() === 'vertical') {\n this.textBox.style.maxHeight = (parseFloat(this.lowerCanvas.style.maxHeight) - (parseFloat(this.lowerCanvas.style.maxHeight)\n - parseFloat(this.textBox.style.top))) + 'px';\n }\n else {\n textBoxTop = parseFloat(this.textBox.style.top) - parseFloat(this.lowerCanvas.style.top);\n this.textBox.style.maxHeight = (parseFloat(this.lowerCanvas.style.maxHeight) - textBoxTop) + 'px';\n }\n }\n else if (degree === 90) {\n if (flip.toLowerCase() === 'horizontal') {\n this.textBox.style.maxHeight = (parseFloat(this.lowerCanvas.style.maxWidth) - (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left))) + 'px';\n }\n else {\n this.textBox.style.maxHeight = (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left)) + 'px';\n }\n }\n else if (degree === 180) {\n if (flip.toLowerCase() === 'vertical') {\n textBoxTop = parseFloat(this.textBox.style.top) - parseFloat(this.lowerCanvas.style.top);\n this.textBox.style.maxHeight = (parseFloat(this.lowerCanvas.style.maxHeight) - textBoxTop) + 'px';\n }\n else {\n this.textBox.style.maxHeight = (parseFloat(this.textBox.style.top)\n - parseFloat(this.lowerCanvas.style.top)) + 'px';\n }\n }\n else if (degree === 270) {\n if (flip.toLowerCase() === 'horizontal') {\n this.textBox.style.maxHeight = (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left)) + 'px';\n }\n else {\n this.textBox.style.maxHeight = parseFloat(this.lowerCanvas.style.maxWidth) - (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left)) + 'px';\n }\n }\n this.textBox.style.maxHeight = ((parseFloat(this.textBox.style.maxHeight) - parseFloat(this.textBox.style.fontSize) * 0.5)) + 'px';\n };\n ImageEditor.prototype.setTextBoxWidth = function (e) {\n var ratio = this.calcRatio();\n var text = this.getMaxText(true);\n if (this.textBox.style.display === 'block') {\n this.updateFontStyles(true);\n }\n else {\n this.updateFontStyles();\n }\n var textBoxWidth = (this.upperContext.measureText(text).width + (parseFloat(this.textBox.style.fontSize) / 2));\n var letterWidth = e ? this.upperContext.measureText(String.fromCharCode(e.which)).width : 0;\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n var degree;\n var flip = '';\n if (actObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - actObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (actObj.shapeFlip === this.currFlipState) {\n flip = '';\n }\n else {\n flip = this.currFlipState;\n }\n if ((!isNullOrUndefined(e) && parseFloat(this.textBox.style.width) < (textBoxWidth + letterWidth)) || isNullOrUndefined(e)) {\n if (degree === 0) {\n if (flip.toLowerCase() === 'horizontal') {\n if ((parseFloat(this.textBox.style.left) - parseFloat(this.lowerCanvas.style.left)) - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((parseFloat(this.lowerCanvas.style.maxWidth) - (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left))) > (textBoxWidth + letterWidth)) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n }\n else if (degree === 90) {\n if (flip.toLowerCase() === 'vertical') {\n if ((parseFloat(this.textBox.style.top) - parseFloat(this.lowerCanvas.style.top)) - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((parseFloat(this.lowerCanvas.style.maxHeight) - (parseFloat(this.textBox.style.top)\n - parseFloat(this.lowerCanvas.style.top))) > (textBoxWidth + letterWidth)) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n }\n else if (degree === 180) {\n if (flip.toLowerCase() === 'horizontal') {\n if ((parseFloat(this.lowerCanvas.style.maxWidth) - (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left))) > (textBoxWidth + letterWidth)) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((parseFloat(this.textBox.style.left) - parseFloat(this.lowerCanvas.style.left)) - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n }\n else if (degree === 270) {\n if (flip.toLowerCase() === 'vertical') {\n if ((parseFloat(this.lowerCanvas.style.maxHeight) - (parseFloat(this.textBox.style.top)\n - parseFloat(this.lowerCanvas.style.top))) > (textBoxWidth + letterWidth)) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((parseFloat(this.textBox.style.top) - parseFloat(this.lowerCanvas.style.top)) - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n }\n }\n };\n ImageEditor.prototype.setActivePoint = function (startX, startY) {\n if (isNullOrUndefined(this.activeObj.activePoint)) {\n return;\n }\n if (this.currObjType.isText) {\n var textWidth = startX ? startX : 0;\n var textHeight = startY ? startY : this.activeObj.textSettings.fontSize;\n if (this.activeObj.textSettings.fontSize === undefined) {\n this.activeObj.textSettings.fontSize = (Math.abs(this.baseImg.width - this.baseImg.height)) * 0.1;\n }\n this.setTextSelection(textWidth, textHeight);\n this.mouseDownPoint.x = this.activeObj.activePoint.endX;\n this.mouseDownPoint.y = this.activeObj.activePoint.endY;\n if (this.activeObj.horTopLine !== undefined) {\n this.activeObj.activePoint = extend({}, this.activeObj.activePoint, {}, true);\n }\n this.drawObject('duplicate');\n }\n else if (startX && startY) {\n this.activeObj.activePoint.startX = this.mouseDownPoint.x = startX;\n this.activeObj.activePoint.startY = this.mouseDownPoint.y = startY;\n this.currObjType.isDragging = true;\n }\n else {\n var selectInfo = this.activeObj;\n this.activeObj.activePoint = { startX: selectInfo.horTopLine.startX, startY: selectInfo.horTopLine.startY,\n endX: selectInfo.horTopLine.endX, endY: selectInfo.horTopLine.endY };\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.updateActivePoint = function (x, y) {\n var initialDraw = false;\n var bbox = this.lowerCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n if (this.dragElement !== '') {\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = ((x - bbox.left) * ratio.width) / this.factor + this.pannStart.startX;\n y = ((y - bbox.top) * ratio.height) / this.factor + this.pannStart.startY;\n }\n }\n var maxDimension = this.calcMaxDimension(this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n var shapeResizingArgs = { action: 'resize', previousShapeSettings: this.activeObj };\n var shapeMovingArgs = { action: 'move', previousShapeSettings: this.activeObj };\n switch (this.dragElement.toLowerCase()) {\n case 'nw-resize':\n this.updateNWPoints(x, y, maxDimension);\n break;\n case 'n-resize':\n this.updateNPoints(x, y);\n break;\n case 'ne-resize':\n this.updateNEPoints(x, y, maxDimension);\n break;\n case 'w-resize':\n this.updateWPoints(x, y);\n break;\n case 'e-resize':\n this.updateEPoints(x, y);\n break;\n case 'sw-resize':\n this.updateSWPoints(x, y, maxDimension);\n break;\n case 's-resize':\n this.updateSPoints(x, y);\n break;\n case 'se-resize':\n this.updateSEPoints(x, y, maxDimension);\n break;\n default:\n if (this.dragPoint.startX) {\n var width = (this.dragPoint.endX - this.previousPoint.x);\n var height = (this.dragPoint.endY - this.previousPoint.y);\n if (this.factor !== 1) {\n width = (width * ratio.width) / this.factor;\n height = (height * ratio.height) / this.factor;\n }\n this.activeObj.activePoint.startX += width;\n this.activeObj.activePoint.endX += width;\n this.activeObj.activePoint.startY += height;\n this.activeObj.activePoint.endY += height;\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n if (this.activeObj.shape !== 'text' && !this.allowDrag) {\n if (this.factor > 1 && (this.activeObj.activePoint.startX < this.pannStart.startX ||\n this.activeObj.activePoint.endX > endPoint.x) && (this.activeObj.activePoint.startY < this.pannStart.startY ||\n this.activeObj.activePoint.endY > endPoint.y)) {\n this.activeObj.activePoint.startX -= width;\n this.activeObj.activePoint.endX -= width;\n this.activeObj.activePoint.startY -= height;\n this.activeObj.activePoint.endY -= height;\n }\n else if (this.factor > 1 && (this.activeObj.activePoint.startX < this.pannStart.startX ||\n this.activeObj.activePoint.endX > endPoint.x)) {\n this.activeObj.activePoint.startX -= width;\n this.activeObj.activePoint.endX -= width;\n }\n else if (this.factor > 1 && (this.activeObj.activePoint.startY < this.pannStart.startY ||\n this.activeObj.activePoint.endY > endPoint.y)) {\n this.activeObj.activePoint.startY -= height;\n this.activeObj.activePoint.endY -= height;\n }\n }\n if (this.activeObj.activePoint.startX >= this.pannStart.startX && this.activeObj.activePoint.startY >=\n this.pannStart.startY && this.activeObj.activePoint.endX <= endPoint.x && this.activeObj.activePoint.endY\n <= endPoint.y) {\n this.allowDrag = false;\n }\n }\n else {\n this.activeObj.activePoint.startX = x < this.mouseDownPoint.x ? x : this.mouseDownPoint.x;\n this.activeObj.activePoint.startY = y < this.mouseDownPoint.y ? y : this.mouseDownPoint.y;\n if (this.factor === 1) {\n this.activeObj.activePoint.startX = (this.activeObj.activePoint.startX - bbox.left) * ratio.width;\n this.activeObj.activePoint.startY = (this.activeObj.activePoint.startY - bbox.top) * ratio.height;\n initialDraw = false;\n }\n else {\n this.activeObj.activePoint.startX = (this.activeObj.activePoint.startX - bbox.left) + ((this.pannStart.startX)\n / ratio.width * this.factor);\n this.activeObj.activePoint.startY = (this.activeObj.activePoint.startY - bbox.top) + ((this.pannStart.startY)\n / ratio.height * this.factor);\n initialDraw = true;\n }\n x = x < this.mouseDownPoint.x ? this.mouseDownPoint.x : x;\n y = y < this.mouseDownPoint.y ? this.mouseDownPoint.y : y;\n if (this.factor === 1) {\n this.activeObj.activePoint.endX = (x - bbox.left) * ratio.width;\n this.activeObj.activePoint.endY = (y - bbox.top) * ratio.height;\n initialDraw = false;\n }\n else {\n this.activeObj.activePoint.endX = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n this.activeObj.activePoint.endY = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n initialDraw = true;\n }\n }\n break;\n }\n shapeResizingArgs.currentShapeSettings = this.activeObj;\n shapeMovingArgs.currentShapeSettings = this.activeObj;\n this.trigger('shapeChanging', shapeMovingArgs);\n this.trigger('shapeChanging', shapeResizingArgs);\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n return initialDraw;\n };\n ImageEditor.prototype.updateNWPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = this.activeObj.activePoint.startX - x;\n this.diffPoint.y = this.activeObj.activePoint.startY - y;\n }\n else {\n this.diffPoint.x = this.oldPoint.x - x;\n this.diffPoint.y = this.oldPoint.y - y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x <= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = (diff / 10) * this.factor;\n this.activeObj.activePoint.startX -= (maxDimension.width / 100) * percentage;\n this.activeObj.activePoint.startY -= (maxDimension.height / 100) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n var degree = void 0;\n var maxText = this.getMaxText();\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree === 180) {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.width / maxText.length) * 2;\n }\n else {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.height / maxText.length) * 2;\n }\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.startY = y;\n if (this.activeObj.activePoint.startX > this.activeObj.activePoint.endX) {\n var temp = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = temp;\n this.dragElement = 'ne-resize';\n }\n if (this.activeObj.activePoint.startY > this.activeObj.activePoint.endY) {\n var temp = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = temp;\n this.dragElement = 'sw-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.startX < x && this.activeObj.activePoint.startY < y) {\n width = x - this.activeObj.activePoint.startX;\n height = y - this.activeObj.activePoint.startY;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n }\n }\n else {\n width = this.activeObj.activePoint.startX - x;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.updateNPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startY = y;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n if (this.activeObj.activePoint.startY > this.activeObj.activePoint.endY) {\n var temp = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = temp;\n this.dragElement = 's-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.startY < y) {\n width = this.activeObj.activePoint.endX - x;\n height = y - this.activeObj.activePoint.startY;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = this.activeObj.activePoint.startY - y;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateNEPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = x - this.activeObj.activePoint.endX;\n this.diffPoint.y = this.activeObj.activePoint.startY - y;\n }\n else {\n this.diffPoint.x = x - this.oldPoint.x;\n this.diffPoint.y = this.oldPoint.y - y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x <= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = (diff / 10) * this.factor;\n this.activeObj.activePoint.endX += (maxDimension.width / 100) * percentage;\n this.activeObj.activePoint.startY -= (maxDimension.height / 100) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n var degree = void 0;\n var maxText = this.getMaxText();\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree === 180) {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.width / maxText.length) * 2;\n }\n else {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.height / maxText.length) * 2;\n }\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endX = x;\n this.activeObj.activePoint.startY = y;\n if (this.activeObj.activePoint.endX < this.activeObj.activePoint.startX) {\n var temp = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = temp;\n this.dragElement = 'nw-resize';\n }\n if (this.activeObj.activePoint.startY > this.activeObj.activePoint.endY) {\n var temp = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = temp;\n this.dragElement = 'se-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.startY < y) {\n width = this.activeObj.activePoint.endX - x;\n height = y - this.activeObj.activePoint.startY;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = this.activeObj.activePoint.startY - y;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.updateWPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n if (this.activeObj.activePoint.startX > this.activeObj.activePoint.endX) {\n var temp = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = temp;\n this.dragElement = 'e-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.startX < x && this.activeObj.activePoint.endY > y) {\n width = x - this.activeObj.activePoint.startX;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = this.activeObj.activePoint.startX - x;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateEPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endX = x;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n if (this.activeObj.activePoint.endX < this.activeObj.activePoint.startX) {\n var temp = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = temp;\n this.dragElement = 'w-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.endY > y) {\n width = this.activeObj.activePoint.endX - x;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateSWPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = this.activeObj.activePoint.startX - x;\n this.diffPoint.y = y - this.activeObj.activePoint.endY;\n }\n else {\n this.diffPoint.x = this.oldPoint.x - x;\n this.diffPoint.y = y - this.oldPoint.y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x <= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = (diff / 10) * this.factor;\n this.activeObj.activePoint.startX -= (maxDimension.width / 100) * percentage;\n this.activeObj.activePoint.endY += (maxDimension.height / 100) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n var degree = void 0;\n var maxText = this.getMaxText();\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree === 180) {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.width / maxText.length) * 2;\n }\n else {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.height / maxText.length) * 2;\n }\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.endY = y;\n if (this.activeObj.activePoint.startX > this.activeObj.activePoint.endX) {\n var temp = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = temp;\n this.dragElement = 'se-resize';\n }\n if (this.activeObj.activePoint.endY < this.activeObj.activePoint.startY) {\n var temp = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = temp;\n this.dragElement = 'nw-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.startX < x && this.activeObj.activePoint.endY > y) {\n width = x - this.activeObj.activePoint.startX;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = this.activeObj.activePoint.startX - x;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.updateSPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endY = y;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n if (this.activeObj.activePoint.endY < this.activeObj.activePoint.startY) {\n var temp = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = temp;\n this.dragElement = 'n-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.endY > y) {\n width = this.activeObj.activePoint.endX - x;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.x;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateSEPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = x - this.activeObj.activePoint.endX;\n this.diffPoint.y = y - this.activeObj.activePoint.endY;\n }\n else {\n this.diffPoint.x = x - this.oldPoint.x;\n this.diffPoint.y = y - this.oldPoint.y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x >= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = (diff / 10) * this.factor;\n this.activeObj.activePoint.endX += (maxDimension.width / 50) * percentage;\n this.activeObj.activePoint.endY += (maxDimension.height / 50) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n var degree = void 0;\n var maxText = this.getMaxText();\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree === 180) {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.width / maxText.length) * 2;\n }\n else {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.height / maxText.length) * 2;\n }\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endX = x;\n this.activeObj.activePoint.endY = y;\n if (this.activeObj.activePoint.endX < this.activeObj.activePoint.startX) {\n var temp = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = temp;\n this.dragElement = 'sw-resize';\n }\n if (this.activeObj.activePoint.endY < this.activeObj.activePoint.startY) {\n var temp = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = temp;\n this.dragElement = 'ne-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.endY > y) {\n width = this.activeObj.activePoint.endX - x;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.getScaleRatio = function (scale) {\n var point = { x: scale, y: scale };\n if (!this.currObjType.isCustomCrop && this.activeObj.shape !== 'crop-circle' && this.activeObj.shape !== 'crop-square') {\n var ratio = this.activeObj.shape.split('-');\n ratio = ratio[1].split(':');\n var newScale = scale / (parseInt(ratio[1], 10));\n point.x = newScale * (parseInt(ratio[0], 10));\n point.y = newScale * (parseInt(ratio[1], 10));\n }\n return point;\n };\n ImageEditor.prototype.getMaxText = function (isTextBox) {\n var text = isTextBox ? this.textBox.value : this.activeObj.keyHistory;\n var maxi;\n var rows = text.split('\\n');\n var maxStr = rows[0].length;\n var maxText = rows[0];\n for (var i = 1; i < rows.length; i++) {\n maxi = rows[i].length;\n if (maxi > maxStr) {\n maxText = rows[i];\n maxStr = maxi;\n }\n }\n return maxText;\n };\n ImageEditor.prototype.setDragLimit = function () {\n if (this.factor === 1 && this.activeObj.activePoint !== undefined && this.activeObj.shape !== 'text') {\n if (this.activeObj.activePoint.startX < 0) {\n this.activeObj.activePoint.startX = 0;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.width;\n }\n else if (this.activeObj.activePoint.endX > this.lowerCanvas.width) {\n this.activeObj.activePoint.endX = this.lowerCanvas.width;\n this.activeObj.activePoint.startX = this.lowerCanvas.width - this.activeObj.activePoint.width;\n }\n if (this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.startY = 0;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.height;\n }\n else if (this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.endY = this.lowerCanvas.height;\n this.activeObj.activePoint.startY = this.lowerCanvas.height - this.activeObj.activePoint.height;\n }\n }\n };\n ImageEditor.prototype.lineDraw = function (ratio) {\n if (this.activeObj.activePoint.height < 10 * ratio.height) {\n this.activeObj.activePoint.startY -= 10 * ratio.height;\n this.activeObj.activePoint.endY += 10 * ratio.height;\n this.activeObj.lineDraw = 'horizontal';\n }\n else if (this.activeObj.activePoint.width < 10 * ratio.width) {\n this.activeObj.activePoint.startX -= 10 * ratio.width;\n this.activeObj.activePoint.endX += 10 * ratio.width;\n this.activeObj.lineDraw = 'vertical';\n }\n else if (this.currObjType.isInitialLine) {\n this.activeObj.lineDraw = 'normal';\n this.currObjType.isInitialLine = false;\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n };\n ImageEditor.prototype.shapeCircle = function (canvasDraw, selectionWidth, selectionHeight) {\n var ratio = this.calcRatio();\n canvasDraw.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n canvasDraw.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n canvasDraw.fillStyle = 'rgb(0, 0, 0, 0.5)';\n canvasDraw.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var tempWidth = canvasDraw.lineWidth;\n canvasDraw.lineWidth = (2 * (ratio.width + ratio.height)) / this.factor;\n canvasDraw.beginPath();\n canvasDraw.ellipse(this.activeObj.horTopLine.startX + (selectionWidth / 2), this.activeObj.horTopLine.startY\n + (selectionHeight / 2), selectionWidth / 2, selectionHeight / 2, 0, 0, 2 * Math.PI, false);\n canvasDraw.stroke();\n canvasDraw.closePath();\n canvasDraw.save();\n canvasDraw.beginPath();\n canvasDraw.arc(((this.activeObj.activePoint.endX - this.activeObj.activePoint.startX) / 2) + this.activeObj.activePoint.startX, ((this.activeObj.activePoint.endY - this.activeObj.activePoint.startY) / 2) + this.activeObj.activePoint.startY, (this.activeObj.activePoint.width / 2), 0, Math.PI * 2);\n canvasDraw.closePath();\n canvasDraw.clip();\n canvasDraw.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n canvasDraw.restore();\n canvasDraw.lineWidth = tempWidth;\n this.drawOuterSelection(canvasDraw, null, true);\n this.currObjType.shape = '';\n };\n ImageEditor.prototype.drawOuterSelection = function (canvasDraw, isInitialDraw, isCropCircle) {\n var splitWords;\n var ratio = this.calcRatio();\n canvasDraw.lineWidth = (0.5 * (ratio.width + ratio.height)) / this.factor;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n var tempObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n if (isInitialDraw) {\n tempObj = this.getZoomShape(tempObj, ratio);\n }\n }\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (((splitWords !== undefined && splitWords[0] === 'crop') || this.activeObj.shape === undefined) && !isCropCircle) {\n this.upperContext.fillStyle = 'rgb(0, 0, 0, 0.5)';\n this.upperContext.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(this.activeObj.activePoint.startX, this.activeObj.activePoint.startY, this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n }\n canvasDraw.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n canvasDraw.fillStyle = this.themeColl[this.theme]['secondaryColor'];\n if (this.activeObj.shape !== 'rectangle') {\n canvasDraw.beginPath();\n canvasDraw.rect(tempObj.activePoint.startX, tempObj.activePoint.startY, tempObj.activePoint.width, tempObj.activePoint.height);\n canvasDraw.stroke();\n canvasDraw.closePath();\n }\n canvasDraw.lineWidth *= 2;\n canvasDraw.beginPath();\n canvasDraw.moveTo(tempObj.topLeftCircle.startX, tempObj.topLeftCircle.startY);\n canvasDraw.arc(tempObj.topLeftCircle.startX, tempObj.topLeftCircle.startY, tempObj.topLeftCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(tempObj.topRightCircle.startX, tempObj.topRightCircle.startY);\n canvasDraw.arc(tempObj.topRightCircle.startX, tempObj.topRightCircle.startY, tempObj.topRightCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(tempObj.bottomLeftCircle.startX, tempObj.bottomLeftCircle.startY);\n canvasDraw.arc(tempObj.bottomLeftCircle.startX, tempObj.bottomLeftCircle.startY, tempObj.bottomLeftCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(tempObj.bottomRightCircle.startX, tempObj.bottomRightCircle.startY);\n canvasDraw.arc(tempObj.bottomRightCircle.startX, tempObj.bottomRightCircle.startY, tempObj.bottomRightCircle.radius, 0, 2 * Math.PI);\n canvasDraw.stroke();\n canvasDraw.fill();\n canvasDraw.closePath();\n canvasDraw.lineWidth /= 2;\n if ((splitWords === undefined || splitWords[0] !== 'crop') && this.activeObj.shape !== 'text') {\n this.drawCenterCircles(canvasDraw);\n }\n this.activeObj = extend({}, tempObj, {}, true);\n };\n ImageEditor.prototype.getZoomShape = function (tempObj, ratio) {\n var obj = extend({}, tempObj, {}, true);\n obj.activePoint.startX = (obj.activePoint.startX / this.factor) * ratio.width;\n obj.activePoint.startY = (obj.activePoint.startY / this.factor) * ratio.height;\n obj.activePoint.endX = (obj.activePoint.endX / this.factor) * ratio.width;\n obj.activePoint.endY = (obj.activePoint.endY / this.factor) * ratio.height;\n obj.activePoint.width = obj.activePoint.endX - obj.activePoint.startX;\n obj.activePoint.height = obj.activePoint.endY - obj.activePoint.startY;\n this.updateActiveObject(ratio, obj.activePoint, obj);\n return obj;\n };\n ImageEditor.prototype.drawObject = function (canvas, obj, isInitialDraw, isCropRatio, points) {\n var canvasDraw;\n if (canvas.toLowerCase() === 'original') {\n canvasDraw = this.lowerContext;\n }\n else {\n canvasDraw = this.upperContext;\n }\n this.setDragLimit();\n var ratio = this.calcRatio();\n if (this.currObjType.isLine && canvas !== 'original' && !obj) {\n this.lineDraw(ratio);\n }\n var splitWords = this.currObjType.shape.split('-');\n if (splitWords[0].toLowerCase() === 'crop' && isCropRatio) {\n this.drawCropRatio();\n }\n if (points) {\n this.activeObj.activePoint.startX = points.startX;\n this.activeObj.activePoint.startY = points.startY;\n this.activeObj.activePoint.endX = points.endX;\n this.activeObj.activePoint.endY = points.endY;\n this.activeObj.activePoint.width = points.width;\n this.activeObj.activePoint.height = points.height;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings.strokeWidth)) {\n this.activeObj.strokeSettings.strokeWidth = 2 * (ratio.width + ratio.height) / this.factor;\n }\n if (obj) {\n this.activeObj = extend({}, obj, {}, true);\n if (this.factor !== 1) {\n this.updateActiveObject(ratio);\n }\n }\n else {\n this.updateActiveObject(ratio);\n }\n if (this.currObjType.isText) {\n this.activeObj.keyHistory = this.keyHistory;\n }\n if (canvas.toLowerCase() !== 'original') {\n var splitWords_1;\n var isCrop = false;\n if (this.activeObj.shape) {\n splitWords_1 = this.activeObj.shape.split('-');\n if (splitWords_1[0] === 'crop') {\n isCrop = true;\n }\n }\n if (isCrop) {\n this.upperContext.fillStyle = 'rgb(0, 0, 0, 0.5)';\n this.upperContext.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(this.activeObj.activePoint.startX + ratio.width, this.activeObj.activePoint.startY + ratio.height, this.activeObj.activePoint.width - ratio.width, this.activeObj.activePoint.height - ratio.height);\n }\n this.drawOuterSelection(canvasDraw, isInitialDraw);\n }\n this.currObjType.isActiveObj = true;\n if (obj) {\n this.drawShapeObj(canvas, obj.shape);\n }\n else if (this.keyHistory !== '' && this.currObjType.isText) {\n this.drawShapeObj(canvas, 'text');\n }\n else if (this.activeObj.shape) {\n this.drawShapeObj(canvas, this.activeObj.shape);\n }\n else {\n this.drawShapeObj(canvas, undefined);\n }\n };\n ImageEditor.prototype.updateActiveObject = function (ratio, actPoint, obj, isMouseMove) {\n actPoint = actPoint ? actPoint : extend({}, this.activeObj.activePoint, {}, true);\n obj = obj ? obj : extend({}, this.activeObj, {}, true);\n var horCircleWidth = actPoint.width / 2;\n var verCircleHeight = actPoint.height / 2;\n var radius = 7.5;\n obj.horTopLine = { startX: actPoint.startX, startY: actPoint.startY,\n endX: actPoint.endX, endY: actPoint.endY };\n obj.horBottomLine = { startX: actPoint.startX, startY: actPoint.endY,\n endX: actPoint.endX, endY: actPoint.endY };\n obj.verLeftLine = { startX: actPoint.startX, startY: actPoint.startY,\n endX: actPoint.startX, endY: actPoint.endY };\n obj.verRightLine = { startX: actPoint.endX, startY: actPoint.startY,\n endX: actPoint.endX, endY: actPoint.endY };\n obj.topLeftCircle = { startX: actPoint.startX, startY: actPoint.startY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.topCenterCircle = { startX: actPoint.startX + horCircleWidth, startY: actPoint.startY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.topRightCircle = { startX: actPoint.endX, startY: actPoint.startY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.centerLeftCircle = { startX: actPoint.startX, startY: actPoint.startY + verCircleHeight,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.centerRightCircle = { startX: actPoint.endX, startY: actPoint.startY + verCircleHeight,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.bottomLeftCircle = { startX: actPoint.startX, startY: actPoint.endY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.bottomCenterCircle = { startX: actPoint.startX + horCircleWidth, startY: actPoint.endY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.bottomRightCircle = { startX: actPoint.endX, startY: actPoint.endY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.activePoint = actPoint;\n if (isNullOrUndefined(isMouseMove)) {\n this.activeObj = extend({}, obj, {}, true);\n }\n };\n ImageEditor.prototype.drawShapeObj = function (canvas, shape) {\n var currentShape = shape !== undefined ? shape : this.currObjType.shape;\n this.currObjType.shape = currentShape;\n var canvasDraw;\n if (canvas.toLowerCase() === 'original') {\n canvasDraw = this.lowerContext;\n }\n else {\n canvasDraw = this.upperContext;\n }\n if (this.currObjType.shape.toLowerCase() === 'rectangle' || this.currObjType.shape.toLowerCase() === 'ellipse'\n || this.currObjType.shape.toLowerCase() === 'line') {\n this.activeObj.shape = this.currObjType.shape;\n }\n canvasDraw.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n if (shape === 'text' || shape === 'freehanddraw') {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n }\n else {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.fillColor;\n }\n var horLineWidth = this.activeObj.activePoint.width / 3;\n var verLineHeight = this.activeObj.activePoint.height / 3;\n var selectionWidth = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n var selectionHeight = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n switch (this.currObjType.shape.toLowerCase()) {\n case 'rectangle':\n this.drawSquareLines(canvasDraw);\n if (canvasDraw === this.upperContext) {\n this.drawOuterSelection(canvasDraw);\n }\n break;\n case 'ellipse':\n canvasDraw.beginPath();\n canvasDraw.ellipse(this.activeObj.activePoint.startX + (selectionWidth / 2), this.activeObj.activePoint.startY + (selectionHeight / 2), selectionWidth / 2, selectionHeight / 2, 0, 0, 2 * Math.PI, false);\n if (this.activeObj.strokeSettings.fillColor !== '') {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.fillColor;\n canvasDraw.fill();\n }\n canvasDraw.ellipse(this.activeObj.activePoint.startX + (selectionWidth / 2), this.activeObj.activePoint.startY + (selectionHeight / 2), (selectionWidth / 2) - (this.activeObj.strokeSettings.strokeWidth), (selectionHeight / 2) - (this.activeObj.strokeSettings.strokeWidth), 0, 0, 2 * Math.PI, false);\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n canvasDraw.fill('evenodd');\n canvasDraw.closePath();\n if (canvasDraw === this.upperContext) {\n this.drawOuterSelection(canvasDraw);\n }\n break;\n case 'crop-circle':\n this.shapeCircle(canvasDraw, selectionWidth, selectionHeight);\n break;\n case 'line':\n this.shapeLine(canvasDraw, selectionWidth, selectionHeight);\n if (canvasDraw === this.upperContext) {\n this.drawOuterSelection(canvasDraw);\n }\n break;\n case 'text':\n this.shapeText(canvasDraw);\n break;\n case 'crop-square':\n case 'crop-3:4':\n case 'crop-4:3':\n case 'crop-6:9':\n case 'crop-9:6':\n case 'crop-9:16':\n case 'crop-16:9':\n this.drawSelection(horLineWidth, verLineHeight);\n this.currObjType.shape = '';\n break;\n default:\n this.drawSelection(horLineWidth, verLineHeight);\n break;\n }\n };\n ImageEditor.prototype.shapeLine = function (canvasDraw, selectionWidth, selectionHeight) {\n var startX;\n var startY;\n var endX;\n var endY;\n var degree;\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree % 180 === 0) {\n startX = this.activeObj.activePoint.startX;\n startY = this.activeObj.activePoint.startY + (selectionHeight / 2);\n endX = this.activeObj.activePoint.endX;\n endY = this.activeObj.activePoint.startY + (selectionHeight / 2);\n }\n else {\n startX = this.activeObj.activePoint.startX + (selectionWidth / 2);\n startY = this.activeObj.activePoint.startY;\n endX = this.activeObj.activePoint.startX + (selectionWidth / 2);\n endY = this.activeObj.activePoint.endY;\n }\n var tempLineWidth = canvasDraw.lineWidth;\n canvasDraw.lineWidth = (this.activeObj.strokeSettings.strokeWidth) / Math.abs(this.factor);\n canvasDraw.beginPath();\n switch (this.activeObj.lineDraw.toLowerCase()) {\n case 'horizontal':\n case 'vertical':\n canvasDraw.moveTo(startX, startY);\n canvasDraw.lineTo(endX, endY);\n break;\n case 'normal':\n canvasDraw.moveTo(this.activeObj.horTopLine.startX, this.activeObj.horTopLine.startY);\n canvasDraw.lineTo(this.activeObj.horBottomLine.endX, this.activeObj.horBottomLine.endY);\n break;\n }\n canvasDraw.stroke();\n canvasDraw.lineWidth = tempLineWidth;\n };\n ImageEditor.prototype.shapeText = function (canvasDraw) {\n var rows = this.activeObj.keyHistory.split('\\n');\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n var lineHeight = ((height * rows.length) - (this.activeObj.textSettings.fontSize * rows.length)) / rows.length;\n for (var i = 0; i < rows.length; i++) {\n var text = rows[i];\n var yPoint = ((i + 1) * this.activeObj.textSettings.fontSize * 0.85) + (i * lineHeight);\n if (this.degree === -360) {\n this.degree = 0;\n }\n if (this.degree === 0 || this.degree === 180) {\n if (this.activeObj.textSettings.fontSize > this.activeObj.activePoint.height) {\n this.activeObj.textSettings.fontSize = this.activeObj.activePoint.height -\n (this.activeObj.activePoint.height * 0.1);\n }\n }\n else {\n if (this.activeObj.textSettings.fontSize > this.activeObj.activePoint.width) {\n this.activeObj.textSettings.fontSize = this.activeObj.activePoint.width -\n (this.activeObj.activePoint.width * 0.1);\n }\n }\n canvasDraw.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n var textStyle = '';\n if (this.activeObj.textSettings.bold) {\n textStyle = 'bold ';\n }\n if (this.activeObj.textSettings.italic) {\n textStyle = 'italic ';\n }\n if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n textStyle = 'italic bold ';\n }\n canvasDraw.font = textStyle + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n if (this.activeObj.flipObjColl.length === 4) {\n this.activeObj.flipObjColl = [];\n }\n for (var j = 0; j < this.activeObj.flipObjColl.length; j++) {\n if (this.activeObj.flipObjColl[j].toLowerCase() === 'horizontal') {\n this.lowerContext.translate(this.lowerContext.canvas.width, 0);\n this.lowerContext.scale(-1, 1);\n this.upperContext.translate(this.upperContext.canvas.width, 0);\n this.upperContext.scale(-1, 1);\n this.updateActPoint('horizontal');\n }\n else if (this.activeObj.flipObjColl[j].toLowerCase() === 'vertical') {\n this.lowerContext.translate(0, this.lowerContext.canvas.height);\n this.lowerContext.scale(1, -1);\n this.upperContext.translate(0, this.upperContext.canvas.height);\n this.upperContext.scale(1, -1);\n this.updateActPoint('vertical');\n }\n }\n if (this.activeObj.shapeDegree !== this.degree) {\n this.rotateText(canvasDraw);\n }\n else {\n canvasDraw.fillText(text, this.activeObj.activePoint.startX + this.activeObj.textSettings.fontSize * 0.1, this.activeObj.activePoint.startY + yPoint);\n }\n for (var k = 0; k < this.activeObj.flipObjColl.length; k++) {\n if (this.activeObj.flipObjColl[k].toLowerCase() === 'horizontal') {\n this.lowerContext.translate(this.lowerContext.canvas.width, 0);\n this.lowerContext.scale(-1, 1);\n this.upperContext.translate(this.upperContext.canvas.width, 0);\n this.upperContext.scale(-1, 1);\n this.updateActPoint('horizontal');\n }\n else if (this.activeObj.flipObjColl[k].toLowerCase() === 'vertical') {\n this.lowerContext.translate(0, this.lowerContext.canvas.height);\n this.lowerContext.scale(1, -1);\n this.upperContext.translate(0, this.upperContext.canvas.height);\n this.upperContext.scale(1, -1);\n this.updateActPoint('vertical');\n }\n }\n }\n this.currObjType.isText = false;\n };\n ImageEditor.prototype.updateActPoint = function (degree) {\n var ratio = this.calcRatio();\n if (degree.toLowerCase() === 'horizontal') {\n if (this.activeObj.activePoint.startX <= this.lowerCanvas.width / 2) {\n this.activeObj.activePoint.startX = this.lowerCanvas.width / 2 + ((this.lowerCanvas.width / 2) -\n this.activeObj.activePoint.endX);\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n }\n else if (this.activeObj.activePoint.startX >= this.lowerCanvas.width / 2) {\n this.activeObj.activePoint.startX = this.lowerCanvas.width - this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n }\n }\n else if (degree.toLowerCase() === 'vertical') {\n if (this.activeObj.activePoint.startY <= this.lowerCanvas.height / 2) {\n this.activeObj.activePoint.startY = this.lowerCanvas.height / 2 + ((this.lowerCanvas.height / 2) -\n this.activeObj.activePoint.endY);\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n }\n else if (this.activeObj.activePoint.startY >= this.lowerCanvas.height / 2) {\n this.activeObj.activePoint.startY = this.lowerCanvas.height - this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n }\n }\n };\n ImageEditor.prototype.drawSquareLines = function (canvasDraw) {\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords[0] === 'crop') {\n canvasDraw.strokeStyle = '#fff';\n }\n else {\n canvasDraw.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n }\n canvasDraw.beginPath();\n canvasDraw.rect(this.activeObj.activePoint.startX, this.activeObj.activePoint.startY, this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n if (this.activeObj.strokeSettings.fillColor !== '') {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.fillColor;\n canvasDraw.fill();\n }\n canvasDraw.rect(this.activeObj.activePoint.startX + this.activeObj.strokeSettings.strokeWidth, this.activeObj.activePoint.startY + this.activeObj.strokeSettings.strokeWidth, this.activeObj.activePoint.width - (2 * this.activeObj.strokeSettings.strokeWidth), this.activeObj.activePoint.height - (2 * this.activeObj.strokeSettings.strokeWidth));\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n canvasDraw.fill('evenodd');\n canvasDraw.closePath();\n };\n ImageEditor.prototype.drawSelection = function (horLineWidth, verLineHeight) {\n this.upperContext.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n this.upperContext.beginPath();\n this.activeObj.horTopInnerLine = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY +\n verLineHeight, endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY + verLineHeight };\n this.activeObj.horBottomInnerLine = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY +\n (2 * verLineHeight), endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY + (2 * verLineHeight) };\n this.activeObj.verLeftInnerLine = { startX: this.activeObj.activePoint.startX + horLineWidth,\n startY: this.activeObj.activePoint.startY, endX: this.activeObj.activePoint.startX + horLineWidth,\n endY: this.activeObj.activePoint.endY };\n this.activeObj.verRightInnerLine = { startX: this.activeObj.activePoint.startX + (2 * horLineWidth),\n startY: this.activeObj.activePoint.startY, endX: this.activeObj.activePoint.startX + (2 * horLineWidth),\n endY: this.activeObj.activePoint.endY };\n this.upperContext.moveTo(this.activeObj.horTopInnerLine.startX, this.activeObj.horTopInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.horTopInnerLine.endX, this.activeObj.horTopInnerLine.startY);\n this.upperContext.moveTo(this.activeObj.horBottomInnerLine.startX, this.activeObj.horBottomInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.horBottomInnerLine.endX, this.activeObj.horBottomInnerLine.startY);\n this.upperContext.moveTo(this.activeObj.verLeftInnerLine.startX, this.activeObj.verLeftInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.verLeftInnerLine.endX, this.activeObj.verLeftInnerLine.endY);\n this.upperContext.moveTo(this.activeObj.verRightInnerLine.startX, this.activeObj.verRightInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.verRightInnerLine.endX, this.activeObj.verRightInnerLine.endY);\n this.upperContext.stroke();\n this.upperContext.closePath();\n };\n ImageEditor.prototype.drawCenterCircles = function (canvasDraw) {\n canvasDraw.lineWidth *= 2;\n canvasDraw.beginPath();\n canvasDraw.moveTo(this.activeObj.topCenterCircle.startX, this.activeObj.topCenterCircle.startY);\n canvasDraw.arc(this.activeObj.topCenterCircle.startX, this.activeObj.topCenterCircle.startY, this.activeObj.topCenterCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(this.activeObj.centerLeftCircle.startX, this.activeObj.centerLeftCircle.startY);\n canvasDraw.arc(this.activeObj.centerLeftCircle.startX, this.activeObj.centerLeftCircle.startY, this.activeObj.centerLeftCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(this.activeObj.centerRightCircle.startX, this.activeObj.centerRightCircle.startY);\n canvasDraw.arc(this.activeObj.centerRightCircle.startX, this.activeObj.centerRightCircle.startY, this.activeObj.centerRightCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(this.activeObj.bottomCenterCircle.startX, this.activeObj.bottomCenterCircle.startY);\n canvasDraw.arc(this.activeObj.bottomCenterCircle.startX, this.activeObj.bottomCenterCircle.startY, this.activeObj.bottomCenterCircle.radius, 0, 2 * Math.PI);\n canvasDraw.stroke();\n canvasDraw.fill();\n canvasDraw.closePath();\n canvasDraw.lineWidth /= 2;\n };\n ImageEditor.prototype.findTarget = function (x, y, type) {\n var bbox = this.upperCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n y = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n }\n if (type.toLowerCase() === 'mousedown' || type.toLowerCase() === 'touchstart') {\n var splitWords = void 0;\n var isCrop = false;\n if (this.activeObj.shape) {\n splitWords = this.activeObj.shape.split('-');\n if (splitWords[0] === 'crop') {\n isCrop = true;\n }\n }\n this.findTargetObj(x, y, ratio, isCrop);\n this.updateCursorStyles(x, y, ratio, type);\n }\n else {\n switch (this.dragElement.toLowerCase()) {\n case 'nw-resize':\n this.activeObj.topLeftCircle.startX = x;\n this.activeObj.topLeftCircle.startY = y;\n break;\n case 'n-resize':\n this.activeObj.topCenterCircle.startX = x;\n this.activeObj.topCenterCircle.startY = y;\n break;\n case 'ne-resize':\n this.activeObj.topRightCircle.startX = x;\n this.activeObj.topRightCircle.startY = y;\n break;\n case 'w-resize':\n this.activeObj.centerLeftCircle.startX = x;\n this.activeObj.centerLeftCircle.startY = y;\n break;\n case 'e-resize':\n this.activeObj.centerRightCircle.startX = x;\n this.activeObj.centerRightCircle.startY = y;\n break;\n case 'sw-resize':\n this.activeObj.bottomLeftCircle.startX = x;\n this.activeObj.bottomLeftCircle.startY = y;\n break;\n case 's-resize':\n this.activeObj.bottomCenterCircle.startX = x;\n this.activeObj.bottomCenterCircle.startY = y;\n break;\n case 'se-resize':\n this.activeObj.bottomRightCircle.startX = x;\n this.activeObj.bottomRightCircle.startY = y;\n break;\n default:\n if (this.dragPoint.startX && this.dragPoint.startY) {\n this.previousPoint.x = this.dragPoint.endX;\n this.previousPoint.y = this.dragPoint.endY;\n this.dragPoint.endX = x;\n this.dragPoint.endY = y;\n }\n break;\n }\n }\n };\n ImageEditor.prototype.findTargetObj = function (x, y, ratio, isCrop) {\n if (this.objColl.length !== 0 && !this.currObjType.isCustomCrop && !isCrop) {\n var diffX = 0;\n var i = void 0;\n for (var index = 0; index < this.objColl.length; index++) {\n var actObj = extend({}, this.objColl[index], {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio);\n }\n if (x >= (actObj.activePoint.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.activePoint.endX + actObj.topLeftCircle.radius) &&\n y >= (actObj.activePoint.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.activePoint.endY + actObj.topLeftCircle.radius)) {\n if (diffX === 0 || diffX > x - actObj.activePoint.startX) {\n diffX = x - this.objColl[index].activePoint.startX;\n i = index;\n }\n }\n }\n if (isNullOrUndefined(i)) {\n this.refreshActiveObj();\n return;\n }\n this.tempObjColl = extend([], this.objColl, [], true);\n this.currObjType.isCustomCrop = false;\n var temp = this.activeObj = extend({}, this.objColl[i], {}, true);\n this.objColl.splice(i, 1);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n if (this.degree === 0) {\n this.inMemoryContext.putImageData(this.imgDataColl[0].value, 0, 0);\n }\n else {\n if ((this.adjustmentLevel.sharpen || this.adjustmentLevel.bw) && !this.sharpenedImgData) {\n var data = void 0;\n var tempImageData = this.currImgData;\n if (this.adjustmentLevel.sharpen) {\n data = this.getSharpenData(this.currImgData);\n }\n else {\n data = this.getBlackAndWhiteData(tempImageData);\n }\n this.currImgData = data;\n this.sharpenedImgData = true;\n }\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n }\n if (this.flipState !== '') {\n if ((this.adjustmentLevel.sharpen || this.adjustmentLevel.bw) && !this.sharpenedImgData) {\n var data = void 0;\n var tempImageData = this.currImgData;\n if (this.adjustmentLevel.sharpen) {\n data = this.getSharpenData(this.currImgData);\n }\n else {\n data = this.getBlackAndWhiteData(tempImageData);\n }\n this.currImgData = data;\n this.sharpenedImgData = true;\n }\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n }\n this.setActivePoint();\n this.upperContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = this.canvasFilter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.activeObj = extend({}, temp, {}, true);\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n if (this.factor !== 1 && (this.activeObj.activePoint.startX < this.pannStart.startX || this.activeObj.activePoint.startY <\n this.pannStart.startY) || (this.activeObj.activePoint.endX > endPoint.x || this.activeObj.activePoint.endY > endPoint.y)) {\n this.allowDrag = true;\n }\n this.tempStrokeSettings = extend({}, this.activeObj.strokeSettings, {}, true);\n this.tempTextSettings = extend({}, this.activeObj.textSettings, {}, true);\n if (this.activeObj.shape === 'text' && this.activeObj.shapeFlip !== this.currFlipState) {\n this.activeObj.flippedText = true;\n }\n if (this.activeObj.activePoint) {\n this.drawObject('duplicate', this.activeObj);\n }\n var shapeChangingArgs = { action: 'select', previousShapeSettings: this.activeObj, currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n }\n };\n ImageEditor.prototype.updateCursorStyles = function (x, y, ratio, type) {\n var isResize = false;\n if (this.activeObj.keyHistory !== '' && this.activeObj.shape === undefined && !this.currObjType.isCustomCrop &&\n !this.currObjType.isLine && this.currObjType.isText) {\n this.activeObj.shape = 'text';\n }\n var actObj = extend({}, this.activeObj, {}, true);\n if (isNullOrUndefined(actObj.topLeftCircle)) {\n return;\n }\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (x >= (actObj.topLeftCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.topLeftCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.topLeftCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.topLeftCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'nw-resize') {\n actObj.topLeftCircle.startX = actObj.topLeftCircle.startY = 0;\n this.upperCanvas.style.cursor = 'nw-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.topCenterCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.topCenterCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.topCenterCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.topCenterCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'n-resize') {\n actObj.topCenterCircle.startX = actObj.topCenterCircle.startY = 0;\n this.upperCanvas.style.cursor = 'n-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.topRightCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.topRightCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.topRightCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.topRightCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'ne-resize') {\n actObj.topRightCircle.startX = actObj.topRightCircle.startY = 0;\n this.upperCanvas.style.cursor = 'ne-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.centerLeftCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.centerLeftCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.centerLeftCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.centerLeftCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'w-resize') {\n actObj.centerLeftCircle.startX = actObj.centerLeftCircle.startY = 0;\n this.upperCanvas.style.cursor = 'w-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.centerRightCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.centerRightCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.centerRightCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.centerRightCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'e-resize') {\n actObj.centerRightCircle.startX = actObj.centerRightCircle.startY = 0;\n this.upperCanvas.style.cursor = 'e-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.bottomLeftCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.bottomLeftCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.bottomLeftCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.bottomLeftCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'sw-resize') {\n actObj.bottomLeftCircle.startX = actObj.bottomLeftCircle.startY = 0;\n this.upperCanvas.style.cursor = 'sw-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.bottomCenterCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.bottomCenterCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.bottomCenterCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.bottomCenterCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 's-resize') {\n actObj.bottomCenterCircle.startX = actObj.bottomCenterCircle.startY = 0;\n this.upperCanvas.style.cursor = 's-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.bottomRightCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.bottomRightCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.bottomRightCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.bottomRightCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'se-resize') {\n actObj.bottomRightCircle.startX = actObj.bottomRightCircle.startY = 0;\n this.upperCanvas.style.cursor = 'se-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else {\n this.dragPoint.startX = this.previousPoint.x = this.dragPoint.endX = x;\n this.dragPoint.startY = this.previousPoint.y = this.dragPoint.endY = y;\n }\n this.previousPoint.x = this.previousPoint.y = this.diffPoint.x = this.diffPoint.y = 0;\n if (type === 'touchstart') {\n if (isResize || (x >= actObj.activePoint.startX && x <= actObj.activePoint.endX\n && y >= actObj.activePoint.startY && y <= actObj.activePoint.endY)) {\n this.currObjType.isDragging = true;\n }\n }\n else {\n this.currObjType.isDragging = true;\n }\n };\n ImageEditor.prototype.drawCropRatio = function () {\n var x;\n var y;\n switch (this.currObjType.shape.toLowerCase()) {\n case 'crop-square':\n case 'crop-circle':\n this.setDragDirection();\n if (this.lowerCanvas.width > this.lowerCanvas.height) {\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.activeObj.activePoint.width = this.activeObj.activePoint.height;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n }\n else {\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.width;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n }\n break;\n case 'crop-3:2':\n x = 3;\n y = 2;\n break;\n case 'crop-4:3':\n x = 4;\n y = 3;\n break;\n case 'crop-5:4':\n x = 5;\n y = 4;\n break;\n case 'crop-7:5':\n x = 7;\n y = 5;\n break;\n case 'crop-16:9':\n x = 16;\n y = 9;\n break;\n }\n if (x !== undefined && y !== undefined) {\n this.calcShapeRatio(x, y);\n }\n };\n ImageEditor.prototype.setDragDirection = function () {\n var ratio = this.calcRatio();\n var arcRadius = (7.5 * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor;\n if (this.lowerCanvas.width > this.lowerCanvas.height) {\n if (this.factor === 1) {\n this.activeObj.activePoint.startX = this.dragPoint.startX = ((this.lowerCanvas.width / 2) - (this.lowerCanvas.height / 2))\n + arcRadius;\n this.activeObj.activePoint.startY = this.dragPoint.startY = ((this.lowerCanvas.height / 2) - (this.lowerCanvas.height / 2))\n + arcRadius;\n this.activeObj.activePoint.endX = ((this.lowerCanvas.width / 2) + (this.lowerCanvas.height / 2)) - arcRadius;\n this.activeObj.activePoint.endY = ((this.lowerCanvas.height / 2) + (this.lowerCanvas.height / 2)) - arcRadius;\n }\n else {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n var visibleWidth = endPoint.x - this.pannStart.startX;\n var visibleHeight = endPoint.y - this.pannStart.startY;\n var centerX = (this.dragPoint.startX = visibleWidth / 2) + this.pannStart.startX;\n var centerY = this.dragPoint.startY = visibleHeight / 2;\n this.activeObj.activePoint.startX = (centerX - centerY) + arcRadius;\n this.activeObj.activePoint.startY = (this.pannStart.startY) + arcRadius;\n this.activeObj.activePoint.endX = (this.activeObj.activePoint.startX + visibleHeight) - arcRadius;\n this.activeObj.activePoint.endY = (this.activeObj.activePoint.startY + visibleHeight) - (2 * arcRadius);\n }\n }\n else {\n if (this.factor === 1) {\n this.activeObj.activePoint.startY = this.dragPoint.startX = ((this.lowerCanvas.height / 2) - (this.lowerCanvas.width) / 2)\n + arcRadius;\n this.activeObj.activePoint.endY = ((this.lowerCanvas.height / 2) + (this.lowerCanvas.width) / 2) - arcRadius;\n this.activeObj.activePoint.startX = this.dragPoint.startX = arcRadius;\n this.activeObj.activePoint.endX = this.lowerCanvas.width - arcRadius;\n }\n else {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n var visibleWidth = endPoint.x - this.pannStart.startX;\n var visibleHeight = endPoint.y - this.pannStart.startY;\n var centerX = this.dragPoint.startX = visibleWidth / 2;\n var centerY = (this.dragPoint.startY = visibleHeight / 2) + this.pannStart.startY;\n this.activeObj.activePoint.startX = this.pannStart.startX + arcRadius;\n this.activeObj.activePoint.startY = (centerY - centerX) + arcRadius;\n this.activeObj.activePoint.endX = (this.activeObj.activePoint.startX + visibleWidth) - arcRadius;\n this.activeObj.activePoint.endY = (this.activeObj.activePoint.startY + visibleWidth) - arcRadius;\n }\n }\n };\n ImageEditor.prototype.calcShapeRatio = function (x, y) {\n var ratio = this.calcRatio();\n var arcRadius = (7.5 * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor;\n var originalWidth = this.factor === 1 ? this.lowerCanvas.width : this.lowerCanvas.width / this.factor;\n var originalHeight = this.factor === 1 ? this.lowerCanvas.height : this.lowerCanvas.height / this.factor;\n var presetRatio = x / y;\n var standardSize = originalWidth >= originalHeight ? originalWidth : originalHeight;\n var width = standardSize * presetRatio;\n var height = standardSize;\n var scaleWidth = this.getScale(width, originalWidth);\n var snippetArray = [];\n for (var i = 0; i < 2; i++) {\n if (i === 0) {\n snippetArray.push(width * scaleWidth);\n }\n else {\n snippetArray.push(height * scaleWidth);\n }\n }\n width = snippetArray[0];\n height = snippetArray[1];\n var scaleHeight = this.getScale(height, originalHeight);\n var snippetArray1 = [];\n for (var i = 0; i < 2; i++) {\n if (i === 0) {\n snippetArray1.push(width * scaleHeight);\n }\n else {\n snippetArray1.push(height * scaleHeight);\n }\n }\n width = snippetArray1[0];\n height = snippetArray1[1];\n this.activeObj.activePoint.width = width;\n this.activeObj.activePoint.height = height;\n this.activeObj.activePoint.startX = (this.dragPoint.startX = (originalWidth - width) / 2) + arcRadius;\n this.activeObj.activePoint.startY = (this.dragPoint.startY = (originalHeight - height) / 2) + arcRadius;\n this.activeObj.activePoint.endX = ((originalWidth - width) / 2 + width) - arcRadius;\n this.activeObj.activePoint.endY = ((originalHeight - height) / 2 + height) - arcRadius;\n if (this.factor !== 1) {\n this.activeObj.activePoint.startX += this.pannStart.startX;\n this.activeObj.activePoint.startY += this.pannStart.startY;\n this.activeObj.activePoint.endX += this.pannStart.startX;\n this.activeObj.activePoint.endY += this.pannStart.startY;\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n };\n ImageEditor.prototype.getScale = function (value, originalValue) {\n return value > originalValue ? originalValue / value : 1;\n };\n ImageEditor.prototype.calcRatio = function () {\n var widthRatio;\n var heightRatio;\n if (this.degree === 0 || this.degree % 180 === 0) {\n widthRatio = this.baseImg.width / parseInt(this.lowerCanvas.style.maxWidth, 10);\n heightRatio = this.baseImg.height / parseInt(this.lowerCanvas.style.maxHeight, 10);\n }\n else {\n widthRatio = this.baseImg.height / parseInt(this.lowerCanvas.style.maxWidth, 10);\n heightRatio = this.baseImg.width / parseInt(this.lowerCanvas.style.maxHeight, 10);\n }\n return { width: widthRatio, height: heightRatio };\n };\n ImageEditor.prototype.calcMaxDimension = function (width, height) {\n var canvasMaxWidth = this.element.clientWidth;\n var canvasMaxHeight = this.element.clientHeight - this.toolbarHeight;\n canvasMaxHeight = Browser.isDevice ? canvasMaxHeight - this.toolbarHeight : canvasMaxHeight;\n canvasMaxWidth -= 30;\n canvasMaxHeight -= 30;\n var widthScale = canvasMaxWidth / width;\n var heightScale = canvasMaxHeight / height;\n var cssMaxWidth = Math.min(width, canvasMaxWidth);\n var cssMaxHeight = Math.min(height, canvasMaxHeight);\n if (widthScale < 1 && widthScale < heightScale) {\n cssMaxWidth = width * widthScale;\n cssMaxHeight = height * widthScale;\n }\n else if (heightScale < 1 && heightScale < widthScale) {\n cssMaxWidth = width * heightScale;\n cssMaxHeight = height * heightScale;\n }\n return { width: cssMaxWidth, height: cssMaxHeight };\n };\n ImageEditor.prototype.setMaximumDimension = function (degree) {\n var newWidth;\n var newHeight;\n if (degree % 90 === 0 && degree % 180 !== 0) {\n newWidth = this.baseImg.height;\n newHeight = this.baseImg.width;\n }\n else if (degree % 180 === 0 || degree === 0) {\n newWidth = this.baseImg.width;\n newHeight = this.baseImg.height;\n }\n this.lowerCanvas.width = this.upperCanvas.width = newWidth;\n this.lowerCanvas.height = this.upperCanvas.height = newHeight;\n var maxDimension = this.calcMaxDimension(newWidth, newHeight);\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n };\n ImageEditor.prototype.setCursor = function (x, y) {\n var bbox = this.upperCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n y = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n }\n if (this.activeObj.horTopLine !== undefined) {\n if (this.togglePan) {\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n }\n else {\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (x >= (actObj.topLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'nw-resize';\n }\n else if (x >= (actObj.topCenterCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topCenterCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topCenterCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topCenterCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'n-resize';\n }\n else if (x >= (actObj.topRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'ne-resize';\n }\n else if (x >= (actObj.centerLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.centerLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.centerLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.centerLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'w-resize';\n }\n else if (x >= (actObj.centerRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.centerRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.centerRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.centerRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'e-resize';\n }\n else if (x >= (actObj.bottomLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'sw-resize';\n }\n else if (x >= (actObj.bottomCenterCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomCenterCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomCenterCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomCenterCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 's-resize';\n }\n else if (x >= (actObj.bottomRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'se-resize';\n }\n else if ((x >= actObj.activePoint.startX &&\n x <= actObj.activePoint.endX) && (y >= actObj.activePoint.startY &&\n y <= actObj.activePoint.endY)) {\n this.upperCanvas.style.cursor = 'move';\n }\n else {\n if (this.currObjType.isCustomCrop) {\n this.upperCanvas.style.cursor = 'crosshair';\n }\n this.upperCanvas.style.cursor = 'default';\n }\n }\n }\n else if (this.togglePan) {\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n }\n else {\n if (this.currObjType.isCustomCrop || this.togglePen) {\n this.upperCanvas.style.cursor = 'crosshair';\n }\n else {\n this.upperCanvas.style.cursor = 'default';\n }\n }\n if (this.upperCanvas.style.cursor === 'default') {\n if (this.objColl.length > 0) {\n this.setCursorFromObj(x, y, this.objColl, ratio);\n }\n }\n };\n ImageEditor.prototype.setCursorFromObj = function (x, y, obj, ratio) {\n if (this.togglePan) {\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n }\n else {\n for (var i = 0; i < obj.length; i++) {\n var actObj = extend({}, obj[i], {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(obj[i], ratio, true);\n }\n if (x >= (actObj.topLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'nw-resize';\n break;\n }\n else if (x >= (actObj.topCenterCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topCenterCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topCenterCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topCenterCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'n-resize';\n break;\n }\n else if (x >= (actObj.topRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'ne-resize';\n break;\n }\n else if (x >= (actObj.centerLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.centerLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.centerLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.centerLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'w-resize';\n break;\n }\n else if (x >= (actObj.centerRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.centerRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.centerRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.centerRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'e-resize';\n break;\n }\n else if (x >= (actObj.bottomLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'sw-resize';\n break;\n }\n else if (x >= (actObj.bottomCenterCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomCenterCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomCenterCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomCenterCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 's-resize';\n break;\n }\n else if (x >= (actObj.bottomRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'se-resize';\n break;\n }\n else if ((x >= actObj.activePoint.startX &&\n x <= actObj.activePoint.endX) && (y >= actObj.activePoint.startY &&\n y <= actObj.activePoint.endY)) {\n this.upperCanvas.style.cursor = 'move';\n break;\n }\n else {\n if (this.currObjType.isCustomCrop) {\n this.upperCanvas.style.cursor = 'crosshair';\n }\n this.upperCanvas.style.cursor = 'default';\n }\n }\n }\n };\n ImageEditor.prototype.setCursorForZoomState = function (obj, ratio, isMouseMove) {\n var tempObj = extend({}, obj, {}, true);\n tempObj.activePoint.startX = (tempObj.activePoint.startX / ratio.width) * this.factor;\n tempObj.activePoint.startY = (tempObj.activePoint.startY / ratio.width) * this.factor;\n tempObj.activePoint.endX = (tempObj.activePoint.endX / ratio.width) * this.factor;\n tempObj.activePoint.endY = (tempObj.activePoint.endY / ratio.width) * this.factor;\n tempObj.activePoint.width = tempObj.activePoint.endX - tempObj.activePoint.startX;\n tempObj.activePoint.height = tempObj.activePoint.endY - tempObj.activePoint.startY;\n this.updateActiveObject(ratio, tempObj.activePoint, tempObj, isMouseMove);\n tempObj.topLeftCircle.radius = (tempObj.topLeftCircle.radius / ratio.width) * this.factor;\n return tempObj;\n };\n ImageEditor.prototype.downloadImg = function (blob, fileName) {\n var a = document.createElement('a');\n a.href = blob;\n a.target = '_parent';\n a.download = fileName;\n (document.body || document.documentElement).appendChild(a);\n a.click();\n a.parentNode.removeChild(a);\n };\n ImageEditor.prototype.toSVGImg = function (fileName) {\n var dataUrl = this.lowerCanvas.toDataURL();\n var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('width', this.lowerCanvas.style.maxWidth);\n svg.setAttribute('height', this.lowerCanvas.style.maxHeight);\n var XLinkNS = 'http://www.w3.org/1999/xlink';\n var img = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n img.setAttributeNS(null, 'height', this.lowerCanvas.height.toString());\n img.setAttributeNS(null, 'width', this.lowerCanvas.width.toString());\n img.setAttributeNS(XLinkNS, 'xlink:href', dataUrl);\n svg.appendChild(img);\n var prefix = 'data:image/svg+xml;base64,';\n var header = '<svg' + ' xmlns=\"http://www.w3.org/2000/svg\"' + ' xmlns:xlink=\"http://www.w3.org/1999/xlink\"'\n + (\" width=\\\"\" + this.lowerCanvas.width + \"\\\"\") + (\" height=\\\"\" + this.lowerCanvas.height + \"\\\"\") + '>';\n var footer = '</svg>';\n var body = svg.innerHTML;\n var data = header + body + footer;\n var svgDataUrl = prefix + btoa(data);\n if (fileName === null) {\n return svgDataUrl;\n }\n else {\n this.downloadImg(svgDataUrl, fileName + '.' + 'svg');\n return null;\n }\n };\n ImageEditor.prototype.toBlobFn = function (fileName, type) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.lowerCanvas.toBlob(function (blob) {\n var blobUrl = URL.createObjectURL(blob);\n //proxy.baseImg.src = blobUrl;\n proxy.downloadImg(blobUrl, fileName + '.' + type);\n }, 'image/png');\n };\n ImageEditor.prototype.addLetter = function (letter) {\n if (this.textBox.style.display === 'none' && (this.currObjType.isText || this.activeObj.shape === 'text')) {\n if (letter === 'Backspace') {\n this.keyHistory = this.keyHistory.slice(0, -1);\n }\n else {\n this.keyHistory += letter;\n }\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.keyHistory + this.tempKeyHistory).width\n + this.activeObj.textSettings.fontSize * 0.5;\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n this.upperContext.fillText(this.keyHistory + this.tempKeyHistory, this.activeObj.activePoint.startX, this.activeObj.activePoint.startY +\n this.activeObj.textSettings.fontSize);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.currObjType.isText = true;\n this.setActivePoint(width, height);\n }\n };\n ImageEditor.prototype.updateFontStyles = function (isTextBox) {\n this.upperContext.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n this.upperContext.fillStyle = this.activeObj.strokeSettings.strokeColor;\n var textStyle = '';\n if (this.activeObj.textSettings.bold) {\n textStyle = 'bold ';\n }\n if (this.activeObj.textSettings.italic) {\n textStyle = 'italic ';\n }\n if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n textStyle = 'italic bold ';\n }\n var fontSize = isTextBox ? parseFloat(this.textBox.style.fontSize) : this.activeObj.textSettings.fontSize;\n var fontFamily = this.textBox.style.display === 'block' ? this.textBox.style.fontFamily : this.activeObj.textSettings.fontFamily;\n this.upperContext.font = textStyle + fontSize + 'px' + ' ' + fontFamily;\n };\n ImageEditor.prototype.updateInMemoryCanvas = function (operation) {\n if (!this.disabled) {\n var imgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.imgDataColl.push({ operation: operation, value: imgData });\n this.inMemoryCanvas.width = imgData.width;\n this.inMemoryCanvas.height = imgData.height;\n this.inMemoryContext.putImageData(imgData, 0, 0);\n }\n };\n ImageEditor.prototype.calcPrevRatio = function () {\n var oldWidthRatio;\n var oldHeightRatio;\n var maxDimension;\n if (this.degree === 0 || this.degree % 180 === 0) {\n maxDimension = this.calcMaxDimension(this.baseImg.height, this.baseImg.width);\n oldWidthRatio = this.baseImg.height / maxDimension.width;\n oldHeightRatio = this.baseImg.width / maxDimension.height;\n }\n else {\n maxDimension = this.calcMaxDimension(this.baseImg.width, this.baseImg.height);\n oldWidthRatio = this.baseImg.width / maxDimension.width;\n oldHeightRatio = this.baseImg.height / maxDimension.height;\n }\n return { width: oldWidthRatio, height: oldHeightRatio };\n };\n ImageEditor.prototype.textFlipDegree = function (canvasDraw, startX, startY) {\n var rows = this.activeObj.keyHistory.split('\\n');\n var height = this.activeObj.textSettings.fontSize;\n var lineHeight = ((height * rows.length) - (this.activeObj.textSettings.fontSize * rows.length)) / rows.length;\n var yPoint = (this.activeObj.textSettings.fontSize * 0.85) + lineHeight;\n for (var i = 0; i < rows.length; i++) {\n var text = rows[i];\n if (i > 0) {\n if (i === 1) {\n yPoint -= (this.activeObj.textSettings.fontSize * 0.85);\n }\n yPoint += this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.15;\n }\n canvasDraw.fillText(text, startX + this.activeObj.textSettings.fontSize * 0.15, startY +\n yPoint + (i > 0 ? this.activeObj.textSettings.fontSize * 0.25 : -this.activeObj.textSettings.fontSize * 0.35));\n }\n };\n ImageEditor.prototype.rotateText = function (canvasDraw) {\n var startX = this.activeObj.activePoint.startX;\n var startY = this.activeObj.activePoint.startY;\n var degree;\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (degree % 360 === 0 && (this.degree !== -360 || this.currFlipState === '')) {\n startX = this.activeObj.activePoint.startX + this.activeObj.textSettings.fontSize * 0.15;\n startY = this.activeObj.activePoint.startY + (this.activeObj.activePoint.endY - this.activeObj.activePoint.startY);\n var rows = this.activeObj.keyHistory.split('\\n');\n for (var i = 0; i < rows.length; i++) {\n startY = this.activeObj.activePoint.startY + (i * this.activeObj.textSettings.fontSize +\n this.activeObj.textSettings.fontSize * 0.25);\n canvasDraw.fillText(rows[i], startX, startY);\n }\n }\n else if (degree % 90 === 0 && degree % 180 !== 0) {\n canvasDraw.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n canvasDraw.rotate(Math.PI / 180 * degree);\n canvasDraw.translate(-this.lowerCanvas.height / 2, -this.lowerCanvas.width / 2);\n if (degree % 90 === 0 && degree % 270 !== 0) {\n startY = (this.lowerCanvas.width - this.activeObj.activePoint.endX) + this.activeObj.textSettings.fontSize * 0.4;\n startX = this.activeObj.activePoint.startY;\n }\n else if (degree % 270 === 0) {\n startX = this.lowerCanvas.height - this.activeObj.activePoint.endY;\n startY = this.activeObj.activePoint.startX + this.activeObj.textSettings.fontSize * 0.4;\n }\n this.textFlipDegree(canvasDraw, startX, startY);\n canvasDraw.translate(this.lowerCanvas.height / 2, this.lowerCanvas.width / 2);\n canvasDraw.rotate(Math.PI / 180 * -degree);\n canvasDraw.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n }\n else {\n canvasDraw.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n canvasDraw.rotate(Math.PI / 180 * degree);\n startX = this.lowerCanvas.width - this.activeObj.activePoint.endX;\n startY = (this.lowerCanvas.height - this.activeObj.activePoint.endY) + this.activeObj.textSettings.fontSize * 0.4;\n canvasDraw.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n this.textFlipDegree(canvasDraw, startX, startY);\n canvasDraw.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n canvasDraw.rotate(Math.PI / 180 * -degree);\n canvasDraw.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n }\n if (this.degree === 360 || this.degree === -360) {\n this.degree = 0;\n }\n };\n ImageEditor.prototype.redrawSelection = function () {\n var ratio = this.calcRatio();\n this.activeObj.activePoint.startX = 0;\n this.activeObj.activePoint.startY = 0;\n this.activeObj.activePoint.endX = this.lowerCanvas.width;\n this.activeObj.activePoint.endY = this.lowerCanvas.height;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n };\n ImageEditor.prototype.redrawObj = function (degree) {\n if (this.objColl.length > 0) {\n if (degree === 'horizontal' || degree === 'vertical' || degree === 'Horizontal' || degree === 'Vertical') {\n this.updateCurrentActiveObjPoint(degree);\n }\n else if (degree === 90 || degree === -90) {\n this.updateCurrentActiveObjPoint(degree);\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n this.lowerContext.filter = tempFilter;\n }\n else {\n this.updateCurrentActiveObjPoint('zoom');\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n this.lowerContext.filter = tempFilter;\n }\n }\n else if (this.objColl.length === 0 && (degree === 'horizontal' || degree === 'vertical' || degree === 'Horizontal' || degree === 'Vertical')) {\n if (this.activeObj.horTopLine !== undefined && (this.activeObj.shape === undefined)) {\n this.redrawSelection();\n }\n else if (this.activeObj.horTopLine !== undefined && this.activeObj.shape !== undefined) {\n var splitWords = this.activeObj.shape.split('-');\n if (splitWords[0] === 'crop') {\n this.select(splitWords[1]);\n }\n }\n }\n else if ((degree === 'horizontal' || degree === 'vertical' || degree === 'Horizontal' || degree === 'Vertical')) {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords !== undefined && splitWords[0] === 'crop') {\n this.select(splitWords[1]);\n }\n else {\n this.redrawSelection();\n }\n }\n };\n ImageEditor.prototype.updateCurrentActiveObjPoint = function (degree) {\n var oldRatio = this.calcPrevRatio();\n var ratio = this.calcRatio();\n var currActObjIndex;\n for (var index = 0; index < this.objColl.length; index++) {\n if (this.activeObj.shape === this.objColl[index].shape &&\n this.activeObj.activePoint.startX === this.objColl[index].activePoint.startX &&\n this.activeObj.activePoint.startY === this.objColl[index].activePoint.startY &&\n this.activeObj.activePoint.endX === this.objColl[index].activePoint.endX &&\n this.activeObj.activePoint.endY === this.objColl[index].activePoint.endY &&\n this.activeObj.currIndex === this.objColl[index].currIndex) {\n currActObjIndex = index;\n break;\n }\n }\n if (degree === 'horizontal' || degree === 'vertical' || degree === 'Horizontal' || degree === 'Vertical') {\n if (degree === 'horizontal' || degree === 'Horizontal') {\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].activePoint.startX <= this.lowerCanvas.width / 2) {\n this.objColl[i].activePoint.startX = this.lowerCanvas.width / 2 + ((this.lowerCanvas.width / 2) -\n this.objColl[i].activePoint.endX);\n this.objColl[i].activePoint.endX = this.objColl[i].activePoint.startX +\n this.objColl[i].activePoint.width;\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n else if (this.objColl[i].activePoint.startX >= this.lowerCanvas.width / 2) {\n this.objColl[i].activePoint.startX = this.lowerCanvas.width - this.objColl[i].activePoint.endX;\n this.objColl[i].activePoint.endX = this.objColl[i].activePoint.startX +\n this.objColl[i].activePoint.width;\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n }\n }\n else if (degree === 'vertical' || degree === 'Vertical') {\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].activePoint.startY <= this.lowerCanvas.height / 2) {\n this.objColl[i].activePoint.startY = this.lowerCanvas.height / 2 + ((this.lowerCanvas.height / 2) -\n this.objColl[i].activePoint.endY);\n this.objColl[i].activePoint.endY = this.objColl[i].activePoint.startY +\n this.objColl[i].activePoint.height;\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n else if (this.objColl[i].activePoint.startY >= this.lowerCanvas.height / 2) {\n this.objColl[i].activePoint.startY = this.lowerCanvas.height - this.objColl[i].activePoint.endY;\n this.objColl[i].activePoint.endY = this.objColl[i].activePoint.startY +\n this.objColl[i].activePoint.height;\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n }\n }\n if (currActObjIndex !== undefined) {\n this.activeObj = extend({}, this.objColl[currActObjIndex], {}, true);\n }\n }\n else if (degree === 90 || degree === -90) {\n for (var i = 0; i < this.objColl.length; i++) {\n this.objColl[i].activePoint.startX /= oldRatio.width;\n this.objColl[i].activePoint.startY /= oldRatio.height;\n this.objColl[i].activePoint.endX /= oldRatio.width;\n this.objColl[i].activePoint.endY /= oldRatio.height;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endX -\n this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endY -\n this.objColl[i].activePoint.startY;\n this.objColl[i].strokeSettings.strokeWidth /= (oldRatio.width / this.factor);\n this.calcCurrPoints(degree, this.objColl[i]);\n this.objColl[i].activePoint.endX = this.objColl[i].activePoint.startX +\n this.objColl[i].activePoint.width;\n this.objColl[i].activePoint.endY = this.objColl[i].activePoint.startY +\n this.objColl[i].activePoint.height;\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endX -\n this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endY -\n this.objColl[i].activePoint.startY;\n }\n for (var i = 0; i < this.objColl.length; i++) {\n this.objColl[i].activePoint.startX *= oldRatio.width;\n this.objColl[i].activePoint.startY *= oldRatio.height;\n this.objColl[i].activePoint.endX *= oldRatio.width;\n this.objColl[i].activePoint.endY *= oldRatio.height;\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endX -\n this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endY -\n this.objColl[i].activePoint.startY;\n this.objColl[i].strokeSettings.strokeWidth *= ratio.width;\n }\n for (var i = 0; i < this.objColl.length; i++) {\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n }\n };\n ImageEditor.prototype.calcCurrPoints = function (degree, obj) {\n var oldRatio = this.calcPrevRatio();\n if (degree > 0) {\n var x = obj.activePoint.startX;\n obj.activePoint.startX = (this.lowerCanvas.width / oldRatio.width) - (obj.activePoint.startY + obj.activePoint.width);\n obj.activePoint.startY = x;\n }\n else {\n var y = obj.activePoint.startY;\n obj.activePoint.startY = (this.lowerCanvas.height / oldRatio.height) - (obj.activePoint.startX + obj.activePoint.height);\n obj.activePoint.startX = y;\n }\n };\n ImageEditor.prototype.redrawShape = function (obj) {\n for (var i = 0; i < this.objColl.length; i++) {\n if (JSON.stringify(obj) === JSON.stringify(this.objColl[i])) {\n this.objColl.splice(i, 1);\n break;\n }\n }\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.drawObject('duplicate', obj);\n };\n ImageEditor.prototype.applyActObj = function () {\n var isActObj = false;\n if (this.activeObj.shape !== undefined && this.activeObj.shape === 'text' && this.activeObj.keyHistory === '') {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n else {\n var splitWords = void 0;\n var isCropSelection = false;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if (this.activeObj.activePoint.width !== 0 && this.activeObj.activePoint.height !== 0 && !isCropSelection) {\n for (var i = 0; i < this.objColl.length; i++) {\n if (JSON.stringify(this.activeObj) === JSON.stringify(this.objColl[i])) {\n isActObj = true;\n break;\n }\n }\n if (!isActObj) {\n if (isNullOrUndefined(this.activeObj.currIndex)) {\n this.activeObj.currIndex = 'shape_' + (this.objColl.length + 1);\n }\n var splitWords_2 = this.activeObj.currIndex.split('_');\n var tempObjColl = this.objColl.splice(0, parseInt(splitWords_2[1], 10) - 1);\n tempObjColl.push(extend({}, this.activeObj, {}, true));\n for (var i = 0; i < this.objColl.length; i++) {\n tempObjColl.push(this.objColl[i]);\n }\n this.objColl = tempObjColl;\n tempObjColl = [];\n this.refreshActiveObj();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.activeObj.flippedText = false;\n this.currObjType.shape = '';\n this.refreshActiveObj();\n }\n }\n }\n };\n ImageEditor.prototype.apply = function (shape, obj, canvas) {\n if (!this.disabled) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n if ((this.togglePen) && !this.currObjType.isCustomCrop) {\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.upperCanvas.toBlob(function (blob) {\n showSpinner(proxy_1.element);\n proxy_1.element.style.opacity = '0.5';\n proxy_1.lowerContext.clearRect(0, 0, proxy_1.lowerCanvas.width, proxy_1.lowerCanvas.height);\n var temp = proxy_1.lowerContext.filter;\n proxy_1.lowerContext.filter = proxy_1.initialAdjustmentValue = proxy_1.adjustmentValue = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n if (proxy_1.cssClass) {\n addClass([proxy_1.element], proxy_1.cssClass.split(' '));\n }\n proxy_1.lowerContext.drawImage(proxy_1.inMemoryCanvas, 0, 0);\n proxy_1.baseImg.src = URL.createObjectURL(blob);\n proxy_1.upperContext.clearRect(0, 0, proxy_1.upperCanvas.width, proxy_1.upperCanvas.height);\n proxy_1.togglePen = false;\n proxy_1.upperCanvas.style.cursor = 'default';\n proxy_1.lowerContext.filter = temp;\n var tempFilter = proxy_1.lowerContext.filter;\n proxy_1.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0, len = proxy_1.objColl.length; i < len; i++) {\n proxy_1.apply(proxy_1.objColl[i].shape, proxy_1.objColl[i], 'duplicate');\n }\n proxy_1.lowerContext.filter = tempFilter;\n proxy_1.togglePen = true;\n }, 'image/png');\n this.degree = 0;\n }\n else {\n canvas = canvas ? canvas : 'original';\n this.currObjType.shape = shape !== undefined ? shape : this.currObjType.shape;\n if (this.currObjType.shape !== '') {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.drawObject(canvas, obj);\n this.activeObj.shape = this.currObjType.shape.toLowerCase();\n if (!shape && this.currObjType.shape !== '' && !this.currObjType.isCustomCrop) {\n this.objColl.push(extend({}, this.activeObj, {}, true));\n }\n this.keyHistory = '';\n }\n }\n }\n };\n ImageEditor.prototype.setCenterPoints = function (text, width, height) {\n var renderWidth;\n var renderHeight;\n if (text && width && height) {\n renderWidth = width;\n renderHeight = height;\n }\n else {\n renderWidth = this.activeObj.activePoint.width;\n renderHeight = this.activeObj.activePoint.height;\n }\n if (this.factor === 1) {\n this.activeObj.activePoint.startX = (this.lowerCanvas.width / 2) - renderWidth / 2;\n this.activeObj.activePoint.startY = (this.lowerCanvas.height / 2) - renderHeight / 2;\n this.activeObj.activePoint.endX = (this.lowerCanvas.width / 2) + renderWidth / 2;\n this.activeObj.activePoint.endY = (this.lowerCanvas.height / 2) + renderHeight / 2;\n }\n else {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n var visibleWidth = endPoint.x - this.pannStart.startX;\n var visibleHeight = endPoint.y - this.pannStart.startY;\n var centerX = (this.dragPoint.startX = visibleWidth / 2) + this.pannStart.startX;\n var centerY = this.dragPoint.startY = visibleHeight / 2 + this.pannStart.startY;\n this.activeObj.activePoint.startX = centerX - (renderWidth / 2);\n this.activeObj.activePoint.startY = centerY - (renderHeight / 2);\n this.activeObj.activePoint.endX = centerX + (renderWidth / 2);\n this.activeObj.activePoint.endY = centerY + (renderHeight / 2);\n }\n if (text && width && height) {\n this.textStartPoints.x = this.activeObj.activePoint.startX;\n this.textStartPoints.y = this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.drawShape = function (type, strokeWidth, strokeColor, fillColor, start, width, height) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n var ratio = this.calcRatio();\n this.redrawActObj();\n this.togglePen = false;\n this.keyHistory = '';\n this.upperCanvas.style.display = 'block';\n this.refreshActiveObj();\n this.currObjType.shape = type;\n if (this.currObjType.shape.toLowerCase() !== 'freehanddraw' && this.currObjType.shape.toLowerCase() !== '') {\n this.activeObj.shape = this.currObjType.shape.toLowerCase();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n this.activeObj.strokeSettings.strokeWidth = strokeWidth ? strokeWidth : this.activeObj.strokeSettings.strokeWidth;\n this.activeObj.strokeSettings.strokeColor = strokeColor ? strokeColor : this.activeObj.strokeSettings.strokeColor;\n this.activeObj.strokeSettings.fillColor = fillColor ? fillColor : this.activeObj.strokeSettings.fillColor;\n var tempWidth = 100 / this.factor;\n var tempHeight = 100 / this.factor;\n this.activeObj.activePoint.width = tempWidth * ratio.width;\n this.activeObj.activePoint.height = tempHeight * ratio.height;\n if (this.currObjType.shape.toLowerCase() === 'line') {\n this.activeObj.lineDraw = 'horizontal';\n this.activeObj.activePoint.height /= 2;\n }\n else if (this.currObjType.shape.toLowerCase() === 'rectangle') {\n this.activeObj.activePoint.width += this.activeObj.activePoint.width / 2;\n }\n if (this.currObjType.shape.toLowerCase() === 'ellipse' && width) {\n this.activeObj.activePoint.width = 2 * width;\n this.activeObj.activePoint.height = 2 * height;\n }\n if (width && height) {\n this.activeObj.activePoint.width = width;\n this.activeObj.activePoint.height = height;\n }\n if (start !== undefined) {\n this.activeObj.activePoint.startX = start.x;\n this.activeObj.activePoint.startY = start.y;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n }\n else {\n this.setCenterPoints();\n }\n this.currObjType.isDragging = this.currObjType.isCustomCrop = false;\n this.activeObj.shapeDegree = this.degree;\n this.activeObj.flipObjColl = [];\n this.drawObject('duplicate');\n this.refreshToolbar('shapes');\n }\n }\n };\n ImageEditor.prototype.drawShapeText = function (text, fontFamily, fontSize, bold, italic, strokeColor, x, y) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n var ratio = this.calcRatio();\n this.togglePen = false;\n this.redrawActObj();\n this.keyHistory = '';\n this.refreshActiveObj();\n var shapeChangingArgs = { action: 'insert', previousShapeSettings: this.activeObj, currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n this.currObjType.isCustomCrop = false;\n this.currObjType.isText = this.currObjType.isInitialText = true;\n this.upperCanvas.style.display = 'block';\n this.currObjType.shape = this.activeObj.shape = 'text';\n if (isNullOrUndefined(this.activeObj.textSettings)) {\n this.activeObj.textSettings = this.textSettings;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n this.activeObj.strokeSettings.strokeColor = strokeColor ? strokeColor : this.activeObj.strokeSettings.strokeColor;\n this.activeObj.textSettings.text = text ? text : this.activeObj.textSettings.text;\n this.activeObj.textSettings.fontFamily = fontFamily ? fontFamily : this.activeObj.textSettings.fontFamily;\n this.activeObj.textSettings.text = text ? text : this.activeObj.textSettings.text;\n this.activeObj.textSettings.fontFamily = fontFamily ? fontFamily : this.activeObj.textSettings.fontFamily;\n this.activeObj.textSettings.fontSize = fontSize ? fontSize : this.activeObj.textSettings.fontSize;\n this.activeObj.textSettings.bold = bold ? bold : this.activeObj.textSettings.bold;\n this.activeObj.textSettings.italic = italic ? italic : this.activeObj.textSettings.italic;\n if (isNullOrUndefined(this.activeObj.textSettings.fontSize)) {\n if (this.lowerCanvas.width > this.lowerCanvas.height) {\n this.activeObj.textSettings.fontSize = Math.floor((this.lowerCanvas.width / 20));\n }\n else {\n this.activeObj.textSettings.fontSize = Math.floor((this.lowerCanvas.height / 20));\n }\n if (this.activeObj.textSettings.fontSize < 20 * (ratio.width + ratio.height)) {\n this.activeObj.textSettings.fontSize = 20 * (ratio.width + ratio.height);\n }\n if (this.factor > 1) {\n this.activeObj.textSettings.fontSize /= this.factor;\n }\n }\n this.activeObj.shapeDegree = this.degree;\n this.activeObj.shapeFlip = this.currFlipState;\n this.activeObj.flipObjColl = [];\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.activeObj.textSettings.text).width +\n this.activeObj.textSettings.fontSize * 0.5;\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n if (!isNullOrUndefined(x) && !isNullOrUndefined(y)) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.startY = y;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + width;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + height;\n }\n else {\n this.setCenterPoints(true, width, height);\n }\n this.addLetter(this.activeObj.textSettings.text);\n this.objColl.push(this.activeObj);\n this.redrawShape(this.objColl[this.objColl.length - 1]);\n this.refreshToolbar('text');\n }\n };\n ImageEditor.prototype.drawPen = function (context) {\n var ratio = this.calcRatio();\n context = context ? context : this.upperContext;\n this.upperCanvas.style.display = 'block';\n this.canvasRatio = this.calcRatio();\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings.strokeWidth)) {\n this.activeObj.strokeSettings.strokeWidth = (ratio.width + ratio.height) * 0.4;\n }\n context.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n context.lineWidth = 2 * (this.activeObj.strokeSettings.strokeWidth) / this.factor;\n context.beginPath();\n context.moveTo(this.prevX, this.prevY);\n context.lineTo(this.currX, this.currY);\n context.stroke();\n context.closePath();\n };\n ImageEditor.prototype.getObjDetails = function (obj) {\n var shapeDetails = {};\n shapeDetails.id = obj.currIndex;\n shapeDetails.type = obj.shape;\n shapeDetails.startX = obj.activePoint.startX;\n shapeDetails.startY = obj.activePoint.startY;\n if (obj.shape === 'rectangle') {\n shapeDetails.width = obj.activePoint.width;\n shapeDetails.height = obj.activePoint.height;\n shapeDetails.strokeColor = obj.strokeSettings.strokeColor;\n shapeDetails.fillColor = obj.strokeSettings.fillColor;\n shapeDetails.strokeWidth = obj.strokeSettings.strokeWidth;\n }\n else if (obj.shape === 'ellipse') {\n shapeDetails.radius = obj.activePoint.width / 2;\n shapeDetails.strokeColor = obj.strokeSettings.strokeColor;\n shapeDetails.fillColor = obj.strokeSettings.fillColor;\n shapeDetails.strokeWidth = obj.strokeSettings.strokeWidth;\n }\n else if (obj.shape === 'line') {\n shapeDetails.length = obj.activePoint.width;\n shapeDetails.strokeColor = obj.strokeSettings.strokeColor;\n shapeDetails.strokeWidth = obj.strokeSettings.strokeWidth;\n }\n else if (obj.shape === 'text') {\n shapeDetails.text = obj.keyHistory;\n shapeDetails.fontSize = obj.textSettings.fontSize;\n shapeDetails.color = obj.strokeSettings.strokeColor;\n shapeDetails.fontStyle = [];\n if (obj.textSettings.bold) {\n shapeDetails.fontStyle.push('bold');\n }\n if (obj.textSettings.italic) {\n shapeDetails.fontStyle.push('italic');\n }\n }\n return shapeDetails;\n };\n ImageEditor.prototype.isPointsInRange = function (x, y) {\n var inRange = false;\n if (this.factor === 1) {\n if (x >= 0 && y >= 0 && x <= this.lowerCanvas.width && y <= this.lowerCanvas.width) {\n inRange = true;\n }\n }\n else {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n if (x >= this.pannStart.startX && y >= this.pannStart.startY && x <= endPoint.x && y <= endPoint.y) {\n inRange = true;\n }\n }\n return inRange;\n };\n ImageEditor.prototype.updateInMemoryContext = function (imgData, isUpdate) {\n var temp = extend({}, this.activeObj, {}, true);\n this.redrawImgWithObj();\n this.activeObj = temp;\n if (isNullOrUndefined(isUpdate)) {\n imgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = imgData.width;\n this.inMemoryCanvas.height = imgData.height;\n this.inMemoryContext.putImageData(imgData, 0, 0);\n };\n ImageEditor.prototype.clearActObj = function () {\n if (this.textBox.style.display === 'none') {\n this.refreshActiveObj();\n this.applyActObj();\n this.refreshActiveObj();\n this.currObjType.isCustomCrop = false;\n }\n };\n ImageEditor.prototype.rotateMultiple = function (length, degree) {\n for (var i = 0; i < length; i++) {\n if (degree > 0) {\n this.degree += 90;\n }\n else {\n this.degree -= 90;\n }\n if (this.degree === 360) {\n this.degree = 0;\n }\n var temp = this.lowerContext.filter;\n this.lowerContext.save();\n this.setMaximumDimension(90 * (i + 1));\n this.lowerContext.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n if (degree > 0) {\n this.lowerContext.rotate(Math.PI / 180 * 90);\n }\n else {\n this.lowerContext.rotate(Math.PI / 180 * -90);\n }\n this.lowerCanvas.style.left = this.upperCanvas.style.left = (this.element.clientWidth - parseInt(this.lowerCanvas.style.maxWidth, 10) - 18) / 2 + 1 + 'px';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = (this.element.clientHeight - this.toolbarHeight - parseInt(this.lowerCanvas.style.maxHeight, 10)) / 2 + 1 + 'px';\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, -this.lowerCanvas.height / 2, -this.lowerCanvas.width / 2);\n this.lowerContext.filter = temp;\n if (degree > 0) {\n this.lowerContext.rotate(Math.PI / 180 * -90);\n }\n else {\n this.lowerContext.rotate(Math.PI / 180 * 90);\n }\n this.lowerContext.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n this.lowerContext.restore();\n this.currImgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n this.lowerContext.filter = this.canvasFilter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n if (degree > 0) {\n this.redrawObj(90);\n }\n else {\n this.redrawObj(-90);\n }\n }\n };\n ImageEditor.prototype.setBrightness = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.brightness = value;\n value = this.getFilterValue(value);\n this.updateAdjustment('brightness', value);\n }\n };\n ImageEditor.prototype.setContrast = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.contrast = value;\n value = this.getFilterValue(value);\n value *= 100;\n this.updateAdjustment('contrast', value);\n }\n };\n ImageEditor.prototype.setHue = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.hue = value;\n value *= 3;\n this.updateAdjustment('hue', value);\n }\n };\n ImageEditor.prototype.setSaturation = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.saturation = value;\n value = this.getSaturationFilterValue(value);\n value *= 100;\n this.updateAdjustment('saturation', value);\n }\n };\n ImageEditor.prototype.setOpacity = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.opacity = value;\n if (value >= 50) {\n value /= 100;\n }\n else if (value === 40) {\n value = 0.45;\n }\n else if (value === 30) {\n value = 0.40;\n }\n else if (value === 20) {\n value = 0.35;\n }\n else if (value === 10) {\n value = 0.30;\n }\n else if (value === 0) {\n value = 0.25;\n }\n this.updateAdjustment('opacity', value);\n }\n };\n ImageEditor.prototype.setBlur = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.blur = value;\n value /= 20;\n this.updateAdjustment('blur', value);\n }\n };\n ImageEditor.prototype.setExposure = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.exposure = value;\n value = this.getFilterValue(value);\n this.updateAdjustment('exposure', value);\n }\n };\n ImageEditor.prototype.setFilter = function (type) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.updateAdjustment(type, null);\n }\n };\n ImageEditor.prototype.setBlackAndWhiteFilter = function (boolean) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.bw = boolean;\n if (boolean) {\n if (this.degree === 0 && this.currFlipState === '') {\n this.replaceBWSharpenData('bw');\n }\n else if (this.degree !== 0) {\n var tempDegree = this.degree;\n this.rotate(-tempDegree);\n this.replaceBWSharpenData('bw');\n this.rotate(tempDegree);\n this.refreshToolbar('filter');\n }\n else if (this.currFlipState !== '') {\n var tempFlipState = this.currFlipState;\n this.flip(tempFlipState);\n this.replaceBWSharpenData('bw');\n this.flip(tempFlipState);\n this.refreshToolbar('filter');\n }\n var data = this.inMemoryContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var imageData = this.getBlackAndWhiteData(data);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = imageData.width;\n this.inMemoryCanvas.height = imageData.height;\n this.inMemoryContext.putImageData(imageData, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = this.canvasFilter;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n }\n else {\n if (this.degree === 0 && this.currFlipState === '') {\n this.updateBWSharpness();\n }\n else if (this.degree !== 0) {\n var tempDegree = this.degree;\n this.rotate(-tempDegree);\n this.updateBWSharpness();\n this.rotate(tempDegree);\n this.refreshToolbar('filter');\n if (this.sharpenedImgData) {\n this.sharpenedImgData = false;\n }\n }\n else if (this.currFlipState !== '') {\n var tempFlipState = this.currFlipState;\n this.flip(tempFlipState);\n this.updateBWSharpness();\n this.flip(tempFlipState);\n this.refreshToolbar('filter');\n if (this.sharpenedImgData) {\n this.sharpenedImgData = false;\n }\n }\n }\n }\n };\n ImageEditor.prototype.setSharpness = function (boolean) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.sharpen = boolean;\n if (boolean) {\n if (this.degree === 0 && this.currFlipState === '') {\n this.replaceBWSharpenData('sharpen');\n }\n else if (this.degree !== 0) {\n var tempDegree = this.degree;\n this.rotate(-tempDegree);\n this.replaceBWSharpenData('sharpen');\n this.rotate(tempDegree);\n this.refreshToolbar('filter');\n }\n else if (this.currFlipState !== '') {\n var tempFlipState = this.currFlipState;\n this.flip(tempFlipState);\n this.replaceBWSharpenData('sharpen');\n this.flip(tempFlipState);\n this.refreshToolbar('filter');\n }\n var data = this.inMemoryContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var imageData = this.getSharpenData(data);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = imageData.width;\n this.inMemoryCanvas.height = imageData.height;\n this.inMemoryContext.putImageData(imageData, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = this.canvasFilter;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n }\n else {\n if (this.degree === 0 && this.currFlipState === '') {\n this.updateBWSharpness();\n }\n else if (this.degree !== 0) {\n var tempDegree = this.degree;\n this.rotate(-tempDegree);\n this.updateBWSharpness();\n this.rotate(tempDegree);\n this.refreshToolbar('filter');\n if (this.sharpenedImgData) {\n this.sharpenedImgData = false;\n }\n }\n else if (this.currFlipState !== '') {\n var tempFlipState = this.currFlipState;\n this.flip(tempFlipState);\n this.updateBWSharpness();\n this.flip(tempFlipState);\n this.refreshToolbar('filter');\n if (this.sharpenedImgData) {\n this.sharpenedImgData = false;\n }\n }\n }\n }\n };\n ImageEditor.prototype.replaceBWSharpenData = function (type) {\n this.tempImageData = this.inMemoryContext.getImageData(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n var imageData = this.inMemoryContext.getImageData(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n if (type === 'sharpen') {\n imageData = this.getSharpenData(this.tempImageData);\n }\n else {\n imageData = this.getBlackAndWhiteData(imageData);\n }\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = imageData.width;\n this.inMemoryCanvas.height = imageData.height;\n this.inMemoryContext.putImageData(imageData, 0, 0);\n var tempObj;\n for (var index = 0; index < this.imgDataColl.length; index++) {\n if (this.imgDataColl[index].operation !== 'freehanddraw') {\n tempObj = this.imgDataColl[index];\n break;\n }\n }\n this.imgDataColl.splice(0, 1, { operation: 'updateCanvas', value: imageData });\n this.imgDataColl.splice(1, 1, tempObj);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = this.tempImageData.width;\n this.inMemoryCanvas.height = this.tempImageData.height;\n this.inMemoryContext.putImageData(this.tempImageData, 0, 0);\n };\n ImageEditor.prototype.updateBWSharpness = function () {\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = this.tempImageData.width;\n this.inMemoryCanvas.height = this.tempImageData.height;\n this.inMemoryContext.putImageData(this.tempImageData, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = this.canvasFilter;\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.imgDataColl.shift();\n };\n ImageEditor.prototype.getSharpenData = function (imageData) {\n var data = imageData.data;\n var weights = [0, -1, 0, -1, 5, -1, 0, -1, 0];\n var side = Math.round(Math.sqrt(weights.length));\n var halfSide = Math.floor(side / 2);\n var sw = imageData.width;\n var sh = imageData.height;\n var output = this.inMemoryContext.createImageData(sw, sh);\n var dst = output.data;\n // go through the destination image pixels\n var alphaFac = 0;\n var r;\n var g;\n var b;\n var a;\n var dstOff;\n var scx;\n var scy;\n var srcOff;\n var wt;\n var x;\n var y;\n var cx;\n var cy;\n for (y = 0; y < sh; y++) {\n for (x = 0; x < sw; x++) {\n dstOff = (y * sw + x) * 4;\n r = 0;\n g = 0;\n b = 0;\n a = 0;\n for (cy = 0; cy < side; cy++) {\n for (cx = 0; cx < side; cx++) {\n scy = y + cy - halfSide;\n scx = x + cx - halfSide;\n if (scy < 0 || scy >= sh || scx < 0 || scx >= sw) {\n continue;\n }\n srcOff = (scy * sw + scx) * 4;\n wt = weights[cy * side + cx];\n r += data[srcOff] * wt;\n g += data[srcOff + 1] * wt;\n b += data[srcOff + 2] * wt;\n if (!alphaFac) {\n a += data[srcOff + 3] * wt;\n }\n }\n }\n dst[dstOff] = r;\n dst[dstOff + 1] = g;\n dst[dstOff + 2] = b;\n if (!alphaFac) {\n dst[dstOff + 3] = a;\n }\n else {\n dst[dstOff + 3] = data[dstOff + 3];\n }\n }\n }\n return output;\n };\n ImageEditor.prototype.getFilterValue = function (value) {\n var filterValue;\n if (value === 0) {\n filterValue = 1;\n }\n else {\n filterValue = 1 + ((value * 0.5) / 100);\n }\n return filterValue;\n };\n ImageEditor.prototype.setFilterValue = function (value) {\n var filterValue;\n if (value === 1) {\n filterValue = 0;\n }\n else {\n filterValue = ((value - 1) * 100) / 0.5;\n }\n return Math.round(filterValue);\n };\n ImageEditor.prototype.getSaturationFilterValue = function (value) {\n var filterValue;\n if (value === 0) {\n filterValue = 1;\n }\n else {\n filterValue = 1 + (value / 100);\n }\n return filterValue;\n };\n ImageEditor.prototype.setSaturationFilterValue = function (value) {\n var filterValue;\n if (value === 1) {\n filterValue = 0;\n }\n else {\n filterValue = (value - 1) * 100;\n }\n return Math.round(filterValue);\n };\n ImageEditor.prototype.getBlackAndWhiteData = function (imageData) {\n for (var i = 0; i < imageData.data.length; i += 4) {\n var count = imageData.data[i] + imageData.data[i + 1] + imageData.data[i + 2];\n var colour = 0;\n if (count > 383) {\n colour = 255;\n }\n imageData.data[i] = colour;\n imageData.data[i + 1] = colour;\n imageData.data[i + 2] = colour;\n imageData.data[i + 3] = 255;\n }\n return imageData;\n };\n /**\n * Clear a current selection.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.clearSelection = function () {\n if (!this.disabled && this.imgDataColl.length > 0) {\n this.togglePen = false;\n this.refreshActiveObj();\n this.dragElement = '';\n this.dragPoint.startX = this.dragPoint.startY = this.dragPoint.endX = this.dragPoint.endY = 0;\n this.currObjType.shape = '';\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.currObjType.isActiveObj = true;\n this.currObjType.isCustomCrop = false;\n this.upperCanvas.style.cursor = 'default';\n }\n };\n /**\n * Crops an image based on the selection.\n * The selection can be done through programmatically using the select method or through UI interactions.\n *\n * @returns {boolean}.\n */\n ImageEditor.prototype.crop = function () {\n var isCrop = false;\n var splitWords;\n var transitionArgs = { startPoint: { x: this.activeObj.activePoint.startX, y: this.activeObj.activePoint.startY }, endPoint: { x: this.activeObj.activePoint.endX, y: this.activeObj.activePoint.endY } };\n this.trigger('cropping', transitionArgs);\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (!this.disabled && this.activeObj.horTopLine !== undefined && (this.currObjType.isCustomCrop || splitWords[0] === 'crop')) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_2 = this;\n isCrop = true;\n var canvasFilter = this.canvasFilter;\n var tempActObj = extend({}, this.activeObj, {}, true);\n this.lowerContext.filter = this.canvasFilter = 'none';\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.activeObj = tempActObj;\n this.upperCanvas.style.display = 'none';\n var widthRatio = void 0;\n var heightRatio = void 0;\n var imgData = void 0;\n var zoomedRotate = false;\n if (this.factor === 1) {\n imgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n widthRatio = this.lowerCanvas.width / parseInt(this.lowerCanvas.style.maxWidth, 10);\n heightRatio = this.lowerCanvas.height / parseInt(this.lowerCanvas.style.maxHeight, 10);\n }\n else {\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n imgData = this.imgDataColl[0].value;\n widthRatio = this.lowerCanvas.width / parseInt(this.lowerCanvas.style.maxWidth, 10);\n heightRatio = this.lowerCanvas.height / parseInt(this.lowerCanvas.style.maxHeight, 10);\n if (this.degree !== 0 && this.flipState !== '') {\n this.degree = 0;\n }\n if (this.degree !== 0) {\n zoomedRotate = true;\n this.lowerCanvas.width = this.upperCanvas.width = this.baseImg.width;\n this.lowerCanvas.height = this.upperCanvas.height = this.baseImg.height;\n var tempObj = extend({}, this.activeObj, {}, true);\n this.factor = 1;\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n if (this.degree === 180) {\n this.updateInMemoryContext(imgData);\n }\n var maxDimension = this.calcMaxDimension(tempObj.activePoint.width, tempObj.activePoint.height);\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.width = this.upperCanvas.width = maxDimension.width * widthRatio;\n this.lowerCanvas.height = this.upperCanvas.height = maxDimension.height * heightRatio;\n if (this.degree !== 180) {\n this.updateInMemoryContext(imgData);\n }\n this.degree = 0;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, tempObj.activePoint.startX, tempObj.activePoint.startY, tempObj.activePoint.width, tempObj.activePoint.height, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n if (this.flipState !== '') {\n zoomedRotate = true;\n var tempObj = extend({}, this.activeObj, {}, true);\n this.flipState = '';\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.updateInMemoryContext(imgData);\n var maxDimension = this.calcMaxDimension(tempObj.activePoint.width, tempObj.activePoint.height);\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.width = this.upperCanvas.width = maxDimension.width * widthRatio;\n this.lowerCanvas.height = this.upperCanvas.height = maxDimension.height * heightRatio;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, tempObj.activePoint.startX, tempObj.activePoint.startY, tempObj.activePoint.width, tempObj.activePoint.height, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n }\n if (!zoomedRotate) {\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = imgData.width;\n this.inMemoryCanvas.height = imgData.height;\n this.inMemoryContext.putImageData(imgData, 0, 0);\n this.updateInMemoryContext(imgData);\n var maxDimension = this.calcMaxDimension(this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.width = this.upperCanvas.width = maxDimension.width * widthRatio;\n this.lowerCanvas.height = this.upperCanvas.height = maxDimension.height * heightRatio;\n var cssObj = window.getComputedStyle(this.lowerCanvas);\n this.lowerCanvas.style.left = this.upperCanvas.style.left =\n ((this.element.clientWidth - parseInt(cssObj.width, 10) - 18) / 2) + 1 + 'px';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = ((this.element.clientHeight - this.toolbarHeight\n - parseInt(cssObj.height, 10)) / 2) + 1 + 'px';\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, this.activeObj.activePoint.startX, this.activeObj.activePoint.startY, this.activeObj.activePoint.width, this.activeObj.activePoint.height, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n if (this.activeObj.shape === 'crop-circle') {\n var imgData_1 = this.lowerContext.getImageData(0, 0, this.baseImg.width, this.baseImg.height);\n this.inMemoryCanvas.width = imgData_1.width;\n this.inMemoryCanvas.height = imgData_1.height;\n this.inMemoryContext.putImageData(imgData_1, 0, 0);\n this.lowerContext.save();\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.baseImg.width, this.baseImg.height);\n this.lowerContext.globalCompositeOperation = 'destination-in';\n this.lowerContext.beginPath();\n this.lowerContext.arc(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2, this.lowerCanvas.width / 2, 0, Math.PI * 2);\n this.lowerContext.closePath();\n this.lowerContext.fill();\n this.lowerContext.restore();\n this.currObjType.isActiveObj = true;\n }\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n var blobUrl_1;\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.lowerCanvas.toBlob(function (blob) {\n blobUrl_1 = URL.createObjectURL(blob);\n proxy_2.baseImg.src = blobUrl_1;\n proxy_2.imgDataColl = [];\n }, 'image/png');\n this.objColl = [];\n this.refreshActiveObj();\n this.degree = 0;\n this.flipState = '';\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.globalAlpha = 0;\n this.lowerContext.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.factor = 1;\n this.canvasFilter = canvasFilter;\n }\n return isCrop;\n };\n /**\n * Flips an image by horizontally or vertically.\n *\n * @param {Direction } direction - Specifies the direction to flip the image.\n * @returns {void}.\n */\n ImageEditor.prototype.flip = function (direction) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.factor !== 1) {\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.factor = 1;\n this.refreshToolbar('main');\n }\n var transitionArgs = { direction: direction };\n this.trigger('flipping', transitionArgs);\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n var splitWords = [];\n var activeObjShape = void 0;\n if (!isNullOrUndefined(this.activeObj.activePoint)) {\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || splitWords[0] === 'crop') {\n activeObjShape = this.currObjType.isCustomCrop ? 'custom' : splitWords[1];\n }\n }\n this.redrawActObj();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n if (direction.toLowerCase() === 'horizontal') {\n this.lowerContext.translate(this.lowerContext.canvas.width, 0);\n this.lowerContext.scale(-1, 1);\n this.upperContext.translate(this.upperContext.canvas.width, 0);\n this.upperContext.scale(-1, 1);\n if (this.flipState === '' || this.flipState.toLowerCase() === 'vertical') {\n this.flipState = 'horizontal';\n }\n if (this.currFlipState.toLowerCase() === 'horizontal') {\n this.currFlipState = '';\n }\n else {\n this.currFlipState = 'horizontal';\n }\n }\n else {\n this.lowerContext.translate(0, this.lowerContext.canvas.height);\n this.lowerContext.scale(1, -1);\n this.upperContext.translate(0, this.upperContext.canvas.height);\n this.upperContext.scale(1, -1);\n if (this.flipState.toLowerCase() === '' || this.flipState.toLowerCase() === 'horizontal') {\n this.flipState = 'vertical';\n }\n if (this.currFlipState.toLowerCase() === 'vertical') {\n this.currFlipState = '';\n }\n else {\n this.currFlipState = 'vertical';\n }\n }\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n this.currImgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = this.canvasFilter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n if (this.flipState.toLowerCase() === 'horizontal') {\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n this.objColl[i].flippedText = false;\n if (this.objColl[i].shapeFlip !== '' && this.objColl[i].shapeFlip === this.currFlipState) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n else {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n }\n this.lowerContext.filter = tempFilter;\n this.lowerContext.translate(this.lowerContext.canvas.width, 0);\n this.lowerContext.scale(-1, 1);\n this.upperContext.translate(this.upperContext.canvas.width, 0);\n this.upperContext.scale(-1, 1);\n }\n else if (this.flipState.toLowerCase() === 'vertical') {\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n this.objColl[i].flippedText = false;\n if (this.objColl[i].shapeFlip !== '' && this.objColl[i].shapeFlip === this.currFlipState) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n else {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n }\n this.lowerContext.filter = tempFilter;\n this.lowerContext.translate(0, this.lowerContext.canvas.height);\n this.lowerContext.scale(1, -1);\n this.upperContext.translate(0, this.upperContext.canvas.height);\n this.upperContext.scale(1, -1);\n }\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n if (this.objColl[i].flipObjColl.length === 0) {\n this.objColl[i].flipObjColl.push(direction);\n }\n else if (this.objColl[i].flipObjColl[this.objColl[i].flipObjColl.length - 1] === direction) {\n this.objColl[i].flipObjColl.pop();\n }\n else {\n this.objColl[i].flipObjColl.push(direction);\n }\n }\n this.redrawObj(direction.toLowerCase());\n if (this.flipState === '') {\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n this.lowerContext.filter = tempFilter;\n }\n this.refreshActiveObj();\n if (!isNullOrUndefined(activeObjShape)) {\n if (activeObjShape === 'custom') {\n this.activeObj.activePoint = { startX: 0, startY: 0, endX: this.lowerCanvas.width,\n endY: this.lowerCanvas.height, width: this.lowerCanvas.width, height: this.lowerCanvas.height };\n this.updateActiveObject(this.calcRatio(), this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n }\n else {\n this.select(activeObjShape);\n }\n }\n this.refreshToolbar('main');\n }\n };\n /**\n * Return an image as ImageData.\n *\n * @returns {ImageData}.\n */\n ImageEditor.prototype.getImageData = function () {\n var data = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n return data;\n };\n /**\n * Load/opens an image for editing within an image editor.\n *\n * @param {string | ImageData } data - Specifies url of the Image or image data.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.open = function (data) {\n if (!this.disabled) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_3 = this;\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n var toolbar_11 = document.querySelector('#' + this.element.id + '_currPos');\n if (toolbar_11) {\n toolbar_11.style.display = 'none';\n }\n if (this.defToolbarItems.length === 0 &&\n (isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n this.toolbarHeight = 0;\n }\n if (isNullOrUndefined(this.toolbarTemplate)) {\n this.update();\n }\n this.degree = 0;\n this.flipState = '';\n this.factor = 1;\n this.imgDataColl = [];\n var type = typeof (data);\n if (type === 'string') {\n var fileName = data.split('.');\n if (fileName[fileName.length - 1].toLowerCase() === 'jpg' || fileName[fileName.length - 1].toLowerCase() === 'jpeg') {\n this.imageFileType = 'Jpeg';\n }\n else if (fileName[fileName.length - 1].toLowerCase() === 'png') {\n this.imageFileType = 'Png';\n }\n else if (fileName[fileName.length - 1].toLowerCase() === 'svg') {\n this.imageFileType = 'Svg';\n }\n fileName = fileName[fileName.length - 2].split('/');\n this.imageFileName = fileName[fileName.length - 1];\n this.imageOnLoad(data);\n }\n else {\n this.imageFileName = 'ImageEditor';\n this.imageFileType = 'Jpeg';\n var tempFilter = this.lowerContext.filter;\n this.lowerCanvas = document.querySelector('#' + this.element.id + '_lowerCanvas');\n this.upperCanvas = document.querySelector('#' + this.element.id + '_upperCanvas');\n this.lowerContext = this.lowerCanvas.getContext('2d');\n this.upperContext = this.upperCanvas.getContext('2d');\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = this.baseImg.width = data.width;\n this.inMemoryCanvas.height = this.baseImg.height = data.height;\n this.inMemoryContext.putImageData(data, 0, 0);\n this.imgDataColl.push({ operation: 'open', value: data });\n this.lowerCanvas.width = this.upperCanvas.width = data.width;\n this.lowerCanvas.height = this.upperCanvas.height = data.height;\n this.lowerContext.filter = tempFilter;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = temp;\n this.redrawImg(this.lowerContext.filter);\n hideSpinner(this.element);\n this.element.style.opacity = '1';\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.lowerCanvas.toBlob(function (blob) {\n showSpinner(proxy_3.element);\n proxy_3.baseImg.src = URL.createObjectURL(blob);\n }, 'image/png');\n }\n }\n };\n /**\n * Reset all the changes and revert to original image.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.reset = function () {\n if (!this.disabled) {\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.upperContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.upperContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n if (this.imgDataColl.length > 0) {\n if (this.imgDataColl[0].operation === 'freehanddraw') {\n this.imgDataColl.splice(0, 1);\n this.imgDataColl.splice(1, 1);\n }\n this.inMemoryCanvas.width = this.imgDataColl[0].value.width;\n this.inMemoryCanvas.height = this.imgDataColl[0].value.height;\n this.inMemoryContext.putImageData(this.imgDataColl[0].value, 0, 0);\n this.redrawImg(this.lowerContext.filter);\n this.lowerCanvas.width = this.baseImg.width;\n this.lowerCanvas.height = this.baseImg.height;\n }\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.baseImg.src = this.baseImgSrc.id;\n this.factor = 1;\n this.refreshToolbar('main');\n if (Browser.isDevice && document.getElementById(this.element.id + '_bottomToolbar')) {\n getComponent(document.getElementById(this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n this.objColl = [];\n this.imgDataColl = [];\n this.degree = 0;\n this.flipState = this.keyHistory = this.currFlipState = '';\n this.upperCanvas.style.display = 'none';\n this.togglePan = this.togglePen = false;\n this.upperCanvas.style.cursor = this.lowerCanvas.style.cursor = 'default';\n this.dragCanvas = this.activeObj.flippedText = false;\n this.currImgData = {};\n this.pannStart = { startX: 0, startY: 0, width: 0, height: 0 };\n this.pannEnd = { startX: 0, startY: 0, width: 0, height: 0 };\n this.lowerContext.lineWidth = this.upperContext.lineWidth = undefined;\n this.lastX = this.lastY = 0;\n this.dragStart = { x: 0, y: 0 };\n this.touchEndPoint = {};\n this.prevX = this.currX = this.prevY = this.currY = 0;\n this.tempKeyHistory = '';\n this.currentToolbar = 'main';\n this.textStartPoints = { x: 0, y: 0 };\n this.fontSizeColl = this.penDrawColl = [];\n this.textBox.value = this.textBox.textContent = '';\n this.textBox.style.display = 'none';\n this.strokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n this.textSettings =\n { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n this.tempTextSettings =\n { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n this.refreshActiveObj();\n this.timer = undefined;\n this.penStrokeWidth = undefined;\n this.isScreenOriented = false;\n this.tempObjColl = [];\n this.tempObjColl = undefined;\n this.adjustmentLevel = { brightness: 0, contrast: 0, hue: 0, opacity: 100, saturation: 0, blur: 0, exposure: 0, sharpen: false, bw: false };\n this.tempAdjustmentLevel = { brightness: 0, contrast: 0, hue: 0, opacity: 100, saturation: 0, blur: 0, exposure: 0, sharpen: false, bw: false };\n this.imageFileName = '';\n this.imageFileType = undefined;\n this.canvasFilter = this.currentFilter = this.tempAdjustmentValue = '';\n this.lowerContext.filter = this.initialAdjustmentValue = this.adjustmentValue = 'brightness(' + 1 + ') ' + 'contrast(' + 100\n + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n this.tempImageData = undefined;\n this.sharpenedImgData = this.isBrightnessAdjusted = this.isInitialLoading = false;\n this.currObjType = { shape: '', isDragging: false, isActiveObj: false, isText: false, isInitialText: false, isLine: false,\n isInitialLine: false, isCustomCrop: false, isZoomed: false, isFiltered: false, isSave: false };\n }\n };\n /**\n * Rotate an image to clockwise and anti-clockwise.\n *\n * @param {number} degree - Specifies a degree to rotate an image.\n * positive integer value for clockwise and negative integer value for anti-clockwise rotation.\n *\n * @returns {boolean}.\n */\n ImageEditor.prototype.rotate = function (degree) {\n var isRotate = false;\n if (!this.disabled && this.imgDataColl.length > 0 && (degree % 90 === 0)) {\n isRotate = true;\n var transitionArgs = { degree: degree };\n this.trigger('rotating', transitionArgs);\n var splitWords = [];\n var activeObjShape = void 0;\n if (!isNullOrUndefined(this.activeObj.activePoint)) {\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || splitWords[0] === 'crop') {\n activeObjShape = this.currObjType.isCustomCrop ? 'custom' : splitWords[1];\n }\n }\n this.redrawActObj();\n if (this.factor !== 1) {\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.factor = 1;\n this.refreshToolbar('main');\n }\n var length_1 = Math.abs(degree / 90);\n if (length_1 > 1) {\n this.rotateMultiple(length_1, degree);\n }\n else {\n this.degree += degree;\n if (this.degree === 360) {\n this.degree = 0;\n }\n var temp = this.lowerContext.filter;\n this.lowerContext.save();\n this.setMaximumDimension(this.degree);\n this.lowerContext.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n this.lowerContext.rotate(Math.PI / 180 * degree);\n this.lowerCanvas.style.left = this.upperCanvas.style.left = (this.element.clientWidth - parseInt(this.lowerCanvas.style.maxWidth, 10) - 18) / 2 + 1 + 'px';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = (this.element.clientHeight - this.toolbarHeight - parseInt(this.lowerCanvas.style.maxHeight, 10)) / 2 + 1 + 'px';\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, -this.lowerCanvas.height / 2, -this.lowerCanvas.width / 2);\n this.lowerContext.filter = temp;\n this.lowerContext.rotate(Math.PI / 180 * -degree);\n this.lowerContext.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n this.lowerContext.restore();\n this.currImgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n this.lowerContext.filter = this.canvasFilter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n this.redrawObj(degree);\n }\n if (!isNullOrUndefined(activeObjShape)) {\n if (activeObjShape === 'custom') {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height -\n this.pannEnd.startY };\n this.activeObj.activePoint = { startX: this.pannStart.startX, startY: this.pannStart.startY, endX: endPoint.x,\n endY: endPoint.y, width: endPoint.x - this.pannStart.startX, height: endPoint.y - this.pannStart.startY };\n this.updateActiveObject(this.calcRatio(), this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n }\n else {\n this.select(activeObjShape);\n }\n this.refreshToolbar('main', true, true);\n }\n this.factor = 1;\n this.refreshToolbar('main');\n }\n return isRotate;\n };\n /**\n * Export an image using the specified file name and the extension.\n *\n * @param {string} type - Specifies a format of image to be saved.\n * @param {string} fileName – Specifies a file name to be saved\n *\n * @returns {void}.\n */\n ImageEditor.prototype.export = function (type, fileName) {\n var _this = this;\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.togglePen) {\n this.currObjType.isZoomed = true;\n this.applyPenDraw();\n }\n this.applyActObj();\n this.lowerContext.filter = this.canvasFilter;\n if (this.factor !== 1) {\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.factor = 1;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.redrawImgWithObj();\n }\n type = type ? type : 'Png';\n this.redrawActObj();\n fileName = fileName ? fileName : this.imageFileName;\n var beforeSave = { cancel: false, fileName: fileName, fileType: type };\n var saved_1 = { fileName: fileName ? fileName : this.imageFileName, fileType: type };\n this.trigger('beforeSave', beforeSave, function (observableSaveArgs) {\n if (!observableSaveArgs.cancel) {\n _this.currObjType.isSave = true;\n fileName = observableSaveArgs.fileName ? observableSaveArgs.fileName : fileName;\n if (type.toLowerCase() === 'svg') {\n fileName = fileName || _this.imageFileName;\n _this.toSVGImg(fileName);\n }\n else if (type.toLowerCase() === 'jpeg') {\n fileName = fileName || _this.imageFileName;\n _this.toBlobFn(fileName, type.toLowerCase());\n }\n else {\n fileName = fileName || _this.imageFileName;\n _this.toBlobFn(fileName, type.toLowerCase());\n }\n _this.trigger('saved', saved_1);\n _this.refreshToolbar('main');\n }\n });\n }\n };\n /**\n * Perform selection in an image editor. The selection helps to crop an image.\n *\n * @param {string} type - Specifies the shape - circle / square / custom selection / pre-defined ratios.\n * @param {number} startX – Specifies the start x-coordinate point of the selection.\n * @param {number} startY – Specifies the start y-coordinate point of the selection.\n * @param {number} width - Specifies the width of the selection area.\n * @param {number} height - Specifies the height of the selection area.\n * @returns {void}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created : () => {\n * imageObj.select('16:9', 10, 10);\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.select = function (type, startX, startY, width, height) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n var ratio = this.calcRatio();\n var points = void 0;\n this.redrawActObj();\n this.refreshActiveObj();\n this.keyHistory = '';\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.upperCanvas.style.display = 'block';\n var cropShape = 'crop-' + type;\n if (cropShape.toLowerCase() === 'crop-custom') {\n if (this.currObjType.shape === '') {\n this.currObjType.isCustomCrop = true;\n this.upperContext.fillStyle = 'rgb(0, 0, 0, 0.5)';\n this.upperContext.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperCanvas.style.cursor = 'crosshair';\n if (Browser.isDevice) {\n var arcRadius = (7.5 * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor;\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height -\n this.pannEnd.startY };\n this.activeObj.activePoint = { startX: this.pannStart.startX + arcRadius, startY: this.pannStart.startY + arcRadius,\n endX: endPoint.x - arcRadius, endY: endPoint.y - arcRadius };\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.updateActiveObject(this.calcRatio(), this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n this.upperCanvas.style.cursor = 'default';\n }\n }\n if (startX && startY) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.currObjType.shape = this.activeObj.shape = cropShape.toLowerCase();\n this.activeObj.activePoint.startX = startX + ratio.width;\n this.activeObj.activePoint.startY = startY + ratio.height;\n this.activeObj.activePoint.endX = this.baseImg.width - (2 * ratio.width);\n this.activeObj.activePoint.endY = this.baseImg.height - (2 * ratio.height);\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.drawObject('duplicate');\n }\n }\n else if (cropShape.toLowerCase() === 'crop-canvas') {\n this.upperCanvas.style.display = 'none';\n this.dragCanvas = true;\n }\n else {\n this.currObjType.isCustomCrop = false;\n this.currObjType.shape = cropShape.toLowerCase();\n if (width && height) {\n points = { startX: startX, startY: startY, endX: startX + width, endY: startY + height,\n width: width, height: height };\n }\n else if (width && cropShape === 'crop-circle') {\n points = { startX: startX, startY: startY, endX: startX + width, endY: startY + width,\n width: width, height: width };\n }\n this.activeObj.shape = cropShape.toLowerCase();\n this.drawObject('duplicate', null, null, true, points);\n }\n }\n };\n /**\n * Enable or disable a freehand drawing in an Image Editor.\n *\n * @param {boolean} value - Specifies a value whether enable or disable freehand drawing.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.freeHandDraw = function (value) {\n if (value) {\n this.togglePen = true;\n this.upperCanvas.style.cursor = 'crosshair';\n this.drawPen();\n }\n else {\n this.upperCanvas.style.cursor = 'default';\n this.applyPenDraw();\n }\n this.refreshToolbar('pen');\n };\n /**\n * Enable or disable a freehand drawing in an Image Editor.\n *\n * @param {boolean} value - Specifies a value whether enable or disable freehand drawing.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.freehandDraw = function (value) {\n this.freeHandDraw(value);\n };\n /**\n * Enable or disable a panning on the Image Editor.\n *\n * @param {boolean} value - Specifies a value whether enable or disable panning.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.pan = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (value) {\n this.togglePan = true;\n this.redrawActObj();\n this.dragCanvas = true;\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n }\n else {\n this.dragCanvas = this.togglePan = false;\n this.refreshActiveObj();\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'default';\n }\n }\n };\n /**\n * Increase / Decrease the magnification of an image.\n *\n * @param {boolean} value - Specifies a value to be zoomed on the image.\n * @returns {void}.\n */\n ImageEditor.prototype.zoom = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if ((this.factor === 1 && value < 0) || (this.factor > 8 && value > 0)) {\n return;\n }\n var splitWords = [];\n var activeObjShape = void 0;\n if (!isNullOrUndefined(this.activeObj.activePoint)) {\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || splitWords[0] === 'crop') {\n activeObjShape = this.currObjType.isCustomCrop ? 'custom' : splitWords[1];\n }\n }\n this.redrawActObj();\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = this.canvasFilter;\n this.upperCanvas.style.cursor = 'default';\n if (this.degree !== 0) {\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n }\n if (value === 0.1 || value === -0.1) {\n this.lastX = this.lowerCanvas.width / 2;\n this.lastY = this.lowerCanvas.height / 2;\n }\n if (value === 1.1 || value === -1.1) {\n this.zoomImg(value);\n }\n else {\n if (value > 0) {\n this.zoomImg(3.75);\n }\n else {\n this.zoomImg(-3.75);\n }\n }\n this.refreshActiveObj();\n if (!isNullOrUndefined(activeObjShape)) {\n if (activeObjShape === 'custom') {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height -\n this.pannEnd.startY };\n this.activeObj.activePoint = { startX: this.pannStart.startX, startY: this.pannStart.startY, endX: endPoint.x,\n endY: endPoint.y, width: endPoint.x - this.pannStart.startX, height: endPoint.y - this.pannStart.startY };\n this.updateActiveObject(this.calcRatio(), this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n }\n else {\n this.select(activeObjShape);\n }\n this.refreshToolbar('main', true, true);\n }\n var zoomOut = document.querySelector('#' + this.element.id + '_zoomOut');\n if (!isNullOrUndefined(zoomOut) && this.factor === 1) {\n zoomOut.classList.add('e-disabled');\n }\n else if (!isNullOrUndefined(zoomOut)) {\n zoomOut.classList.remove('e-disabled');\n }\n if (!this.togglePan) {\n this.callMainToolbar(false, true);\n }\n this.autoEnablePan();\n if (isNullOrUndefined(this.activeObj.activePoint) || this.activeObj.activePoint.width === 0) {\n this.refreshToolbar('main');\n }\n else {\n this.refreshToolbar('main', true, true);\n }\n var panBtn = this.element.querySelector('.e-img-pan .e-btn');\n if (!isNullOrUndefined(panBtn) && this.togglePan) {\n panBtn.classList.add('e-selected-btn');\n }\n else if (!isNullOrUndefined(panBtn)) {\n panBtn.classList.remove('e-selected-btn');\n }\n }\n };\n /**\n * Draw ellipse on an image.\n *\n * @param {number} x - Specifies x-coordinate of ellipse.\n * @param {number} y - Specifies y-coordinate of ellipse.\n * @param {number} radiusX - the radius x point for the ellipse.\n * @param {number} radiusY - the radius y point for the ellipse.\n * @param {number} strokeWidth - the stroke width of ellipse.\n * @param {string} strokeColor - the stroke color of ellipse.\n * @param {string} fillColor - the fill color of the ellipse.\n * @returns {boolean}.\n *\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.drawEllipse(10, 10, 40, 60);\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.drawEllipse = function (x, y, radiusX, radiusY, strokeWidth, strokeColor, fillColor) {\n var isEllipse = false;\n var inRange = this.isPointsInRange(x, y);\n if (!this.disabled && this.imgDataColl.length > 0 && inRange) {\n isEllipse = true;\n var shapeChangingArgs = { action: 'insert', previousShapeSettings: this.activeObj, currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.currObjType.isCustomCrop = false;\n var start = { x: x, y: y };\n this.drawShape('ellipse', strokeWidth, strokeColor, fillColor, start, radiusX, radiusY);\n }\n return isEllipse;\n };\n /**\n * Draw line on an image.\n *\n * @param {number} startX – Specifies start point x-coordinate of line.\n * @param {number} startY – Specifies start point y-coordinate of line.\n * @param {number} endX - Specifies end point x-coordinates of line.\n * @param {number} endY - Specifies end point y-coordinates of the line.\n * @param {number} strokeWidth - Specifies the stroke width of line.\n * @param {string} strokeColor - Specifies the stroke color of line.\n * @returns {boolean}.\n */\n ImageEditor.prototype.drawLine = function (startX, startY, endX, endY, strokeWidth, strokeColor) {\n var isLine = false;\n var inRange = this.isPointsInRange(startX, startY);\n if (!this.disabled && this.imgDataColl.length > 0 && inRange) {\n isLine = true;\n var shapeChangingArgs = { action: 'insert', previousShapeSettings: this.activeObj, currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.currObjType.isCustomCrop = false;\n var start = { x: startX, y: startY };\n var width = endX - startX;\n var height = endY - startY;\n this.drawShape('line', strokeWidth, strokeColor, null, start, width, height);\n }\n return isLine;\n };\n /**\n * Draw a rectangle on an image.\n *\n * @param {number} x - Specifies x-coordinate of rectangle.\n * @param {number} y - Specifies y-coordinate of rectangle.\n * @param {number} width - Specifies the width of the rectangle.\n * @param {number} height - Specifies the height of the rectangle.\n * @param {number} strokeWidth - Specifies the stroke width of rectangle.\n * @param {string} strokeColor - Specifies the stroke color of rectangle.\n * @param {string} fillColor - the fill color of the rectangle.\n * @returns {boolean}.\n */\n ImageEditor.prototype.drawRectangle = function (x, y, width, height, strokeWidth, strokeColor, fillColor) {\n var isRectangle = false;\n var inRange = this.isPointsInRange(x, y);\n if (!this.disabled && this.imgDataColl.length > 0 && inRange) {\n isRectangle = true;\n var shapeChangingArgs = { action: 'insert', previousShapeSettings: this.activeObj,\n currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.currObjType.isCustomCrop = false;\n var start = { x: x, y: y };\n this.drawShape('rectangle', strokeWidth, strokeColor, fillColor, start, width, height);\n }\n return isRectangle;\n };\n /**\n * Draw a text on an image.\n *\n * @param {number} x - Specifies x-coordinate of text.\n * @param {number} y - Specifies y-coordinate of text.\n * @param {string} text - Specifies the text to add on an image.\n * @param {string} fontFamily - Specifies the font family of the text.\n * @param {number} fontSize - Specifies the font size of the text.\n * @param {boolean} bold - Specifies whether the text is bold or not.\n * @param {boolean} italic - Specifies whether the text is italic or not.\n * @param {string} color - Specifies font color of the text.\n * @returns {boolean}.\n *\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.drawText(10, 10, 'Syncfusion', 'Arial', 12, true, true, '#000');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n *\n * </script>\n * ```\n */\n ImageEditor.prototype.drawText = function (x, y, text, fontFamily, fontSize, bold, italic, color) {\n var isText = false;\n var inRange = this.isPointsInRange(x, y);\n if (!this.disabled && this.imgDataColl.length > 0 && inRange) {\n isText = true;\n this.drawShapeText(text, fontFamily, fontSize, bold, italic, color, x, y);\n }\n return isText;\n };\n /**\n * Selects a shape based on the given shape id. The id can be got from the public method ‘getShapeSettings’.\n *\n * @param {string} id - Specifies the shape id to select a shape on an image.\n * @returns {boolean}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.selectShape('shape_1');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.selectShape = function (id) {\n this.applyActObj();\n var obj;\n var isSelected;\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].currIndex === id) {\n obj = extend({}, this.objColl[i], {}, true);\n break;\n }\n }\n if (isNullOrUndefined(obj)) {\n isSelected = false;\n }\n else {\n isSelected = true;\n this.activeObj = obj;\n this.lowerContext.filter = this.canvasFilter;\n this.redrawShape(this.activeObj);\n if (this.activeObj.shape === 'text') {\n this.refreshToolbar('text');\n }\n else if (this.activeObj.shape === 'pen') {\n this.refreshToolbar('pen');\n }\n else {\n this.refreshToolbar('shapes');\n }\n this.updateToolbarItems(this.calcRatio());\n }\n return isSelected;\n };\n /**\n * Deletes a shape based on the given shape id. The id can be got from the public method getShapeSettings.\n *\n * @param {string} id - Specifies the shape id to delete the shape on an image.\n * @returns {void}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.deleteShape('shape_1');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.deleteShape = function (id) {\n this.applyActObj();\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].currIndex === id) {\n this.objColl.splice(i, 1);\n break;\n }\n }\n this.lowerContext.filter = this.canvasFilter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.refreshToolbar('main');\n };\n /**\n * Get particular shapes details based on id of the shape which is drawn on an image editor.\n *\n * @param {string} id - Specifies the shape id on an image.\n * @returns {ShapeSettings}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.getShapeSetting('shape_1');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.getShapeSetting = function (id) {\n this.applyActObj();\n var obj;\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].currIndex === id) {\n obj = extend({}, this.objColl[i], {}, true);\n break;\n }\n }\n var shapeDetails = this.getObjDetails(obj);\n return shapeDetails;\n };\n /**\n * Get all the shapes details which is drawn on an image editor.\n *\n * @returns {ShapeSettings[]}.\n */\n ImageEditor.prototype.getShapeSettings = function () {\n this.applyActObj();\n var shapeDetailsColl = [];\n for (var i = 0; i < this.objColl.length; i++) {\n var shapeDetails = this.getObjDetails(this.objColl[i]);\n shapeDetailsColl.push(shapeDetails);\n }\n return shapeDetailsColl;\n };\n /**\n * To refresh the Canvas Wrapper.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.update = function () {\n var canvasWrapper = document.querySelector('#' + this.element.id + '_canvasWrapper');\n canvasWrapper.style.width = this.element.offsetWidth + 'px';\n this.lowerCanvas.width = this.upperCanvas.width = this.element.offsetWidth;\n if (Browser.isDevice) {\n canvasWrapper.style.height = this.element.offsetHeight - (2 * this.toolbarHeight) - 3 + 'px';\n this.lowerCanvas.height = this.upperCanvas.height = this.element.offsetHeight - (2 * this.toolbarHeight) - 3;\n }\n else {\n canvasWrapper.style.height = this.element.offsetHeight - this.toolbarHeight - 1 + 'px';\n this.lowerCanvas.height = this.upperCanvas.height = this.element.offsetHeight - this.toolbarHeight - 1;\n }\n this.lowerContext.filter = this.canvasFilter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n };\n /**\n * To apply the filters to an image\n *\n * @param {ImageFilterOptions } filterOption - Specifies the filter options to the image.\n * @returns {void}.\n */\n ImageEditor.prototype.applyImageFilter = function (filterOption) {\n if (this.initialAdjustmentValue === '') {\n this.initialAdjustmentValue = 'brightness(1) contrast(100%) hue-rotate(0deg) saturate(100%) opacity(1) blur(0px) sepia(0%) grayscale(0%) invert(0%)';\n }\n this.lowerContext.filter = this.initialAdjustmentValue;\n var filterValue = filterOption.split(' ');\n this.setFilter(filterValue.join('').toLowerCase());\n };\n /**\n * To apply the filters to an image\n *\n * @param {ImageFinetuneOptions } finetuneOption - Specifies the finetune options to the image.\n * @param {number } value - Specifies the value for finetuning the image.\n * @returns {void}.\n *\n */\n ImageEditor.prototype.finetuneImage = function (finetuneOption, value) {\n if (this.initialAdjustmentValue === '') {\n this.initialAdjustmentValue = 'brightness(1) contrast(100%) hue-rotate(0deg) saturate(100%) opacity(1) blur(0px) sepia(0%) grayscale(0%) invert(0%)';\n }\n this.lowerContext.filter = this.initialAdjustmentValue;\n switch (finetuneOption) {\n case 'Brightness':\n this.setBrightness(value);\n break;\n case 'Contrast':\n this.setContrast(value);\n break;\n case 'Hue':\n this.setHue(value);\n break;\n case 'Saturation':\n this.setSaturation(value);\n break;\n case 'Opacity':\n this.setOpacity(value);\n break;\n case 'Blur':\n this.setBlur(value);\n break;\n case 'Exposure':\n this.setExposure(value);\n break;\n }\n };\n /**\n * To check whether the undo collection is empty or not.\n *\n * @returns {boolean}.\n * @private\n */\n ImageEditor.prototype.canUndo = function () {\n return false;\n };\n /**\n * To check whether the redo collection is empty or not.\n *\n * @returns {boolean}.\n * @private\n */\n ImageEditor.prototype.canRedo = function () {\n return false;\n };\n /**\n * Erases all the signature strokes signed by user.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.clear = function () {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.clear.call(this);\n }\n };\n /**\n * To draw the signature based on the given text, with the font family and font size.\n *\n * @param {string} text - specify text to be drawn as signature.\n * @param {string} fontFamily - specify font family of a signature.\n * @param {number} fontSize - specify font size of a signature.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.draw = function (text, fontFamily, fontSize) {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.draw.call(this, text, fontFamily, fontSize);\n }\n };\n /**\n * To get the signature as Blob.\n *\n * @param {string} url - specify the url/base 64 string to get blob of the signature.\n * @returns {Blob}.\n * @private\n */\n ImageEditor.prototype.getBlob = function (url) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n return url;\n };\n /**\n * To check whether the signature is empty or not.\n *\n * @returns {boolean}.\n * @private\n */\n ImageEditor.prototype.isEmpty = function () {\n return false;\n };\n /**\n * To load the signature with the given base 64 string, height and width.\n *\n * @param {string} signature - specify the url/base 64 string to be drawn as signature.\n * @param {number} width - specify the width of the loaded signature image.\n * @param {number} height - specify the height of the loaded signature image.\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.load = function (signature, width, height) {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.load.call(this, signature, width, height);\n }\n };\n /**\n * Undo the last user action.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.undo = function () {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.undo.call(this);\n }\n };\n /**\n * Redo the last user action.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.redo = function () {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.redo.call(this);\n }\n };\n /**\n * To save the signature with the given file type and file name.\n *\n * @param {FileType} type - specify type of the file to be saved a signature.\n * @param {string} fileName - specify name of the file to be saved a signature.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.save = function (type, fileName) {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.save.call(this, type, fileName);\n }\n };\n /**\n * To save the signature as Blob.\n *\n * @returns {Blob}.\n * @private\n */\n ImageEditor.prototype.saveAsBlob = function () {\n return null;\n };\n /**\n * Returns the persistence data for component.\n *\n * @returns {any}.\n * @private\n */\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.getLocalData = function () {\n return null;\n };\n var ImageEditor_1;\n __decorate([\n Property('')\n ], ImageEditor.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"disabled\", void 0);\n __decorate([\n Property('100%')\n ], ImageEditor.prototype, \"height\", void 0);\n __decorate([\n Property('Bootstrap5')\n ], ImageEditor.prototype, \"theme\", void 0);\n __decorate([\n Property()\n ], ImageEditor.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], ImageEditor.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property('100%')\n ], ImageEditor.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], ImageEditor.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property('')\n ], ImageEditor.prototype, \"backgroundImage\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"isReadOnly\", void 0);\n __decorate([\n Property(true)\n ], ImageEditor.prototype, \"saveWithBackground\", void 0);\n __decorate([\n Property('#000000')\n ], ImageEditor.prototype, \"strokeColor\", void 0);\n __decorate([\n Property(0.5)\n ], ImageEditor.prototype, \"minStrokeWidth\", void 0);\n __decorate([\n Property(2)\n ], ImageEditor.prototype, \"maxStrokeWidth\", void 0);\n __decorate([\n Property(0.7)\n ], ImageEditor.prototype, \"velocity\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"enablePersistence\", void 0);\n __decorate([\n Complex({}, FinetuneSettings)\n ], ImageEditor.prototype, \"finetuneSettings\", void 0);\n __decorate([\n Property('')\n ], ImageEditor.prototype, \"signatureValue\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"beforeSave\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"zooming\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"panning\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"cropping\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"rotating\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"flipping\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"shapeChanging\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"fileOpened\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"saved\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"toolbarCreated\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"toolbarUpdating\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"toolbarItemClicked\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"imageFiltering\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"fineTuneValueChanging\", void 0);\n ImageEditor = ImageEditor_1 = __decorate([\n NotifyPropertyChanges\n ], ImageEditor);\n return ImageEditor;\n}(SignatureBase));\nexport { ImageEditor };\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","FinetuneSettings","_super","apply","Property","ChildProperty","ImageEditor","options","element","_this","call","degree","dragCanvas","dragElement","keyHistory","flipState","mouseDownPoint","x","y","previousPoint","dragPoint","startX","startY","endX","endY","diffPoint","oldPoint","objColl","undoRedoColl","imgDataColl","strokeSettings","strokeColor","fillColor","strokeWidth","textSettings","text","fontFamily","fontSize","bold","italic","underline","tempStrokeSettings","tempTextSettings","toolbarHeight","pannStart","pannEnd","togglePan","disablePan","lastX","lastY","dragStart","factor","currFlipState","touchEndPoint","prevX","currX","prevY","currY","togglePen","currentToolbar","textStartPoints","fontSizeColl","tempKeyHistory","penDrawColl","allowDrag","textRow","activeObj","activePoint","width","height","flipObjColl","currObjType","shape","isDragging","isActiveObj","isText","isInitialText","isLine","isInitialLine","isCustomCrop","isZoomed","isFiltered","isSave","defToolbarItems","baseImgSrc","isTimer","isScreenOriented","isFirstMove","startTouches","tempTouches","adjustmentLevel","brightness","contrast","hue","opacity","saturation","blur","exposure","sharpen","bw","tempAdjustmentLevel","adjustmentValue","initialAdjustmentValue","tempAdjustmentValue","currentFilter","tempFilter","canvasFilter","sharpenedImgData","tempSharpenFilter","tempBWFilter","isBrightnessAdjusted","isInitialLoading","imageFileName","ImageEditor_1","preRender","id","getUniqueID","Browser","isDevice","classList","add","themeColl","Bootstrap5","primaryColor","secondaryColor","Bootstrap5Dark","Tailwind","TailwindDark","Fluent","FluentDark","Bootstrap4","Bootstrap","BootstrapDark","Material","MaterialDark","Fabric","FabricDark","Highcontrast","defaultLocale","Crop","ZoomIn","ZoomOut","Undo","Redo","Transform","Annotation","Finetune","Brightness","Contrast","Hue","Saturation","Opacity","Blur","Sharpen","Exposure","Filter","Default","Chrome","Cold","Warm","Grayscale","BlackAndWhite","Sepia","Invert","Text","Pen","Reset","Save","Select","RotateLeft","RotateRight","HorizontalFlip","VerticalFlip","OK","Cancel","FillColor","StrokeColor","StrokeWidth","FontFamily","FontStyle","FontSize","FontColor","Pan","Move","Load","Custom","Square","Circle","Ellipse","Rectangle","Line","Bold","Italic","BoldItalic","XSmall","Small","Medium","Large","XLarge","ABC","Browse","l10n","L10n","locale","render","initialize","getModuleName","getPersistData","addOnPersist","onPropertyChanged","newProperties","oldProperties","_i","_a","keys","cssClass","removeClass","split","addClass","disabled","unwireEvent","remove","wireEvent","style","theme","updateTheme","upperContext","strokeStyle","fillStyle","finetuneSettings","updateFinetunes","destroy","removeAttribute","concat","getAttribute","destroySubComponents","innerHTML","trigger","createToolbar","createContextualToolbar","createCanvas","updateContext","lowerContext","filter","createSpinner","defaultValue","EventHandler","document","keyDownEventHandler","keyUpEventHandler","upperCanvas","mouseDownEventHandler","mouseMoveEventHandler","mouseUpEventHandler","lowerCanvas","canvasMouseDownHandler","canvasMouseMoveHandler","canvasMouseUpHandler","touchStartHandler","findTextPoint","textBox","window","addEventListener","windowResizeHandler","bind","isIos","info","name","screen","orientation","screenOrientation","initializeFilter","setBrightness","setContrast","setHue","setSaturation","setExposure","setOpacity","setBlur","inputElement","querySelectorAll","btnElement","len","contains","getComponent","detach","select","toPascalCase","str","strArr","toLowerCase","charAt","toUpperCase","slice","join","canvasWrapper","appendChild","createElement","className","attrs","offsetHeight","inMemoryCanvas","setAttribute","offsetWidth","position","backgroundColor","display","resize","getContext","baseImg","crossorigin","cursor","inMemoryContext","isNullOrUndefined","toolbar","toolbarTemplate","toolbarTemplateFn","toolbarItems","align","type","template","Uploader","push","toolbarArea","getElementById","toolbar_1","uploadItems","selected","initToolbarItem","createBottomToolbar","Toolbar","items","created","toolbarType","clicked","defToolbarClicked","createLeftToolbarControls","clientHeight","toolbar_2","updateContextualToolbar","cType","querySelector","contextualToolbarArea","left","offsetLeft","refreshSlider","initFilterToolbarItem","renderSlider","cHt","ht","top","toolbarElem","initBottomToolbar","getMainToolbarItem","renderAnnotationBtn","renderCropBtn","renderTransformBtn","refreshOverflow","templateID","toolbarFn","templateParser","isReact","isAngular","templateColl","nodeType","renderReactTemplates","templateCompiler","trim","compile","error","getLeftToolbarItem","isOkBtn","visible","tooltipText","indexOf","prefixIcon","getConstant","tempToolbarItems","processToolbar","getRightToolbarItem","isApplyOption","getZoomToolbarItem","processSubToolbar","isToolbar","leftItem","rightItem","mainItem","zoomItem","renderSaveBtn","zoomIn","zoomOut","pan","undefined","uploadDiv","uploadElem","getElementsByTagName","uploadBtnElem","onchange","fileSelect","proxy","iconCss","drpDownBtn","DropDownButton","open","args","cancelPan","parentElement","getBoundingClientRect","splitWords","isCropSelection","refreshActiveObj","clearRect","refreshToolbar","item","freeHandDraw","drawShapeText","drawShape","updateToolbarItems","calcRatio","appendTo","cropSelect","transformSelect","imageEditorObj","getInstance","saveItems","export","rotate","flip","getShapesToolbarItem","initShapesToolbarItem","createShapeColor","createShapeBtn","ColorPicker","modeSwitcher","noColor","value","showButtons","mode","change","pushActItemIntoObj","extend","pop","currentValue","hex","operation","currentObj","previousObj","redrawShape","rgba","fillDDB_1","children","toggle","inline","strokeDDB_1","background","strokeWidthItems","ratio","strokeWidthBtn","spanElem_1","drpDownBtn_1","activeBtn","textContent","parseInt","getTextToolbarItem","getFontFamilyItems","getFontSizeItems","initTextToolbarItem","createTextColor","createTextBtn","fontColor","color","temp","strokeDDB_2","setTextBoxStylesToActObj","fontNameBtn","spanElem_2","fontFamilyBtn_1","createPopupOnClick","beforeItemRender","redrawText","updateFontStyles","fontStyleBtnElem","span1Elem_1","fontStyleBtn_1","fontStyle","fontWeight","replace","applyFontStyle","fontSizeBtnElem","fontSizeSpanElem_1","fontSizes","getFontSizes","fontSizeBtn_1","textStyle","font","rows","getMaxText","measureText","parseFloat","setTextSelection","updateActiveObject","Math","round","toString","getTextAreaWidth","tempBold","tempItalic","updateObjColl","initZoomToolbarItem","contextualToolbarClicked","selEle","imageFiltering","setFilter","zoom","transform","redrawImgWithObj","setSharpness","setBlackAndWhiteFilter","j","cancelItems","okBtn","reset","unselectBtn","drawImage","selElem","crop","redrawActObj","applyActObj","callMainToolbar","sliderWrapper","slider","hdrWrapper","ej2_instances","updateAdjustment","isPreview","opacityValue","brightnessValue","values","getFilterValue","temp_1","saturate","bright","saturatePercentage","saturatePercent","getSaturationFilterValue","getDefaultFilter","setTempFilterValue","tempFilter_1","updateBrightnessFilter","autoEnablePan","tempSplitWords","setAdjustment","valueArr","setFilterValue","setSaturationFilterValue","labelWrapper","styles","min","max","getCurrAdjustmentValue","Slider","tooltip","isVisible","placement","showOn","step","setCurrAdjustmentValue","fineTuneValueChanging","finetune","isApplyBtn","isZooming","imageEditorPointsColl","topLeftCircle","clearSelection","gradient","a","applyPenDraw","tempCanvas","tempContext","lineWidth","nexP","preP","beginPath","moveTo","points","m","dx1","dx2","dy1","dy2","curP","bezierCurveTo","shift","stroke","imgData","getImageData","tempObj","index","splice","putImageData","isCropping","initPenToolbarItem","initAdjustmentToolbarItem","getAdjustmentToolbarItem","getFilterToolbarItem","getPenToolbarItem","createPenColor","createPenBtn","penColor","strokeDDB_3","spanElem_3","penStrokeWidth","getPenStroke","drpDownBtn_2","setPenStroke","createCanvasFilter","tempImageData","noFilter","ctx","chrome","cold","warm","grayscale","sepia","invert","updateCanvas","fileOpened","fileName","fileType","imageFileType","wrapperWidth","clientWidth","maxDimension","calcMaxDimension","maxWidth","maxHeight","updateInMemoryCanvas","imageOnLoad","src","onload","toBlob","blob","showSpinner","URL","createObjectURL","hideSpinner","shapeDegree","filesData","files","url","e","transformOrigin","scale","findTextTarget","getStrokeWidth","selFillElem","selStrokeElem","selTextStrokeElem","selPenStrokeElem","strokeWidthElem","fontFamilyElem","fontSizeElem","fontStyleElem","setTimer","timer","targetTouches","touches","pageX","pageY","calculateScale","endTouches","startDistance","getDistance","sqrt","preventDefault","setTimeout","currentTarget","clientX","clientY","canvasRatio","minStrokeWidth","maxStrokeWidth","velocity","mouseDownHandler","findTarget","setActivePoint","offsetTop","firstFingerX","firstFingerY","secondFingerX","secondFingerY","setCursor","initialDraw","updateActivePoint","drawObject","bbox","setPanPoints","tempObjColl","applyCurrActObj","shapeChangingArgs","beforeSave","cancel","ctrlKey","observableSaveArgs","stopImmediatePropagation","action","previousShapeSettings","currentShapeSettings","textKeyDown","offsetX","offsetY","transformedPoint","drawPanImg","String","fromCharCode","which","scrollHeight","setTextBoxWidth","adjustToScreen","redrawImg","pt","transitionArgs","startPoint","endPoint","xDiff","yDiff","xxDiff","yyDiff","translate","pt1","pt2","redraw","xform","DOMMatrix","getTransform","savedTransforms","save","restore","sx","sy","scaleNonUniform","radians","PI","dx","dy","f","m2","multiply","setTransform","DOMPoint","matrixTransform","inverse","m11","m12","m13","m14","m21","m22","m23","m24","zoomImg","clicks","zoomPoint","zoomLevel","pow","handleScroll","delta","wheelDelta","detail","p1","p2","isInside","actObj","setCursorForZoomState","floor","ceil","horTopLine","updateTextFromTextArea","widthColl","setTextBoxPos","point","setTextBoxPoints","shapeFlip","JSON","stringify","radius","border","overflow","setTextBoxHeight","textBoxTop","textBoxWidth","letterWidth","textWidth","textHeight","abs","selectInfo","shapeResizingArgs","shapeMovingArgs","updateNWPoints","updateNPoints","updateNEPoints","updateWPoints","updateEPoints","updateSWPoints","updateSPoints","updateSEPoints","percentage","prevDiffX","prevDiffY","maxText","newScale","getScaleRatio","isTextBox","maxi","maxStr","setDragLimit","lineDraw","shapeCircle","canvasDraw","selectionWidth","selectionHeight","fillRect","tempWidth","ellipse","closePath","arc","clip","drawOuterSelection","isInitialDraw","isCropCircle","getZoomShape","rect","topRightCircle","bottomLeftCircle","bottomRightCircle","fill","drawCenterCircles","obj","canvas","isCropRatio","drawCropRatio","isCrop","drawShapeObj","actPoint","isMouseMove","horCircleWidth","verCircleHeight","horBottomLine","verLeftLine","verRightLine","topCenterCircle","centerLeftCircle","centerRightCircle","bottomCenterCircle","currentShape","horLineWidth","verLineHeight","drawSquareLines","shapeLine","shapeText","drawSelection","tempLineWidth","lineTo","lineHeight","yPoint","updateActPoint","rotateText","fillText","k","horTopInnerLine","horBottomInnerLine","verLeftInnerLine","verRightInnerLine","findTargetObj","updateCursorStyles","diffX","data","currImgData","getSharpenData","getBlackAndWhiteData","flippedText","isResize","setDragDirection","calcShapeRatio","arcRadius","visibleWidth","visibleHeight","centerX","centerY","originalWidth","originalHeight","presetRatio","standardSize","scaleWidth","getScale","snippetArray","scaleHeight","snippetArray1","originalValue","widthRatio","heightRatio","canvasMaxWidth","canvasMaxHeight","widthScale","heightScale","cssMaxWidth","cssMaxHeight","setMaximumDimension","newWidth","newHeight","setCursorFromObj","downloadImg","href","download","body","documentElement","click","parentNode","removeChild","toSVGImg","dataUrl","toDataURL","svg","createElementNS","img","setAttributeNS","svgDataUrl","btoa","toBlobFn","blobUrl","addLetter","letter","calcPrevRatio","oldWidthRatio","oldHeightRatio","textFlipDegree","redrawSelection","redrawObj","updateCurrentActiveObjPoint","currActObjIndex","oldRatio","currIndex","calcCurrPoints","isActObj","splitWords_2","proxy_1","setCenterPoints","renderWidth","renderHeight","start","tempHeight","drawPen","context","getObjDetails","shapeDetails","isPointsInRange","inRange","updateInMemoryContext","isUpdate","clearActObj","rotateMultiple","boolean","replaceBWSharpenData","tempDegree","tempFlipState","imageData","updateBWSharpness","g","dstOff","scx","scy","srcOff","wt","cx","cy","weights","side","halfSide","sw","sh","output","createImageData","dst","filterValue","colour","proxy_2","tempActObj","zoomedRotate","cssObj","getComputedStyle","imgData_1","globalCompositeOperation","blobUrl_1","globalAlpha","direction","activeObjShape","proxy_3","toolbar_11","update","isRotate","length_1","saved_1","cropShape","freehandDraw","panBtn","drawEllipse","radiusX","radiusY","isEllipse","drawLine","drawRectangle","isRectangle","drawText","selectShape","isSelected","deleteShape","getShapeSetting","getShapeSettings","shapeDetailsColl","applyImageFilter","filterOption","finetuneImage","finetuneOption","canUndo","canRedo","clear","draw","getBlob","isEmpty","load","signature","undo","redo","saveAsBlob","getLocalData","Complex","Event","NotifyPropertyChanges","SignatureBase"],"mappings":"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"}