{"version":3,"sources":["node_modules/cropperjs/dist/cropper.js","libs/galaxy/uploader/src/components/image-editor/image-editor.component.ts","libs/galaxy/uploader/src/components/image-editor/image-editor.component.html","libs/galaxy/uploader/src/uploader.interface.ts","libs/galaxy/uploader/src/components/uploader-file-status/uploader-file-status.component.ts","libs/galaxy/uploader/src/components/uploader-file-status/uploader-file-status.component.html","libs/galaxy/uploader/src/components/image-upload-tile/image-upload-tile.component.ts","libs/galaxy/uploader/src/components/image-upload-tile/image-upload-tile.component.html","libs/galaxy/uploader/src/components/image-list/image-list.component.ts","libs/galaxy/uploader/src/components/image-list/image-list.component.html","libs/galaxy/uploader/src/uploader.service.ts","libs/galaxy/uploader/src/image-uploader.service.ts","node_modules/mime/dist/types/other.js","node_modules/mime/dist/types/standard.js","node_modules/mime/dist/src/Mime.js","node_modules/mime/dist/src/index.js","libs/galaxy/uploader/src/components/uploader-constraints-text/uploader-constraints-text.component.ts","libs/galaxy/uploader/src/components/uploader-constraints-text/uploader-constraints-text.component.html","libs/galaxy/uploader/src/components/uploader/uploader.component.ts","libs/galaxy/uploader/src/components/uploader/uploader.component.html","libs/galaxy/uploader/src/components/image-uploader/image-uploader.component.ts","libs/galaxy/uploader/src/components/image-uploader/image-uploader.component.html","libs/galaxy/uploader/src/components/uploader-file/uploader-file.component.ts","libs/galaxy/uploader/src/components/uploader-file/uploader-file.component.html","libs/galaxy/uploader/src/components/uploader-list/uploader-list.component.ts","libs/galaxy/uploader/src/components/uploader-list/uploader-list.component.html","libs/galaxy/uploader/src/components/file-drag-drop/file-drag-drop.component.ts","libs/galaxy/uploader/src/components/file-drag-drop/file-drag-drop.component.html","libs/galaxy/uploader/src/uploader.module.ts"],"sourcesContent":["/*!\n * Cropper.js v1.6.1\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2023-09-17T03:44:19.860Z\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Cropper = factory());\n})(this, function () {\n 'use strict';\n\n function ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n }\n function _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n }\n function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n }\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n }\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n }\n function _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\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 return obj;\n }\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n }\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n }\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n function _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n }\n function _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n }\n var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n var WINDOW = IS_BROWSER ? window : {};\n var IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\n var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\n var NAMESPACE = 'cropper';\n\n // Actions\n var ACTION_ALL = 'all';\n var ACTION_CROP = 'crop';\n var ACTION_MOVE = 'move';\n var ACTION_ZOOM = 'zoom';\n var ACTION_EAST = 'e';\n var ACTION_WEST = 'w';\n var ACTION_SOUTH = 's';\n var ACTION_NORTH = 'n';\n var ACTION_NORTH_EAST = 'ne';\n var ACTION_NORTH_WEST = 'nw';\n var ACTION_SOUTH_EAST = 'se';\n var ACTION_SOUTH_WEST = 'sw';\n\n // Classes\n var CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\n var CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\n var CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\n var CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\n var CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\n var CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\n var CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\n\n // Data keys\n var DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\n var DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\");\n\n // Drag modes\n var DRAG_MODE_CROP = 'crop';\n var DRAG_MODE_MOVE = 'move';\n var DRAG_MODE_NONE = 'none';\n\n // Events\n var EVENT_CROP = 'crop';\n var EVENT_CROP_END = 'cropend';\n var EVENT_CROP_MOVE = 'cropmove';\n var EVENT_CROP_START = 'cropstart';\n var EVENT_DBLCLICK = 'dblclick';\n var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\n var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\n var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\n var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\n var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\n var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\n var EVENT_READY = 'ready';\n var EVENT_RESIZE = 'resize';\n var EVENT_WHEEL = 'wheel';\n var EVENT_ZOOM = 'zoom';\n\n // Mime types\n var MIME_TYPE_JPEG = 'image/jpeg';\n\n // RegExps\n var REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\n var REGEXP_DATA_URL = /^data:/;\n var REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\n var REGEXP_TAG_NAME = /^img|canvas$/i;\n\n // Misc\n // Inspired by the default width and height of a canvas element.\n var MIN_CONTAINER_WIDTH = 200;\n var MIN_CONTAINER_HEIGHT = 100;\n var DEFAULTS = {\n // Define the view mode of the cropper\n viewMode: 0,\n // 0, 1, 2, 3\n\n // Define the dragging mode of the cropper\n dragMode: DRAG_MODE_CROP,\n // 'crop', 'move' or 'none'\n\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 var TEMPLATE = '
' + '
' + '
' + '
' + '
' + '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
' + '
';\n\n /**\n * Check if the given value is not a number.\n */\n var isNaN = Number.isNaN || WINDOW.isNaN;\n\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 function isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n }\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 var isPositiveNumber = function isPositiveNumber(value) {\n return value > 0 && value < Infinity;\n };\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 function isUndefined(value) {\n return typeof value === 'undefined';\n }\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 function isObject(value) {\n return _typeof(value) === 'object' && value !== null;\n }\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n\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 function isPlainObject(value) {\n if (!isObject(value)) {\n return false;\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 /**\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 function isFunction(value) {\n return typeof value === 'function';\n }\n var slice = Array.prototype.slice;\n\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 function toArray(value) {\n return Array.from ? Array.from(value) : slice.call(value);\n }\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 function forEach(data, callback) {\n if (data && isFunction(callback)) {\n if (Array.isArray(data) || isNumber(data.length) /* array-like */) {\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 return data;\n }\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 var assign = Object.assign || function assign(target) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n 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 return target;\n };\n var REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n\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 function normalizeDecimalNumber(value) {\n var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n }\n var REGEXP_SUFFIX = /^width|height|left|top|marginLeft|marginTop$/;\n\n /**\n * Apply styles to the given element.\n * @param {Element} element - The target element.\n * @param {Object} styles - The styles for applying.\n */\n function setStyle(element, styles) {\n var style = element.style;\n forEach(styles, function (value, property) {\n if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n value = \"\".concat(value, \"px\");\n }\n style[property] = value;\n });\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 function hasClass(element, value) {\n return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n }\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 function addClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n addClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.add(value);\n return;\n }\n var className = element.className.trim();\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 /**\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 function removeClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n removeClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.remove(value);\n return;\n }\n if (element.className.indexOf(value) >= 0) {\n element.className = element.className.replace(value, '');\n }\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 function toggleClass(element, value, added) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n toggleClass(elem, value, added);\n });\n return;\n }\n\n // IE10-11 doesn't support the second parameter of `classList.toggle`\n if (added) {\n addClass(element, value);\n } else {\n removeClass(element, value);\n }\n }\n var REGEXP_CAMEL_CASE = /([a-z\\d])([A-Z])/g;\n\n /**\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 function toParamCase(value) {\n return value.replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();\n }\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 function getData(element, name) {\n if (isObject(element[name])) {\n return element[name];\n }\n if (element.dataset) {\n return element.dataset[name];\n }\n return element.getAttribute(\"data-\".concat(toParamCase(name)));\n }\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 function setData(element, name, data) {\n if (isObject(data)) {\n element[name] = data;\n } else if (element.dataset) {\n element.dataset[name] = data;\n } else {\n element.setAttribute(\"data-\".concat(toParamCase(name)), data);\n }\n }\n\n /**\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 function removeData(element, name) {\n if (isObject(element[name])) {\n try {\n delete element[name];\n } catch (error) {\n element[name] = undefined;\n }\n } else if (element.dataset) {\n // #128 Safari not allows to delete dataset property\n try {\n delete element.dataset[name];\n } catch (error) {\n element.dataset[name] = undefined;\n }\n } else {\n element.removeAttribute(\"data-\".concat(toParamCase(name)));\n }\n }\n var REGEXP_SPACES = /\\s\\s*/;\n var onceSupported = function () {\n var supported = false;\n if (IS_BROWSER) {\n var once = false;\n var listener = function listener() {};\n var options = Object.defineProperty({}, 'once', {\n get: function get() {\n supported = true;\n return once;\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 return supported;\n }();\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 function removeListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (!onceSupported) {\n var listeners = element.listeners;\n if (listeners && listeners[event] && listeners[event][listener]) {\n handler = listeners[event][listener];\n delete listeners[event][listener];\n if (Object.keys(listeners[event]).length === 0) {\n delete listeners[event];\n }\n if (Object.keys(listeners).length === 0) {\n delete element.listeners;\n }\n }\n }\n element.removeEventListener(event, handler, options);\n });\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 function addListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (options.once && !onceSupported) {\n var _element$listeners = element.listeners,\n listeners = _element$listeners === void 0 ? {} : _element$listeners;\n _handler = function handler() {\n delete listeners[event][listener];\n element.removeEventListener(event, _handler, options);\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n listener.apply(element, args);\n };\n if (!listeners[event]) {\n listeners[event] = {};\n }\n if (listeners[event][listener]) {\n element.removeEventListener(event, listeners[event][listener], options);\n }\n listeners[event][listener] = _handler;\n element.listeners = listeners;\n }\n element.addEventListener(event, _handler, options);\n });\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 function dispatchEvent(element, type, data) {\n var event;\n\n // Event and CustomEvent on IE9-11 are global objects, not constructors\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 return element.dispatchEvent(event);\n }\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 function getOffset(element) {\n var box = element.getBoundingClientRect();\n return {\n left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n };\n }\n var location = WINDOW.location;\n var REGEXP_ORIGINS = /^(\\w+:)\\/\\/([^:/?#]*):?(\\d*)/i;\n\n /**\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 function isCrossOriginURL(url) {\n var parts = url.match(REGEXP_ORIGINS);\n return parts !== null && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);\n }\n\n /**\n * Add timestamp to the given URL.\n * @param {string} url - The target URL.\n * @returns {string} The result URL.\n */\n function addTimestamp(url) {\n var timestamp = \"timestamp=\".concat(new Date().getTime());\n return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp;\n }\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 function getTransforms(_ref) {\n var rotate = _ref.rotate,\n scaleX = _ref.scaleX,\n scaleY = _ref.scaleY,\n translateX = _ref.translateX,\n translateY = _ref.translateY;\n var values = [];\n if (isNumber(translateX) && translateX !== 0) {\n values.push(\"translateX(\".concat(translateX, \"px)\"));\n }\n if (isNumber(translateY) && translateY !== 0) {\n values.push(\"translateY(\".concat(translateY, \"px)\"));\n }\n\n // Rotate should come first before scale to match orientation transform\n if (isNumber(rotate) && rotate !== 0) {\n values.push(\"rotate(\".concat(rotate, \"deg)\"));\n }\n if (isNumber(scaleX) && scaleX !== 1) {\n values.push(\"scaleX(\".concat(scaleX, \")\"));\n }\n if (isNumber(scaleY) && scaleY !== 1) {\n values.push(\"scaleY(\".concat(scaleY, \")\"));\n }\n var transform = values.length ? values.join(' ') : 'none';\n return {\n WebkitTransform: transform,\n msTransform: transform,\n transform: transform\n };\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 function getMaxZoomRatio(pointers) {\n var pointers2 = _objectSpread2({}, pointers);\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 if (Math.abs(ratio) > Math.abs(maxRatio)) {\n maxRatio = ratio;\n }\n });\n });\n return maxRatio;\n }\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 function getPointer(_ref2, endOnly) {\n var pageX = _ref2.pageX,\n pageY = _ref2.pageY;\n var end = {\n endX: pageX,\n endY: pageY\n };\n return endOnly ? end : _objectSpread2({\n startX: pageX,\n startY: pageY\n }, end);\n }\n\n /**\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 function getPointersCenter(pointers) {\n var pageX = 0;\n var pageY = 0;\n var count = 0;\n forEach(pointers, function (_ref3) {\n var startX = _ref3.startX,\n startY = _ref3.startY;\n pageX += startX;\n pageY += startY;\n count += 1;\n });\n pageX /= count;\n pageY /= count;\n return {\n pageX: pageX,\n pageY: pageY\n };\n }\n\n /**\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 function getAdjustedSizes(_ref4) {\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 if (isValidWidth && isValidHeight) {\n var adjustedWidth = height * aspectRatio;\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 return {\n width: width,\n height: height\n };\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 function getRotatedSizes(_ref5) {\n var width = _ref5.width,\n height = _ref5.height,\n degree = _ref5.degree;\n degree = Math.abs(degree) % 180;\n if (degree === 90) {\n return {\n width: height,\n height: width\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 /**\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 function getSourceCanvas(image, _ref6, _ref7, _ref8) {\n var imageAspectRatio = _ref6.aspectRatio,\n imageNaturalWidth = _ref6.naturalWidth,\n imageNaturalHeight = _ref6.naturalHeight,\n _ref6$rotate = _ref6.rotate,\n rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate,\n _ref6$scaleX = _ref6.scaleX,\n scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX,\n _ref6$scaleY = _ref6.scaleY,\n scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY;\n var aspectRatio = _ref7.aspectRatio,\n naturalWidth = _ref7.naturalWidth,\n naturalHeight = _ref7.naturalHeight;\n var _ref8$fillColor = _ref8.fillColor,\n fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor,\n _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled,\n imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE,\n _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality,\n imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ,\n _ref8$maxWidth = _ref8.maxWidth,\n maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth,\n _ref8$maxHeight = _ref8.maxHeight,\n maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight,\n _ref8$minWidth = _ref8.minWidth,\n minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth,\n _ref8$minHeight = _ref8.minHeight,\n minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight;\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth));\n var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight));\n\n // Note: should always use image's natural sizes for drawing as\n // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90\n var destMaxSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var destMinSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth));\n var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight));\n var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight];\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = fillColor;\n context.fillRect(0, 0, width, height);\n context.save();\n context.translate(width / 2, height / 2);\n context.rotate(rotate * Math.PI / 180);\n context.scale(scaleX, scaleY);\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n context.imageSmoothingQuality = imageSmoothingQuality;\n context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n context.restore();\n return canvas;\n }\n var fromCharCode = String.fromCharCode;\n\n /**\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 function getStringFromCharCode(dataView, start, length) {\n var str = '';\n length += start;\n for (var i = start; i < length; i += 1) {\n str += fromCharCode(dataView.getUint8(i));\n }\n return str;\n }\n var REGEXP_DATA_URL_HEAD = /^data:.*,/;\n\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 function dataURLToArrayBuffer(dataURL) {\n var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, '');\n var binary = atob(base64);\n var arrayBuffer = new ArrayBuffer(binary.length);\n var uint8 = new Uint8Array(arrayBuffer);\n forEach(uint8, function (value, i) {\n uint8[i] = binary.charCodeAt(i);\n });\n return arrayBuffer;\n }\n\n /**\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 function arrayBufferToDataURL(arrayBuffer, mimeType) {\n var chunks = [];\n\n // Chunk Typed Array for better performance (#435)\n var chunkSize = 8192;\n var uint8 = new Uint8Array(arrayBuffer);\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 return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n }\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 function resetAndGetOrientation(arrayBuffer) {\n var dataView = new DataView(arrayBuffer);\n var orientation;\n\n // Ignores range error when the image does not have correct Exif information\n try {\n var littleEndian;\n var app1Start;\n var ifdStart;\n\n // Only handle JPEG image (start by 0xFFD8)\n if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n var length = dataView.byteLength;\n var offset = 2;\n while (offset + 1 < length) {\n if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n app1Start = offset;\n break;\n }\n offset += 1;\n }\n }\n if (app1Start) {\n var exifIDCode = app1Start + 4;\n var tiffOffset = app1Start + 10;\n if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n var endianness = dataView.getUint16(tiffOffset);\n littleEndian = endianness === 0x4949;\n if (littleEndian || endianness === 0x4D4D /* bigEndian */) {\n if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n if (firstIFDOffset >= 0x00000008) {\n ifdStart = tiffOffset + firstIFDOffset;\n }\n }\n }\n }\n }\n if (ifdStart) {\n var _length = dataView.getUint16(ifdStart, littleEndian);\n var _offset;\n var i;\n for (i = 0; i < _length; i += 1) {\n _offset = ifdStart + i * 12 + 2;\n if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) {\n // 8 is the offset of the current tag's value\n _offset += 8;\n\n // Get the original orientation value\n orientation = dataView.getUint16(_offset, littleEndian);\n\n // Override the orientation with its default value\n dataView.setUint16(_offset, 1, littleEndian);\n break;\n }\n }\n }\n } catch (error) {\n orientation = 1;\n }\n return orientation;\n }\n\n /**\n * Parse Exif Orientation value.\n * @param {number} orientation - The orientation to parse.\n * @returns {Object} The parsed result.\n */\n function parseOrientation(orientation) {\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n switch (orientation) {\n // Flip horizontal\n case 2:\n scaleX = -1;\n break;\n\n // Rotate left 180°\n case 3:\n rotate = -180;\n break;\n\n // Flip vertical\n case 4:\n scaleY = -1;\n break;\n\n // Flip vertical and rotate right 90°\n case 5:\n rotate = 90;\n scaleY = -1;\n break;\n\n // Rotate right 90°\n case 6:\n rotate = 90;\n break;\n\n // Flip horizontal and rotate right 90°\n case 7:\n rotate = 90;\n scaleX = -1;\n break;\n\n // Rotate left 90°\n case 8:\n rotate = -90;\n break;\n }\n return {\n rotate: rotate,\n scaleX: scaleX,\n scaleY: scaleY\n };\n }\n var render = {\n render: function render() {\n this.initContainer();\n this.initCanvas();\n this.initCropBox();\n this.renderCanvas();\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 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 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 if (sizeLimited) {\n var minCanvasWidth = Number(options.minCanvasWidth) || 0;\n var minCanvasHeight = Number(options.minCanvasHeight) || 0;\n if (viewMode > 1) {\n minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\n minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\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 if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n }\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minCanvasWidth,\n height: minCanvasHeight\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 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 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 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 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 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 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 if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\n canvasData.left = canvasData.oldLeft;\n }\n if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\n canvasData.top = canvasData.oldTop;\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 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 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 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 this.cropBoxData = cropBoxData;\n this.limitCropBox(true, true);\n\n // Initialize auto crop area\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\n // The width/height of auto crop area must large than \"minWidth/Height\"\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 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;\n\n // The min/maxCropBoxWidth/Height must be less than container's width/height\n minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\n minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\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 if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\n maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\n } else {\n maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\n }\n }\n\n // The minWidth/Height must be less than maxWidth/Height\n cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\n cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\n cropBoxData.maxWidth = maxCropBoxWidth;\n cropBoxData.maxHeight = maxCropBoxHeight;\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 if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\n cropBoxData.left = cropBoxData.oldLeft;\n }\n if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\n cropBoxData.top = cropBoxData.oldTop;\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 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 setStyle(this.cropBox, assign({\n width: cropBoxData.width,\n height: cropBoxData.height\n }, getTransforms({\n translateX: cropBoxData.left,\n translateY: cropBoxData.top\n })));\n if (this.cropped && this.limited) {\n this.limitCanvas(true, true);\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 var preview = {\n initPreview: function initPreview() {\n var element = this.element,\n crossOrigin = this.crossOrigin;\n var preview = this.options.preview;\n var url = crossOrigin ? this.crossOriginUrl : this.url;\n var alt = element.alt || 'The image to preview';\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = url;\n image.alt = alt;\n this.viewBox.appendChild(image);\n this.viewBoxImage = image;\n if (!preview) {\n return;\n }\n var previews = preview;\n if (typeof preview === 'string') {\n previews = element.ownerDocument.querySelectorAll(preview);\n } else if (preview.querySelector) {\n previews = [preview];\n }\n this.previews = previews;\n forEach(previews, function (el) {\n var img = document.createElement('img');\n\n // Save the original size for recover\n setData(el, DATA_PREVIEW, {\n width: el.offsetWidth,\n height: el.offsetHeight,\n html: el.innerHTML\n });\n if (crossOrigin) {\n img.crossOrigin = crossOrigin;\n }\n img.src = url;\n img.alt = alt;\n\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 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 if (!this.cropped || this.disabled) {\n return;\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 if (cropBoxWidth) {\n ratio = originalWidth / cropBoxWidth;\n newHeight = cropBoxHeight * ratio;\n }\n if (cropBoxHeight && newHeight > originalHeight) {\n ratio = originalHeight / cropBoxHeight;\n newWidth = cropBoxWidth * ratio;\n newHeight = originalHeight;\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 var events = {\n bind: function bind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n addListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n addListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n addListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n addListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n addListener(element, EVENT_ZOOM, options.zoom);\n }\n addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\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 if (options.toggleDragModeOnDblclick) {\n addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\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 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 if (isFunction(options.cropstart)) {\n removeListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n removeListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n removeListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n removeListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n removeListener(element, EVENT_ZOOM, options.zoom);\n }\n removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\n if (options.zoomable && options.zoomOnWheel) {\n removeListener(cropper, EVENT_WHEEL, this.onWheel, {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\n }\n removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\n removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\n if (options.responsive) {\n removeListener(window, EVENT_RESIZE, this.onResize);\n }\n }\n };\n var handlers = {\n resize: function resize() {\n if (this.disabled) {\n return;\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;\n\n // Resize when width changed or height changed\n if (ratio !== 1) {\n var canvasData;\n var cropBoxData;\n if (options.restore) {\n canvasData = this.getCanvasData();\n cropBoxData = this.getCropBoxData();\n }\n this.render();\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 this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\n },\n wheel: function wheel(event) {\n var _this = this;\n var ratio = Number(this.options.wheelZoomRatio) || 0.1;\n var delta = 1;\n if (this.disabled) {\n return;\n }\n event.preventDefault();\n\n // Limit wheel speed to prevent zoom too fast (#21)\n if (this.wheeling) {\n return;\n }\n this.wheeling = true;\n setTimeout(function () {\n _this.wheeling = false;\n }, 50);\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 this.zoom(-delta * ratio, event);\n },\n cropStart: function cropStart(event) {\n var buttons = event.buttons,\n button = event.button;\n if (this.disabled\n\n // Handle mouse event and pointer event and ignore touch event\n || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && (\n // No primary button (Usually the left button)\n isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0\n\n // Open context menu\n || event.ctrlKey)) {\n return;\n }\n var options = this.options,\n pointers = this.pointers;\n var action;\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 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 if (!REGEXP_ACTIONS.test(action)) {\n return;\n }\n if (dispatchEvent(this.element, EVENT_CROP_START, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n\n // This line is required for preventing page zooming in iOS browsers\n event.preventDefault();\n this.action = action;\n this.cropping = false;\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 if (this.disabled || !action) {\n return;\n }\n var pointers = this.pointers;\n event.preventDefault();\n if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\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 this.change(event);\n },\n cropEnd: function cropEnd(event) {\n if (this.disabled) {\n return;\n }\n var action = this.action,\n pointers = this.pointers;\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 if (!action) {\n return;\n }\n event.preventDefault();\n if (!Object.keys(pointers).length) {\n this.action = '';\n }\n if (this.cropping) {\n this.cropping = false;\n toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\n }\n dispatchEvent(this.element, EVENT_CROP_END, {\n originalEvent: event,\n action: action\n });\n }\n };\n var change = {\n change: function change(event) {\n var options = this.options,\n canvasData = this.canvasData,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData,\n pointers = this.pointers;\n var action = this.action;\n var aspectRatio = options.aspectRatio;\n var left = cropBoxData.left,\n top = cropBoxData.top,\n width = cropBoxData.width,\n height = cropBoxData.height;\n var right = left + width;\n var bottom = top + height;\n var minLeft = 0;\n var minTop = 0;\n var maxWidth = containerData.width;\n var maxHeight = containerData.height;\n var renderable = true;\n var offset;\n\n // Locking aspect ratio in \"free mode\" by holding shift key\n if (!aspectRatio && event.shiftKey) {\n aspectRatio = width && height ? width / height : 1;\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 var pointer = pointers[Object.keys(pointers)[0]];\n var range = {\n x: pointer.endX - pointer.startX,\n y: pointer.endY - pointer.startY\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 break;\n case ACTION_WEST:\n if (left + range.x < minLeft) {\n range.x = minLeft - left;\n }\n break;\n case ACTION_NORTH:\n if (top + range.y < minTop) {\n range.y = minTop - top;\n }\n break;\n case ACTION_SOUTH:\n if (bottom + range.y > maxHeight) {\n range.y = maxHeight - bottom;\n }\n break;\n }\n };\n switch (action) {\n // Move crop box\n case ACTION_ALL:\n left += range.x;\n top += range.y;\n break;\n\n // Resize crop box\n case ACTION_EAST:\n if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n if (width < 0) {\n action = ACTION_WEST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_NORTH:\n if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n if (height < 0) {\n action = ACTION_SOUTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_WEST:\n if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n if (width < 0) {\n action = ACTION_EAST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_SOUTH:\n if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_SOUTH);\n height += range.y;\n if (height < 0) {\n action = ACTION_NORTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_NORTH_EAST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\n renderable = false;\n break;\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 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 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 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 break;\n case ACTION_NORTH_WEST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\n renderable = false;\n break;\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 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 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 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 break;\n case ACTION_SOUTH_WEST:\n if (aspectRatio) {\n if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\n renderable = false;\n break;\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 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 if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\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 break;\n case ACTION_SOUTH_EAST:\n if (aspectRatio) {\n if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_EAST);\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 if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\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 break;\n\n // Move canvas\n case ACTION_MOVE:\n this.move(range.x, range.y);\n renderable = false;\n break;\n\n // Zoom canvas\n case ACTION_ZOOM:\n this.zoom(getMaxZoomRatio(pointers), event);\n renderable = false;\n break;\n\n // Create crop box\n case ACTION_CROP:\n if (!range.x || !range.y) {\n renderable = false;\n break;\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 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 if (range.y < 0) {\n top -= height;\n }\n\n // Show the crop box if is hidden\n if (!this.cropped) {\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.cropped = true;\n if (this.limited) {\n this.limitCropBox(true, true);\n }\n }\n break;\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 }\n\n // Override\n forEach(pointers, function (p) {\n p.startX = p.endX;\n p.startY = p.endY;\n });\n }\n };\n var methods = {\n // Show the crop box manually\n crop: function crop() {\n if (this.ready && !this.cropped && !this.disabled) {\n this.cropped = true;\n this.limitCropBox(true, true);\n if (this.options.modal) {\n addClass(this.dragBox, CLASS_MODAL);\n }\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.setCropBoxData(this.initialCropBoxData);\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 if (this.cropped) {\n this.renderCropBox();\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);\n\n // Render canvas after crop box rendered\n this.renderCanvas();\n removeClass(this.dragBox, CLASS_MODAL);\n addClass(this.cropBox, CLASS_HIDDEN);\n }\n return this;\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 if (!this.disabled && url) {\n if (this.isImg) {\n this.element.src = url;\n }\n if (hasSameSize) {\n this.url = url;\n this.image.src = url;\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 this.options.data = null;\n this.uncreate();\n this.load(url);\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 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 return this;\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 if (!element[NAMESPACE]) {\n return this;\n }\n element[NAMESPACE] = undefined;\n if (this.isImg && this.replaced) {\n element.src = this.originalUrl;\n }\n this.uncreate();\n return this;\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 * 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 if (this.ready && !this.disabled && this.options.movable) {\n if (isNumber(x)) {\n canvasData.left = x;\n changed = true;\n }\n if (isNumber(y)) {\n canvasData.top = y;\n changed = true;\n }\n if (changed) {\n this.renderCanvas(true);\n }\n }\n return this;\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 if (ratio < 0) {\n ratio = 1 / (1 - ratio);\n } else {\n ratio = 1 + ratio;\n }\n return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\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 if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\n var newWidth = naturalWidth * ratio;\n var newHeight = naturalHeight * ratio;\n if (dispatchEvent(this.element, EVENT_ZOOM, {\n ratio: ratio,\n oldRatio: width / naturalWidth,\n originalEvent: _originalEvent\n }) === false) {\n return this;\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 };\n\n // Zoom from the triggering point of the event\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 canvasData.width = newWidth;\n canvasData.height = newHeight;\n this.renderCanvas(true);\n }\n return this;\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 * 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 if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\n this.imageData.rotate = degree % 360;\n this.renderCanvas(true, true);\n }\n return this;\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 * 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 * 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 if (this.ready && !this.disabled && this.options.scalable) {\n if (isNumber(scaleX)) {\n imageData.scaleX = scaleX;\n transformed = true;\n }\n if (isNumber(scaleY)) {\n imageData.scaleY = scaleY;\n transformed = true;\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n }\n return this;\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 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 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 if (options.rotatable) {\n data.rotate = imageData.rotate || 0;\n }\n if (options.scalable) {\n data.scaleX = imageData.scaleX || 1;\n data.scaleY = imageData.scaleY || 1;\n }\n return data;\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 if (this.ready && !this.disabled && isPlainObject(data)) {\n var transformed = false;\n if (options.rotatable) {\n if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\n imageData.rotate = data.rotate;\n transformed = true;\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 if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\n imageData.scaleY = data.scaleY;\n transformed = true;\n }\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n var ratio = imageData.width / imageData.naturalWidth;\n if (isNumber(data.x)) {\n cropBoxData.left = data.x * ratio + canvasData.left;\n }\n if (isNumber(data.y)) {\n cropBoxData.top = data.y * ratio + canvasData.top;\n }\n if (isNumber(data.width)) {\n cropBoxData.width = data.width * ratio;\n }\n if (isNumber(data.height)) {\n cropBoxData.height = data.height * ratio;\n }\n this.setCropBoxData(cropBoxData);\n }\n return this;\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 * 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 * 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 if (this.ready) {\n forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) {\n data[n] = canvasData[n];\n });\n }\n return data;\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 if (this.ready && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n canvasData.left = data.left;\n }\n if (isNumber(data.top)) {\n canvasData.top = data.top;\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 this.renderCanvas(true);\n }\n return this;\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 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 return data || {};\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 if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n cropBoxData.left = data.left;\n }\n if (isNumber(data.top)) {\n cropBoxData.top = data.top;\n }\n if (isNumber(data.width) && data.width !== cropBoxData.width) {\n widthChanged = true;\n cropBoxData.width = data.width;\n }\n if (isNumber(data.height) && data.height !== cropBoxData.height) {\n heightChanged = true;\n cropBoxData.height = data.height;\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 this.renderCropBox();\n }\n return this;\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 if (!this.ready || !window.HTMLCanvasElement) {\n return null;\n }\n var canvasData = this.canvasData;\n var source = getSourceCanvas(this.image, this.imageData, canvasData, options);\n\n // Returns the source canvas if it is not cropped.\n if (!this.cropped) {\n return source;\n }\n var _this$getData = this.getData(options.rounded),\n initialX = _this$getData.x,\n initialY = _this$getData.y,\n initialWidth = _this$getData.width,\n initialHeight = _this$getData.height;\n var ratio = source.width / Math.floor(canvasData.naturalWidth);\n if (ratio !== 1) {\n initialX *= ratio;\n initialY *= ratio;\n initialWidth *= ratio;\n initialHeight *= ratio;\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 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 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 if (imageSmoothingQuality) {\n context.imageSmoothingQuality = imageSmoothingQuality;\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\n var sourceWidth = source.width;\n var sourceHeight = source.height;\n\n // Source canvas parameters\n var srcX = initialX;\n var srcY = initialY;\n var srcWidth;\n var srcHeight;\n\n // Destination canvas parameters\n var dstX;\n var dstY;\n var dstWidth;\n var dstHeight;\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 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 var params = [srcX, srcY, srcWidth, srcHeight];\n\n // Avoid \"IndexSizeError\"\n if (dstWidth > 0 && dstHeight > 0) {\n var scale = width / initialWidth;\n params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\n }\n\n // All the numerical parameters should be integer for `drawImage`\n // https://github.com/fengyuanchen/cropper/issues/476\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 * 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 if (!this.disabled && !isUndefined(aspectRatio)) {\n // 0 -> NaN\n options.aspectRatio = Math.max(0, aspectRatio) || NaN;\n if (this.ready) {\n this.initCropBox();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n }\n return this;\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 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 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 return this;\n }\n };\n var AnotherCropper = WINDOW.Cropper;\n var Cropper = /*#__PURE__*/function () {\n /**\n * Create a new Cropper.\n * @param {Element} element - The target element for cropping.\n * @param {Object} [options={}] - The configuration options.\n */\n function Cropper(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Cropper);\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 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 _createClass(Cropper, [{\n key: \"init\",\n value: function init() {\n var element = this.element;\n var tagName = element.tagName.toLowerCase();\n var url;\n if (element[NAMESPACE]) {\n return;\n }\n element[NAMESPACE] = this;\n if (tagName === 'img') {\n this.isImg = true;\n\n // e.g.: \"img/picture.jpg\"\n url = element.getAttribute('src') || '';\n this.originalUrl = url;\n\n // Stop when it's a blank image\n if (!url) {\n return;\n }\n\n // e.g.: \"https://example.com/img/picture.jpg\"\n url = element.src;\n } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n url = element.toDataURL();\n }\n this.load(url);\n }\n }, {\n key: \"load\",\n value: function load(url) {\n var _this = this;\n if (!url) {\n return;\n }\n this.url = url;\n this.imageData = {};\n var element = this.element,\n options = this.options;\n if (!options.rotatable && !options.scalable) {\n options.checkOrientation = false;\n }\n\n // Only IE10+ supports Typed Arrays\n if (!options.checkOrientation || !window.ArrayBuffer) {\n this.clone();\n return;\n }\n\n // Detect the mime type of the image directly if it is a Data URL\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 return;\n }\n\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 var xhr = new XMLHttpRequest();\n var clone = this.clone.bind(this);\n this.reloading = true;\n this.xhr = xhr;\n\n // 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 xhr.onabort = clone;\n xhr.onerror = clone;\n xhr.ontimeout = clone;\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 xhr.onload = function () {\n _this.read(xhr.response);\n };\n xhr.onloadend = function () {\n _this.reloading = false;\n _this.xhr = null;\n };\n\n // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\n if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\n url = addTimestamp(url);\n }\n\n // The third parameter is required for avoiding side-effect (#682)\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;\n\n // Reset the orientation value to its default value 1\n // as some iOS browsers will render image with its orientation\n var orientation = resetAndGetOrientation(arrayBuffer);\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n if (orientation > 1) {\n // Generate a new URL which has the default orientation value\n this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\n var _parseOrientation = parseOrientation(orientation);\n rotate = _parseOrientation.rotate;\n scaleX = _parseOrientation.scaleX;\n scaleY = _parseOrientation.scaleY;\n }\n if (options.rotatable) {\n imageData.rotate = rotate;\n }\n if (options.scalable) {\n imageData.scaleX = scaleX;\n imageData.scaleY = scaleY;\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 if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\n if (!crossOrigin) {\n crossOrigin = 'anonymous';\n }\n\n // Bust cache when there is not a \"crossOrigin\" property (#519)\n crossOriginUrl = addTimestamp(url);\n }\n this.crossOrigin = crossOrigin;\n this.crossOriginUrl = crossOriginUrl;\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\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 var image = this.image;\n image.onload = null;\n image.onerror = null;\n this.sizing = true;\n\n // 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 var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent);\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 _this2.build();\n };\n\n // Most modern browsers (excepts iOS WebKit)\n if (image.naturalWidth && !isIOSWebKit) {\n done(image.naturalWidth, image.naturalHeight);\n return;\n }\n var sizingImage = document.createElement('img');\n var body = document.body || document.documentElement;\n this.sizingImage = sizingImage;\n sizingImage.onload = function () {\n done(sizingImage.width, sizingImage.height);\n if (!isIOSWebKit) {\n body.removeChild(sizingImage);\n }\n };\n sizingImage.src = image.src;\n\n // iOS WebKit will convert the image automatically\n // with its orientation once append it into DOM (#279)\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 var element = this.element,\n options = this.options,\n image = this.image;\n\n // Create cropper elements\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);\n\n // Hide the original image\n addClass(element, CLASS_HIDDEN);\n\n // Inserts the cropper after to the current image\n container.insertBefore(cropper, element.nextSibling);\n\n // Show the hidden image\n removeClass(image, CLASS_HIDE);\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 if (!options.guides) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\n }\n if (!options.center) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\n }\n if (options.background) {\n addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\n }\n if (!options.highlight) {\n addClass(face, CLASS_INVISIBLE);\n }\n if (options.cropBoxMovable) {\n addClass(face, CLASS_MOVE);\n setData(face, DATA_ACTION, ACTION_ALL);\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 this.render();\n this.ready = true;\n this.setDragMode(options.dragMode);\n if (options.autoCrop) {\n this.crop();\n }\n this.setData(options.data);\n if (isFunction(options.ready)) {\n addListener(element, EVENT_READY, options.ready, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_READY);\n }\n }, {\n key: \"unbuild\",\n value: function unbuild() {\n if (!this.ready) {\n return;\n }\n this.ready = false;\n this.unbind();\n this.resetPreview();\n var parentNode = this.cropper.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.cropper);\n }\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 /**\n * Get the no conflict cropper class.\n * @returns {Cropper} The cropper class.\n */\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Cropper = AnotherCropper;\n return Cropper;\n }\n\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n assign(DEFAULTS, isPlainObject(options) && options);\n }\n }]);\n return Cropper;\n }();\n assign(Cropper.prototype, render, preview, events, handlers, change, methods);\n return Cropper;\n});","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormControl, UntypedFormControl } from '@angular/forms';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\nimport Cropper from 'cropperjs';\nimport { Subscription } from 'rxjs';\nimport { ImageDimensions } from '../../image-uploader.service';\nimport { FileInfo } from '../../uploader.interface';\n\nconst ZOOM_STEP_SIZE = 0.05;\n\nexport type AspectRatioPreset = {\n label: string;\n value: number;\n selected?: boolean;\n};\n\n@Component({\n selector: 'glxy-image-editor',\n templateUrl: './image-editor.component.html',\n styleUrls: ['./image-editor.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class GalaxyImageEditorComponent implements AfterViewInit, OnDestroy {\n @HostBinding('class') class = 'glxy-image-editor';\n\n /** Contains the image that we will edit */\n @Input() set fileInfo(fileInfo: FileInfo) {\n /** Creates a safe url for rendering in an image tag */\n if (fileInfo.file) {\n this.safeUrl = this.sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(fileInfo.file));\n }\n this.fileType = fileInfo?.file?.type;\n }\n\n /** Optional: maximum dimensions allowed for the edited output image */\n @Input() maxDimensions?: ImageDimensions;\n\n /** Optional: list of aspect ratios allowed to be selected. If only one, it will be selected and no dropdown shown */\n @Input() aspectRatios: AspectRatioPreset[] = [\n {\n label: 'GALAXY.UPLOADER.FREE_ASPECT',\n value: 0,\n },\n ];\n\n /** Maximum height of the editor window */\n @Input() maxEditorHeight?: string = 'auto';\n\n /** Alignment of the editor save/cancel actions */\n @Input() align?: 'start' | 'end';\n\n /** The automatic cropping applied. Should be a number between 0 and 1 (for percentage) **/\n @Input() autoCropArea: number | undefined = undefined;\n\n /** Minimum container height for the cropper container **/\n @Input() minContainerHeight: number | undefined = undefined;\n\n /** Emits the resulting edited image */\n @Output() closed: EventEmitter = new EventEmitter();\n\n @ViewChild('sourceImage', { read: ElementRef }) imageEl?: ElementRef;\n\n safeUrl?: SafeUrl;\n aspectControl = new FormControl(null);\n zoomStep = ZOOM_STEP_SIZE;\n isDisabled = false;\n minZoom = 0.01;\n maxZoom = 2.0;\n zoomControl = new UntypedFormControl((this.maxZoom - this.minZoom) / 2);\n fileType?: string;\n\n private cropper?: Cropper;\n private subscriptions: Subscription[] = [];\n\n constructor(private sanitizer: DomSanitizer) {}\n\n ngAfterViewInit(): void {\n const imageEl = this.imageEl?.nativeElement;\n\n if (imageEl && !this.cropper) {\n this.cropper = new Cropper(this.imageEl?.nativeElement, {\n minContainerHeight: this.minContainerHeight,\n autoCropArea: this.autoCropArea,\n });\n }\n\n let initialAspect;\n\n if (this.aspectRatios.length > 1) {\n // If there are multiple aspect ratios:\n // Subscribe to aspect ratio changes and update when the user selects a new aspect ratio\n this.subscriptions.push(\n this.aspectControl.valueChanges.subscribe((aspect) => {\n if (aspect) this.onAspectChange(aspect);\n }),\n );\n // Check if there is a preselected aspect ratio\n const preselectedValue = this.aspectRatios.find((option) => option.selected === true);\n // If there is no preselected value, set the initial aspect ratio to the first aspect ratio\n initialAspect = preselectedValue?.value ?? this.aspectRatios[0].value;\n this.aspectControl.setValue(initialAspect);\n } else {\n // If there is only one aspect ratio, set the initial aspect ratio to that one\n // If none are provided, set the initial aspect ratio to 0 (free aspect)\n initialAspect = this.aspectRatios[0]?.value ?? 0;\n this.aspectControl.setValue(initialAspect);\n this.onAspectChange(initialAspect);\n }\n\n this.subscriptions.push(\n this.zoomControl.valueChanges.subscribe({\n next: (value: number) => this.cropper?.zoomTo(value),\n }),\n );\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach((sub) => sub.unsubscribe());\n\n if (this.cropper?.destroy) {\n this.cropper.destroy();\n }\n }\n\n /**\n * Close and consume the edited image.\n *\n * @param [save] - If true, will output the edited image\n */\n onClose(save?: boolean): void {\n this.isDisabled = true;\n\n if (!save) {\n return this.closed.emit();\n }\n\n this.cropper\n ?.getCroppedCanvas({\n maxWidth: this.maxDimensions?.width,\n maxHeight: this.maxDimensions?.height,\n })\n .toBlob((blob: Blob | null) => {\n this.closed.emit(blob);\n }, this.fileType || 'image/jpeg');\n }\n\n /**\n * React to aspect ratio constraint changes\n * @param aspect - The aspect ratio to set the cropper instance to use\n */\n onAspectChange(aspect: number): void {\n this.cropper?.setAspectRatio(aspect);\n }\n\n /** Zooms in the cropper instance a single step */\n zoomIn(): void {\n this.cropper?.zoom(this.zoomStep);\n }\n\n /** Zooms out the cropper instance a single step */\n zoomOut(): void {\n this.cropper?.zoom(-this.zoomStep);\n }\n}\n","
\n \n
\n\n
\n \n \n \n
\n\n
\n 1\">\n
\n \n {{ 'GALAXY.UPLOADER.SELECT_ASPECT' | translate }}\n \n \n {{ aspect.label }}\n \n \n \n
\n
\n\n
\n \n \n
\n\n \n \n \n
\n","import { InjectionToken } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject, Subscription } from 'rxjs';\n\n/** Status of a file in the queue */\nexport enum FileUploadStatus {\n Queued,\n InProgress,\n Success,\n Fail,\n}\n\n/** Information for processing a file upload */\nexport interface FileInfo {\n context?: UploadContext; // TODO: Make required (breaking change)\n name: string;\n status?: FileUploadStatus;\n url?: string;\n file?: File;\n uploadSub?: Subscription;\n data?: any;\n resp?: any;\n}\n\n/** Error object containing the source error and file it occurred for */\nexport interface FileUploadError {\n fileInfo: FileInfo;\n error: Error;\n}\n\n/** Response for upload success. Taken from Google JSON Guide https://google.github.io/styleguide/jsoncstyleguide.xml */\nexport interface UploadResponse {\n data: {\n url: string;\n };\n}\n\nexport interface UploadContext {\n uuid: string;\n}\n\n/** Interface for services to extend */\nexport interface GalaxyBaseUploaderServiceInterface {\n uploadUrl: string;\n files$$: BehaviorSubject;\n /**\n * @deprecated Use fileUploaded$ (one $)\n */\n fileUploaded$$: Subject;\n fileUploaded$: Observable;\n fileErrored$$: BehaviorSubject;\n\n addFile(file: File, context: UploadContext): void;\n removeFile(fileInfo: FileInfo): void;\n clear(): void;\n uploadQueuedFiles(): void;\n setFiles(files: FileInfo[]): void;\n setMaxFiles(limit: number): void;\n setMaxFileSize(limit: number): void;\n setUploadUrl(url: string): void;\n setParallelUploads(limit: number): void;\n setAutoUpload(allowAuto: boolean): void;\n buildRequest(fileInfo: FileInfo): Observable;\n}\n\nexport const GALAXY_UPLOADER_SERVICE_TOKEN = new InjectionToken(\n '[GalaxyUploaderService]: token for galaxy uploader',\n);\n","import { Component, HostBinding, Input } from '@angular/core';\nimport { FileUploadStatus } from '../../uploader.interface';\n\n@Component({\n selector: 'glxy-uploader-file-status',\n templateUrl: './uploader-file-status.component.html',\n styleUrls: ['./uploader-file-status.component.scss'],\n})\nexport class GalaxyUploaderFileStatusComponent {\n @HostBinding('class') class = 'glxy-uploader-file-status';\n\n @Input() status?: FileUploadStatus;\n\n FileUploadStatus = FileUploadStatus;\n}\n","
\n attach_file \n warning \n done \n \n
\n","import { Component, EventEmitter, HostBinding, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\nimport { FileUploadStatus } from '../../uploader.interface';\n\n@Component({\n selector: 'glxy-image-upload-tile',\n templateUrl: './image-upload-tile.component.html',\n styleUrls: ['./image-upload-tile.component.scss'],\n})\nexport class GalaxyImageUploadTileComponent implements OnChanges, OnInit {\n @HostBinding('class') class = 'glxy-image-upload-tile';\n\n /** Source image file for rendering to the tile. If missing, will not show edit or delete buttons */\n @Input() file?: File | Blob;\n\n @Input() url?: string;\n\n /** Current upload status of the image */\n @Input() status?: FileUploadStatus | null;\n\n /** If true, will display the delete button in the tile */\n @Input() showDeleteButton?: boolean;\n\n /** If true, will display the edit button in the tile */\n @Input() showEditButton?: boolean;\n\n @Input() noViewFileStatus = false;\n\n /** Emits when this tile's edit button has been clicked */\n @Output() edit: EventEmitter = new EventEmitter();\n\n /** Emits when this tile's delete button has been clicked */\n @Output() delete: EventEmitter = new EventEmitter();\n\n _url?: SafeUrl;\n FileUploadStatus = FileUploadStatus;\n\n constructor(private sanitizer: DomSanitizer) {}\n\n ngOnInit(): void {\n if (this.noViewFileStatus) {\n this.status = null;\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // Disregard url updates if we have a local file to read from\n if (!this.file && changes.url && changes.url.currentValue !== changes.url.previousValue) {\n this._url = this.sanitizer.bypassSecurityTrustUrl(changes.url.currentValue);\n }\n\n if (changes.file && changes.file.currentValue !== changes.file.previousValue) {\n this._url = this.convertFileToUrl(changes.file.currentValue);\n }\n }\n\n /**\n * Converts an image file to a safe URL to be rendered into an image tag\n * @param file - The file to be rendered in the image tile\n */\n convertFileToUrl(file: File | Blob): SafeUrl {\n return this.sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(file));\n }\n\n /**\n * Triggered when the edit button has been clicked for this tile\n */\n editClick(): void {\n this.edit.emit();\n }\n\n /**\n * Triggered when the delete button has been clicked for this tile\n */\n deleteClick(): void {\n this.delete.emit();\n }\n}\n","\n
\n
\n \n \n
\n
\n\n","import { Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';\nimport { FileInfo } from '../../uploader.interface';\n\n@Component({\n selector: 'glxy-image-list',\n templateUrl: './image-list.component.html',\n styleUrls: ['./image-list.component.scss'],\n})\nexport class GalaxyImageListComponent {\n @HostBinding('class') class = 'glxy-image-list';\n\n /** List of files to render image tiles for */\n @Input() files: FileInfo[] = [];\n\n /** Emits the file to trigger an edit action for */\n @Output() edit: EventEmitter = new EventEmitter();\n\n /** Emits the file to trigger a delete action for */\n @Output() delete: EventEmitter = new EventEmitter();\n\n /**\n * Called when the edit button has been clicked for an image tile\n * @param info - Information about the file that was selected to be edited\n */\n editClick(info: FileInfo): void {\n this.edit.emit(info);\n }\n\n /**\n * Called when the delete button has been clicked for an image tile\n * @param info - Information about the file that was selected to be deleted\n */\n deleteClick(info: FileInfo): void {\n this.delete.emit(info);\n }\n}\n","\n 0\"\n [showEditButton]=\"edit.observers.length > 0\"\n (edit)=\"editClick(fileInfo)\"\n (delete)=\"deleteClick(fileInfo)\"\n >\n\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { first } from 'rxjs/operators';\nimport {\n FileInfo,\n FileUploadError,\n FileUploadStatus,\n GalaxyBaseUploaderServiceInterface,\n UploadContext,\n UploadResponse,\n} from './uploader.interface';\n\n@Injectable()\nexport class GalaxyUploaderService implements GalaxyBaseUploaderServiceInterface {\n /** List of current files in the upload queue */\n protected files: FileInfo[] = [];\n\n /** Max number of files allowed for upload */\n private maxFiles?: number;\n\n /** Max size of the files allowed for upload. Bytes. */\n private maxFileSize?: number;\n\n /** Max number of files to upload in parallel. 0 means no limit */\n private numParallel?: number;\n\n /** Whether or not to auto upload files when added to the queue */\n private autoUpload?: boolean;\n\n /** URL to upload files to */\n public uploadUrl = '';\n\n /** Emits the current list of file info objects in the queue */\n public files$$: BehaviorSubject = new BehaviorSubject(this.files);\n\n /**\n * @deprecated Use fileUploaded$ (one $)\n */\n public fileUploaded$$: Subject = new Subject();\n /**\n * Emits when a file has been uploaded successfully\n */\n public readonly fileUploaded$: Observable = this.fileUploaded$$.asObservable();\n\n /** Emits when a file has failed to upload */\n public fileErrored$$ = new BehaviorSubject(null);\n\n constructor(protected http: HttpClient) {}\n\n /** Trigger an upload the provided file */\n private uploadFile(fileInfo: FileInfo): void {\n fileInfo.status = FileUploadStatus.InProgress;\n fileInfo.uploadSub = this.buildRequest(fileInfo)\n .pipe(first())\n .subscribe({\n next: (response) => this.onSuccess(fileInfo, response),\n error: () => this.onError(fileInfo),\n });\n\n this.refreshFiles();\n }\n\n /** Check queue to see if we can upload the next queued file */\n private checkQueue(): void {\n const numInProgress = this.files.filter(\n (fileInfo: FileInfo) => fileInfo.status === FileUploadStatus.InProgress,\n ).length;\n\n const queued = this.files.filter((fileInfo: FileInfo) => fileInfo.status === FileUploadStatus.Queued);\n\n // If nothing is queued or too many uploads are running at once, wait for later\n if (!queued.length || (this.numParallel && numInProgress >= this.numParallel)) {\n return;\n }\n\n const file = queued.pop();\n if (file) {\n this.uploadFile(file);\n this.checkQueue();\n }\n }\n\n /**\n * Get the index of a file, in the queue\n *\n * @param fileInfo - The file info to lookup the index of\n */\n private getFileIndex(fileInfo: FileInfo): number {\n const { file } = fileInfo;\n\n // If not source file, just check names\n if (!file) {\n return this.files.findIndex((fileEntry: FileInfo) => fileEntry.name === fileInfo.name);\n }\n\n // Otherwise do a deep check\n return this.files.findIndex((fileEntry: FileInfo) => {\n const { file: compareTo } = fileEntry;\n if (!compareTo) {\n return file.name === fileEntry.name;\n }\n\n return file.name === compareTo.name && file.size === compareTo.size && file.type === compareTo.type;\n });\n }\n\n /**\n * Mark a file as successfully uploaded\n *\n * @param fileInfo - File info object that has been uploaded\n * @param resp - API response data\n */\n private onSuccess(fileInfo: FileInfo, resp: UploadResponse): void {\n fileInfo.resp = resp;\n fileInfo.url = this.prependProtocol(resp?.data?.url);\n\n fileInfo.status = FileUploadStatus.Success;\n this.refreshFiles();\n\n this.fileUploaded$$.next(fileInfo);\n\n this.checkQueue();\n }\n\n /**\n * Mark a file as failed to upload\n *\n * @param fileInfo - File info object that has failed\n * @param error - Reason for the failure\n */\n private onError(fileInfo: FileInfo): void {\n fileInfo.status = FileUploadStatus.Fail;\n this.refreshFiles();\n\n this.fileErrored$$.next({\n fileInfo,\n error: new Error('GALAXY.UPLOADER.ERROR.GENERIC'),\n });\n\n this.checkQueue();\n }\n\n /**\n * Remove a file from the queue, making sure to stop any that are currently being uploaded\n *\n * @param index - index of the file to stop uploading and remove\n */\n private removeFileAtIndex(index: number): void {\n const files = this.files.splice(index, 1);\n if (files.length) {\n const fileInfo = files[0];\n\n // We only care to unsub and kickoff the next in the queue, in this case\n if (fileInfo.status === FileUploadStatus.InProgress) {\n fileInfo.uploadSub?.unsubscribe();\n this.checkQueue();\n }\n }\n\n this.refreshFiles();\n }\n\n /**\n * If the url is missing a protocol, add it.\n *\n * @param url - URL to add protocol to\n */\n private prependProtocol(url: string): string {\n if (!url.startsWith('http')) {\n let prependString = 'https:';\n if (!url.startsWith('//')) {\n prependString += '//';\n }\n return prependString + url;\n }\n return url;\n }\n\n /**\n * Make a file info object and add it to the queue, and make sure it adheres to constraints.\n * Note that file type is checked by the html input via \"accept\" list\n *\n * @param file - File to add to the queue\n * @param context - Optional data to inform subscribers \"where\" this file was uploaded (e.g. from which component)\n */\n public addFile(file: File, context?: UploadContext): void {\n const fileInfo = {\n file,\n name: file.name,\n context: context,\n } as FileInfo;\n\n // Cannot add exact duplicates\n if (this.getFileIndex(fileInfo) > -1) {\n return this.fileErrored$$.next({\n fileInfo,\n error: new Error('GALAXY.UPLOADER.ERROR.DUPLICATE_FILE_ATTEMPT'),\n });\n }\n\n if (!!this.maxFileSize && file.size > this.maxFileSize) {\n return this.fileErrored$$.next({\n fileInfo,\n error: new Error('GALAXY.UPLOADER.ERROR.MAX_FILE_SIZE_EXCEEDED'),\n });\n }\n\n // If a file has been added, and not uploaded/in progress, kill it and use the new one\n if (this.maxFiles === 1 && this.files.length) {\n const { status } = this.files[0];\n\n if (status === FileUploadStatus.Fail || status === FileUploadStatus.Queued) {\n this.clear();\n }\n }\n\n if (this.maxFiles && this.maxFiles > 0 && this.files.length >= this.maxFiles) {\n return this.fileErrored$$.next({\n fileInfo,\n error: new Error('GALAXY.UPLOADER.ERROR.MAX_FILES_EXCEEDED'),\n });\n }\n\n fileInfo.status = FileUploadStatus.Queued;\n this.files.push(fileInfo);\n this.refreshFiles();\n\n if (this.autoUpload) {\n this.checkQueue();\n }\n }\n\n /**\n * Remove a file from the queue\n *\n * @param fileInfo - File to remove from the queue\n */\n public removeFile(fileInfo: FileInfo): void {\n const index = this.getFileIndex(fileInfo);\n this.removeFileAtIndex(index);\n }\n\n /** Clear out the queue */\n public clear(): void {\n this.files.forEach((file) => this.removeFile(file));\n }\n\n /**\n * Public interface for kicking off the entire queue to be uploaded\n */\n public uploadQueuedFiles(): void {\n this.checkQueue();\n }\n\n public setFiles(files: FileInfo[]): void {\n this.files = files;\n this.refreshFiles();\n }\n\n public setMaxFiles(limit: number): void {\n this.maxFiles = limit;\n }\n\n public setMaxFileSize(limit: number): void {\n this.maxFileSize = limit;\n }\n\n public setUploadUrl(url: string): void {\n this.uploadUrl = url;\n }\n\n public setParallelUploads(limit: number): void {\n this.numParallel = limit;\n }\n\n public setAutoUpload(allowAuto: boolean): void {\n this.autoUpload = allowAuto;\n }\n\n /**\n * Used to build an api request object for uploading files.\n * Note: This is to be overridden if adding own requeset functionality, testing, etc.\n *\n * @param fileInfo - File to upload\n */\n public buildRequest(fileInfo: FileInfo): Observable {\n const body = new FormData();\n if (fileInfo.file) body.append('file', fileInfo.file);\n return this.http.post(this.uploadUrl, body, { withCredentials: true }) as Observable;\n }\n\n /**\n * Refresh the file list for consumers\n */\n protected refreshFiles(): void {\n this.files$$.next(this.files);\n }\n}\n","import { HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { EMPTY, Observable } from 'rxjs';\nimport { FileInfo, UploadContext, UploadResponse } from './uploader.interface';\nimport { GalaxyUploaderService } from './uploader.service';\n\nexport interface ImageDimensions {\n width?: number;\n height?: number;\n}\n\n@Injectable()\nexport class GalaxyImageUploaderService extends GalaxyUploaderService {\n private maxDimensions?: ImageDimensions;\n\n /**\n * Used to build an api request object for uploading files.\n * Note: This is to be overridden if adding own requeset functionality, testing, etc.\n *\n * @param fileInfo - File to upload\n * @param params - Query parameters to include on the upload URL\n */\n buildRequest(fileInfo: FileInfo, params?: HttpParams): Observable {\n // Try to upload the cropped image instance, otherwise use the file itself\n const imageToUpload = fileInfo?.data?.croppedImage || fileInfo.file;\n if (!imageToUpload) {\n this.fileErrored$$.next({\n fileInfo,\n error: new Error('GALAXY.UPLOADER.ERROR.NO_VALID_FILE_IMAGE'),\n });\n return EMPTY;\n }\n\n const body = new FormData();\n body.append('file', imageToUpload);\n const options: Record = { withCredentials: true };\n if (params) {\n options['params'] = params;\n }\n return this.http.post(this.uploadUrl, body, options) as Observable;\n }\n\n /**\n * Set the cropped image property on the provided file info object\n * @param info - Info object to set the new image on\n * @param croppedImage - The edited image to add to the file info\n */\n public setCroppedImage(info: FileInfo, croppedImage: Blob): void {\n if (!info.data) {\n info.data = {};\n }\n\n info.data.croppedImage = croppedImage;\n\n this.refreshFiles();\n }\n\n /**\n * Set the max dimensions of files allowed to be added to the queue\n * @param dimensions - Max width and/or height allowed to be uploaded\n */\n public setMaxDimensions(dimensions: ImageDimensions): void {\n this.maxDimensions = dimensions;\n }\n\n /**\n * Add a file to the queue\n * @param file - The file to add\n * @param context - Optional data to inform subscribers \"where\" this file was uploaded (e.g. from which component)\n */\n public addFile(file: File, context?: UploadContext): void {\n if (!this.maxDimensions) {\n return super.addFile(file, context);\n }\n\n const reader = new FileReader();\n reader.onload = () => {\n // Need to create an image from the file so that we can test dimensions\n const image = new Image();\n image.onload = () => {\n const { width, height } = this.maxDimensions || {};\n if ((width && image.width > width) || (height && image.height > height)) {\n return this.fileErrored$$.next({\n fileInfo: {\n name: file.name,\n file,\n context,\n } as FileInfo,\n error: new Error('GALAXY.UPLOADER.ERROR.MAX_DIMENSIONS_EXCEEDED'),\n });\n }\n super.addFile(file, context);\n };\n\n image.src = reader.result?.toString() || '';\n };\n\n reader.readAsDataURL(file);\n }\n}\n","const types = {\n \"application/prs.cww\": [\"cww\"],\n \"application/prs.xsf+xml\": [\"xsf\"],\n \"application/vnd.1000minds.decision-model+xml\": [\"1km\"],\n \"application/vnd.3gpp.pic-bw-large\": [\"plb\"],\n \"application/vnd.3gpp.pic-bw-small\": [\"psb\"],\n \"application/vnd.3gpp.pic-bw-var\": [\"pvb\"],\n \"application/vnd.3gpp2.tcap\": [\"tcap\"],\n \"application/vnd.3m.post-it-notes\": [\"pwn\"],\n \"application/vnd.accpac.simply.aso\": [\"aso\"],\n \"application/vnd.accpac.simply.imp\": [\"imp\"],\n \"application/vnd.acucobol\": [\"acu\"],\n \"application/vnd.acucorp\": [\"atc\", \"acutc\"],\n \"application/vnd.adobe.air-application-installer-package+zip\": [\"air\"],\n \"application/vnd.adobe.formscentral.fcdt\": [\"fcdt\"],\n \"application/vnd.adobe.fxp\": [\"fxp\", \"fxpl\"],\n \"application/vnd.adobe.xdp+xml\": [\"xdp\"],\n \"application/vnd.adobe.xfdf\": [\"*xfdf\"],\n \"application/vnd.age\": [\"age\"],\n \"application/vnd.ahead.space\": [\"ahead\"],\n \"application/vnd.airzip.filesecure.azf\": [\"azf\"],\n \"application/vnd.airzip.filesecure.azs\": [\"azs\"],\n \"application/vnd.amazon.ebook\": [\"azw\"],\n \"application/vnd.americandynamics.acc\": [\"acc\"],\n \"application/vnd.amiga.ami\": [\"ami\"],\n \"application/vnd.android.package-archive\": [\"apk\"],\n \"application/vnd.anser-web-certificate-issue-initiation\": [\"cii\"],\n \"application/vnd.anser-web-funds-transfer-initiation\": [\"fti\"],\n \"application/vnd.antix.game-component\": [\"atx\"],\n \"application/vnd.apple.installer+xml\": [\"mpkg\"],\n \"application/vnd.apple.keynote\": [\"key\"],\n \"application/vnd.apple.mpegurl\": [\"m3u8\"],\n \"application/vnd.apple.numbers\": [\"numbers\"],\n \"application/vnd.apple.pages\": [\"pages\"],\n \"application/vnd.apple.pkpass\": [\"pkpass\"],\n \"application/vnd.aristanetworks.swi\": [\"swi\"],\n \"application/vnd.astraea-software.iota\": [\"iota\"],\n \"application/vnd.audiograph\": [\"aep\"],\n \"application/vnd.balsamiq.bmml+xml\": [\"bmml\"],\n \"application/vnd.blueice.multipass\": [\"mpm\"],\n \"application/vnd.bmi\": [\"bmi\"],\n \"application/vnd.businessobjects\": [\"rep\"],\n \"application/vnd.chemdraw+xml\": [\"cdxml\"],\n \"application/vnd.chipnuts.karaoke-mmd\": [\"mmd\"],\n \"application/vnd.cinderella\": [\"cdy\"],\n \"application/vnd.citationstyles.style+xml\": [\"csl\"],\n \"application/vnd.claymore\": [\"cla\"],\n \"application/vnd.cloanto.rp9\": [\"rp9\"],\n \"application/vnd.clonk.c4group\": [\"c4g\", \"c4d\", \"c4f\", \"c4p\", \"c4u\"],\n \"application/vnd.cluetrust.cartomobile-config\": [\"c11amc\"],\n \"application/vnd.cluetrust.cartomobile-config-pkg\": [\"c11amz\"],\n \"application/vnd.commonspace\": [\"csp\"],\n \"application/vnd.contact.cmsg\": [\"cdbcmsg\"],\n \"application/vnd.cosmocaller\": [\"cmc\"],\n \"application/vnd.crick.clicker\": [\"clkx\"],\n \"application/vnd.crick.clicker.keyboard\": [\"clkk\"],\n \"application/vnd.crick.clicker.palette\": [\"clkp\"],\n \"application/vnd.crick.clicker.template\": [\"clkt\"],\n \"application/vnd.crick.clicker.wordbank\": [\"clkw\"],\n \"application/vnd.criticaltools.wbs+xml\": [\"wbs\"],\n \"application/vnd.ctc-posml\": [\"pml\"],\n \"application/vnd.cups-ppd\": [\"ppd\"],\n \"application/vnd.curl.car\": [\"car\"],\n \"application/vnd.curl.pcurl\": [\"pcurl\"],\n \"application/vnd.dart\": [\"dart\"],\n \"application/vnd.data-vision.rdz\": [\"rdz\"],\n \"application/vnd.dbf\": [\"dbf\"],\n \"application/vnd.dece.data\": [\"uvf\", \"uvvf\", \"uvd\", \"uvvd\"],\n \"application/vnd.dece.ttml+xml\": [\"uvt\", \"uvvt\"],\n \"application/vnd.dece.unspecified\": [\"uvx\", \"uvvx\"],\n \"application/vnd.dece.zip\": [\"uvz\", \"uvvz\"],\n \"application/vnd.denovo.fcselayout-link\": [\"fe_launch\"],\n \"application/vnd.dna\": [\"dna\"],\n \"application/vnd.dolby.mlp\": [\"mlp\"],\n \"application/vnd.dpgraph\": [\"dpg\"],\n \"application/vnd.dreamfactory\": [\"dfac\"],\n \"application/vnd.ds-keypoint\": [\"kpxx\"],\n \"application/vnd.dvb.ait\": [\"ait\"],\n \"application/vnd.dvb.service\": [\"svc\"],\n \"application/vnd.dynageo\": [\"geo\"],\n \"application/vnd.ecowin.chart\": [\"mag\"],\n \"application/vnd.enliven\": [\"nml\"],\n \"application/vnd.epson.esf\": [\"esf\"],\n \"application/vnd.epson.msf\": [\"msf\"],\n \"application/vnd.epson.quickanime\": [\"qam\"],\n \"application/vnd.epson.salt\": [\"slt\"],\n \"application/vnd.epson.ssf\": [\"ssf\"],\n \"application/vnd.eszigno3+xml\": [\"es3\", \"et3\"],\n \"application/vnd.ezpix-album\": [\"ez2\"],\n \"application/vnd.ezpix-package\": [\"ez3\"],\n \"application/vnd.fdf\": [\"*fdf\"],\n \"application/vnd.fdsn.mseed\": [\"mseed\"],\n \"application/vnd.fdsn.seed\": [\"seed\", \"dataless\"],\n \"application/vnd.flographit\": [\"gph\"],\n \"application/vnd.fluxtime.clip\": [\"ftc\"],\n \"application/vnd.framemaker\": [\"fm\", \"frame\", \"maker\", \"book\"],\n \"application/vnd.frogans.fnc\": [\"fnc\"],\n \"application/vnd.frogans.ltf\": [\"ltf\"],\n \"application/vnd.fsc.weblaunch\": [\"fsc\"],\n \"application/vnd.fujitsu.oasys\": [\"oas\"],\n \"application/vnd.fujitsu.oasys2\": [\"oa2\"],\n \"application/vnd.fujitsu.oasys3\": [\"oa3\"],\n \"application/vnd.fujitsu.oasysgp\": [\"fg5\"],\n \"application/vnd.fujitsu.oasysprs\": [\"bh2\"],\n \"application/vnd.fujixerox.ddd\": [\"ddd\"],\n \"application/vnd.fujixerox.docuworks\": [\"xdw\"],\n \"application/vnd.fujixerox.docuworks.binder\": [\"xbd\"],\n \"application/vnd.fuzzysheet\": [\"fzs\"],\n \"application/vnd.genomatix.tuxedo\": [\"txd\"],\n \"application/vnd.geogebra.file\": [\"ggb\"],\n \"application/vnd.geogebra.tool\": [\"ggt\"],\n \"application/vnd.geometry-explorer\": [\"gex\", \"gre\"],\n \"application/vnd.geonext\": [\"gxt\"],\n \"application/vnd.geoplan\": [\"g2w\"],\n \"application/vnd.geospace\": [\"g3w\"],\n \"application/vnd.gmx\": [\"gmx\"],\n \"application/vnd.google-apps.document\": [\"gdoc\"],\n \"application/vnd.google-apps.presentation\": [\"gslides\"],\n \"application/vnd.google-apps.spreadsheet\": [\"gsheet\"],\n \"application/vnd.google-earth.kml+xml\": [\"kml\"],\n \"application/vnd.google-earth.kmz\": [\"kmz\"],\n \"application/vnd.grafeq\": [\"gqf\", \"gqs\"],\n \"application/vnd.groove-account\": [\"gac\"],\n \"application/vnd.groove-help\": [\"ghf\"],\n \"application/vnd.groove-identity-message\": [\"gim\"],\n \"application/vnd.groove-injector\": [\"grv\"],\n \"application/vnd.groove-tool-message\": [\"gtm\"],\n \"application/vnd.groove-tool-template\": [\"tpl\"],\n \"application/vnd.groove-vcard\": [\"vcg\"],\n \"application/vnd.hal+xml\": [\"hal\"],\n \"application/vnd.handheld-entertainment+xml\": [\"zmm\"],\n \"application/vnd.hbci\": [\"hbci\"],\n \"application/vnd.hhe.lesson-player\": [\"les\"],\n \"application/vnd.hp-hpgl\": [\"hpgl\"],\n \"application/vnd.hp-hpid\": [\"hpid\"],\n \"application/vnd.hp-hps\": [\"hps\"],\n \"application/vnd.hp-jlyt\": [\"jlt\"],\n \"application/vnd.hp-pcl\": [\"pcl\"],\n \"application/vnd.hp-pclxl\": [\"pclxl\"],\n \"application/vnd.hydrostatix.sof-data\": [\"sfd-hdstx\"],\n \"application/vnd.ibm.minipay\": [\"mpy\"],\n \"application/vnd.ibm.modcap\": [\"afp\", \"listafp\", \"list3820\"],\n \"application/vnd.ibm.rights-management\": [\"irm\"],\n \"application/vnd.ibm.secure-container\": [\"sc\"],\n \"application/vnd.iccprofile\": [\"icc\", \"icm\"],\n \"application/vnd.igloader\": [\"igl\"],\n \"application/vnd.immervision-ivp\": [\"ivp\"],\n \"application/vnd.immervision-ivu\": [\"ivu\"],\n \"application/vnd.insors.igm\": [\"igm\"],\n \"application/vnd.intercon.formnet\": [\"xpw\", \"xpx\"],\n \"application/vnd.intergeo\": [\"i2g\"],\n \"application/vnd.intu.qbo\": [\"qbo\"],\n \"application/vnd.intu.qfx\": [\"qfx\"],\n \"application/vnd.ipunplugged.rcprofile\": [\"rcprofile\"],\n \"application/vnd.irepository.package+xml\": [\"irp\"],\n \"application/vnd.is-xpr\": [\"xpr\"],\n \"application/vnd.isac.fcs\": [\"fcs\"],\n \"application/vnd.jam\": [\"jam\"],\n \"application/vnd.jcp.javame.midlet-rms\": [\"rms\"],\n \"application/vnd.jisp\": [\"jisp\"],\n \"application/vnd.joost.joda-archive\": [\"joda\"],\n \"application/vnd.kahootz\": [\"ktz\", \"ktr\"],\n \"application/vnd.kde.karbon\": [\"karbon\"],\n \"application/vnd.kde.kchart\": [\"chrt\"],\n \"application/vnd.kde.kformula\": [\"kfo\"],\n \"application/vnd.kde.kivio\": [\"flw\"],\n \"application/vnd.kde.kontour\": [\"kon\"],\n \"application/vnd.kde.kpresenter\": [\"kpr\", \"kpt\"],\n \"application/vnd.kde.kspread\": [\"ksp\"],\n \"application/vnd.kde.kword\": [\"kwd\", \"kwt\"],\n \"application/vnd.kenameaapp\": [\"htke\"],\n \"application/vnd.kidspiration\": [\"kia\"],\n \"application/vnd.kinar\": [\"kne\", \"knp\"],\n \"application/vnd.koan\": [\"skp\", \"skd\", \"skt\", \"skm\"],\n \"application/vnd.kodak-descriptor\": [\"sse\"],\n \"application/vnd.las.las+xml\": [\"lasxml\"],\n \"application/vnd.llamagraphics.life-balance.desktop\": [\"lbd\"],\n \"application/vnd.llamagraphics.life-balance.exchange+xml\": [\"lbe\"],\n \"application/vnd.lotus-1-2-3\": [\"123\"],\n \"application/vnd.lotus-approach\": [\"apr\"],\n \"application/vnd.lotus-freelance\": [\"pre\"],\n \"application/vnd.lotus-notes\": [\"nsf\"],\n \"application/vnd.lotus-organizer\": [\"org\"],\n \"application/vnd.lotus-screencam\": [\"scm\"],\n \"application/vnd.lotus-wordpro\": [\"lwp\"],\n \"application/vnd.macports.portpkg\": [\"portpkg\"],\n \"application/vnd.mapbox-vector-tile\": [\"mvt\"],\n \"application/vnd.mcd\": [\"mcd\"],\n \"application/vnd.medcalcdata\": [\"mc1\"],\n \"application/vnd.mediastation.cdkey\": [\"cdkey\"],\n \"application/vnd.mfer\": [\"mwf\"],\n \"application/vnd.mfmp\": [\"mfm\"],\n \"application/vnd.micrografx.flo\": [\"flo\"],\n \"application/vnd.micrografx.igx\": [\"igx\"],\n \"application/vnd.mif\": [\"mif\"],\n \"application/vnd.mobius.daf\": [\"daf\"],\n \"application/vnd.mobius.dis\": [\"dis\"],\n \"application/vnd.mobius.mbk\": [\"mbk\"],\n \"application/vnd.mobius.mqy\": [\"mqy\"],\n \"application/vnd.mobius.msl\": [\"msl\"],\n \"application/vnd.mobius.plc\": [\"plc\"],\n \"application/vnd.mobius.txf\": [\"txf\"],\n \"application/vnd.mophun.application\": [\"mpn\"],\n \"application/vnd.mophun.certificate\": [\"mpc\"],\n \"application/vnd.mozilla.xul+xml\": [\"xul\"],\n \"application/vnd.ms-artgalry\": [\"cil\"],\n \"application/vnd.ms-cab-compressed\": [\"cab\"],\n \"application/vnd.ms-excel\": [\"xls\", \"xlm\", \"xla\", \"xlc\", \"xlt\", \"xlw\"],\n \"application/vnd.ms-excel.addin.macroenabled.12\": [\"xlam\"],\n \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": [\"xlsb\"],\n \"application/vnd.ms-excel.sheet.macroenabled.12\": [\"xlsm\"],\n \"application/vnd.ms-excel.template.macroenabled.12\": [\"xltm\"],\n \"application/vnd.ms-fontobject\": [\"eot\"],\n \"application/vnd.ms-htmlhelp\": [\"chm\"],\n \"application/vnd.ms-ims\": [\"ims\"],\n \"application/vnd.ms-lrm\": [\"lrm\"],\n \"application/vnd.ms-officetheme\": [\"thmx\"],\n \"application/vnd.ms-outlook\": [\"msg\"],\n \"application/vnd.ms-pki.seccat\": [\"cat\"],\n \"application/vnd.ms-pki.stl\": [\"*stl\"],\n \"application/vnd.ms-powerpoint\": [\"ppt\", \"pps\", \"pot\"],\n \"application/vnd.ms-powerpoint.addin.macroenabled.12\": [\"ppam\"],\n \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": [\"pptm\"],\n \"application/vnd.ms-powerpoint.slide.macroenabled.12\": [\"sldm\"],\n \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": [\"ppsm\"],\n \"application/vnd.ms-powerpoint.template.macroenabled.12\": [\"potm\"],\n \"application/vnd.ms-project\": [\"*mpp\", \"mpt\"],\n \"application/vnd.ms-word.document.macroenabled.12\": [\"docm\"],\n \"application/vnd.ms-word.template.macroenabled.12\": [\"dotm\"],\n \"application/vnd.ms-works\": [\"wps\", \"wks\", \"wcm\", \"wdb\"],\n \"application/vnd.ms-wpl\": [\"wpl\"],\n \"application/vnd.ms-xpsdocument\": [\"xps\"],\n \"application/vnd.mseq\": [\"mseq\"],\n \"application/vnd.musician\": [\"mus\"],\n \"application/vnd.muvee.style\": [\"msty\"],\n \"application/vnd.mynfc\": [\"taglet\"],\n \"application/vnd.neurolanguage.nlu\": [\"nlu\"],\n \"application/vnd.nitf\": [\"ntf\", \"nitf\"],\n \"application/vnd.noblenet-directory\": [\"nnd\"],\n \"application/vnd.noblenet-sealer\": [\"nns\"],\n \"application/vnd.noblenet-web\": [\"nnw\"],\n \"application/vnd.nokia.n-gage.ac+xml\": [\"*ac\"],\n \"application/vnd.nokia.n-gage.data\": [\"ngdat\"],\n \"application/vnd.nokia.n-gage.symbian.install\": [\"n-gage\"],\n \"application/vnd.nokia.radio-preset\": [\"rpst\"],\n \"application/vnd.nokia.radio-presets\": [\"rpss\"],\n \"application/vnd.novadigm.edm\": [\"edm\"],\n \"application/vnd.novadigm.edx\": [\"edx\"],\n \"application/vnd.novadigm.ext\": [\"ext\"],\n \"application/vnd.oasis.opendocument.chart\": [\"odc\"],\n \"application/vnd.oasis.opendocument.chart-template\": [\"otc\"],\n \"application/vnd.oasis.opendocument.database\": [\"odb\"],\n \"application/vnd.oasis.opendocument.formula\": [\"odf\"],\n \"application/vnd.oasis.opendocument.formula-template\": [\"odft\"],\n \"application/vnd.oasis.opendocument.graphics\": [\"odg\"],\n \"application/vnd.oasis.opendocument.graphics-template\": [\"otg\"],\n \"application/vnd.oasis.opendocument.image\": [\"odi\"],\n \"application/vnd.oasis.opendocument.image-template\": [\"oti\"],\n \"application/vnd.oasis.opendocument.presentation\": [\"odp\"],\n \"application/vnd.oasis.opendocument.presentation-template\": [\"otp\"],\n \"application/vnd.oasis.opendocument.spreadsheet\": [\"ods\"],\n \"application/vnd.oasis.opendocument.spreadsheet-template\": [\"ots\"],\n \"application/vnd.oasis.opendocument.text\": [\"odt\"],\n \"application/vnd.oasis.opendocument.text-master\": [\"odm\"],\n \"application/vnd.oasis.opendocument.text-template\": [\"ott\"],\n \"application/vnd.oasis.opendocument.text-web\": [\"oth\"],\n \"application/vnd.olpc-sugar\": [\"xo\"],\n \"application/vnd.oma.dd2+xml\": [\"dd2\"],\n \"application/vnd.openblox.game+xml\": [\"obgx\"],\n \"application/vnd.openofficeorg.extension\": [\"oxt\"],\n \"application/vnd.openstreetmap.data+xml\": [\"osm\"],\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": [\"pptx\"],\n \"application/vnd.openxmlformats-officedocument.presentationml.slide\": [\"sldx\"],\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": [\"ppsx\"],\n \"application/vnd.openxmlformats-officedocument.presentationml.template\": [\"potx\"],\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": [\"xlsx\"],\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": [\"xltx\"],\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": [\"docx\"],\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": [\"dotx\"],\n \"application/vnd.osgeo.mapguide.package\": [\"mgp\"],\n \"application/vnd.osgi.dp\": [\"dp\"],\n \"application/vnd.osgi.subsystem\": [\"esa\"],\n \"application/vnd.palm\": [\"pdb\", \"pqa\", \"oprc\"],\n \"application/vnd.pawaafile\": [\"paw\"],\n \"application/vnd.pg.format\": [\"str\"],\n \"application/vnd.pg.osasli\": [\"ei6\"],\n \"application/vnd.picsel\": [\"efif\"],\n \"application/vnd.pmi.widget\": [\"wg\"],\n \"application/vnd.pocketlearn\": [\"plf\"],\n \"application/vnd.powerbuilder6\": [\"pbd\"],\n \"application/vnd.previewsystems.box\": [\"box\"],\n \"application/vnd.proteus.magazine\": [\"mgz\"],\n \"application/vnd.publishare-delta-tree\": [\"qps\"],\n \"application/vnd.pvi.ptid1\": [\"ptid\"],\n \"application/vnd.pwg-xhtml-print+xml\": [\"xhtm\"],\n \"application/vnd.quark.quarkxpress\": [\"qxd\", \"qxt\", \"qwd\", \"qwt\", \"qxl\", \"qxb\"],\n \"application/vnd.rar\": [\"rar\"],\n \"application/vnd.realvnc.bed\": [\"bed\"],\n \"application/vnd.recordare.musicxml\": [\"mxl\"],\n \"application/vnd.recordare.musicxml+xml\": [\"musicxml\"],\n \"application/vnd.rig.cryptonote\": [\"cryptonote\"],\n \"application/vnd.rim.cod\": [\"cod\"],\n \"application/vnd.rn-realmedia\": [\"rm\"],\n \"application/vnd.rn-realmedia-vbr\": [\"rmvb\"],\n \"application/vnd.route66.link66+xml\": [\"link66\"],\n \"application/vnd.sailingtracker.track\": [\"st\"],\n \"application/vnd.seemail\": [\"see\"],\n \"application/vnd.sema\": [\"sema\"],\n \"application/vnd.semd\": [\"semd\"],\n \"application/vnd.semf\": [\"semf\"],\n \"application/vnd.shana.informed.formdata\": [\"ifm\"],\n \"application/vnd.shana.informed.formtemplate\": [\"itp\"],\n \"application/vnd.shana.informed.interchange\": [\"iif\"],\n \"application/vnd.shana.informed.package\": [\"ipk\"],\n \"application/vnd.simtech-mindmapper\": [\"twd\", \"twds\"],\n \"application/vnd.smaf\": [\"mmf\"],\n \"application/vnd.smart.teacher\": [\"teacher\"],\n \"application/vnd.software602.filler.form+xml\": [\"fo\"],\n \"application/vnd.solent.sdkm+xml\": [\"sdkm\", \"sdkd\"],\n \"application/vnd.spotfire.dxp\": [\"dxp\"],\n \"application/vnd.spotfire.sfs\": [\"sfs\"],\n \"application/vnd.stardivision.calc\": [\"sdc\"],\n \"application/vnd.stardivision.draw\": [\"sda\"],\n \"application/vnd.stardivision.impress\": [\"sdd\"],\n \"application/vnd.stardivision.math\": [\"smf\"],\n \"application/vnd.stardivision.writer\": [\"sdw\", \"vor\"],\n \"application/vnd.stardivision.writer-global\": [\"sgl\"],\n \"application/vnd.stepmania.package\": [\"smzip\"],\n \"application/vnd.stepmania.stepchart\": [\"sm\"],\n \"application/vnd.sun.wadl+xml\": [\"wadl\"],\n \"application/vnd.sun.xml.calc\": [\"sxc\"],\n \"application/vnd.sun.xml.calc.template\": [\"stc\"],\n \"application/vnd.sun.xml.draw\": [\"sxd\"],\n \"application/vnd.sun.xml.draw.template\": [\"std\"],\n \"application/vnd.sun.xml.impress\": [\"sxi\"],\n \"application/vnd.sun.xml.impress.template\": [\"sti\"],\n \"application/vnd.sun.xml.math\": [\"sxm\"],\n \"application/vnd.sun.xml.writer\": [\"sxw\"],\n \"application/vnd.sun.xml.writer.global\": [\"sxg\"],\n \"application/vnd.sun.xml.writer.template\": [\"stw\"],\n \"application/vnd.sus-calendar\": [\"sus\", \"susp\"],\n \"application/vnd.svd\": [\"svd\"],\n \"application/vnd.symbian.install\": [\"sis\", \"sisx\"],\n \"application/vnd.syncml+xml\": [\"xsm\"],\n \"application/vnd.syncml.dm+wbxml\": [\"bdm\"],\n \"application/vnd.syncml.dm+xml\": [\"xdm\"],\n \"application/vnd.syncml.dmddf+xml\": [\"ddf\"],\n \"application/vnd.tao.intent-module-archive\": [\"tao\"],\n \"application/vnd.tcpdump.pcap\": [\"pcap\", \"cap\", \"dmp\"],\n \"application/vnd.tmobile-livetv\": [\"tmo\"],\n \"application/vnd.trid.tpt\": [\"tpt\"],\n \"application/vnd.triscape.mxs\": [\"mxs\"],\n \"application/vnd.trueapp\": [\"tra\"],\n \"application/vnd.ufdl\": [\"ufd\", \"ufdl\"],\n \"application/vnd.uiq.theme\": [\"utz\"],\n \"application/vnd.umajin\": [\"umj\"],\n \"application/vnd.unity\": [\"unityweb\"],\n \"application/vnd.uoml+xml\": [\"uoml\", \"uo\"],\n \"application/vnd.vcx\": [\"vcx\"],\n \"application/vnd.visio\": [\"vsd\", \"vst\", \"vss\", \"vsw\"],\n \"application/vnd.visionary\": [\"vis\"],\n \"application/vnd.vsf\": [\"vsf\"],\n \"application/vnd.wap.wbxml\": [\"wbxml\"],\n \"application/vnd.wap.wmlc\": [\"wmlc\"],\n \"application/vnd.wap.wmlscriptc\": [\"wmlsc\"],\n \"application/vnd.webturbo\": [\"wtb\"],\n \"application/vnd.wolfram.player\": [\"nbp\"],\n \"application/vnd.wordperfect\": [\"wpd\"],\n \"application/vnd.wqd\": [\"wqd\"],\n \"application/vnd.wt.stf\": [\"stf\"],\n \"application/vnd.xara\": [\"xar\"],\n \"application/vnd.xfdl\": [\"xfdl\"],\n \"application/vnd.yamaha.hv-dic\": [\"hvd\"],\n \"application/vnd.yamaha.hv-script\": [\"hvs\"],\n \"application/vnd.yamaha.hv-voice\": [\"hvp\"],\n \"application/vnd.yamaha.openscoreformat\": [\"osf\"],\n \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": [\"osfpvg\"],\n \"application/vnd.yamaha.smaf-audio\": [\"saf\"],\n \"application/vnd.yamaha.smaf-phrase\": [\"spf\"],\n \"application/vnd.yellowriver-custom-menu\": [\"cmp\"],\n \"application/vnd.zul\": [\"zir\", \"zirz\"],\n \"application/vnd.zzazz.deck+xml\": [\"zaz\"],\n \"application/x-7z-compressed\": [\"7z\"],\n \"application/x-abiword\": [\"abw\"],\n \"application/x-ace-compressed\": [\"ace\"],\n \"application/x-apple-diskimage\": [\"*dmg\"],\n \"application/x-arj\": [\"arj\"],\n \"application/x-authorware-bin\": [\"aab\", \"x32\", \"u32\", \"vox\"],\n \"application/x-authorware-map\": [\"aam\"],\n \"application/x-authorware-seg\": [\"aas\"],\n \"application/x-bcpio\": [\"bcpio\"],\n \"application/x-bdoc\": [\"*bdoc\"],\n \"application/x-bittorrent\": [\"torrent\"],\n \"application/x-blorb\": [\"blb\", \"blorb\"],\n \"application/x-bzip\": [\"bz\"],\n \"application/x-bzip2\": [\"bz2\", \"boz\"],\n \"application/x-cbr\": [\"cbr\", \"cba\", \"cbt\", \"cbz\", \"cb7\"],\n \"application/x-cdlink\": [\"vcd\"],\n \"application/x-cfs-compressed\": [\"cfs\"],\n \"application/x-chat\": [\"chat\"],\n \"application/x-chess-pgn\": [\"pgn\"],\n \"application/x-chrome-extension\": [\"crx\"],\n \"application/x-cocoa\": [\"cco\"],\n \"application/x-conference\": [\"nsc\"],\n \"application/x-cpio\": [\"cpio\"],\n \"application/x-csh\": [\"csh\"],\n \"application/x-debian-package\": [\"*deb\", \"udeb\"],\n \"application/x-dgc-compressed\": [\"dgc\"],\n \"application/x-director\": [\"dir\", \"dcr\", \"dxr\", \"cst\", \"cct\", \"cxt\", \"w3d\", \"fgd\", \"swa\"],\n \"application/x-doom\": [\"wad\"],\n \"application/x-dtbncx+xml\": [\"ncx\"],\n \"application/x-dtbook+xml\": [\"dtb\"],\n \"application/x-dtbresource+xml\": [\"res\"],\n \"application/x-dvi\": [\"dvi\"],\n \"application/x-envoy\": [\"evy\"],\n \"application/x-eva\": [\"eva\"],\n \"application/x-font-bdf\": [\"bdf\"],\n \"application/x-font-ghostscript\": [\"gsf\"],\n \"application/x-font-linux-psf\": [\"psf\"],\n \"application/x-font-pcf\": [\"pcf\"],\n \"application/x-font-snf\": [\"snf\"],\n \"application/x-font-type1\": [\"pfa\", \"pfb\", \"pfm\", \"afm\"],\n \"application/x-freearc\": [\"arc\"],\n \"application/x-futuresplash\": [\"spl\"],\n \"application/x-gca-compressed\": [\"gca\"],\n \"application/x-glulx\": [\"ulx\"],\n \"application/x-gnumeric\": [\"gnumeric\"],\n \"application/x-gramps-xml\": [\"gramps\"],\n \"application/x-gtar\": [\"gtar\"],\n \"application/x-hdf\": [\"hdf\"],\n \"application/x-httpd-php\": [\"php\"],\n \"application/x-install-instructions\": [\"install\"],\n \"application/x-iso9660-image\": [\"*iso\"],\n \"application/x-iwork-keynote-sffkey\": [\"*key\"],\n \"application/x-iwork-numbers-sffnumbers\": [\"*numbers\"],\n \"application/x-iwork-pages-sffpages\": [\"*pages\"],\n \"application/x-java-archive-diff\": [\"jardiff\"],\n \"application/x-java-jnlp-file\": [\"jnlp\"],\n \"application/x-keepass2\": [\"kdbx\"],\n \"application/x-latex\": [\"latex\"],\n \"application/x-lua-bytecode\": [\"luac\"],\n \"application/x-lzh-compressed\": [\"lzh\", \"lha\"],\n \"application/x-makeself\": [\"run\"],\n \"application/x-mie\": [\"mie\"],\n \"application/x-mobipocket-ebook\": [\"*prc\", \"mobi\"],\n \"application/x-ms-application\": [\"application\"],\n \"application/x-ms-shortcut\": [\"lnk\"],\n \"application/x-ms-wmd\": [\"wmd\"],\n \"application/x-ms-wmz\": [\"wmz\"],\n \"application/x-ms-xbap\": [\"xbap\"],\n \"application/x-msaccess\": [\"mdb\"],\n \"application/x-msbinder\": [\"obd\"],\n \"application/x-mscardfile\": [\"crd\"],\n \"application/x-msclip\": [\"clp\"],\n \"application/x-msdos-program\": [\"*exe\"],\n \"application/x-msdownload\": [\"*exe\", \"*dll\", \"com\", \"bat\", \"*msi\"],\n \"application/x-msmediaview\": [\"mvb\", \"m13\", \"m14\"],\n \"application/x-msmetafile\": [\"*wmf\", \"*wmz\", \"*emf\", \"emz\"],\n \"application/x-msmoney\": [\"mny\"],\n \"application/x-mspublisher\": [\"pub\"],\n \"application/x-msschedule\": [\"scd\"],\n \"application/x-msterminal\": [\"trm\"],\n \"application/x-mswrite\": [\"wri\"],\n \"application/x-netcdf\": [\"nc\", \"cdf\"],\n \"application/x-ns-proxy-autoconfig\": [\"pac\"],\n \"application/x-nzb\": [\"nzb\"],\n \"application/x-perl\": [\"pl\", \"pm\"],\n \"application/x-pilot\": [\"*prc\", \"*pdb\"],\n \"application/x-pkcs12\": [\"p12\", \"pfx\"],\n \"application/x-pkcs7-certificates\": [\"p7b\", \"spc\"],\n \"application/x-pkcs7-certreqresp\": [\"p7r\"],\n \"application/x-rar-compressed\": [\"*rar\"],\n \"application/x-redhat-package-manager\": [\"rpm\"],\n \"application/x-research-info-systems\": [\"ris\"],\n \"application/x-sea\": [\"sea\"],\n \"application/x-sh\": [\"sh\"],\n \"application/x-shar\": [\"shar\"],\n \"application/x-shockwave-flash\": [\"swf\"],\n \"application/x-silverlight-app\": [\"xap\"],\n \"application/x-sql\": [\"*sql\"],\n \"application/x-stuffit\": [\"sit\"],\n \"application/x-stuffitx\": [\"sitx\"],\n \"application/x-subrip\": [\"srt\"],\n \"application/x-sv4cpio\": [\"sv4cpio\"],\n \"application/x-sv4crc\": [\"sv4crc\"],\n \"application/x-t3vm-image\": [\"t3\"],\n \"application/x-tads\": [\"gam\"],\n \"application/x-tar\": [\"tar\"],\n \"application/x-tcl\": [\"tcl\", \"tk\"],\n \"application/x-tex\": [\"tex\"],\n \"application/x-tex-tfm\": [\"tfm\"],\n \"application/x-texinfo\": [\"texinfo\", \"texi\"],\n \"application/x-tgif\": [\"*obj\"],\n \"application/x-ustar\": [\"ustar\"],\n \"application/x-virtualbox-hdd\": [\"hdd\"],\n \"application/x-virtualbox-ova\": [\"ova\"],\n \"application/x-virtualbox-ovf\": [\"ovf\"],\n \"application/x-virtualbox-vbox\": [\"vbox\"],\n \"application/x-virtualbox-vbox-extpack\": [\"vbox-extpack\"],\n \"application/x-virtualbox-vdi\": [\"vdi\"],\n \"application/x-virtualbox-vhd\": [\"vhd\"],\n \"application/x-virtualbox-vmdk\": [\"vmdk\"],\n \"application/x-wais-source\": [\"src\"],\n \"application/x-web-app-manifest+json\": [\"webapp\"],\n \"application/x-x509-ca-cert\": [\"der\", \"crt\", \"pem\"],\n \"application/x-xfig\": [\"fig\"],\n \"application/x-xliff+xml\": [\"*xlf\"],\n \"application/x-xpinstall\": [\"xpi\"],\n \"application/x-xz\": [\"xz\"],\n \"application/x-zmachine\": [\"z1\", \"z2\", \"z3\", \"z4\", \"z5\", \"z6\", \"z7\", \"z8\"],\n \"audio/vnd.dece.audio\": [\"uva\", \"uvva\"],\n \"audio/vnd.digital-winds\": [\"eol\"],\n \"audio/vnd.dra\": [\"dra\"],\n \"audio/vnd.dts\": [\"dts\"],\n \"audio/vnd.dts.hd\": [\"dtshd\"],\n \"audio/vnd.lucent.voice\": [\"lvp\"],\n \"audio/vnd.ms-playready.media.pya\": [\"pya\"],\n \"audio/vnd.nuera.ecelp4800\": [\"ecelp4800\"],\n \"audio/vnd.nuera.ecelp7470\": [\"ecelp7470\"],\n \"audio/vnd.nuera.ecelp9600\": [\"ecelp9600\"],\n \"audio/vnd.rip\": [\"rip\"],\n \"audio/x-aac\": [\"*aac\"],\n \"audio/x-aiff\": [\"aif\", \"aiff\", \"aifc\"],\n \"audio/x-caf\": [\"caf\"],\n \"audio/x-flac\": [\"flac\"],\n \"audio/x-m4a\": [\"*m4a\"],\n \"audio/x-matroska\": [\"mka\"],\n \"audio/x-mpegurl\": [\"m3u\"],\n \"audio/x-ms-wax\": [\"wax\"],\n \"audio/x-ms-wma\": [\"wma\"],\n \"audio/x-pn-realaudio\": [\"ram\", \"ra\"],\n \"audio/x-pn-realaudio-plugin\": [\"rmp\"],\n \"audio/x-realaudio\": [\"*ra\"],\n \"audio/x-wav\": [\"*wav\"],\n \"chemical/x-cdx\": [\"cdx\"],\n \"chemical/x-cif\": [\"cif\"],\n \"chemical/x-cmdf\": [\"cmdf\"],\n \"chemical/x-cml\": [\"cml\"],\n \"chemical/x-csml\": [\"csml\"],\n \"chemical/x-xyz\": [\"xyz\"],\n \"image/prs.btif\": [\"btif\", \"btf\"],\n \"image/prs.pti\": [\"pti\"],\n \"image/vnd.adobe.photoshop\": [\"psd\"],\n \"image/vnd.airzip.accelerator.azv\": [\"azv\"],\n \"image/vnd.dece.graphic\": [\"uvi\", \"uvvi\", \"uvg\", \"uvvg\"],\n \"image/vnd.djvu\": [\"djvu\", \"djv\"],\n \"image/vnd.dvb.subtitle\": [\"*sub\"],\n \"image/vnd.dwg\": [\"dwg\"],\n \"image/vnd.dxf\": [\"dxf\"],\n \"image/vnd.fastbidsheet\": [\"fbs\"],\n \"image/vnd.fpx\": [\"fpx\"],\n \"image/vnd.fst\": [\"fst\"],\n \"image/vnd.fujixerox.edmics-mmr\": [\"mmr\"],\n \"image/vnd.fujixerox.edmics-rlc\": [\"rlc\"],\n \"image/vnd.microsoft.icon\": [\"ico\"],\n \"image/vnd.ms-dds\": [\"dds\"],\n \"image/vnd.ms-modi\": [\"mdi\"],\n \"image/vnd.ms-photo\": [\"wdp\"],\n \"image/vnd.net-fpx\": [\"npx\"],\n \"image/vnd.pco.b16\": [\"b16\"],\n \"image/vnd.tencent.tap\": [\"tap\"],\n \"image/vnd.valve.source.texture\": [\"vtf\"],\n \"image/vnd.wap.wbmp\": [\"wbmp\"],\n \"image/vnd.xiff\": [\"xif\"],\n \"image/vnd.zbrush.pcx\": [\"pcx\"],\n \"image/x-3ds\": [\"3ds\"],\n \"image/x-cmu-raster\": [\"ras\"],\n \"image/x-cmx\": [\"cmx\"],\n \"image/x-freehand\": [\"fh\", \"fhc\", \"fh4\", \"fh5\", \"fh7\"],\n \"image/x-icon\": [\"*ico\"],\n \"image/x-jng\": [\"jng\"],\n \"image/x-mrsid-image\": [\"sid\"],\n \"image/x-ms-bmp\": [\"*bmp\"],\n \"image/x-pcx\": [\"*pcx\"],\n \"image/x-pict\": [\"pic\", \"pct\"],\n \"image/x-portable-anymap\": [\"pnm\"],\n \"image/x-portable-bitmap\": [\"pbm\"],\n \"image/x-portable-graymap\": [\"pgm\"],\n \"image/x-portable-pixmap\": [\"ppm\"],\n \"image/x-rgb\": [\"rgb\"],\n \"image/x-tga\": [\"tga\"],\n \"image/x-xbitmap\": [\"xbm\"],\n \"image/x-xpixmap\": [\"xpm\"],\n \"image/x-xwindowdump\": [\"xwd\"],\n \"message/vnd.wfa.wsc\": [\"wsc\"],\n \"model/vnd.cld\": [\"cld\"],\n \"model/vnd.collada+xml\": [\"dae\"],\n \"model/vnd.dwf\": [\"dwf\"],\n \"model/vnd.gdl\": [\"gdl\"],\n \"model/vnd.gtw\": [\"gtw\"],\n \"model/vnd.mts\": [\"mts\"],\n \"model/vnd.opengex\": [\"ogex\"],\n \"model/vnd.parasolid.transmit.binary\": [\"x_b\"],\n \"model/vnd.parasolid.transmit.text\": [\"x_t\"],\n \"model/vnd.pytha.pyox\": [\"pyo\", \"pyox\"],\n \"model/vnd.sap.vds\": [\"vds\"],\n \"model/vnd.usda\": [\"usda\"],\n \"model/vnd.usdz+zip\": [\"usdz\"],\n \"model/vnd.valve.source.compiled-map\": [\"bsp\"],\n \"model/vnd.vtu\": [\"vtu\"],\n \"text/prs.lines.tag\": [\"dsc\"],\n \"text/vnd.curl\": [\"curl\"],\n \"text/vnd.curl.dcurl\": [\"dcurl\"],\n \"text/vnd.curl.mcurl\": [\"mcurl\"],\n \"text/vnd.curl.scurl\": [\"scurl\"],\n \"text/vnd.dvb.subtitle\": [\"sub\"],\n \"text/vnd.familysearch.gedcom\": [\"ged\"],\n \"text/vnd.fly\": [\"fly\"],\n \"text/vnd.fmi.flexstor\": [\"flx\"],\n \"text/vnd.graphviz\": [\"gv\"],\n \"text/vnd.in3d.3dml\": [\"3dml\"],\n \"text/vnd.in3d.spot\": [\"spot\"],\n \"text/vnd.sun.j2me.app-descriptor\": [\"jad\"],\n \"text/vnd.wap.wml\": [\"wml\"],\n \"text/vnd.wap.wmlscript\": [\"wmls\"],\n \"text/x-asm\": [\"s\", \"asm\"],\n \"text/x-c\": [\"c\", \"cc\", \"cxx\", \"cpp\", \"h\", \"hh\", \"dic\"],\n \"text/x-component\": [\"htc\"],\n \"text/x-fortran\": [\"f\", \"for\", \"f77\", \"f90\"],\n \"text/x-handlebars-template\": [\"hbs\"],\n \"text/x-java-source\": [\"java\"],\n \"text/x-lua\": [\"lua\"],\n \"text/x-markdown\": [\"mkd\"],\n \"text/x-nfo\": [\"nfo\"],\n \"text/x-opml\": [\"opml\"],\n \"text/x-org\": [\"*org\"],\n \"text/x-pascal\": [\"p\", \"pas\"],\n \"text/x-processing\": [\"pde\"],\n \"text/x-sass\": [\"sass\"],\n \"text/x-scss\": [\"scss\"],\n \"text/x-setext\": [\"etx\"],\n \"text/x-sfv\": [\"sfv\"],\n \"text/x-suse-ymp\": [\"ymp\"],\n \"text/x-uuencode\": [\"uu\"],\n \"text/x-vcalendar\": [\"vcs\"],\n \"text/x-vcard\": [\"vcf\"],\n \"video/vnd.dece.hd\": [\"uvh\", \"uvvh\"],\n \"video/vnd.dece.mobile\": [\"uvm\", \"uvvm\"],\n \"video/vnd.dece.pd\": [\"uvp\", \"uvvp\"],\n \"video/vnd.dece.sd\": [\"uvs\", \"uvvs\"],\n \"video/vnd.dece.video\": [\"uvv\", \"uvvv\"],\n \"video/vnd.dvb.file\": [\"dvb\"],\n \"video/vnd.fvt\": [\"fvt\"],\n \"video/vnd.mpegurl\": [\"mxu\", \"m4u\"],\n \"video/vnd.ms-playready.media.pyv\": [\"pyv\"],\n \"video/vnd.uvvu.mp4\": [\"uvu\", \"uvvu\"],\n \"video/vnd.vivo\": [\"viv\"],\n \"video/x-f4v\": [\"f4v\"],\n \"video/x-fli\": [\"fli\"],\n \"video/x-flv\": [\"flv\"],\n \"video/x-m4v\": [\"m4v\"],\n \"video/x-matroska\": [\"mkv\", \"mk3d\", \"mks\"],\n \"video/x-mng\": [\"mng\"],\n \"video/x-ms-asf\": [\"asf\", \"asx\"],\n \"video/x-ms-vob\": [\"vob\"],\n \"video/x-ms-wm\": [\"wm\"],\n \"video/x-ms-wmv\": [\"wmv\"],\n \"video/x-ms-wmx\": [\"wmx\"],\n \"video/x-ms-wvx\": [\"wvx\"],\n \"video/x-msvideo\": [\"avi\"],\n \"video/x-sgi-movie\": [\"movie\"],\n \"video/x-smv\": [\"smv\"],\n \"x-conference/x-cooltalk\": [\"ice\"]\n};\nObject.freeze(types);\nexport default types;\n","const types = {\n \"application/andrew-inset\": [\"ez\"],\n \"application/appinstaller\": [\"appinstaller\"],\n \"application/applixware\": [\"aw\"],\n \"application/appx\": [\"appx\"],\n \"application/appxbundle\": [\"appxbundle\"],\n \"application/atom+xml\": [\"atom\"],\n \"application/atomcat+xml\": [\"atomcat\"],\n \"application/atomdeleted+xml\": [\"atomdeleted\"],\n \"application/atomsvc+xml\": [\"atomsvc\"],\n \"application/atsc-dwd+xml\": [\"dwd\"],\n \"application/atsc-held+xml\": [\"held\"],\n \"application/atsc-rsat+xml\": [\"rsat\"],\n \"application/automationml-aml+xml\": [\"aml\"],\n \"application/automationml-amlx+zip\": [\"amlx\"],\n \"application/bdoc\": [\"bdoc\"],\n \"application/calendar+xml\": [\"xcs\"],\n \"application/ccxml+xml\": [\"ccxml\"],\n \"application/cdfx+xml\": [\"cdfx\"],\n \"application/cdmi-capability\": [\"cdmia\"],\n \"application/cdmi-container\": [\"cdmic\"],\n \"application/cdmi-domain\": [\"cdmid\"],\n \"application/cdmi-object\": [\"cdmio\"],\n \"application/cdmi-queue\": [\"cdmiq\"],\n \"application/cpl+xml\": [\"cpl\"],\n \"application/cu-seeme\": [\"cu\"],\n \"application/cwl\": [\"cwl\"],\n \"application/dash+xml\": [\"mpd\"],\n \"application/dash-patch+xml\": [\"mpp\"],\n \"application/davmount+xml\": [\"davmount\"],\n \"application/docbook+xml\": [\"dbk\"],\n \"application/dssc+der\": [\"dssc\"],\n \"application/dssc+xml\": [\"xdssc\"],\n \"application/ecmascript\": [\"ecma\"],\n \"application/emma+xml\": [\"emma\"],\n \"application/emotionml+xml\": [\"emotionml\"],\n \"application/epub+zip\": [\"epub\"],\n \"application/exi\": [\"exi\"],\n \"application/express\": [\"exp\"],\n \"application/fdf\": [\"fdf\"],\n \"application/fdt+xml\": [\"fdt\"],\n \"application/font-tdpfr\": [\"pfr\"],\n \"application/geo+json\": [\"geojson\"],\n \"application/gml+xml\": [\"gml\"],\n \"application/gpx+xml\": [\"gpx\"],\n \"application/gxf\": [\"gxf\"],\n \"application/gzip\": [\"gz\"],\n \"application/hjson\": [\"hjson\"],\n \"application/hyperstudio\": [\"stk\"],\n \"application/inkml+xml\": [\"ink\", \"inkml\"],\n \"application/ipfix\": [\"ipfix\"],\n \"application/its+xml\": [\"its\"],\n \"application/java-archive\": [\"jar\", \"war\", \"ear\"],\n \"application/java-serialized-object\": [\"ser\"],\n \"application/java-vm\": [\"class\"],\n \"application/javascript\": [\"*js\"],\n \"application/json\": [\"json\", \"map\"],\n \"application/json5\": [\"json5\"],\n \"application/jsonml+json\": [\"jsonml\"],\n \"application/ld+json\": [\"jsonld\"],\n \"application/lgr+xml\": [\"lgr\"],\n \"application/lost+xml\": [\"lostxml\"],\n \"application/mac-binhex40\": [\"hqx\"],\n \"application/mac-compactpro\": [\"cpt\"],\n \"application/mads+xml\": [\"mads\"],\n \"application/manifest+json\": [\"webmanifest\"],\n \"application/marc\": [\"mrc\"],\n \"application/marcxml+xml\": [\"mrcx\"],\n \"application/mathematica\": [\"ma\", \"nb\", \"mb\"],\n \"application/mathml+xml\": [\"mathml\"],\n \"application/mbox\": [\"mbox\"],\n \"application/media-policy-dataset+xml\": [\"mpf\"],\n \"application/mediaservercontrol+xml\": [\"mscml\"],\n \"application/metalink+xml\": [\"metalink\"],\n \"application/metalink4+xml\": [\"meta4\"],\n \"application/mets+xml\": [\"mets\"],\n \"application/mmt-aei+xml\": [\"maei\"],\n \"application/mmt-usd+xml\": [\"musd\"],\n \"application/mods+xml\": [\"mods\"],\n \"application/mp21\": [\"m21\", \"mp21\"],\n \"application/mp4\": [\"*mp4\", \"*mpg4\", \"mp4s\", \"m4p\"],\n \"application/msix\": [\"msix\"],\n \"application/msixbundle\": [\"msixbundle\"],\n \"application/msword\": [\"doc\", \"dot\"],\n \"application/mxf\": [\"mxf\"],\n \"application/n-quads\": [\"nq\"],\n \"application/n-triples\": [\"nt\"],\n \"application/node\": [\"cjs\"],\n \"application/octet-stream\": [\"bin\", \"dms\", \"lrf\", \"mar\", \"so\", \"dist\", \"distz\", \"pkg\", \"bpk\", \"dump\", \"elc\", \"deploy\", \"exe\", \"dll\", \"deb\", \"dmg\", \"iso\", \"img\", \"msi\", \"msp\", \"msm\", \"buffer\"],\n \"application/oda\": [\"oda\"],\n \"application/oebps-package+xml\": [\"opf\"],\n \"application/ogg\": [\"ogx\"],\n \"application/omdoc+xml\": [\"omdoc\"],\n \"application/onenote\": [\"onetoc\", \"onetoc2\", \"onetmp\", \"onepkg\"],\n \"application/oxps\": [\"oxps\"],\n \"application/p2p-overlay+xml\": [\"relo\"],\n \"application/patch-ops-error+xml\": [\"xer\"],\n \"application/pdf\": [\"pdf\"],\n \"application/pgp-encrypted\": [\"pgp\"],\n \"application/pgp-keys\": [\"asc\"],\n \"application/pgp-signature\": [\"sig\", \"*asc\"],\n \"application/pics-rules\": [\"prf\"],\n \"application/pkcs10\": [\"p10\"],\n \"application/pkcs7-mime\": [\"p7m\", \"p7c\"],\n \"application/pkcs7-signature\": [\"p7s\"],\n \"application/pkcs8\": [\"p8\"],\n \"application/pkix-attr-cert\": [\"ac\"],\n \"application/pkix-cert\": [\"cer\"],\n \"application/pkix-crl\": [\"crl\"],\n \"application/pkix-pkipath\": [\"pkipath\"],\n \"application/pkixcmp\": [\"pki\"],\n \"application/pls+xml\": [\"pls\"],\n \"application/postscript\": [\"ai\", \"eps\", \"ps\"],\n \"application/provenance+xml\": [\"provx\"],\n \"application/pskc+xml\": [\"pskcxml\"],\n \"application/raml+yaml\": [\"raml\"],\n \"application/rdf+xml\": [\"rdf\", \"owl\"],\n \"application/reginfo+xml\": [\"rif\"],\n \"application/relax-ng-compact-syntax\": [\"rnc\"],\n \"application/resource-lists+xml\": [\"rl\"],\n \"application/resource-lists-diff+xml\": [\"rld\"],\n \"application/rls-services+xml\": [\"rs\"],\n \"application/route-apd+xml\": [\"rapd\"],\n \"application/route-s-tsid+xml\": [\"sls\"],\n \"application/route-usd+xml\": [\"rusd\"],\n \"application/rpki-ghostbusters\": [\"gbr\"],\n \"application/rpki-manifest\": [\"mft\"],\n \"application/rpki-roa\": [\"roa\"],\n \"application/rsd+xml\": [\"rsd\"],\n \"application/rss+xml\": [\"rss\"],\n \"application/rtf\": [\"rtf\"],\n \"application/sbml+xml\": [\"sbml\"],\n \"application/scvp-cv-request\": [\"scq\"],\n \"application/scvp-cv-response\": [\"scs\"],\n \"application/scvp-vp-request\": [\"spq\"],\n \"application/scvp-vp-response\": [\"spp\"],\n \"application/sdp\": [\"sdp\"],\n \"application/senml+xml\": [\"senmlx\"],\n \"application/sensml+xml\": [\"sensmlx\"],\n \"application/set-payment-initiation\": [\"setpay\"],\n \"application/set-registration-initiation\": [\"setreg\"],\n \"application/shf+xml\": [\"shf\"],\n \"application/sieve\": [\"siv\", \"sieve\"],\n \"application/smil+xml\": [\"smi\", \"smil\"],\n \"application/sparql-query\": [\"rq\"],\n \"application/sparql-results+xml\": [\"srx\"],\n \"application/sql\": [\"sql\"],\n \"application/srgs\": [\"gram\"],\n \"application/srgs+xml\": [\"grxml\"],\n \"application/sru+xml\": [\"sru\"],\n \"application/ssdl+xml\": [\"ssdl\"],\n \"application/ssml+xml\": [\"ssml\"],\n \"application/swid+xml\": [\"swidtag\"],\n \"application/tei+xml\": [\"tei\", \"teicorpus\"],\n \"application/thraud+xml\": [\"tfi\"],\n \"application/timestamped-data\": [\"tsd\"],\n \"application/toml\": [\"toml\"],\n \"application/trig\": [\"trig\"],\n \"application/ttml+xml\": [\"ttml\"],\n \"application/ubjson\": [\"ubj\"],\n \"application/urc-ressheet+xml\": [\"rsheet\"],\n \"application/urc-targetdesc+xml\": [\"td\"],\n \"application/voicexml+xml\": [\"vxml\"],\n \"application/wasm\": [\"wasm\"],\n \"application/watcherinfo+xml\": [\"wif\"],\n \"application/widget\": [\"wgt\"],\n \"application/winhlp\": [\"hlp\"],\n \"application/wsdl+xml\": [\"wsdl\"],\n \"application/wspolicy+xml\": [\"wspolicy\"],\n \"application/xaml+xml\": [\"xaml\"],\n \"application/xcap-att+xml\": [\"xav\"],\n \"application/xcap-caps+xml\": [\"xca\"],\n \"application/xcap-diff+xml\": [\"xdf\"],\n \"application/xcap-el+xml\": [\"xel\"],\n \"application/xcap-ns+xml\": [\"xns\"],\n \"application/xenc+xml\": [\"xenc\"],\n \"application/xfdf\": [\"xfdf\"],\n \"application/xhtml+xml\": [\"xhtml\", \"xht\"],\n \"application/xliff+xml\": [\"xlf\"],\n \"application/xml\": [\"xml\", \"xsl\", \"xsd\", \"rng\"],\n \"application/xml-dtd\": [\"dtd\"],\n \"application/xop+xml\": [\"xop\"],\n \"application/xproc+xml\": [\"xpl\"],\n \"application/xslt+xml\": [\"*xsl\", \"xslt\"],\n \"application/xspf+xml\": [\"xspf\"],\n \"application/xv+xml\": [\"mxml\", \"xhvml\", \"xvml\", \"xvm\"],\n \"application/yang\": [\"yang\"],\n \"application/yin+xml\": [\"yin\"],\n \"application/zip\": [\"zip\"],\n \"audio/3gpp\": [\"*3gpp\"],\n \"audio/aac\": [\"adts\", \"aac\"],\n \"audio/adpcm\": [\"adp\"],\n \"audio/amr\": [\"amr\"],\n \"audio/basic\": [\"au\", \"snd\"],\n \"audio/midi\": [\"mid\", \"midi\", \"kar\", \"rmi\"],\n \"audio/mobile-xmf\": [\"mxmf\"],\n \"audio/mp3\": [\"*mp3\"],\n \"audio/mp4\": [\"m4a\", \"mp4a\"],\n \"audio/mpeg\": [\"mpga\", \"mp2\", \"mp2a\", \"mp3\", \"m2a\", \"m3a\"],\n \"audio/ogg\": [\"oga\", \"ogg\", \"spx\", \"opus\"],\n \"audio/s3m\": [\"s3m\"],\n \"audio/silk\": [\"sil\"],\n \"audio/wav\": [\"wav\"],\n \"audio/wave\": [\"*wav\"],\n \"audio/webm\": [\"weba\"],\n \"audio/xm\": [\"xm\"],\n \"font/collection\": [\"ttc\"],\n \"font/otf\": [\"otf\"],\n \"font/ttf\": [\"ttf\"],\n \"font/woff\": [\"woff\"],\n \"font/woff2\": [\"woff2\"],\n \"image/aces\": [\"exr\"],\n \"image/apng\": [\"apng\"],\n \"image/avci\": [\"avci\"],\n \"image/avcs\": [\"avcs\"],\n \"image/avif\": [\"avif\"],\n \"image/bmp\": [\"bmp\", \"dib\"],\n \"image/cgm\": [\"cgm\"],\n \"image/dicom-rle\": [\"drle\"],\n \"image/dpx\": [\"dpx\"],\n \"image/emf\": [\"emf\"],\n \"image/fits\": [\"fits\"],\n \"image/g3fax\": [\"g3\"],\n \"image/gif\": [\"gif\"],\n \"image/heic\": [\"heic\"],\n \"image/heic-sequence\": [\"heics\"],\n \"image/heif\": [\"heif\"],\n \"image/heif-sequence\": [\"heifs\"],\n \"image/hej2k\": [\"hej2\"],\n \"image/hsj2\": [\"hsj2\"],\n \"image/ief\": [\"ief\"],\n \"image/jls\": [\"jls\"],\n \"image/jp2\": [\"jp2\", \"jpg2\"],\n \"image/jpeg\": [\"jpeg\", \"jpg\", \"jpe\"],\n \"image/jph\": [\"jph\"],\n \"image/jphc\": [\"jhc\"],\n \"image/jpm\": [\"jpm\", \"jpgm\"],\n \"image/jpx\": [\"jpx\", \"jpf\"],\n \"image/jxr\": [\"jxr\"],\n \"image/jxra\": [\"jxra\"],\n \"image/jxrs\": [\"jxrs\"],\n \"image/jxs\": [\"jxs\"],\n \"image/jxsc\": [\"jxsc\"],\n \"image/jxsi\": [\"jxsi\"],\n \"image/jxss\": [\"jxss\"],\n \"image/ktx\": [\"ktx\"],\n \"image/ktx2\": [\"ktx2\"],\n \"image/png\": [\"png\"],\n \"image/sgi\": [\"sgi\"],\n \"image/svg+xml\": [\"svg\", \"svgz\"],\n \"image/t38\": [\"t38\"],\n \"image/tiff\": [\"tif\", \"tiff\"],\n \"image/tiff-fx\": [\"tfx\"],\n \"image/webp\": [\"webp\"],\n \"image/wmf\": [\"wmf\"],\n \"message/disposition-notification\": [\"disposition-notification\"],\n \"message/global\": [\"u8msg\"],\n \"message/global-delivery-status\": [\"u8dsn\"],\n \"message/global-disposition-notification\": [\"u8mdn\"],\n \"message/global-headers\": [\"u8hdr\"],\n \"message/rfc822\": [\"eml\", \"mime\"],\n \"model/3mf\": [\"3mf\"],\n \"model/gltf+json\": [\"gltf\"],\n \"model/gltf-binary\": [\"glb\"],\n \"model/iges\": [\"igs\", \"iges\"],\n \"model/jt\": [\"jt\"],\n \"model/mesh\": [\"msh\", \"mesh\", \"silo\"],\n \"model/mtl\": [\"mtl\"],\n \"model/obj\": [\"obj\"],\n \"model/prc\": [\"prc\"],\n \"model/step+xml\": [\"stpx\"],\n \"model/step+zip\": [\"stpz\"],\n \"model/step-xml+zip\": [\"stpxz\"],\n \"model/stl\": [\"stl\"],\n \"model/u3d\": [\"u3d\"],\n \"model/vrml\": [\"wrl\", \"vrml\"],\n \"model/x3d+binary\": [\"*x3db\", \"x3dbz\"],\n \"model/x3d+fastinfoset\": [\"x3db\"],\n \"model/x3d+vrml\": [\"*x3dv\", \"x3dvz\"],\n \"model/x3d+xml\": [\"x3d\", \"x3dz\"],\n \"model/x3d-vrml\": [\"x3dv\"],\n \"text/cache-manifest\": [\"appcache\", \"manifest\"],\n \"text/calendar\": [\"ics\", \"ifb\"],\n \"text/coffeescript\": [\"coffee\", \"litcoffee\"],\n \"text/css\": [\"css\"],\n \"text/csv\": [\"csv\"],\n \"text/html\": [\"html\", \"htm\", \"shtml\"],\n \"text/jade\": [\"jade\"],\n \"text/javascript\": [\"js\", \"mjs\"],\n \"text/jsx\": [\"jsx\"],\n \"text/less\": [\"less\"],\n \"text/markdown\": [\"md\", \"markdown\"],\n \"text/mathml\": [\"mml\"],\n \"text/mdx\": [\"mdx\"],\n \"text/n3\": [\"n3\"],\n \"text/plain\": [\"txt\", \"text\", \"conf\", \"def\", \"list\", \"log\", \"in\", \"ini\"],\n \"text/richtext\": [\"rtx\"],\n \"text/rtf\": [\"*rtf\"],\n \"text/sgml\": [\"sgml\", \"sgm\"],\n \"text/shex\": [\"shex\"],\n \"text/slim\": [\"slim\", \"slm\"],\n \"text/spdx\": [\"spdx\"],\n \"text/stylus\": [\"stylus\", \"styl\"],\n \"text/tab-separated-values\": [\"tsv\"],\n \"text/troff\": [\"t\", \"tr\", \"roff\", \"man\", \"me\", \"ms\"],\n \"text/turtle\": [\"ttl\"],\n \"text/uri-list\": [\"uri\", \"uris\", \"urls\"],\n \"text/vcard\": [\"vcard\"],\n \"text/vtt\": [\"vtt\"],\n \"text/wgsl\": [\"wgsl\"],\n \"text/xml\": [\"*xml\"],\n \"text/yaml\": [\"yaml\", \"yml\"],\n \"video/3gpp\": [\"3gp\", \"3gpp\"],\n \"video/3gpp2\": [\"3g2\"],\n \"video/h261\": [\"h261\"],\n \"video/h263\": [\"h263\"],\n \"video/h264\": [\"h264\"],\n \"video/iso.segment\": [\"m4s\"],\n \"video/jpeg\": [\"jpgv\"],\n \"video/jpm\": [\"*jpm\", \"*jpgm\"],\n \"video/mj2\": [\"mj2\", \"mjp2\"],\n \"video/mp2t\": [\"ts\"],\n \"video/mp4\": [\"mp4\", \"mp4v\", \"mpg4\"],\n \"video/mpeg\": [\"mpeg\", \"mpg\", \"mpe\", \"m1v\", \"m2v\"],\n \"video/ogg\": [\"ogv\"],\n \"video/quicktime\": [\"qt\", \"mov\"],\n \"video/webm\": [\"webm\"]\n};\nObject.freeze(types);\nexport default types;\n","var __classPrivateFieldGet = this && this.__classPrivateFieldGet || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Mime_extensionToType, _Mime_typeToExtension, _Mime_typeToExtensions;\nclass Mime {\n constructor(...args) {\n _Mime_extensionToType.set(this, new Map());\n _Mime_typeToExtension.set(this, new Map());\n _Mime_typeToExtensions.set(this, new Map());\n for (const arg of args) {\n this.define(arg);\n }\n }\n define(typeMap, force = false) {\n for (let [type, extensions] of Object.entries(typeMap)) {\n type = type.toLowerCase();\n extensions = extensions.map(ext => ext.toLowerCase());\n if (!__classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").has(type)) {\n __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").set(type, new Set());\n }\n const allExtensions = __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").get(type);\n let first = true;\n for (let extension of extensions) {\n const starred = extension.startsWith('*');\n extension = starred ? extension.slice(1) : extension;\n allExtensions?.add(extension);\n if (first) {\n __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\").set(type, extension);\n }\n first = false;\n if (starred) continue;\n const currentType = __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").get(extension);\n if (currentType && currentType != type && !force) {\n throw new Error(`\"${type} -> ${extension}\" conflicts with \"${currentType} -> ${extension}\". Pass \\`force=true\\` to override this definition.`);\n }\n __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").set(extension, type);\n }\n }\n return this;\n }\n getType(path) {\n if (typeof path !== 'string') return null;\n const last = path.replace(/^.*[/\\\\]/, '').toLowerCase();\n const ext = last.replace(/^.*\\./, '').toLowerCase();\n const hasPath = last.length < path.length;\n const hasDot = ext.length < last.length - 1;\n if (!hasDot && hasPath) return null;\n return __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").get(ext) ?? null;\n }\n getExtension(type) {\n if (typeof type !== 'string') return null;\n type = type?.split?.(';')[0];\n return (type && __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\").get(type.trim().toLowerCase())) ?? null;\n }\n getAllExtensions(type) {\n if (typeof type !== 'string') return null;\n return __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").get(type.toLowerCase()) ?? null;\n }\n _freeze() {\n this.define = () => {\n throw new Error('define() not allowed for built-in Mime objects. See https://github.com/broofa/mime/blob/main/README.md#custom-mime-instances');\n };\n Object.freeze(this);\n for (const extensions of __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").values()) {\n Object.freeze(extensions);\n }\n return this;\n }\n _getTestState() {\n return {\n types: __classPrivateFieldGet(this, _Mime_extensionToType, \"f\"),\n extensions: __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\")\n };\n }\n}\n_Mime_extensionToType = new WeakMap(), _Mime_typeToExtension = new WeakMap(), _Mime_typeToExtensions = new WeakMap();\nexport default Mime;\n","import otherTypes from '../types/other.js';\nimport standardTypes from '../types/standard.js';\nimport Mime from './Mime.js';\nexport { default as Mime } from './Mime.js';\nexport default new Mime(standardTypes, otherTypes)._freeze();\n","import { Component, HostBinding, Input, OnChanges, SimpleChange, SimpleChanges } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\n/** Prefix for the path to i18n keys for this component */\nconst I18N_PREFIX = 'GALAXY.UPLOADER.CONSTRAINTS';\n\n/** Quick access to keys specifically used by this component */\nconst I18NKeys = {\n image: `${I18N_PREFIX}.IMAGE_TYPE`,\n images: `${I18N_PREFIX}.IMAGE_TYPE_PLURAL`,\n video: `${I18N_PREFIX}.VIDEO_TYPE`,\n audio: `${I18N_PREFIX}.AUDIO_TYPE`,\n and: `${I18N_PREFIX}.AND`,\n};\n\n/**\n * Quick access to file group specifiers.\n * Can expand if we want to accept more types, IE) application/*\n */\nconst FileGroupSpecifier = {\n image: 'image/*',\n video: 'video/*',\n audio: 'audio/*',\n};\n\n@Component({\n selector: 'glxy-uploader-constraints-text',\n templateUrl: './uploader-constraints-text.component.html',\n styleUrls: ['./uploader-constraints-text.component.scss'],\n})\nexport class GalaxyUploaderConstraintsTextComponent implements OnChanges {\n @HostBinding('class') class = 'glxy-uploader-constraints-text';\n\n /** Max number of files that can be uploaded */\n @Input() maxFiles?: number;\n\n /** Max size of files that can be uploaded */\n @Input() maxFileSize?: number;\n\n /** Accept list for file types that can be uploaded */\n @Input() accept?: string;\n\n /** If provided, will be used instead of generated text */\n @Input() text?: string;\n\n acceptDisplay?: string;\n fileSizeDisplay?: string;\n\n constructor(private translate: TranslateService) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n const { accept = {} as SimpleChange, maxFileSize = {} as SimpleChange, text = {} as SimpleChange } = changes;\n\n // Bail out early to avoid unecessary text generation\n if (text.currentValue !== undefined && text.currentValue !== null) {\n return;\n }\n\n if (accept.currentValue !== accept.previousValue) {\n this.acceptDisplay = this.convertAcceptToDisplay(this.accept || '');\n }\n\n if (maxFileSize.currentValue !== maxFileSize.previousValue) {\n this.fileSizeDisplay = this.convertSizeToDisplay(this.maxFileSize || 0);\n }\n }\n\n /**\n * Given the accept list, break it down into a series of display values\n *\n * @param accept - accept list provided to the component\n */\n private convertAcceptToDisplay(accept: string): string {\n const list = accept\n .trim()\n .split(',')\n .map((spec: string) => this.specifierToDisplay(spec));\n\n // Uppercase the first character if sentence doesn't start with max files\n if (!this.maxFiles) {\n const first = list[0].split('');\n first[0] = first[0].toUpperCase();\n list[0] = first.join('');\n }\n\n let joinChar = '';\n if (list.length > 2) {\n // Comma separated for three or more\n // PDF, JPEG, Video\n joinChar = ', ';\n } else if (list.length === 2) {\n // And separated for two\n // PDF and JPEG\n joinChar = this.translate.instant(I18NKeys.and);\n joinChar = ` ${joinChar} `;\n } else {\n // For images, remove 'files' off the end\n // \"Up to X images\"\n if (list[0] === this.translate.instant(I18NKeys.image)) {\n if (this.maxFiles && this.maxFiles > 1) {\n // pluralize\n list[0] = this.translate.instant(I18NKeys.images);\n }\n return list.join();\n }\n }\n\n return list.join(joinChar) + ' ' + this.translate.instant('GALAXY.UPLOADER.CONSTRAINTS.FILES');\n }\n\n /**\n * Convert a uniique file specifier into the right display format.\n * IE) image/* -> images, .pdf -> PDF\n *\n * @param fileType - The file type specifier to convert\n */\n private specifierToDisplay(fileType: string): string {\n switch (fileType) {\n case FileGroupSpecifier.audio:\n return this.translate.instant(I18NKeys.audio);\n case FileGroupSpecifier.image:\n return this.translate.instant(I18NKeys.image);\n case FileGroupSpecifier.video:\n return this.translate.instant(I18NKeys.video);\n default: {\n // If file extension, uppercase it and remove period\n const fileSplit = fileType.split('.');\n return (fileSplit[1] || fileSplit[0]).toUpperCase();\n }\n }\n }\n\n /**\n * Convert the max file size constraint to a display value\n * IE) 12 B, 7 KB, 100 MB\n *\n * @param maxSize - Max files size allowed for upload\n */\n private convertSizeToDisplay(maxSize: number): string {\n if (maxSize < 1024) {\n return maxSize + ' B';\n } else if (maxSize >= 1024 && maxSize < 1048576) {\n return (maxSize / 1024).toFixed(1) + ' KB';\n }\n return (maxSize / 1048576).toFixed(1) + ' MB';\n }\n}\n","\n {{ text | translate }}\n\n\n 0\">\n {{ 'GALAXY.UPLOADER.CONSTRAINTS.MAX_FILES_PREFIX' | translate }}\n {{ maxFiles }}\n \n {{ acceptDisplay }}\n 0\">\n 0)\">.\n {{ fileSizeDisplay }}\n {{ 'GALAXY.UPLOADER.CONSTRAINTS.MAX_FILE_SIZE' | translate }}\n \n\n","import { HttpClient } from '@angular/common/http';\nimport {\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Optional,\n Output,\n SimpleChange,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SnackbarService } from '@vendasta/galaxy/snackbar-service';\nimport { filter, tap } from 'rxjs/operators';\nimport { v4 as uuidv4 } from 'uuid';\nimport { FileInfo, FileUploadError, GALAXY_UPLOADER_SERVICE_TOKEN, UploadContext } from '../../uploader.interface';\nimport { GalaxyUploaderService } from '../../uploader.service';\nimport mime from 'mime';\n\nlet browserSupportsDrag: boolean | undefined;\n\nfunction changesValid(change: SimpleChange): boolean {\n if (!change) {\n return false;\n }\n\n return change.firstChange || (change.currentValue && change.currentValue !== change.previousValue);\n}\n\n@Component({\n selector: 'glxy-uploader',\n templateUrl: './uploader.component.html',\n styleUrls: ['./uploader.component.scss'],\n})\nexport class GalaxyUploaderComponent implements OnInit, OnChanges {\n @HostBinding('class') class = 'glxy-uploader';\n\n /**\n * Max number of files allowed to upload\n * 0 means no limit\n */\n @Input() maxFiles?: number;\n\n /**\n * Max files size, in bytes, of individual files that can be uploaded\n * 0 means no limit\n */\n @Input() maxFileSize?: number;\n\n /**\n * Comma separated file types to accept\n * See MDN on File Type Specifiers https://mzl.la/3gytrGi\n */\n @Input() accept?: string;\n\n /** URL to upload files to */\n @Input() uploadUrl!: string;\n\n /**\n * Number of parallel uploads to allow\n * 0 means no limit\n */\n @Input() numParallel?: number = 10;\n\n /** Whether or not to upload files when they are added to the list */\n @Input() autoUpload = true;\n\n /** Choose the the layout of the component */\n @Input() layout: 'default' | 'horizontal' | 'button-only' = 'default';\n\n /** Base set of files that the service should manage */\n @Input() files: FileInfo[] = [];\n\n /** If provided, will be used as the hint instead of the file constraints text */\n @Input() hintText?: string;\n\n /** If provided, will override the button text. First item is singular, second is plural */\n @Input() buttonText: [string, string] = ['GALAXY.UPLOADER.CHOOSE_FILE', 'GALAXY.UPLOADER.CHOOSE_FILE_PL'];\n\n /** If provided, will override the desription text. First item is singular, second is plural */\n @Input() descriptionText: [string, string] = ['GALAXY.UPLOADER.DRAG_AND_DROP', 'GALAXY.UPLOADER.DRAG_AND_DROP_PL'];\n\n /** If provided, color the outline red to imply uploader has an error */\n @HostBinding('class.has-error')\n @Input()\n hasError = false;\n\n /**\n * Emits events related to the status of uploads and file selection\n */\n @Output() fileUploadErrored: EventEmitter = new EventEmitter();\n\n /**\n * Emits info for files uploaded successfully\n */\n @Output() fileUploaded: EventEmitter = new EventEmitter();\n\n /**\n * Emits the list of files and their status when changes occur\n */\n @Output() filesChanged: EventEmitter = new EventEmitter();\n\n @ViewChild('fileInput') fileInputEl?: ElementRef;\n @ViewChild('dropTarget') dropTargetEl?: ElementRef;\n\n supportsDrag: boolean = this.testDragSupport();\n\n private uuid: string = uuidv4();\n\n constructor(\n @Inject(GALAXY_UPLOADER_SERVICE_TOKEN) @Optional() public uploadService: GalaxyUploaderService,\n private http: HttpClient,\n private snackbarService: SnackbarService,\n private readonly destroyRef: DestroyRef,\n ) {\n if (!this.uploadService) {\n this.uploadService = new GalaxyUploaderService(this.http);\n }\n }\n\n ngOnInit(): void {\n this.uploadService.fileErrored$$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter((error) => !!error),\n )\n .subscribe({\n next: (error: FileUploadError | null) => {\n if (error) this.fileUploadErrored.emit(error);\n },\n });\n\n this.uploadService.fileUploaded$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter((fileInfo) => !!fileInfo),\n tap((fileInfo) =>\n !fileInfo.context?.uuid\n ? console.warn('No context on FileInfo. This may cause unrelated file upload components to update.')\n : undefined,\n ),\n filter((fileInfo) => fileInfo.context?.uuid === this.uuid || !fileInfo.context?.uuid),\n )\n .subscribe({\n next: (fileInfo: FileInfo) => this.fileUploaded.emit(fileInfo),\n });\n\n this.uploadService.files$$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter((filesChanged) => !!filesChanged),\n )\n .subscribe({\n next: (files: FileInfo[]) => this.filesChanged.emit(files),\n });\n\n this.uploadService.setFiles(this.files);\n if (this.maxFiles) this.uploadService.setMaxFiles(this.maxFiles);\n this.uploadService.setUploadUrl(this.uploadUrl);\n this.uploadService.setAutoUpload(this.autoUpload);\n if (this.maxFileSize) this.uploadService.setMaxFileSize(this.maxFileSize);\n if (this.numParallel) this.uploadService.setParallelUploads(this.numParallel);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changesValid(changes.files)) {\n this.uploadService.setFiles(this.files);\n }\n\n if (changesValid(changes.maxFiles)) {\n this.uploadService.setMaxFiles(changes.maxFiles.currentValue);\n }\n\n if (changesValid(changes.uploadUrl)) {\n this.uploadService.setUploadUrl(this.uploadUrl);\n }\n\n if (changesValid(changes.autoUpload)) {\n this.uploadService.setAutoUpload(this.autoUpload);\n }\n\n if (changesValid(changes.maxFileSize)) {\n this.uploadService.setMaxFileSize(changes.maxFileSize.currentValue);\n }\n\n if (changesValid(changes.numParallel)) {\n this.uploadService.setParallelUploads(changes.numParallel.currentValue);\n }\n }\n\n /**\n * Prevent bubbling of the DOM event to any other elements in the hierarchy.\n *\n * @param event - DOM event related to the input event\n */\n preventBubbling(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n }\n\n /**\n * Initiate the system file browser by proxying to\n * the hidden input element.\n */\n browseForFiles(): void {\n this.fileInputEl?.nativeElement.click();\n }\n\n /**\n * Event fired from the input event, when files have\n * been selected via the system browser.\n *\n * @param event - DOM event related to files being selected\n */\n filesSelected(event: any): void {\n const { files } = event.target;\n this.addFiles(files, { uuid: this.uuid });\n this.resetFileInput();\n }\n\n /**\n * Triggered when files have been dropped onto the drop target.\n *\n * @param event - DOM event related to fles being dropped on a drop target\n */\n filesDropped(event: any): void {\n const dt = event.dataTransfer;\n const files = dt.files;\n this.addFiles(files, { uuid: this.uuid });\n }\n\n /**\n * Sets the state of the drop target to indicate files can be dropped here.\n *\n * @param event - DOM event related to the drag action\n */\n dragOver(event: DragEvent): void {\n this.preventBubbling(event);\n this.dropTargetEl?.nativeElement.classList.add('dragging-over');\n }\n\n /**\n * Sets the state back from drag over to default state.\n *\n * @param event\n */\n dragDone(event: DragEvent): void {\n this.preventBubbling(event);\n this.dropTargetEl?.nativeElement.classList.remove('dragging-over');\n }\n\n /**\n * Tell the uploader service to remove a file from the upload queue.\n *\n * @param fileInfo - Info for the file to remove from the queue\n */\n deleteFile(fileInfo: FileInfo): void {\n this.uploadService.removeFile(fileInfo);\n }\n\n /**\n * Trigger the uploader service to upload all queued files.\n */\n uploadQueuedFiles(): void {\n this.uploadService.uploadQueuedFiles();\n }\n\n /**\n * Given a list of files, add them to the upload queue.\n *\n * @param files - List of File objects to add to the queue\n * @param context - Optional data to inform subscribers \"where\" this file was uploaded (e.g. from which component)\n */\n private addFiles(files: FileList, context?: UploadContext): void {\n const supportedFileType = this.isSupportedFileType(files);\n const supportedMaxSize = this.isSupportedMaxFileSize(files);\n\n if (!supportedFileType) {\n this.snackbarService.openErrorSnack('GALAXY.UPLOADER.ERROR.FILE_TYPE_NOT_SUPPORTED');\n return;\n }\n if (!supportedMaxSize) {\n this.snackbarService.openErrorSnack('GALAXY.UPLOADER.ERROR.MAX_FILE_SIZE_EXCEEDED');\n return;\n }\n\n Object.values(files).forEach((file: File) => this.uploadService.addFile(file, context));\n }\n\n /**\n * Tests to make sure the browser can support drag and\n * drop for file transfer.\n */\n private testDragSupport(): boolean {\n if (browserSupportsDrag === undefined) {\n browserSupportsDrag = 'draggable' in document.createElement('span');\n }\n\n return !!browserSupportsDrag;\n }\n\n /**\n * Resets file input after a file is uploaded.\n * Prevents scenario where user uploads a file, deletes it and then tries to upload it again.\n * The input HTML shouldn't block the file in this case.\n * @private\n */\n private resetFileInput(): void {\n if (this.fileInputEl) this.fileInputEl.nativeElement.value = null;\n }\n\n /**\n * Checks to see if the file type is supported by the uploader\n * @param files - List of File objects to validate file type\n * @private\n */\n\n private isSupportedFileType(files: FileList): boolean {\n const acceptedTypes = this.accept?.split(',').map((type) => {\n const trimmedType = type.trim();\n const mimeType = mime.getType(trimmedType);\n return mimeType || trimmedType;\n });\n\n if (!acceptedTypes) {\n return true;\n }\n\n // Check if .ico is an accepted type and include windows supported mimeType\n const containsIco = this.accept?.includes('.ico');\n if (containsIco) {\n acceptedTypes.push('image/x-icon');\n }\n\n return Array.from(files).every((file) => {\n return acceptedTypes.some((acceptedType) => {\n if (acceptedType.startsWith('*')) {\n // Accept any file type\n return true;\n } else if (acceptedType.endsWith('/*')) {\n // Check for wildcard pattern like image/*\n const prefix = acceptedType.slice(0, -1); // Remove the wildcard part\n return file.type.startsWith(prefix);\n } else {\n return file.type === acceptedType; // Exact match\n }\n });\n });\n }\n\n /**\n * Checks to see if the file size is supported by the uploader\n * @param files - List of File objects to validate file type\n * @private\n */\n private isSupportedMaxFileSize(files: FileList): boolean {\n const acceptedMaxFileSize = this.maxFileSize;\n\n if (acceptedMaxFileSize) {\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n if (file.size > acceptedMaxFileSize) {\n return false;\n }\n }\n }\n return true;\n }\n}\n","\n \n library_add\n
\n
\n \n {{ descriptionText[0] | translate }}\n \n \n {{ descriptionText[1] | translate }}\n \n
\n \n
\n
\n\n \n\n\n 1 ? '' : null\"\n type=\"file\"\n [accept]=\"accept\"\n (change)=\"filesSelected($event)\"\n/>\n","import {\n Component,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { GalaxyImageUploaderService, ImageDimensions } from '../../image-uploader.service';\nimport { FileInfo, FileUploadError, GALAXY_UPLOADER_SERVICE_TOKEN } from '../../uploader.interface';\nimport { GalaxyUploaderComponent } from '../uploader/uploader.component';\n\n@Component({\n selector: 'glxy-image-uploader',\n templateUrl: './image-uploader.component.html',\n styleUrls: ['./image-uploader.component.scss'],\n})\nexport class GalaxyImageUploaderComponent implements OnInit, OnChanges {\n @HostBinding('class') class = 'glxy-image-uploader';\n\n /**\n * Comma separated file types to accept\n * See MDN on File Type Specifiers https://mzl.la/3gytrGi\n */\n @Input() accept = 'image/*';\n\n /** Whether or not to upload files when they are added to the list */\n @Input() autoUpload = false;\n\n /** Choose the the layout of the component */\n @Input() layout: 'default' | 'horizontal' | 'button-only' = 'default';\n\n /**\n * Max number of files allowed to upload\n * 0 means no limit\n */\n @Input() maxFiles?: number;\n\n /** If provided, will not allow images larger than the size provided to be added to the queue. Bytes. */\n @Input() maxFileSize?: number;\n\n /** If provided, will not allow images larger than the dimensions provided to be added to the queue */\n @Input() maxDimensions?: ImageDimensions;\n\n /** If provided, will be used as the hint instead of the file constraints text */\n @Input() hintText?: string;\n\n /** If provided, will override the button text. First item is singular, second is plural */\n @Input() buttonText?: [string, string] = ['GALAXY.UPLOADER.CHOOSE_IMAGE', 'GALAXY.UPLOADER.CHOOSE_IMAGE_PL'];\n\n /** If provided, will override the desription text. First item is singular, second is plural */\n @Input() descriptionText?: [string, string] = [\n 'GALAXY.UPLOADER.DRAG_AND_DROP_IMAGE',\n 'GALAXY.UPLOADER.DRAG_AND_DROP_IMAGE_PL',\n ];\n\n /** If provided, color the uploader border red to imply uploader has an error */\n @Input() hasError = false;\n\n /** URL to upload files to */\n @Input() uploadUrl!: string;\n\n /**\n * Number of parallel uploads to allow\n * 0 means no limit\n */\n @Input() numParallel?: number = 10;\n\n /** Base set of files that the service should manage */\n @Input() files: FileInfo[] = [];\n\n /**\n * Emits events related to the status of uploads and file selection\n */\n @Output() fileUploadErrored: EventEmitter = new EventEmitter();\n\n /**\n * Emits info for files uploaded successfully\n */\n @Output() fileUploaded: EventEmitter = new EventEmitter();\n\n /**\n * Emits the list of files and their status when changes occur\n */\n @Output() filesChanged: EventEmitter = new EventEmitter();\n\n @ViewChild(GalaxyUploaderComponent) uploadComp?: GalaxyUploaderComponent;\n\n currentFile?: FileInfo;\n\n constructor(@Inject(GALAXY_UPLOADER_SERVICE_TOKEN) private uploadService: GalaxyImageUploaderService) {}\n\n ngOnInit(): void {\n if (this.maxDimensions) this.uploadService.setMaxDimensions(this.maxDimensions);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.maxDimensions && changes.maxDimensions.previousValue !== changes.maxDimensions.currentValue) {\n if (this.maxDimensions) this.uploadService.setMaxDimensions(this.maxDimensions);\n }\n }\n\n /**\n * Trigger all images in the queue to be uploaded\n */\n public uploadQueuedFiles(): void {\n this.uploadService.uploadQueuedFiles();\n }\n\n public deleteFile(file: FileInfo): void {\n this.uploadService.removeFile(file);\n }\n}\n","\n","import { Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';\nimport { FileInfo, FileUploadStatus } from '../../uploader.interface';\n\n@Component({\n selector: 'glxy-uploader-file',\n templateUrl: './uploader-file.component.html',\n styleUrls: ['./uploader-file.component.scss'],\n})\nexport class GalaxyUploaderFileComponent {\n @HostBinding('class') class = 'glxy-uploader-file';\n\n @Input() status: FileUploadStatus = FileUploadStatus.InProgress;\n\n @Input() name!: string;\n\n @Input() url?: string;\n\n @Output() deleted: EventEmitter = new EventEmitter();\n\n FileUploadStatus = FileUploadStatus;\n\n /**\n * Emits a delete message when delete button has been selected.\n */\n deleteClick(): void {\n this.deleted.emit();\n }\n}\n","
\n \n\n {{ name }}\n \n {{ name }}\n \n
\n\n\n","import { Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';\nimport { FileInfo } from '../../uploader.interface';\n\n@Component({\n selector: 'glxy-uploader-list',\n templateUrl: './uploader-list.component.html',\n styleUrls: ['./uploader-list.component.scss'],\n})\nexport class GalaxyUploaderListComponent {\n @HostBinding('class') class = 'glxy-uploader-list';\n\n @Input() files: FileInfo[] = [];\n\n @Output() fileDeleted: EventEmitter = new EventEmitter();\n\n /**\n * Emits the file to delete, when the delete button of an entry is selected\n *\n * @param fileInfo - The file to delete from the file list\n */\n deleteFile(fileInfo: FileInfo): void {\n this.fileDeleted.emit(fileInfo);\n }\n}\n","
0\" class=\"files-list\">\n \n 0; else noObservers\"\n [status]=\"file.status\"\n [name]=\"file.name\"\n [url]=\"file.url\"\n (deleted)=\"deleteFile(file)\"\n >\n\n \n \n \n \n
\n","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { GalaxyUploaderComponent } from '../../uploader.module';\n\n@Component({\n selector: 'glxy-file-drag-drop',\n templateUrl: './file-drag-drop.component.html',\n styleUrls: ['./file-drag-drop.component.scss'],\n})\nexport class GalaxyFileDragDropComponent {\n @Input({ required: true }) uploaderTarget!: GalaxyUploaderComponent;\n @Input() uploadingBlocked = false;\n @ViewChild('dropTarget') dropTargetEl: ElementRef | undefined;\n\n currentTimeout: number | null = null;\n\n preventBubbling(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n }\n\n dragEnter(event: Event): void {\n if (this.uploadingBlocked) return;\n if (this.currentTimeout) window.clearTimeout(this.currentTimeout);\n this.preventBubbling(event);\n this.dropTargetEl?.nativeElement.classList.add('dragging-over');\n }\n\n dragLeave(event: Event): void {\n if (this.uploadingBlocked) return;\n this.currentTimeout = window.setTimeout(() => {\n this.dropTargetEl?.nativeElement.classList.remove('dragging-over');\n }, 100);\n this.preventBubbling(event);\n }\n fileDropped(event: Event): void {\n if (this.uploadingBlocked === true) return;\n this.preventBubbling(event);\n this.uploaderTarget.filesDropped(event);\n }\n}\n","\n
\n
\n library_add\n
\n {{ 'GALAXY.UPLOADER.DRAG_AND_DROP_PL' | translate }}\n
\n
\n \n\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { GalaxyFormFieldModule } from '@vendasta/galaxy/form-field';\nimport { GalaxyLoadingSpinnerModule } from '@vendasta/galaxy/loading-spinner';\n\nimport { GalaxyImageEditorComponent } from './components/image-editor/image-editor.component';\nexport { AspectRatioPreset, GalaxyImageEditorComponent } from './components/image-editor/image-editor.component';\nexport { GalaxyImageListComponent } from './components/image-list/image-list.component';\nexport { GalaxyImageUploadTileComponent } from './components/image-upload-tile/image-upload-tile.component';\nexport { GalaxyImageUploaderComponent } from './components/image-uploader/image-uploader.component';\nexport { GalaxyUploaderListComponent } from './components/uploader-list/uploader-list.component';\nexport { GalaxyUploaderComponent } from './components/uploader/uploader.component';\n\nimport { GalaxyImageListComponent } from './components/image-list/image-list.component';\n\nimport { GalaxyImageUploadTileComponent } from './components/image-upload-tile/image-upload-tile.component';\n\nimport { GalaxyImageUploaderComponent } from './components/image-uploader/image-uploader.component';\n\nimport { GalaxyUploaderConstraintsTextComponent } from './components/uploader-constraints-text/uploader-constraints-text.component';\nimport { GalaxyUploaderFileStatusComponent } from './components/uploader-file-status/uploader-file-status.component';\nimport { GalaxyUploaderFileComponent } from './components/uploader-file/uploader-file.component';\n\nimport { GalaxyUploaderListComponent } from './components/uploader-list/uploader-list.component';\n\nimport { GalaxyFileDragDropComponent } from './components/file-drag-drop/file-drag-drop.component';\nimport { GalaxyUploaderComponent } from './components/uploader/uploader.component';\n\nexport { GalaxyImageUploaderService } from './image-uploader.service';\nexport { GalaxyUploaderService } from './uploader.service';\n\nexport { GalaxyFileDragDropComponent as FileDragDropComponent } from './components/file-drag-drop/file-drag-drop.component';\n\nexport const MODULE_IMPORTS = [\n CommonModule,\n MatButtonModule,\n MatProgressSpinnerModule,\n MatIconModule,\n TranslateModule,\n MatInputModule,\n MatSelectModule,\n GalaxyFormFieldModule,\n GalaxyLoadingSpinnerModule,\n ReactiveFormsModule,\n];\n\nexport const MODULE_DECLARATIONS = [\n GalaxyUploaderComponent,\n GalaxyUploaderFileComponent,\n GalaxyUploaderFileStatusComponent,\n GalaxyUploaderListComponent,\n GalaxyUploaderConstraintsTextComponent,\n GalaxyImageUploaderComponent,\n GalaxyImageEditorComponent,\n GalaxyImageListComponent,\n GalaxyImageUploadTileComponent,\n GalaxyFileDragDropComponent,\n];\n\nexport const MODULE_EXPORTS = [\n GalaxyUploaderComponent,\n GalaxyUploaderListComponent,\n GalaxyImageUploaderComponent,\n GalaxyImageEditorComponent,\n GalaxyImageListComponent,\n GalaxyImageUploadTileComponent,\n GalaxyFileDragDropComponent,\n];\n\n@NgModule({\n declarations: MODULE_DECLARATIONS,\n imports: MODULE_IMPORTS,\n exports: MODULE_EXPORTS,\n})\nexport class GalaxyUploaderModule {}\n"],"mappings":"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","names":["require_cropper","__commonJSMin","exports","module","global","factory","ownKeys","e","r","t","o","_objectSpread2","_defineProperty","_typeof","_classCallCheck","instance","Constructor","_defineProperties","target","props","descriptor","_toPropertyKey","_createClass","protoProps","staticProps","obj","key","value","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_arrayLikeToArray","iter","minLen","n","len","arr2","_toPrimitive","input","hint","prim","res","arg","IS_BROWSER","WINDOW","IS_TOUCH_DEVICE","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","CLASS_DISABLED","CLASS_HIDDEN","CLASS_HIDE","CLASS_INVISIBLE","CLASS_MODAL","CLASS_MOVE","DATA_ACTION","DATA_PREVIEW","DRAG_MODE_CROP","DRAG_MODE_MOVE","DRAG_MODE_NONE","EVENT_CROP","EVENT_CROP_END","EVENT_CROP_MOVE","EVENT_CROP_START","EVENT_DBLCLICK","EVENT_TOUCH_START","EVENT_TOUCH_MOVE","EVENT_TOUCH_END","EVENT_POINTER_DOWN","EVENT_POINTER_MOVE","EVENT_POINTER_UP","EVENT_READY","EVENT_RESIZE","EVENT_WHEEL","EVENT_ZOOM","MIME_TYPE_JPEG","REGEXP_ACTIONS","REGEXP_DATA_URL","REGEXP_DATA_URL_JPEG","REGEXP_TAG_NAME","MIN_CONTAINER_WIDTH","MIN_CONTAINER_HEIGHT","DEFAULTS","TEMPLATE","isNaN","isNumber","isPositiveNumber","isUndefined","isObject","hasOwnProperty","isPlainObject","_constructor","prototype","isFunction","slice","toArray","forEach","data","callback","assign","_len","args","_key","REGEXP_DECIMALS","normalizeDecimalNumber","times","REGEXP_SUFFIX","setStyle","element","styles","style","property","hasClass","addClass","elem","className","removeClass","toggleClass","added","REGEXP_CAMEL_CASE","toParamCase","getData","name","setData","removeData","REGEXP_SPACES","onceSupported","supported","once","listener","options","removeListener","type","handler","event","listeners","addListener","_handler","_element$listeners","_len2","_key2","dispatchEvent","getOffset","box","location","REGEXP_ORIGINS","isCrossOriginURL","url","parts","addTimestamp","timestamp","getTransforms","_ref","rotate","scaleX","scaleY","translateX","translateY","values","transform","getMaxZoomRatio","pointers","pointers2","maxRatio","pointer","pointerId","pointer2","x1","y1","x2","y2","z1","z2","ratio","getPointer","_ref2","endOnly","pageX","pageY","end","getPointersCenter","count","_ref3","startX","startY","getAdjustedSizes","_ref4","aspectRatio","height","width","isValidWidth","isValidHeight","adjustedWidth","getRotatedSizes","_ref5","degree","arc","sinArc","cosArc","newWidth","newHeight","getSourceCanvas","image","_ref6","_ref7","_ref8","imageAspectRatio","imageNaturalWidth","imageNaturalHeight","_ref6$rotate","_ref6$scaleX","_ref6$scaleY","naturalWidth","naturalHeight","_ref8$fillColor","fillColor","_ref8$imageSmoothingE","imageSmoothingEnabled","_ref8$imageSmoothingQ","imageSmoothingQuality","_ref8$maxWidth","maxWidth","_ref8$maxHeight","maxHeight","_ref8$minWidth","minWidth","_ref8$minHeight","minHeight","canvas","context","maxSizes","minSizes","destMaxSizes","destMinSizes","destWidth","destHeight","params","param","fromCharCode","getStringFromCharCode","dataView","start","length","str","i","REGEXP_DATA_URL_HEAD","dataURLToArrayBuffer","dataURL","base64","binary","arrayBuffer","uint8","arrayBufferToDataURL","mimeType","chunks","chunkSize","resetAndGetOrientation","orientation","littleEndian","app1Start","ifdStart","offset","exifIDCode","tiffOffset","endianness","firstIFDOffset","_length","_offset","parseOrientation","render","container","cropper","containerData","imageData","viewMode","rotated","canvasWidth","canvasHeight","canvasData","sizeLimited","positionLimited","cropBoxData","cropped","minCanvasWidth","minCanvasHeight","_getAdjustedSizes","newCanvasLeft","newCanvasTop","changed","transformed","_getRotatedSizes","autoCropArea","limited","minCropBoxWidth","minCropBoxHeight","maxCropBoxWidth","maxCropBoxHeight","preview","crossOrigin","alt","previews","el","img","cropBoxWidth","cropBoxHeight","left","top","originalWidth","originalHeight","events","handlers","ratioX","ratioY","_this","delta","buttons","button","action","touch","change","right","bottom","minLeft","minTop","renderable","range","check","side","p","methods","hasSameSize","offsetX","offsetY","_this$canvasData","x","y","_originalEvent","pivot","center","_scaleX","_scaleY","rounded","widthChanged","heightChanged","source","_this$getData","initialX","initialY","initialWidth","initialHeight","_options$imageSmoothi","sourceWidth","sourceHeight","srcX","srcY","srcWidth","srcHeight","dstX","dstY","dstWidth","dstHeight","scale","mode","dragBox","face","croppable","movable","AnotherCropper","Cropper","tagName","xhr","clone","_parseOrientation","crossOriginUrl","_this2","isIOSWebKit","done","sizingImage","body","template","cropBox","parentNode","import_cropperjs","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵproperty","aspect_r2","value","ɵɵadvance","ɵɵtextInterpolate1","label","ɵɵelementContainerStart","ɵɵtemplate","GalaxyImageEditorComponent_ng_container_12_mat_option_7_Template","ɵɵtextInterpolate","ɵɵpipeBind1","ctx_r2","aspectControl","aspectRatios","ɵɵelement","ZOOM_STEP_SIZE","GalaxyImageEditorComponent","fileInfo","file","safeUrl","sanitizer","bypassSecurityTrustUrl","URL","createObjectURL","fileType","type","constructor","class","maxEditorHeight","autoCropArea","undefined","minContainerHeight","closed","EventEmitter","FormControl","zoomStep","isDisabled","minZoom","maxZoom","zoomControl","UntypedFormControl","subscriptions","ngAfterViewInit","imageEl","nativeElement","cropper","Cropper","initialAspect","length","push","valueChanges","subscribe","aspect","onAspectChange","find","option","selected","setValue","next","zoomTo","ngOnDestroy","forEach","sub","unsubscribe","destroy","onClose","save","emit","getCroppedCanvas","maxWidth","maxDimensions","width","maxHeight","height","toBlob","blob","setAspectRatio","zoomIn","zoom","zoomOut","ɵɵdirectiveInject","DomSanitizer","selectors","viewQuery","rf","ctx","ElementRef","ɵɵclassMap","ɵɵlistener","i0","ɵɵrestoreView","_r1","ɵɵresetView","GalaxyImageEditorComponent_ng_container_12_Template","GalaxyImageEditorComponent_ng_container_20_Template","ɵɵsanitizeUrl","ɵɵpureFunction1","_c1","ɵɵclassProp","align","_GalaxyImageEditorComponent","FileUploadStatus","GALAXY_UPLOADER_SERVICE_TOKEN","InjectionToken","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵelement","ɵɵproperty","GalaxyUploaderFileStatusComponent","constructor","class","FileUploadStatus","selectors","hostVars","hostBindings","rf","ctx","ɵɵclassMap","ɵɵtemplate","GalaxyUploaderFileStatusComponent_mat_icon_1_Template","GalaxyUploaderFileStatusComponent_mat_icon_2_Template","GalaxyUploaderFileStatusComponent_mat_icon_3_Template","GalaxyUploaderFileStatusComponent_mat_spinner_4_Template","ɵɵadvance","status","Queued","Fail","Success","InProgress","_GalaxyUploaderFileStatusComponent","ɵɵelement","ɵɵproperty","ctx_r0","_url","ɵɵsanitizeUrl","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","_r2","ɵɵnextContext","ɵɵresetView","editClick","ɵɵtext","ɵɵelementEnd","_r3","deleteClick","status","GalaxyImageUploadTileComponent","constructor","sanitizer","class","noViewFileStatus","edit","EventEmitter","delete","FileUploadStatus","ngOnInit","ngOnChanges","changes","file","url","currentValue","previousValue","bypassSecurityTrustUrl","convertFileToUrl","URL","createObjectURL","emit","ɵɵdirectiveInject","DomSanitizer","selectors","hostVars","hostBindings","rf","ctx","ɵɵclassMap","ɵɵtemplate","GalaxyImageUploadTileComponent_img_0_Template","GalaxyImageUploadTileComponent_button_3_Template","GalaxyImageUploadTileComponent_button_4_Template","GalaxyImageUploadTileComponent_glxy_uploader_file_status_5_Template","ɵɵadvance","showEditButton","Queued","showDeleteButton","_GalaxyImageUploadTileComponent","ɵɵelementContainerStart","ɵɵelementStart","ɵɵlistener","fileInfo_r2","ɵɵrestoreView","_r1","$implicit","ctx_r2","ɵɵnextContext","ɵɵresetView","editClick","deleteClick","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","data","croppedImage","file","url","status","delete","observers","length","edit","GalaxyImageListComponent","constructor","class","files","EventEmitter","info","emit","selectors","hostVars","hostBindings","rf","ctx","ɵɵclassMap","ɵɵtemplate","GalaxyImageListComponent_ng_container_0_Template","_GalaxyImageListComponent","GalaxyUploaderService","constructor","http","files","uploadUrl","files$$","BehaviorSubject","fileUploaded$$","Subject","fileUploaded$","asObservable","fileErrored$$","uploadFile","fileInfo","status","FileUploadStatus","InProgress","uploadSub","buildRequest","pipe","first","subscribe","next","response","onSuccess","error","onError","refreshFiles","checkQueue","numInProgress","filter","length","queued","Queued","numParallel","file","pop","getFileIndex","findIndex","fileEntry","compareTo","name","size","type","resp","url","prependProtocol","data","Success","Fail","Error","removeFileAtIndex","index","splice","unsubscribe","startsWith","prependString","addFile","context","maxFileSize","maxFiles","clear","push","autoUpload","removeFile","forEach","uploadQueuedFiles","setFiles","setMaxFiles","limit","setMaxFileSize","setUploadUrl","setParallelUploads","setAutoUpload","allowAuto","body","FormData","append","post","withCredentials","ɵɵinject","HttpClient","factory","ɵfac","_GalaxyUploaderService","GalaxyImageUploaderService","GalaxyUploaderService","buildRequest","fileInfo","params","imageToUpload","data","croppedImage","file","fileErrored$$","next","error","Error","EMPTY","body","FormData","append","options","withCredentials","http","post","uploadUrl","setCroppedImage","info","refreshFiles","setMaxDimensions","dimensions","maxDimensions","addFile","context","reader","FileReader","onload","image","Image","width","height","name","src","result","toString","readAsDataURL","t","factory","ɵfac","_GalaxyImageUploaderService","types","other_default","types","standard_default","__classPrivateFieldGet","receiver","state","kind","f","_Mime_extensionToType","_Mime_typeToExtension","_Mime_typeToExtensions","Mime","args","arg","typeMap","force","type","extensions","ext","allExtensions","first","extension","starred","currentType","path","last","hasPath","Mime_default","src_default","Mime_default","standard_default","other_default","ɵɵelementContainerStart","ɵɵtext","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind1","ctx_r0","text","ɵɵelementStart","ɵɵelementEnd","ɵɵtextInterpolate2","maxFiles","ɵɵtextInterpolate","acceptDisplay","ɵɵtemplate","GalaxyUploaderConstraintsTextComponent_ng_template_1_span_2_span_1_Template","ɵɵproperty","fileSizeDisplay","GalaxyUploaderConstraintsTextComponent_ng_template_1_span_0_Template","GalaxyUploaderConstraintsTextComponent_ng_template_1_span_1_Template","GalaxyUploaderConstraintsTextComponent_ng_template_1_span_2_Template","maxFileSize","I18N_PREFIX","I18NKeys","image","images","video","audio","and","FileGroupSpecifier","GalaxyUploaderConstraintsTextComponent","constructor","translate","class","ngOnChanges","changes","accept","currentValue","undefined","previousValue","convertAcceptToDisplay","convertSizeToDisplay","list","trim","split","map","spec","specifierToDisplay","first","toUpperCase","join","joinChar","length","instant","fileType","fileSplit","maxSize","toFixed","ɵɵdirectiveInject","TranslateService","selectors","hostVars","hostBindings","rf","ctx","ɵɵclassMap","GalaxyUploaderConstraintsTextComponent_ng_container_0_Template","GalaxyUploaderConstraintsTextComponent_ng_template_1_Template","ɵɵtemplateRefExtractor","displayContraints_r2","_GalaxyUploaderConstraintsTextComponent","ɵɵelementContainerStart","ɵɵtext","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind1","ctx_r1","descriptionText","ɵɵelementStart","ɵɵtemplate","GalaxyUploaderComponent_ng_container_2_div_4_ng_container_1_Template","GalaxyUploaderComponent_ng_container_2_div_4_ng_template_2_Template","ɵɵtemplateRefExtractor","ɵɵelementEnd","ɵɵproperty","maxFiles","pluralBrowse_r3","GalaxyUploaderComponent_ng_container_2_div_4_Template","ɵɵelement","supportsDrag","accept","maxFileSize","hintText","buttonText","ɵɵtextInterpolate","browserSupportsDrag","changesValid","change","firstChange","currentValue","previousValue","GalaxyUploaderComponent","constructor","uploadService","http","snackbarService","destroyRef","class","numParallel","autoUpload","layout","files","hasError","fileUploadErrored","EventEmitter","fileUploaded","filesChanged","testDragSupport","uuid","uuidv4","GalaxyUploaderService","ngOnInit","fileErrored$$","pipe","takeUntilDestroyed","filter","error","subscribe","next","emit","fileUploaded$","fileInfo","tap","context","undefined","console","warn","files$$","setFiles","setMaxFiles","setUploadUrl","uploadUrl","setAutoUpload","setMaxFileSize","setParallelUploads","ngOnChanges","changes","preventBubbling","event","stopPropagation","preventDefault","browseForFiles","fileInputEl","nativeElement","click","filesSelected","target","addFiles","resetFileInput","filesDropped","dataTransfer","dragOver","dropTargetEl","classList","add","dragDone","remove","deleteFile","removeFile","uploadQueuedFiles","supportedFileType","isSupportedFileType","supportedMaxSize","isSupportedMaxFileSize","openErrorSnack","Object","values","forEach","file","addFile","document","createElement","value","acceptedTypes","split","map","type","trimmedType","trim","mime","getType","includes","push","Array","from","every","some","acceptedType","startsWith","endsWith","prefix","slice","acceptedMaxFileSize","i","length","size","ɵɵdirectiveInject","GALAXY_UPLOADER_SERVICE_TOKEN","HttpClient","SnackbarService","DestroyRef","selectors","viewQuery","rf","ctx","ɵɵclassMap","ɵɵclassProp","ɵɵlistener","$event","i0","ɵɵrestoreView","_r1","ɵɵresetView","GalaxyUploaderComponent_ng_container_2_Template","GalaxyUploaderComponent_ng_container_4_Template","GalaxyUploaderComponent_ng_template_5_Template","pluralBrowse_r4","_GalaxyUploaderComponent","GalaxyImageUploaderComponent","constructor","uploadService","class","accept","autoUpload","layout","buttonText","descriptionText","hasError","numParallel","files","fileUploadErrored","EventEmitter","fileUploaded","filesChanged","ngOnInit","maxDimensions","setMaxDimensions","ngOnChanges","changes","previousValue","currentValue","uploadQueuedFiles","deleteFile","file","removeFile","ɵɵdirectiveInject","GALAXY_UPLOADER_SERVICE_TOKEN","selectors","viewQuery","rf","ctx","GalaxyUploaderComponent","ɵɵclassMap","ɵɵelementStart","ɵɵlistener","$event","i0","ɵɵrestoreView","_r1","ɵɵresetView","emit","ɵɵelementEnd","ɵɵproperty","maxFiles","maxFileSize","hintText","uploadUrl","_GalaxyImageUploaderComponent","ɵɵelement","ɵɵproperty","ctx_r0","status","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate","name","url","ɵɵsanitizeUrl","ɵɵtextInterpolate1","ɵɵlistener","ɵɵrestoreView","_r2","ɵɵnextContext","ɵɵresetView","deleteClick","GalaxyUploaderFileComponent","constructor","class","FileUploadStatus","InProgress","deleted","EventEmitter","emit","selectors","hostVars","hostBindings","rf","ctx","ɵɵclassMap","ɵɵtemplate","GalaxyUploaderFileComponent_glxy_uploader_file_status_1_Template","GalaxyUploaderFileComponent_span_2_Template","GalaxyUploaderFileComponent_a_3_Template","GalaxyUploaderFileComponent_button_4_Template","observers","length","_GalaxyUploaderFileComponent","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","_r1","file_r2","ɵɵnextContext","$implicit","ctx_r2","ɵɵresetView","deleteFile","ɵɵelementEnd","ɵɵproperty","status","name","url","ɵɵelement","ɵɵelementContainerStart","ɵɵtemplate","GalaxyUploaderListComponent_div_0_ng_container_1_glxy_uploader_file_1_Template","GalaxyUploaderListComponent_div_0_ng_container_1_ng_template_2_Template","ɵɵtemplateRefExtractor","ɵɵadvance","fileDeleted","observers","length","noObservers_r4","GalaxyUploaderListComponent_div_0_ng_container_1_Template","files","GalaxyUploaderListComponent","constructor","class","EventEmitter","fileInfo","emit","selectors","hostVars","hostBindings","rf","ctx","ɵɵclassMap","GalaxyUploaderListComponent_div_0_Template","_GalaxyUploaderListComponent","GalaxyFileDragDropComponent","constructor","uploadingBlocked","currentTimeout","preventBubbling","event","stopPropagation","preventDefault","dragEnter","window","clearTimeout","dropTargetEl","nativeElement","classList","add","dragLeave","setTimeout","remove","fileDropped","uploaderTarget","filesDropped","selectors","viewQuery","rf","ctx","ɵɵelementStart","ɵɵlistener","$event","i0","ɵɵrestoreView","_r1","ɵɵresetView","ɵɵtext","ɵɵelementEnd","ɵɵelement","ɵɵprojection","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind1","_GalaxyFileDragDropComponent","MODULE_IMPORTS","CommonModule","MatButtonModule","MatProgressSpinnerModule","MatIconModule","TranslateModule","MatInputModule","MatSelectModule","GalaxyFormFieldModule","GalaxyLoadingSpinnerModule","ReactiveFormsModule","GalaxyUploaderModule","MODULE_IMPORTS","_GalaxyUploaderModule"],"x_google_ignoreList":[0,12,13,14,15]}