{"version":3,"sources":["webpack:///./src/views/cropper.vue","webpack:///./src/views/cropper.vue?c41e","webpack:///./node_modules/vue-cropperjs/dist/VueCropper.js","webpack:///./node_modules/cropperjs/dist/cropper.js","webpack:///./src/components/topbar.vue","webpack:///./src/components/topbar.vue?5134","webpack:///./src/assets/home.png"],"names":["class","_createBlock","_component_ion_page","id","_createVNode","_component_ion_content","fullscreen","_component_topbar","bigtitle","title","showBack","rightTitle","rightevent","$options","_createElementVNode","_hoisted_1","_component_vue_cropper","ref","src","_ctx","state","form","photo","aspect-ratio","name","mixins","config","globalMixin","components","IonContent","IonPage","topbar","VueCropper","data","methods","change","coordinates","canvas","console","log","objdata","this","getAuthObj","icon","$refs","cropper","getCroppedCanvas","toDataURL","apiUrl","apiConfig","updateUserIcon","$store","dispatch","TIMEOUT_CODE","sendGAEvent","userInfo","result","$router","replace","path","timeoutEvent","ionViewDidEnter","exitApp","$","css","window","innerHeight","sendGAPageView","__exports__","render","Object","defineProperty","exports","value","_vue","_cropperjs","_cropperjs2","_interopRequireDefault","obj","__esModule","default","_objectWithoutProperties","keys","target","i","indexOf","prototype","hasOwnProperty","call","previewPropType","String","Array","Element","NodeList","crossorigin","undefined","h","style","containerStyle","alt","imgStyle","props","type","viewMode","Number","dragMode","initialAspectRatio","aspectRatio","preview","responsive","Boolean","restore","checkCrossOrigin","checkOrientation","modal","guides","center","highlight","background","autoCrop","autoCropArea","movable","rotatable","scalable","zoomable","zoomOnTouch","zoomOnWheel","wheelZoomRatio","cropBoxMovable","cropBoxResizable","toggleDragModeOnDblclick","minCanvasWidth","minCanvasHeight","minCropBoxWidth","minCropBoxHeight","minContainerWidth","minContainerHeight","ready","Function","cropstart","cropmove","cropend","crop","zoom","mounted","_$options$props","key","img","reset","clear","initCrop","url","onlyColorChanged","arguments","length","enable","disable","destroy","move","offsetX","offsetY","moveTo","x","y","relativeZoom","ratio","_originalEvent","zoomTo","rotate","degree","rotateTo","scaleX","_scaleX","scaleY","_scaleY","scale","getData","rounded","setData","getContainerData","getImageData","getCanvasData","setCanvasData","getCropBoxData","setCropBoxData","options","setAspectRatio","setDragMode","mode","global","factory","module","ownKeys","object","enumerableOnly","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread2","source","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_typeof","Symbol","iterator","constructor","_classCallCheck","instance","Constructor","TypeError","_defineProperties","descriptor","configurable","writable","_createClass","protoProps","staticProps","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","isArray","_arrayLikeToArray","iter","from","o","minLen","n","toString","slice","test","len","arr2","IS_BROWSER","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","NaN","TEMPLATE","isNaN","isNumber","isPositiveNumber","Infinity","isUndefined","isObject","isPlainObject","_constructor","error","isFunction","toArray","callback","assign","_len","args","_key","arg","REGEXP_DECIMALS","normalizeDecimalNumber","times","Math","round","REGEXP_SUFFIX","setStyle","element","styles","property","hasClass","classList","contains","className","addClass","elem","add","trim","removeClass","remove","toggleClass","added","REGEXP_CAMEL_CASE","toParamCase","toLowerCase","dataset","getAttribute","setAttribute","removeData","removeAttribute","REGEXP_SPACES","onceSupported","supported","once","listener","get","set","addEventListener","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","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","getPointer","_ref2","endOnly","pageX","pageY","end","getPointersCenter","count","_ref3","getAdjustedSizes","_ref4","height","width","isValidWidth","isValidHeight","adjustedWidth","getRotatedSizes","_ref5","arc","PI","sinArc","sin","cosArc","cos","newWidth","newHeight","getSourceCanvas","image","_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","createElement","context","getContext","maxSizes","minSizes","min","max","destMaxSizes","destMinSizes","destWidth","destHeight","params","fillStyle","fillRect","save","translate","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","viewBox","appendChild","viewBoxImage","previews","ownerDocument","querySelectorAll","querySelector","el","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","ratioX","ratioY","dragBox","_this","delta","preventDefault","wheeling","setTimeout","deltaY","wheelDelta","buttons","button","pointerType","ctrlKey","action","changedTouches","touch","identifier","originalEvent","cropping","right","bottom","renderable","shiftKey","range","check","side","p","initialImageData","hasSameSize","isImg","replaced","uncreate","load","originalUrl","_this$canvasData","pivot","oldRatio","sized","widthChanged","heightChanged","HTMLCanvasElement","_this$getData","initialX","initialY","initialWidth","initialHeight","_options$imageSmoothi","srcWidth","srcHeight","dstX","dstY","dstWidth","dstHeight","sourceWidth","sourceHeight","srcX","srcY","croppable","AnotherCropper","Cropper","tagName","Error","reloading","sizing","init","read","clone","xhr","XMLHttpRequest","onabort","onerror","ontimeout","onprogress","getResponseHeader","abort","onload","response","onloadend","open","responseType","withCredentials","send","_parseOrientation","stop","parentNode","insertBefore","nextSibling","_this2","isIOSWebKit","navigator","userAgent","done","build","sizingImage","body","removeChild","template","getElementsByClassName","unbuild","_hoisted_8","_hoisted_15","_imports_0","_hoisted_17","_hoisted_21","_createElementBlock","big","$props","isPC","noborder","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","onClick","_hoisted_6","_hoisted_7","_hoisted_10","$data","_hoisted_14","token","_hoisted_19","deviceType","_hoisted_20","logo","require","goback","backevent","go","rightEvent","closeEvent","logoutEvent","shareBtnEvent","shareEvent","shareData","tipEvent","homeEvent"],"mappings":"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","file":"js/chunk-101ff9bf.92241a36.js","sourcesContent":["\r\n\r\n\r\n","import { render } from \"./cropper.vue?vue&type=template&id=c0142f7c\"\nimport script from \"./cropper.vue?vue&type=script&lang=js\"\nexport * from \"./cropper.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\ritchies-shoppo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _vue = require('vue');\n\nvar _cropperjs = require('cropperjs');\n\nvar _cropperjs2 = _interopRequireDefault(_cropperjs);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nvar previewPropType = typeof window === 'undefined' ? [String, Array] : [String, Array, Element, NodeList];\n\nexports.default = {\n render: function render() {\n var crossorigin = this.crossorigin || undefined;\n\n return (0, _vue.h)('div', { style: this.containerStyle }, [(0, _vue.h)('img', {\n ref: 'img',\n src: this.src,\n alt: this.alt || 'image',\n style: [{ 'max-width': '100%' }, this.imgStyle],\n crossorigin: crossorigin\n })]);\n },\n\n props: {\n containerStyle: Object,\n src: {\n type: String,\n default: ''\n },\n alt: String,\n imgStyle: Object,\n\n viewMode: Number,\n dragMode: String,\n initialAspectRatio: Number,\n aspectRatio: Number,\n data: Object,\n preview: previewPropType,\n responsive: {\n type: Boolean,\n default: true\n },\n restore: {\n type: Boolean,\n default: true\n },\n checkCrossOrigin: {\n type: Boolean,\n default: true\n },\n checkOrientation: {\n type: Boolean,\n default: true\n },\n crossorigin: {\n type: String\n },\n modal: {\n type: Boolean,\n default: true\n },\n guides: {\n type: Boolean,\n default: true\n },\n center: {\n type: Boolean,\n default: true\n },\n highlight: {\n type: Boolean,\n default: true\n },\n background: {\n type: Boolean,\n default: true\n },\n autoCrop: {\n type: Boolean,\n default: true\n },\n autoCropArea: Number,\n movable: {\n type: Boolean,\n default: true\n },\n rotatable: {\n type: Boolean,\n default: true\n },\n scalable: {\n type: Boolean,\n default: true\n },\n zoomable: {\n type: Boolean,\n default: true\n },\n zoomOnTouch: {\n type: Boolean,\n default: true\n },\n zoomOnWheel: {\n type: Boolean,\n default: true\n },\n wheelZoomRatio: Number,\n cropBoxMovable: {\n type: Boolean,\n default: true\n },\n cropBoxResizable: {\n type: Boolean,\n default: true\n },\n toggleDragModeOnDblclick: {\n type: Boolean,\n default: true\n },\n\n minCanvasWidth: Number,\n minCanvasHeight: Number,\n minCropBoxWidth: Number,\n minCropBoxHeight: Number,\n minContainerWidth: Number,\n minContainerHeight: Number,\n\n ready: Function,\n cropstart: Function,\n cropmove: Function,\n cropend: Function,\n crop: Function,\n zoom: Function\n },\n mounted: function mounted() {\n var _$options$props = this.$options.props,\n containerStyle = _$options$props.containerStyle,\n src = _$options$props.src,\n alt = _$options$props.alt,\n imgStyle = _$options$props.imgStyle,\n data = _objectWithoutProperties(_$options$props, ['containerStyle', 'src', 'alt', 'imgStyle']);\n\n var props = {};\n\n for (var key in data) {\n if (this[key] !== undefined) {\n props[key] = this[key];\n }\n }\n\n this.cropper = new _cropperjs2.default(this.$refs.img, props);\n },\n\n methods: {\n reset: function reset() {\n return this.cropper.reset();\n },\n clear: function clear() {\n return this.cropper.clear();\n },\n initCrop: function initCrop() {\n return this.cropper.crop();\n },\n replace: function replace(url) {\n var onlyColorChanged = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n return this.cropper.replace(url, onlyColorChanged);\n },\n enable: function enable() {\n return this.cropper.enable();\n },\n disable: function disable() {\n return this.cropper.disable();\n },\n destroy: function destroy() {\n return this.cropper.destroy();\n },\n move: function move(offsetX, offsetY) {\n return this.cropper.move(offsetX, offsetY);\n },\n moveTo: function moveTo(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n\n return this.cropper.moveTo(x, y);\n },\n relativeZoom: function relativeZoom(ratio, _originalEvent) {\n return this.cropper.zoom(ratio, _originalEvent);\n },\n zoomTo: function zoomTo(ratio, _originalEvent) {\n return this.cropper.zoomTo(ratio, _originalEvent);\n },\n rotate: function rotate(degree) {\n return this.cropper.rotate(degree);\n },\n rotateTo: function rotateTo(degree) {\n return this.cropper.rotateTo(degree);\n },\n scaleX: function scaleX(_scaleX) {\n return this.cropper.scaleX(_scaleX);\n },\n scaleY: function scaleY(_scaleY) {\n return this.cropper.scaleY(_scaleY);\n },\n scale: function scale(scaleX) {\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n\n return this.cropper.scale(scaleX, scaleY);\n },\n getData: function getData() {\n var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n return this.cropper.getData(rounded);\n },\n setData: function setData(data) {\n return this.cropper.setData(data);\n },\n getContainerData: function getContainerData() {\n return this.cropper.getContainerData();\n },\n getImageData: function getImageData() {\n return this.cropper.getImageData();\n },\n getCanvasData: function getCanvasData() {\n return this.cropper.getCanvasData();\n },\n setCanvasData: function setCanvasData(data) {\n return this.cropper.setCanvasData(data);\n },\n getCropBoxData: function getCropBoxData() {\n return this.cropper.getCropBoxData();\n },\n setCropBoxData: function setCropBoxData(data) {\n return this.cropper.setCropBoxData(data);\n },\n getCroppedCanvas: function getCroppedCanvas() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n return this.cropper.getCroppedCanvas(options);\n },\n setAspectRatio: function setAspectRatio(aspectRatio) {\n return this.cropper.setAspectRatio(aspectRatio);\n },\n setDragMode: function setDragMode(mode) {\n return this.cropper.setDragMode(mode);\n }\n }\n};","/*!\n * Cropper.js v1.5.12\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2021-06-12T08:00:17.411Z\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 ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\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 _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 _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\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) 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 ratioX = container.offsetWidth / containerData.width;\n var ratioY = container.offsetHeight / containerData.height;\n var ratio = Math.abs(ratioX - 1) > Math.abs(ratioY - 1) ? ratioX : ratioY; // Resize when width changed or height changed\n\n if (ratio !== 1) {\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","\r\n\r\n\r\n","import { render } from \"./topbar.vue?vue&type=template&id=97cfd01c\"\nimport script from \"./topbar.vue?vue&type=script&lang=js\"\nexport * from \"./topbar.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"E:\\\\ritchies-shoppo\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJkAAACZCAMAAAALgmiIAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAABXUExURQAAAAEBAwMDCAMFDAECBAECBAEBA0dwTAAAAQEBBCI7hSE6gx83fCI7hhwxbhwwahwwbSE5gCI7hv///6SuzY6bwU1hnThPkvHz+OTm8HGBscrP4ixEixlCqREAAAASdFJOUwEjCisGDhsAAxTiyJL1cUZasXX0/bwAAAgFSURBVHja5dzptps2EABgmS0Gsep6ucZ+/+csINCOGAmEk9PJj57Ebe+XGWnAthj0Z0egrdj1Pz8IdeVxEA/tZF3XYycO+bNmQBS3ddlhXBQVqYoC466s2zhSecFlEitqyq4g5ii6sokkXEiZyEqaGlfEHhWum8QXh5xdUx6ackvFdGUjZi6ATGDFZUFcoihjAXewTHC1mLgHbp1tyM2VtAXxi6JN3GzIxRXVvq7JVkcuNgSD0TrucdG88ZrulvGExZjsDxyD04aACYvAbWKriUTAtCEYrCnIUVE0MBqCuJKSHBllArEhACzD5NjAGYCGNmFJU5GjowJUFNlgASqpV9RVFhgGoCE7LO1IqOhSOw1ZYTkm4QLnVhqywJIsJGzcoomFhiywPCyMfHBuoaF1WBoYNmYtXaehVVjSkfDRJas0tAoryRlRrtJMshF2PQcm0LZk7D0bOSvY+z67bKnlpTpNVl3M9URGWITJeYEjIw2ZFllSkjPDvNSQCdaQc6Mx0ZCpxRYnywpTw0V6yqKSnB1lpCcN6bWMq9NlVazXEym1TM7dl8L+TJR6Iq2WLflGtFo9kVrLHcv/+di1CRSaKotqb9f75+fVe9PqaEW2wLxT9nz9jNH7J02hSbLEP2WP3x8a9+lutb/x6MFJSwyyJWVRsRM20eb8LfGGJS2Sk4bklHluzP5XgNzI7UeOHro9E5OMpsyvl/Uy5PZSZDdgT5uTJsqWlMVHwPSAyUgsJQ1JKfO6Yt4XwO97RQZbaMPVU0wa2t0y2KJ6PT6c9qLhlDO5cXDZkLJmF+yp/Y4QJxlppqTJMpoy93eYH5UiZNBd1qVCOZGw/nPn2x9evvdHW3UPJgOuM1Llwh5AwvpvDoAJO3WkueVsLudVlaWuO5O3egEmNpHeVVamumwopusnLBx2W+tvvaMMp3M5qWzemanjMnu8Vhvp41fuZ3fwXXeest2JeDHdrpn8p9+tF/hxwT3ht7a8nIgXs/SD9faEDovQ4Va35OVcZJHbMuu37iOeL8eLJltoEZMty8zl0sQ7Q2+7+TZs3M0LFFtoiBUz97mGPxyb3WbkrJxc1hwLk2jwLdBw2XI1h29N5dLocFGFbc65nIgts9IZ9jz03102Z8pltJvlwBsNtxIBC89bbZezmzS2AUAy52XtSuvYFuAySDvzaAWABiM1NEUWwWRe7bN3enM3yiJFVoSBbV7IlFarylKAzHoNt61Nl/9wkKWqrAoEs98wGe6DmGxuGlsXpyeD3W7v+8eNxtfBZkFz3jYWWQVcyDeX9xz0g6H+yWjvzZzpsgLUmH4frp+TTaugXxrha3OdOcseM+zputbo32R5/37zkGFANx+u4U/HvvFk6+sGadBYkiUgGXn2D/6TwLIHz/GjfwA6Lb8ILLLOKQc+Mth189+Q0XVWesv690uO29NbVhp2QOsru+sf5b0+vrLWIGs8ZR/Tp4y9r6wxyC6esof9k1lH2cUgy4q/QFZkgmy51wAeTworw5nhLigrd8ne83c5+2SlJhvKmbW7ZHfQy5tbMzPcbWew0yNBZdVFldEtgL8uw1lueFcHXGhBZaUqm9tG+3VZKzUNvjlBCy2kbFpmqfKJy7gFsu7Lsi4TN8AfYaG1X5a1wjL7I8kuxVdlxUWVsYUG2Z0BZWUmLDPxs+1B1nxV1gjLTPo+YCwnhsre99vyyyRbe9naZqViit+hDLKshsq0uINetkWdCd1M+t5pLOf2HggmG9a/uMyk7+rGctZfk9VyMaXvN3NQ0n7NP7qHvWxPWZ4av3mddud20u72gw93z3MR9YXtTFEmlDPeTFr//lXjdftAX15LWSwWE6lnD2BJCxI1X/9Xw3mNKWmXr5xzvNCU6ec1xKQ1558NJY2UMqSfC6JJ+8J5WiFlV+XE0rwHpqTFp59BjpeUaWeplKSdfXC1NaRMPbM3J608vZZayrRzjjRp8anPB8RyypD5bChN2pn7s2qMKdPO085XzxP7bX2Zr5gr52nFnjbW87TWMSyyqZZptHE6mtUz7k6BdbFYS6NMq+cpuwDHK7U0Ph+QnkdjsNT2fIBez+DXgqH3r9XS/BwKq2cTllY067U0P7vDaUELimMNhraed+JLLSCNw0y1XHtGTKB1wdqFHbb2XJ1AC/Q8ugCDPFdnpNUBnuGvN2Grz2+KtObwuQfN3C4YbPv5TWGpCbSDKzpUUswY8JlX/pwwp40VPXC+xlRJDYYcnq2WaPFBM0nmhG3DbM+jK7QWH7PCgDDrM/yMNtt2l3QsJHVtw+xzD1Sa69gnxTUWEgzbmBUx02hFJ5t33qZ8ja6pklK7cJgVIdC0tMW111yqyaUnzHm+hk4T0ha3zrO82lhPmOdMEpXG0kZtcd2B5591NF2za0oYBAaYfSOmTbANmQPMjJuzJbiUhHnMvtFoum1IXYlX5+zhso4FFnMBYcAZS5JNxsVsNCGdTbgMJ+Shu/bOWFLTtm6zxMJiLljCHGZ5abapi1yALNW1f5aXNMhOsE24KXNm3oWiOIu5kqPmnylpE2wUR3PHiEzEVBNLdh00M06eS0htCm7xZZf5H+yPc4Eluw6ZsyfbeOIWHvdJwVRSuo6dTWiwLZlbcFSYZ/w3KVeNLGeX3wxMjovSOXvpSMkXJzVNKoEVZgamOjeU4qhuqW3KQOn854nGCjE3VBsBu+gm3mKcRTMqUYfonjaflusMcd3DOmSmrxCJZeTw/3oO8l89O/qUedv/AXbBwJPD8b01AAAAAElFTkSuQmCC\""],"sourceRoot":""}