{"version":3,"sources":["webpack:///./src/componentes/Avatar.vue?8d73","webpack:///./src/componentes/vue-avatar-cropper.vue?bfd2","webpack:///src/componentes/vue-avatar-cropper.vue","webpack:///./src/componentes/vue-avatar-cropper.vue?477f","webpack:///./src/componentes/vue-avatar-cropper.vue","webpack:///src/componentes/Avatar.vue","webpack:///./src/componentes/Avatar.vue?6122","webpack:///./src/componentes/Avatar.vue","webpack:///./src/componentes/Avatar.vue?7518","webpack:///./node_modules/cropperjs/dist/cropper.js","webpack:///./src/componentes/vue-avatar-cropper.vue?5223"],"names":["render","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","avatarEmpleadoL","avatar","_m","_v","_s","nickname","username","domProps","message","ref","cropperHandler","on","handleUploading","handleUploaded","handleCompleted","handlerError","staticRenderFns","class","inline","_e","labels","cancel","dataUrl","$event","stopPropagation","createCropper","preventDefault","submit","mimes","name","props","trigger","type","String","Element","required","uploadHandler","Function","uploadUrl","requestMethod","default","uploadHeaders","Object","uploadFormName","uploadFormData","cropperOptions","aspectRatio","autoCropArea","viewMode","movable","zoomable","outputOptions","outputMime","outputQuality","Number","withCredentials","Boolean","data","cropper","undefined","filename","methods","destroy","$refs","input","value","$emit","uploadImage","pickImage","click","e","getCroppedCanvas","toBlob","mounted","addEventListener","fileInput","files","correctType","reader","onload","readAsDataURL","component","components","avatarEmpleado","id","image","toDataURL","cropperOutputMime","console","log","form","response","status","user","url","global","factory","module","exports","_typeof","obj","Symbol","iterator","constructor","prototype","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","i","length","descriptor","enumerable","configurable","writable","defineProperty","key","_createClass","protoProps","staticProps","_defineProperty","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","push","apply","_objectSpread2","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","Array","isArray","_arrayLikeToArray","iter","from","o","minLen","n","toString","call","slice","test","len","arr2","IS_BROWSER","window","document","WINDOW","IS_TOUCH_DEVICE","documentElement","HAS_POINTER_EVENT","NAMESPACE","ACTION_ALL","ACTION_CROP","ACTION_MOVE","ACTION_ZOOM","ACTION_EAST","ACTION_WEST","ACTION_SOUTH","ACTION_NORTH","ACTION_NORTH_EAST","ACTION_NORTH_WEST","ACTION_SOUTH_EAST","ACTION_SOUTH_WEST","CLASS_CROP","concat","CLASS_DISABLED","CLASS_HIDDEN","CLASS_HIDE","CLASS_INVISIBLE","CLASS_MODAL","CLASS_MOVE","DATA_ACTION","DATA_PREVIEW","DRAG_MODE_CROP","DRAG_MODE_MOVE","DRAG_MODE_NONE","EVENT_CROP","EVENT_CROP_END","EVENT_CROP_MOVE","EVENT_CROP_START","EVENT_DBLCLICK","EVENT_TOUCH_START","EVENT_TOUCH_MOVE","EVENT_TOUCH_END","EVENT_POINTER_DOWN","EVENT_POINTER_MOVE","EVENT_POINTER_UP","EVENT_READY","EVENT_RESIZE","EVENT_WHEEL","EVENT_ZOOM","MIME_TYPE_JPEG","REGEXP_ACTIONS","REGEXP_DATA_URL","REGEXP_DATA_URL_JPEG","REGEXP_TAG_NAME","MIN_CONTAINER_WIDTH","MIN_CONTAINER_HEIGHT","DEFAULTS","dragMode","initialAspectRatio","NaN","preview","responsive","restore","checkCrossOrigin","checkOrientation","modal","guides","center","highlight","background","autoCrop","rotatable","scalable","zoomOnTouch","zoomOnWheel","wheelZoomRatio","cropBoxMovable","cropBoxResizable","toggleDragModeOnDblclick","minCanvasWidth","minCanvasHeight","minCropBoxWidth","minCropBoxHeight","minContainerWidth","minContainerHeight","ready","cropstart","cropmove","cropend","crop","zoom","TEMPLATE","isNaN","isNumber","isPositiveNumber","Infinity","isUndefined","isObject","hasOwnProperty","isPlainObject","_constructor","error","isFunction","toArray","callback","assign","_len","args","_key","arg","REGEXP_DECIMALS","normalizeDecimalNumber","times","Math","round","REGEXP_SUFFIX","setStyle","element","styles","style","property","hasClass","classList","contains","className","indexOf","addClass","elem","add","trim","removeClass","remove","replace","toggleClass","added","REGEXP_CAMEL_CASE","toParamCase","toLowerCase","getData","dataset","getAttribute","setData","setAttribute","removeData","removeAttribute","REGEXP_SPACES","onceSupported","supported","once","listener","options","get","set","removeEventListener","removeListener","handler","split","event","listeners","addListener","_handler","_element$listeners","_len2","_key2","dispatchEvent","Event","CustomEvent","detail","bubbles","cancelable","createEvent","initCustomEvent","getOffset","box","getBoundingClientRect","left","pageXOffset","clientLeft","top","pageYOffset","clientTop","location","REGEXP_ORIGINS","isCrossOriginURL","parts","match","protocol","hostname","port","addTimestamp","timestamp","Date","getTime","getTransforms","_ref","rotate","scaleX","scaleY","translateX","translateY","values","transform","join","WebkitTransform","msTransform","getMaxZoomRatio","pointers","pointers2","maxRatio","pointer","pointerId","pointer2","x1","abs","startX","y1","startY","x2","endX","y2","endY","z1","sqrt","z2","ratio","getPointer","_ref2","endOnly","pageX","pageY","end","getPointersCenter","count","_ref3","getAdjustedSizes","_ref4","height","width","isValidWidth","isValidHeight","adjustedWidth","getRotatedSizes","_ref5","degree","arc","PI","sinArc","sin","cosArc","cos","newWidth","newHeight","getSourceCanvas","_ref6","_ref7","_ref8","imageAspectRatio","imageNaturalWidth","naturalWidth","imageNaturalHeight","naturalHeight","_ref6$rotate","_ref6$scaleX","_ref6$scaleY","_ref8$fillColor","fillColor","_ref8$imageSmoothingE","imageSmoothingEnabled","_ref8$imageSmoothingQ","imageSmoothingQuality","_ref8$maxWidth","maxWidth","_ref8$maxHeight","maxHeight","_ref8$minWidth","minWidth","_ref8$minHeight","minHeight","canvas","createElement","context","getContext","maxSizes","minSizes","min","max","destMaxSizes","destMinSizes","destWidth","destHeight","params","fillStyle","fillRect","save","translate","scale","drawImage","map","param","floor","fromCharCode","getStringFromCharCode","dataView","start","str","getUint8","REGEXP_DATA_URL_HEAD","dataURLToArrayBuffer","dataURL","base64","binary","atob","arrayBuffer","ArrayBuffer","uint8","Uint8Array","charCodeAt","arrayBufferToDataURL","mimeType","chunks","chunkSize","subarray","btoa","resetAndGetOrientation","orientation","DataView","littleEndian","app1Start","ifdStart","byteLength","offset","exifIDCode","tiffOffset","endianness","getUint16","firstIFDOffset","getUint32","_offset","_length","setUint16","parseOrientation","initContainer","initCanvas","initCropBox","renderCanvas","cropped","renderCropBox","container","containerData","offsetWidth","offsetHeight","imageData","rotated","canvasWidth","canvasHeight","canvasData","limited","limitCanvas","oldLeft","oldTop","initialCanvasData","sizeLimited","positionLimited","cropBoxData","_getAdjustedSizes","newCanvasLeft","newCanvasTop","minLeft","minTop","maxLeft","maxTop","changed","transformed","_getRotatedSizes","renderImage","limitCropBox","output","initialCropBoxData","maxCropBoxWidth","maxCropBoxHeight","face","cropBox","disabled","initPreview","crossOrigin","crossOriginUrl","alt","src","viewBox","appendChild","viewBoxImage","previews","ownerDocument","querySelectorAll","querySelector","el","img","html","innerHTML","cssText","resetPreview","cropBoxWidth","cropBoxHeight","originalWidth","originalHeight","getElementsByTagName","events","bind","onCropStart","cropStart","onWheel","wheel","passive","capture","onDblclick","dblclick","onCropMove","cropMove","onCropEnd","cropEnd","onResize","resize","unbind","handlers","getCanvasData","getCropBoxData","setCanvasData","setCropBoxData","setDragMode","dragBox","_this","delta","wheeling","setTimeout","deltaY","wheelDelta","buttons","button","pointerType","ctrlKey","action","changedTouches","touch","identifier","originalEvent","cropping","change","right","bottom","renderable","shiftKey","range","x","y","check","side","move","p","reset","initialImageData","clear","hasSameSize","isImg","replaced","uncreate","load","enable","disable","originalUrl","offsetX","offsetY","_this$canvasData","moveTo","_originalEvent","zoomTo","pivot","oldRatio","rotateTo","_scaleX","_scaleY","rounded","getContainerData","getImageData","sized","widthChanged","heightChanged","HTMLCanvasElement","_this$getData","initialX","initialY","initialWidth","initialHeight","_options$imageSmoothi","srcWidth","srcHeight","dstX","dstY","dstWidth","dstHeight","sourceWidth","sourceHeight","srcX","srcY","setAspectRatio","mode","croppable","AnotherCropper","Cropper","tagName","Error","reloading","sizing","init","read","clone","xhr","XMLHttpRequest","onabort","onerror","ontimeout","onprogress","getResponseHeader","abort","onloadend","open","responseType","send","_parseOrientation","stop","parentNode","insertBefore","nextSibling","_this2","isIOSWebKit","navigator","userAgent","done","build","sizingImage","body","removeChild","template","getElementsByClassName","unbuild"],"mappings":"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","file":"js/chunk-41608e2e.8d1c1e07.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"card vue-avatar-cropper-demo text-center\"},[_c('div',{staticClass:\"card-body\"},[_c('img',{staticClass:\"card-img avatar\",attrs:{\"src\":_vm.avatarEmpleadoL.avatar}}),_vm._m(0),_c('h5',{staticClass:\"card-title mb-0\"},[_vm._v(_vm._s(_vm.avatarEmpleadoL.nickname))]),_c('div',{staticClass:\"text-muted\"},[_vm._v(_vm._s(_vm.avatarEmpleadoL.username))])]),_c('div',{staticClass:\"card-footer text-muted\",domProps:{\"innerHTML\":_vm._s(_vm.message)}}),_c('avatar-cropper',{ref:\"avatarCropper\",attrs:{\"upload-handler\":_vm.cropperHandler,\"trigger\":\"#pick-avatar\"},on:{\"uploading\":_vm.handleUploading,\"uploaded\":_vm.handleUploaded,\"completed\":_vm.handleCompleted,\"error\":_vm.handlerError}})],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"card-img-overlay\"},[_c('button',{staticClass:\"btn btn-primary btn-sm\",attrs:{\"id\":\"pick-avatar\"}},[_vm._v(\" Selecciona una foto \")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"avatar-cropper\"},[(_vm.dataUrl)?_c('div',{staticClass:\"avatar-cropper-overlay\",class:{'avatar-cropper-overlay-inline': _vm.inline}},[(!_vm.inline)?_c('div',{staticClass:\"avatar-cropper-mark\"},[_c('a',{staticClass:\"avatar-cropper-close\",attrs:{\"title\":_vm.labels.cancel,\"href\":\"javascript:;\"},on:{\"click\":_vm.cancel}},[_vm._v(\"×\")])]):_vm._e(),_c('div',{staticClass:\"avatar-cropper-container\"},[_c('div',{staticClass:\"avatar-cropper-image-container\"},[_c('img',{ref:\"img\",attrs:{\"src\":_vm.dataUrl,\"alt\":\"\"},on:{\"load\":function($event){$event.stopPropagation();return _vm.createCropper($event)}}})]),_c('div',{staticClass:\"avatar-cropper-footer\"},[_c('button',{staticClass:\"avatar-cropper-btn\",domProps:{\"textContent\":_vm._s(_vm.labels.cancel)},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.cancel($event)}}},[_vm._v(\"Cancel\")]),_c('button',{staticClass:\"avatar-cropper-btn\",domProps:{\"textContent\":_vm._s(_vm.labels.submit)},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.submit($event)}}},[_vm._v(\"Submit\")])])])]):_vm._e(),_c('input',{ref:\"input\",staticClass:\"avatar-cropper-img-input\",attrs:{\"accept\":_vm.mimes,\"type\":\"file\"}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./vue-avatar-cropper.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./vue-avatar-cropper.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./vue-avatar-cropper.vue?vue&type=template&id=57a1d1ae&\"\nimport script from \"./vue-avatar-cropper.vue?vue&type=script&lang=js&\"\nexport * from \"./vue-avatar-cropper.vue?vue&type=script&lang=js&\"\nimport style0 from \"./vue-avatar-cropper.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Avatar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Avatar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Avatar.vue?vue&type=template&id=361bb4dc&\"\nimport script from \"./Avatar.vue?vue&type=script&lang=js&\"\nexport * from \"./Avatar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Avatar.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Avatar.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Avatar.vue?vue&type=style&index=0&lang=css&\"","/*!\n * Cropper.js v1.5.11\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2021-02-17T11:53:27.572Z\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Cropper = factory());\n}(this, (function () { 'use strict';\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n }\n\n function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n }\n\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n\n function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n }\n\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n var WINDOW = IS_BROWSER ? window : {};\n var IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\n var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\n var NAMESPACE = 'cropper'; // Actions\n\n var ACTION_ALL = 'all';\n var ACTION_CROP = 'crop';\n var ACTION_MOVE = 'move';\n var ACTION_ZOOM = 'zoom';\n var ACTION_EAST = 'e';\n var ACTION_WEST = 'w';\n var ACTION_SOUTH = 's';\n var ACTION_NORTH = 'n';\n var ACTION_NORTH_EAST = 'ne';\n var ACTION_NORTH_WEST = 'nw';\n var ACTION_SOUTH_EAST = 'se';\n var ACTION_SOUTH_WEST = 'sw'; // Classes\n\n var CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\n var CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\n var CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\n var CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\n var CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\n var CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\n var CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\"); // Data keys\n\n var DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\n var DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\"); // Drag modes\n\n var DRAG_MODE_CROP = 'crop';\n var DRAG_MODE_MOVE = 'move';\n var DRAG_MODE_NONE = 'none'; // Events\n\n var EVENT_CROP = 'crop';\n var EVENT_CROP_END = 'cropend';\n var EVENT_CROP_MOVE = 'cropmove';\n var EVENT_CROP_START = 'cropstart';\n var EVENT_DBLCLICK = 'dblclick';\n var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\n var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\n var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\n var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\n var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\n var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\n var EVENT_READY = 'ready';\n var EVENT_RESIZE = 'resize';\n var EVENT_WHEEL = 'wheel';\n var EVENT_ZOOM = 'zoom'; // Mime types\n\n var MIME_TYPE_JPEG = 'image/jpeg'; // RegExps\n\n var REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\n var REGEXP_DATA_URL = /^data:/;\n var REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\n var REGEXP_TAG_NAME = /^img|canvas$/i; // Misc\n // Inspired by the default width and height of a canvas element.\n\n var MIN_CONTAINER_WIDTH = 200;\n var MIN_CONTAINER_HEIGHT = 100;\n\n var DEFAULTS = {\n // Define the view mode of the cropper\n viewMode: 0,\n // 0, 1, 2, 3\n // Define the dragging mode of the cropper\n dragMode: DRAG_MODE_CROP,\n // 'crop', 'move' or 'none'\n // Define the initial aspect ratio of the crop box\n initialAspectRatio: NaN,\n // Define the aspect ratio of the crop box\n aspectRatio: NaN,\n // An object with the previous cropping result data\n data: null,\n // A selector for adding extra containers to preview\n preview: '',\n // Re-render the cropper when resize the window\n responsive: true,\n // Restore the cropped area after resize the window\n restore: true,\n // Check if the current image is a cross-origin image\n checkCrossOrigin: true,\n // Check the current image's Exif Orientation information\n checkOrientation: true,\n // Show the black modal\n modal: true,\n // Show the dashed lines for guiding\n guides: true,\n // Show the center indicator for guiding\n center: true,\n // Show the white modal to highlight the crop box\n highlight: true,\n // Show the grid background\n background: true,\n // Enable to crop the image automatically when initialize\n autoCrop: true,\n // Define the percentage of automatic cropping area when initializes\n autoCropArea: 0.8,\n // Enable to move the image\n movable: true,\n // Enable to rotate the image\n rotatable: true,\n // Enable to scale the image\n scalable: true,\n // Enable to zoom the image\n zoomable: true,\n // Enable to zoom the image by dragging touch\n zoomOnTouch: true,\n // Enable to zoom the image by wheeling mouse\n zoomOnWheel: true,\n // Define zoom ratio when zoom the image by wheeling mouse\n wheelZoomRatio: 0.1,\n // Enable to move the crop box\n cropBoxMovable: true,\n // Enable to resize the crop box\n cropBoxResizable: true,\n // Toggle drag mode between \"crop\" and \"move\" when click twice on the cropper\n toggleDragModeOnDblclick: true,\n // Size limitation\n minCanvasWidth: 0,\n minCanvasHeight: 0,\n minCropBoxWidth: 0,\n minCropBoxHeight: 0,\n minContainerWidth: MIN_CONTAINER_WIDTH,\n minContainerHeight: MIN_CONTAINER_HEIGHT,\n // Shortcuts of events\n ready: null,\n cropstart: null,\n cropmove: null,\n cropend: null,\n crop: null,\n zoom: null\n };\n\n var TEMPLATE = '
' + '
' + '
' + '
' + '
' + '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
' + '
';\n\n /**\n * Check if the given value is not a number.\n */\n\n var isNaN = Number.isNaN || WINDOW.isNaN;\n /**\n * Check if the given value is a number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n */\n\n function isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n }\n /**\n * Check if the given value is a positive number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n */\n\n var isPositiveNumber = function isPositiveNumber(value) {\n return value > 0 && value < Infinity;\n };\n /**\n * Check if the given value is undefined.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n */\n\n function isUndefined(value) {\n return typeof value === 'undefined';\n }\n /**\n * Check if the given value is an object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n */\n\n function isObject(value) {\n return _typeof(value) === 'object' && value !== null;\n }\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n /**\n * Check if the given value is a plain object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n */\n\n function isPlainObject(value) {\n if (!isObject(value)) {\n return false;\n }\n\n try {\n var _constructor = value.constructor;\n var prototype = _constructor.prototype;\n return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n } catch (error) {\n return false;\n }\n }\n /**\n * Check if the given value is a function.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n */\n\n function isFunction(value) {\n return typeof value === 'function';\n }\n var slice = Array.prototype.slice;\n /**\n * Convert array-like or iterable object to an array.\n * @param {*} value - The value to convert.\n * @returns {Array} Returns a new array.\n */\n\n function toArray(value) {\n return Array.from ? Array.from(value) : slice.call(value);\n }\n /**\n * Iterate the given data.\n * @param {*} data - The data to iterate.\n * @param {Function} callback - The process function for each element.\n * @returns {*} The original data.\n */\n\n function forEach(data, callback) {\n if (data && isFunction(callback)) {\n if (Array.isArray(data) || isNumber(data.length)\n /* array-like */\n ) {\n toArray(data).forEach(function (value, key) {\n callback.call(data, value, key, data);\n });\n } else if (isObject(data)) {\n Object.keys(data).forEach(function (key) {\n callback.call(data, data[key], key, data);\n });\n }\n }\n\n return data;\n }\n /**\n * Extend the given object.\n * @param {*} target - The target object to extend.\n * @param {*} args - The rest objects for merging to the target object.\n * @returns {Object} The extended object.\n */\n\n var assign = Object.assign || function assign(target) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n if (isObject(target) && args.length > 0) {\n args.forEach(function (arg) {\n if (isObject(arg)) {\n Object.keys(arg).forEach(function (key) {\n target[key] = arg[key];\n });\n }\n });\n }\n\n return target;\n };\n var REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n /**\n * Normalize decimal number.\n * Check out {@link https://0.30000000000000004.com/}\n * @param {number} value - The value to normalize.\n * @param {number} [times=100000000000] - The times for normalizing.\n * @returns {number} Returns the normalized number.\n */\n\n function normalizeDecimalNumber(value) {\n var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n }\n var REGEXP_SUFFIX = /^width|height|left|top|marginLeft|marginTop$/;\n /**\n * Apply styles to the given element.\n * @param {Element} element - The target element.\n * @param {Object} styles - The styles for applying.\n */\n\n function setStyle(element, styles) {\n var style = element.style;\n forEach(styles, function (value, property) {\n if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n value = \"\".concat(value, \"px\");\n }\n\n style[property] = value;\n });\n }\n /**\n * Check if the given element has a special class.\n * @param {Element} element - The element to check.\n * @param {string} value - The class to search.\n * @returns {boolean} Returns `true` if the special class was found.\n */\n\n function hasClass(element, value) {\n return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n }\n /**\n * Add classes to the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be added.\n */\n\n function addClass(element, value) {\n if (!value) {\n return;\n }\n\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n addClass(elem, value);\n });\n return;\n }\n\n if (element.classList) {\n element.classList.add(value);\n return;\n }\n\n var className = element.className.trim();\n\n if (!className) {\n element.className = value;\n } else if (className.indexOf(value) < 0) {\n element.className = \"\".concat(className, \" \").concat(value);\n }\n }\n /**\n * Remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be removed.\n */\n\n function removeClass(element, value) {\n if (!value) {\n return;\n }\n\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n removeClass(elem, value);\n });\n return;\n }\n\n if (element.classList) {\n element.classList.remove(value);\n return;\n }\n\n if (element.className.indexOf(value) >= 0) {\n element.className = element.className.replace(value, '');\n }\n }\n /**\n * Add or remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be toggled.\n * @param {boolean} added - Add only.\n */\n\n function toggleClass(element, value, added) {\n if (!value) {\n return;\n }\n\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n toggleClass(elem, value, added);\n });\n return;\n } // IE10-11 doesn't support the second parameter of `classList.toggle`\n\n\n if (added) {\n addClass(element, value);\n } else {\n removeClass(element, value);\n }\n }\n var REGEXP_CAMEL_CASE = /([a-z\\d])([A-Z])/g;\n /**\n * Transform the given string from camelCase to kebab-case\n * @param {string} value - The value to transform.\n * @returns {string} The transformed value.\n */\n\n function toParamCase(value) {\n return value.replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();\n }\n /**\n * Get data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to get.\n * @returns {string} The data value.\n */\n\n function getData(element, name) {\n if (isObject(element[name])) {\n return element[name];\n }\n\n if (element.dataset) {\n return element.dataset[name];\n }\n\n return element.getAttribute(\"data-\".concat(toParamCase(name)));\n }\n /**\n * Set data to the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to set.\n * @param {string} data - The data value.\n */\n\n function setData(element, name, data) {\n if (isObject(data)) {\n element[name] = data;\n } else if (element.dataset) {\n element.dataset[name] = data;\n } else {\n element.setAttribute(\"data-\".concat(toParamCase(name)), data);\n }\n }\n /**\n * Remove data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to remove.\n */\n\n function removeData(element, name) {\n if (isObject(element[name])) {\n try {\n delete element[name];\n } catch (error) {\n element[name] = undefined;\n }\n } else if (element.dataset) {\n // #128 Safari not allows to delete dataset property\n try {\n delete element.dataset[name];\n } catch (error) {\n element.dataset[name] = undefined;\n }\n } else {\n element.removeAttribute(\"data-\".concat(toParamCase(name)));\n }\n }\n var REGEXP_SPACES = /\\s\\s*/;\n\n var onceSupported = function () {\n var supported = false;\n\n if (IS_BROWSER) {\n var once = false;\n\n var listener = function listener() {};\n\n var options = Object.defineProperty({}, 'once', {\n get: function get() {\n supported = true;\n return once;\n },\n\n /**\n * This setter can fix a `TypeError` in strict mode\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\n * @param {boolean} value - The value to set\n */\n set: function set(value) {\n once = value;\n }\n });\n WINDOW.addEventListener('test', listener, options);\n WINDOW.removeEventListener('test', listener, options);\n }\n\n return supported;\n }();\n /**\n * Remove event listener from the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n\n\n function removeListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (!onceSupported) {\n var listeners = element.listeners;\n\n if (listeners && listeners[event] && listeners[event][listener]) {\n handler = listeners[event][listener];\n delete listeners[event][listener];\n\n if (Object.keys(listeners[event]).length === 0) {\n delete listeners[event];\n }\n\n if (Object.keys(listeners).length === 0) {\n delete element.listeners;\n }\n }\n }\n\n element.removeEventListener(event, handler, options);\n });\n }\n /**\n * Add event listener to the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n\n function addListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (options.once && !onceSupported) {\n var _element$listeners = element.listeners,\n listeners = _element$listeners === void 0 ? {} : _element$listeners;\n\n _handler = function handler() {\n delete listeners[event][listener];\n element.removeEventListener(event, _handler, options);\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n listener.apply(element, args);\n };\n\n if (!listeners[event]) {\n listeners[event] = {};\n }\n\n if (listeners[event][listener]) {\n element.removeEventListener(event, listeners[event][listener], options);\n }\n\n listeners[event][listener] = _handler;\n element.listeners = listeners;\n }\n\n element.addEventListener(event, _handler, options);\n });\n }\n /**\n * Dispatch event on the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Object} data - The additional event data.\n * @returns {boolean} Indicate if the event is default prevented or not.\n */\n\n function dispatchEvent(element, type, data) {\n var event; // Event and CustomEvent on IE9-11 are global objects, not constructors\n\n if (isFunction(Event) && isFunction(CustomEvent)) {\n event = new CustomEvent(type, {\n detail: data,\n bubbles: true,\n cancelable: true\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(type, true, true, data);\n }\n\n return element.dispatchEvent(event);\n }\n /**\n * Get the offset base on the document.\n * @param {Element} element - The target element.\n * @returns {Object} The offset data.\n */\n\n function getOffset(element) {\n var box = element.getBoundingClientRect();\n return {\n left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n };\n }\n var location = WINDOW.location;\n var REGEXP_ORIGINS = /^(\\w+:)\\/\\/([^:/?#]*):?(\\d*)/i;\n /**\n * Check if the given URL is a cross origin URL.\n * @param {string} url - The target URL.\n * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`.\n */\n\n function isCrossOriginURL(url) {\n var parts = url.match(REGEXP_ORIGINS);\n return parts !== null && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);\n }\n /**\n * Add timestamp to the given URL.\n * @param {string} url - The target URL.\n * @returns {string} The result URL.\n */\n\n function addTimestamp(url) {\n var timestamp = \"timestamp=\".concat(new Date().getTime());\n return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp;\n }\n /**\n * Get transforms base on the given object.\n * @param {Object} obj - The target object.\n * @returns {string} A string contains transform values.\n */\n\n function getTransforms(_ref) {\n var rotate = _ref.rotate,\n scaleX = _ref.scaleX,\n scaleY = _ref.scaleY,\n translateX = _ref.translateX,\n translateY = _ref.translateY;\n var values = [];\n\n if (isNumber(translateX) && translateX !== 0) {\n values.push(\"translateX(\".concat(translateX, \"px)\"));\n }\n\n if (isNumber(translateY) && translateY !== 0) {\n values.push(\"translateY(\".concat(translateY, \"px)\"));\n } // Rotate should come first before scale to match orientation transform\n\n\n if (isNumber(rotate) && rotate !== 0) {\n values.push(\"rotate(\".concat(rotate, \"deg)\"));\n }\n\n if (isNumber(scaleX) && scaleX !== 1) {\n values.push(\"scaleX(\".concat(scaleX, \")\"));\n }\n\n if (isNumber(scaleY) && scaleY !== 1) {\n values.push(\"scaleY(\".concat(scaleY, \")\"));\n }\n\n var transform = values.length ? values.join(' ') : 'none';\n return {\n WebkitTransform: transform,\n msTransform: transform,\n transform: transform\n };\n }\n /**\n * Get the max ratio of a group of pointers.\n * @param {string} pointers - The target pointers.\n * @returns {number} The result ratio.\n */\n\n function getMaxZoomRatio(pointers) {\n var pointers2 = _objectSpread2({}, pointers);\n\n var maxRatio = 0;\n forEach(pointers, function (pointer, pointerId) {\n delete pointers2[pointerId];\n forEach(pointers2, function (pointer2) {\n var x1 = Math.abs(pointer.startX - pointer2.startX);\n var y1 = Math.abs(pointer.startY - pointer2.startY);\n var x2 = Math.abs(pointer.endX - pointer2.endX);\n var y2 = Math.abs(pointer.endY - pointer2.endY);\n var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n var ratio = (z2 - z1) / z1;\n\n if (Math.abs(ratio) > Math.abs(maxRatio)) {\n maxRatio = ratio;\n }\n });\n });\n return maxRatio;\n }\n /**\n * Get a pointer from an event object.\n * @param {Object} event - The target event object.\n * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n * @returns {Object} The result pointer contains start and/or end point coordinates.\n */\n\n function getPointer(_ref2, endOnly) {\n var pageX = _ref2.pageX,\n pageY = _ref2.pageY;\n var end = {\n endX: pageX,\n endY: pageY\n };\n return endOnly ? end : _objectSpread2({\n startX: pageX,\n startY: pageY\n }, end);\n }\n /**\n * Get the center point coordinate of a group of pointers.\n * @param {Object} pointers - The target pointers.\n * @returns {Object} The center point coordinate.\n */\n\n function getPointersCenter(pointers) {\n var pageX = 0;\n var pageY = 0;\n var count = 0;\n forEach(pointers, function (_ref3) {\n var startX = _ref3.startX,\n startY = _ref3.startY;\n pageX += startX;\n pageY += startY;\n count += 1;\n });\n pageX /= count;\n pageY /= count;\n return {\n pageX: pageX,\n pageY: pageY\n };\n }\n /**\n * Get the max sizes in a rectangle under the given aspect ratio.\n * @param {Object} data - The original sizes.\n * @param {string} [type='contain'] - The adjust type.\n * @returns {Object} The result sizes.\n */\n\n function getAdjustedSizes(_ref4) // or 'cover'\n {\n var aspectRatio = _ref4.aspectRatio,\n height = _ref4.height,\n width = _ref4.width;\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain';\n var isValidWidth = isPositiveNumber(width);\n var isValidHeight = isPositiveNumber(height);\n\n if (isValidWidth && isValidHeight) {\n var adjustedWidth = height * aspectRatio;\n\n if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n height = width / aspectRatio;\n } else {\n width = height * aspectRatio;\n }\n } else if (isValidWidth) {\n height = width / aspectRatio;\n } else if (isValidHeight) {\n width = height * aspectRatio;\n }\n\n return {\n width: width,\n height: height\n };\n }\n /**\n * Get the new sizes of a rectangle after rotated.\n * @param {Object} data - The original sizes.\n * @returns {Object} The result sizes.\n */\n\n function getRotatedSizes(_ref5) {\n var width = _ref5.width,\n height = _ref5.height,\n degree = _ref5.degree;\n degree = Math.abs(degree) % 180;\n\n if (degree === 90) {\n return {\n width: height,\n height: width\n };\n }\n\n var arc = degree % 90 * Math.PI / 180;\n var sinArc = Math.sin(arc);\n var cosArc = Math.cos(arc);\n var newWidth = width * cosArc + height * sinArc;\n var newHeight = width * sinArc + height * cosArc;\n return degree > 90 ? {\n width: newHeight,\n height: newWidth\n } : {\n width: newWidth,\n height: newHeight\n };\n }\n /**\n * Get a canvas which drew the given image.\n * @param {HTMLImageElement} image - The image for drawing.\n * @param {Object} imageData - The image data.\n * @param {Object} canvasData - The canvas data.\n * @param {Object} options - The options.\n * @returns {HTMLCanvasElement} The result canvas.\n */\n\n function getSourceCanvas(image, _ref6, _ref7, _ref8) {\n var imageAspectRatio = _ref6.aspectRatio,\n imageNaturalWidth = _ref6.naturalWidth,\n imageNaturalHeight = _ref6.naturalHeight,\n _ref6$rotate = _ref6.rotate,\n rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate,\n _ref6$scaleX = _ref6.scaleX,\n scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX,\n _ref6$scaleY = _ref6.scaleY,\n scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY;\n var aspectRatio = _ref7.aspectRatio,\n naturalWidth = _ref7.naturalWidth,\n naturalHeight = _ref7.naturalHeight;\n var _ref8$fillColor = _ref8.fillColor,\n fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor,\n _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled,\n imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE,\n _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality,\n imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ,\n _ref8$maxWidth = _ref8.maxWidth,\n maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth,\n _ref8$maxHeight = _ref8.maxHeight,\n maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight,\n _ref8$minWidth = _ref8.minWidth,\n minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth,\n _ref8$minHeight = _ref8.minHeight,\n minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight;\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth));\n var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight)); // Note: should always use image's natural sizes for drawing as\n // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90\n\n var destMaxSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var destMinSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth));\n var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight));\n var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight];\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = fillColor;\n context.fillRect(0, 0, width, height);\n context.save();\n context.translate(width / 2, height / 2);\n context.rotate(rotate * Math.PI / 180);\n context.scale(scaleX, scaleY);\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n context.imageSmoothingQuality = imageSmoothingQuality;\n context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n context.restore();\n return canvas;\n }\n var fromCharCode = String.fromCharCode;\n /**\n * Get string from char code in data view.\n * @param {DataView} dataView - The data view for read.\n * @param {number} start - The start index.\n * @param {number} length - The read length.\n * @returns {string} The read result.\n */\n\n function getStringFromCharCode(dataView, start, length) {\n var str = '';\n length += start;\n\n for (var i = start; i < length; i += 1) {\n str += fromCharCode(dataView.getUint8(i));\n }\n\n return str;\n }\n var REGEXP_DATA_URL_HEAD = /^data:.*,/;\n /**\n * Transform Data URL to array buffer.\n * @param {string} dataURL - The Data URL to transform.\n * @returns {ArrayBuffer} The result array buffer.\n */\n\n function dataURLToArrayBuffer(dataURL) {\n var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, '');\n var binary = atob(base64);\n var arrayBuffer = new ArrayBuffer(binary.length);\n var uint8 = new Uint8Array(arrayBuffer);\n forEach(uint8, function (value, i) {\n uint8[i] = binary.charCodeAt(i);\n });\n return arrayBuffer;\n }\n /**\n * Transform array buffer to Data URL.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n * @param {string} mimeType - The mime type of the Data URL.\n * @returns {string} The result Data URL.\n */\n\n function arrayBufferToDataURL(arrayBuffer, mimeType) {\n var chunks = []; // Chunk Typed Array for better performance (#435)\n\n var chunkSize = 8192;\n var uint8 = new Uint8Array(arrayBuffer);\n\n while (uint8.length > 0) {\n // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\n // eslint-disable-next-line prefer-spread\n chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\n uint8 = uint8.subarray(chunkSize);\n }\n\n return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n }\n /**\n * Get orientation value from given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n * @returns {number} The read orientation value.\n */\n\n function resetAndGetOrientation(arrayBuffer) {\n var dataView = new DataView(arrayBuffer);\n var orientation; // Ignores range error when the image does not have correct Exif information\n\n try {\n var littleEndian;\n var app1Start;\n var ifdStart; // Only handle JPEG image (start by 0xFFD8)\n\n if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n var length = dataView.byteLength;\n var offset = 2;\n\n while (offset + 1 < length) {\n if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n app1Start = offset;\n break;\n }\n\n offset += 1;\n }\n }\n\n if (app1Start) {\n var exifIDCode = app1Start + 4;\n var tiffOffset = app1Start + 10;\n\n if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n var endianness = dataView.getUint16(tiffOffset);\n littleEndian = endianness === 0x4949;\n\n if (littleEndian || endianness === 0x4D4D\n /* bigEndian */\n ) {\n if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n\n if (firstIFDOffset >= 0x00000008) {\n ifdStart = tiffOffset + firstIFDOffset;\n }\n }\n }\n }\n }\n\n if (ifdStart) {\n var _length = dataView.getUint16(ifdStart, littleEndian);\n\n var _offset;\n\n var i;\n\n for (i = 0; i < _length; i += 1) {\n _offset = ifdStart + i * 12 + 2;\n\n if (dataView.getUint16(_offset, littleEndian) === 0x0112\n /* Orientation */\n ) {\n // 8 is the offset of the current tag's value\n _offset += 8; // Get the original orientation value\n\n orientation = dataView.getUint16(_offset, littleEndian); // Override the orientation with its default value\n\n dataView.setUint16(_offset, 1, littleEndian);\n break;\n }\n }\n }\n } catch (error) {\n orientation = 1;\n }\n\n return orientation;\n }\n /**\n * Parse Exif Orientation value.\n * @param {number} orientation - The orientation to parse.\n * @returns {Object} The parsed result.\n */\n\n function parseOrientation(orientation) {\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n\n switch (orientation) {\n // Flip horizontal\n case 2:\n scaleX = -1;\n break;\n // Rotate left 180°\n\n case 3:\n rotate = -180;\n break;\n // Flip vertical\n\n case 4:\n scaleY = -1;\n break;\n // Flip vertical and rotate right 90°\n\n case 5:\n rotate = 90;\n scaleY = -1;\n break;\n // Rotate right 90°\n\n case 6:\n rotate = 90;\n break;\n // Flip horizontal and rotate right 90°\n\n case 7:\n rotate = 90;\n scaleX = -1;\n break;\n // Rotate left 90°\n\n case 8:\n rotate = -90;\n break;\n }\n\n return {\n rotate: rotate,\n scaleX: scaleX,\n scaleY: scaleY\n };\n }\n\n var render = {\n render: function render() {\n this.initContainer();\n this.initCanvas();\n this.initCropBox();\n this.renderCanvas();\n\n if (this.cropped) {\n this.renderCropBox();\n }\n },\n initContainer: function initContainer() {\n var element = this.element,\n options = this.options,\n container = this.container,\n cropper = this.cropper;\n var minWidth = Number(options.minContainerWidth);\n var minHeight = Number(options.minContainerHeight);\n addClass(cropper, CLASS_HIDDEN);\n removeClass(element, CLASS_HIDDEN);\n var containerData = {\n width: Math.max(container.offsetWidth, minWidth >= 0 ? minWidth : MIN_CONTAINER_WIDTH),\n height: Math.max(container.offsetHeight, minHeight >= 0 ? minHeight : MIN_CONTAINER_HEIGHT)\n };\n this.containerData = containerData;\n setStyle(cropper, {\n width: containerData.width,\n height: containerData.height\n });\n addClass(element, CLASS_HIDDEN);\n removeClass(cropper, CLASS_HIDDEN);\n },\n // Canvas (image wrapper)\n initCanvas: function initCanvas() {\n var containerData = this.containerData,\n imageData = this.imageData;\n var viewMode = this.options.viewMode;\n var rotated = Math.abs(imageData.rotate) % 180 === 90;\n var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth;\n var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight;\n var aspectRatio = naturalWidth / naturalHeight;\n var canvasWidth = containerData.width;\n var canvasHeight = containerData.height;\n\n if (containerData.height * aspectRatio > containerData.width) {\n if (viewMode === 3) {\n canvasWidth = containerData.height * aspectRatio;\n } else {\n canvasHeight = containerData.width / aspectRatio;\n }\n } else if (viewMode === 3) {\n canvasHeight = containerData.width / aspectRatio;\n } else {\n canvasWidth = containerData.height * aspectRatio;\n }\n\n var canvasData = {\n aspectRatio: aspectRatio,\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n width: canvasWidth,\n height: canvasHeight\n };\n this.canvasData = canvasData;\n this.limited = viewMode === 1 || viewMode === 2;\n this.limitCanvas(true, true);\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n canvasData.left = (containerData.width - canvasData.width) / 2;\n canvasData.top = (containerData.height - canvasData.height) / 2;\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n this.initialCanvasData = assign({}, canvasData);\n },\n limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var viewMode = options.viewMode;\n var aspectRatio = canvasData.aspectRatio;\n var cropped = this.cropped && cropBoxData;\n\n if (sizeLimited) {\n var minCanvasWidth = Number(options.minCanvasWidth) || 0;\n var minCanvasHeight = Number(options.minCanvasHeight) || 0;\n\n if (viewMode > 1) {\n minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\n minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\n\n if (viewMode === 3) {\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n } else if (viewMode > 0) {\n if (minCanvasWidth) {\n minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\n } else if (minCanvasHeight) {\n minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\n } else if (cropped) {\n minCanvasWidth = cropBoxData.width;\n minCanvasHeight = cropBoxData.height;\n\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n }\n\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minCanvasWidth,\n height: minCanvasHeight\n });\n\n minCanvasWidth = _getAdjustedSizes.width;\n minCanvasHeight = _getAdjustedSizes.height;\n canvasData.minWidth = minCanvasWidth;\n canvasData.minHeight = minCanvasHeight;\n canvasData.maxWidth = Infinity;\n canvasData.maxHeight = Infinity;\n }\n\n if (positionLimited) {\n if (viewMode > (cropped ? 0 : 1)) {\n var newCanvasLeft = containerData.width - canvasData.width;\n var newCanvasTop = containerData.height - canvasData.height;\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n\n if (cropped && this.limited) {\n canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\n canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\n canvasData.maxLeft = cropBoxData.left;\n canvasData.maxTop = cropBoxData.top;\n\n if (viewMode === 2) {\n if (canvasData.width >= containerData.width) {\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n }\n\n if (canvasData.height >= containerData.height) {\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n }\n }\n }\n } else {\n canvasData.minLeft = -canvasData.width;\n canvasData.minTop = -canvasData.height;\n canvasData.maxLeft = containerData.width;\n canvasData.maxTop = containerData.height;\n }\n }\n },\n renderCanvas: function renderCanvas(changed, transformed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n\n if (transformed) {\n var _getRotatedSizes = getRotatedSizes({\n width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\n height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\n degree: imageData.rotate || 0\n }),\n naturalWidth = _getRotatedSizes.width,\n naturalHeight = _getRotatedSizes.height;\n\n var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\n var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\n canvasData.left -= (width - canvasData.width) / 2;\n canvasData.top -= (height - canvasData.height) / 2;\n canvasData.width = width;\n canvasData.height = height;\n canvasData.aspectRatio = naturalWidth / naturalHeight;\n canvasData.naturalWidth = naturalWidth;\n canvasData.naturalHeight = naturalHeight;\n this.limitCanvas(true, false);\n }\n\n if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\n canvasData.left = canvasData.oldLeft;\n }\n\n if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\n canvasData.top = canvasData.oldTop;\n }\n\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n this.limitCanvas(false, true);\n canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\n canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n setStyle(this.canvas, assign({\n width: canvasData.width,\n height: canvasData.height\n }, getTransforms({\n translateX: canvasData.left,\n translateY: canvasData.top\n })));\n this.renderImage(changed);\n\n if (this.cropped && this.limited) {\n this.limitCropBox(true, true);\n }\n },\n renderImage: function renderImage(changed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\n var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\n assign(imageData, {\n width: width,\n height: height,\n left: (canvasData.width - width) / 2,\n top: (canvasData.height - height) / 2\n });\n setStyle(this.image, assign({\n width: imageData.width,\n height: imageData.height\n }, getTransforms(assign({\n translateX: imageData.left,\n translateY: imageData.top\n }, imageData))));\n\n if (changed) {\n this.output();\n }\n },\n initCropBox: function initCropBox() {\n var options = this.options,\n canvasData = this.canvasData;\n var aspectRatio = options.aspectRatio || options.initialAspectRatio;\n var autoCropArea = Number(options.autoCropArea) || 0.8;\n var cropBoxData = {\n width: canvasData.width,\n height: canvasData.height\n };\n\n if (aspectRatio) {\n if (canvasData.height * aspectRatio > canvasData.width) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n\n this.cropBoxData = cropBoxData;\n this.limitCropBox(true, true); // Initialize auto crop area\n\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight); // The width/height of auto crop area must large than \"minWidth/Height\"\n\n cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\n cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\n cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\n cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n this.initialCropBoxData = assign({}, cropBoxData);\n },\n limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData,\n limited = this.limited;\n var aspectRatio = options.aspectRatio;\n\n if (sizeLimited) {\n var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\n var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\n var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\n var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height; // The min/maxCropBoxWidth/Height must be less than container's width/height\n\n minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\n minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\n\n if (aspectRatio) {\n if (minCropBoxWidth && minCropBoxHeight) {\n if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n } else if (minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else if (minCropBoxHeight) {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n\n if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\n maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\n } else {\n maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\n }\n } // The minWidth/Height must be less than maxWidth/Height\n\n\n cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\n cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\n cropBoxData.maxWidth = maxCropBoxWidth;\n cropBoxData.maxHeight = maxCropBoxHeight;\n }\n\n if (positionLimited) {\n if (limited) {\n cropBoxData.minLeft = Math.max(0, canvasData.left);\n cropBoxData.minTop = Math.max(0, canvasData.top);\n cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\n cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\n } else {\n cropBoxData.minLeft = 0;\n cropBoxData.minTop = 0;\n cropBoxData.maxLeft = containerData.width - cropBoxData.width;\n cropBoxData.maxTop = containerData.height - cropBoxData.height;\n }\n }\n },\n renderCropBox: function renderCropBox() {\n var options = this.options,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData;\n\n if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\n cropBoxData.left = cropBoxData.oldLeft;\n }\n\n if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\n cropBoxData.top = cropBoxData.oldTop;\n }\n\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n this.limitCropBox(false, true);\n cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\n cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n\n if (options.movable && options.cropBoxMovable) {\n // Turn to move the canvas when the crop box is equal to the container\n setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\n }\n\n setStyle(this.cropBox, assign({\n width: cropBoxData.width,\n height: cropBoxData.height\n }, getTransforms({\n translateX: cropBoxData.left,\n translateY: cropBoxData.top\n })));\n\n if (this.cropped && this.limited) {\n this.limitCanvas(true, true);\n }\n\n if (!this.disabled) {\n this.output();\n }\n },\n output: function output() {\n this.preview();\n dispatchEvent(this.element, EVENT_CROP, this.getData());\n }\n };\n\n var preview = {\n initPreview: function initPreview() {\n var element = this.element,\n crossOrigin = this.crossOrigin;\n var preview = this.options.preview;\n var url = crossOrigin ? this.crossOriginUrl : this.url;\n var alt = element.alt || 'The image to preview';\n var image = document.createElement('img');\n\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n\n image.src = url;\n image.alt = alt;\n this.viewBox.appendChild(image);\n this.viewBoxImage = image;\n\n if (!preview) {\n return;\n }\n\n var previews = preview;\n\n if (typeof preview === 'string') {\n previews = element.ownerDocument.querySelectorAll(preview);\n } else if (preview.querySelector) {\n previews = [preview];\n }\n\n this.previews = previews;\n forEach(previews, function (el) {\n var img = document.createElement('img'); // Save the original size for recover\n\n setData(el, DATA_PREVIEW, {\n width: el.offsetWidth,\n height: el.offsetHeight,\n html: el.innerHTML\n });\n\n if (crossOrigin) {\n img.crossOrigin = crossOrigin;\n }\n\n img.src = url;\n img.alt = alt;\n /**\n * Override img element styles\n * Add `display:block` to avoid margin top issue\n * Add `height:auto` to override `height` attribute on IE8\n * (Occur only when margin-top <= -height)\n */\n\n img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;\"';\n el.innerHTML = '';\n el.appendChild(img);\n });\n },\n resetPreview: function resetPreview() {\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n setStyle(element, {\n width: data.width,\n height: data.height\n });\n element.innerHTML = data.html;\n removeData(element, DATA_PREVIEW);\n });\n },\n preview: function preview() {\n var imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var cropBoxWidth = cropBoxData.width,\n cropBoxHeight = cropBoxData.height;\n var width = imageData.width,\n height = imageData.height;\n var left = cropBoxData.left - canvasData.left - imageData.left;\n var top = cropBoxData.top - canvasData.top - imageData.top;\n\n if (!this.cropped || this.disabled) {\n return;\n }\n\n setStyle(this.viewBoxImage, assign({\n width: width,\n height: height\n }, getTransforms(assign({\n translateX: -left,\n translateY: -top\n }, imageData))));\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n var originalWidth = data.width;\n var originalHeight = data.height;\n var newWidth = originalWidth;\n var newHeight = originalHeight;\n var ratio = 1;\n\n if (cropBoxWidth) {\n ratio = originalWidth / cropBoxWidth;\n newHeight = cropBoxHeight * ratio;\n }\n\n if (cropBoxHeight && newHeight > originalHeight) {\n ratio = originalHeight / cropBoxHeight;\n newWidth = cropBoxWidth * ratio;\n newHeight = originalHeight;\n }\n\n setStyle(element, {\n width: newWidth,\n height: newHeight\n });\n setStyle(element.getElementsByTagName('img')[0], assign({\n width: width * ratio,\n height: height * ratio\n }, getTransforms(assign({\n translateX: -left * ratio,\n translateY: -top * ratio\n }, imageData))));\n });\n }\n };\n\n var events = {\n bind: function bind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n\n if (isFunction(options.cropstart)) {\n addListener(element, EVENT_CROP_START, options.cropstart);\n }\n\n if (isFunction(options.cropmove)) {\n addListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n\n if (isFunction(options.cropend)) {\n addListener(element, EVENT_CROP_END, options.cropend);\n }\n\n if (isFunction(options.crop)) {\n addListener(element, EVENT_CROP, options.crop);\n }\n\n if (isFunction(options.zoom)) {\n addListener(element, EVENT_ZOOM, options.zoom);\n }\n\n addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\n\n if (options.zoomable && options.zoomOnWheel) {\n addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\n passive: false,\n capture: true\n });\n }\n\n if (options.toggleDragModeOnDblclick) {\n addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n }\n\n addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this));\n addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this));\n\n if (options.responsive) {\n addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n }\n },\n unbind: function unbind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n\n if (isFunction(options.cropstart)) {\n removeListener(element, EVENT_CROP_START, options.cropstart);\n }\n\n if (isFunction(options.cropmove)) {\n removeListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n\n if (isFunction(options.cropend)) {\n removeListener(element, EVENT_CROP_END, options.cropend);\n }\n\n if (isFunction(options.crop)) {\n removeListener(element, EVENT_CROP, options.crop);\n }\n\n if (isFunction(options.zoom)) {\n removeListener(element, EVENT_ZOOM, options.zoom);\n }\n\n removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\n\n if (options.zoomable && options.zoomOnWheel) {\n removeListener(cropper, EVENT_WHEEL, this.onWheel, {\n passive: false,\n capture: true\n });\n }\n\n if (options.toggleDragModeOnDblclick) {\n removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\n }\n\n removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\n removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\n\n if (options.responsive) {\n removeListener(window, EVENT_RESIZE, this.onResize);\n }\n }\n };\n\n var handlers = {\n resize: function resize() {\n if (this.disabled) {\n return;\n }\n\n var options = this.options,\n container = this.container,\n containerData = this.containerData;\n var ratio = container.offsetWidth / containerData.width; // Resize when width changed or height changed\n\n if (ratio !== 1 || container.offsetHeight !== containerData.height) {\n var canvasData;\n var cropBoxData;\n\n if (options.restore) {\n canvasData = this.getCanvasData();\n cropBoxData = this.getCropBoxData();\n }\n\n this.render();\n\n if (options.restore) {\n this.setCanvasData(forEach(canvasData, function (n, i) {\n canvasData[i] = n * ratio;\n }));\n this.setCropBoxData(forEach(cropBoxData, function (n, i) {\n cropBoxData[i] = n * ratio;\n }));\n }\n }\n },\n dblclick: function dblclick() {\n if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\n return;\n }\n\n this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\n },\n wheel: function wheel(event) {\n var _this = this;\n\n var ratio = Number(this.options.wheelZoomRatio) || 0.1;\n var delta = 1;\n\n if (this.disabled) {\n return;\n }\n\n event.preventDefault(); // Limit wheel speed to prevent zoom too fast (#21)\n\n if (this.wheeling) {\n return;\n }\n\n this.wheeling = true;\n setTimeout(function () {\n _this.wheeling = false;\n }, 50);\n\n if (event.deltaY) {\n delta = event.deltaY > 0 ? 1 : -1;\n } else if (event.wheelDelta) {\n delta = -event.wheelDelta / 120;\n } else if (event.detail) {\n delta = event.detail > 0 ? 1 : -1;\n }\n\n this.zoom(-delta * ratio, event);\n },\n cropStart: function cropStart(event) {\n var buttons = event.buttons,\n button = event.button;\n\n if (this.disabled // Handle mouse event and pointer event and ignore touch event\n || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && ( // No primary button (Usually the left button)\n isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0 // Open context menu\n || event.ctrlKey)) {\n return;\n }\n\n var options = this.options,\n pointers = this.pointers;\n var action;\n\n if (event.changedTouches) {\n // Handle touch event\n forEach(event.changedTouches, function (touch) {\n pointers[touch.identifier] = getPointer(touch);\n });\n } else {\n // Handle mouse event and pointer event\n pointers[event.pointerId || 0] = getPointer(event);\n }\n\n if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\n action = ACTION_ZOOM;\n } else {\n action = getData(event.target, DATA_ACTION);\n }\n\n if (!REGEXP_ACTIONS.test(action)) {\n return;\n }\n\n if (dispatchEvent(this.element, EVENT_CROP_START, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n } // This line is required for preventing page zooming in iOS browsers\n\n\n event.preventDefault();\n this.action = action;\n this.cropping = false;\n\n if (action === ACTION_CROP) {\n this.cropping = true;\n addClass(this.dragBox, CLASS_MODAL);\n }\n },\n cropMove: function cropMove(event) {\n var action = this.action;\n\n if (this.disabled || !action) {\n return;\n }\n\n var pointers = this.pointers;\n event.preventDefault();\n\n if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n // The first parameter should not be undefined (#432)\n assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n });\n } else {\n assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\n }\n\n this.change(event);\n },\n cropEnd: function cropEnd(event) {\n if (this.disabled) {\n return;\n }\n\n var action = this.action,\n pointers = this.pointers;\n\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n delete pointers[touch.identifier];\n });\n } else {\n delete pointers[event.pointerId || 0];\n }\n\n if (!action) {\n return;\n }\n\n event.preventDefault();\n\n if (!Object.keys(pointers).length) {\n this.action = '';\n }\n\n if (this.cropping) {\n this.cropping = false;\n toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\n }\n\n dispatchEvent(this.element, EVENT_CROP_END, {\n originalEvent: event,\n action: action\n });\n }\n };\n\n var change = {\n change: function change(event) {\n var options = this.options,\n canvasData = this.canvasData,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData,\n pointers = this.pointers;\n var action = this.action;\n var aspectRatio = options.aspectRatio;\n var left = cropBoxData.left,\n top = cropBoxData.top,\n width = cropBoxData.width,\n height = cropBoxData.height;\n var right = left + width;\n var bottom = top + height;\n var minLeft = 0;\n var minTop = 0;\n var maxWidth = containerData.width;\n var maxHeight = containerData.height;\n var renderable = true;\n var offset; // Locking aspect ratio in \"free mode\" by holding shift key\n\n if (!aspectRatio && event.shiftKey) {\n aspectRatio = width && height ? width / height : 1;\n }\n\n if (this.limited) {\n minLeft = cropBoxData.minLeft;\n minTop = cropBoxData.minTop;\n maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width);\n maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height);\n }\n\n var pointer = pointers[Object.keys(pointers)[0]];\n var range = {\n x: pointer.endX - pointer.startX,\n y: pointer.endY - pointer.startY\n };\n\n var check = function check(side) {\n switch (side) {\n case ACTION_EAST:\n if (right + range.x > maxWidth) {\n range.x = maxWidth - right;\n }\n\n break;\n\n case ACTION_WEST:\n if (left + range.x < minLeft) {\n range.x = minLeft - left;\n }\n\n break;\n\n case ACTION_NORTH:\n if (top + range.y < minTop) {\n range.y = minTop - top;\n }\n\n break;\n\n case ACTION_SOUTH:\n if (bottom + range.y > maxHeight) {\n range.y = maxHeight - bottom;\n }\n\n break;\n }\n };\n\n switch (action) {\n // Move crop box\n case ACTION_ALL:\n left += range.x;\n top += range.y;\n break;\n // Resize crop box\n\n case ACTION_EAST:\n if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n\n check(ACTION_EAST);\n width += range.x;\n\n if (width < 0) {\n action = ACTION_WEST;\n width = -width;\n left -= width;\n }\n\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n\n break;\n\n case ACTION_NORTH:\n if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n\n if (height < 0) {\n action = ACTION_SOUTH;\n height = -height;\n top -= height;\n }\n\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n\n break;\n\n case ACTION_WEST:\n if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n\n if (width < 0) {\n action = ACTION_EAST;\n width = -width;\n left -= width;\n }\n\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n\n break;\n\n case ACTION_SOUTH:\n if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n\n check(ACTION_SOUTH);\n height += range.y;\n\n if (height < 0) {\n action = ACTION_NORTH;\n height = -height;\n top -= height;\n }\n\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n\n break;\n\n case ACTION_NORTH_EAST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\n renderable = false;\n break;\n }\n\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n } else {\n check(ACTION_NORTH);\n check(ACTION_EAST);\n\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n top -= height;\n }\n\n break;\n\n case ACTION_NORTH_WEST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\n renderable = false;\n break;\n }\n\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n left += cropBoxData.width - width;\n } else {\n check(ACTION_NORTH);\n check(ACTION_WEST);\n\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n top -= height;\n }\n\n break;\n\n case ACTION_SOUTH_WEST:\n if (aspectRatio) {\n if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_WEST);\n\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n top -= height;\n }\n\n break;\n\n case ACTION_SOUTH_EAST:\n if (aspectRatio) {\n if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n\n check(ACTION_EAST);\n width += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_EAST);\n\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n top -= height;\n }\n\n break;\n // Move canvas\n\n case ACTION_MOVE:\n this.move(range.x, range.y);\n renderable = false;\n break;\n // Zoom canvas\n\n case ACTION_ZOOM:\n this.zoom(getMaxZoomRatio(pointers), event);\n renderable = false;\n break;\n // Create crop box\n\n case ACTION_CROP:\n if (!range.x || !range.y) {\n renderable = false;\n break;\n }\n\n offset = getOffset(this.cropper);\n left = pointer.startX - offset.left;\n top = pointer.startY - offset.top;\n width = cropBoxData.minWidth;\n height = cropBoxData.minHeight;\n\n if (range.x > 0) {\n action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST;\n } else if (range.x < 0) {\n left -= width;\n action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST;\n }\n\n if (range.y < 0) {\n top -= height;\n } // Show the crop box if is hidden\n\n\n if (!this.cropped) {\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.cropped = true;\n\n if (this.limited) {\n this.limitCropBox(true, true);\n }\n }\n\n break;\n }\n\n if (renderable) {\n cropBoxData.width = width;\n cropBoxData.height = height;\n cropBoxData.left = left;\n cropBoxData.top = top;\n this.action = action;\n this.renderCropBox();\n } // Override\n\n\n forEach(pointers, function (p) {\n p.startX = p.endX;\n p.startY = p.endY;\n });\n }\n };\n\n var methods = {\n // Show the crop box manually\n crop: function crop() {\n if (this.ready && !this.cropped && !this.disabled) {\n this.cropped = true;\n this.limitCropBox(true, true);\n\n if (this.options.modal) {\n addClass(this.dragBox, CLASS_MODAL);\n }\n\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.setCropBoxData(this.initialCropBoxData);\n }\n\n return this;\n },\n // Reset the image and crop box to their initial states\n reset: function reset() {\n if (this.ready && !this.disabled) {\n this.imageData = assign({}, this.initialImageData);\n this.canvasData = assign({}, this.initialCanvasData);\n this.cropBoxData = assign({}, this.initialCropBoxData);\n this.renderCanvas();\n\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n\n return this;\n },\n // Clear the crop box\n clear: function clear() {\n if (this.cropped && !this.disabled) {\n assign(this.cropBoxData, {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n });\n this.cropped = false;\n this.renderCropBox();\n this.limitCanvas(true, true); // Render canvas after crop box rendered\n\n this.renderCanvas();\n removeClass(this.dragBox, CLASS_MODAL);\n addClass(this.cropBox, CLASS_HIDDEN);\n }\n\n return this;\n },\n\n /**\n * Replace the image's src and rebuild the cropper\n * @param {string} url - The new URL.\n * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.\n * @returns {Cropper} this\n */\n replace: function replace(url) {\n var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (!this.disabled && url) {\n if (this.isImg) {\n this.element.src = url;\n }\n\n if (hasSameSize) {\n this.url = url;\n this.image.src = url;\n\n if (this.ready) {\n this.viewBoxImage.src = url;\n forEach(this.previews, function (element) {\n element.getElementsByTagName('img')[0].src = url;\n });\n }\n } else {\n if (this.isImg) {\n this.replaced = true;\n }\n\n this.options.data = null;\n this.uncreate();\n this.load(url);\n }\n }\n\n return this;\n },\n // Enable (unfreeze) the cropper\n enable: function enable() {\n if (this.ready && this.disabled) {\n this.disabled = false;\n removeClass(this.cropper, CLASS_DISABLED);\n }\n\n return this;\n },\n // Disable (freeze) the cropper\n disable: function disable() {\n if (this.ready && !this.disabled) {\n this.disabled = true;\n addClass(this.cropper, CLASS_DISABLED);\n }\n\n return this;\n },\n\n /**\n * Destroy the cropper and remove the instance from the image\n * @returns {Cropper} this\n */\n destroy: function destroy() {\n var element = this.element;\n\n if (!element[NAMESPACE]) {\n return this;\n }\n\n element[NAMESPACE] = undefined;\n\n if (this.isImg && this.replaced) {\n element.src = this.originalUrl;\n }\n\n this.uncreate();\n return this;\n },\n\n /**\n * Move the canvas with relative offsets\n * @param {number} offsetX - The relative offset distance on the x-axis.\n * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.\n * @returns {Cropper} this\n */\n move: function move(offsetX) {\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX;\n var _this$canvasData = this.canvasData,\n left = _this$canvasData.left,\n top = _this$canvasData.top;\n return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY));\n },\n\n /**\n * Move the canvas to an absolute point\n * @param {number} x - The x-axis coordinate.\n * @param {number} [y=x] - The y-axis coordinate.\n * @returns {Cropper} this\n */\n moveTo: function moveTo(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var canvasData = this.canvasData;\n var changed = false;\n x = Number(x);\n y = Number(y);\n\n if (this.ready && !this.disabled && this.options.movable) {\n if (isNumber(x)) {\n canvasData.left = x;\n changed = true;\n }\n\n if (isNumber(y)) {\n canvasData.top = y;\n changed = true;\n }\n\n if (changed) {\n this.renderCanvas(true);\n }\n }\n\n return this;\n },\n\n /**\n * Zoom the canvas with a relative ratio\n * @param {number} ratio - The target ratio.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoom: function zoom(ratio, _originalEvent) {\n var canvasData = this.canvasData;\n ratio = Number(ratio);\n\n if (ratio < 0) {\n ratio = 1 / (1 - ratio);\n } else {\n ratio = 1 + ratio;\n }\n\n return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\n },\n\n /**\n * Zoom the canvas to an absolute ratio\n * @param {number} ratio - The target ratio.\n * @param {Object} pivot - The zoom pivot point coordinate.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoomTo: function zoomTo(ratio, pivot, _originalEvent) {\n var options = this.options,\n canvasData = this.canvasData;\n var width = canvasData.width,\n height = canvasData.height,\n naturalWidth = canvasData.naturalWidth,\n naturalHeight = canvasData.naturalHeight;\n ratio = Number(ratio);\n\n if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\n var newWidth = naturalWidth * ratio;\n var newHeight = naturalHeight * ratio;\n\n if (dispatchEvent(this.element, EVENT_ZOOM, {\n ratio: ratio,\n oldRatio: width / naturalWidth,\n originalEvent: _originalEvent\n }) === false) {\n return this;\n }\n\n if (_originalEvent) {\n var pointers = this.pointers;\n var offset = getOffset(this.cropper);\n var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\n pageX: _originalEvent.pageX,\n pageY: _originalEvent.pageY\n }; // Zoom from the triggering point of the event\n\n canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height);\n } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\n canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height);\n } else {\n // Zoom from the center of the canvas\n canvasData.left -= (newWidth - width) / 2;\n canvasData.top -= (newHeight - height) / 2;\n }\n\n canvasData.width = newWidth;\n canvasData.height = newHeight;\n this.renderCanvas(true);\n }\n\n return this;\n },\n\n /**\n * Rotate the canvas with a relative degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotate: function rotate(degree) {\n return this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n },\n\n /**\n * Rotate the canvas to an absolute degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotateTo: function rotateTo(degree) {\n degree = Number(degree);\n\n if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\n this.imageData.rotate = degree % 360;\n this.renderCanvas(true, true);\n }\n\n return this;\n },\n\n /**\n * Scale the image on the x-axis.\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @returns {Cropper} this\n */\n scaleX: function scaleX(_scaleX) {\n var scaleY = this.imageData.scaleY;\n return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1);\n },\n\n /**\n * Scale the image on the y-axis.\n * @param {number} scaleY - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scaleY: function scaleY(_scaleY) {\n var scaleX = this.imageData.scaleX;\n return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY);\n },\n\n /**\n * Scale the image\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scale: function scale(scaleX) {\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n var imageData = this.imageData;\n var transformed = false;\n scaleX = Number(scaleX);\n scaleY = Number(scaleY);\n\n if (this.ready && !this.disabled && this.options.scalable) {\n if (isNumber(scaleX)) {\n imageData.scaleX = scaleX;\n transformed = true;\n }\n\n if (isNumber(scaleY)) {\n imageData.scaleY = scaleY;\n transformed = true;\n }\n\n if (transformed) {\n this.renderCanvas(true, true);\n }\n }\n\n return this;\n },\n\n /**\n * Get the cropped area position and size data (base on the original image)\n * @param {boolean} [rounded=false] - Indicate if round the data values or not.\n * @returns {Object} The result cropped data.\n */\n getData: function getData() {\n var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var data;\n\n if (this.ready && this.cropped) {\n data = {\n x: cropBoxData.left - canvasData.left,\n y: cropBoxData.top - canvasData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n var ratio = imageData.width / imageData.naturalWidth;\n forEach(data, function (n, i) {\n data[i] = n / ratio;\n });\n\n if (rounded) {\n // In case rounding off leads to extra 1px in right or bottom border\n // we should round the top-left corner and the dimension (#343).\n var bottom = Math.round(data.y + data.height);\n var right = Math.round(data.x + data.width);\n data.x = Math.round(data.x);\n data.y = Math.round(data.y);\n data.width = right - data.x;\n data.height = bottom - data.y;\n }\n } else {\n data = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n\n if (options.rotatable) {\n data.rotate = imageData.rotate || 0;\n }\n\n if (options.scalable) {\n data.scaleX = imageData.scaleX || 1;\n data.scaleY = imageData.scaleY || 1;\n }\n\n return data;\n },\n\n /**\n * Set the cropped area position and size with new data\n * @param {Object} data - The new data.\n * @returns {Cropper} this\n */\n setData: function setData(data) {\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData;\n var cropBoxData = {};\n\n if (this.ready && !this.disabled && isPlainObject(data)) {\n var transformed = false;\n\n if (options.rotatable) {\n if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\n imageData.rotate = data.rotate;\n transformed = true;\n }\n }\n\n if (options.scalable) {\n if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) {\n imageData.scaleX = data.scaleX;\n transformed = true;\n }\n\n if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\n imageData.scaleY = data.scaleY;\n transformed = true;\n }\n }\n\n if (transformed) {\n this.renderCanvas(true, true);\n }\n\n var ratio = imageData.width / imageData.naturalWidth;\n\n if (isNumber(data.x)) {\n cropBoxData.left = data.x * ratio + canvasData.left;\n }\n\n if (isNumber(data.y)) {\n cropBoxData.top = data.y * ratio + canvasData.top;\n }\n\n if (isNumber(data.width)) {\n cropBoxData.width = data.width * ratio;\n }\n\n if (isNumber(data.height)) {\n cropBoxData.height = data.height * ratio;\n }\n\n this.setCropBoxData(cropBoxData);\n }\n\n return this;\n },\n\n /**\n * Get the container size data.\n * @returns {Object} The result container data.\n */\n getContainerData: function getContainerData() {\n return this.ready ? assign({}, this.containerData) : {};\n },\n\n /**\n * Get the image position and size data.\n * @returns {Object} The result image data.\n */\n getImageData: function getImageData() {\n return this.sized ? assign({}, this.imageData) : {};\n },\n\n /**\n * Get the canvas position and size data.\n * @returns {Object} The result canvas data.\n */\n getCanvasData: function getCanvasData() {\n var canvasData = this.canvasData;\n var data = {};\n\n if (this.ready) {\n forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) {\n data[n] = canvasData[n];\n });\n }\n\n return data;\n },\n\n /**\n * Set the canvas position and size with new data.\n * @param {Object} data - The new canvas data.\n * @returns {Cropper} this\n */\n setCanvasData: function setCanvasData(data) {\n var canvasData = this.canvasData;\n var aspectRatio = canvasData.aspectRatio;\n\n if (this.ready && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n canvasData.left = data.left;\n }\n\n if (isNumber(data.top)) {\n canvasData.top = data.top;\n }\n\n if (isNumber(data.width)) {\n canvasData.width = data.width;\n canvasData.height = data.width / aspectRatio;\n } else if (isNumber(data.height)) {\n canvasData.height = data.height;\n canvasData.width = data.height * aspectRatio;\n }\n\n this.renderCanvas(true);\n }\n\n return this;\n },\n\n /**\n * Get the crop box position and size data.\n * @returns {Object} The result crop box data.\n */\n getCropBoxData: function getCropBoxData() {\n var cropBoxData = this.cropBoxData;\n var data;\n\n if (this.ready && this.cropped) {\n data = {\n left: cropBoxData.left,\n top: cropBoxData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n }\n\n return data || {};\n },\n\n /**\n * Set the crop box position and size with new data.\n * @param {Object} data - The new crop box data.\n * @returns {Cropper} this\n */\n setCropBoxData: function setCropBoxData(data) {\n var cropBoxData = this.cropBoxData;\n var aspectRatio = this.options.aspectRatio;\n var widthChanged;\n var heightChanged;\n\n if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n cropBoxData.left = data.left;\n }\n\n if (isNumber(data.top)) {\n cropBoxData.top = data.top;\n }\n\n if (isNumber(data.width) && data.width !== cropBoxData.width) {\n widthChanged = true;\n cropBoxData.width = data.width;\n }\n\n if (isNumber(data.height) && data.height !== cropBoxData.height) {\n heightChanged = true;\n cropBoxData.height = data.height;\n }\n\n if (aspectRatio) {\n if (widthChanged) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else if (heightChanged) {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n\n this.renderCropBox();\n }\n\n return this;\n },\n\n /**\n * Get a canvas drawn the cropped image.\n * @param {Object} [options={}] - The config options.\n * @returns {HTMLCanvasElement} - The result canvas.\n */\n getCroppedCanvas: function getCroppedCanvas() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (!this.ready || !window.HTMLCanvasElement) {\n return null;\n }\n\n var canvasData = this.canvasData;\n var source = getSourceCanvas(this.image, this.imageData, canvasData, options); // Returns the source canvas if it is not cropped.\n\n if (!this.cropped) {\n return source;\n }\n\n var _this$getData = this.getData(),\n initialX = _this$getData.x,\n initialY = _this$getData.y,\n initialWidth = _this$getData.width,\n initialHeight = _this$getData.height;\n\n var ratio = source.width / Math.floor(canvasData.naturalWidth);\n\n if (ratio !== 1) {\n initialX *= ratio;\n initialY *= ratio;\n initialWidth *= ratio;\n initialHeight *= ratio;\n }\n\n var aspectRatio = initialWidth / initialHeight;\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.maxWidth || Infinity,\n height: options.maxHeight || Infinity\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.minWidth || 0,\n height: options.minHeight || 0\n }, 'cover');\n\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.width || (ratio !== 1 ? source.width : initialWidth),\n height: options.height || (ratio !== 1 ? source.height : initialHeight)\n }),\n width = _getAdjustedSizes.width,\n height = _getAdjustedSizes.height;\n\n width = Math.min(maxSizes.width, Math.max(minSizes.width, width));\n height = Math.min(maxSizes.height, Math.max(minSizes.height, height));\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = options.fillColor || 'transparent';\n context.fillRect(0, 0, width, height);\n var _options$imageSmoothi = options.imageSmoothingEnabled,\n imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi,\n imageSmoothingQuality = options.imageSmoothingQuality;\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n\n if (imageSmoothingQuality) {\n context.imageSmoothingQuality = imageSmoothingQuality;\n } // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\n\n\n var sourceWidth = source.width;\n var sourceHeight = source.height; // Source canvas parameters\n\n var srcX = initialX;\n var srcY = initialY;\n var srcWidth;\n var srcHeight; // Destination canvas parameters\n\n var dstX;\n var dstY;\n var dstWidth;\n var dstHeight;\n\n if (srcX <= -initialWidth || srcX > sourceWidth) {\n srcX = 0;\n srcWidth = 0;\n dstX = 0;\n dstWidth = 0;\n } else if (srcX <= 0) {\n dstX = -srcX;\n srcX = 0;\n srcWidth = Math.min(sourceWidth, initialWidth + srcX);\n dstWidth = srcWidth;\n } else if (srcX <= sourceWidth) {\n dstX = 0;\n srcWidth = Math.min(initialWidth, sourceWidth - srcX);\n dstWidth = srcWidth;\n }\n\n if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) {\n srcY = 0;\n srcHeight = 0;\n dstY = 0;\n dstHeight = 0;\n } else if (srcY <= 0) {\n dstY = -srcY;\n srcY = 0;\n srcHeight = Math.min(sourceHeight, initialHeight + srcY);\n dstHeight = srcHeight;\n } else if (srcY <= sourceHeight) {\n dstY = 0;\n srcHeight = Math.min(initialHeight, sourceHeight - srcY);\n dstHeight = srcHeight;\n }\n\n var params = [srcX, srcY, srcWidth, srcHeight]; // Avoid \"IndexSizeError\"\n\n if (dstWidth > 0 && dstHeight > 0) {\n var scale = width / initialWidth;\n params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\n } // All the numerical parameters should be integer for `drawImage`\n // https://github.com/fengyuanchen/cropper/issues/476\n\n\n context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n return canvas;\n },\n\n /**\n * Change the aspect ratio of the crop box.\n * @param {number} aspectRatio - The new aspect ratio.\n * @returns {Cropper} this\n */\n setAspectRatio: function setAspectRatio(aspectRatio) {\n var options = this.options;\n\n if (!this.disabled && !isUndefined(aspectRatio)) {\n // 0 -> NaN\n options.aspectRatio = Math.max(0, aspectRatio) || NaN;\n\n if (this.ready) {\n this.initCropBox();\n\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n }\n\n return this;\n },\n\n /**\n * Change the drag mode.\n * @param {string} mode - The new drag mode.\n * @returns {Cropper} this\n */\n setDragMode: function setDragMode(mode) {\n var options = this.options,\n dragBox = this.dragBox,\n face = this.face;\n\n if (this.ready && !this.disabled) {\n var croppable = mode === DRAG_MODE_CROP;\n var movable = options.movable && mode === DRAG_MODE_MOVE;\n mode = croppable || movable ? mode : DRAG_MODE_NONE;\n options.dragMode = mode;\n setData(dragBox, DATA_ACTION, mode);\n toggleClass(dragBox, CLASS_CROP, croppable);\n toggleClass(dragBox, CLASS_MOVE, movable);\n\n if (!options.cropBoxMovable) {\n // Sync drag mode to crop box when it is not movable\n setData(face, DATA_ACTION, mode);\n toggleClass(face, CLASS_CROP, croppable);\n toggleClass(face, CLASS_MOVE, movable);\n }\n }\n\n return this;\n }\n };\n\n var AnotherCropper = WINDOW.Cropper;\n\n var Cropper = /*#__PURE__*/function () {\n /**\n * Create a new Cropper.\n * @param {Element} element - The target element for cropping.\n * @param {Object} [options={}] - The configuration options.\n */\n function Cropper(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Cropper);\n\n if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\n throw new Error('The first argument is required and must be an or element.');\n }\n\n this.element = element;\n this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n this.cropped = false;\n this.disabled = false;\n this.pointers = {};\n this.ready = false;\n this.reloading = false;\n this.replaced = false;\n this.sized = false;\n this.sizing = false;\n this.init();\n }\n\n _createClass(Cropper, [{\n key: \"init\",\n value: function init() {\n var element = this.element;\n var tagName = element.tagName.toLowerCase();\n var url;\n\n if (element[NAMESPACE]) {\n return;\n }\n\n element[NAMESPACE] = this;\n\n if (tagName === 'img') {\n this.isImg = true; // e.g.: \"img/picture.jpg\"\n\n url = element.getAttribute('src') || '';\n this.originalUrl = url; // Stop when it's a blank image\n\n if (!url) {\n return;\n } // e.g.: \"https://example.com/img/picture.jpg\"\n\n\n url = element.src;\n } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n url = element.toDataURL();\n }\n\n this.load(url);\n }\n }, {\n key: \"load\",\n value: function load(url) {\n var _this = this;\n\n if (!url) {\n return;\n }\n\n this.url = url;\n this.imageData = {};\n var element = this.element,\n options = this.options;\n\n if (!options.rotatable && !options.scalable) {\n options.checkOrientation = false;\n } // Only IE10+ supports Typed Arrays\n\n\n if (!options.checkOrientation || !window.ArrayBuffer) {\n this.clone();\n return;\n } // Detect the mime type of the image directly if it is a Data URL\n\n\n if (REGEXP_DATA_URL.test(url)) {\n // Read ArrayBuffer from Data URL of JPEG images directly for better performance\n if (REGEXP_DATA_URL_JPEG.test(url)) {\n this.read(dataURLToArrayBuffer(url));\n } else {\n // Only a JPEG image may contains Exif Orientation information,\n // the rest types of Data URLs are not necessary to check orientation at all.\n this.clone();\n }\n\n return;\n } // 1. Detect the mime type of the image by a XMLHttpRequest.\n // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image.\n\n\n var xhr = new XMLHttpRequest();\n var clone = this.clone.bind(this);\n this.reloading = true;\n this.xhr = xhr; // 1. Cross origin requests are only supported for protocol schemes:\n // http, https, data, chrome, chrome-extension.\n // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy\n // in some browsers as IE11 and Safari.\n\n xhr.onabort = clone;\n xhr.onerror = clone;\n xhr.ontimeout = clone;\n\n xhr.onprogress = function () {\n // Abort the request directly if it not a JPEG image for better performance\n if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\n xhr.abort();\n }\n };\n\n xhr.onload = function () {\n _this.read(xhr.response);\n };\n\n xhr.onloadend = function () {\n _this.reloading = false;\n _this.xhr = null;\n }; // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\n\n\n if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\n url = addTimestamp(url);\n } // The third parameter is required for avoiding side-effect (#682)\n\n\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.withCredentials = element.crossOrigin === 'use-credentials';\n xhr.send();\n }\n }, {\n key: \"read\",\n value: function read(arrayBuffer) {\n var options = this.options,\n imageData = this.imageData; // Reset the orientation value to its default value 1\n // as some iOS browsers will render image with its orientation\n\n var orientation = resetAndGetOrientation(arrayBuffer);\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n\n if (orientation > 1) {\n // Generate a new URL which has the default orientation value\n this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\n\n var _parseOrientation = parseOrientation(orientation);\n\n rotate = _parseOrientation.rotate;\n scaleX = _parseOrientation.scaleX;\n scaleY = _parseOrientation.scaleY;\n }\n\n if (options.rotatable) {\n imageData.rotate = rotate;\n }\n\n if (options.scalable) {\n imageData.scaleX = scaleX;\n imageData.scaleY = scaleY;\n }\n\n this.clone();\n }\n }, {\n key: \"clone\",\n value: function clone() {\n var element = this.element,\n url = this.url;\n var crossOrigin = element.crossOrigin;\n var crossOriginUrl = url;\n\n if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\n if (!crossOrigin) {\n crossOrigin = 'anonymous';\n } // Bust cache when there is not a \"crossOrigin\" property (#519)\n\n\n crossOriginUrl = addTimestamp(url);\n }\n\n this.crossOrigin = crossOrigin;\n this.crossOriginUrl = crossOriginUrl;\n var image = document.createElement('img');\n\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n\n image.src = crossOriginUrl || url;\n image.alt = element.alt || 'The image to crop';\n this.image = image;\n image.onload = this.start.bind(this);\n image.onerror = this.stop.bind(this);\n addClass(image, CLASS_HIDE);\n element.parentNode.insertBefore(image, element.nextSibling);\n }\n }, {\n key: \"start\",\n value: function start() {\n var _this2 = this;\n\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n this.sizing = true; // Match all browsers that use WebKit as the layout engine in iOS devices,\n // such as Safari for iOS, Chrome for iOS, and in-app browsers.\n\n var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent);\n\n var done = function done(naturalWidth, naturalHeight) {\n assign(_this2.imageData, {\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n aspectRatio: naturalWidth / naturalHeight\n });\n _this2.initialImageData = assign({}, _this2.imageData);\n _this2.sizing = false;\n _this2.sized = true;\n\n _this2.build();\n }; // Most modern browsers (excepts iOS WebKit)\n\n\n if (image.naturalWidth && !isIOSWebKit) {\n done(image.naturalWidth, image.naturalHeight);\n return;\n }\n\n var sizingImage = document.createElement('img');\n var body = document.body || document.documentElement;\n this.sizingImage = sizingImage;\n\n sizingImage.onload = function () {\n done(sizingImage.width, sizingImage.height);\n\n if (!isIOSWebKit) {\n body.removeChild(sizingImage);\n }\n };\n\n sizingImage.src = image.src; // iOS WebKit will convert the image automatically\n // with its orientation once append it into DOM (#279)\n\n if (!isIOSWebKit) {\n sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n body.appendChild(sizingImage);\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n image.parentNode.removeChild(image);\n this.image = null;\n }\n }, {\n key: \"build\",\n value: function build() {\n if (!this.sized || this.ready) {\n return;\n }\n\n var element = this.element,\n options = this.options,\n image = this.image; // Create cropper elements\n\n var container = element.parentNode;\n var template = document.createElement('div');\n template.innerHTML = TEMPLATE;\n var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\n var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\n var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\n this.container = container;\n this.cropper = cropper;\n this.canvas = canvas;\n this.dragBox = dragBox;\n this.cropBox = cropBox;\n this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\n this.face = face;\n canvas.appendChild(image); // Hide the original image\n\n addClass(element, CLASS_HIDDEN); // Inserts the cropper after to the current image\n\n container.insertBefore(cropper, element.nextSibling); // Show the image if is hidden\n\n if (!this.isImg) {\n removeClass(image, CLASS_HIDE);\n }\n\n this.initPreview();\n this.bind();\n options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\n options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\n options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\n addClass(cropBox, CLASS_HIDDEN);\n\n if (!options.guides) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\n }\n\n if (!options.center) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\n }\n\n if (options.background) {\n addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\n }\n\n if (!options.highlight) {\n addClass(face, CLASS_INVISIBLE);\n }\n\n if (options.cropBoxMovable) {\n addClass(face, CLASS_MOVE);\n setData(face, DATA_ACTION, ACTION_ALL);\n }\n\n if (!options.cropBoxResizable) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\n }\n\n this.render();\n this.ready = true;\n this.setDragMode(options.dragMode);\n\n if (options.autoCrop) {\n this.crop();\n }\n\n this.setData(options.data);\n\n if (isFunction(options.ready)) {\n addListener(element, EVENT_READY, options.ready, {\n once: true\n });\n }\n\n dispatchEvent(element, EVENT_READY);\n }\n }, {\n key: \"unbuild\",\n value: function unbuild() {\n if (!this.ready) {\n return;\n }\n\n this.ready = false;\n this.unbind();\n this.resetPreview();\n this.cropper.parentNode.removeChild(this.cropper);\n removeClass(this.element, CLASS_HIDDEN);\n }\n }, {\n key: \"uncreate\",\n value: function uncreate() {\n if (this.ready) {\n this.unbuild();\n this.ready = false;\n this.cropped = false;\n } else if (this.sizing) {\n this.sizingImage.onload = null;\n this.sizing = false;\n this.sized = false;\n } else if (this.reloading) {\n this.xhr.onabort = null;\n this.xhr.abort();\n } else if (this.image) {\n this.stop();\n }\n }\n /**\n * Get the no conflict cropper class.\n * @returns {Cropper} The cropper class.\n */\n\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Cropper = AnotherCropper;\n return Cropper;\n }\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n assign(DEFAULTS, isPlainObject(options) && options);\n }\n }]);\n\n return Cropper;\n }();\n\n assign(Cropper.prototype, render, preview, events, handlers, change, methods);\n\n return Cropper;\n\n})));\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./vue-avatar-cropper.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./vue-avatar-cropper.vue?vue&type=style&index=0&lang=scss&\""],"sourceRoot":""}