{"version":3,"file":"9d19fcc4ad93aad89950-94.js","mappings":"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","sources":["webpack://letusletu/./node_modules/cropperjs/dist/cropper.esm.js","webpack://letusletu/./node_modules/js-cookie/src/js.cookie.js","webpack://letusletu/./node_modules/pica/dist/pica.js"],"sourcesContent":["/*!\n * Cropper.js v1.5.12\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2021-06-12T08:00:17.411Z\n */\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _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\nfunction _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\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _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\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _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\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _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\nfunction _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\nfunction _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\nvar IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nvar WINDOW = IS_BROWSER ? window : {};\nvar IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\nvar HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\nvar NAMESPACE = 'cropper'; // Actions\n\nvar ACTION_ALL = 'all';\nvar ACTION_CROP = 'crop';\nvar ACTION_MOVE = 'move';\nvar ACTION_ZOOM = 'zoom';\nvar ACTION_EAST = 'e';\nvar ACTION_WEST = 'w';\nvar ACTION_SOUTH = 's';\nvar ACTION_NORTH = 'n';\nvar ACTION_NORTH_EAST = 'ne';\nvar ACTION_NORTH_WEST = 'nw';\nvar ACTION_SOUTH_EAST = 'se';\nvar ACTION_SOUTH_WEST = 'sw'; // Classes\n\nvar CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\nvar CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\nvar CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\nvar CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\nvar CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\nvar CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\nvar CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\"); // Data keys\n\nvar DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\nvar DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\"); // Drag modes\n\nvar DRAG_MODE_CROP = 'crop';\nvar DRAG_MODE_MOVE = 'move';\nvar DRAG_MODE_NONE = 'none'; // Events\n\nvar EVENT_CROP = 'crop';\nvar EVENT_CROP_END = 'cropend';\nvar EVENT_CROP_MOVE = 'cropmove';\nvar EVENT_CROP_START = 'cropstart';\nvar EVENT_DBLCLICK = 'dblclick';\nvar EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\nvar EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\nvar EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\nvar EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\nvar EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\nvar EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\nvar EVENT_READY = 'ready';\nvar EVENT_RESIZE = 'resize';\nvar EVENT_WHEEL = 'wheel';\nvar EVENT_ZOOM = 'zoom'; // Mime types\n\nvar MIME_TYPE_JPEG = 'image/jpeg'; // RegExps\n\nvar REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\nvar REGEXP_DATA_URL = /^data:/;\nvar REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\nvar REGEXP_TAG_NAME = /^img|canvas$/i; // Misc\n// Inspired by the default width and height of a canvas element.\n\nvar MIN_CONTAINER_WIDTH = 200;\nvar MIN_CONTAINER_HEIGHT = 100;\n\nvar DEFAULTS = {\n // Define the view mode of the cropper\n viewMode: 0,\n // 0, 1, 2, 3\n // Define the dragging mode of the cropper\n dragMode: DRAG_MODE_CROP,\n // 'crop', 'move' or 'none'\n // Define the initial aspect ratio of the crop box\n initialAspectRatio: NaN,\n // Define the aspect ratio of the crop box\n aspectRatio: NaN,\n // An object with the previous cropping result data\n data: null,\n // A selector for adding extra containers to preview\n preview: '',\n // Re-render the cropper when resize the window\n responsive: true,\n // Restore the cropped area after resize the window\n restore: true,\n // Check if the current image is a cross-origin image\n checkCrossOrigin: true,\n // Check the current image's Exif Orientation information\n checkOrientation: true,\n // Show the black modal\n modal: true,\n // Show the dashed lines for guiding\n guides: true,\n // Show the center indicator for guiding\n center: true,\n // Show the white modal to highlight the crop box\n highlight: true,\n // Show the grid background\n background: true,\n // Enable to crop the image automatically when initialize\n autoCrop: true,\n // Define the percentage of automatic cropping area when initializes\n autoCropArea: 0.8,\n // Enable to move the image\n movable: true,\n // Enable to rotate the image\n rotatable: true,\n // Enable to scale the image\n scalable: true,\n // Enable to zoom the image\n zoomable: true,\n // Enable to zoom the image by dragging touch\n zoomOnTouch: true,\n // Enable to zoom the image by wheeling mouse\n zoomOnWheel: true,\n // Define zoom ratio when zoom the image by wheeling mouse\n wheelZoomRatio: 0.1,\n // Enable to move the crop box\n cropBoxMovable: true,\n // Enable to resize the crop box\n cropBoxResizable: true,\n // Toggle drag mode between \"crop\" and \"move\" when click twice on the cropper\n toggleDragModeOnDblclick: true,\n // Size limitation\n minCanvasWidth: 0,\n minCanvasHeight: 0,\n minCropBoxWidth: 0,\n minCropBoxHeight: 0,\n minContainerWidth: MIN_CONTAINER_WIDTH,\n minContainerHeight: MIN_CONTAINER_HEIGHT,\n // Shortcuts of events\n ready: null,\n cropstart: null,\n cropmove: null,\n cropend: null,\n crop: null,\n zoom: null\n};\n\nvar TEMPLATE = '
' + '
' + '
' + '
' + '
' + '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
' + '
';\n\n/**\n * Check if the given value is not a number.\n */\n\nvar 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\nfunction 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\nvar 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\nfunction 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\nfunction isObject(value) {\n return _typeof(value) === 'object' && value !== null;\n}\nvar 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\nfunction 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\nfunction isFunction(value) {\n return typeof value === 'function';\n}\nvar 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\nfunction 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\nfunction 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\nvar 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};\nvar 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\nfunction 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}\nvar 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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}\nvar 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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}\nvar REGEXP_SPACES = /\\s\\s*/;\n\nvar 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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}\nvar location = WINDOW.location;\nvar 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\nfunction 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\nfunction 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\nfunction 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\nfunction getMaxZoomRatio(pointers) {\n var pointers2 = _objectSpread2({}, pointers);\n\n var maxRatio = 0;\n forEach(pointers, function (pointer, pointerId) {\n delete pointers2[pointerId];\n forEach(pointers2, function (pointer2) {\n var x1 = Math.abs(pointer.startX - pointer2.startX);\n var y1 = Math.abs(pointer.startY - pointer2.startY);\n var x2 = Math.abs(pointer.endX - pointer2.endX);\n var y2 = Math.abs(pointer.endY - pointer2.endY);\n var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n var ratio = (z2 - z1) / z1;\n\n if (Math.abs(ratio) > Math.abs(maxRatio)) {\n maxRatio = ratio;\n }\n });\n });\n return maxRatio;\n}\n/**\n * Get a pointer from an event object.\n * @param {Object} event - The target event object.\n * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n * @returns {Object} The result pointer contains start and/or end point coordinates.\n */\n\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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}\nvar 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\nfunction 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}\nvar 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nvar render = {\n render: function render() {\n this.initContainer();\n this.initCanvas();\n this.initCropBox();\n this.renderCanvas();\n\n if (this.cropped) {\n this.renderCropBox();\n }\n },\n initContainer: function initContainer() {\n var element = this.element,\n options = this.options,\n container = this.container,\n cropper = this.cropper;\n var minWidth = Number(options.minContainerWidth);\n var minHeight = Number(options.minContainerHeight);\n addClass(cropper, CLASS_HIDDEN);\n removeClass(element, CLASS_HIDDEN);\n var containerData = {\n width: Math.max(container.offsetWidth, minWidth >= 0 ? minWidth : MIN_CONTAINER_WIDTH),\n height: Math.max(container.offsetHeight, minHeight >= 0 ? minHeight : MIN_CONTAINER_HEIGHT)\n };\n this.containerData = containerData;\n setStyle(cropper, {\n width: containerData.width,\n height: containerData.height\n });\n addClass(element, CLASS_HIDDEN);\n removeClass(cropper, CLASS_HIDDEN);\n },\n // Canvas (image wrapper)\n initCanvas: function initCanvas() {\n var containerData = this.containerData,\n imageData = this.imageData;\n var viewMode = this.options.viewMode;\n var rotated = Math.abs(imageData.rotate) % 180 === 90;\n var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth;\n var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight;\n var aspectRatio = naturalWidth / naturalHeight;\n var canvasWidth = containerData.width;\n var canvasHeight = containerData.height;\n\n if (containerData.height * aspectRatio > containerData.width) {\n if (viewMode === 3) {\n canvasWidth = containerData.height * aspectRatio;\n } else {\n canvasHeight = containerData.width / aspectRatio;\n }\n } else if (viewMode === 3) {\n canvasHeight = containerData.width / aspectRatio;\n } else {\n canvasWidth = containerData.height * aspectRatio;\n }\n\n var canvasData = {\n aspectRatio: aspectRatio,\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n width: canvasWidth,\n height: canvasHeight\n };\n this.canvasData = canvasData;\n this.limited = viewMode === 1 || viewMode === 2;\n this.limitCanvas(true, true);\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n canvasData.left = (containerData.width - canvasData.width) / 2;\n canvasData.top = (containerData.height - canvasData.height) / 2;\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n this.initialCanvasData = assign({}, canvasData);\n },\n limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var viewMode = options.viewMode;\n var aspectRatio = canvasData.aspectRatio;\n var cropped = this.cropped && cropBoxData;\n\n if (sizeLimited) {\n var minCanvasWidth = Number(options.minCanvasWidth) || 0;\n var minCanvasHeight = Number(options.minCanvasHeight) || 0;\n\n if (viewMode > 1) {\n minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\n minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\n\n if (viewMode === 3) {\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n } else if (viewMode > 0) {\n if (minCanvasWidth) {\n minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\n } else if (minCanvasHeight) {\n minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\n } else if (cropped) {\n minCanvasWidth = cropBoxData.width;\n minCanvasHeight = cropBoxData.height;\n\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n }\n\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minCanvasWidth,\n height: minCanvasHeight\n });\n\n minCanvasWidth = _getAdjustedSizes.width;\n minCanvasHeight = _getAdjustedSizes.height;\n canvasData.minWidth = minCanvasWidth;\n canvasData.minHeight = minCanvasHeight;\n canvasData.maxWidth = Infinity;\n canvasData.maxHeight = Infinity;\n }\n\n if (positionLimited) {\n if (viewMode > (cropped ? 0 : 1)) {\n var newCanvasLeft = containerData.width - canvasData.width;\n var newCanvasTop = containerData.height - canvasData.height;\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n\n if (cropped && this.limited) {\n canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\n canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\n canvasData.maxLeft = cropBoxData.left;\n canvasData.maxTop = cropBoxData.top;\n\n if (viewMode === 2) {\n if (canvasData.width >= containerData.width) {\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n }\n\n if (canvasData.height >= containerData.height) {\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n }\n }\n }\n } else {\n canvasData.minLeft = -canvasData.width;\n canvasData.minTop = -canvasData.height;\n canvasData.maxLeft = containerData.width;\n canvasData.maxTop = containerData.height;\n }\n }\n },\n renderCanvas: function renderCanvas(changed, transformed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n\n if (transformed) {\n var _getRotatedSizes = getRotatedSizes({\n width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\n height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\n degree: imageData.rotate || 0\n }),\n naturalWidth = _getRotatedSizes.width,\n naturalHeight = _getRotatedSizes.height;\n\n var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\n var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\n canvasData.left -= (width - canvasData.width) / 2;\n canvasData.top -= (height - canvasData.height) / 2;\n canvasData.width = width;\n canvasData.height = height;\n canvasData.aspectRatio = naturalWidth / naturalHeight;\n canvasData.naturalWidth = naturalWidth;\n canvasData.naturalHeight = naturalHeight;\n this.limitCanvas(true, false);\n }\n\n if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\n canvasData.left = canvasData.oldLeft;\n }\n\n if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\n canvasData.top = canvasData.oldTop;\n }\n\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n this.limitCanvas(false, true);\n canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\n canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n setStyle(this.canvas, assign({\n width: canvasData.width,\n height: canvasData.height\n }, getTransforms({\n translateX: canvasData.left,\n translateY: canvasData.top\n })));\n this.renderImage(changed);\n\n if (this.cropped && this.limited) {\n this.limitCropBox(true, true);\n }\n },\n renderImage: function renderImage(changed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\n var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\n assign(imageData, {\n width: width,\n height: height,\n left: (canvasData.width - width) / 2,\n top: (canvasData.height - height) / 2\n });\n setStyle(this.image, assign({\n width: imageData.width,\n height: imageData.height\n }, getTransforms(assign({\n translateX: imageData.left,\n translateY: imageData.top\n }, imageData))));\n\n if (changed) {\n this.output();\n }\n },\n initCropBox: function initCropBox() {\n var options = this.options,\n canvasData = this.canvasData;\n var aspectRatio = options.aspectRatio || options.initialAspectRatio;\n var autoCropArea = Number(options.autoCropArea) || 0.8;\n var cropBoxData = {\n width: canvasData.width,\n height: canvasData.height\n };\n\n if (aspectRatio) {\n if (canvasData.height * aspectRatio > canvasData.width) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n\n this.cropBoxData = cropBoxData;\n this.limitCropBox(true, true); // Initialize auto crop area\n\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight); // The width/height of auto crop area must large than \"minWidth/Height\"\n\n cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\n cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\n cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\n cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n this.initialCropBoxData = assign({}, cropBoxData);\n },\n limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData,\n limited = this.limited;\n var aspectRatio = options.aspectRatio;\n\n if (sizeLimited) {\n var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\n var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\n var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\n var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height; // The min/maxCropBoxWidth/Height must be less than container's width/height\n\n minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\n minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\n\n if (aspectRatio) {\n if (minCropBoxWidth && minCropBoxHeight) {\n if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n } else if (minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else if (minCropBoxHeight) {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n\n if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\n maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\n } else {\n maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\n }\n } // The minWidth/Height must be less than maxWidth/Height\n\n\n cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\n cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\n cropBoxData.maxWidth = maxCropBoxWidth;\n cropBoxData.maxHeight = maxCropBoxHeight;\n }\n\n if (positionLimited) {\n if (limited) {\n cropBoxData.minLeft = Math.max(0, canvasData.left);\n cropBoxData.minTop = Math.max(0, canvasData.top);\n cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\n cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\n } else {\n cropBoxData.minLeft = 0;\n cropBoxData.minTop = 0;\n cropBoxData.maxLeft = containerData.width - cropBoxData.width;\n cropBoxData.maxTop = containerData.height - cropBoxData.height;\n }\n }\n },\n renderCropBox: function renderCropBox() {\n var options = this.options,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData;\n\n if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\n cropBoxData.left = cropBoxData.oldLeft;\n }\n\n if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\n cropBoxData.top = cropBoxData.oldTop;\n }\n\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n this.limitCropBox(false, true);\n cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\n cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n\n if (options.movable && options.cropBoxMovable) {\n // Turn to move the canvas when the crop box is equal to the container\n setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\n }\n\n setStyle(this.cropBox, assign({\n width: cropBoxData.width,\n height: cropBoxData.height\n }, getTransforms({\n translateX: cropBoxData.left,\n translateY: cropBoxData.top\n })));\n\n if (this.cropped && this.limited) {\n this.limitCanvas(true, true);\n }\n\n if (!this.disabled) {\n this.output();\n }\n },\n output: function output() {\n this.preview();\n dispatchEvent(this.element, EVENT_CROP, this.getData());\n }\n};\n\nvar 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\nvar 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\nvar handlers = {\n resize: function resize() {\n if (this.disabled) {\n return;\n }\n\n var options = this.options,\n container = this.container,\n containerData = this.containerData;\n var ratioX = container.offsetWidth / containerData.width;\n var ratioY = container.offsetHeight / containerData.height;\n var ratio = Math.abs(ratioX - 1) > Math.abs(ratioY - 1) ? ratioX : ratioY; // Resize when width changed or height changed\n\n if (ratio !== 1) {\n var canvasData;\n var cropBoxData;\n\n if (options.restore) {\n canvasData = this.getCanvasData();\n cropBoxData = this.getCropBoxData();\n }\n\n this.render();\n\n if (options.restore) {\n this.setCanvasData(forEach(canvasData, function (n, i) {\n canvasData[i] = n * ratio;\n }));\n this.setCropBoxData(forEach(cropBoxData, function (n, i) {\n cropBoxData[i] = n * ratio;\n }));\n }\n }\n },\n dblclick: function dblclick() {\n if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\n return;\n }\n\n this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\n },\n wheel: function wheel(event) {\n var _this = this;\n\n var ratio = Number(this.options.wheelZoomRatio) || 0.1;\n var delta = 1;\n\n if (this.disabled) {\n return;\n }\n\n event.preventDefault(); // Limit wheel speed to prevent zoom too fast (#21)\n\n if (this.wheeling) {\n return;\n }\n\n this.wheeling = true;\n setTimeout(function () {\n _this.wheeling = false;\n }, 50);\n\n if (event.deltaY) {\n delta = event.deltaY > 0 ? 1 : -1;\n } else if (event.wheelDelta) {\n delta = -event.wheelDelta / 120;\n } else if (event.detail) {\n delta = event.detail > 0 ? 1 : -1;\n }\n\n this.zoom(-delta * ratio, event);\n },\n cropStart: function cropStart(event) {\n var buttons = event.buttons,\n button = event.button;\n\n if (this.disabled // Handle mouse event and pointer event and ignore touch event\n || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && ( // No primary button (Usually the left button)\n isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0 // Open context menu\n || event.ctrlKey)) {\n return;\n }\n\n var options = this.options,\n pointers = this.pointers;\n var action;\n\n if (event.changedTouches) {\n // Handle touch event\n forEach(event.changedTouches, function (touch) {\n pointers[touch.identifier] = getPointer(touch);\n });\n } else {\n // Handle mouse event and pointer event\n pointers[event.pointerId || 0] = getPointer(event);\n }\n\n if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\n action = ACTION_ZOOM;\n } else {\n action = getData(event.target, DATA_ACTION);\n }\n\n if (!REGEXP_ACTIONS.test(action)) {\n return;\n }\n\n if (dispatchEvent(this.element, EVENT_CROP_START, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n } // This line is required for preventing page zooming in iOS browsers\n\n\n event.preventDefault();\n this.action = action;\n this.cropping = false;\n\n if (action === ACTION_CROP) {\n this.cropping = true;\n addClass(this.dragBox, CLASS_MODAL);\n }\n },\n cropMove: function cropMove(event) {\n var action = this.action;\n\n if (this.disabled || !action) {\n return;\n }\n\n var pointers = this.pointers;\n event.preventDefault();\n\n if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n // The first parameter should not be undefined (#432)\n assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n });\n } else {\n assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\n }\n\n this.change(event);\n },\n cropEnd: function cropEnd(event) {\n if (this.disabled) {\n return;\n }\n\n var action = this.action,\n pointers = this.pointers;\n\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n delete pointers[touch.identifier];\n });\n } else {\n delete pointers[event.pointerId || 0];\n }\n\n if (!action) {\n return;\n }\n\n event.preventDefault();\n\n if (!Object.keys(pointers).length) {\n this.action = '';\n }\n\n if (this.cropping) {\n this.cropping = false;\n toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\n }\n\n dispatchEvent(this.element, EVENT_CROP_END, {\n originalEvent: event,\n action: action\n });\n }\n};\n\nvar 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\nvar 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\nvar AnotherCropper = WINDOW.Cropper;\n\nvar Cropper = /*#__PURE__*/function () {\n /**\n * Create a new Cropper.\n * @param {Element} element - The target element for cropping.\n * @param {Object} [options={}] - The configuration options.\n */\n function Cropper(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Cropper);\n\n if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\n throw new Error('The first argument is required and must be an or element.');\n }\n\n this.element = element;\n this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n this.cropped = false;\n this.disabled = false;\n this.pointers = {};\n this.ready = false;\n this.reloading = false;\n this.replaced = false;\n this.sized = false;\n this.sizing = false;\n this.init();\n }\n\n _createClass(Cropper, [{\n key: \"init\",\n value: function init() {\n var element = this.element;\n var tagName = element.tagName.toLowerCase();\n var url;\n\n if (element[NAMESPACE]) {\n return;\n }\n\n element[NAMESPACE] = this;\n\n if (tagName === 'img') {\n this.isImg = true; // e.g.: \"img/picture.jpg\"\n\n url = element.getAttribute('src') || '';\n this.originalUrl = url; // Stop when it's a blank image\n\n if (!url) {\n return;\n } // e.g.: \"https://example.com/img/picture.jpg\"\n\n\n url = element.src;\n } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n url = element.toDataURL();\n }\n\n this.load(url);\n }\n }, {\n key: \"load\",\n value: function load(url) {\n var _this = this;\n\n if (!url) {\n return;\n }\n\n this.url = url;\n this.imageData = {};\n var element = this.element,\n options = this.options;\n\n if (!options.rotatable && !options.scalable) {\n options.checkOrientation = false;\n } // Only IE10+ supports Typed Arrays\n\n\n if (!options.checkOrientation || !window.ArrayBuffer) {\n this.clone();\n return;\n } // Detect the mime type of the image directly if it is a Data URL\n\n\n if (REGEXP_DATA_URL.test(url)) {\n // Read ArrayBuffer from Data URL of JPEG images directly for better performance\n if (REGEXP_DATA_URL_JPEG.test(url)) {\n this.read(dataURLToArrayBuffer(url));\n } else {\n // Only a JPEG image may contains Exif Orientation information,\n // the rest types of Data URLs are not necessary to check orientation at all.\n this.clone();\n }\n\n return;\n } // 1. Detect the mime type of the image by a XMLHttpRequest.\n // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image.\n\n\n var xhr = new XMLHttpRequest();\n var clone = this.clone.bind(this);\n this.reloading = true;\n this.xhr = xhr; // 1. Cross origin requests are only supported for protocol schemes:\n // http, https, data, chrome, chrome-extension.\n // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy\n // in some browsers as IE11 and Safari.\n\n xhr.onabort = clone;\n xhr.onerror = clone;\n xhr.ontimeout = clone;\n\n xhr.onprogress = function () {\n // Abort the request directly if it not a JPEG image for better performance\n if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\n xhr.abort();\n }\n };\n\n xhr.onload = function () {\n _this.read(xhr.response);\n };\n\n xhr.onloadend = function () {\n _this.reloading = false;\n _this.xhr = null;\n }; // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\n\n\n if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\n url = addTimestamp(url);\n } // The third parameter is required for avoiding side-effect (#682)\n\n\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.withCredentials = element.crossOrigin === 'use-credentials';\n xhr.send();\n }\n }, {\n key: \"read\",\n value: function read(arrayBuffer) {\n var options = this.options,\n imageData = this.imageData; // Reset the orientation value to its default value 1\n // as some iOS browsers will render image with its orientation\n\n var orientation = resetAndGetOrientation(arrayBuffer);\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n\n if (orientation > 1) {\n // Generate a new URL which has the default orientation value\n this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\n\n var _parseOrientation = parseOrientation(orientation);\n\n rotate = _parseOrientation.rotate;\n scaleX = _parseOrientation.scaleX;\n scaleY = _parseOrientation.scaleY;\n }\n\n if (options.rotatable) {\n imageData.rotate = rotate;\n }\n\n if (options.scalable) {\n imageData.scaleX = scaleX;\n imageData.scaleY = scaleY;\n }\n\n this.clone();\n }\n }, {\n key: \"clone\",\n value: function clone() {\n var element = this.element,\n url = this.url;\n var crossOrigin = element.crossOrigin;\n var crossOriginUrl = url;\n\n if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\n if (!crossOrigin) {\n crossOrigin = 'anonymous';\n } // Bust cache when there is not a \"crossOrigin\" property (#519)\n\n\n crossOriginUrl = addTimestamp(url);\n }\n\n this.crossOrigin = crossOrigin;\n this.crossOriginUrl = crossOriginUrl;\n var image = document.createElement('img');\n\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n\n image.src = crossOriginUrl || url;\n image.alt = element.alt || 'The image to crop';\n this.image = image;\n image.onload = this.start.bind(this);\n image.onerror = this.stop.bind(this);\n addClass(image, CLASS_HIDE);\n element.parentNode.insertBefore(image, element.nextSibling);\n }\n }, {\n key: \"start\",\n value: function start() {\n var _this2 = this;\n\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n this.sizing = true; // Match all browsers that use WebKit as the layout engine in iOS devices,\n // such as Safari for iOS, Chrome for iOS, and in-app browsers.\n\n var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent);\n\n var done = function done(naturalWidth, naturalHeight) {\n assign(_this2.imageData, {\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n aspectRatio: naturalWidth / naturalHeight\n });\n _this2.initialImageData = assign({}, _this2.imageData);\n _this2.sizing = false;\n _this2.sized = true;\n\n _this2.build();\n }; // Most modern browsers (excepts iOS WebKit)\n\n\n if (image.naturalWidth && !isIOSWebKit) {\n done(image.naturalWidth, image.naturalHeight);\n return;\n }\n\n var sizingImage = document.createElement('img');\n var body = document.body || document.documentElement;\n this.sizingImage = sizingImage;\n\n sizingImage.onload = function () {\n done(sizingImage.width, sizingImage.height);\n\n if (!isIOSWebKit) {\n body.removeChild(sizingImage);\n }\n };\n\n sizingImage.src = image.src; // iOS WebKit will convert the image automatically\n // with its orientation once append it into DOM (#279)\n\n if (!isIOSWebKit) {\n sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n body.appendChild(sizingImage);\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n image.parentNode.removeChild(image);\n this.image = null;\n }\n }, {\n key: \"build\",\n value: function build() {\n if (!this.sized || this.ready) {\n return;\n }\n\n var element = this.element,\n options = this.options,\n image = this.image; // Create cropper elements\n\n var container = element.parentNode;\n var template = document.createElement('div');\n template.innerHTML = TEMPLATE;\n var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\n var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\n var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\n this.container = container;\n this.cropper = cropper;\n this.canvas = canvas;\n this.dragBox = dragBox;\n this.cropBox = cropBox;\n this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\n this.face = face;\n canvas.appendChild(image); // Hide the original image\n\n addClass(element, CLASS_HIDDEN); // Inserts the cropper after to the current image\n\n container.insertBefore(cropper, element.nextSibling); // Show the image if is hidden\n\n if (!this.isImg) {\n removeClass(image, CLASS_HIDE);\n }\n\n this.initPreview();\n this.bind();\n options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\n options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\n options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\n addClass(cropBox, CLASS_HIDDEN);\n\n if (!options.guides) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\n }\n\n if (!options.center) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\n }\n\n if (options.background) {\n addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\n }\n\n if (!options.highlight) {\n addClass(face, CLASS_INVISIBLE);\n }\n\n if (options.cropBoxMovable) {\n addClass(face, CLASS_MOVE);\n setData(face, DATA_ACTION, ACTION_ALL);\n }\n\n if (!options.cropBoxResizable) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\n }\n\n this.render();\n this.ready = true;\n this.setDragMode(options.dragMode);\n\n if (options.autoCrop) {\n this.crop();\n }\n\n this.setData(options.data);\n\n if (isFunction(options.ready)) {\n addListener(element, EVENT_READY, options.ready, {\n once: true\n });\n }\n\n dispatchEvent(element, EVENT_READY);\n }\n }, {\n key: \"unbuild\",\n value: function unbuild() {\n if (!this.ready) {\n return;\n }\n\n this.ready = false;\n this.unbind();\n this.resetPreview();\n this.cropper.parentNode.removeChild(this.cropper);\n removeClass(this.element, CLASS_HIDDEN);\n }\n }, {\n key: \"uncreate\",\n value: function uncreate() {\n if (this.ready) {\n this.unbuild();\n this.ready = false;\n this.cropped = false;\n } else if (this.sizing) {\n this.sizingImage.onload = null;\n this.sizing = false;\n this.sized = false;\n } else if (this.reloading) {\n this.xhr.onabort = null;\n this.xhr.abort();\n } else if (this.image) {\n this.stop();\n }\n }\n /**\n * Get the no conflict cropper class.\n * @returns {Cropper} The cropper class.\n */\n\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Cropper = AnotherCropper;\n return Cropper;\n }\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n assign(DEFAULTS, isPlainObject(options) && options);\n }\n }]);\n\n return Cropper;\n}();\n\nassign(Cropper.prototype, render, preview, events, handlers, change, methods);\n\nexport default Cropper;\n","/*!\n * JavaScript Cookie v2.2.1\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction decode (s) {\n\t\treturn s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api() {}\n\n\t\tfunction set (key, value, attributes) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tattributes = extend({\n\t\t\t\tpath: '/'\n\t\t\t}, api.defaults, attributes);\n\n\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\tattributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n\t\t\t}\n\n\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\ttry {\n\t\t\t\tvar result = JSON.stringify(value);\n\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\tvalue = result;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\tvalue = converter.write ?\n\t\t\t\tconverter.write(value, key) :\n\t\t\t\tencodeURIComponent(String(value))\n\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\n\t\t\tkey = encodeURIComponent(String(key))\n\t\t\t\t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)\n\t\t\t\t.replace(/[\\(\\)]/g, escape);\n\n\t\t\tvar stringifiedAttributes = '';\n\t\t\tfor (var attributeName in attributes) {\n\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Considers RFC 6265 section 5.2:\n\t\t\t\t// ...\n\t\t\t\t// 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n\t\t\t\t// character:\n\t\t\t\t// Consume the characters of the unparsed-attributes up to,\n\t\t\t\t// not including, the first %x3B (\";\") character.\n\t\t\t\t// ...\n\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n\t\t\t}\n\n\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t}\n\n\t\tfunction get (key, json) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar jar = {};\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all.\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = decode(parts[0]);\n\t\t\t\t\tcookie = (converter.read || converter)(cookie, name) ||\n\t\t\t\t\t\tdecode(cookie);\n\n\t\t\t\t\tif (json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tjar[name] = cookie;\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn key ? jar[key] : jar;\n\t\t}\n\n\t\tapi.set = set;\n\t\tapi.get = function (key) {\n\t\t\treturn get(key, false /* read as raw */);\n\t\t};\n\t\tapi.getJSON = function (key) {\n\t\t\treturn get(key, true /* read as json */);\n\t\t};\n\t\tapi.remove = function (key, attributes) {\n\t\t\tset(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.defaults = {};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n","/*!\n\npica\nhttps://github.com/nodeca/pica\n\n*/\n\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.pica = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i= 0,\n wasm: __requested_features.indexOf('wasm') >= 0\n };\n Multimath.call(this, features);\n this.features = {\n js: features.js,\n wasm: features.wasm && this.has_wasm()\n };\n this.use(mm_unsharp_mask);\n this.use(mm_resize);\n}\n\ninherits(MathLib, Multimath);\n\nMathLib.prototype.resizeAndUnsharp = function resizeAndUnsharp(options, cache) {\n var result = this.resize(options, cache);\n\n if (options.unsharpAmount) {\n this.unsharp_mask(result, options.toWidth, options.toHeight, options.unsharpAmount, options.unsharpRadius, options.unsharpThreshold);\n }\n\n return result;\n};\n\nmodule.exports = MathLib;\n\n},{\"./mm_resize\":4,\"./mm_unsharp_mask\":9,\"inherits\":19,\"multimath\":20}],2:[function(_dereq_,module,exports){\n// Resize convolvers, pure JS implementation\n//\n'use strict'; // Precision of fixed FP values\n//var FIXED_FRAC_BITS = 14;\n\nfunction clampTo8(i) {\n return i < 0 ? 0 : i > 255 ? 255 : i;\n} // Convolve image in horizontal directions and transpose output. In theory,\n// transpose allow:\n//\n// - use the same convolver for both passes (this fails due different\n// types of input array and temporary buffer)\n// - making vertical pass by horisonltal lines inprove CPU cache use.\n//\n// But in real life this doesn't work :)\n//\n\n\nfunction convolveHorizontally(src, dest, srcW, srcH, destW, filters) {\n var r, g, b, a;\n var filterPtr, filterShift, filterSize;\n var srcPtr, srcY, destX, filterVal;\n var srcOffset = 0,\n destOffset = 0; // For each row\n\n for (srcY = 0; srcY < srcH; srcY++) {\n filterPtr = 0; // Apply precomputed filters to each destination row point\n\n for (destX = 0; destX < destW; destX++) {\n // Get the filter that determines the current output pixel.\n filterShift = filters[filterPtr++];\n filterSize = filters[filterPtr++];\n srcPtr = srcOffset + filterShift * 4 | 0;\n r = g = b = a = 0; // Apply the filter to the row to get the destination pixel r, g, b, a\n\n for (; filterSize > 0; filterSize--) {\n filterVal = filters[filterPtr++]; // Use reverse order to workaround deopts in old v8 (node v.10)\n // Big thanks to @mraleph (Vyacheslav Egorov) for the tip.\n\n a = a + filterVal * src[srcPtr + 3] | 0;\n b = b + filterVal * src[srcPtr + 2] | 0;\n g = g + filterVal * src[srcPtr + 1] | 0;\n r = r + filterVal * src[srcPtr] | 0;\n srcPtr = srcPtr + 4 | 0;\n } // Bring this value back in range. All of the filter scaling factors\n // are in fixed point with FIXED_FRAC_BITS bits of fractional part.\n //\n // (!) Add 1/2 of value before clamping to get proper rounding. In other\n // case brightness loss will be noticeable if you resize image with white\n // border and place it on white background.\n //\n\n\n dest[destOffset + 3] = clampTo8(a + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset + 2] = clampTo8(b + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset + 1] = clampTo8(g + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset] = clampTo8(r + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n destOffset = destOffset + srcH * 4 | 0;\n }\n\n destOffset = (srcY + 1) * 4 | 0;\n srcOffset = (srcY + 1) * srcW * 4 | 0;\n }\n} // Technically, convolvers are the same. But input array and temporary\n// buffer can be of different type (especially, in old browsers). So,\n// keep code in separate functions to avoid deoptimizations & speed loss.\n\n\nfunction convolveVertically(src, dest, srcW, srcH, destW, filters) {\n var r, g, b, a;\n var filterPtr, filterShift, filterSize;\n var srcPtr, srcY, destX, filterVal;\n var srcOffset = 0,\n destOffset = 0; // For each row\n\n for (srcY = 0; srcY < srcH; srcY++) {\n filterPtr = 0; // Apply precomputed filters to each destination row point\n\n for (destX = 0; destX < destW; destX++) {\n // Get the filter that determines the current output pixel.\n filterShift = filters[filterPtr++];\n filterSize = filters[filterPtr++];\n srcPtr = srcOffset + filterShift * 4 | 0;\n r = g = b = a = 0; // Apply the filter to the row to get the destination pixel r, g, b, a\n\n for (; filterSize > 0; filterSize--) {\n filterVal = filters[filterPtr++]; // Use reverse order to workaround deopts in old v8 (node v.10)\n // Big thanks to @mraleph (Vyacheslav Egorov) for the tip.\n\n a = a + filterVal * src[srcPtr + 3] | 0;\n b = b + filterVal * src[srcPtr + 2] | 0;\n g = g + filterVal * src[srcPtr + 1] | 0;\n r = r + filterVal * src[srcPtr] | 0;\n srcPtr = srcPtr + 4 | 0;\n } // Bring this value back in range. All of the filter scaling factors\n // are in fixed point with FIXED_FRAC_BITS bits of fractional part.\n //\n // (!) Add 1/2 of value before clamping to get proper rounding. In other\n // case brightness loss will be noticeable if you resize image with white\n // border and place it on white background.\n //\n\n\n dest[destOffset + 3] = clampTo8(a + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset + 2] = clampTo8(b + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset + 1] = clampTo8(g + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset] = clampTo8(r + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n destOffset = destOffset + srcH * 4 | 0;\n }\n\n destOffset = (srcY + 1) * 4 | 0;\n srcOffset = (srcY + 1) * srcW * 4 | 0;\n }\n}\n\nmodule.exports = {\n convolveHorizontally: convolveHorizontally,\n convolveVertically: convolveVertically\n};\n\n},{}],3:[function(_dereq_,module,exports){\n// This is autogenerated file from math.wasm, don't edit.\n//\n'use strict';\n/* eslint-disable max-len */\n\nmodule.exports = 'AGFzbQEAAAAADAZkeWxpbmsAAAAAAAEXA2AAAGAGf39/f39/AGAHf39/f39/fwACDwEDZW52Bm1lbW9yeQIAAAMEAwABAgYGAX8AQQALB1cFEV9fd2FzbV9jYWxsX2N0b3JzAAAIY29udm9sdmUAAQpjb252b2x2ZUhWAAIMX19kc29faGFuZGxlAwAYX193YXNtX2FwcGx5X2RhdGFfcmVsb2NzAAAK7AMDAwABC8YDAQ9/AkAgA0UNACAERQ0AA0AgDCENQQAhE0EAIQcDQCAHQQJqIQYCfyAHQQF0IAVqIgcuAQIiFEUEQEGAwAAhCEGAwAAhCUGAwAAhCkGAwAAhCyAGDAELIBIgBy4BAGohCEEAIQsgFCEHQQAhDiAGIQlBACEPQQAhEANAIAUgCUEBdGouAQAiESAAIAhBAnRqKAIAIgpBGHZsIBBqIRAgCkH/AXEgEWwgC2ohCyAKQRB2Qf8BcSARbCAPaiEPIApBCHZB/wFxIBFsIA5qIQ4gCEEBaiEIIAlBAWohCSAHQQFrIgcNAAsgC0GAQGshCCAOQYBAayEJIA9BgEBrIQogEEGAQGshCyAGIBRqCyEHIAEgDUECdGogCUEOdSIGQf8BIAZB/wFIGyIGQQAgBkEAShtBCHRBgP4DcSAKQQ51IgZB/wEgBkH/AUgbIgZBACAGQQBKG0EQdEGAgPwHcSALQQ51IgZB/wEgBkH/AUgbIgZBACAGQQBKG0EYdHJyIAhBDnUiBkH/ASAGQf8BSBsiBkEAIAZBAEobcjYCACADIA1qIQ0gE0EBaiITIARHDQALIAxBAWoiDCACbCESIAMgDEcNAAsLCx4AQQAgAiADIAQgBSAAEAEgAkEAIAQgBSAGIAEQAQs=';\n\n},{}],4:[function(_dereq_,module,exports){\n'use strict';\n\nmodule.exports = {\n name: 'resize',\n fn: _dereq_('./resize'),\n wasm_fn: _dereq_('./resize_wasm'),\n wasm_src: _dereq_('./convolve_wasm_base64')\n};\n\n},{\"./convolve_wasm_base64\":3,\"./resize\":5,\"./resize_wasm\":8}],5:[function(_dereq_,module,exports){\n'use strict';\n\nvar createFilters = _dereq_('./resize_filter_gen');\n\nvar convolveHorizontally = _dereq_('./convolve').convolveHorizontally;\n\nvar convolveVertically = _dereq_('./convolve').convolveVertically;\n\nfunction resetAlpha(dst, width, height) {\n var ptr = 3,\n len = width * height * 4 | 0;\n\n while (ptr < len) {\n dst[ptr] = 0xFF;\n ptr = ptr + 4 | 0;\n }\n}\n\nmodule.exports = function resize(options) {\n var src = options.src;\n var srcW = options.width;\n var srcH = options.height;\n var destW = options.toWidth;\n var destH = options.toHeight;\n var scaleX = options.scaleX || options.toWidth / options.width;\n var scaleY = options.scaleY || options.toHeight / options.height;\n var offsetX = options.offsetX || 0;\n var offsetY = options.offsetY || 0;\n var dest = options.dest || new Uint8Array(destW * destH * 4);\n var quality = typeof options.quality === 'undefined' ? 3 : options.quality;\n var alpha = options.alpha || false;\n var filtersX = createFilters(quality, srcW, destW, scaleX, offsetX),\n filtersY = createFilters(quality, srcH, destH, scaleY, offsetY);\n var tmp = new Uint8Array(destW * srcH * 4); // To use single function we need src & tmp of the same type.\n // But src can be CanvasPixelArray, and tmp - Uint8Array. So, keep\n // vertical and horizontal passes separately to avoid deoptimization.\n\n convolveHorizontally(src, tmp, srcW, srcH, destW, filtersX);\n convolveVertically(tmp, dest, srcH, destW, destH, filtersY); // That's faster than doing checks in convolver.\n // !!! Note, canvas data is not premultipled. We don't need other\n // alpha corrections.\n\n if (!alpha) resetAlpha(dest, destW, destH);\n return dest;\n};\n\n},{\"./convolve\":2,\"./resize_filter_gen\":6}],6:[function(_dereq_,module,exports){\n// Calculate convolution filters for each destination point,\n// and pack data to Int16Array:\n//\n// [ shift, length, data..., shift2, length2, data..., ... ]\n//\n// - shift - offset in src image\n// - length - filter length (in src points)\n// - data - filter values sequence\n//\n'use strict';\n\nvar FILTER_INFO = _dereq_('./resize_filter_info'); // Precision of fixed FP values\n\n\nvar FIXED_FRAC_BITS = 14;\n\nfunction toFixedPoint(num) {\n return Math.round(num * ((1 << FIXED_FRAC_BITS) - 1));\n}\n\nmodule.exports = function resizeFilterGen(quality, srcSize, destSize, scale, offset) {\n var filterFunction = FILTER_INFO[quality].filter;\n var scaleInverted = 1.0 / scale;\n var scaleClamped = Math.min(1.0, scale); // For upscale\n // Filter window (averaging interval), scaled to src image\n\n var srcWindow = FILTER_INFO[quality].win / scaleClamped;\n var destPixel, srcPixel, srcFirst, srcLast, filterElementSize, floatFilter, fxpFilter, total, pxl, idx, floatVal, filterTotal, filterVal;\n var leftNotEmpty, rightNotEmpty, filterShift, filterSize;\n var maxFilterElementSize = Math.floor((srcWindow + 1) * 2);\n var packedFilter = new Int16Array((maxFilterElementSize + 2) * destSize);\n var packedFilterPtr = 0;\n var slowCopy = !packedFilter.subarray || !packedFilter.set; // For each destination pixel calculate source range and built filter values\n\n for (destPixel = 0; destPixel < destSize; destPixel++) {\n // Scaling should be done relative to central pixel point\n srcPixel = (destPixel + 0.5) * scaleInverted + offset;\n srcFirst = Math.max(0, Math.floor(srcPixel - srcWindow));\n srcLast = Math.min(srcSize - 1, Math.ceil(srcPixel + srcWindow));\n filterElementSize = srcLast - srcFirst + 1;\n floatFilter = new Float32Array(filterElementSize);\n fxpFilter = new Int16Array(filterElementSize);\n total = 0.0; // Fill filter values for calculated range\n\n for (pxl = srcFirst, idx = 0; pxl <= srcLast; pxl++, idx++) {\n floatVal = filterFunction((pxl + 0.5 - srcPixel) * scaleClamped);\n total += floatVal;\n floatFilter[idx] = floatVal;\n } // Normalize filter, convert to fixed point and accumulate conversion error\n\n\n filterTotal = 0;\n\n for (idx = 0; idx < floatFilter.length; idx++) {\n filterVal = floatFilter[idx] / total;\n filterTotal += filterVal;\n fxpFilter[idx] = toFixedPoint(filterVal);\n } // Compensate normalization error, to minimize brightness drift\n\n\n fxpFilter[destSize >> 1] += toFixedPoint(1.0 - filterTotal); //\n // Now pack filter to useable form\n //\n // 1. Trim heading and tailing zero values, and compensate shitf/length\n // 2. Put all to single array in this format:\n //\n // [ pos shift, data length, value1, value2, value3, ... ]\n //\n\n leftNotEmpty = 0;\n\n while (leftNotEmpty < fxpFilter.length && fxpFilter[leftNotEmpty] === 0) {\n leftNotEmpty++;\n }\n\n if (leftNotEmpty < fxpFilter.length) {\n rightNotEmpty = fxpFilter.length - 1;\n\n while (rightNotEmpty > 0 && fxpFilter[rightNotEmpty] === 0) {\n rightNotEmpty--;\n }\n\n filterShift = srcFirst + leftNotEmpty;\n filterSize = rightNotEmpty - leftNotEmpty + 1;\n packedFilter[packedFilterPtr++] = filterShift; // shift\n\n packedFilter[packedFilterPtr++] = filterSize; // size\n\n if (!slowCopy) {\n packedFilter.set(fxpFilter.subarray(leftNotEmpty, rightNotEmpty + 1), packedFilterPtr);\n packedFilterPtr += filterSize;\n } else {\n // fallback for old IE < 11, without subarray/set methods\n for (idx = leftNotEmpty; idx <= rightNotEmpty; idx++) {\n packedFilter[packedFilterPtr++] = fxpFilter[idx];\n }\n }\n } else {\n // zero data, write header only\n packedFilter[packedFilterPtr++] = 0; // shift\n\n packedFilter[packedFilterPtr++] = 0; // size\n }\n }\n\n return packedFilter;\n};\n\n},{\"./resize_filter_info\":7}],7:[function(_dereq_,module,exports){\n// Filter definitions to build tables for\n// resizing convolvers.\n//\n// Presets for quality 0..3. Filter functions + window size\n//\n'use strict';\n\nmodule.exports = [{\n // Nearest neibor (Box)\n win: 0.5,\n filter: function filter(x) {\n return x >= -0.5 && x < 0.5 ? 1.0 : 0.0;\n }\n}, {\n // Hamming\n win: 1.0,\n filter: function filter(x) {\n if (x <= -1.0 || x >= 1.0) {\n return 0.0;\n }\n\n if (x > -1.19209290E-07 && x < 1.19209290E-07) {\n return 1.0;\n }\n\n var xpi = x * Math.PI;\n return Math.sin(xpi) / xpi * (0.54 + 0.46 * Math.cos(xpi / 1.0));\n }\n}, {\n // Lanczos, win = 2\n win: 2.0,\n filter: function filter(x) {\n if (x <= -2.0 || x >= 2.0) {\n return 0.0;\n }\n\n if (x > -1.19209290E-07 && x < 1.19209290E-07) {\n return 1.0;\n }\n\n var xpi = x * Math.PI;\n return Math.sin(xpi) / xpi * Math.sin(xpi / 2.0) / (xpi / 2.0);\n }\n}, {\n // Lanczos, win = 3\n win: 3.0,\n filter: function filter(x) {\n if (x <= -3.0 || x >= 3.0) {\n return 0.0;\n }\n\n if (x > -1.19209290E-07 && x < 1.19209290E-07) {\n return 1.0;\n }\n\n var xpi = x * Math.PI;\n return Math.sin(xpi) / xpi * Math.sin(xpi / 3.0) / (xpi / 3.0);\n }\n}];\n\n},{}],8:[function(_dereq_,module,exports){\n'use strict';\n\nvar createFilters = _dereq_('./resize_filter_gen');\n\nfunction resetAlpha(dst, width, height) {\n var ptr = 3,\n len = width * height * 4 | 0;\n\n while (ptr < len) {\n dst[ptr] = 0xFF;\n ptr = ptr + 4 | 0;\n }\n}\n\nfunction asUint8Array(src) {\n return new Uint8Array(src.buffer, 0, src.byteLength);\n}\n\nvar IS_LE = true; // should not crash everything on module load in old browsers\n\ntry {\n IS_LE = new Uint32Array(new Uint8Array([1, 0, 0, 0]).buffer)[0] === 1;\n} catch (__) {}\n\nfunction copyInt16asLE(src, target, target_offset) {\n if (IS_LE) {\n target.set(asUint8Array(src), target_offset);\n return;\n }\n\n for (var ptr = target_offset, i = 0; i < src.length; i++) {\n var data = src[i];\n target[ptr++] = data & 0xFF;\n target[ptr++] = data >> 8 & 0xFF;\n }\n}\n\nmodule.exports = function resize_wasm(options) {\n var src = options.src;\n var srcW = options.width;\n var srcH = options.height;\n var destW = options.toWidth;\n var destH = options.toHeight;\n var scaleX = options.scaleX || options.toWidth / options.width;\n var scaleY = options.scaleY || options.toHeight / options.height;\n var offsetX = options.offsetX || 0.0;\n var offsetY = options.offsetY || 0.0;\n var dest = options.dest || new Uint8Array(destW * destH * 4);\n var quality = typeof options.quality === 'undefined' ? 3 : options.quality;\n var alpha = options.alpha || false;\n var filtersX = createFilters(quality, srcW, destW, scaleX, offsetX),\n filtersY = createFilters(quality, srcH, destH, scaleY, offsetY); // destination is 0 too.\n\n var src_offset = 0; // buffer between convolve passes\n\n var tmp_offset = this.__align(src_offset + Math.max(src.byteLength, dest.byteLength));\n\n var filtersX_offset = this.__align(tmp_offset + srcH * destW * 4);\n\n var filtersY_offset = this.__align(filtersX_offset + filtersX.byteLength);\n\n var alloc_bytes = filtersY_offset + filtersY.byteLength;\n\n var instance = this.__instance('resize', alloc_bytes); //\n // Fill memory block with data to process\n //\n\n\n var mem = new Uint8Array(this.__memory.buffer);\n var mem32 = new Uint32Array(this.__memory.buffer); // 32-bit copy is much faster in chrome\n\n var src32 = new Uint32Array(src.buffer);\n mem32.set(src32); // We should guarantee LE bytes order. Filters are not big, so\n // speed difference is not significant vs direct .set()\n\n copyInt16asLE(filtersX, mem, filtersX_offset);\n copyInt16asLE(filtersY, mem, filtersY_offset); //\n // Now call webassembly method\n // emsdk does method names with '_'\n\n var fn = instance.exports.convolveHV || instance.exports._convolveHV;\n fn(filtersX_offset, filtersY_offset, tmp_offset, srcW, srcH, destW, destH); //\n // Copy data back to typed array\n //\n // 32-bit copy is much faster in chrome\n\n var dest32 = new Uint32Array(dest.buffer);\n dest32.set(new Uint32Array(this.__memory.buffer, 0, destH * destW)); // That's faster than doing checks in convolver.\n // !!! Note, canvas data is not premultipled. We don't need other\n // alpha corrections.\n\n if (!alpha) resetAlpha(dest, destW, destH);\n return dest;\n};\n\n},{\"./resize_filter_gen\":6}],9:[function(_dereq_,module,exports){\n'use strict';\n\nmodule.exports = {\n name: 'unsharp_mask',\n fn: _dereq_('./unsharp_mask'),\n wasm_fn: _dereq_('./unsharp_mask_wasm'),\n wasm_src: _dereq_('./unsharp_mask_wasm_base64')\n};\n\n},{\"./unsharp_mask\":10,\"./unsharp_mask_wasm\":11,\"./unsharp_mask_wasm_base64\":12}],10:[function(_dereq_,module,exports){\n// Unsharp mask filter\n//\n// http://stackoverflow.com/a/23322820/1031804\n// USM(O) = O + (2 * (Amount / 100) * (O - GB))\n// GB - gaussian blur.\n//\n// Image is converted from RGB to HSV, unsharp mask is applied to the\n// brightness channel and then image is converted back to RGB.\n//\n'use strict';\n\nvar glur_mono16 = _dereq_('glur/mono16');\n\nfunction hsv_v16(img, width, height) {\n var size = width * height;\n var out = new Uint16Array(size);\n var r, g, b, max;\n\n for (var i = 0; i < size; i++) {\n r = img[4 * i];\n g = img[4 * i + 1];\n b = img[4 * i + 2];\n max = r >= g && r >= b ? r : g >= b && g >= r ? g : b;\n out[i] = max << 8;\n }\n\n return out;\n}\n\nmodule.exports = function unsharp(img, width, height, amount, radius, threshold) {\n var v1, v2, vmul;\n var diff, iTimes4;\n\n if (amount === 0 || radius < 0.5) {\n return;\n }\n\n if (radius > 2.0) {\n radius = 2.0;\n }\n\n var brightness = hsv_v16(img, width, height);\n var blured = new Uint16Array(brightness); // copy, because blur modify src\n\n glur_mono16(blured, width, height, radius);\n var amountFp = amount / 100 * 0x1000 + 0.5 | 0;\n var thresholdFp = threshold << 8;\n var size = width * height;\n /* eslint-disable indent */\n\n for (var i = 0; i < size; i++) {\n v1 = brightness[i];\n diff = v1 - blured[i];\n\n if (Math.abs(diff) >= thresholdFp) {\n // add unsharp mask to the brightness channel\n v2 = v1 + (amountFp * diff + 0x800 >> 12); // Both v1 and v2 are within [0.0 .. 255.0] (0000-FF00) range, never going into\n // [255.003 .. 255.996] (FF01-FFFF). This allows to round this value as (x+.5)|0\n // later without overflowing.\n\n v2 = v2 > 0xff00 ? 0xff00 : v2;\n v2 = v2 < 0x0000 ? 0x0000 : v2; // Avoid division by 0. V=0 means rgb(0,0,0), unsharp with unsharpAmount>0 cannot\n // change this value (because diff between colors gets inflated), so no need to verify correctness.\n\n v1 = v1 !== 0 ? v1 : 1; // Multiplying V in HSV model by a constant is equivalent to multiplying each component\n // in RGB by the same constant (same for HSL), see also:\n // https://beesbuzz.biz/code/16-hsv-color-transforms\n\n vmul = (v2 << 12) / v1 | 0; // Result will be in [0..255] range because:\n // - all numbers are positive\n // - r,g,b <= (v1/256)\n // - r,g,b,(v1/256),(v2/256) <= 255\n // So highest this number can get is X*255/X+0.5=255.5 which is < 256 and rounds down.\n\n iTimes4 = i * 4;\n img[iTimes4] = img[iTimes4] * vmul + 0x800 >> 12; // R\n\n img[iTimes4 + 1] = img[iTimes4 + 1] * vmul + 0x800 >> 12; // G\n\n img[iTimes4 + 2] = img[iTimes4 + 2] * vmul + 0x800 >> 12; // B\n }\n }\n};\n\n},{\"glur/mono16\":18}],11:[function(_dereq_,module,exports){\n'use strict';\n\nmodule.exports = function unsharp(img, width, height, amount, radius, threshold) {\n if (amount === 0 || radius < 0.5) {\n return;\n }\n\n if (radius > 2.0) {\n radius = 2.0;\n }\n\n var pixels = width * height;\n var img_bytes_cnt = pixels * 4;\n var hsv_bytes_cnt = pixels * 2;\n var blur_bytes_cnt = pixels * 2;\n var blur_line_byte_cnt = Math.max(width, height) * 4; // float32 array\n\n var blur_coeffs_byte_cnt = 8 * 4; // float32 array\n\n var img_offset = 0;\n var hsv_offset = img_bytes_cnt;\n var blur_offset = hsv_offset + hsv_bytes_cnt;\n var blur_tmp_offset = blur_offset + blur_bytes_cnt;\n var blur_line_offset = blur_tmp_offset + blur_bytes_cnt;\n var blur_coeffs_offset = blur_line_offset + blur_line_byte_cnt;\n\n var instance = this.__instance('unsharp_mask', img_bytes_cnt + hsv_bytes_cnt + blur_bytes_cnt * 2 + blur_line_byte_cnt + blur_coeffs_byte_cnt, {\n exp: Math.exp\n }); // 32-bit copy is much faster in chrome\n\n\n var img32 = new Uint32Array(img.buffer);\n var mem32 = new Uint32Array(this.__memory.buffer);\n mem32.set(img32); // HSL\n\n var fn = instance.exports.hsv_v16 || instance.exports._hsv_v16;\n fn(img_offset, hsv_offset, width, height); // BLUR\n\n fn = instance.exports.blurMono16 || instance.exports._blurMono16;\n fn(hsv_offset, blur_offset, blur_tmp_offset, blur_line_offset, blur_coeffs_offset, width, height, radius); // UNSHARP\n\n fn = instance.exports.unsharp || instance.exports._unsharp;\n fn(img_offset, img_offset, hsv_offset, blur_offset, width, height, amount, threshold); // 32-bit copy is much faster in chrome\n\n img32.set(new Uint32Array(this.__memory.buffer, 0, pixels));\n};\n\n},{}],12:[function(_dereq_,module,exports){\n// This is autogenerated file from math.wasm, don't edit.\n//\n'use strict';\n/* eslint-disable max-len */\n\nmodule.exports = 'AGFzbQEAAAAADAZkeWxpbmsAAAAAAAE0B2AAAGAEf39/fwBgBn9/f39/fwBgCH9/f39/f39/AGAIf39/f39/f30AYAJ9fwBgAXwBfAIZAgNlbnYDZXhwAAYDZW52Bm1lbW9yeQIAAAMHBgAFAgQBAwYGAX8AQQALB4oBCBFfX3dhc21fY2FsbF9jdG9ycwABFl9fYnVpbGRfZ2F1c3NpYW5fY29lZnMAAg5fX2dhdXNzMTZfbGluZQADCmJsdXJNb25vMTYABAdoc3ZfdjE2AAUHdW5zaGFycAAGDF9fZHNvX2hhbmRsZQMAGF9fd2FzbV9hcHBseV9kYXRhX3JlbG9jcwABCsUMBgMAAQvWAQEHfCABRNuGukOCGvs/IAC7oyICRAAAAAAAAADAohAAIgW2jDgCFCABIAKaEAAiAyADoCIGtjgCECABRAAAAAAAAPA/IAOhIgQgBKIgAyACIAKgokQAAAAAAADwP6AgBaGjIgS2OAIAIAEgBSAEmqIiB7Y4AgwgASADIAJEAAAAAAAA8D+gIASioiIItjgCCCABIAMgAkQAAAAAAADwv6AgBKKiIgK2OAIEIAEgByAIoCAFRAAAAAAAAPA/IAahoCIDo7Y4AhwgASAEIAKgIAOjtjgCGAuGBQMGfwl8An0gAyoCDCEVIAMqAgghFiADKgIUuyERIAMqAhC7IRACQCAEQQFrIghBAEgiCQRAIAIhByAAIQYMAQsgAiAALwEAuCIPIAMqAhi7oiIMIBGiIg0gDCAQoiAPIAMqAgS7IhOiIhQgAyoCALsiEiAPoqCgoCIOtjgCACACQQRqIQcgAEECaiEGIAhFDQAgCEEBIAhBAUgbIgpBf3MhCwJ/IAQgCmtBAXFFBEAgDiENIAgMAQsgAiANIA4gEKIgFCASIAAvAQK4Ig+ioKCgIg22OAIEIAJBCGohByAAQQRqIQYgDiEMIARBAmsLIQIgC0EAIARrRg0AA0AgByAMIBGiIA0gEKIgDyAToiASIAYvAQC4Ig6ioKCgIgy2OAIAIAcgDSARoiAMIBCiIA4gE6IgEiAGLwECuCIPoqCgoCINtjgCBCAHQQhqIQcgBkEEaiEGIAJBAkohACACQQJrIQIgAA0ACwsCQCAJDQAgASAFIAhsQQF0aiIAAn8gBkECay8BACICuCINIBW7IhKiIA0gFrsiE6KgIA0gAyoCHLuiIgwgEKKgIAwgEaKgIg8gB0EEayIHKgIAu6AiDkQAAAAAAADwQWMgDkQAAAAAAAAAAGZxBEAgDqsMAQtBAAs7AQAgCEUNACAGQQRrIQZBACAFa0EBdCEBA0ACfyANIBKiIAJB//8DcbgiDSAToqAgDyIOIBCioCAMIBGioCIPIAdBBGsiByoCALugIgxEAAAAAAAA8EFjIAxEAAAAAAAAAABmcQRAIAyrDAELQQALIQMgBi8BACECIAAgAWoiACADOwEAIAZBAmshBiAIQQFKIQMgDiEMIAhBAWshCCADDQALCwvRAgIBfwd8AkAgB0MAAAAAWw0AIARE24a6Q4Ia+z8gB0MAAAA/l7ujIglEAAAAAAAAAMCiEAAiDLaMOAIUIAQgCZoQACIKIAqgIg22OAIQIAREAAAAAAAA8D8gCqEiCyALoiAKIAkgCaCiRAAAAAAAAPA/oCAMoaMiC7Y4AgAgBCAMIAuaoiIOtjgCDCAEIAogCUQAAAAAAADwP6AgC6KiIg+2OAIIIAQgCiAJRAAAAAAAAPC/oCALoqIiCbY4AgQgBCAOIA+gIAxEAAAAAAAA8D8gDaGgIgqjtjgCHCAEIAsgCaAgCqO2OAIYIAYEQANAIAAgBSAIbEEBdGogAiAIQQF0aiADIAQgBSAGEAMgCEEBaiIIIAZHDQALCyAFRQ0AQQAhCANAIAIgBiAIbEEBdGogASAIQQF0aiADIAQgBiAFEAMgCEEBaiIIIAVHDQALCwtxAQN/IAIgA2wiBQRAA0AgASAAKAIAIgRBEHZB/wFxIgIgAiAEQQh2Qf8BcSIDIAMgBEH/AXEiBEkbIAIgA0sbIgYgBiAEIAIgBEsbIAMgBEsbQQh0OwEAIAFBAmohASAAQQRqIQAgBUEBayIFDQALCwuZAgIDfwF8IAQgBWwhBAJ/IAazQwAAgEWUQwAAyEKVu0QAAAAAAADgP6AiC5lEAAAAAAAA4EFjBEAgC6oMAQtBgICAgHgLIQUgBARAIAdBCHQhCUEAIQYDQCAJIAIgBkEBdCIHai8BACIBIAMgB2ovAQBrIgcgB0EfdSIIaiAIc00EQCAAIAZBAnQiCGoiCiAFIAdsQYAQakEMdSABaiIHQYD+AyAHQYD+A0gbIgdBACAHQQBKG0EMdCABQQEgARtuIgEgCi0AAGxBgBBqQQx2OgAAIAAgCEEBcmoiByABIActAABsQYAQakEMdjoAACAAIAhBAnJqIgcgASAHLQAAbEGAEGpBDHY6AAALIAZBAWoiBiAERw0ACwsL';\n\n},{}],13:[function(_dereq_,module,exports){\n'use strict';\n\nvar GC_INTERVAL = 100;\n\nfunction Pool(create, idle) {\n this.create = create;\n this.available = [];\n this.acquired = {};\n this.lastId = 1;\n this.timeoutId = 0;\n this.idle = idle || 2000;\n}\n\nPool.prototype.acquire = function () {\n var _this = this;\n\n var resource;\n\n if (this.available.length !== 0) {\n resource = this.available.pop();\n } else {\n resource = this.create();\n resource.id = this.lastId++;\n\n resource.release = function () {\n return _this.release(resource);\n };\n }\n\n this.acquired[resource.id] = resource;\n return resource;\n};\n\nPool.prototype.release = function (resource) {\n var _this2 = this;\n\n delete this.acquired[resource.id];\n resource.lastUsed = Date.now();\n this.available.push(resource);\n\n if (this.timeoutId === 0) {\n this.timeoutId = setTimeout(function () {\n return _this2.gc();\n }, GC_INTERVAL);\n }\n};\n\nPool.prototype.gc = function () {\n var _this3 = this;\n\n var now = Date.now();\n this.available = this.available.filter(function (resource) {\n if (now - resource.lastUsed > _this3.idle) {\n resource.destroy();\n return false;\n }\n\n return true;\n });\n\n if (this.available.length !== 0) {\n this.timeoutId = setTimeout(function () {\n return _this3.gc();\n }, GC_INTERVAL);\n } else {\n this.timeoutId = 0;\n }\n};\n\nmodule.exports = Pool;\n\n},{}],14:[function(_dereq_,module,exports){\n// Add intermediate resizing steps when scaling down by a very large factor.\n//\n// For example, when resizing 10000x10000 down to 10x10, it'll resize it to\n// 300x300 first.\n//\n// It's needed because tiler has issues when the entire tile is scaled down\n// to a few pixels (1024px source tile with border size 3 should result in\n// at least 3+3+2 = 8px target tile, so max scale factor is 128 here).\n//\n// Also, adding intermediate steps can speed up processing if we use lower\n// quality algorithms for first stages.\n//\n'use strict'; // min size = 0 results in infinite loop,\n// min size = 1 can consume large amount of memory\n\nvar MIN_INNER_TILE_SIZE = 2;\n\nmodule.exports = function createStages(fromWidth, fromHeight, toWidth, toHeight, srcTileSize, destTileBorder) {\n var scaleX = toWidth / fromWidth;\n var scaleY = toHeight / fromHeight; // derived from createRegions equation:\n // innerTileWidth = pixelFloor(srcTileSize * scaleX) - 2 * destTileBorder;\n\n var minScale = (2 * destTileBorder + MIN_INNER_TILE_SIZE + 1) / srcTileSize; // refuse to scale image multiple times by less than twice each time,\n // it could only happen because of invalid options\n\n if (minScale > 0.5) return [[toWidth, toHeight]];\n var stageCount = Math.ceil(Math.log(Math.min(scaleX, scaleY)) / Math.log(minScale)); // no additional resizes are necessary,\n // stageCount can be zero or be negative when enlarging the image\n\n if (stageCount <= 1) return [[toWidth, toHeight]];\n var result = [];\n\n for (var i = 0; i < stageCount; i++) {\n var width = Math.round(Math.pow(Math.pow(fromWidth, stageCount - i - 1) * Math.pow(toWidth, i + 1), 1 / stageCount));\n var height = Math.round(Math.pow(Math.pow(fromHeight, stageCount - i - 1) * Math.pow(toHeight, i + 1), 1 / stageCount));\n result.push([width, height]);\n }\n\n return result;\n};\n\n},{}],15:[function(_dereq_,module,exports){\n// Split original image into multiple 1024x1024 chunks to reduce memory usage\n// (images have to be unpacked into typed arrays for resizing) and allow\n// parallel processing of multiple tiles at a time.\n//\n'use strict';\n/*\n * pixelFloor and pixelCeil are modified versions of Math.floor and Math.ceil\n * functions which take into account floating point arithmetic errors.\n * Those errors can cause undesired increments/decrements of sizes and offsets:\n * Math.ceil(36 / (36 / 500)) = 501\n * pixelCeil(36 / (36 / 500)) = 500\n */\n\nvar PIXEL_EPSILON = 1e-5;\n\nfunction pixelFloor(x) {\n var nearest = Math.round(x);\n\n if (Math.abs(x - nearest) < PIXEL_EPSILON) {\n return nearest;\n }\n\n return Math.floor(x);\n}\n\nfunction pixelCeil(x) {\n var nearest = Math.round(x);\n\n if (Math.abs(x - nearest) < PIXEL_EPSILON) {\n return nearest;\n }\n\n return Math.ceil(x);\n}\n\nmodule.exports = function createRegions(options) {\n var scaleX = options.toWidth / options.width;\n var scaleY = options.toHeight / options.height;\n var innerTileWidth = pixelFloor(options.srcTileSize * scaleX) - 2 * options.destTileBorder;\n var innerTileHeight = pixelFloor(options.srcTileSize * scaleY) - 2 * options.destTileBorder; // prevent infinite loop, this should never happen\n\n if (innerTileWidth < 1 || innerTileHeight < 1) {\n throw new Error('Internal error in pica: target tile width/height is too small.');\n }\n\n var x, y;\n var innerX, innerY, toTileWidth, toTileHeight;\n var tiles = [];\n var tile; // we go top-to-down instead of left-to-right to make image displayed from top to\n // doesn in the browser\n\n for (innerY = 0; innerY < options.toHeight; innerY += innerTileHeight) {\n for (innerX = 0; innerX < options.toWidth; innerX += innerTileWidth) {\n x = innerX - options.destTileBorder;\n\n if (x < 0) {\n x = 0;\n }\n\n toTileWidth = innerX + innerTileWidth + options.destTileBorder - x;\n\n if (x + toTileWidth >= options.toWidth) {\n toTileWidth = options.toWidth - x;\n }\n\n y = innerY - options.destTileBorder;\n\n if (y < 0) {\n y = 0;\n }\n\n toTileHeight = innerY + innerTileHeight + options.destTileBorder - y;\n\n if (y + toTileHeight >= options.toHeight) {\n toTileHeight = options.toHeight - y;\n }\n\n tile = {\n toX: x,\n toY: y,\n toWidth: toTileWidth,\n toHeight: toTileHeight,\n toInnerX: innerX,\n toInnerY: innerY,\n toInnerWidth: innerTileWidth,\n toInnerHeight: innerTileHeight,\n offsetX: x / scaleX - pixelFloor(x / scaleX),\n offsetY: y / scaleY - pixelFloor(y / scaleY),\n scaleX: scaleX,\n scaleY: scaleY,\n x: pixelFloor(x / scaleX),\n y: pixelFloor(y / scaleY),\n width: pixelCeil(toTileWidth / scaleX),\n height: pixelCeil(toTileHeight / scaleY)\n };\n tiles.push(tile);\n }\n }\n\n return tiles;\n};\n\n},{}],16:[function(_dereq_,module,exports){\n'use strict';\n\nfunction objClass(obj) {\n return Object.prototype.toString.call(obj);\n}\n\nmodule.exports.isCanvas = function isCanvas(element) {\n var cname = objClass(element);\n return cname === '[object HTMLCanvasElement]'\n /* browser */\n || cname === '[object OffscreenCanvas]' || cname === '[object Canvas]'\n /* node-canvas */\n ;\n};\n\nmodule.exports.isImage = function isImage(element) {\n return objClass(element) === '[object HTMLImageElement]';\n};\n\nmodule.exports.isImageBitmap = function isImageBitmap(element) {\n return objClass(element) === '[object ImageBitmap]';\n};\n\nmodule.exports.limiter = function limiter(concurrency) {\n var active = 0,\n queue = [];\n\n function roll() {\n if (active < concurrency && queue.length) {\n active++;\n queue.shift()();\n }\n }\n\n return function limit(fn) {\n return new Promise(function (resolve, reject) {\n queue.push(function () {\n fn().then(function (result) {\n resolve(result);\n active--;\n roll();\n }, function (err) {\n reject(err);\n active--;\n roll();\n });\n });\n roll();\n });\n };\n};\n\nmodule.exports.cib_quality_name = function cib_quality_name(num) {\n switch (num) {\n case 0:\n return 'pixelated';\n\n case 1:\n return 'low';\n\n case 2:\n return 'medium';\n }\n\n return 'high';\n};\n\nmodule.exports.cib_support = function cib_support(createCanvas) {\n return Promise.resolve().then(function () {\n if (typeof createImageBitmap === 'undefined') {\n return false;\n }\n\n var c = createCanvas(100, 100);\n return createImageBitmap(c, 0, 0, 100, 100, {\n resizeWidth: 10,\n resizeHeight: 10,\n resizeQuality: 'high'\n }).then(function (bitmap) {\n var status = bitmap.width === 10; // Branch below is filtered on upper level. We do not call resize\n // detection for basic ImageBitmap.\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap\n // old Crome 51 has ImageBitmap without .close(). Then this code\n // will throw and return 'false' as expected.\n //\n\n bitmap.close();\n c = null;\n return status;\n });\n })[\"catch\"](function () {\n return false;\n });\n};\n\nmodule.exports.worker_offscreen_canvas_support = function worker_offscreen_canvas_support() {\n return new Promise(function (resolve, reject) {\n if (typeof OffscreenCanvas === 'undefined') {\n // if OffscreenCanvas is present, we assume browser supports Worker and built-in Promise as well\n resolve(false);\n return;\n }\n\n function workerPayload(self) {\n if (typeof createImageBitmap === 'undefined') {\n self.postMessage(false);\n return;\n }\n\n Promise.resolve().then(function () {\n var canvas = new OffscreenCanvas(10, 10); // test that 2d context can be used in worker\n\n var ctx = canvas.getContext('2d');\n ctx.rect(0, 0, 1, 1); // test that cib can be used to return image bitmap from worker\n\n return createImageBitmap(canvas, 0, 0, 1, 1);\n }).then(function () {\n return self.postMessage(true);\n }, function () {\n return self.postMessage(false);\n });\n }\n\n var code = btoa(\"(\".concat(workerPayload.toString(), \")(self);\"));\n var w = new Worker(\"data:text/javascript;base64,\".concat(code));\n\n w.onmessage = function (ev) {\n return resolve(ev.data);\n };\n\n w.onerror = reject;\n }).then(function (result) {\n return result;\n }, function () {\n return false;\n });\n}; // Check if canvas.getContext('2d').getImageData can be used,\n// FireFox randomizes the output of that function in `privacy.resistFingerprinting` mode\n\n\nmodule.exports.can_use_canvas = function can_use_canvas(createCanvas) {\n var usable = false;\n\n try {\n var canvas = createCanvas(2, 1);\n var ctx = canvas.getContext('2d');\n var d = ctx.createImageData(2, 1);\n d.data[0] = 12;\n d.data[1] = 23;\n d.data[2] = 34;\n d.data[3] = 255;\n d.data[4] = 45;\n d.data[5] = 56;\n d.data[6] = 67;\n d.data[7] = 255;\n ctx.putImageData(d, 0, 0);\n d = null;\n d = ctx.getImageData(0, 0, 2, 1);\n\n if (d.data[0] === 12 && d.data[1] === 23 && d.data[2] === 34 && d.data[3] === 255 && d.data[4] === 45 && d.data[5] === 56 && d.data[6] === 67 && d.data[7] === 255) {\n usable = true;\n }\n } catch (err) {}\n\n return usable;\n}; // Check if createImageBitmap(img, sx, sy, sw, sh) signature works correctly\n// with JPEG images oriented with Exif;\n// https://bugs.chromium.org/p/chromium/issues/detail?id=1220671\n// TODO: remove after it's fixed in chrome for at least 2 releases\n\n\nmodule.exports.cib_can_use_region = function cib_can_use_region() {\n return new Promise(function (resolve) {\n if (typeof createImageBitmap === 'undefined') {\n resolve(false);\n return;\n }\n\n var image = new Image();\n image.src = 'data:image/jpeg;base64,' + '/9j/4QBiRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAYAAAEaAAUAAAABAAAASgEbAAUAA' + 'AABAAAAUgEoAAMAAAABAAIAAAITAAMAAAABAAEAAAAAAAAAAABIAAAAAQAAAEgAAAAB/9' + 'sAQwAEAwMEAwMEBAMEBQQEBQYKBwYGBgYNCQoICg8NEBAPDQ8OERMYFBESFxIODxUcFRc' + 'ZGRsbGxAUHR8dGh8YGhsa/9sAQwEEBQUGBQYMBwcMGhEPERoaGhoaGhoaGhoaGhoaGhoa' + 'GhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoa/8IAEQgAAQACAwERAAIRAQMRA' + 'f/EABQAAQAAAAAAAAAAAAAAAAAAAAf/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAA' + 'IQAxAAAAF/P//EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEAAQUCf//EABQRAQAAAAA' + 'AAAAAAAAAAAAAAAD/2gAIAQMBAT8Bf//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQIB' + 'AT8Bf//EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEABj8Cf//EABQQAQAAAAAAAAAAA' + 'AAAAAAAAAD/2gAIAQEAAT8hf//aAAwDAQACAAMAAAAQH//EABQRAQAAAAAAAAAAAAAAAA' + 'AAAAD/2gAIAQMBAT8Qf//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQIBAT8Qf//EABQ' + 'QAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEAAT8Qf//Z';\n\n image.onload = function () {\n createImageBitmap(image, 0, 0, image.width, image.height).then(function (bitmap) {\n if (bitmap.width === image.width && bitmap.height === image.height) {\n resolve(true);\n } else {\n resolve(false);\n }\n }, function () {\n return resolve(false);\n });\n };\n\n image.onerror = function () {\n return resolve(false);\n };\n });\n};\n\n},{}],17:[function(_dereq_,module,exports){\n// Web Worker wrapper for image resize function\n'use strict';\n\nmodule.exports = function () {\n var MathLib = _dereq_('./mathlib');\n\n var mathLib;\n /* eslint-disable no-undef */\n\n onmessage = function onmessage(ev) {\n var tileOpts = ev.data.opts;\n var returnBitmap = false;\n\n if (!tileOpts.src && tileOpts.srcBitmap) {\n var canvas = new OffscreenCanvas(tileOpts.width, tileOpts.height);\n var ctx = canvas.getContext('2d', {\n alpha: Boolean(tileOpts.alpha)\n });\n ctx.drawImage(tileOpts.srcBitmap, 0, 0);\n tileOpts.src = ctx.getImageData(0, 0, tileOpts.width, tileOpts.height).data;\n canvas.width = canvas.height = 0;\n canvas = null;\n tileOpts.srcBitmap.close();\n tileOpts.srcBitmap = null; // Temporary force out data to typed array, because Chrome have artefacts\n // https://github.com/nodeca/pica/issues/223\n // returnBitmap = true;\n }\n\n if (!mathLib) mathLib = new MathLib(ev.data.features); // Use multimath's sync auto-init. Avoid Promise use in old browsers,\n // because polyfills are not propagated to webworker.\n\n var data = mathLib.resizeAndUnsharp(tileOpts);\n\n if (returnBitmap) {\n var toImageData = new ImageData(new Uint8ClampedArray(data), tileOpts.toWidth, tileOpts.toHeight);\n\n var _canvas = new OffscreenCanvas(tileOpts.toWidth, tileOpts.toHeight);\n\n var _ctx = _canvas.getContext('2d', {\n alpha: Boolean(tileOpts.alpha)\n });\n\n _ctx.putImageData(toImageData, 0, 0);\n\n createImageBitmap(_canvas).then(function (bitmap) {\n postMessage({\n bitmap: bitmap\n }, [bitmap]);\n });\n } else {\n postMessage({\n data: data\n }, [data.buffer]);\n }\n };\n};\n\n},{\"./mathlib\":1}],18:[function(_dereq_,module,exports){\n// Calculate Gaussian blur of an image using IIR filter\n// The method is taken from Intel's white paper and code example attached to it:\n// https://software.intel.com/en-us/articles/iir-gaussian-blur-filter\n// -implementation-using-intel-advanced-vector-extensions\n\nvar a0, a1, a2, a3, b1, b2, left_corner, right_corner;\n\nfunction gaussCoef(sigma) {\n if (sigma < 0.5) {\n sigma = 0.5;\n }\n\n var a = Math.exp(0.726 * 0.726) / sigma,\n g1 = Math.exp(-a),\n g2 = Math.exp(-2 * a),\n k = (1 - g1) * (1 - g1) / (1 + 2 * a * g1 - g2);\n\n a0 = k;\n a1 = k * (a - 1) * g1;\n a2 = k * (a + 1) * g1;\n a3 = -k * g2;\n b1 = 2 * g1;\n b2 = -g2;\n left_corner = (a0 + a1) / (1 - b1 - b2);\n right_corner = (a2 + a3) / (1 - b1 - b2);\n\n // Attempt to force type to FP32.\n return new Float32Array([ a0, a1, a2, a3, b1, b2, left_corner, right_corner ]);\n}\n\nfunction convolveMono16(src, out, line, coeff, width, height) {\n // takes src image and writes the blurred and transposed result into out\n\n var prev_src, curr_src, curr_out, prev_out, prev_prev_out;\n var src_index, out_index, line_index;\n var i, j;\n var coeff_a0, coeff_a1, coeff_b1, coeff_b2;\n\n for (i = 0; i < height; i++) {\n src_index = i * width;\n out_index = i;\n line_index = 0;\n\n // left to right\n prev_src = src[src_index];\n prev_prev_out = prev_src * coeff[6];\n prev_out = prev_prev_out;\n\n coeff_a0 = coeff[0];\n coeff_a1 = coeff[1];\n coeff_b1 = coeff[4];\n coeff_b2 = coeff[5];\n\n for (j = 0; j < width; j++) {\n curr_src = src[src_index];\n\n curr_out = curr_src * coeff_a0 +\n prev_src * coeff_a1 +\n prev_out * coeff_b1 +\n prev_prev_out * coeff_b2;\n\n prev_prev_out = prev_out;\n prev_out = curr_out;\n prev_src = curr_src;\n\n line[line_index] = prev_out;\n line_index++;\n src_index++;\n }\n\n src_index--;\n line_index--;\n out_index += height * (width - 1);\n\n // right to left\n prev_src = src[src_index];\n prev_prev_out = prev_src * coeff[7];\n prev_out = prev_prev_out;\n curr_src = prev_src;\n\n coeff_a0 = coeff[2];\n coeff_a1 = coeff[3];\n\n for (j = width - 1; j >= 0; j--) {\n curr_out = curr_src * coeff_a0 +\n prev_src * coeff_a1 +\n prev_out * coeff_b1 +\n prev_prev_out * coeff_b2;\n\n prev_prev_out = prev_out;\n prev_out = curr_out;\n\n prev_src = curr_src;\n curr_src = src[src_index];\n\n out[out_index] = line[line_index] + prev_out;\n\n src_index--;\n line_index--;\n out_index -= height;\n }\n }\n}\n\n\nfunction blurMono16(src, width, height, radius) {\n // Quick exit on zero radius\n if (!radius) { return; }\n\n var out = new Uint16Array(src.length),\n tmp_line = new Float32Array(Math.max(width, height));\n\n var coeff = gaussCoef(radius);\n\n convolveMono16(src, out, tmp_line, coeff, width, height, radius);\n convolveMono16(out, src, tmp_line, coeff, height, width, radius);\n}\n\nmodule.exports = blurMono16;\n\n},{}],19:[function(_dereq_,module,exports){\nif (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n\n},{}],20:[function(_dereq_,module,exports){\n'use strict';\n\n\nvar assign = _dereq_('object-assign');\nvar base64decode = _dereq_('./lib/base64decode');\nvar hasWebAssembly = _dereq_('./lib/wa_detect');\n\n\nvar DEFAULT_OPTIONS = {\n js: true,\n wasm: true\n};\n\n\nfunction MultiMath(options) {\n if (!(this instanceof MultiMath)) return new MultiMath(options);\n\n var opts = assign({}, DEFAULT_OPTIONS, options || {});\n\n this.options = opts;\n\n this.__cache = {};\n\n this.__init_promise = null;\n this.__modules = opts.modules || {};\n this.__memory = null;\n this.__wasm = {};\n\n this.__isLE = ((new Uint32Array((new Uint8Array([ 1, 0, 0, 0 ])).buffer))[0] === 1);\n\n if (!this.options.js && !this.options.wasm) {\n throw new Error('mathlib: at least \"js\" or \"wasm\" should be enabled');\n }\n}\n\n\nMultiMath.prototype.has_wasm = hasWebAssembly;\n\n\nMultiMath.prototype.use = function (module) {\n this.__modules[module.name] = module;\n\n // Pin the best possible implementation\n if (this.options.wasm && this.has_wasm() && module.wasm_fn) {\n this[module.name] = module.wasm_fn;\n } else {\n this[module.name] = module.fn;\n }\n\n return this;\n};\n\n\nMultiMath.prototype.init = function () {\n if (this.__init_promise) return this.__init_promise;\n\n if (!this.options.js && this.options.wasm && !this.has_wasm()) {\n return Promise.reject(new Error('mathlib: only \"wasm\" was enabled, but it\\'s not supported'));\n }\n\n var self = this;\n\n this.__init_promise = Promise.all(Object.keys(self.__modules).map(function (name) {\n var module = self.__modules[name];\n\n if (!self.options.wasm || !self.has_wasm() || !module.wasm_fn) return null;\n\n // If already compiled - exit\n if (self.__wasm[name]) return null;\n\n // Compile wasm source\n return WebAssembly.compile(self.__base64decode(module.wasm_src))\n .then(function (m) { self.__wasm[name] = m; });\n }))\n .then(function () { return self; });\n\n return this.__init_promise;\n};\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Methods below are for internal use from plugins\n\n\n// Simple decode base64 to typed array. Useful to load embedded webassembly\n// code. You probably don't need to call this method directly.\n//\nMultiMath.prototype.__base64decode = base64decode;\n\n\n// Increase current memory to include specified number of bytes. Do nothing if\n// size is already ok. You probably don't need to call this method directly,\n// because it will be invoked from `.__instance()`.\n//\nMultiMath.prototype.__reallocate = function mem_grow_to(bytes) {\n if (!this.__memory) {\n this.__memory = new WebAssembly.Memory({\n initial: Math.ceil(bytes / (64 * 1024))\n });\n return this.__memory;\n }\n\n var mem_size = this.__memory.buffer.byteLength;\n\n if (mem_size < bytes) {\n this.__memory.grow(Math.ceil((bytes - mem_size) / (64 * 1024)));\n }\n\n return this.__memory;\n};\n\n\n// Returns instantinated webassembly item by name, with specified memory size\n// and environment.\n// - use cache if available\n// - do sync module init, if async init was not called earlier\n// - allocate memory if not enougth\n// - can export functions to webassembly via \"env_extra\",\n// for example, { exp: Math.exp }\n//\nMultiMath.prototype.__instance = function instance(name, memsize, env_extra) {\n if (memsize) this.__reallocate(memsize);\n\n // If .init() was not called, do sync compile\n if (!this.__wasm[name]) {\n var module = this.__modules[name];\n this.__wasm[name] = new WebAssembly.Module(this.__base64decode(module.wasm_src));\n }\n\n if (!this.__cache[name]) {\n var env_base = {\n memoryBase: 0,\n memory: this.__memory,\n tableBase: 0,\n table: new WebAssembly.Table({ initial: 0, element: 'anyfunc' })\n };\n\n this.__cache[name] = new WebAssembly.Instance(this.__wasm[name], {\n env: assign(env_base, env_extra || {})\n });\n }\n\n return this.__cache[name];\n};\n\n\n// Helper to calculate memory aligh for pointers. Webassembly does not require\n// this, but you may wish to experiment. Default base = 8;\n//\nMultiMath.prototype.__align = function align(number, base) {\n base = base || 8;\n var reminder = number % base;\n return number + (reminder ? base - reminder : 0);\n};\n\n\nmodule.exports = MultiMath;\n\n},{\"./lib/base64decode\":21,\"./lib/wa_detect\":22,\"object-assign\":23}],21:[function(_dereq_,module,exports){\n// base64 decode str -> Uint8Array, to load WA modules\n//\n'use strict';\n\n\nvar BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n\nmodule.exports = function base64decode(str) {\n var input = str.replace(/[\\r\\n=]/g, ''), // remove CR/LF & padding to simplify scan\n max = input.length;\n\n var out = new Uint8Array((max * 3) >> 2);\n\n // Collect by 6*4 bits (3 bytes)\n\n var bits = 0;\n var ptr = 0;\n\n for (var idx = 0; idx < max; idx++) {\n if ((idx % 4 === 0) && idx) {\n out[ptr++] = (bits >> 16) & 0xFF;\n out[ptr++] = (bits >> 8) & 0xFF;\n out[ptr++] = bits & 0xFF;\n }\n\n bits = (bits << 6) | BASE64_MAP.indexOf(input.charAt(idx));\n }\n\n // Dump tail\n\n var tailbits = (max % 4) * 6;\n\n if (tailbits === 0) {\n out[ptr++] = (bits >> 16) & 0xFF;\n out[ptr++] = (bits >> 8) & 0xFF;\n out[ptr++] = bits & 0xFF;\n } else if (tailbits === 18) {\n out[ptr++] = (bits >> 10) & 0xFF;\n out[ptr++] = (bits >> 2) & 0xFF;\n } else if (tailbits === 12) {\n out[ptr++] = (bits >> 4) & 0xFF;\n }\n\n return out;\n};\n\n},{}],22:[function(_dereq_,module,exports){\n// Detect WebAssembly support.\n// - Check global WebAssembly object\n// - Try to load simple module (can be disabled via CSP)\n//\n'use strict';\n\n\nvar wa;\n\n\nmodule.exports = function hasWebAssembly() {\n // use cache if called before;\n if (typeof wa !== 'undefined') return wa;\n\n wa = false;\n\n if (typeof WebAssembly === 'undefined') return wa;\n\n // If WebAssenbly is disabled, code can throw on compile\n try {\n // https://github.com/brion/min-wasm-fail/blob/master/min-wasm-fail.in.js\n // Additional check that WA internals are correct\n\n /* eslint-disable comma-spacing, max-len */\n var bin = new Uint8Array([ 0,97,115,109,1,0,0,0,1,6,1,96,1,127,1,127,3,2,1,0,5,3,1,0,1,7,8,1,4,116,101,115,116,0,0,10,16,1,14,0,32,0,65,1,54,2,0,32,0,40,2,0,11 ]);\n var module = new WebAssembly.Module(bin);\n var instance = new WebAssembly.Instance(module, {});\n\n // test storing to and loading from a non-zero location via a parameter.\n // Safari on iOS 11.2.5 returns 0 unexpectedly at non-zero locations\n if (instance.exports.test(4) !== 0) wa = true;\n\n return wa;\n } catch (__) {}\n\n return wa;\n};\n\n},{}],23:[function(_dereq_,module,exports){\n/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n},{}],24:[function(_dereq_,module,exports){\nvar bundleFn = arguments[3];\nvar sources = arguments[4];\nvar cache = arguments[5];\n\nvar stringify = JSON.stringify;\n\nmodule.exports = function (fn, options) {\n var wkey;\n var cacheKeys = Object.keys(cache);\n\n for (var i = 0, l = cacheKeys.length; i < l; i++) {\n var key = cacheKeys[i];\n var exp = cache[key].exports;\n // Using babel as a transpiler to use esmodule, the export will always\n // be an object with the default export as a property of it. To ensure\n // the existing api and babel esmodule exports are both supported we\n // check for both\n if (exp === fn || exp && exp.default === fn) {\n wkey = key;\n break;\n }\n }\n\n if (!wkey) {\n wkey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n var wcache = {};\n for (var i = 0, l = cacheKeys.length; i < l; i++) {\n var key = cacheKeys[i];\n wcache[key] = key;\n }\n sources[wkey] = [\n 'function(require,module,exports){' + fn + '(self); }',\n wcache\n ];\n }\n var skey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n\n var scache = {}; scache[wkey] = wkey;\n sources[skey] = [\n 'function(require,module,exports){' +\n // try to call default if defined to also support babel esmodule exports\n 'var f = require(' + stringify(wkey) + ');' +\n '(f.default ? f.default : f)(self);' +\n '}',\n scache\n ];\n\n var workerSources = {};\n resolveSources(skey);\n\n function resolveSources(key) {\n workerSources[key] = true;\n\n for (var depPath in sources[key][1]) {\n var depKey = sources[key][1][depPath];\n if (!workerSources[depKey]) {\n resolveSources(depKey);\n }\n }\n }\n\n var src = '(' + bundleFn + ')({'\n + Object.keys(workerSources).map(function (key) {\n return stringify(key) + ':['\n + sources[key][0]\n + ',' + stringify(sources[key][1]) + ']'\n ;\n }).join(',')\n + '},{},[' + stringify(skey) + '])'\n ;\n\n var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;\n\n var blob = new Blob([src], { type: 'text/javascript' });\n if (options && options.bare) { return blob; }\n var workerUrl = URL.createObjectURL(blob);\n var worker = new Worker(workerUrl);\n worker.objectURL = workerUrl;\n return worker;\n};\n\n},{}],\"/index.js\":[function(_dereq_,module,exports){\n'use strict';\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nvar assign = _dereq_('object-assign');\n\nvar webworkify = _dereq_('webworkify');\n\nvar MathLib = _dereq_('./lib/mathlib');\n\nvar Pool = _dereq_('./lib/pool');\n\nvar utils = _dereq_('./lib/utils');\n\nvar worker = _dereq_('./lib/worker');\n\nvar createStages = _dereq_('./lib/stepper');\n\nvar createRegions = _dereq_('./lib/tiler'); // Deduplicate pools & limiters with the same configs\n// when user creates multiple pica instances.\n\n\nvar singletones = {};\nvar NEED_SAFARI_FIX = false;\n\ntry {\n if (typeof navigator !== 'undefined' && navigator.userAgent) {\n NEED_SAFARI_FIX = navigator.userAgent.indexOf('Safari') >= 0;\n }\n} catch (e) {}\n\nvar concurrency = 1;\n\nif (typeof navigator !== 'undefined') {\n concurrency = Math.min(navigator.hardwareConcurrency || 1, 4);\n}\n\nvar DEFAULT_PICA_OPTS = {\n tile: 1024,\n concurrency: concurrency,\n features: ['js', 'wasm', 'ww'],\n idle: 2000,\n createCanvas: function createCanvas(width, height) {\n var tmpCanvas = document.createElement('canvas');\n tmpCanvas.width = width;\n tmpCanvas.height = height;\n return tmpCanvas;\n }\n};\nvar DEFAULT_RESIZE_OPTS = {\n quality: 3,\n alpha: false,\n unsharpAmount: 0,\n unsharpRadius: 0.0,\n unsharpThreshold: 0\n};\nvar CAN_NEW_IMAGE_DATA = false;\nvar CAN_CREATE_IMAGE_BITMAP = false;\nvar CAN_USE_CANVAS_GET_IMAGE_DATA = false;\nvar CAN_USE_OFFSCREEN_CANVAS = false;\nvar CAN_USE_CIB_REGION_FOR_IMAGE = false;\n\nfunction workerFabric() {\n return {\n value: webworkify(worker),\n destroy: function destroy() {\n this.value.terminate();\n\n if (typeof window !== 'undefined') {\n var url = window.URL || window.webkitURL || window.mozURL || window.msURL;\n\n if (url && url.revokeObjectURL && this.value.objectURL) {\n url.revokeObjectURL(this.value.objectURL);\n }\n }\n }\n };\n} ////////////////////////////////////////////////////////////////////////////////\n// API methods\n\n\nfunction Pica(options) {\n if (!(this instanceof Pica)) return new Pica(options);\n this.options = assign({}, DEFAULT_PICA_OPTS, options || {});\n var limiter_key = \"lk_\".concat(this.options.concurrency); // Share limiters to avoid multiple parallel workers when user creates\n // multiple pica instances.\n\n this.__limit = singletones[limiter_key] || utils.limiter(this.options.concurrency);\n if (!singletones[limiter_key]) singletones[limiter_key] = this.__limit; // List of supported features, according to options & browser/node.js\n\n this.features = {\n js: false,\n // pure JS implementation, can be disabled for testing\n wasm: false,\n // webassembly implementation for heavy functions\n cib: false,\n // resize via createImageBitmap (only FF at this moment)\n ww: false // webworkers\n\n };\n this.__workersPool = null; // Store requested features for webworkers\n\n this.__requested_features = [];\n this.__mathlib = null;\n}\n\nPica.prototype.init = function () {\n var _this = this;\n\n if (this.__initPromise) return this.__initPromise; // Test if we can create ImageData without canvas and memory copy\n\n if (typeof ImageData !== 'undefined' && typeof Uint8ClampedArray !== 'undefined') {\n try {\n /* eslint-disable no-new */\n new ImageData(new Uint8ClampedArray(400), 10, 10);\n CAN_NEW_IMAGE_DATA = true;\n } catch (__) {}\n } // ImageBitmap can be effective in 2 places:\n //\n // 1. Threaded jpeg unpack (basic)\n // 2. Built-in resize (blocked due problem in chrome, see issue #89)\n //\n // For basic use we also need ImageBitmap wo support .close() method,\n // see https://developer.mozilla.org/ru/docs/Web/API/ImageBitmap\n\n\n if (typeof ImageBitmap !== 'undefined') {\n if (ImageBitmap.prototype && ImageBitmap.prototype.close) {\n CAN_CREATE_IMAGE_BITMAP = true;\n } else {\n this.debug('ImageBitmap does not support .close(), disabled');\n }\n }\n\n var features = this.options.features.slice();\n\n if (features.indexOf('all') >= 0) {\n features = ['cib', 'wasm', 'js', 'ww'];\n }\n\n this.__requested_features = features;\n this.__mathlib = new MathLib(features); // Check WebWorker support if requested\n\n if (features.indexOf('ww') >= 0) {\n if (typeof window !== 'undefined' && 'Worker' in window) {\n // IE <= 11 don't allow to create webworkers from string. We should check it.\n // https://connect.microsoft.com/IE/feedback/details/801810/web-workers-from-blob-urls-in-ie-10-and-11\n try {\n var wkr = _dereq_('webworkify')(function () {});\n\n wkr.terminate();\n this.features.ww = true; // pool uniqueness depends on pool config + webworker config\n\n var wpool_key = \"wp_\".concat(JSON.stringify(this.options));\n\n if (singletones[wpool_key]) {\n this.__workersPool = singletones[wpool_key];\n } else {\n this.__workersPool = new Pool(workerFabric, this.options.idle);\n singletones[wpool_key] = this.__workersPool;\n }\n } catch (__) {}\n }\n }\n\n var initMath = this.__mathlib.init().then(function (mathlib) {\n // Copy detected features\n assign(_this.features, mathlib.features);\n });\n\n var checkCibResize;\n\n if (!CAN_CREATE_IMAGE_BITMAP) {\n checkCibResize = Promise.resolve(false);\n } else {\n checkCibResize = utils.cib_support(this.options.createCanvas).then(function (status) {\n if (_this.features.cib && features.indexOf('cib') < 0) {\n _this.debug('createImageBitmap() resize supported, but disabled by config');\n\n return;\n }\n\n if (features.indexOf('cib') >= 0) _this.features.cib = status;\n });\n }\n\n CAN_USE_CANVAS_GET_IMAGE_DATA = utils.can_use_canvas(this.options.createCanvas);\n var checkOffscreenCanvas;\n\n if (CAN_CREATE_IMAGE_BITMAP && CAN_NEW_IMAGE_DATA && features.indexOf('ww') !== -1) {\n checkOffscreenCanvas = utils.worker_offscreen_canvas_support();\n } else {\n checkOffscreenCanvas = Promise.resolve(false);\n }\n\n checkOffscreenCanvas = checkOffscreenCanvas.then(function (result) {\n CAN_USE_OFFSCREEN_CANVAS = result;\n }); // we use createImageBitmap to crop image data and pass it to workers,\n // so need to check whether function works correctly;\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1220671\n\n var checkCibRegion = utils.cib_can_use_region().then(function (result) {\n CAN_USE_CIB_REGION_FOR_IMAGE = result;\n }); // Init math lib. That's async because can load some\n\n this.__initPromise = Promise.all([initMath, checkCibResize, checkOffscreenCanvas, checkCibRegion]).then(function () {\n return _this;\n });\n return this.__initPromise;\n}; // Call resizer in webworker or locally, depending on config\n\n\nPica.prototype.__invokeResize = function (tileOpts, opts) {\n var _this2 = this;\n\n // Share cache between calls:\n //\n // - wasm instance\n // - wasm memory object\n //\n opts.__mathCache = opts.__mathCache || {};\n return Promise.resolve().then(function () {\n if (!_this2.features.ww) {\n // not possible to have ImageBitmap here if user disabled WW\n return {\n data: _this2.__mathlib.resizeAndUnsharp(tileOpts, opts.__mathCache)\n };\n }\n\n return new Promise(function (resolve, reject) {\n var w = _this2.__workersPool.acquire();\n\n if (opts.cancelToken) opts.cancelToken[\"catch\"](function (err) {\n return reject(err);\n });\n\n w.value.onmessage = function (ev) {\n w.release();\n if (ev.data.err) reject(ev.data.err);else resolve(ev.data);\n };\n\n var transfer = [];\n if (tileOpts.src) transfer.push(tileOpts.src.buffer);\n if (tileOpts.srcBitmap) transfer.push(tileOpts.srcBitmap);\n w.value.postMessage({\n opts: tileOpts,\n features: _this2.__requested_features,\n preload: {\n wasm_nodule: _this2.__mathlib.__\n }\n }, transfer);\n });\n });\n}; // this function can return promise if createImageBitmap is used\n\n\nPica.prototype.__extractTileData = function (tile, from, opts, stageEnv, extractTo) {\n if (this.features.ww && CAN_USE_OFFSCREEN_CANVAS && ( // createImageBitmap doesn't work for images (Image, ImageBitmap) with Exif orientation in Chrome,\n // can use canvas because canvas doesn't have orientation;\n // see https://bugs.chromium.org/p/chromium/issues/detail?id=1220671\n utils.isCanvas(from) || CAN_USE_CIB_REGION_FOR_IMAGE)) {\n this.debug('Create tile for OffscreenCanvas');\n return createImageBitmap(stageEnv.srcImageBitmap || from, tile.x, tile.y, tile.width, tile.height).then(function (bitmap) {\n extractTo.srcBitmap = bitmap;\n return extractTo;\n });\n } // Extract tile RGBA buffer, depending on input type\n\n\n if (utils.isCanvas(from)) {\n if (!stageEnv.srcCtx) stageEnv.srcCtx = from.getContext('2d', {\n alpha: Boolean(opts.alpha)\n }); // If input is Canvas - extract region data directly\n\n this.debug('Get tile pixel data');\n extractTo.src = stageEnv.srcCtx.getImageData(tile.x, tile.y, tile.width, tile.height).data;\n return extractTo;\n } // If input is Image or decoded to ImageBitmap,\n // draw region to temporary canvas and extract data from it\n //\n // Note! Attempt to reuse this canvas causes significant slowdown in chrome\n //\n\n\n this.debug('Draw tile imageBitmap/image to temporary canvas');\n var tmpCanvas = this.options.createCanvas(tile.width, tile.height);\n var tmpCtx = tmpCanvas.getContext('2d', {\n alpha: Boolean(opts.alpha)\n });\n tmpCtx.globalCompositeOperation = 'copy';\n tmpCtx.drawImage(stageEnv.srcImageBitmap || from, tile.x, tile.y, tile.width, tile.height, 0, 0, tile.width, tile.height);\n this.debug('Get tile pixel data');\n extractTo.src = tmpCtx.getImageData(0, 0, tile.width, tile.height).data; // Safari 12 workaround\n // https://github.com/nodeca/pica/issues/199\n\n tmpCanvas.width = tmpCanvas.height = 0;\n return extractTo;\n};\n\nPica.prototype.__landTileData = function (tile, result, stageEnv) {\n var toImageData;\n this.debug('Convert raw rgba tile result to ImageData');\n\n if (result.bitmap) {\n stageEnv.toCtx.drawImage(result.bitmap, tile.toX, tile.toY);\n return null;\n }\n\n if (CAN_NEW_IMAGE_DATA) {\n // this branch is for modern browsers\n // If `new ImageData()` & Uint8ClampedArray suported\n toImageData = new ImageData(new Uint8ClampedArray(result.data), tile.toWidth, tile.toHeight);\n } else {\n // fallback for `node-canvas` and old browsers\n // (IE11 has ImageData but does not support `new ImageData()`)\n toImageData = stageEnv.toCtx.createImageData(tile.toWidth, tile.toHeight);\n\n if (toImageData.data.set) {\n toImageData.data.set(result.data);\n } else {\n // IE9 don't have `.set()`\n for (var i = toImageData.data.length - 1; i >= 0; i--) {\n toImageData.data[i] = result.data[i];\n }\n }\n }\n\n this.debug('Draw tile');\n\n if (NEED_SAFARI_FIX) {\n // Safari draws thin white stripes between tiles without this fix\n stageEnv.toCtx.putImageData(toImageData, tile.toX, tile.toY, tile.toInnerX - tile.toX, tile.toInnerY - tile.toY, tile.toInnerWidth + 1e-5, tile.toInnerHeight + 1e-5);\n } else {\n stageEnv.toCtx.putImageData(toImageData, tile.toX, tile.toY, tile.toInnerX - tile.toX, tile.toInnerY - tile.toY, tile.toInnerWidth, tile.toInnerHeight);\n }\n\n return null;\n};\n\nPica.prototype.__tileAndResize = function (from, to, opts) {\n var _this3 = this;\n\n var stageEnv = {\n srcCtx: null,\n srcImageBitmap: null,\n isImageBitmapReused: false,\n toCtx: null\n };\n\n var processTile = function processTile(tile) {\n return _this3.__limit(function () {\n if (opts.canceled) return opts.cancelToken;\n var tileOpts = {\n width: tile.width,\n height: tile.height,\n toWidth: tile.toWidth,\n toHeight: tile.toHeight,\n scaleX: tile.scaleX,\n scaleY: tile.scaleY,\n offsetX: tile.offsetX,\n offsetY: tile.offsetY,\n quality: opts.quality,\n alpha: opts.alpha,\n unsharpAmount: opts.unsharpAmount,\n unsharpRadius: opts.unsharpRadius,\n unsharpThreshold: opts.unsharpThreshold\n };\n\n _this3.debug('Invoke resize math');\n\n return Promise.resolve(tileOpts).then(function (tileOpts) {\n return _this3.__extractTileData(tile, from, opts, stageEnv, tileOpts);\n }).then(function (tileOpts) {\n _this3.debug('Invoke resize math');\n\n return _this3.__invokeResize(tileOpts, opts);\n }).then(function (result) {\n if (opts.canceled) return opts.cancelToken;\n stageEnv.srcImageData = null;\n return _this3.__landTileData(tile, result, stageEnv);\n });\n });\n }; // Need to normalize data source first. It can be canvas or image.\n // If image - try to decode in background if possible\n\n\n return Promise.resolve().then(function () {\n stageEnv.toCtx = to.getContext('2d', {\n alpha: Boolean(opts.alpha)\n });\n if (utils.isCanvas(from)) return null;\n\n if (utils.isImageBitmap(from)) {\n stageEnv.srcImageBitmap = from;\n stageEnv.isImageBitmapReused = true;\n return null;\n }\n\n if (utils.isImage(from)) {\n // try do decode image in background for faster next operations;\n // if we're using offscreen canvas, cib is called per tile, so not needed here\n if (!CAN_CREATE_IMAGE_BITMAP) return null;\n\n _this3.debug('Decode image via createImageBitmap');\n\n return createImageBitmap(from).then(function (imageBitmap) {\n stageEnv.srcImageBitmap = imageBitmap;\n }) // Suppress error to use fallback, if method fails\n // https://github.com/nodeca/pica/issues/190\n\n /* eslint-disable no-unused-vars */\n [\"catch\"](function (e) {\n return null;\n });\n }\n\n throw new Error('Pica: \".from\" should be Image, Canvas or ImageBitmap');\n }).then(function () {\n if (opts.canceled) return opts.cancelToken;\n\n _this3.debug('Calculate tiles'); //\n // Here we are with \"normalized\" source,\n // follow to tiling\n //\n\n\n var regions = createRegions({\n width: opts.width,\n height: opts.height,\n srcTileSize: _this3.options.tile,\n toWidth: opts.toWidth,\n toHeight: opts.toHeight,\n destTileBorder: opts.__destTileBorder\n });\n var jobs = regions.map(function (tile) {\n return processTile(tile);\n });\n\n function cleanup(stageEnv) {\n if (stageEnv.srcImageBitmap) {\n if (!stageEnv.isImageBitmapReused) stageEnv.srcImageBitmap.close();\n stageEnv.srcImageBitmap = null;\n }\n }\n\n _this3.debug('Process tiles');\n\n return Promise.all(jobs).then(function () {\n _this3.debug('Finished!');\n\n cleanup(stageEnv);\n return to;\n }, function (err) {\n cleanup(stageEnv);\n throw err;\n });\n });\n};\n\nPica.prototype.__processStages = function (stages, from, to, opts) {\n var _this4 = this;\n\n if (opts.canceled) return opts.cancelToken;\n\n var _stages$shift = stages.shift(),\n _stages$shift2 = _slicedToArray(_stages$shift, 2),\n toWidth = _stages$shift2[0],\n toHeight = _stages$shift2[1];\n\n var isLastStage = stages.length === 0;\n opts = assign({}, opts, {\n toWidth: toWidth,\n toHeight: toHeight,\n // only use user-defined quality for the last stage,\n // use simpler (Hamming) filter for the first stages where\n // scale factor is large enough (more than 2-3)\n quality: isLastStage ? opts.quality : Math.min(1, opts.quality)\n });\n var tmpCanvas;\n\n if (!isLastStage) {\n // create temporary canvas\n tmpCanvas = this.options.createCanvas(toWidth, toHeight);\n }\n\n return this.__tileAndResize(from, isLastStage ? to : tmpCanvas, opts).then(function () {\n if (isLastStage) return to;\n opts.width = toWidth;\n opts.height = toHeight;\n return _this4.__processStages(stages, tmpCanvas, to, opts);\n }).then(function (res) {\n if (tmpCanvas) {\n // Safari 12 workaround\n // https://github.com/nodeca/pica/issues/199\n tmpCanvas.width = tmpCanvas.height = 0;\n }\n\n return res;\n });\n};\n\nPica.prototype.__resizeViaCreateImageBitmap = function (from, to, opts) {\n var _this5 = this;\n\n var toCtx = to.getContext('2d', {\n alpha: Boolean(opts.alpha)\n });\n this.debug('Resize via createImageBitmap()');\n return createImageBitmap(from, {\n resizeWidth: opts.toWidth,\n resizeHeight: opts.toHeight,\n resizeQuality: utils.cib_quality_name(opts.quality)\n }).then(function (imageBitmap) {\n if (opts.canceled) return opts.cancelToken; // if no unsharp - draw directly to output canvas\n\n if (!opts.unsharpAmount) {\n toCtx.drawImage(imageBitmap, 0, 0);\n imageBitmap.close();\n toCtx = null;\n\n _this5.debug('Finished!');\n\n return to;\n }\n\n _this5.debug('Unsharp result');\n\n var tmpCanvas = _this5.options.createCanvas(opts.toWidth, opts.toHeight);\n\n var tmpCtx = tmpCanvas.getContext('2d', {\n alpha: Boolean(opts.alpha)\n });\n tmpCtx.drawImage(imageBitmap, 0, 0);\n imageBitmap.close();\n var iData = tmpCtx.getImageData(0, 0, opts.toWidth, opts.toHeight);\n\n _this5.__mathlib.unsharp_mask(iData.data, opts.toWidth, opts.toHeight, opts.unsharpAmount, opts.unsharpRadius, opts.unsharpThreshold);\n\n toCtx.putImageData(iData, 0, 0); // Safari 12 workaround\n // https://github.com/nodeca/pica/issues/199\n\n tmpCanvas.width = tmpCanvas.height = 0;\n iData = tmpCtx = tmpCanvas = toCtx = null;\n\n _this5.debug('Finished!');\n\n return to;\n });\n};\n\nPica.prototype.resize = function (from, to, options) {\n var _this6 = this;\n\n this.debug('Start resize...');\n var opts = assign({}, DEFAULT_RESIZE_OPTS);\n\n if (!isNaN(options)) {\n opts = assign(opts, {\n quality: options\n });\n } else if (options) {\n opts = assign(opts, options);\n }\n\n opts.toWidth = to.width;\n opts.toHeight = to.height;\n opts.width = from.naturalWidth || from.width;\n opts.height = from.naturalHeight || from.height; // Prevent stepper from infinite loop\n\n if (to.width === 0 || to.height === 0) {\n return Promise.reject(new Error(\"Invalid output size: \".concat(to.width, \"x\").concat(to.height)));\n }\n\n if (opts.unsharpRadius > 2) opts.unsharpRadius = 2;\n opts.canceled = false;\n\n if (opts.cancelToken) {\n // Wrap cancelToken to avoid successive resolve & set flag\n opts.cancelToken = opts.cancelToken.then(function (data) {\n opts.canceled = true;\n throw data;\n }, function (err) {\n opts.canceled = true;\n throw err;\n });\n }\n\n var DEST_TILE_BORDER = 3; // Max possible filter window size\n\n opts.__destTileBorder = Math.ceil(Math.max(DEST_TILE_BORDER, 2.5 * opts.unsharpRadius | 0));\n return this.init().then(function () {\n if (opts.canceled) return opts.cancelToken; // if createImageBitmap supports resize, just do it and return\n\n if (_this6.features.cib) {\n return _this6.__resizeViaCreateImageBitmap(from, to, opts);\n }\n\n if (!CAN_USE_CANVAS_GET_IMAGE_DATA) {\n var err = new Error('Pica: cannot use getImageData on canvas, ' + \"make sure fingerprinting protection isn't enabled\");\n err.code = 'ERR_GET_IMAGE_DATA';\n throw err;\n } //\n // No easy way, let's resize manually via arrays\n //\n\n\n var stages = createStages(opts.width, opts.height, opts.toWidth, opts.toHeight, _this6.options.tile, opts.__destTileBorder);\n return _this6.__processStages(stages, from, to, opts);\n });\n}; // RGBA buffer resize\n//\n\n\nPica.prototype.resizeBuffer = function (options) {\n var _this7 = this;\n\n var opts = assign({}, DEFAULT_RESIZE_OPTS, options);\n return this.init().then(function () {\n return _this7.__mathlib.resizeAndUnsharp(opts);\n });\n};\n\nPica.prototype.toBlob = function (canvas, mimeType, quality) {\n mimeType = mimeType || 'image/png';\n return new Promise(function (resolve) {\n if (canvas.toBlob) {\n canvas.toBlob(function (blob) {\n return resolve(blob);\n }, mimeType, quality);\n return;\n }\n\n if (canvas.convertToBlob) {\n resolve(canvas.convertToBlob({\n type: mimeType,\n quality: quality\n }));\n return;\n } // Fallback for old browsers\n\n\n var asString = atob(canvas.toDataURL(mimeType, quality).split(',')[1]);\n var len = asString.length;\n var asBuffer = new Uint8Array(len);\n\n for (var i = 0; i < len; i++) {\n asBuffer[i] = asString.charCodeAt(i);\n }\n\n resolve(new Blob([asBuffer], {\n type: mimeType\n }));\n });\n};\n\nPica.prototype.debug = function () {};\n\nmodule.exports = Pica;\n\n},{\"./lib/mathlib\":1,\"./lib/pool\":13,\"./lib/stepper\":14,\"./lib/tiler\":15,\"./lib/utils\":16,\"./lib/worker\":17,\"object-assign\":23,\"webworkify\":24}]},{},[])(\"/index.js\")\n});\n"],"names":["ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread2","target","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_typeof","obj","Symbol","iterator","constructor","prototype","_classCallCheck","instance","Constructor","TypeError","_defineProperties","props","descriptor","configurable","writable","value","_toConsumableArray","arr","Array","isArray","_arrayLikeToArray","_arrayWithoutHoles","iter","from","_iterableToArray","o","minLen","n","toString","call","slice","name","test","_unsupportedIterableToArray","_nonIterableSpread","len","arr2","IS_BROWSER","window","document","WINDOW","IS_TOUCH_DEVICE","documentElement","HAS_POINTER_EVENT","NAMESPACE","ACTION_ALL","ACTION_CROP","ACTION_MOVE","ACTION_ZOOM","ACTION_EAST","ACTION_WEST","ACTION_SOUTH","ACTION_NORTH","ACTION_NORTH_EAST","ACTION_NORTH_WEST","ACTION_SOUTH_EAST","ACTION_SOUTH_WEST","CLASS_CROP","concat","CLASS_DISABLED","CLASS_HIDDEN","CLASS_HIDE","CLASS_INVISIBLE","CLASS_MODAL","CLASS_MOVE","DATA_ACTION","DATA_PREVIEW","DRAG_MODE_CROP","DRAG_MODE_MOVE","DRAG_MODE_NONE","EVENT_CROP","EVENT_CROP_END","EVENT_CROP_MOVE","EVENT_CROP_START","EVENT_DBLCLICK","EVENT_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","aspectRatio","data","preview","responsive","restore","checkCrossOrigin","checkOrientation","modal","guides","center","highlight","background","autoCrop","autoCropArea","movable","rotatable","scalable","zoomable","zoomOnTouch","zoomOnWheel","wheelZoomRatio","cropBoxMovable","cropBoxResizable","toggleDragModeOnDblclick","minCanvasWidth","minCanvasHeight","minCropBoxWidth","minCropBoxHeight","minContainerWidth","minContainerHeight","ready","cropstart","cropmove","cropend","crop","zoom","isNaN","Number","isNumber","isPositiveNumber","Infinity","isUndefined","isObject","hasOwnProperty","isPlainObject","_constructor","error","isFunction","toArray","callback","assign","_len","args","_key","arg","REGEXP_DECIMALS","normalizeDecimalNumber","times","undefined","Math","round","REGEXP_SUFFIX","setStyle","element","styles","style","property","addClass","elem","classList","add","className","trim","indexOf","removeClass","remove","replace","toggleClass","added","REGEXP_CAMEL_CASE","toParamCase","toLowerCase","getData","dataset","getAttribute","setData","setAttribute","REGEXP_SPACES","onceSupported","supported","once","listener","options","get","set","addEventListener","removeEventListener","removeListener","type","handler","split","event","listeners","addListener","_handler","_element$listeners","_len2","_key2","dispatchEvent","Event","CustomEvent","detail","bubbles","cancelable","createEvent","initCustomEvent","getOffset","box","getBoundingClientRect","left","pageXOffset","clientLeft","top","pageYOffset","clientTop","location","REGEXP_ORIGINS","isCrossOriginURL","url","parts","match","protocol","hostname","port","addTimestamp","timestamp","Date","getTime","getTransforms","_ref","rotate","scaleX","scaleY","translateX","translateY","values","transform","join","WebkitTransform","msTransform","getPointer","_ref2","endOnly","pageX","pageY","end","endX","endY","startX","startY","getAdjustedSizes","_ref4","height","width","isValidWidth","isValidHeight","adjustedWidth","getSourceCanvas","image","_ref6","_ref7","_ref8","imageAspectRatio","imageNaturalWidth","naturalWidth","imageNaturalHeight","naturalHeight","_ref6$rotate","_ref6$scaleX","_ref6$scaleY","_ref8$fillColor","fillColor","_ref8$imageSmoothingE","imageSmoothingEnabled","_ref8$imageSmoothingQ","imageSmoothingQuality","_ref8$maxWidth","maxWidth","_ref8$maxHeight","maxHeight","_ref8$minWidth","minWidth","_ref8$minHeight","minHeight","canvas","createElement","context","getContext","maxSizes","minSizes","min","max","destMaxSizes","destMinSizes","destWidth","destHeight","params","fillStyle","fillRect","save","translate","PI","scale","drawImage","map","param","floor","fromCharCode","String","REGEXP_DATA_URL_HEAD","resetAndGetOrientation","arrayBuffer","orientation","dataView","DataView","littleEndian","app1Start","ifdStart","getUint8","byteLength","offset","tiffOffset","start","str","getStringFromCharCode","endianness","getUint16","firstIFDOffset","getUint32","_offset","_length","setUint16","render","this","initContainer","initCanvas","initCropBox","renderCanvas","cropped","renderCropBox","container","cropper","containerData","offsetWidth","offsetHeight","imageData","rotated","abs","canvasWidth","canvasHeight","canvasData","limited","limitCanvas","oldLeft","oldTop","initialCanvasData","sizeLimited","positionLimited","cropBoxData","_getAdjustedSizes","newCanvasLeft","newCanvasTop","minLeft","minTop","maxLeft","maxTop","changed","transformed","_getRotatedSizes","_ref5","degree","arc","sinArc","sin","cosArc","cos","newWidth","newHeight","getRotatedSizes","renderImage","limitCropBox","output","initialCropBoxData","maxCropBoxWidth","maxCropBoxHeight","face","cropBox","disabled","initPreview","crossOrigin","crossOriginUrl","alt","src","viewBox","appendChild","viewBoxImage","previews","ownerDocument","querySelectorAll","querySelector","el","img","html","innerHTML","cssText","resetPreview","removeAttribute","removeData","cropBoxWidth","cropBoxHeight","originalWidth","originalHeight","ratio","getElementsByTagName","events","bind","onCropStart","cropStart","onWheel","wheel","passive","capture","onDblclick","dblclick","onCropMove","cropMove","onCropEnd","cropEnd","onResize","resize","unbind","handlers","ratioX","ratioY","getCanvasData","getCropBoxData","setCanvasData","setCropBoxData","setDragMode","dragBox","contains","_this","delta","preventDefault","wheeling","setTimeout","deltaY","wheelDelta","buttons","button","pointerType","ctrlKey","action","pointers","changedTouches","touch","identifier","pointerId","originalEvent","cropping","change","right","bottom","renderable","shiftKey","pointer","range","x","y","check","side","move","pointers2","maxRatio","pointer2","x1","y1","x2","y2","z1","sqrt","getMaxZoomRatio","p","methods","reset","initialImageData","clear","hasSameSize","isImg","replaced","uncreate","load","enable","disable","destroy","originalUrl","offsetX","offsetY","_this$canvasData","moveTo","_originalEvent","zoomTo","pivot","oldRatio","count","_ref3","getPointersCenter","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","init","protoProps","staticProps","toDataURL","ArrayBuffer","read","base64","binary","atob","uint8","Uint8Array","charCodeAt","clone","xhr","XMLHttpRequest","onabort","onerror","ontimeout","onprogress","getResponseHeader","abort","onload","response","onloadend","open","responseType","withCredentials","send","mimeType","chunks","subarray","btoa","arrayBufferToDataURL","_parseOrientation","parseOrientation","stop","parentNode","insertBefore","nextSibling","_this2","isIOSWebKit","navigator","userAgent","done","build","sizingImage","body","removeChild","template","getElementsByClassName","unbuild","factory","module","exports","OldCookies","Cookies","api","noConflict","extend","result","attributes","decode","s","decodeURIComponent","converter","path","defaults","expires","toUTCString","JSON","stringify","e","write","encodeURIComponent","escape","stringifiedAttributes","attributeName","cookie","json","jar","cookies","charAt","parse","getJSON","withConverter","r","t","f","u","a","code","_dereq_","inherits","Multimath","mm_unsharp_mask","mm_resize","MathLib","requested_features","__requested_features","features","js","wasm","has_wasm","use","resizeAndUnsharp","cache","unsharpAmount","unsharp_mask","toWidth","toHeight","unsharpRadius","unsharpThreshold","clampTo8","convolveHorizontally","dest","srcW","srcH","destW","filters","g","b","filterPtr","filterShift","filterSize","srcPtr","destX","filterVal","srcOffset","destOffset","convolveVertically","fn","wasm_fn","wasm_src","createFilters","resetAlpha","dst","ptr","destH","quality","alpha","filtersX","filtersY","tmp","FILTER_INFO","FIXED_FRAC_BITS","toFixedPoint","num","srcSize","destSize","destPixel","srcPixel","srcFirst","srcLast","filterElementSize","floatFilter","fxpFilter","total","pxl","idx","floatVal","filterTotal","leftNotEmpty","rightNotEmpty","filterFunction","scaleInverted","scaleClamped","srcWindow","win","maxFilterElementSize","packedFilter","Int16Array","packedFilterPtr","slowCopy","ceil","Float32Array","xpi","asUint8Array","buffer","IS_LE","Uint32Array","__","copyInt16asLE","target_offset","src_offset","tmp_offset","__align","filtersX_offset","filtersY_offset","alloc_bytes","__instance","mem","__memory","mem32","src32","convolveHV","_convolveHV","glur_mono16","hsv_v16","size","out","Uint16Array","amount","radius","threshold","v1","v2","vmul","diff","iTimes4","brightness","blured","amountFp","thresholdFp","pixels","img_bytes_cnt","hsv_bytes_cnt","blur_bytes_cnt","blur_line_byte_cnt","blur_coeffs_byte_cnt","img_offset","hsv_offset","blur_offset","blur_tmp_offset","blur_line_offset","blur_coeffs_offset","exp","img32","_hsv_v16","blurMono16","_blurMono16","unsharp","_unsharp","GC_INTERVAL","Pool","create","idle","available","acquired","lastId","timeoutId","acquire","resource","pop","id","release","lastUsed","now","gc","_this3","MIN_INNER_TILE_SIZE","fromWidth","fromHeight","srcTileSize","destTileBorder","minScale","stageCount","log","pow","PIXEL_EPSILON","pixelFloor","nearest","pixelCeil","innerX","innerY","toTileWidth","toTileHeight","innerTileWidth","innerTileHeight","tile","tiles","toX","toY","toInnerX","toInnerY","toInnerWidth","toInnerHeight","objClass","isCanvas","cname","isImage","isImageBitmap","limiter","concurrency","active","queue","roll","shift","Promise","resolve","reject","then","err","cib_quality_name","cib_support","createCanvas","createImageBitmap","c","resizeWidth","resizeHeight","resizeQuality","bitmap","status","close","worker_offscreen_canvas_support","OffscreenCanvas","workerPayload","w","Worker","onmessage","ev","self","rect","postMessage","can_use_canvas","usable","ctx","d","createImageData","putImageData","cib_can_use_region","Image","mathLib","tileOpts","opts","returnBitmap","srcBitmap","Boolean","toImageData","ImageData","Uint8ClampedArray","_canvas","a0","a1","a2","a3","b1","b2","gaussCoef","sigma","g1","g2","k","convolveMono16","line","coeff","prev_src","curr_src","curr_out","prev_out","prev_prev_out","src_index","out_index","line_index","j","coeff_a0","coeff_a1","coeff_b1","coeff_b2","tmp_line","ctor","superCtor","super_","TempCtor","base64decode","hasWebAssembly","DEFAULT_OPTIONS","MultiMath","__cache","__init_promise","__modules","modules","__wasm","__isLE","all","WebAssembly","compile","__base64decode","m","__reallocate","bytes","Memory","initial","mem_size","grow","memsize","env_extra","Module","env_base","memoryBase","memory","tableBase","table","Table","Instance","env","number","base","reminder","BASE64_MAP","input","bits","tailbits","wa","bin","propIsEnumerable","propertyIsEnumerable","toObject","val","shouldUseNative","test1","getOwnPropertyNames","test2","test3","letter","to","bundleFn","sources","wkey","cacheKeys","l","default","random","wcache","skey","scache","workerSources","resolveSources","depPath","depKey","URL","webkitURL","mozURL","msURL","blob","Blob","bare","workerUrl","createObjectURL","worker","objectURL","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","_i","_s","_e","_arr","_n","_d","next","webworkify","utils","createStages","createRegions","singletones","NEED_SAFARI_FIX","hardwareConcurrency","DEFAULT_PICA_OPTS","tmpCanvas","DEFAULT_RESIZE_OPTS","CAN_NEW_IMAGE_DATA","CAN_CREATE_IMAGE_BITMAP","CAN_USE_CANVAS_GET_IMAGE_DATA","CAN_USE_OFFSCREEN_CANVAS","CAN_USE_CIB_REGION_FOR_IMAGE","workerFabric","terminate","revokeObjectURL","Pica","limiter_key","__limit","cib","ww","__workersPool","__mathlib","__initPromise","ImageBitmap","debug","wpool_key","checkCibResize","checkOffscreenCanvas","initMath","mathlib","checkCibRegion","__invokeResize","__mathCache","cancelToken","transfer","preload","wasm_nodule","__extractTileData","stageEnv","extractTo","srcImageBitmap","srcCtx","tmpCtx","globalCompositeOperation","__landTileData","toCtx","__tileAndResize","isImageBitmapReused","processTile","canceled","srcImageData","imageBitmap","jobs","__destTileBorder","cleanup","__processStages","stages","_this4","_stages$shift2","isLastStage","res","__resizeViaCreateImageBitmap","_this5","iData","_this6","DEST_TILE_BORDER","resizeBuffer","_this7","toBlob","convertToBlob","asString","asBuffer"],"sourceRoot":""}