{"version":3,"sources":["webpack:///./src/assets/js/dadata.js","webpack:///./node_modules/core-js/internals/native-url.js","webpack:///./node_modules/core-js/internals/string-repeat.js","webpack:///./node_modules/core-js/modules/web.url.js","webpack:///./src/components/Cropper.vue?a2b7","webpack:///src/components/Cropper.vue","webpack:///./src/components/Cropper.vue?9348","webpack:///./src/components/Cropper.vue?f468","webpack:///./src/components/Cropper.vue?89bb","webpack:///./node_modules/core-js/internals/this-number-value.js","webpack:///./node_modules/lodash/now.js","webpack:///./node_modules/core-js/internals/string-punycode-to-ascii.js","webpack:///./node_modules/core-js/modules/web.url-search-params.js","webpack:///./node_modules/core-js/internals/get-iterator.js","webpack:///./node_modules/core-js/modules/es.array.join.js","webpack:///./src/components/InputFile.vue?9f0f","webpack:///src/components/InputFile.vue","webpack:///./src/components/InputFile.vue?9c5b","webpack:///./src/components/InputFile.vue?8c00","webpack:///./node_modules/lodash/debounce.js","webpack:///./src/components/InputFile.vue?9e8f","webpack:///./node_modules/lodash/toNumber.js","webpack:///./node_modules/core-js/modules/es.number.to-fixed.js","webpack:///./node_modules/cropperjs/dist/cropper.js","webpack:///./src/components/Cropper.vue?4791","webpack:///./node_modules/lodash/isSymbol.js"],"names":["markQueryInStr","str","query","match","strLow","toLowerCase","rex","RegExp","points","exec","i","index","toUpperCase","length","slice","getAddresses","searchQuery","data","JSON","stringify","count","locations","country","axios","method","url","headers","Accept","Authorization","fails","wellKnownSymbol","IS_PURE","ITERATOR","module","exports","URL","searchParams","result","pathname","forEach","value","key","toJSON","sort","href","get","String","URLSearchParams","username","host","hash","undefined","toInteger","requireObjectCoercible","repeat","this","n","Infinity","RangeError","EOF","$","DESCRIPTORS","USE_NATIVE_URL","global","defineProperties","redefine","anInstance","has","assign","arrayFrom","codeAt","toASCII","setToStringTag","URLSearchParamsModule","InternalStateModule","NativeURL","getInternalSearchParamsState","getState","setInternalState","set","getInternalURLState","getterFor","floor","Math","pow","INVALID_AUTHORITY","INVALID_SCHEME","INVALID_HOST","INVALID_PORT","ALPHA","ALPHANUMERIC","DIGIT","HEX_START","OCT","DEC","HEX","FORBIDDEN_HOST_CODE_POINT","FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT","LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE","TAB_AND_NEW_LINE","parseHost","input","codePoints","charAt","parseIPv6","isSpecial","test","parseIPv4","percentEncode","C0ControlPercentEncodeSet","partsLength","numbers","part","radix","number","ipv4","parts","split","pop","parseInt","push","numbersSeen","ipv4Piece","swaps","swap","address","pieceIndex","compress","pointer","char","findLongestZeroSequence","ipv6","maxIndex","maxLength","currStart","currLength","serializeHost","ignore0","unshift","join","toString","fragmentPercentEncodeSet","pathPercentEncodeSet","userinfoPercentEncodeSet","code","encodeURIComponent","specialSchemes","ftp","file","http","https","ws","wss","scheme","includesCredentials","password","cannotHaveUsernamePasswordPort","cannotBeABaseURL","isWindowsDriveLetter","string","normalized","second","startsWithWindowsDriveLetter","third","shortenURLsPath","path","pathSize","isSingleDot","segment","isDoubleDot","SCHEME_START","SCHEME","NO_SCHEME","SPECIAL_RELATIVE_OR_AUTHORITY","PATH_OR_AUTHORITY","RELATIVE","RELATIVE_SLASH","SPECIAL_AUTHORITY_SLASHES","SPECIAL_AUTHORITY_IGNORE_SLASHES","AUTHORITY","HOST","HOSTNAME","PORT","FILE","FILE_SLASH","FILE_HOST","PATH_START","PATH","CANNOT_BE_A_BASE_URL_PATH","QUERY","FRAGMENT","parseURL","stateOverride","base","bufferCodePoints","failure","state","buffer","seenAt","seenBracket","seenPasswordToken","port","fragment","replace","codePoint","encodedCodePoints","shift","URLConstructor","baseState","that","arguments","urlString","type","TypeError","searchParamsState","updateSearchParams","updateURL","serializeURL","call","origin","getOrigin","protocol","getProtocol","getUsername","getPassword","getHost","hostname","getHostname","getPort","getPathname","search","getSearch","getSearchParams","getHash","URLPrototype","prototype","output","error","accessorDescriptor","getter","setter","configurable","enumerable","nativeCreateObjectURL","createObjectURL","nativeRevokeObjectURL","revokeObjectURL","blob","apply","forced","sham","render","_vm","_h","$createElement","_c","_self","directives","name","rawName","expression","staticClass","class","hideCropper","_v","ref","attrs","objectUrl","on","resetCropper","rotateLeft","rotateRight","_t","staticRenderFns","props","img","Boolean","cropper","previewCropped","selectedFile","debouncedUpdatePreview","methods","reset","rotate","setupCropper","destroy","window","$nextTick","setupCropperInstance","$emit","aspectRatio","autoCropArea","minContainerHeight","size","minContainerWidth","minCropBoxHeight","minCropBoxWidth","crop","updatePreview","maxWidth","maxHeight","fillColor","canvas","toDataURL","mounted","component","classof","root","now","Date","maxInt","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexNonASCII","regexSeparators","OVERFLOW_ERROR","baseMinusTMin","stringFromCharCode","fromCharCode","ucs2decode","counter","charCodeAt","extra","digitToBasic","digit","adapt","delta","numPoints","firstTime","k","encode","currentValue","inputLength","bias","basicLength","handledCPCount","m","handledCPCountPlusOne","q","t","qMinusT","baseMinusT","label","encoded","labels","getBuiltIn","redefineAll","createIteratorConstructor","hasOwn","bind","anObject","isObject","create","createPropertyDescriptor","getIterator","getIteratorMethod","$fetch","Headers","URL_SEARCH_PARAMS","URL_SEARCH_PARAMS_ITERATOR","getInternalParamsState","getInternalIteratorState","plus","sequences","Array","percentSequence","bytes","percentDecode","sequence","decodeURIComponent","deserialize","it","find","replacer","serialize","parseSearchParams","attribute","entry","attributes","entries","validateArgumentsLength","passed","required","URLSearchParamsIterator","params","kind","iterator","step","next","done","URLSearchParamsConstructor","iteratorMethod","entryIterator","entryNext","first","init","URLSearchParamsPrototype","append","splice","getAll","found","val","entriesIndex","sliceIndex","callback","boundFunction","keys","values","fetch","body","args","IndexedObject","toIndexedObject","arrayMethodIsStrict","nativeJoin","ES3_STRINGS","Object","STRICT_METHOD","target","proto","separator","accept","onChange","domProps","_s","info","maxSize","Number","default","text","sizeError","formatError","computed","mb","toFixed","kb","fileName","hasError","e","files","indexOf","open","$refs","click","getImage","Promise","resolve","reader","onloadend","onerror","reject","readAsDataURL","toNumber","FUNC_ERROR_TEXT","nativeMax","max","nativeMin","min","debounce","func","wait","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","thisArg","leadingEdge","setTimeout","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","clearTimeout","flush","debounced","isInvoking","isSymbol","NAN","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","other","valueOf","isBinary","thisNumberValue","nativeToFixed","x","acc","log","x2","FORCED","fractionDigits","z","j","fractDigits","sign","multiply","c","c2","divide","dataToString","s","factory","_typeof","obj","Symbol","constructor","_classCallCheck","instance","Constructor","_defineProperties","descriptor","writable","defineProperty","_createClass","protoProps","staticProps","_defineProperty","ownKeys","object","enumerableOnly","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","_objectSpread2","source","getOwnPropertyDescriptors","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","isArray","_arrayLikeToArray","iter","from","o","minLen","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","DEFAULTS","viewMode","dragMode","initialAspectRatio","NaN","preview","responsive","restore","checkCrossOrigin","checkOrientation","modal","guides","center","highlight","background","autoCrop","movable","rotatable","scalable","zoomable","zoomOnTouch","zoomOnWheel","wheelZoomRatio","cropBoxMovable","cropBoxResizable","toggleDragModeOnDblclick","minCanvasWidth","minCanvasHeight","ready","cropstart","cropmove","cropend","zoom","TEMPLATE","isNaN","isNumber","isPositiveNumber","isUndefined","hasOwnProperty","isPlainObject","_constructor","isFunction","toArray","_len","_key","arg","REGEXP_DECIMALS","normalizeDecimalNumber","times","round","REGEXP_SUFFIX","setStyle","element","styles","style","property","hasClass","classList","contains","className","addClass","elem","add","trim","removeClass","remove","toggleClass","added","REGEXP_CAMEL_CASE","toParamCase","getData","dataset","getAttribute","setData","setAttribute","removeData","removeAttribute","REGEXP_SPACES","onceSupported","supported","once","listener","addEventListener","removeEventListener","removeListener","handler","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","addTimestamp","timestamp","getTime","getTransforms","_ref","scaleX","scaleY","translateX","translateY","transform","WebkitTransform","msTransform","getMaxZoomRatio","pointers","pointers2","ratios","pointerId","pointer2","x1","abs","startX","y1","startY","endX","y2","endY","z1","sqrt","z2","ratio","a","b","getPointer","_ref2","endOnly","pageX","pageY","end","getPointersCenter","_ref3","getAdjustedSizes","_ref4","height","width","isValidWidth","isValidHeight","adjustedWidth","getRotatedSizes","_ref5","degree","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","_ref8$imageSmoothingE","imageSmoothingEnabled","_ref8$imageSmoothingQ","imageSmoothingQuality","_ref8$maxWidth","_ref8$maxHeight","_ref8$minWidth","minWidth","_ref8$minHeight","minHeight","createElement","context","getContext","maxSizes","minSizes","destMaxSizes","destMinSizes","destWidth","destHeight","fillStyle","fillRect","save","translate","scale","drawImage","map","param","getStringFromCharCode","dataView","start","getUint8","REGEXP_DATA_URL_HEAD","dataURLToArrayBuffer","dataURL","base64","binary","atob","arrayBuffer","ArrayBuffer","uint8","Uint8Array","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","oldLeft","oldTop","limited","limitCanvas","initialImageData","initialCanvasData","sizeLimited","positionLimited","cropBoxData","_getAdjustedSizes","newCanvasLeft","newCanvasTop","minLeft","minTop","maxLeft","maxTop","changed","transformed","_getRotatedSizes","renderImage","limitCropBox","initialCropBoxData","maxCropBoxWidth","maxCropBoxHeight","face","cropBox","disabled","initPreview","crossOrigin","crossOriginUrl","alt","src","viewBox","appendChild","viewBoxImage","previews","ownerDocument","querySelectorAll","querySelector","el","html","innerHTML","cssText","resetPreview","cropBoxWidth","cropBoxHeight","originalWidth","originalHeight","getElementsByTagName","events","onCropStart","cropStart","onWheel","wheel","passive","capture","onDblclick","dblclick","onCropMove","cropMove","onCropEnd","cropEnd","onResize","resize","unbind","handlers","getCanvasData","getCropBoxData","setCanvasData","setCropBoxData","setDragMode","dragBox","_this","preventDefault","wheeling","deltaY","wheelDelta","buttons","button","pointerType","ctrlKey","action","changedTouches","touch","identifier","originalEvent","cropping","change","right","bottom","renderable","shiftKey","range","y","check","side","move","p","clear","hasSameSize","isImg","replaced","uncreate","load","enable","disable","originalUrl","offsetX","offsetY","_this$canvasData","moveTo","_originalEvent","zoomTo","pivot","oldRatio","rotateTo","_scaleX","_scaleY","rounded","getContainerData","getImageData","sized","widthChanged","heightChanged","getCroppedCanvas","HTMLCanvasElement","_this$getData","initialX","initialY","initialWidth","initialHeight","_options$imageSmoothi","srcWidth","srcHeight","dstX","dstY","dstWidth","dstHeight","sourceWidth","sourceHeight","srcX","srcY","setAspectRatio","mode","croppable","AnotherCropper","Cropper","tagName","Error","reloading","sizing","read","clone","xhr","XMLHttpRequest","onabort","ontimeout","onprogress","getResponseHeader","abort","onload","response","responseType","withCredentials","send","_parseOrientation","stop","parentNode","insertBefore","nextSibling","_this2","isIOSWebKit","navigator","userAgent","build","sizingImage","removeChild","template","getElementsByClassName","unbuild","baseGetTag","isObjectLike","symbolTag"],"mappings":"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","file":"js/chunk-189825d2.7a52d08c.js","sourcesContent":["import axios from 'axios'\r\n\r\nfunction join (arr) {\r\n const separator = arguments.length > 1 ? arguments[1] : ', '\r\n return arr.filter(function (n) {\r\n return n\r\n }).join(separator)\r\n}\r\n\r\nfunction formatAddress (address) {\r\n return join([\r\n join([address.settlement_type, address.settlement], ' '),\r\n ((address.city !== address.region && join([address.city_type, address.city], ' ')) || ''),\r\n join([address.region_type, address.region], ' '),\r\n join([address.country], ' ')\r\n ])\r\n}\r\n\r\nfunction markQueryInStr (str, query) {\r\n const strLow = str.toLowerCase()\r\n const rex = new RegExp(query.toLowerCase(), 'g')\r\n const points = []\r\n\r\n let match\r\n while ((match = rex.exec(strLow)) !== null) {\r\n const i = match.index\r\n if (str[i] === str[i].toUpperCase()) {\r\n points[0] = i\r\n points[1] = i + query.length\r\n break\r\n }\r\n }\r\n\r\n if (points.length) {\r\n return str.slice(0, points[0]) + '' + str.slice(points[0], points[1]) + '' + str.slice(points[1])\r\n }\r\n return str\r\n}\r\n\r\nfunction getAddresses ({ searchQuery }) {\r\n const data = JSON.stringify({\r\n query: searchQuery,\r\n count: 5,\r\n locations: [{\r\n country: '*'\r\n }]\r\n })\r\n return axios({\r\n method: 'post',\r\n url: 'https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/address',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json',\r\n Authorization: 'Token 6fad06a72067d00fca8b29fc3f0094579ec47b66'\r\n },\r\n data: data\r\n })\r\n}\r\n\r\nfunction getCities ({ searchQuery, callback }) {\r\n const data = JSON.stringify({\r\n query: searchQuery,\r\n count: 5,\r\n locations: [{\r\n country: '*'\r\n }],\r\n from_bound: { value: 'city' },\r\n to_bound: { value: 'city' }\r\n })\r\n axios({\r\n method: 'post',\r\n url: 'https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/address',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json',\r\n Authorization: 'Token 6fad06a72067d00fca8b29fc3f0094579ec47b66'\r\n },\r\n data: data\r\n })\r\n .then(response => {\r\n const options = response.data.suggestions.map((suggest, i) => {\r\n const data = suggest.data\r\n let label = formatAddress(data)\r\n label = markQueryInStr(label, searchQuery.trim())\r\n return {\r\n id: data.country_iso_code + '_' + (data.region_iso_code || '') + '_' + data.city,\r\n name: label,\r\n customLabel: data.city,\r\n val: {\r\n city: data.city,\r\n countryCode: data.country_iso_code,\r\n cityFiasId: data.city_fias_id || null\r\n }\r\n }\r\n })\r\n callback(null, options)\r\n })\r\n}\r\n\r\nfunction getCurrentLocation () {\r\n return axios({\r\n method: 'get',\r\n url: 'https://suggestions.dadata.ru/suggestions/api/4_1/rs/iplocate/address',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json',\r\n Authorization: 'Token 6fad06a72067d00fca8b29fc3f0094579ec47b66'\r\n }\r\n })\r\n}\r\n\r\nexport {\r\n getCities,\r\n getCurrentLocation,\r\n markQueryInStr,\r\n getAddresses\r\n}\r\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = !fails(function () {\n var url = new URL('b?a=1&b=2&c=3', 'http://a');\n var searchParams = url.searchParams;\n var result = '';\n url.pathname = 'c%20d';\n searchParams.forEach(function (value, key) {\n searchParams['delete']('b');\n result += key + value;\n });\n return (IS_PURE && !url.toJSON)\n || !searchParams.sort\n || url.href !== 'http://a/c%20d?a=1&c=3'\n || searchParams.get('c') !== '3'\n || String(new URLSearchParams('?a=1')) !== 'a=1'\n || !searchParams[ITERATOR]\n // throws in Edge\n || new URL('https://a@b').username !== 'a'\n || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'\n // not punycoded in Edge\n || new URL('http://тест').host !== 'xn--e1aybc'\n // not escaped in Chrome 62-\n || new URL('http://a#б').hash !== '#%D0%B1'\n // fails in Chrome 66-\n || result !== 'a1c3'\n // throws in Safari\n || new URL('http://x', undefined).host !== 'x';\n});\n","'use strict';\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.repeat` method implementation\n// https://tc39.github.io/ecma262/#sec-string.prototype.repeat\nmodule.exports = ''.repeat || function repeat(count) {\n var str = String(requireObjectCoercible(this));\n var result = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.string.iterator');\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar global = require('../internals/global');\nvar defineProperties = require('../internals/object-define-properties');\nvar redefine = require('../internals/redefine');\nvar anInstance = require('../internals/an-instance');\nvar has = require('../internals/has');\nvar assign = require('../internals/object-assign');\nvar arrayFrom = require('../internals/array-from');\nvar codeAt = require('../internals/string-multibyte').codeAt;\nvar toASCII = require('../internals/string-punycode-to-ascii');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar URLSearchParamsModule = require('../modules/web.url-search-params');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar NativeURL = global.URL;\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\nvar setInternalState = InternalStateModule.set;\nvar getInternalURLState = InternalStateModule.getterFor('URL');\nvar floor = Math.floor;\nvar pow = Math.pow;\n\nvar INVALID_AUTHORITY = 'Invalid authority';\nvar INVALID_SCHEME = 'Invalid scheme';\nvar INVALID_HOST = 'Invalid host';\nvar INVALID_PORT = 'Invalid port';\n\nvar ALPHA = /[A-Za-z]/;\nvar ALPHANUMERIC = /[\\d+-.A-Za-z]/;\nvar DIGIT = /\\d/;\nvar HEX_START = /^(0x|0X)/;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\dA-Fa-f]+$/;\n// eslint-disable-next-line no-control-regex\nvar FORBIDDEN_HOST_CODE_POINT = /[\\u0000\\u0009\\u000A\\u000D #%/:?@[\\\\]]/;\n// eslint-disable-next-line no-control-regex\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\u0000\\u0009\\u000A\\u000D #/:?@[\\\\]]/;\n// eslint-disable-next-line no-control-regex\nvar LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u001F ]+|[\\u0000-\\u001F ]+$/g;\n// eslint-disable-next-line no-control-regex\nvar TAB_AND_NEW_LINE = /[\\u0009\\u000A\\u000D]/g;\nvar EOF;\n\nvar parseHost = function (url, input) {\n var result, codePoints, index;\n if (input.charAt(0) == '[') {\n if (input.charAt(input.length - 1) != ']') return INVALID_HOST;\n result = parseIPv6(input.slice(1, -1));\n if (!result) return INVALID_HOST;\n url.host = result;\n // opaque host\n } else if (!isSpecial(url)) {\n if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input)) return INVALID_HOST;\n result = '';\n codePoints = arrayFrom(input);\n for (index = 0; index < codePoints.length; index++) {\n result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\n }\n url.host = result;\n } else {\n input = toASCII(input);\n if (FORBIDDEN_HOST_CODE_POINT.test(input)) return INVALID_HOST;\n result = parseIPv4(input);\n if (result === null) return INVALID_HOST;\n url.host = result;\n }\n};\n\nvar parseIPv4 = function (input) {\n var parts = input.split('.');\n var partsLength, numbers, index, part, radix, number, ipv4;\n if (parts.length && parts[parts.length - 1] == '') {\n parts.pop();\n }\n partsLength = parts.length;\n if (partsLength > 4) return input;\n numbers = [];\n for (index = 0; index < partsLength; index++) {\n part = parts[index];\n if (part == '') return input;\n radix = 10;\n if (part.length > 1 && part.charAt(0) == '0') {\n radix = HEX_START.test(part) ? 16 : 8;\n part = part.slice(radix == 8 ? 1 : 2);\n }\n if (part === '') {\n number = 0;\n } else {\n if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part)) return input;\n number = parseInt(part, radix);\n }\n numbers.push(number);\n }\n for (index = 0; index < partsLength; index++) {\n number = numbers[index];\n if (index == partsLength - 1) {\n if (number >= pow(256, 5 - partsLength)) return null;\n } else if (number > 255) return null;\n }\n ipv4 = numbers.pop();\n for (index = 0; index < numbers.length; index++) {\n ipv4 += numbers[index] * pow(256, 3 - index);\n }\n return ipv4;\n};\n\n// eslint-disable-next-line max-statements\nvar parseIPv6 = function (input) {\n var address = [0, 0, 0, 0, 0, 0, 0, 0];\n var pieceIndex = 0;\n var compress = null;\n var pointer = 0;\n var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\n\n var char = function () {\n return input.charAt(pointer);\n };\n\n if (char() == ':') {\n if (input.charAt(1) != ':') return;\n pointer += 2;\n pieceIndex++;\n compress = pieceIndex;\n }\n while (char()) {\n if (pieceIndex == 8) return;\n if (char() == ':') {\n if (compress !== null) return;\n pointer++;\n pieceIndex++;\n compress = pieceIndex;\n continue;\n }\n value = length = 0;\n while (length < 4 && HEX.test(char())) {\n value = value * 16 + parseInt(char(), 16);\n pointer++;\n length++;\n }\n if (char() == '.') {\n if (length == 0) return;\n pointer -= length;\n if (pieceIndex > 6) return;\n numbersSeen = 0;\n while (char()) {\n ipv4Piece = null;\n if (numbersSeen > 0) {\n if (char() == '.' && numbersSeen < 4) pointer++;\n else return;\n }\n if (!DIGIT.test(char())) return;\n while (DIGIT.test(char())) {\n number = parseInt(char(), 10);\n if (ipv4Piece === null) ipv4Piece = number;\n else if (ipv4Piece == 0) return;\n else ipv4Piece = ipv4Piece * 10 + number;\n if (ipv4Piece > 255) return;\n pointer++;\n }\n address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\n numbersSeen++;\n if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;\n }\n if (numbersSeen != 4) return;\n break;\n } else if (char() == ':') {\n pointer++;\n if (!char()) return;\n } else if (char()) return;\n address[pieceIndex++] = value;\n }\n if (compress !== null) {\n swaps = pieceIndex - compress;\n pieceIndex = 7;\n while (pieceIndex != 0 && swaps > 0) {\n swap = address[pieceIndex];\n address[pieceIndex--] = address[compress + swaps - 1];\n address[compress + --swaps] = swap;\n }\n } else if (pieceIndex != 8) return;\n return address;\n};\n\nvar findLongestZeroSequence = function (ipv6) {\n var maxIndex = null;\n var maxLength = 1;\n var currStart = null;\n var currLength = 0;\n var index = 0;\n for (; index < 8; index++) {\n if (ipv6[index] !== 0) {\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n currStart = null;\n currLength = 0;\n } else {\n if (currStart === null) currStart = index;\n ++currLength;\n }\n }\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n return maxIndex;\n};\n\nvar serializeHost = function (host) {\n var result, index, compress, ignore0;\n // ipv4\n if (typeof host == 'number') {\n result = [];\n for (index = 0; index < 4; index++) {\n result.unshift(host % 256);\n host = floor(host / 256);\n } return result.join('.');\n // ipv6\n } else if (typeof host == 'object') {\n result = '';\n compress = findLongestZeroSequence(host);\n for (index = 0; index < 8; index++) {\n if (ignore0 && host[index] === 0) continue;\n if (ignore0) ignore0 = false;\n if (compress === index) {\n result += index ? ':' : '::';\n ignore0 = true;\n } else {\n result += host[index].toString(16);\n if (index < 7) result += ':';\n }\n }\n return '[' + result + ']';\n } return host;\n};\n\nvar C0ControlPercentEncodeSet = {};\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n '#': 1, '?': 1, '{': 1, '}': 1\n});\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\n '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\': 1, ']': 1, '^': 1, '|': 1\n});\n\nvar percentEncode = function (char, set) {\n var code = codeAt(char, 0);\n return code > 0x20 && code < 0x7F && !has(set, char) ? char : encodeURIComponent(char);\n};\n\nvar specialSchemes = {\n ftp: 21,\n file: null,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443\n};\n\nvar isSpecial = function (url) {\n return has(specialSchemes, url.scheme);\n};\n\nvar includesCredentials = function (url) {\n return url.username != '' || url.password != '';\n};\n\nvar cannotHaveUsernamePasswordPort = function (url) {\n return !url.host || url.cannotBeABaseURL || url.scheme == 'file';\n};\n\nvar isWindowsDriveLetter = function (string, normalized) {\n var second;\n return string.length == 2 && ALPHA.test(string.charAt(0))\n && ((second = string.charAt(1)) == ':' || (!normalized && second == '|'));\n};\n\nvar startsWithWindowsDriveLetter = function (string) {\n var third;\n return string.length > 1 && isWindowsDriveLetter(string.slice(0, 2)) && (\n string.length == 2 ||\n ((third = string.charAt(2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n );\n};\n\nvar shortenURLsPath = function (url) {\n var path = url.path;\n var pathSize = path.length;\n if (pathSize && (url.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\n path.pop();\n }\n};\n\nvar isSingleDot = function (segment) {\n return segment === '.' || segment.toLowerCase() === '%2e';\n};\n\nvar isDoubleDot = function (segment) {\n segment = segment.toLowerCase();\n return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\n};\n\n// States:\nvar SCHEME_START = {};\nvar SCHEME = {};\nvar NO_SCHEME = {};\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\nvar PATH_OR_AUTHORITY = {};\nvar RELATIVE = {};\nvar RELATIVE_SLASH = {};\nvar SPECIAL_AUTHORITY_SLASHES = {};\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\nvar AUTHORITY = {};\nvar HOST = {};\nvar HOSTNAME = {};\nvar PORT = {};\nvar FILE = {};\nvar FILE_SLASH = {};\nvar FILE_HOST = {};\nvar PATH_START = {};\nvar PATH = {};\nvar CANNOT_BE_A_BASE_URL_PATH = {};\nvar QUERY = {};\nvar FRAGMENT = {};\n\n// eslint-disable-next-line max-statements\nvar parseURL = function (url, input, stateOverride, base) {\n var state = stateOverride || SCHEME_START;\n var pointer = 0;\n var buffer = '';\n var seenAt = false;\n var seenBracket = false;\n var seenPasswordToken = false;\n var codePoints, char, bufferCodePoints, failure;\n\n if (!stateOverride) {\n url.scheme = '';\n url.username = '';\n url.password = '';\n url.host = null;\n url.port = null;\n url.path = [];\n url.query = null;\n url.fragment = null;\n url.cannotBeABaseURL = false;\n input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\n }\n\n input = input.replace(TAB_AND_NEW_LINE, '');\n\n codePoints = arrayFrom(input);\n\n while (pointer <= codePoints.length) {\n char = codePoints[pointer];\n switch (state) {\n case SCHEME_START:\n if (char && ALPHA.test(char)) {\n buffer += char.toLowerCase();\n state = SCHEME;\n } else if (!stateOverride) {\n state = NO_SCHEME;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case SCHEME:\n if (char && (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')) {\n buffer += char.toLowerCase();\n } else if (char == ':') {\n if (stateOverride && (\n (isSpecial(url) != has(specialSchemes, buffer)) ||\n (buffer == 'file' && (includesCredentials(url) || url.port !== null)) ||\n (url.scheme == 'file' && !url.host)\n )) return;\n url.scheme = buffer;\n if (stateOverride) {\n if (isSpecial(url) && specialSchemes[url.scheme] == url.port) url.port = null;\n return;\n }\n buffer = '';\n if (url.scheme == 'file') {\n state = FILE;\n } else if (isSpecial(url) && base && base.scheme == url.scheme) {\n state = SPECIAL_RELATIVE_OR_AUTHORITY;\n } else if (isSpecial(url)) {\n state = SPECIAL_AUTHORITY_SLASHES;\n } else if (codePoints[pointer + 1] == '/') {\n state = PATH_OR_AUTHORITY;\n pointer++;\n } else {\n url.cannotBeABaseURL = true;\n url.path.push('');\n state = CANNOT_BE_A_BASE_URL_PATH;\n }\n } else if (!stateOverride) {\n buffer = '';\n state = NO_SCHEME;\n pointer = 0;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case NO_SCHEME:\n if (!base || (base.cannotBeABaseURL && char != '#')) return INVALID_SCHEME;\n if (base.cannotBeABaseURL && char == '#') {\n url.scheme = base.scheme;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n url.cannotBeABaseURL = true;\n state = FRAGMENT;\n break;\n }\n state = base.scheme == 'file' ? FILE : RELATIVE;\n continue;\n\n case SPECIAL_RELATIVE_OR_AUTHORITY:\n if (char == '/' && codePoints[pointer + 1] == '/') {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n pointer++;\n } else {\n state = RELATIVE;\n continue;\n } break;\n\n case PATH_OR_AUTHORITY:\n if (char == '/') {\n state = AUTHORITY;\n break;\n } else {\n state = PATH;\n continue;\n }\n\n case RELATIVE:\n url.scheme = base.scheme;\n if (char == EOF) {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = base.query;\n } else if (char == '/' || (char == '\\\\' && isSpecial(url))) {\n state = RELATIVE_SLASH;\n } else if (char == '?') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.path.pop();\n state = PATH;\n continue;\n } break;\n\n case RELATIVE_SLASH:\n if (isSpecial(url) && (char == '/' || char == '\\\\')) {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n } else if (char == '/') {\n state = AUTHORITY;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n state = PATH;\n continue;\n } break;\n\n case SPECIAL_AUTHORITY_SLASHES:\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n if (char != '/' || buffer.charAt(pointer + 1) != '/') continue;\n pointer++;\n break;\n\n case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n if (char != '/' && char != '\\\\') {\n state = AUTHORITY;\n continue;\n } break;\n\n case AUTHORITY:\n if (char == '@') {\n if (seenAt) buffer = '%40' + buffer;\n seenAt = true;\n bufferCodePoints = arrayFrom(buffer);\n for (var i = 0; i < bufferCodePoints.length; i++) {\n var codePoint = bufferCodePoints[i];\n if (codePoint == ':' && !seenPasswordToken) {\n seenPasswordToken = true;\n continue;\n }\n var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\n if (seenPasswordToken) url.password += encodedCodePoints;\n else url.username += encodedCodePoints;\n }\n buffer = '';\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url))\n ) {\n if (seenAt && buffer == '') return INVALID_AUTHORITY;\n pointer -= arrayFrom(buffer).length + 1;\n buffer = '';\n state = HOST;\n } else buffer += char;\n break;\n\n case HOST:\n case HOSTNAME:\n if (stateOverride && url.scheme == 'file') {\n state = FILE_HOST;\n continue;\n } else if (char == ':' && !seenBracket) {\n if (buffer == '') return INVALID_HOST;\n failure = parseHost(url, buffer);\n if (failure) return failure;\n buffer = '';\n state = PORT;\n if (stateOverride == HOSTNAME) return;\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url))\n ) {\n if (isSpecial(url) && buffer == '') return INVALID_HOST;\n if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null)) return;\n failure = parseHost(url, buffer);\n if (failure) return failure;\n buffer = '';\n state = PATH_START;\n if (stateOverride) return;\n continue;\n } else {\n if (char == '[') seenBracket = true;\n else if (char == ']') seenBracket = false;\n buffer += char;\n } break;\n\n case PORT:\n if (DIGIT.test(char)) {\n buffer += char;\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url)) ||\n stateOverride\n ) {\n if (buffer != '') {\n var port = parseInt(buffer, 10);\n if (port > 0xFFFF) return INVALID_PORT;\n url.port = (isSpecial(url) && port === specialSchemes[url.scheme]) ? null : port;\n buffer = '';\n }\n if (stateOverride) return;\n state = PATH_START;\n continue;\n } else return INVALID_PORT;\n break;\n\n case FILE:\n url.scheme = 'file';\n if (char == '/' || char == '\\\\') state = FILE_SLASH;\n else if (base && base.scheme == 'file') {\n if (char == EOF) {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = base.query;\n } else if (char == '?') {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n if (!startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n url.host = base.host;\n url.path = base.path.slice();\n shortenURLsPath(url);\n }\n state = PATH;\n continue;\n }\n } else {\n state = PATH;\n continue;\n } break;\n\n case FILE_SLASH:\n if (char == '/' || char == '\\\\') {\n state = FILE_HOST;\n break;\n }\n if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n if (isWindowsDriveLetter(base.path[0], true)) url.path.push(base.path[0]);\n else url.host = base.host;\n }\n state = PATH;\n continue;\n\n case FILE_HOST:\n if (char == EOF || char == '/' || char == '\\\\' || char == '?' || char == '#') {\n if (!stateOverride && isWindowsDriveLetter(buffer)) {\n state = PATH;\n } else if (buffer == '') {\n url.host = '';\n if (stateOverride) return;\n state = PATH_START;\n } else {\n failure = parseHost(url, buffer);\n if (failure) return failure;\n if (url.host == 'localhost') url.host = '';\n if (stateOverride) return;\n buffer = '';\n state = PATH_START;\n } continue;\n } else buffer += char;\n break;\n\n case PATH_START:\n if (isSpecial(url)) {\n state = PATH;\n if (char != '/' && char != '\\\\') continue;\n } else if (!stateOverride && char == '?') {\n url.query = '';\n state = QUERY;\n } else if (!stateOverride && char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n state = PATH;\n if (char != '/') continue;\n } break;\n\n case PATH:\n if (\n char == EOF || char == '/' ||\n (char == '\\\\' && isSpecial(url)) ||\n (!stateOverride && (char == '?' || char == '#'))\n ) {\n if (isDoubleDot(buffer)) {\n shortenURLsPath(url);\n if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n url.path.push('');\n }\n } else if (isSingleDot(buffer)) {\n if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n url.path.push('');\n }\n } else {\n if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n if (url.host) url.host = '';\n buffer = buffer.charAt(0) + ':'; // normalize windows drive letter\n }\n url.path.push(buffer);\n }\n buffer = '';\n if (url.scheme == 'file' && (char == EOF || char == '?' || char == '#')) {\n while (url.path.length > 1 && url.path[0] === '') {\n url.path.shift();\n }\n }\n if (char == '?') {\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n }\n } else {\n buffer += percentEncode(char, pathPercentEncodeSet);\n } break;\n\n case CANNOT_BE_A_BASE_URL_PATH:\n if (char == '?') {\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n url.path[0] += percentEncode(char, C0ControlPercentEncodeSet);\n } break;\n\n case QUERY:\n if (!stateOverride && char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n if (char == \"'\" && isSpecial(url)) url.query += '%27';\n else if (char == '#') url.query += '%23';\n else url.query += percentEncode(char, C0ControlPercentEncodeSet);\n } break;\n\n case FRAGMENT:\n if (char != EOF) url.fragment += percentEncode(char, fragmentPercentEncodeSet);\n break;\n }\n\n pointer++;\n }\n};\n\n// `URL` constructor\n// https://url.spec.whatwg.org/#url-class\nvar URLConstructor = function URL(url /* , base */) {\n var that = anInstance(this, URLConstructor, 'URL');\n var base = arguments.length > 1 ? arguments[1] : undefined;\n var urlString = String(url);\n var state = setInternalState(that, { type: 'URL' });\n var baseState, failure;\n if (base !== undefined) {\n if (base instanceof URLConstructor) baseState = getInternalURLState(base);\n else {\n failure = parseURL(baseState = {}, String(base));\n if (failure) throw TypeError(failure);\n }\n }\n failure = parseURL(state, urlString, null, baseState);\n if (failure) throw TypeError(failure);\n var searchParams = state.searchParams = new URLSearchParams();\n var searchParamsState = getInternalSearchParamsState(searchParams);\n searchParamsState.updateSearchParams(state.query);\n searchParamsState.updateURL = function () {\n state.query = String(searchParams) || null;\n };\n if (!DESCRIPTORS) {\n that.href = serializeURL.call(that);\n that.origin = getOrigin.call(that);\n that.protocol = getProtocol.call(that);\n that.username = getUsername.call(that);\n that.password = getPassword.call(that);\n that.host = getHost.call(that);\n that.hostname = getHostname.call(that);\n that.port = getPort.call(that);\n that.pathname = getPathname.call(that);\n that.search = getSearch.call(that);\n that.searchParams = getSearchParams.call(that);\n that.hash = getHash.call(that);\n }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar serializeURL = function () {\n var url = getInternalURLState(this);\n var scheme = url.scheme;\n var username = url.username;\n var password = url.password;\n var host = url.host;\n var port = url.port;\n var path = url.path;\n var query = url.query;\n var fragment = url.fragment;\n var output = scheme + ':';\n if (host !== null) {\n output += '//';\n if (includesCredentials(url)) {\n output += username + (password ? ':' + password : '') + '@';\n }\n output += serializeHost(host);\n if (port !== null) output += ':' + port;\n } else if (scheme == 'file') output += '//';\n output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n if (query !== null) output += '?' + query;\n if (fragment !== null) output += '#' + fragment;\n return output;\n};\n\nvar getOrigin = function () {\n var url = getInternalURLState(this);\n var scheme = url.scheme;\n var port = url.port;\n if (scheme == 'blob') try {\n return new URL(scheme.path[0]).origin;\n } catch (error) {\n return 'null';\n }\n if (scheme == 'file' || !isSpecial(url)) return 'null';\n return scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : '');\n};\n\nvar getProtocol = function () {\n return getInternalURLState(this).scheme + ':';\n};\n\nvar getUsername = function () {\n return getInternalURLState(this).username;\n};\n\nvar getPassword = function () {\n return getInternalURLState(this).password;\n};\n\nvar getHost = function () {\n var url = getInternalURLState(this);\n var host = url.host;\n var port = url.port;\n return host === null ? ''\n : port === null ? serializeHost(host)\n : serializeHost(host) + ':' + port;\n};\n\nvar getHostname = function () {\n var host = getInternalURLState(this).host;\n return host === null ? '' : serializeHost(host);\n};\n\nvar getPort = function () {\n var port = getInternalURLState(this).port;\n return port === null ? '' : String(port);\n};\n\nvar getPathname = function () {\n var url = getInternalURLState(this);\n var path = url.path;\n return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n};\n\nvar getSearch = function () {\n var query = getInternalURLState(this).query;\n return query ? '?' + query : '';\n};\n\nvar getSearchParams = function () {\n return getInternalURLState(this).searchParams;\n};\n\nvar getHash = function () {\n var fragment = getInternalURLState(this).fragment;\n return fragment ? '#' + fragment : '';\n};\n\nvar accessorDescriptor = function (getter, setter) {\n return { get: getter, set: setter, configurable: true, enumerable: true };\n};\n\nif (DESCRIPTORS) {\n defineProperties(URLPrototype, {\n // `URL.prototype.href` accessors pair\n // https://url.spec.whatwg.org/#dom-url-href\n href: accessorDescriptor(serializeURL, function (href) {\n var url = getInternalURLState(this);\n var urlString = String(href);\n var failure = parseURL(url, urlString);\n if (failure) throw TypeError(failure);\n getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n }),\n // `URL.prototype.origin` getter\n // https://url.spec.whatwg.org/#dom-url-origin\n origin: accessorDescriptor(getOrigin),\n // `URL.prototype.protocol` accessors pair\n // https://url.spec.whatwg.org/#dom-url-protocol\n protocol: accessorDescriptor(getProtocol, function (protocol) {\n var url = getInternalURLState(this);\n parseURL(url, String(protocol) + ':', SCHEME_START);\n }),\n // `URL.prototype.username` accessors pair\n // https://url.spec.whatwg.org/#dom-url-username\n username: accessorDescriptor(getUsername, function (username) {\n var url = getInternalURLState(this);\n var codePoints = arrayFrom(String(username));\n if (cannotHaveUsernamePasswordPort(url)) return;\n url.username = '';\n for (var i = 0; i < codePoints.length; i++) {\n url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n }),\n // `URL.prototype.password` accessors pair\n // https://url.spec.whatwg.org/#dom-url-password\n password: accessorDescriptor(getPassword, function (password) {\n var url = getInternalURLState(this);\n var codePoints = arrayFrom(String(password));\n if (cannotHaveUsernamePasswordPort(url)) return;\n url.password = '';\n for (var i = 0; i < codePoints.length; i++) {\n url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n }),\n // `URL.prototype.host` accessors pair\n // https://url.spec.whatwg.org/#dom-url-host\n host: accessorDescriptor(getHost, function (host) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n parseURL(url, String(host), HOST);\n }),\n // `URL.prototype.hostname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hostname\n hostname: accessorDescriptor(getHostname, function (hostname) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n parseURL(url, String(hostname), HOSTNAME);\n }),\n // `URL.prototype.port` accessors pair\n // https://url.spec.whatwg.org/#dom-url-port\n port: accessorDescriptor(getPort, function (port) {\n var url = getInternalURLState(this);\n if (cannotHaveUsernamePasswordPort(url)) return;\n port = String(port);\n if (port == '') url.port = null;\n else parseURL(url, port, PORT);\n }),\n // `URL.prototype.pathname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-pathname\n pathname: accessorDescriptor(getPathname, function (pathname) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n url.path = [];\n parseURL(url, pathname + '', PATH_START);\n }),\n // `URL.prototype.search` accessors pair\n // https://url.spec.whatwg.org/#dom-url-search\n search: accessorDescriptor(getSearch, function (search) {\n var url = getInternalURLState(this);\n search = String(search);\n if (search == '') {\n url.query = null;\n } else {\n if ('?' == search.charAt(0)) search = search.slice(1);\n url.query = '';\n parseURL(url, search, QUERY);\n }\n getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n }),\n // `URL.prototype.searchParams` getter\n // https://url.spec.whatwg.org/#dom-url-searchparams\n searchParams: accessorDescriptor(getSearchParams),\n // `URL.prototype.hash` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hash\n hash: accessorDescriptor(getHash, function (hash) {\n var url = getInternalURLState(this);\n hash = String(hash);\n if (hash == '') {\n url.fragment = null;\n return;\n }\n if ('#' == hash.charAt(0)) hash = hash.slice(1);\n url.fragment = '';\n parseURL(url, hash, FRAGMENT);\n })\n });\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\nredefine(URLPrototype, 'toJSON', function toJSON() {\n return serializeURL.call(this);\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\nredefine(URLPrototype, 'toString', function toString() {\n return serializeURL.call(this);\n}, { enumerable: true });\n\nif (NativeURL) {\n var nativeCreateObjectURL = NativeURL.createObjectURL;\n var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\n // `URL.createObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n // eslint-disable-next-line no-unused-vars\n if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) {\n return nativeCreateObjectURL.apply(NativeURL, arguments);\n });\n // `URL.revokeObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n // eslint-disable-next-line no-unused-vars\n if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) {\n return nativeRevokeObjectURL.apply(NativeURL, arguments);\n });\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n URL: URLConstructor\n});\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.cropper),expression:\"cropper\"}],staticClass:\"img-cropper\",class:{'img-cropper_hidden': _vm.hideCropper}},[_c('div',{staticClass:\"img-cropper__container\"},[_c('div',{staticClass:\"img-cropper__original\"},[_c('div',{staticClass:\"img-cropper__title\"},[_vm._v(\"Оригинал\")]),_c('div',{staticClass:\"img-cropper__original-img\"},[_c('img',{ref:\"source\",attrs:{\"src\":_vm.objectUrl}})]),_c('div',{staticClass:\"img-cropper__controls\"},[_c('div',{staticClass:\"img-cropper__controls-group\"},[_c('button',{staticClass:\"link link_inherit\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.resetCropper}},[_c('icon',{attrs:{\"icon-name\":\"expand\"}})],1)]),_c('div',{staticClass:\"img-cropper__controls-group\"},[_c('button',{staticClass:\"link link_inherit\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.rotateLeft}},[_c('icon',{attrs:{\"icon-name\":\"rotate-left\"}})],1),_c('button',{staticClass:\"link link_inherit\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.rotateRight}},[_c('icon',{attrs:{\"icon-name\":\"rotate-right\"}})],1)])])]),_c('div',{staticClass:\"img-cropper__preview\"},[_c('div',{staticClass:\"img-cropper__title\"},[_vm._v(\"Предпросмотр\")]),_vm._t(\"preview\")],2)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Cropper.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Cropper.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Cropper.vue?vue&type=template&id=0bf243aa&scoped=true&lang=pug&\"\nimport script from \"./Cropper.vue?vue&type=script&lang=js&\"\nexport * from \"./Cropper.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Cropper.vue?vue&type=style&index=0&id=0bf243aa&lang=scss&scoped=true&\"\nimport style1 from \"./Cropper.vue?vue&type=style&index=1&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0bf243aa\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Cropper.vue?vue&type=style&index=0&id=0bf243aa&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Cropper.vue?vue&type=style&index=0&id=0bf243aa&lang=scss&scoped=true&\"","var classof = require('../internals/classof-raw');\n\n// `thisNumberValue` abstract operation\n// https://tc39.github.io/ecma262/#sec-thisnumbervalue\nmodule.exports = function (value) {\n if (typeof value != 'number' && classof(value) != 'Number') {\n throw TypeError('Incorrect invocation');\n }\n return +value;\n};\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","'use strict';\n// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\nvar regexNonASCII = /[^\\0-\\u007E]/; // non-ASCII chars\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\nvar baseMinusTMin = base - tMin;\nvar floor = Math.floor;\nvar stringFromCharCode = String.fromCharCode;\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n */\nvar ucs2decode = function (string) {\n var output = [];\n var counter = 0;\n var length = string.length;\n while (counter < length) {\n var value = string.charCodeAt(counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // It's a high surrogate, and there is a next character.\n var extra = string.charCodeAt(counter++);\n if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // It's an unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair.\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n return output;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n */\nvar digitToBasic = function (digit) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * (digit < 26);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n */\nvar adapt = function (delta, numPoints, firstTime) {\n var k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n for (; delta > baseMinusTMin * tMax >> 1; k += base) {\n delta = floor(delta / baseMinusTMin);\n }\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n */\n// eslint-disable-next-line max-statements\nvar encode = function (input) {\n var output = [];\n\n // Convert the input in UCS-2 to an array of Unicode code points.\n input = ucs2decode(input);\n\n // Cache the length.\n var inputLength = input.length;\n\n // Initialize the state.\n var n = initialN;\n var delta = 0;\n var bias = initialBias;\n var i, currentValue;\n\n // Handle the basic code points.\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < 0x80) {\n output.push(stringFromCharCode(currentValue));\n }\n }\n\n var basicLength = output.length; // number of basic code points.\n var handledCPCount = basicLength; // number of code points that have been handled;\n\n // Finish the basic string with a delimiter unless it's empty.\n if (basicLength) {\n output.push(delimiter);\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next larger one:\n var m = maxInt;\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n }\n\n // Increase `delta` enough to advance the decoder's state to , but guard against overflow.\n var handledCPCountPlusOne = handledCPCount + 1;\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n throw RangeError(OVERFLOW_ERROR);\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < n && ++delta > maxInt) {\n throw RangeError(OVERFLOW_ERROR);\n }\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer.\n var q = delta;\n for (var k = base; /* no condition */; k += base) {\n var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n if (q < t) break;\n var qMinusT = q - t;\n var baseMinusT = base - t;\n output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\n q = floor(qMinusT / baseMinusT);\n }\n\n output.push(stringFromCharCode(digitToBasic(q)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n delta = 0;\n ++handledCPCount;\n }\n }\n\n ++delta;\n ++n;\n }\n return output.join('');\n};\n\nmodule.exports = function (input) {\n var encoded = [];\n var labels = input.toLowerCase().replace(regexSeparators, '\\u002E').split('.');\n var i, label;\n for (i = 0; i < labels.length; i++) {\n label = labels[i];\n encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label);\n }\n return encoded.join('.');\n};\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.array.iterator');\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar InternalStateModule = require('../internals/internal-state');\nvar anInstance = require('../internals/an-instance');\nvar hasOwn = require('../internals/has');\nvar bind = require('../internals/function-bind-context');\nvar classof = require('../internals/classof');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $fetch = getBuiltIn('fetch');\nvar Headers = getBuiltIn('Headers');\nvar ITERATOR = wellKnownSymbol('iterator');\nvar URL_SEARCH_PARAMS = 'URLSearchParams';\nvar URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);\nvar getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);\n\nvar plus = /\\+/g;\nvar sequences = Array(4);\n\nvar percentSequence = function (bytes) {\n return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\\\da-f]{2}){' + bytes + '})', 'gi'));\n};\n\nvar percentDecode = function (sequence) {\n try {\n return decodeURIComponent(sequence);\n } catch (error) {\n return sequence;\n }\n};\n\nvar deserialize = function (it) {\n var result = it.replace(plus, ' ');\n var bytes = 4;\n try {\n return decodeURIComponent(result);\n } catch (error) {\n while (bytes) {\n result = result.replace(percentSequence(bytes--), percentDecode);\n }\n return result;\n }\n};\n\nvar find = /[!'()~]|%20/g;\n\nvar replace = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+'\n};\n\nvar replacer = function (match) {\n return replace[match];\n};\n\nvar serialize = function (it) {\n return encodeURIComponent(it).replace(find, replacer);\n};\n\nvar parseSearchParams = function (result, query) {\n if (query) {\n var attributes = query.split('&');\n var index = 0;\n var attribute, entry;\n while (index < attributes.length) {\n attribute = attributes[index++];\n if (attribute.length) {\n entry = attribute.split('=');\n result.push({\n key: deserialize(entry.shift()),\n value: deserialize(entry.join('='))\n });\n }\n }\n }\n};\n\nvar updateSearchParams = function (query) {\n this.entries.length = 0;\n parseSearchParams(this.entries, query);\n};\n\nvar validateArgumentsLength = function (passed, required) {\n if (passed < required) throw TypeError('Not enough arguments');\n};\n\nvar URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {\n setInternalState(this, {\n type: URL_SEARCH_PARAMS_ITERATOR,\n iterator: getIterator(getInternalParamsState(params).entries),\n kind: kind\n });\n}, 'Iterator', function next() {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var step = state.iterator.next();\n var entry = step.value;\n if (!step.done) {\n step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value];\n } return step;\n});\n\n// `URLSearchParams` constructor\n// https://url.spec.whatwg.org/#interface-urlsearchparams\nvar URLSearchParamsConstructor = function URLSearchParams(/* init */) {\n anInstance(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n var init = arguments.length > 0 ? arguments[0] : undefined;\n var that = this;\n var entries = [];\n var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key;\n\n setInternalState(that, {\n type: URL_SEARCH_PARAMS,\n entries: entries,\n updateURL: function () { /* empty */ },\n updateSearchParams: updateSearchParams\n });\n\n if (init !== undefined) {\n if (isObject(init)) {\n iteratorMethod = getIteratorMethod(init);\n if (typeof iteratorMethod === 'function') {\n iterator = iteratorMethod.call(init);\n next = iterator.next;\n while (!(step = next.call(iterator)).done) {\n entryIterator = getIterator(anObject(step.value));\n entryNext = entryIterator.next;\n if (\n (first = entryNext.call(entryIterator)).done ||\n (second = entryNext.call(entryIterator)).done ||\n !entryNext.call(entryIterator).done\n ) throw TypeError('Expected sequence with length 2');\n entries.push({ key: first.value + '', value: second.value + '' });\n }\n } else for (key in init) if (hasOwn(init, key)) entries.push({ key: key, value: init[key] + '' });\n } else {\n parseSearchParams(entries, typeof init === 'string' ? init.charAt(0) === '?' ? init.slice(1) : init : init + '');\n }\n }\n};\n\nvar URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;\n\nredefineAll(URLSearchParamsPrototype, {\n // `URLSearchParams.prototype.appent` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-append\n append: function append(name, value) {\n validateArgumentsLength(arguments.length, 2);\n var state = getInternalParamsState(this);\n state.entries.push({ key: name + '', value: value + '' });\n state.updateURL();\n },\n // `URLSearchParams.prototype.delete` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-delete\n 'delete': function (name) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var key = name + '';\n var index = 0;\n while (index < entries.length) {\n if (entries[index].key === key) entries.splice(index, 1);\n else index++;\n }\n state.updateURL();\n },\n // `URLSearchParams.prototype.get` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-get\n get: function get(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = name + '';\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) return entries[index].value;\n }\n return null;\n },\n // `URLSearchParams.prototype.getAll` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-getall\n getAll: function getAll(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = name + '';\n var result = [];\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) result.push(entries[index].value);\n }\n return result;\n },\n // `URLSearchParams.prototype.has` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-has\n has: function has(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = name + '';\n var index = 0;\n while (index < entries.length) {\n if (entries[index++].key === key) return true;\n }\n return false;\n },\n // `URLSearchParams.prototype.set` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-set\n set: function set(name, value) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var found = false;\n var key = name + '';\n var val = value + '';\n var index = 0;\n var entry;\n for (; index < entries.length; index++) {\n entry = entries[index];\n if (entry.key === key) {\n if (found) entries.splice(index--, 1);\n else {\n found = true;\n entry.value = val;\n }\n }\n }\n if (!found) entries.push({ key: key, value: val });\n state.updateURL();\n },\n // `URLSearchParams.prototype.sort` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-sort\n sort: function sort() {\n var state = getInternalParamsState(this);\n var entries = state.entries;\n // Array#sort is not stable in some engines\n var slice = entries.slice();\n var entry, entriesIndex, sliceIndex;\n entries.length = 0;\n for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) {\n entry = slice[sliceIndex];\n for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) {\n if (entries[entriesIndex].key > entry.key) {\n entries.splice(entriesIndex, 0, entry);\n break;\n }\n }\n if (entriesIndex === sliceIndex) entries.push(entry);\n }\n state.updateURL();\n },\n // `URLSearchParams.prototype.forEach` method\n forEach: function forEach(callback /* , thisArg */) {\n var entries = getInternalParamsState(this).entries;\n var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined, 3);\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n boundFunction(entry.value, entry.key, this);\n }\n },\n // `URLSearchParams.prototype.keys` method\n keys: function keys() {\n return new URLSearchParamsIterator(this, 'keys');\n },\n // `URLSearchParams.prototype.values` method\n values: function values() {\n return new URLSearchParamsIterator(this, 'values');\n },\n // `URLSearchParams.prototype.entries` method\n entries: function entries() {\n return new URLSearchParamsIterator(this, 'entries');\n }\n}, { enumerable: true });\n\n// `URLSearchParams.prototype[@@iterator]` method\nredefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries);\n\n// `URLSearchParams.prototype.toString` method\n// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior\nredefine(URLSearchParamsPrototype, 'toString', function toString() {\n var entries = getInternalParamsState(this).entries;\n var result = [];\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n result.push(serialize(entry.key) + '=' + serialize(entry.value));\n } return result.join('&');\n}, { enumerable: true });\n\nsetToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n\n$({ global: true, forced: !USE_NATIVE_URL }, {\n URLSearchParams: URLSearchParamsConstructor\n});\n\n// Wrap `fetch` for correct work with polyfilled `URLSearchParams`\n// https://github.com/zloirock/core-js/issues/674\nif (!USE_NATIVE_URL && typeof $fetch == 'function' && typeof Headers == 'function') {\n $({ global: true, enumerable: true, forced: true }, {\n fetch: function fetch(input /* , init */) {\n var args = [input];\n var init, body, headers;\n if (arguments.length > 1) {\n init = arguments[1];\n if (isObject(init)) {\n body = init.body;\n if (classof(body) === URL_SEARCH_PARAMS) {\n headers = init.headers ? new Headers(init.headers) : new Headers();\n if (!headers.has('content-type')) {\n headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n init = create(init, {\n body: createPropertyDescriptor(0, String(body)),\n headers: createPropertyDescriptor(0, headers)\n });\n }\n }\n args.push(init);\n } return $fetch.apply(this, args);\n }\n });\n}\n\nmodule.exports = {\n URLSearchParams: URLSearchParamsConstructor,\n getState: getInternalParamsState\n};\n","var anObject = require('../internals/an-object');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nmodule.exports = function (it) {\n var iteratorMethod = getIteratorMethod(it);\n if (typeof iteratorMethod != 'function') {\n throw TypeError(String(it) + ' is not iterable');\n } return anObject(iteratorMethod.call(it));\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar IndexedObject = require('../internals/indexed-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar nativeJoin = [].join;\n\nvar ES3_STRINGS = IndexedObject != Object;\nvar STRICT_METHOD = arrayMethodIsStrict('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.join\n$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {\n join: function join(separator) {\n return nativeJoin.call(toIndexedObject(this), separator === undefined ? ',' : separator);\n }\n});\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"input\"},[_c('div',{staticClass:\"input__icons\"},[_c('div',{staticClass:\"input__icon\"},[_c('icon',{attrs:{\"icon-name\":\"upload\"}})],1)]),_c('input',{ref:\"input\",staticClass:\"transparent\",attrs:{\"type\":\"file\",\"name\":_vm.name,\"accept\":_vm.accept},on:{\"change\":_vm.onChange}}),_c('div',{staticClass:\"input__el\",domProps:{\"innerHTML\":_vm._s(_vm.info || (\"Выберите файл до \" + _vm.maxSize + \" МБ...\"))}}),_c('div',{staticClass:\"input__icons\"},[_c('div',{staticClass:\"input__icon input__icon-err\"},[_c('icon',{attrs:{\"icon-name\":\"exclamation-circle-s\"}})],1),_c('div',{staticClass:\"input__icon input__icon-valid\"},[_c('icon',{attrs:{\"icon-name\":\"check-bold\"}})],1)]),_c('div',{staticClass:\"input__border\"})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InputFile.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InputFile.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InputFile.vue?vue&type=template&id=76b36fc2&scoped=true&lang=pug&\"\nimport script from \"./InputFile.vue?vue&type=script&lang=js&\"\nexport * from \"./InputFile.vue?vue&type=script&lang=js&\"\nimport style0 from \"./InputFile.vue?vue&type=style&index=0&id=76b36fc2&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"76b36fc2\",\n null\n \n)\n\nexport default component.exports","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InputFile.vue?vue&type=style&index=0&id=76b36fc2&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InputFile.vue?vue&type=style&index=0&id=76b36fc2&lang=scss&scoped=true&\"","var isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","'use strict';\nvar $ = require('../internals/export');\nvar toInteger = require('../internals/to-integer');\nvar thisNumberValue = require('../internals/this-number-value');\nvar repeat = require('../internals/string-repeat');\nvar fails = require('../internals/fails');\n\nvar nativeToFixed = 1.0.toFixed;\nvar floor = Math.floor;\n\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\n\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\nvar FORCED = nativeToFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !fails(function () {\n // V8 ~ Android 4.3-\n nativeToFixed.call({});\n});\n\n// `Number.prototype.toFixed` method\n// https://tc39.github.io/ecma262/#sec-number.prototype.tofixed\n$({ target: 'Number', proto: true, forced: FORCED }, {\n // eslint-disable-next-line max-statements\n toFixed: function toFixed(fractionDigits) {\n var number = thisNumberValue(this);\n var fractDigits = toInteger(fractionDigits);\n var data = [0, 0, 0, 0, 0, 0];\n var sign = '';\n var result = '0';\n var e, z, j, k;\n\n var multiply = function (n, c) {\n var index = -1;\n var c2 = c;\n while (++index < 6) {\n c2 += n * data[index];\n data[index] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n };\n\n var divide = function (n) {\n var index = 6;\n var c = 0;\n while (--index >= 0) {\n c += data[index];\n data[index] = floor(c / n);\n c = (c % n) * 1e7;\n }\n };\n\n var dataToString = function () {\n var index = 6;\n var s = '';\n while (--index >= 0) {\n if (s !== '' || index === 0 || data[index] !== 0) {\n var t = String(data[index]);\n s = s === '' ? t : s + repeat.call('0', 7 - t.length) + t;\n }\n } return s;\n };\n\n if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits');\n // eslint-disable-next-line no-self-compare\n if (number != number) return 'NaN';\n if (number <= -1e21 || number >= 1e21) return String(number);\n if (number < 0) {\n sign = '-';\n number = -number;\n }\n if (number > 1e-21) {\n e = log(number * pow(2, 69, 1)) - 69;\n z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = fractDigits;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n result = dataToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n result = dataToString() + repeat.call('0', fractDigits);\n }\n }\n if (fractDigits > 0) {\n k = result.length;\n result = sign + (k <= fractDigits\n ? '0.' + repeat.call('0', fractDigits - k) + result\n : result.slice(0, k - fractDigits) + '.' + result.slice(k - fractDigits));\n } else {\n result = sign + result;\n } return result;\n }\n});\n","/*!\n * Cropper.js v1.5.7\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2020-05-23T05:23:00.081Z\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 = global || self, global.Cropper = factory());\n}(this, (function () { 'use strict';\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n }\n\n function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n }\n\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n\n function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n }\n\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n var WINDOW = IS_BROWSER ? window : {};\n var IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\n var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\n var NAMESPACE = 'cropper'; // Actions\n\n var ACTION_ALL = 'all';\n var ACTION_CROP = 'crop';\n var ACTION_MOVE = 'move';\n var ACTION_ZOOM = 'zoom';\n var ACTION_EAST = 'e';\n var ACTION_WEST = 'w';\n var ACTION_SOUTH = 's';\n var ACTION_NORTH = 'n';\n var ACTION_NORTH_EAST = 'ne';\n var ACTION_NORTH_WEST = 'nw';\n var ACTION_SOUTH_EAST = 'se';\n var ACTION_SOUTH_WEST = 'sw'; // Classes\n\n var CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\n var CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\n var CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\n var CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\n var CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\n var CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\n var CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\"); // Data keys\n\n var DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\n var DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\"); // Drag modes\n\n var DRAG_MODE_CROP = 'crop';\n var DRAG_MODE_MOVE = 'move';\n var DRAG_MODE_NONE = 'none'; // Events\n\n var EVENT_CROP = 'crop';\n var EVENT_CROP_END = 'cropend';\n var EVENT_CROP_MOVE = 'cropmove';\n var EVENT_CROP_START = 'cropstart';\n var EVENT_DBLCLICK = 'dblclick';\n var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\n var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\n var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\n var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\n var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\n var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\n var EVENT_READY = 'ready';\n var EVENT_RESIZE = 'resize';\n var EVENT_WHEEL = 'wheel';\n var EVENT_ZOOM = 'zoom'; // Mime types\n\n var MIME_TYPE_JPEG = 'image/jpeg'; // RegExps\n\n var REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\n var REGEXP_DATA_URL = /^data:/;\n var REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\n var REGEXP_TAG_NAME = /^img|canvas$/i; // Misc\n\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: 200,\n minContainerHeight: 100,\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 ratios = [];\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 ratios.push(ratio);\n });\n });\n ratios.sort(function (a, b) {\n return Math.abs(a) < Math.abs(b);\n });\n return ratios[0];\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 addClass(cropper, CLASS_HIDDEN);\n removeClass(element, CLASS_HIDDEN);\n var containerData = {\n width: Math.max(container.offsetWidth, Number(options.minContainerWidth) || 200),\n height: Math.max(container.offsetHeight, Number(options.minContainerHeight) || 100)\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 canvasData.left = (containerData.width - canvasWidth) / 2;\n canvasData.top = (containerData.height - canvasHeight) / 2;\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n this.canvasData = canvasData;\n this.limited = viewMode === 1 || viewMode === 2;\n this.limitCanvas(true, true);\n this.initialImageData = assign({}, imageData);\n this.initialCanvasData = assign({}, canvasData);\n },\n limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var viewMode = options.viewMode;\n var aspectRatio = canvasData.aspectRatio;\n var cropped = this.cropped && cropBoxData;\n\n if (sizeLimited) {\n var minCanvasWidth = Number(options.minCanvasWidth) || 0;\n var minCanvasHeight = Number(options.minCanvasHeight) || 0;\n\n if (viewMode > 1) {\n minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\n minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\n\n if (viewMode === 3) {\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n } else if (viewMode > 0) {\n if (minCanvasWidth) {\n minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\n } else if (minCanvasHeight) {\n minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\n } else if (cropped) {\n minCanvasWidth = cropBoxData.width;\n minCanvasHeight = cropBoxData.height;\n\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n }\n\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minCanvasWidth,\n height: minCanvasHeight\n });\n\n minCanvasWidth = _getAdjustedSizes.width;\n minCanvasHeight = _getAdjustedSizes.height;\n canvasData.minWidth = minCanvasWidth;\n canvasData.minHeight = minCanvasHeight;\n canvasData.maxWidth = Infinity;\n canvasData.maxHeight = Infinity;\n }\n\n if (positionLimited) {\n if (viewMode > (cropped ? 0 : 1)) {\n var newCanvasLeft = containerData.width - canvasData.width;\n var newCanvasTop = containerData.height - canvasData.height;\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n\n if (cropped && this.limited) {\n canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\n canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\n canvasData.maxLeft = cropBoxData.left;\n canvasData.maxTop = cropBoxData.top;\n\n if (viewMode === 2) {\n if (canvasData.width >= containerData.width) {\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n }\n\n if (canvasData.height >= containerData.height) {\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n }\n }\n }\n } else {\n canvasData.minLeft = -canvasData.width;\n canvasData.minTop = -canvasData.height;\n canvasData.maxLeft = containerData.width;\n canvasData.maxTop = containerData.height;\n }\n }\n },\n renderCanvas: function renderCanvas(changed, transformed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n\n if (transformed) {\n var _getRotatedSizes = getRotatedSizes({\n width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\n height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\n degree: imageData.rotate || 0\n }),\n naturalWidth = _getRotatedSizes.width,\n naturalHeight = _getRotatedSizes.height;\n\n var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\n var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\n canvasData.left -= (width - canvasData.width) / 2;\n canvasData.top -= (height - canvasData.height) / 2;\n canvasData.width = width;\n canvasData.height = height;\n canvasData.aspectRatio = naturalWidth / naturalHeight;\n canvasData.naturalWidth = naturalWidth;\n canvasData.naturalHeight = naturalHeight;\n this.limitCanvas(true, false);\n }\n\n if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\n canvasData.left = canvasData.oldLeft;\n }\n\n if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\n canvasData.top = canvasData.oldTop;\n }\n\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n this.limitCanvas(false, true);\n canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\n canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n setStyle(this.canvas, assign({\n width: canvasData.width,\n height: canvasData.height\n }, getTransforms({\n translateX: canvasData.left,\n translateY: canvasData.top\n })));\n this.renderImage(changed);\n\n if (this.cropped && this.limited) {\n this.limitCropBox(true, true);\n }\n },\n renderImage: function renderImage(changed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\n var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\n assign(imageData, {\n width: width,\n height: height,\n left: (canvasData.width - width) / 2,\n top: (canvasData.height - height) / 2\n });\n setStyle(this.image, assign({\n width: imageData.width,\n height: imageData.height\n }, getTransforms(assign({\n translateX: imageData.left,\n translateY: imageData.top\n }, imageData))));\n\n if (changed) {\n this.output();\n }\n },\n initCropBox: function initCropBox() {\n var options = this.options,\n canvasData = this.canvasData;\n var aspectRatio = options.aspectRatio || options.initialAspectRatio;\n var autoCropArea = Number(options.autoCropArea) || 0.8;\n var cropBoxData = {\n width: canvasData.width,\n height: canvasData.height\n };\n\n if (aspectRatio) {\n if (canvasData.height * aspectRatio > canvasData.width) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n\n this.cropBoxData = cropBoxData;\n this.limitCropBox(true, true); // Initialize auto crop area\n\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight); // The width/height of auto crop area must large than \"minWidth/Height\"\n\n cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\n cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\n cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\n cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n this.initialCropBoxData = assign({}, cropBoxData);\n },\n limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData,\n limited = this.limited;\n var aspectRatio = options.aspectRatio;\n\n if (sizeLimited) {\n var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\n var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\n var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\n var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height; // The min/maxCropBoxWidth/Height must be less than container's width/height\n\n minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\n minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\n\n if (aspectRatio) {\n if (minCropBoxWidth && minCropBoxHeight) {\n if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n } else if (minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else if (minCropBoxHeight) {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n\n if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\n maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\n } else {\n maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\n }\n } // The minWidth/Height must be less than maxWidth/Height\n\n\n cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\n cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\n cropBoxData.maxWidth = maxCropBoxWidth;\n cropBoxData.maxHeight = maxCropBoxHeight;\n }\n\n if (positionLimited) {\n if (limited) {\n cropBoxData.minLeft = Math.max(0, canvasData.left);\n cropBoxData.minTop = Math.max(0, canvasData.top);\n cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\n cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\n } else {\n cropBoxData.minLeft = 0;\n cropBoxData.minTop = 0;\n cropBoxData.maxLeft = containerData.width - cropBoxData.width;\n cropBoxData.maxTop = containerData.height - cropBoxData.height;\n }\n }\n },\n renderCropBox: function renderCropBox() {\n var options = this.options,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData;\n\n if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\n cropBoxData.left = cropBoxData.oldLeft;\n }\n\n if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\n cropBoxData.top = cropBoxData.oldTop;\n }\n\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n this.limitCropBox(false, true);\n cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\n cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n\n if (options.movable && options.cropBoxMovable) {\n // Turn to move the canvas when the crop box is equal to the container\n setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\n }\n\n setStyle(this.cropBox, assign({\n width: cropBoxData.width,\n height: cropBoxData.height\n }, getTransforms({\n translateX: cropBoxData.left,\n translateY: cropBoxData.top\n })));\n\n if (this.cropped && this.limited) {\n this.limitCanvas(true, true);\n }\n\n if (!this.disabled) {\n this.output();\n }\n },\n output: function output() {\n this.preview();\n dispatchEvent(this.element, EVENT_CROP, this.getData());\n }\n };\n\n var preview = {\n initPreview: function initPreview() {\n var element = this.element,\n crossOrigin = this.crossOrigin;\n var preview = this.options.preview;\n var url = crossOrigin ? this.crossOriginUrl : this.url;\n var alt = element.alt || 'The image to preview';\n var image = document.createElement('img');\n\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n\n image.src = url;\n image.alt = alt;\n this.viewBox.appendChild(image);\n this.viewBoxImage = image;\n\n if (!preview) {\n return;\n }\n\n var previews = preview;\n\n if (typeof preview === 'string') {\n previews = element.ownerDocument.querySelectorAll(preview);\n } else if (preview.querySelector) {\n previews = [preview];\n }\n\n this.previews = previews;\n forEach(previews, function (el) {\n var img = document.createElement('img'); // Save the original size for recover\n\n setData(el, DATA_PREVIEW, {\n width: el.offsetWidth,\n height: el.offsetHeight,\n html: el.innerHTML\n });\n\n if (crossOrigin) {\n img.crossOrigin = crossOrigin;\n }\n\n img.src = url;\n img.alt = alt;\n /**\n * Override img element styles\n * Add `display:block` to avoid margin top issue\n * Add `height:auto` to override `height` attribute on IE8\n * (Occur only when margin-top <= -height)\n */\n\n img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;\"';\n el.innerHTML = '';\n el.appendChild(img);\n });\n },\n resetPreview: function resetPreview() {\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n setStyle(element, {\n width: data.width,\n height: data.height\n });\n element.innerHTML = data.html;\n removeData(element, DATA_PREVIEW);\n });\n },\n preview: function preview() {\n var imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var cropBoxWidth = cropBoxData.width,\n cropBoxHeight = cropBoxData.height;\n var width = imageData.width,\n height = imageData.height;\n var left = cropBoxData.left - canvasData.left - imageData.left;\n var top = cropBoxData.top - canvasData.top - imageData.top;\n\n if (!this.cropped || this.disabled) {\n return;\n }\n\n setStyle(this.viewBoxImage, assign({\n width: width,\n height: height\n }, getTransforms(assign({\n translateX: -left,\n translateY: -top\n }, imageData))));\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n var originalWidth = data.width;\n var originalHeight = data.height;\n var newWidth = originalWidth;\n var newHeight = originalHeight;\n var ratio = 1;\n\n if (cropBoxWidth) {\n ratio = originalWidth / cropBoxWidth;\n newHeight = cropBoxHeight * ratio;\n }\n\n if (cropBoxHeight && newHeight > originalHeight) {\n ratio = originalHeight / cropBoxHeight;\n newWidth = cropBoxWidth * ratio;\n newHeight = originalHeight;\n }\n\n setStyle(element, {\n width: newWidth,\n height: newHeight\n });\n setStyle(element.getElementsByTagName('img')[0], assign({\n width: width * ratio,\n height: height * ratio\n }, getTransforms(assign({\n translateX: -left * ratio,\n translateY: -top * ratio\n }, imageData))));\n });\n }\n };\n\n var events = {\n bind: function bind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n\n if (isFunction(options.cropstart)) {\n addListener(element, EVENT_CROP_START, options.cropstart);\n }\n\n if (isFunction(options.cropmove)) {\n addListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n\n if (isFunction(options.cropend)) {\n addListener(element, EVENT_CROP_END, options.cropend);\n }\n\n if (isFunction(options.crop)) {\n addListener(element, EVENT_CROP, options.crop);\n }\n\n if (isFunction(options.zoom)) {\n addListener(element, EVENT_ZOOM, options.zoom);\n }\n\n addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\n\n if (options.zoomable && options.zoomOnWheel) {\n addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\n passive: false,\n capture: true\n });\n }\n\n if (options.toggleDragModeOnDblclick) {\n addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n }\n\n addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this));\n addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this));\n\n if (options.responsive) {\n addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n }\n },\n unbind: function unbind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n\n if (isFunction(options.cropstart)) {\n removeListener(element, EVENT_CROP_START, options.cropstart);\n }\n\n if (isFunction(options.cropmove)) {\n removeListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n\n if (isFunction(options.cropend)) {\n removeListener(element, EVENT_CROP_END, options.cropend);\n }\n\n if (isFunction(options.crop)) {\n removeListener(element, EVENT_CROP, options.crop);\n }\n\n if (isFunction(options.zoom)) {\n removeListener(element, EVENT_ZOOM, options.zoom);\n }\n\n removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\n\n if (options.zoomable && options.zoomOnWheel) {\n removeListener(cropper, EVENT_WHEEL, this.onWheel, {\n passive: false,\n capture: true\n });\n }\n\n if (options.toggleDragModeOnDblclick) {\n removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\n }\n\n removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\n removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\n\n if (options.responsive) {\n removeListener(window, EVENT_RESIZE, this.onResize);\n }\n }\n };\n\n var handlers = {\n resize: function resize() {\n if (this.disabled) {\n return;\n }\n\n var options = this.options,\n container = this.container,\n containerData = this.containerData;\n var ratio = container.offsetWidth / containerData.width; // Resize when width changed or height changed\n\n if (ratio !== 1 || container.offsetHeight !== containerData.height) {\n var canvasData;\n var cropBoxData;\n\n if (options.restore) {\n canvasData = this.getCanvasData();\n cropBoxData = this.getCropBoxData();\n }\n\n this.render();\n\n if (options.restore) {\n this.setCanvasData(forEach(canvasData, function (n, i) {\n canvasData[i] = n * ratio;\n }));\n this.setCropBoxData(forEach(cropBoxData, function (n, i) {\n cropBoxData[i] = n * ratio;\n }));\n }\n }\n },\n dblclick: function dblclick() {\n if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\n return;\n }\n\n this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\n },\n wheel: function wheel(event) {\n var _this = this;\n\n var ratio = Number(this.options.wheelZoomRatio) || 0.1;\n var delta = 1;\n\n if (this.disabled) {\n return;\n }\n\n event.preventDefault(); // Limit wheel speed to prevent zoom too fast (#21)\n\n if (this.wheeling) {\n return;\n }\n\n this.wheeling = true;\n setTimeout(function () {\n _this.wheeling = false;\n }, 50);\n\n if (event.deltaY) {\n delta = event.deltaY > 0 ? 1 : -1;\n } else if (event.wheelDelta) {\n delta = -event.wheelDelta / 120;\n } else if (event.detail) {\n delta = event.detail > 0 ? 1 : -1;\n }\n\n this.zoom(-delta * ratio, event);\n },\n cropStart: function cropStart(event) {\n var buttons = event.buttons,\n button = event.button;\n\n if (this.disabled // Handle mouse event and pointer event and ignore touch event\n || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && ( // No primary button (Usually the left button)\n isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0 // Open context menu\n || event.ctrlKey)) {\n return;\n }\n\n var options = this.options,\n pointers = this.pointers;\n var action;\n\n if (event.changedTouches) {\n // Handle touch event\n forEach(event.changedTouches, function (touch) {\n pointers[touch.identifier] = getPointer(touch);\n });\n } else {\n // Handle mouse event and pointer event\n pointers[event.pointerId || 0] = getPointer(event);\n }\n\n if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\n action = ACTION_ZOOM;\n } else {\n action = getData(event.target, DATA_ACTION);\n }\n\n if (!REGEXP_ACTIONS.test(action)) {\n return;\n }\n\n if (dispatchEvent(this.element, EVENT_CROP_START, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n } // This line is required for preventing page zooming in iOS browsers\n\n\n event.preventDefault();\n this.action = action;\n this.cropping = false;\n\n if (action === ACTION_CROP) {\n this.cropping = true;\n addClass(this.dragBox, CLASS_MODAL);\n }\n },\n cropMove: function cropMove(event) {\n var action = this.action;\n\n if (this.disabled || !action) {\n return;\n }\n\n var pointers = this.pointers;\n event.preventDefault();\n\n if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n // The first parameter should not be undefined (#432)\n assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n });\n } else {\n assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\n }\n\n this.change(event);\n },\n cropEnd: function cropEnd(event) {\n if (this.disabled) {\n return;\n }\n\n var action = this.action,\n pointers = this.pointers;\n\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n delete pointers[touch.identifier];\n });\n } else {\n delete pointers[event.pointerId || 0];\n }\n\n if (!action) {\n return;\n }\n\n event.preventDefault();\n\n if (!Object.keys(pointers).length) {\n this.action = '';\n }\n\n if (this.cropping) {\n this.cropping = false;\n toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\n }\n\n dispatchEvent(this.element, EVENT_CROP_END, {\n originalEvent: event,\n action: action\n });\n }\n };\n\n var change = {\n change: function change(event) {\n var options = this.options,\n canvasData = this.canvasData,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData,\n pointers = this.pointers;\n var action = this.action;\n var aspectRatio = options.aspectRatio;\n var left = cropBoxData.left,\n top = cropBoxData.top,\n width = cropBoxData.width,\n height = cropBoxData.height;\n var right = left + width;\n var bottom = top + height;\n var minLeft = 0;\n var minTop = 0;\n var maxWidth = containerData.width;\n var maxHeight = containerData.height;\n var renderable = true;\n var offset; // Locking aspect ratio in \"free mode\" by holding shift key\n\n if (!aspectRatio && event.shiftKey) {\n aspectRatio = width && height ? width / height : 1;\n }\n\n if (this.limited) {\n minLeft = cropBoxData.minLeft;\n minTop = cropBoxData.minTop;\n maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width);\n maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height);\n }\n\n var pointer = pointers[Object.keys(pointers)[0]];\n var range = {\n x: pointer.endX - pointer.startX,\n y: pointer.endY - pointer.startY\n };\n\n var check = function check(side) {\n switch (side) {\n case ACTION_EAST:\n if (right + range.x > maxWidth) {\n range.x = maxWidth - right;\n }\n\n break;\n\n case ACTION_WEST:\n if (left + range.x < minLeft) {\n range.x = minLeft - left;\n }\n\n break;\n\n case ACTION_NORTH:\n if (top + range.y < minTop) {\n range.y = minTop - top;\n }\n\n break;\n\n case ACTION_SOUTH:\n if (bottom + range.y > maxHeight) {\n range.y = maxHeight - bottom;\n }\n\n break;\n }\n };\n\n switch (action) {\n // Move crop box\n case ACTION_ALL:\n left += range.x;\n top += range.y;\n break;\n // Resize crop box\n\n case ACTION_EAST:\n if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n\n check(ACTION_EAST);\n width += range.x;\n\n if (width < 0) {\n action = ACTION_WEST;\n width = -width;\n left -= width;\n }\n\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n\n break;\n\n case ACTION_NORTH:\n if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n\n if (height < 0) {\n action = ACTION_SOUTH;\n height = -height;\n top -= height;\n }\n\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n\n break;\n\n case ACTION_WEST:\n if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n\n if (width < 0) {\n action = ACTION_EAST;\n width = -width;\n left -= width;\n }\n\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n\n break;\n\n case ACTION_SOUTH:\n if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n\n check(ACTION_SOUTH);\n height += range.y;\n\n if (height < 0) {\n action = ACTION_NORTH;\n height = -height;\n top -= height;\n }\n\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n\n break;\n\n case ACTION_NORTH_EAST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\n renderable = false;\n break;\n }\n\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n } else {\n check(ACTION_NORTH);\n check(ACTION_EAST);\n\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n top -= height;\n }\n\n break;\n\n case ACTION_NORTH_WEST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\n renderable = false;\n break;\n }\n\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n left += cropBoxData.width - width;\n } else {\n check(ACTION_NORTH);\n check(ACTION_WEST);\n\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n top -= height;\n }\n\n break;\n\n case ACTION_SOUTH_WEST:\n if (aspectRatio) {\n if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_WEST);\n\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n top -= height;\n }\n\n break;\n\n case ACTION_SOUTH_EAST:\n if (aspectRatio) {\n if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n\n check(ACTION_EAST);\n width += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_EAST);\n\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n top -= height;\n }\n\n break;\n // Move canvas\n\n case ACTION_MOVE:\n this.move(range.x, range.y);\n renderable = false;\n break;\n // Zoom canvas\n\n case ACTION_ZOOM:\n this.zoom(getMaxZoomRatio(pointers), event);\n renderable = false;\n break;\n // Create crop box\n\n case ACTION_CROP:\n if (!range.x || !range.y) {\n renderable = false;\n break;\n }\n\n offset = getOffset(this.cropper);\n left = pointer.startX - offset.left;\n top = pointer.startY - offset.top;\n width = cropBoxData.minWidth;\n height = cropBoxData.minHeight;\n\n if (range.x > 0) {\n action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST;\n } else if (range.x < 0) {\n left -= width;\n action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST;\n }\n\n if (range.y < 0) {\n top -= height;\n } // Show the crop box if is hidden\n\n\n if (!this.cropped) {\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.cropped = true;\n\n if (this.limited) {\n this.limitCropBox(true, true);\n }\n }\n\n break;\n }\n\n if (renderable) {\n cropBoxData.width = width;\n cropBoxData.height = height;\n cropBoxData.left = left;\n cropBoxData.top = top;\n this.action = action;\n this.renderCropBox();\n } // Override\n\n\n forEach(pointers, function (p) {\n p.startX = p.endX;\n p.startY = p.endY;\n });\n }\n };\n\n var methods = {\n // Show the crop box manually\n crop: function crop() {\n if (this.ready && !this.cropped && !this.disabled) {\n this.cropped = true;\n this.limitCropBox(true, true);\n\n if (this.options.modal) {\n addClass(this.dragBox, CLASS_MODAL);\n }\n\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.setCropBoxData(this.initialCropBoxData);\n }\n\n return this;\n },\n // Reset the image and crop box to their initial states\n reset: function reset() {\n if (this.ready && !this.disabled) {\n this.imageData = assign({}, this.initialImageData);\n this.canvasData = assign({}, this.initialCanvasData);\n this.cropBoxData = assign({}, this.initialCropBoxData);\n this.renderCanvas();\n\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n\n return this;\n },\n // Clear the crop box\n clear: function clear() {\n if (this.cropped && !this.disabled) {\n assign(this.cropBoxData, {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n });\n this.cropped = false;\n this.renderCropBox();\n this.limitCanvas(true, true); // Render canvas after crop box rendered\n\n this.renderCanvas();\n removeClass(this.dragBox, CLASS_MODAL);\n addClass(this.cropBox, CLASS_HIDDEN);\n }\n\n return this;\n },\n\n /**\n * Replace the image's src and rebuild the cropper\n * @param {string} url - The new URL.\n * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.\n * @returns {Cropper} this\n */\n replace: function replace(url) {\n var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (!this.disabled && url) {\n if (this.isImg) {\n this.element.src = url;\n }\n\n if (hasSameSize) {\n this.url = url;\n this.image.src = url;\n\n if (this.ready) {\n this.viewBoxImage.src = url;\n forEach(this.previews, function (element) {\n element.getElementsByTagName('img')[0].src = url;\n });\n }\n } else {\n if (this.isImg) {\n this.replaced = true;\n }\n\n this.options.data = null;\n this.uncreate();\n this.load(url);\n }\n }\n\n return this;\n },\n // Enable (unfreeze) the cropper\n enable: function enable() {\n if (this.ready && this.disabled) {\n this.disabled = false;\n removeClass(this.cropper, CLASS_DISABLED);\n }\n\n return this;\n },\n // Disable (freeze) the cropper\n disable: function disable() {\n if (this.ready && !this.disabled) {\n this.disabled = true;\n addClass(this.cropper, CLASS_DISABLED);\n }\n\n return this;\n },\n\n /**\n * Destroy the cropper and remove the instance from the image\n * @returns {Cropper} this\n */\n destroy: function destroy() {\n var element = this.element;\n\n if (!element[NAMESPACE]) {\n return this;\n }\n\n element[NAMESPACE] = undefined;\n\n if (this.isImg && this.replaced) {\n element.src = this.originalUrl;\n }\n\n this.uncreate();\n return this;\n },\n\n /**\n * Move the canvas with relative offsets\n * @param {number} offsetX - The relative offset distance on the x-axis.\n * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.\n * @returns {Cropper} this\n */\n move: function move(offsetX) {\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX;\n var _this$canvasData = this.canvasData,\n left = _this$canvasData.left,\n top = _this$canvasData.top;\n return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY));\n },\n\n /**\n * Move the canvas to an absolute point\n * @param {number} x - The x-axis coordinate.\n * @param {number} [y=x] - The y-axis coordinate.\n * @returns {Cropper} this\n */\n moveTo: function moveTo(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var canvasData = this.canvasData;\n var changed = false;\n x = Number(x);\n y = Number(y);\n\n if (this.ready && !this.disabled && this.options.movable) {\n if (isNumber(x)) {\n canvasData.left = x;\n changed = true;\n }\n\n if (isNumber(y)) {\n canvasData.top = y;\n changed = true;\n }\n\n if (changed) {\n this.renderCanvas(true);\n }\n }\n\n return this;\n },\n\n /**\n * Zoom the canvas with a relative ratio\n * @param {number} ratio - The target ratio.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoom: function zoom(ratio, _originalEvent) {\n var canvasData = this.canvasData;\n ratio = Number(ratio);\n\n if (ratio < 0) {\n ratio = 1 / (1 - ratio);\n } else {\n ratio = 1 + ratio;\n }\n\n return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\n },\n\n /**\n * Zoom the canvas to an absolute ratio\n * @param {number} ratio - The target ratio.\n * @param {Object} pivot - The zoom pivot point coordinate.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoomTo: function zoomTo(ratio, pivot, _originalEvent) {\n var options = this.options,\n canvasData = this.canvasData;\n var width = canvasData.width,\n height = canvasData.height,\n naturalWidth = canvasData.naturalWidth,\n naturalHeight = canvasData.naturalHeight;\n ratio = Number(ratio);\n\n if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\n var newWidth = naturalWidth * ratio;\n var newHeight = naturalHeight * ratio;\n\n if (dispatchEvent(this.element, EVENT_ZOOM, {\n ratio: ratio,\n oldRatio: width / naturalWidth,\n originalEvent: _originalEvent\n }) === false) {\n return this;\n }\n\n if (_originalEvent) {\n var pointers = this.pointers;\n var offset = getOffset(this.cropper);\n var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\n pageX: _originalEvent.pageX,\n pageY: _originalEvent.pageY\n }; // Zoom from the triggering point of the event\n\n canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height);\n } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\n canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height);\n } else {\n // Zoom from the center of the canvas\n canvasData.left -= (newWidth - width) / 2;\n canvasData.top -= (newHeight - height) / 2;\n }\n\n canvasData.width = newWidth;\n canvasData.height = newHeight;\n this.renderCanvas(true);\n }\n\n return this;\n },\n\n /**\n * Rotate the canvas with a relative degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotate: function rotate(degree) {\n return this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n },\n\n /**\n * Rotate the canvas to an absolute degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotateTo: function rotateTo(degree) {\n degree = Number(degree);\n\n if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\n this.imageData.rotate = degree % 360;\n this.renderCanvas(true, true);\n }\n\n return this;\n },\n\n /**\n * Scale the image on the x-axis.\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @returns {Cropper} this\n */\n scaleX: function scaleX(_scaleX) {\n var scaleY = this.imageData.scaleY;\n return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1);\n },\n\n /**\n * Scale the image on the y-axis.\n * @param {number} scaleY - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scaleY: function scaleY(_scaleY) {\n var scaleX = this.imageData.scaleX;\n return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY);\n },\n\n /**\n * Scale the image\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scale: function scale(scaleX) {\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n var imageData = this.imageData;\n var transformed = false;\n scaleX = Number(scaleX);\n scaleY = Number(scaleY);\n\n if (this.ready && !this.disabled && this.options.scalable) {\n if (isNumber(scaleX)) {\n imageData.scaleX = scaleX;\n transformed = true;\n }\n\n if (isNumber(scaleY)) {\n imageData.scaleY = scaleY;\n transformed = true;\n }\n\n if (transformed) {\n this.renderCanvas(true, true);\n }\n }\n\n return this;\n },\n\n /**\n * Get the cropped area position and size data (base on the original image)\n * @param {boolean} [rounded=false] - Indicate if round the data values or not.\n * @returns {Object} The result cropped data.\n */\n getData: function getData() {\n var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var data;\n\n if (this.ready && this.cropped) {\n data = {\n x: cropBoxData.left - canvasData.left,\n y: cropBoxData.top - canvasData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n var ratio = imageData.width / imageData.naturalWidth;\n forEach(data, function (n, i) {\n data[i] = n / ratio;\n });\n\n if (rounded) {\n // In case rounding off leads to extra 1px in right or bottom border\n // we should round the top-left corner and the dimension (#343).\n var bottom = Math.round(data.y + data.height);\n var right = Math.round(data.x + data.width);\n data.x = Math.round(data.x);\n data.y = Math.round(data.y);\n data.width = right - data.x;\n data.height = bottom - data.y;\n }\n } else {\n data = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n\n if (options.rotatable) {\n data.rotate = imageData.rotate || 0;\n }\n\n if (options.scalable) {\n data.scaleX = imageData.scaleX || 1;\n data.scaleY = imageData.scaleY || 1;\n }\n\n return data;\n },\n\n /**\n * Set the cropped area position and size with new data\n * @param {Object} data - The new data.\n * @returns {Cropper} this\n */\n setData: function setData(data) {\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData;\n var cropBoxData = {};\n\n if (this.ready && !this.disabled && isPlainObject(data)) {\n var transformed = false;\n\n if (options.rotatable) {\n if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\n imageData.rotate = data.rotate;\n transformed = true;\n }\n }\n\n if (options.scalable) {\n if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) {\n imageData.scaleX = data.scaleX;\n transformed = true;\n }\n\n if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\n imageData.scaleY = data.scaleY;\n transformed = true;\n }\n }\n\n if (transformed) {\n this.renderCanvas(true, true);\n }\n\n var ratio = imageData.width / imageData.naturalWidth;\n\n if (isNumber(data.x)) {\n cropBoxData.left = data.x * ratio + canvasData.left;\n }\n\n if (isNumber(data.y)) {\n cropBoxData.top = data.y * ratio + canvasData.top;\n }\n\n if (isNumber(data.width)) {\n cropBoxData.width = data.width * ratio;\n }\n\n if (isNumber(data.height)) {\n cropBoxData.height = data.height * ratio;\n }\n\n this.setCropBoxData(cropBoxData);\n }\n\n return this;\n },\n\n /**\n * Get the container size data.\n * @returns {Object} The result container data.\n */\n getContainerData: function getContainerData() {\n return this.ready ? assign({}, this.containerData) : {};\n },\n\n /**\n * Get the image position and size data.\n * @returns {Object} The result image data.\n */\n getImageData: function getImageData() {\n return this.sized ? assign({}, this.imageData) : {};\n },\n\n /**\n * Get the canvas position and size data.\n * @returns {Object} The result canvas data.\n */\n getCanvasData: function getCanvasData() {\n var canvasData = this.canvasData;\n var data = {};\n\n if (this.ready) {\n forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) {\n data[n] = canvasData[n];\n });\n }\n\n return data;\n },\n\n /**\n * Set the canvas position and size with new data.\n * @param {Object} data - The new canvas data.\n * @returns {Cropper} this\n */\n setCanvasData: function setCanvasData(data) {\n var canvasData = this.canvasData;\n var aspectRatio = canvasData.aspectRatio;\n\n if (this.ready && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n canvasData.left = data.left;\n }\n\n if (isNumber(data.top)) {\n canvasData.top = data.top;\n }\n\n if (isNumber(data.width)) {\n canvasData.width = data.width;\n canvasData.height = data.width / aspectRatio;\n } else if (isNumber(data.height)) {\n canvasData.height = data.height;\n canvasData.width = data.height * aspectRatio;\n }\n\n this.renderCanvas(true);\n }\n\n return this;\n },\n\n /**\n * Get the crop box position and size data.\n * @returns {Object} The result crop box data.\n */\n getCropBoxData: function getCropBoxData() {\n var cropBoxData = this.cropBoxData;\n var data;\n\n if (this.ready && this.cropped) {\n data = {\n left: cropBoxData.left,\n top: cropBoxData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n }\n\n return data || {};\n },\n\n /**\n * Set the crop box position and size with new data.\n * @param {Object} data - The new crop box data.\n * @returns {Cropper} this\n */\n setCropBoxData: function setCropBoxData(data) {\n var cropBoxData = this.cropBoxData;\n var aspectRatio = this.options.aspectRatio;\n var widthChanged;\n var heightChanged;\n\n if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n cropBoxData.left = data.left;\n }\n\n if (isNumber(data.top)) {\n cropBoxData.top = data.top;\n }\n\n if (isNumber(data.width) && data.width !== cropBoxData.width) {\n widthChanged = true;\n cropBoxData.width = data.width;\n }\n\n if (isNumber(data.height) && data.height !== cropBoxData.height) {\n heightChanged = true;\n cropBoxData.height = data.height;\n }\n\n if (aspectRatio) {\n if (widthChanged) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else if (heightChanged) {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n\n this.renderCropBox();\n }\n\n return this;\n },\n\n /**\n * Get a canvas drawn the cropped image.\n * @param {Object} [options={}] - The config options.\n * @returns {HTMLCanvasElement} - The result canvas.\n */\n getCroppedCanvas: function getCroppedCanvas() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (!this.ready || !window.HTMLCanvasElement) {\n return null;\n }\n\n var canvasData = this.canvasData;\n var source = getSourceCanvas(this.image, this.imageData, canvasData, options); // Returns the source canvas if it is not cropped.\n\n if (!this.cropped) {\n return source;\n }\n\n var _this$getData = this.getData(),\n initialX = _this$getData.x,\n initialY = _this$getData.y,\n initialWidth = _this$getData.width,\n initialHeight = _this$getData.height;\n\n var ratio = source.width / Math.floor(canvasData.naturalWidth);\n\n if (ratio !== 1) {\n initialX *= ratio;\n initialY *= ratio;\n initialWidth *= ratio;\n initialHeight *= ratio;\n }\n\n var aspectRatio = initialWidth / initialHeight;\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.maxWidth || Infinity,\n height: options.maxHeight || Infinity\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.minWidth || 0,\n height: options.minHeight || 0\n }, 'cover');\n\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.width || (ratio !== 1 ? source.width : initialWidth),\n height: options.height || (ratio !== 1 ? source.height : initialHeight)\n }),\n width = _getAdjustedSizes.width,\n height = _getAdjustedSizes.height;\n\n width = Math.min(maxSizes.width, Math.max(minSizes.width, width));\n height = Math.min(maxSizes.height, Math.max(minSizes.height, height));\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = options.fillColor || 'transparent';\n context.fillRect(0, 0, width, height);\n var _options$imageSmoothi = options.imageSmoothingEnabled,\n imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi,\n imageSmoothingQuality = options.imageSmoothingQuality;\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n\n if (imageSmoothingQuality) {\n context.imageSmoothingQuality = imageSmoothingQuality;\n } // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\n\n\n var sourceWidth = source.width;\n var sourceHeight = source.height; // Source canvas parameters\n\n var srcX = initialX;\n var srcY = initialY;\n var srcWidth;\n var srcHeight; // Destination canvas parameters\n\n var dstX;\n var dstY;\n var dstWidth;\n var dstHeight;\n\n if (srcX <= -initialWidth || srcX > sourceWidth) {\n srcX = 0;\n srcWidth = 0;\n dstX = 0;\n dstWidth = 0;\n } else if (srcX <= 0) {\n dstX = -srcX;\n srcX = 0;\n srcWidth = Math.min(sourceWidth, initialWidth + srcX);\n dstWidth = srcWidth;\n } else if (srcX <= sourceWidth) {\n dstX = 0;\n srcWidth = Math.min(initialWidth, sourceWidth - srcX);\n dstWidth = srcWidth;\n }\n\n if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) {\n srcY = 0;\n srcHeight = 0;\n dstY = 0;\n dstHeight = 0;\n } else if (srcY <= 0) {\n dstY = -srcY;\n srcY = 0;\n srcHeight = Math.min(sourceHeight, initialHeight + srcY);\n dstHeight = srcHeight;\n } else if (srcY <= sourceHeight) {\n dstY = 0;\n srcHeight = Math.min(initialHeight, sourceHeight - srcY);\n dstHeight = srcHeight;\n }\n\n var params = [srcX, srcY, srcWidth, srcHeight]; // Avoid \"IndexSizeError\"\n\n if (dstWidth > 0 && dstHeight > 0) {\n var scale = width / initialWidth;\n params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\n } // All the numerical parameters should be integer for `drawImage`\n // https://github.com/fengyuanchen/cropper/issues/476\n\n\n context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n return canvas;\n },\n\n /**\n * Change the aspect ratio of the crop box.\n * @param {number} aspectRatio - The new aspect ratio.\n * @returns {Cropper} this\n */\n setAspectRatio: function setAspectRatio(aspectRatio) {\n var options = this.options;\n\n if (!this.disabled && !isUndefined(aspectRatio)) {\n // 0 -> NaN\n options.aspectRatio = Math.max(0, aspectRatio) || NaN;\n\n if (this.ready) {\n this.initCropBox();\n\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n }\n\n return this;\n },\n\n /**\n * Change the drag mode.\n * @param {string} mode - The new drag mode.\n * @returns {Cropper} this\n */\n setDragMode: function setDragMode(mode) {\n var options = this.options,\n dragBox = this.dragBox,\n face = this.face;\n\n if (this.ready && !this.disabled) {\n var croppable = mode === DRAG_MODE_CROP;\n var movable = options.movable && mode === DRAG_MODE_MOVE;\n mode = croppable || movable ? mode : DRAG_MODE_NONE;\n options.dragMode = mode;\n setData(dragBox, DATA_ACTION, mode);\n toggleClass(dragBox, CLASS_CROP, croppable);\n toggleClass(dragBox, CLASS_MOVE, movable);\n\n if (!options.cropBoxMovable) {\n // Sync drag mode to crop box when it is not movable\n setData(face, DATA_ACTION, mode);\n toggleClass(face, CLASS_CROP, croppable);\n toggleClass(face, CLASS_MOVE, movable);\n }\n }\n\n return this;\n }\n };\n\n var AnotherCropper = WINDOW.Cropper;\n\n var Cropper = /*#__PURE__*/function () {\n /**\n * Create a new Cropper.\n * @param {Element} element - The target element for cropping.\n * @param {Object} [options={}] - The configuration options.\n */\n function Cropper(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Cropper);\n\n if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\n throw new Error('The first argument is required and must be an or element.');\n }\n\n this.element = element;\n this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n this.cropped = false;\n this.disabled = false;\n this.pointers = {};\n this.ready = false;\n this.reloading = false;\n this.replaced = false;\n this.sized = false;\n this.sizing = false;\n this.init();\n }\n\n _createClass(Cropper, [{\n key: \"init\",\n value: function init() {\n var element = this.element;\n var tagName = element.tagName.toLowerCase();\n var url;\n\n if (element[NAMESPACE]) {\n return;\n }\n\n element[NAMESPACE] = this;\n\n if (tagName === 'img') {\n this.isImg = true; // e.g.: \"img/picture.jpg\"\n\n url = element.getAttribute('src') || '';\n this.originalUrl = url; // Stop when it's a blank image\n\n if (!url) {\n return;\n } // e.g.: \"https://example.com/img/picture.jpg\"\n\n\n url = element.src;\n } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n url = element.toDataURL();\n }\n\n this.load(url);\n }\n }, {\n key: \"load\",\n value: function load(url) {\n var _this = this;\n\n if (!url) {\n return;\n }\n\n this.url = url;\n this.imageData = {};\n var element = this.element,\n options = this.options;\n\n if (!options.rotatable && !options.scalable) {\n options.checkOrientation = false;\n } // Only IE10+ supports Typed Arrays\n\n\n if (!options.checkOrientation || !window.ArrayBuffer) {\n this.clone();\n return;\n } // Detect the mime type of the image directly if it is a Data URL\n\n\n if (REGEXP_DATA_URL.test(url)) {\n // Read ArrayBuffer from Data URL of JPEG images directly for better performance\n if (REGEXP_DATA_URL_JPEG.test(url)) {\n this.read(dataURLToArrayBuffer(url));\n } else {\n // Only a JPEG image may contains Exif Orientation information,\n // the rest types of Data URLs are not necessary to check orientation at all.\n this.clone();\n }\n\n return;\n } // 1. Detect the mime type of the image by a XMLHttpRequest.\n // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image.\n\n\n var xhr = new XMLHttpRequest();\n var clone = this.clone.bind(this);\n this.reloading = true;\n this.xhr = xhr; // 1. Cross origin requests are only supported for protocol schemes:\n // http, https, data, chrome, chrome-extension.\n // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy\n // in some browsers as IE11 and Safari.\n\n xhr.onabort = clone;\n xhr.onerror = clone;\n xhr.ontimeout = clone;\n\n xhr.onprogress = function () {\n // Abort the request directly if it not a JPEG image for better performance\n if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\n xhr.abort();\n }\n };\n\n xhr.onload = function () {\n _this.read(xhr.response);\n };\n\n xhr.onloadend = function () {\n _this.reloading = false;\n _this.xhr = null;\n }; // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\n\n\n if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\n url = addTimestamp(url);\n }\n\n xhr.open('GET', url);\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.sizing = false;\n _this2.sized = true;\n\n _this2.build();\n }; // Most modern browsers (excepts iOS WebKit)\n\n\n if (image.naturalWidth && !isIOSWebKit) {\n done(image.naturalWidth, image.naturalHeight);\n return;\n }\n\n var sizingImage = document.createElement('img');\n var body = document.body || document.documentElement;\n this.sizingImage = sizingImage;\n\n sizingImage.onload = function () {\n done(sizingImage.width, sizingImage.height);\n\n if (!isIOSWebKit) {\n body.removeChild(sizingImage);\n }\n };\n\n sizingImage.src = image.src; // iOS WebKit will convert the image automatically\n // with its orientation once append it into DOM (#279)\n\n if (!isIOSWebKit) {\n sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n body.appendChild(sizingImage);\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n image.parentNode.removeChild(image);\n this.image = null;\n }\n }, {\n key: \"build\",\n value: function build() {\n if (!this.sized || this.ready) {\n return;\n }\n\n var element = this.element,\n options = this.options,\n image = this.image; // Create cropper elements\n\n var container = element.parentNode;\n var template = document.createElement('div');\n template.innerHTML = TEMPLATE;\n var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\n var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\n var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\n this.container = container;\n this.cropper = cropper;\n this.canvas = canvas;\n this.dragBox = dragBox;\n this.cropBox = cropBox;\n this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\n this.face = face;\n canvas.appendChild(image); // Hide the original image\n\n addClass(element, CLASS_HIDDEN); // Inserts the cropper after to the current image\n\n container.insertBefore(cropper, element.nextSibling); // Show the image if is hidden\n\n if (!this.isImg) {\n removeClass(image, CLASS_HIDE);\n }\n\n this.initPreview();\n this.bind();\n options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\n options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\n options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\n addClass(cropBox, CLASS_HIDDEN);\n\n if (!options.guides) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\n }\n\n if (!options.center) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\n }\n\n if (options.background) {\n addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\n }\n\n if (!options.highlight) {\n addClass(face, CLASS_INVISIBLE);\n }\n\n if (options.cropBoxMovable) {\n addClass(face, CLASS_MOVE);\n setData(face, DATA_ACTION, ACTION_ALL);\n }\n\n if (!options.cropBoxResizable) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\n }\n\n this.render();\n this.ready = true;\n this.setDragMode(options.dragMode);\n\n if (options.autoCrop) {\n this.crop();\n }\n\n this.setData(options.data);\n\n if (isFunction(options.ready)) {\n addListener(element, EVENT_READY, options.ready, {\n once: true\n });\n }\n\n dispatchEvent(element, EVENT_READY);\n }\n }, {\n key: \"unbuild\",\n value: function unbuild() {\n if (!this.ready) {\n return;\n }\n\n this.ready = false;\n this.unbind();\n this.resetPreview();\n this.cropper.parentNode.removeChild(this.cropper);\n removeClass(this.element, CLASS_HIDDEN);\n }\n }, {\n key: \"uncreate\",\n value: function uncreate() {\n if (this.ready) {\n this.unbuild();\n this.ready = false;\n this.cropped = false;\n } else if (this.sizing) {\n this.sizingImage.onload = null;\n this.sizing = false;\n this.sized = false;\n } else if (this.reloading) {\n this.xhr.onabort = null;\n this.xhr.abort();\n } else if (this.image) {\n this.stop();\n }\n }\n /**\n * Get the no conflict cropper class.\n * @returns {Cropper} The cropper class.\n */\n\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Cropper = AnotherCropper;\n return Cropper;\n }\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n assign(DEFAULTS, isPlainObject(options) && options);\n }\n }]);\n\n return Cropper;\n }();\n\n assign(Cropper.prototype, render, preview, events, handlers, change, methods);\n\n return Cropper;\n\n})));\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Cropper.vue?vue&type=style&index=1&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Cropper.vue?vue&type=style&index=1&lang=scss&\"","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n"],"sourceRoot":""}