Your IP : 216.73.216.79


Current Path : /var/www/html/dev/reddsis-dev/node_modules/.vite/deps/
Upload File :
Current File : /var/www/html/dev/reddsis-dev/node_modules/.vite/deps/filepond.js

import { t as __commonJSMin } from "./chunk-D0Ie14tG.js";
//#region node_modules/filepond/dist/filepond.js
var require_filepond = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	/*!
	* FilePond 4.32.12
	* Licensed under MIT, https://opensource.org/licenses/MIT/
	* Please visit https://pqina.nl/filepond/ for details.
	*/
	(function(global, factory) {
		typeof exports === "object" && typeof module !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global = global || self, factory(global.FilePond = {}));
	})(exports, function(exports$1) {
		"use strict";
		var isNode = function isNode(value) {
			return value instanceof HTMLElement;
		};
		var createStore = function createStore(initialState) {
			var queries = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
			var actions = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [];
			var state = Object.assign({}, initialState);
			var actionQueue = [];
			var dispatchQueue = [];
			var getState = function getState() {
				return Object.assign({}, state);
			};
			var processActionQueue = function processActionQueue() {
				var queue = [].concat(actionQueue);
				actionQueue.length = 0;
				return queue;
			};
			var processDispatchQueue = function processDispatchQueue() {
				var queue = [].concat(dispatchQueue);
				dispatchQueue.length = 0;
				queue.forEach(function(_ref) {
					var type = _ref.type, data = _ref.data;
					dispatch(type, data);
				});
			};
			var dispatch = function dispatch(type, data, isBlocking) {
				if (isBlocking && !document.hidden) {
					dispatchQueue.push({
						type,
						data
					});
					return;
				}
				if (actionHandlers[type]) actionHandlers[type](data);
				actionQueue.push({
					type,
					data
				});
			};
			var query = function query(str) {
				var _queryHandles;
				for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) args[_key - 1] = arguments[_key];
				return queryHandles[str] ? (_queryHandles = queryHandles)[str].apply(_queryHandles, args) : null;
			};
			var api = {
				getState,
				processActionQueue,
				processDispatchQueue,
				dispatch,
				query
			};
			var queryHandles = {};
			queries.forEach(function(query) {
				queryHandles = Object.assign({}, query(state), {}, queryHandles);
			});
			var actionHandlers = {};
			actions.forEach(function(action) {
				actionHandlers = Object.assign({}, action(dispatch, query, state), {}, actionHandlers);
			});
			return api;
		};
		var defineProperty = function defineProperty(obj, property, definition) {
			if (typeof definition === "function") {
				obj[property] = definition;
				return;
			}
			Object.defineProperty(obj, property, Object.assign({}, definition));
		};
		var forin = function forin(obj, cb) {
			for (var key in obj) {
				if (!obj.hasOwnProperty(key)) continue;
				cb(key, obj[key]);
			}
		};
		var createObject = function createObject(definition) {
			var obj = {};
			forin(definition, function(property) {
				defineProperty(obj, property, definition[property]);
			});
			return obj;
		};
		var attr = function attr(node, name) {
			var value = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : null;
			if (value === null) return node.getAttribute(name) || node.hasAttribute(name);
			node.setAttribute(name, value);
		};
		var ns = "http://www.w3.org/2000/svg";
		var svgElements = ["svg", "path"];
		var isSVGElement = function isSVGElement(tag) {
			return svgElements.includes(tag);
		};
		var createElement = function createElement(tag, className) {
			var attributes = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};
			if (typeof className === "object") {
				attributes = className;
				className = null;
			}
			var element = isSVGElement(tag) ? document.createElementNS(ns, tag) : document.createElement(tag);
			if (className) if (isSVGElement(tag)) attr(element, "class", className);
			else element.className = className;
			forin(attributes, function(name, value) {
				attr(element, name, value);
			});
			return element;
		};
		var appendChild = function appendChild(parent) {
			return function(child, index) {
				if (typeof index !== "undefined" && parent.children[index]) parent.insertBefore(child, parent.children[index]);
				else parent.appendChild(child);
			};
		};
		var appendChildView = function appendChildView(parent, childViews) {
			return function(view, index) {
				if (typeof index !== "undefined") childViews.splice(index, 0, view);
				else childViews.push(view);
				return view;
			};
		};
		var removeChildView = function removeChildView(parent, childViews) {
			return function(view) {
				childViews.splice(childViews.indexOf(view), 1);
				if (view.element.parentNode) parent.removeChild(view.element);
				return view;
			};
		};
		var IS_BROWSER = (function() {
			return typeof window !== "undefined" && typeof window.document !== "undefined";
		})();
		var isBrowser = function isBrowser() {
			return IS_BROWSER;
		};
		var getChildCount = "children" in (isBrowser() ? createElement("svg") : {}) ? function(el) {
			return el.children.length;
		} : function(el) {
			return el.childNodes.length;
		};
		var getViewRect = function getViewRect(elementRect, childViews, offset, scale) {
			var left = offset[0] || elementRect.left;
			var top = offset[1] || elementRect.top;
			var right = left + elementRect.width;
			var bottom = top + elementRect.height * (scale[1] || 1);
			var rect = {
				element: Object.assign({}, elementRect),
				inner: {
					left: elementRect.left,
					top: elementRect.top,
					right: elementRect.right,
					bottom: elementRect.bottom
				},
				outer: {
					left,
					top,
					right,
					bottom
				}
			};
			childViews.filter(function(childView) {
				return !childView.isRectIgnored();
			}).map(function(childView) {
				return childView.rect;
			}).forEach(function(childViewRect) {
				expandRect(rect.inner, Object.assign({}, childViewRect.inner));
				expandRect(rect.outer, Object.assign({}, childViewRect.outer));
			});
			calculateRectSize(rect.inner);
			rect.outer.bottom += rect.element.marginBottom;
			rect.outer.right += rect.element.marginRight;
			calculateRectSize(rect.outer);
			return rect;
		};
		var expandRect = function expandRect(parent, child) {
			child.top += parent.top;
			child.right += parent.left;
			child.bottom += parent.top;
			child.left += parent.left;
			if (child.bottom > parent.bottom) parent.bottom = child.bottom;
			if (child.right > parent.right) parent.right = child.right;
		};
		var calculateRectSize = function calculateRectSize(rect) {
			rect.width = rect.right - rect.left;
			rect.height = rect.bottom - rect.top;
		};
		var isNumber = function isNumber(value) {
			return typeof value === "number";
		};
		/**
		* Determines if position is at destination
		* @param position
		* @param destination
		* @param velocity
		* @param errorMargin
		* @returns {boolean}
		*/
		var thereYet = function thereYet(position, destination, velocity) {
			var errorMargin = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : .001;
			return Math.abs(position - destination) < errorMargin && Math.abs(velocity) < errorMargin;
		};
		/**
		* Spring animation
		*/
		var spring = function spring() {
			var _ref = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, _ref$stiffness = _ref.stiffness, stiffness = _ref$stiffness === void 0 ? .5 : _ref$stiffness, _ref$damping = _ref.damping, damping = _ref$damping === void 0 ? .75 : _ref$damping, _ref$mass = _ref.mass, mass = _ref$mass === void 0 ? 10 : _ref$mass;
			var target = null;
			var position = null;
			var velocity = 0;
			var resting = false;
			var api = createObject({
				interpolate: function interpolate(ts, skipToEndState) {
					if (resting) return;
					if (!(isNumber(target) && isNumber(position))) {
						resting = true;
						velocity = 0;
						return;
					}
					var f = -(position - target) * stiffness;
					velocity += f / mass;
					position += velocity;
					velocity *= damping;
					if (thereYet(position, target, velocity) || skipToEndState) {
						position = target;
						velocity = 0;
						resting = true;
						api.onupdate(position);
						api.oncomplete(position);
					} else api.onupdate(position);
				},
				target: {
					set: function setTarget(value) {
						if (isNumber(value) && !isNumber(position)) position = value;
						if (target === null) {
							target = value;
							position = value;
						}
						target = value;
						if (position === target || typeof target === "undefined") {
							resting = true;
							velocity = 0;
							api.onupdate(position);
							api.oncomplete(position);
							return;
						}
						resting = false;
					},
					get: function get() {
						return target;
					}
				},
				resting: { get: function get() {
					return resting;
				} },
				onupdate: function onupdate(value) {},
				oncomplete: function oncomplete(value) {}
			});
			return api;
		};
		var easeInOutQuad = function easeInOutQuad(t) {
			return t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;
		};
		var animator = {
			spring,
			tween: function tween() {
				var _ref = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, _ref$duration = _ref.duration, duration = _ref$duration === void 0 ? 500 : _ref$duration, _ref$easing = _ref.easing, easing = _ref$easing === void 0 ? easeInOutQuad : _ref$easing, _ref$delay = _ref.delay, delay = _ref$delay === void 0 ? 0 : _ref$delay;
				var start = null;
				var t;
				var p;
				var resting = true;
				var reverse = false;
				var target = null;
				var api = createObject({
					interpolate: function interpolate(ts, skipToEndState) {
						if (resting || target === null) return;
						if (start === null) start = ts;
						if (ts - start < delay) return;
						t = ts - start - delay;
						if (t >= duration || skipToEndState) {
							t = 1;
							p = reverse ? 0 : 1;
							api.onupdate(p * target);
							api.oncomplete(p * target);
							resting = true;
						} else {
							p = t / duration;
							api.onupdate((t >= 0 ? easing(reverse ? 1 - p : p) : 0) * target);
						}
					},
					target: {
						get: function get() {
							return reverse ? 0 : target;
						},
						set: function set(value) {
							if (target === null) {
								target = value;
								api.onupdate(value);
								api.oncomplete(value);
								return;
							}
							if (value < target) {
								target = 1;
								reverse = true;
							} else {
								reverse = false;
								target = value;
							}
							resting = false;
							start = null;
						}
					},
					resting: { get: function get() {
						return resting;
					} },
					onupdate: function onupdate(value) {},
					oncomplete: function oncomplete(value) {}
				});
				return api;
			}
		};
		var createAnimator = function createAnimator(definition, category, property) {
			var def = definition[category] && typeof definition[category][property] === "object" ? definition[category][property] : definition[category] || definition;
			var type = typeof def === "string" ? def : def.type;
			var props = typeof def === "object" ? Object.assign({}, def) : {};
			return animator[type] ? animator[type](props) : null;
		};
		var addGetSet = function addGetSet(keys, obj, props) {
			var overwrite = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : false;
			obj = Array.isArray(obj) ? obj : [obj];
			obj.forEach(function(o) {
				keys.forEach(function(key) {
					var name = key;
					var getter = function getter() {
						return props[key];
					};
					var setter = function setter(value) {
						return props[key] = value;
					};
					if (typeof key === "object") {
						name = key.key;
						getter = key.getter || getter;
						setter = key.setter || setter;
					}
					if (o[name] && !overwrite) return;
					o[name] = {
						get: getter,
						set: setter
					};
				});
			});
		};
		var animations = function animations(_ref) {
			var mixinConfig = _ref.mixinConfig, viewProps = _ref.viewProps, viewInternalAPI = _ref.viewInternalAPI, viewExternalAPI = _ref.viewExternalAPI;
			var initialProps = Object.assign({}, viewProps);
			var animations = [];
			forin(mixinConfig, function(property, animation) {
				var animator = createAnimator(animation);
				if (!animator) return;
				animator.onupdate = function(value) {
					viewProps[property] = value;
				};
				animator.target = initialProps[property];
				addGetSet([{
					key: property,
					setter: function setter(value) {
						if (animator.target === value) return;
						animator.target = value;
					},
					getter: function getter() {
						return viewProps[property];
					}
				}], [viewInternalAPI, viewExternalAPI], viewProps, true);
				animations.push(animator);
			});
			return {
				write: function write(ts) {
					var skipToEndState = document.hidden;
					var resting = true;
					animations.forEach(function(animation) {
						if (!animation.resting) resting = false;
						animation.interpolate(ts, skipToEndState);
					});
					return resting;
				},
				destroy: function destroy() {}
			};
		};
		var addEvent = function addEvent(element) {
			return function(type, fn) {
				element.addEventListener(type, fn);
			};
		};
		var removeEvent = function removeEvent(element) {
			return function(type, fn) {
				element.removeEventListener(type, fn);
			};
		};
		var listeners = function listeners(_ref) {
			_ref.mixinConfig;
			_ref.viewProps;
			_ref.viewInternalAPI;
			var viewExternalAPI = _ref.viewExternalAPI;
			_ref.viewState;
			var view = _ref.view;
			var events = [];
			var add = addEvent(view.element);
			var remove = removeEvent(view.element);
			viewExternalAPI.on = function(type, fn) {
				events.push({
					type,
					fn
				});
				add(type, fn);
			};
			viewExternalAPI.off = function(type, fn) {
				events.splice(events.findIndex(function(event) {
					return event.type === type && event.fn === fn;
				}), 1);
				remove(type, fn);
			};
			return {
				write: function write() {
					return true;
				},
				destroy: function destroy() {
					events.forEach(function(event) {
						remove(event.type, event.fn);
					});
				}
			};
		};
		var apis = function apis(_ref) {
			var mixinConfig = _ref.mixinConfig, viewProps = _ref.viewProps, viewExternalAPI = _ref.viewExternalAPI;
			addGetSet(mixinConfig, viewExternalAPI, viewProps);
		};
		var isDefined = function isDefined(value) {
			return value != null;
		};
		var defaults = {
			opacity: 1,
			scaleX: 1,
			scaleY: 1,
			translateX: 0,
			translateY: 0,
			rotateX: 0,
			rotateY: 0,
			rotateZ: 0,
			originX: 0,
			originY: 0
		};
		var styles = function styles(_ref) {
			var mixinConfig = _ref.mixinConfig, viewProps = _ref.viewProps, viewInternalAPI = _ref.viewInternalAPI, viewExternalAPI = _ref.viewExternalAPI, view = _ref.view;
			var initialProps = Object.assign({}, viewProps);
			var currentProps = {};
			addGetSet(mixinConfig, [viewInternalAPI, viewExternalAPI], viewProps);
			var getOffset = function getOffset() {
				return [viewProps["translateX"] || 0, viewProps["translateY"] || 0];
			};
			var getScale = function getScale() {
				return [viewProps["scaleX"] || 0, viewProps["scaleY"] || 0];
			};
			var getRect = function getRect() {
				return view.rect ? getViewRect(view.rect, view.childViews, getOffset(), getScale()) : null;
			};
			viewInternalAPI.rect = { get: getRect };
			viewExternalAPI.rect = { get: getRect };
			mixinConfig.forEach(function(key) {
				viewProps[key] = typeof initialProps[key] === "undefined" ? defaults[key] : initialProps[key];
			});
			return {
				write: function write() {
					if (!propsHaveChanged(currentProps, viewProps)) return;
					applyStyles(view.element, viewProps);
					Object.assign(currentProps, Object.assign({}, viewProps));
					return true;
				},
				destroy: function destroy() {}
			};
		};
		var propsHaveChanged = function propsHaveChanged(currentProps, newProps) {
			if (Object.keys(currentProps).length !== Object.keys(newProps).length) return true;
			for (var prop in newProps) if (newProps[prop] !== currentProps[prop]) return true;
			return false;
		};
		var applyStyles = function applyStyles(element, _ref2) {
			var opacity = _ref2.opacity, perspective = _ref2.perspective, translateX = _ref2.translateX, translateY = _ref2.translateY, scaleX = _ref2.scaleX, scaleY = _ref2.scaleY, rotateX = _ref2.rotateX, rotateY = _ref2.rotateY, rotateZ = _ref2.rotateZ, originX = _ref2.originX, originY = _ref2.originY, width = _ref2.width, height = _ref2.height;
			var transforms = "";
			var styles = "";
			if (isDefined(originX) || isDefined(originY)) styles += "transform-origin: " + (originX || 0) + "px " + (originY || 0) + "px;";
			if (isDefined(perspective)) transforms += "perspective(" + perspective + "px) ";
			if (isDefined(translateX) || isDefined(translateY)) transforms += "translate3d(" + (translateX || 0) + "px, " + (translateY || 0) + "px, 0) ";
			if (isDefined(scaleX) || isDefined(scaleY)) transforms += "scale3d(" + (isDefined(scaleX) ? scaleX : 1) + ", " + (isDefined(scaleY) ? scaleY : 1) + ", 1) ";
			if (isDefined(rotateZ)) transforms += "rotateZ(" + rotateZ + "rad) ";
			if (isDefined(rotateX)) transforms += "rotateX(" + rotateX + "rad) ";
			if (isDefined(rotateY)) transforms += "rotateY(" + rotateY + "rad) ";
			if (transforms.length) styles += "transform:" + transforms + ";";
			if (isDefined(opacity)) {
				styles += "opacity:" + opacity + ";";
				if (opacity === 0) styles += "visibility:hidden;";
				if (opacity < 1) styles += "pointer-events:none;";
			}
			if (isDefined(height)) styles += "height:" + height + "px;";
			if (isDefined(width)) styles += "width:" + width + "px;";
			var elementCurrentStyle = element.elementCurrentStyle || "";
			if (styles.length !== elementCurrentStyle.length || styles !== elementCurrentStyle) {
				element.style.cssText = styles;
				element.elementCurrentStyle = styles;
			}
		};
		var Mixins = {
			styles,
			listeners,
			animations,
			apis
		};
		var updateRect = function updateRect() {
			var rect = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
			var element = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
			var style = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};
			if (!element.layoutCalculated) {
				rect.paddingTop = parseInt(style.paddingTop, 10) || 0;
				rect.marginTop = parseInt(style.marginTop, 10) || 0;
				rect.marginRight = parseInt(style.marginRight, 10) || 0;
				rect.marginBottom = parseInt(style.marginBottom, 10) || 0;
				rect.marginLeft = parseInt(style.marginLeft, 10) || 0;
				element.layoutCalculated = true;
			}
			rect.left = element.offsetLeft || 0;
			rect.top = element.offsetTop || 0;
			rect.width = element.offsetWidth || 0;
			rect.height = element.offsetHeight || 0;
			rect.right = rect.left + rect.width;
			rect.bottom = rect.top + rect.height;
			rect.scrollTop = element.scrollTop;
			rect.hidden = element.offsetParent === null;
			return rect;
		};
		var createView = function createView() {
			var _ref = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, _ref$tag = _ref.tag, tag = _ref$tag === void 0 ? "div" : _ref$tag, _ref$name = _ref.name, name = _ref$name === void 0 ? null : _ref$name, _ref$attributes = _ref.attributes, attributes = _ref$attributes === void 0 ? {} : _ref$attributes, _ref$read = _ref.read, read = _ref$read === void 0 ? function() {} : _ref$read, _ref$write = _ref.write, write = _ref$write === void 0 ? function() {} : _ref$write, _ref$create = _ref.create, create = _ref$create === void 0 ? function() {} : _ref$create, _ref$destroy = _ref.destroy, destroy = _ref$destroy === void 0 ? function() {} : _ref$destroy, _ref$filterFrameActio = _ref.filterFrameActionsForChild, filterFrameActionsForChild = _ref$filterFrameActio === void 0 ? function(child, actions) {
				return actions;
			} : _ref$filterFrameActio, _ref$didCreateView = _ref.didCreateView, didCreateView = _ref$didCreateView === void 0 ? function() {} : _ref$didCreateView, _ref$didWriteView = _ref.didWriteView, didWriteView = _ref$didWriteView === void 0 ? function() {} : _ref$didWriteView, _ref$ignoreRect = _ref.ignoreRect, ignoreRect = _ref$ignoreRect === void 0 ? false : _ref$ignoreRect, _ref$ignoreRectUpdate = _ref.ignoreRectUpdate, ignoreRectUpdate = _ref$ignoreRectUpdate === void 0 ? false : _ref$ignoreRectUpdate, _ref$mixins = _ref.mixins, mixins = _ref$mixins === void 0 ? [] : _ref$mixins;
			return function(store) {
				var props = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
				var element = createElement(tag, "filepond--" + name, attributes);
				var style = window.getComputedStyle(element, null);
				var rect = updateRect();
				var frameRect = null;
				var isResting = false;
				var childViews = [];
				var activeMixins = [];
				var ref = {};
				var state = {};
				var writers = [write];
				var readers = [read];
				var destroyers = [destroy];
				var getElement = function getElement() {
					return element;
				};
				var getChildViews = function getChildViews() {
					return childViews.concat();
				};
				var getReference = function getReference() {
					return ref;
				};
				var createChildView = function createChildView(store) {
					return function(view, props) {
						return view(store, props);
					};
				};
				var getRect = function getRect() {
					if (frameRect) return frameRect;
					frameRect = getViewRect(rect, childViews, [0, 0], [1, 1]);
					return frameRect;
				};
				var getStyle = function getStyle() {
					return style;
				};
				/**
				* Read data from DOM
				* @private
				*/
				var _read = function _read() {
					frameRect = null;
					childViews.forEach(function(child) {
						return child._read();
					});
					if (!(ignoreRectUpdate && rect.width && rect.height)) updateRect(rect, element, style);
					var api = {
						root: internalAPI,
						props,
						rect
					};
					readers.forEach(function(reader) {
						return reader(api);
					});
				};
				/**
				* Write data to DOM
				* @private
				*/
				var _write = function _write(ts, frameActions, shouldOptimize) {
					var resting = frameActions.length === 0;
					writers.forEach(function(writer) {
						if (writer({
							props,
							root: internalAPI,
							actions: frameActions,
							timestamp: ts,
							shouldOptimize
						}) === false) resting = false;
					});
					activeMixins.forEach(function(mixin) {
						if (mixin.write(ts) === false) resting = false;
					});
					childViews.filter(function(child) {
						return !!child.element.parentNode;
					}).forEach(function(child) {
						if (!child._write(ts, filterFrameActionsForChild(child, frameActions), shouldOptimize)) resting = false;
					});
					childViews.forEach(function(child, index) {
						if (child.element.parentNode) return;
						internalAPI.appendChild(child.element, index);
						child._read();
						child._write(ts, filterFrameActionsForChild(child, frameActions), shouldOptimize);
						resting = false;
					});
					isResting = resting;
					didWriteView({
						props,
						root: internalAPI,
						actions: frameActions,
						timestamp: ts
					});
					return resting;
				};
				var _destroy = function _destroy() {
					activeMixins.forEach(function(mixin) {
						return mixin.destroy();
					});
					destroyers.forEach(function(destroyer) {
						destroyer({
							root: internalAPI,
							props
						});
					});
					childViews.forEach(function(child) {
						return child._destroy();
					});
				};
				var sharedAPIDefinition = {
					element: { get: getElement },
					style: { get: getStyle },
					childViews: { get: getChildViews }
				};
				var internalAPIDefinition = Object.assign({}, sharedAPIDefinition, {
					rect: { get: getRect },
					ref: { get: getReference },
					is: function is(needle) {
						return name === needle;
					},
					appendChild: appendChild(element),
					createChildView: createChildView(store),
					linkView: function linkView(view) {
						childViews.push(view);
						return view;
					},
					unlinkView: function unlinkView(view) {
						childViews.splice(childViews.indexOf(view), 1);
					},
					appendChildView: appendChildView(element, childViews),
					removeChildView: removeChildView(element, childViews),
					registerWriter: function registerWriter(writer) {
						return writers.push(writer);
					},
					registerReader: function registerReader(reader) {
						return readers.push(reader);
					},
					registerDestroyer: function registerDestroyer(destroyer) {
						return destroyers.push(destroyer);
					},
					invalidateLayout: function invalidateLayout() {
						return element.layoutCalculated = false;
					},
					dispatch: store.dispatch,
					query: store.query
				});
				var externalAPIDefinition = {
					element: { get: getElement },
					childViews: { get: getChildViews },
					rect: { get: getRect },
					resting: { get: function get() {
						return isResting;
					} },
					isRectIgnored: function isRectIgnored() {
						return ignoreRect;
					},
					_read,
					_write,
					_destroy
				};
				var mixinAPIDefinition = Object.assign({}, sharedAPIDefinition, { rect: { get: function get() {
					return rect;
				} } });
				Object.keys(mixins).sort(function(a, b) {
					if (a === "styles") return 1;
					else if (b === "styles") return -1;
					return 0;
				}).forEach(function(key) {
					var mixinAPI = Mixins[key]({
						mixinConfig: mixins[key],
						viewProps: props,
						viewState: state,
						viewInternalAPI: internalAPIDefinition,
						viewExternalAPI: externalAPIDefinition,
						view: createObject(mixinAPIDefinition)
					});
					if (mixinAPI) activeMixins.push(mixinAPI);
				});
				var internalAPI = createObject(internalAPIDefinition);
				create({
					root: internalAPI,
					props
				});
				var childCount = getChildCount(element);
				childViews.forEach(function(child, index) {
					internalAPI.appendChild(child.element, childCount + index);
				});
				didCreateView(internalAPI);
				return createObject(externalAPIDefinition);
			};
		};
		var createPainter = function createPainter(read, write) {
			var fps = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 60;
			var name = "__framePainter";
			if (window[name]) {
				window[name].readers.push(read);
				window[name].writers.push(write);
				return;
			}
			window[name] = {
				readers: [read],
				writers: [write]
			};
			var painter = window[name];
			var interval = 1e3 / fps;
			var last = null;
			var id = null;
			var requestTick = null;
			var cancelTick = null;
			var setTimerType = function setTimerType() {
				if (document.hidden) {
					requestTick = function requestTick() {
						return window.setTimeout(function() {
							return tick(performance.now());
						}, interval);
					};
					cancelTick = function cancelTick() {
						return window.clearTimeout(id);
					};
				} else {
					requestTick = function requestTick() {
						return window.requestAnimationFrame(tick);
					};
					cancelTick = function cancelTick() {
						return window.cancelAnimationFrame(id);
					};
				}
			};
			document.addEventListener("visibilitychange", function() {
				if (cancelTick) cancelTick();
				setTimerType();
				tick(performance.now());
			});
			var tick = function tick(ts) {
				id = requestTick(tick);
				if (!last) last = ts;
				var delta = ts - last;
				if (delta <= interval) return;
				last = ts - delta % interval;
				painter.readers.forEach(function(read) {
					return read();
				});
				painter.writers.forEach(function(write) {
					return write(ts);
				});
			};
			setTimerType();
			tick(performance.now());
			return { pause: function pause() {
				cancelTick(id);
			} };
		};
		var createRoute = function createRoute(routes, fn) {
			return function(_ref) {
				var root = _ref.root, props = _ref.props, _ref$actions = _ref.actions, actions = _ref$actions === void 0 ? [] : _ref$actions, timestamp = _ref.timestamp, shouldOptimize = _ref.shouldOptimize;
				actions.filter(function(action) {
					return routes[action.type];
				}).forEach(function(action) {
					return routes[action.type]({
						root,
						props,
						action: action.data,
						timestamp,
						shouldOptimize
					});
				});
				if (fn) fn({
					root,
					props,
					actions,
					timestamp,
					shouldOptimize
				});
			};
		};
		var insertBefore = function insertBefore(newNode, referenceNode) {
			return referenceNode.parentNode.insertBefore(newNode, referenceNode);
		};
		var insertAfter = function insertAfter(newNode, referenceNode) {
			return referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
		};
		var isArray = function isArray(value) {
			return Array.isArray(value);
		};
		var isEmpty = function isEmpty(value) {
			return value == null;
		};
		var trim = function trim(str) {
			return str.trim();
		};
		var toString = function toString(value) {
			return "" + value;
		};
		var toArray = function toArray(value) {
			var splitter = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : ",";
			if (isEmpty(value)) return [];
			if (isArray(value)) return value;
			return toString(value).split(splitter).map(trim).filter(function(str) {
				return str.length;
			});
		};
		var isBoolean = function isBoolean(value) {
			return typeof value === "boolean";
		};
		var toBoolean = function toBoolean(value) {
			return isBoolean(value) ? value : value === "true";
		};
		var isString = function isString(value) {
			return typeof value === "string";
		};
		var toNumber = function toNumber(value) {
			return isNumber(value) ? value : isString(value) ? toString(value).replace(/[a-z]+/gi, "") : 0;
		};
		var toInt = function toInt(value) {
			return parseInt(toNumber(value), 10);
		};
		var toFloat = function toFloat(value) {
			return parseFloat(toNumber(value));
		};
		var isInt = function isInt(value) {
			return isNumber(value) && isFinite(value) && Math.floor(value) === value;
		};
		var toBytes = function toBytes(value) {
			var base = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 1e3;
			if (isInt(value)) return value;
			var naturalFileSize = toString(value).trim();
			if (/MB$/i.test(naturalFileSize)) {
				naturalFileSize = naturalFileSize.replace(/MB$i/, "").trim();
				return toInt(naturalFileSize) * base * base;
			}
			if (/KB/i.test(naturalFileSize)) {
				naturalFileSize = naturalFileSize.replace(/KB$i/, "").trim();
				return toInt(naturalFileSize) * base;
			}
			return toInt(naturalFileSize);
		};
		var isFunction = function isFunction(value) {
			return typeof value === "function";
		};
		var toFunctionReference = function toFunctionReference(string) {
			var ref = self;
			var levels = string.split(".");
			var level = null;
			while (level = levels.shift()) {
				ref = ref[level];
				if (!ref) return null;
			}
			return ref;
		};
		var methods = {
			process: "POST",
			patch: "PATCH",
			revert: "DELETE",
			fetch: "GET",
			restore: "GET",
			load: "GET"
		};
		var createServerAPI = function createServerAPI(outline) {
			var api = {};
			api.url = isString(outline) ? outline : outline.url || "";
			api.timeout = outline.timeout ? parseInt(outline.timeout, 10) : 0;
			api.headers = outline.headers ? outline.headers : {};
			forin(methods, function(key) {
				api[key] = createAction(key, outline[key], methods[key], api.timeout, api.headers);
			});
			api.process = outline.process || isString(outline) || outline.url ? api.process : null;
			api.remove = outline.remove || null;
			delete api.headers;
			return api;
		};
		var createAction = function createAction(name, outline, method, timeout, headers) {
			if (outline === null) return null;
			if (typeof outline === "function") return outline;
			var action = {
				url: method === "GET" || method === "PATCH" ? "?" + name + "=" : "",
				method,
				headers,
				withCredentials: false,
				timeout,
				onload: null,
				ondata: null,
				onerror: null
			};
			if (isString(outline)) {
				action.url = outline;
				return action;
			}
			Object.assign(action, outline);
			if (isString(action.headers)) {
				var parts = action.headers.split(/:(.+)/);
				action.headers = {
					header: parts[0],
					value: parts[1]
				};
			}
			action.withCredentials = toBoolean(action.withCredentials);
			return action;
		};
		var toServerAPI = function toServerAPI(value) {
			return createServerAPI(value);
		};
		var isNull = function isNull(value) {
			return value === null;
		};
		var isObject = function isObject(value) {
			return typeof value === "object" && value !== null;
		};
		var isAPI = function isAPI(value) {
			return isObject(value) && isString(value.url) && isObject(value.process) && isObject(value.revert) && isObject(value.restore) && isObject(value.fetch);
		};
		var getType = function getType(value) {
			if (isArray(value)) return "array";
			if (isNull(value)) return "null";
			if (isInt(value)) return "int";
			if (/^[0-9]+ ?(?:GB|MB|KB)$/gi.test(value)) return "bytes";
			if (isAPI(value)) return "api";
			return typeof value;
		};
		var replaceSingleQuotes = function replaceSingleQuotes(str) {
			return str.replace(/{\s*'/g, "{\"").replace(/'\s*}/g, "\"}").replace(/'\s*:/g, "\":").replace(/:\s*'/g, ":\"").replace(/,\s*'/g, ",\"").replace(/'\s*,/g, "\",");
		};
		var conversionTable = {
			array: toArray,
			boolean: toBoolean,
			int: function int(value) {
				return getType(value) === "bytes" ? toBytes(value) : toInt(value);
			},
			number: toFloat,
			float: toFloat,
			bytes: toBytes,
			string: function string(value) {
				return isFunction(value) ? value : toString(value);
			},
			function: function _function(value) {
				return toFunctionReference(value);
			},
			serverapi: toServerAPI,
			object: function object(value) {
				try {
					return JSON.parse(replaceSingleQuotes(value));
				} catch (e) {
					return null;
				}
			}
		};
		var convertTo = function convertTo(value, type) {
			return conversionTable[type](value);
		};
		var getValueByType = function getValueByType(newValue, defaultValue, valueType) {
			if (newValue === defaultValue) return newValue;
			var newValueType = getType(newValue);
			if (newValueType !== valueType) {
				var convertedValue = convertTo(newValue, valueType);
				newValueType = getType(convertedValue);
				if (convertedValue === null) throw "Trying to assign value with incorrect type to \"" + option + "\", allowed type: \"" + valueType + "\"";
				else newValue = convertedValue;
			}
			return newValue;
		};
		var createOption = function createOption(defaultValue, valueType) {
			var currentValue = defaultValue;
			return {
				enumerable: true,
				get: function get() {
					return currentValue;
				},
				set: function set(newValue) {
					currentValue = getValueByType(newValue, defaultValue, valueType);
				}
			};
		};
		var createOptions = function createOptions(options) {
			var obj = {};
			forin(options, function(prop) {
				var optionDefinition = options[prop];
				obj[prop] = createOption(optionDefinition[0], optionDefinition[1]);
			});
			return createObject(obj);
		};
		var createInitialState = function createInitialState(options) {
			return {
				items: [],
				listUpdateTimeout: null,
				itemUpdateTimeout: null,
				processingQueue: [],
				options: createOptions(options)
			};
		};
		var fromCamels = function fromCamels(string) {
			var separator = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "-";
			return string.split(/(?=[A-Z])/).map(function(part) {
				return part.toLowerCase();
			}).join(separator);
		};
		var createOptionAPI = function createOptionAPI(store, options) {
			var obj = {};
			forin(options, function(key) {
				obj[key] = {
					get: function get() {
						return store.getState().options[key];
					},
					set: function set(value) {
						store.dispatch("SET_" + fromCamels(key, "_").toUpperCase(), { value });
					}
				};
			});
			return obj;
		};
		var createOptionActions = function createOptionActions(options) {
			return function(dispatch, query, state) {
				var obj = {};
				forin(options, function(key) {
					var name = fromCamels(key, "_").toUpperCase();
					obj["SET_" + name] = function(action) {
						try {
							state.options[key] = action.value;
						} catch (e) {}
						dispatch("DID_SET_" + name, { value: state.options[key] });
					};
				});
				return obj;
			};
		};
		var createOptionQueries = function createOptionQueries(options) {
			return function(state) {
				var obj = {};
				forin(options, function(key) {
					obj["GET_" + fromCamels(key, "_").toUpperCase()] = function(action) {
						return state.options[key];
					};
				});
				return obj;
			};
		};
		var InteractionMethod = {
			API: 1,
			DROP: 2,
			BROWSE: 3,
			PASTE: 4,
			NONE: 5
		};
		var getUniqueId = function getUniqueId() {
			return Math.random().toString(36).substring(2, 11);
		};
		function _typeof(obj) {
			if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") _typeof = function(obj) {
				return typeof obj;
			};
			else _typeof = function(obj) {
				return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
			};
			return _typeof(obj);
		}
		function _AwaitValue(value) {
			this.wrapped = value;
		}
		function _AsyncGenerator(gen) {
			var front, back;
			function send(key, arg) {
				return new Promise(function(resolve, reject) {
					var request = {
						key,
						arg,
						resolve,
						reject,
						next: null
					};
					if (back) back = back.next = request;
					else {
						front = back = request;
						resume(key, arg);
					}
				});
			}
			function resume(key, arg) {
				try {
					var result = gen[key](arg);
					var value = result.value;
					var wrappedAwait = value instanceof _AwaitValue;
					Promise.resolve(wrappedAwait ? value.wrapped : value).then(function(arg) {
						if (wrappedAwait) {
							resume("next", arg);
							return;
						}
						settle(result.done ? "return" : "normal", arg);
					}, function(err) {
						resume("throw", err);
					});
				} catch (err) {
					settle("throw", err);
				}
			}
			function settle(type, value) {
				switch (type) {
					case "return":
						front.resolve({
							value,
							done: true
						});
						break;
					case "throw":
						front.reject(value);
						break;
					default:
						front.resolve({
							value,
							done: false
						});
						break;
				}
				front = front.next;
				if (front) resume(front.key, front.arg);
				else back = null;
			}
			this._invoke = send;
			if (typeof gen.return !== "function") this.return = void 0;
		}
		if (typeof Symbol === "function" && Symbol.asyncIterator) _AsyncGenerator.prototype[Symbol.asyncIterator] = function() {
			return this;
		};
		_AsyncGenerator.prototype.next = function(arg) {
			return this._invoke("next", arg);
		};
		_AsyncGenerator.prototype.throw = function(arg) {
			return this._invoke("throw", arg);
		};
		_AsyncGenerator.prototype.return = function(arg) {
			return this._invoke("return", arg);
		};
		function _defineProperty(obj, key, value) {
			if (key in obj) Object.defineProperty(obj, key, {
				value,
				enumerable: true,
				configurable: true,
				writable: true
			});
			else obj[key] = value;
			return obj;
		}
		function _extends() {
			_extends = Object.assign || function(target) {
				for (var i = 1; i < arguments.length; i++) {
					var source = arguments[i];
					for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
				}
				return target;
			};
			return _extends.apply(this, arguments);
		}
		function _inherits(subClass, superClass) {
			if (typeof superClass !== "function" && superClass !== null) throw new TypeError("Super expression must either be null or a function");
			subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: {
				value: subClass,
				writable: true,
				configurable: true
			} });
			if (superClass) _setPrototypeOf(subClass, superClass);
		}
		function _getPrototypeOf(o) {
			_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
				return o.__proto__ || Object.getPrototypeOf(o);
			};
			return _getPrototypeOf(o);
		}
		function _setPrototypeOf(o, p) {
			_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
				o.__proto__ = p;
				return o;
			};
			return _setPrototypeOf(o, p);
		}
		function isNativeReflectConstruct() {
			if (typeof Reflect === "undefined" || !Reflect.construct) return false;
			if (Reflect.construct.sham) return false;
			if (typeof Proxy === "function") return true;
			try {
				Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));
				return true;
			} catch (e) {
				return false;
			}
		}
		function _construct(Parent, args, Class) {
			if (isNativeReflectConstruct()) _construct = Reflect.construct;
			else _construct = function _construct(Parent, args, Class) {
				var a = [null];
				a.push.apply(a, args);
				var instance = new (Function.bind.apply(Parent, a))();
				if (Class) _setPrototypeOf(instance, Class.prototype);
				return instance;
			};
			return _construct.apply(null, arguments);
		}
		function _isNativeFunction(fn) {
			return Function.toString.call(fn).indexOf("[native code]") !== -1;
		}
		function _wrapNativeSuper(Class) {
			var _cache = typeof Map === "function" ? /* @__PURE__ */ new Map() : void 0;
			_wrapNativeSuper = function _wrapNativeSuper(Class) {
				if (Class === null || !_isNativeFunction(Class)) return Class;
				if (typeof Class !== "function") throw new TypeError("Super expression must either be null or a function");
				if (typeof _cache !== "undefined") {
					if (_cache.has(Class)) return _cache.get(Class);
					_cache.set(Class, Wrapper);
				}
				function Wrapper() {
					return _construct(Class, arguments, _getPrototypeOf(this).constructor);
				}
				Wrapper.prototype = Object.create(Class.prototype, { constructor: {
					value: Wrapper,
					enumerable: false,
					writable: true,
					configurable: true
				} });
				return _setPrototypeOf(Wrapper, Class);
			};
			return _wrapNativeSuper(Class);
		}
		function _objectWithoutPropertiesLoose(source, excluded) {
			if (source == null) return {};
			var target = {};
			var sourceKeys = Object.keys(source);
			var key, i;
			for (i = 0; i < sourceKeys.length; i++) {
				key = sourceKeys[i];
				if (excluded.indexOf(key) >= 0) continue;
				target[key] = source[key];
			}
			return target;
		}
		function _objectWithoutProperties(source, excluded) {
			if (source == null) return {};
			var target = _objectWithoutPropertiesLoose(source, excluded);
			var key, i;
			if (Object.getOwnPropertySymbols) {
				var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
				for (i = 0; i < sourceSymbolKeys.length; i++) {
					key = sourceSymbolKeys[i];
					if (excluded.indexOf(key) >= 0) continue;
					if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
					target[key] = source[key];
				}
			}
			return target;
		}
		function _superPropBase(object, property) {
			while (!Object.prototype.hasOwnProperty.call(object, property)) {
				object = _getPrototypeOf(object);
				if (object === null) break;
			}
			return object;
		}
		function _get(target, property, receiver) {
			if (typeof Reflect !== "undefined" && Reflect.get) _get = Reflect.get;
			else _get = function _get(target, property, receiver) {
				var base = _superPropBase(target, property);
				if (!base) return;
				var desc = Object.getOwnPropertyDescriptor(base, property);
				if (desc.get) return desc.get.call(receiver);
				return desc.value;
			};
			return _get(target, property, receiver || target);
		}
		function set(target, property, value, receiver) {
			if (typeof Reflect !== "undefined" && Reflect.set) set = Reflect.set;
			else set = function set(target, property, value, receiver) {
				var base = _superPropBase(target, property);
				var desc;
				if (base) {
					desc = Object.getOwnPropertyDescriptor(base, property);
					if (desc.set) {
						desc.set.call(receiver, value);
						return true;
					} else if (!desc.writable) return false;
				}
				desc = Object.getOwnPropertyDescriptor(receiver, property);
				if (desc) {
					if (!desc.writable) return false;
					desc.value = value;
					Object.defineProperty(receiver, property, desc);
				} else _defineProperty(receiver, property, value);
				return true;
			};
			return set(target, property, value, receiver);
		}
		function _toArray(arr) {
			return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest();
		}
		function _toConsumableArray(arr) {
			return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();
		}
		function _arrayWithoutHoles(arr) {
			if (Array.isArray(arr)) {
				for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];
				return arr2;
			}
		}
		function _arrayWithHoles(arr) {
			if (Array.isArray(arr)) return arr;
		}
		function _iterableToArray(iter) {
			if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);
		}
		function _nonIterableSpread() {
			throw new TypeError("Invalid attempt to spread non-iterable instance");
		}
		function _nonIterableRest() {
			throw new TypeError("Invalid attempt to destructure non-iterable instance");
		}
		function _toPrimitive(input, hint) {
			if (typeof input !== "object" || input === null) return input;
			var prim = input[Symbol.toPrimitive];
			if (prim !== void 0) {
				var res = prim.call(input, hint || "default");
				if (typeof res !== "object") return res;
				throw new TypeError("@@toPrimitive must return a primitive value.");
			}
			return (hint === "string" ? String : Number)(input);
		}
		function _toPropertyKey(arg) {
			var key = _toPrimitive(arg, "string");
			return typeof key === "symbol" ? key : String(key);
		}
		function _getDecoratorsApi() {
			_getDecoratorsApi = function() {
				return api;
			};
			var api = {
				elementsDefinitionOrder: [["method"], ["field"]],
				initializeInstanceElements: function(O, elements) {
					["method", "field"].forEach(function(kind) {
						elements.forEach(function(element) {
							if (element.kind === kind && element.placement === "own") this.defineClassElement(O, element);
						}, this);
					}, this);
				},
				initializeClassElements: function(F, elements) {
					var proto = F.prototype;
					["method", "field"].forEach(function(kind) {
						elements.forEach(function(element) {
							var placement = element.placement;
							if (element.kind === kind && (placement === "static" || placement === "prototype")) {
								var receiver = placement === "static" ? F : proto;
								this.defineClassElement(receiver, element);
							}
						}, this);
					}, this);
				},
				defineClassElement: function(receiver, element) {
					var descriptor = element.descriptor;
					if (element.kind === "field") {
						var initializer = element.initializer;
						descriptor = {
							enumerable: descriptor.enumerable,
							writable: descriptor.writable,
							configurable: descriptor.configurable,
							value: initializer === void 0 ? void 0 : initializer.call(receiver)
						};
					}
					Object.defineProperty(receiver, element.key, descriptor);
				},
				decorateClass: function(elements, decorators) {
					var newElements = [];
					var finishers = [];
					var placements = {
						static: [],
						prototype: [],
						own: []
					};
					elements.forEach(function(element) {
						this.addElementPlacement(element, placements);
					}, this);
					elements.forEach(function(element) {
						if (!_hasDecorators(element)) return newElements.push(element);
						var elementFinishersExtras = this.decorateElement(element, placements);
						newElements.push(elementFinishersExtras.element);
						newElements.push.apply(newElements, elementFinishersExtras.extras);
						finishers.push.apply(finishers, elementFinishersExtras.finishers);
					}, this);
					if (!decorators) return {
						elements: newElements,
						finishers
					};
					var result = this.decorateConstructor(newElements, decorators);
					finishers.push.apply(finishers, result.finishers);
					result.finishers = finishers;
					return result;
				},
				addElementPlacement: function(element, placements, silent) {
					var keys = placements[element.placement];
					if (!silent && keys.indexOf(element.key) !== -1) throw new TypeError("Duplicated element (" + element.key + ")");
					keys.push(element.key);
				},
				decorateElement: function(element, placements) {
					var extras = [];
					var finishers = [];
					for (var decorators = element.decorators, i = decorators.length - 1; i >= 0; i--) {
						var keys = placements[element.placement];
						keys.splice(keys.indexOf(element.key), 1);
						var elementObject = this.fromElementDescriptor(element);
						var elementFinisherExtras = this.toElementFinisherExtras((0, decorators[i])(elementObject) || elementObject);
						element = elementFinisherExtras.element;
						this.addElementPlacement(element, placements);
						if (elementFinisherExtras.finisher) finishers.push(elementFinisherExtras.finisher);
						var newExtras = elementFinisherExtras.extras;
						if (newExtras) {
							for (var j = 0; j < newExtras.length; j++) this.addElementPlacement(newExtras[j], placements);
							extras.push.apply(extras, newExtras);
						}
					}
					return {
						element,
						finishers,
						extras
					};
				},
				decorateConstructor: function(elements, decorators) {
					var finishers = [];
					for (var i = decorators.length - 1; i >= 0; i--) {
						var obj = this.fromClassDescriptor(elements);
						var elementsAndFinisher = this.toClassDescriptor((0, decorators[i])(obj) || obj);
						if (elementsAndFinisher.finisher !== void 0) finishers.push(elementsAndFinisher.finisher);
						if (elementsAndFinisher.elements !== void 0) {
							elements = elementsAndFinisher.elements;
							for (var j = 0; j < elements.length - 1; j++) for (var k = j + 1; k < elements.length; k++) if (elements[j].key === elements[k].key && elements[j].placement === elements[k].placement) throw new TypeError("Duplicated element (" + elements[j].key + ")");
						}
					}
					return {
						elements,
						finishers
					};
				},
				fromElementDescriptor: function(element) {
					var obj = {
						kind: element.kind,
						key: element.key,
						placement: element.placement,
						descriptor: element.descriptor
					};
					Object.defineProperty(obj, Symbol.toStringTag, {
						value: "Descriptor",
						configurable: true
					});
					if (element.kind === "field") obj.initializer = element.initializer;
					return obj;
				},
				toElementDescriptors: function(elementObjects) {
					if (elementObjects === void 0) return;
					return _toArray(elementObjects).map(function(elementObject) {
						var element = this.toElementDescriptor(elementObject);
						this.disallowProperty(elementObject, "finisher", "An element descriptor");
						this.disallowProperty(elementObject, "extras", "An element descriptor");
						return element;
					}, this);
				},
				toElementDescriptor: function(elementObject) {
					var kind = String(elementObject.kind);
					if (kind !== "method" && kind !== "field") throw new TypeError("An element descriptor's .kind property must be either \"method\" or \"field\", but a decorator created an element descriptor with .kind \"" + kind + "\"");
					var key = _toPropertyKey(elementObject.key);
					var placement = String(elementObject.placement);
					if (placement !== "static" && placement !== "prototype" && placement !== "own") throw new TypeError("An element descriptor's .placement property must be one of \"static\", \"prototype\" or \"own\", but a decorator created an element descriptor with .placement \"" + placement + "\"");
					var descriptor = elementObject.descriptor;
					this.disallowProperty(elementObject, "elements", "An element descriptor");
					var element = {
						kind,
						key,
						placement,
						descriptor: Object.assign({}, descriptor)
					};
					if (kind !== "field") this.disallowProperty(elementObject, "initializer", "A method descriptor");
					else {
						this.disallowProperty(descriptor, "get", "The property descriptor of a field descriptor");
						this.disallowProperty(descriptor, "set", "The property descriptor of a field descriptor");
						this.disallowProperty(descriptor, "value", "The property descriptor of a field descriptor");
						element.initializer = elementObject.initializer;
					}
					return element;
				},
				toElementFinisherExtras: function(elementObject) {
					return {
						element: this.toElementDescriptor(elementObject),
						finisher: _optionalCallableProperty(elementObject, "finisher"),
						extras: this.toElementDescriptors(elementObject.extras)
					};
				},
				fromClassDescriptor: function(elements) {
					var obj = {
						kind: "class",
						elements: elements.map(this.fromElementDescriptor, this)
					};
					Object.defineProperty(obj, Symbol.toStringTag, {
						value: "Descriptor",
						configurable: true
					});
					return obj;
				},
				toClassDescriptor: function(obj) {
					var kind = String(obj.kind);
					if (kind !== "class") throw new TypeError("A class descriptor's .kind property must be \"class\", but a decorator created a class descriptor with .kind \"" + kind + "\"");
					this.disallowProperty(obj, "key", "A class descriptor");
					this.disallowProperty(obj, "placement", "A class descriptor");
					this.disallowProperty(obj, "descriptor", "A class descriptor");
					this.disallowProperty(obj, "initializer", "A class descriptor");
					this.disallowProperty(obj, "extras", "A class descriptor");
					var finisher = _optionalCallableProperty(obj, "finisher");
					return {
						elements: this.toElementDescriptors(obj.elements),
						finisher
					};
				},
				runClassFinishers: function(constructor, finishers) {
					for (var i = 0; i < finishers.length; i++) {
						var newConstructor = (0, finishers[i])(constructor);
						if (newConstructor !== void 0) {
							if (typeof newConstructor !== "function") throw new TypeError("Finishers must return a constructor.");
							constructor = newConstructor;
						}
					}
					return constructor;
				},
				disallowProperty: function(obj, name, objectType) {
					if (obj[name] !== void 0) throw new TypeError(objectType + " can't have a ." + name + " property.");
				}
			};
			return api;
		}
		function _hasDecorators(element) {
			return element.decorators && element.decorators.length;
		}
		function _optionalCallableProperty(obj, name) {
			var value = obj[name];
			if (value !== void 0 && typeof value !== "function") throw new TypeError("Expected '" + name + "' to be a function");
			return value;
		}
		function _wrapRegExp(re, groups) {
			_wrapRegExp = function(re, groups) {
				return new BabelRegExp(re, groups);
			};
			var _RegExp = _wrapNativeSuper(RegExp);
			var _super = RegExp.prototype;
			var _groups = /* @__PURE__ */ new WeakMap();
			function BabelRegExp(re, groups) {
				var _this = _RegExp.call(this, re);
				_groups.set(_this, groups);
				return _this;
			}
			_inherits(BabelRegExp, _RegExp);
			BabelRegExp.prototype.exec = function(str) {
				var result = _super.exec.call(this, str);
				if (result) result.groups = buildGroups(result, this);
				return result;
			};
			BabelRegExp.prototype[Symbol.replace] = function(str, substitution) {
				if (typeof substitution === "string") {
					var groups = _groups.get(this);
					return _super[Symbol.replace].call(this, str, substitution.replace(/\$<([^>]+)>/g, function(_, name) {
						return "$" + groups[name];
					}));
				} else if (typeof substitution === "function") {
					var _this = this;
					return _super[Symbol.replace].call(this, str, function() {
						var args = [];
						args.push.apply(args, arguments);
						if (typeof args[args.length - 1] !== "object") args.push(buildGroups(args, _this));
						return substitution.apply(this, args);
					});
				} else return _super[Symbol.replace].call(this, str, substitution);
			};
			function buildGroups(result, re) {
				var g = _groups.get(re);
				return Object.keys(g).reduce(function(groups, name) {
					groups[name] = result[g[name]];
					return groups;
				}, Object.create(null));
			}
			return _wrapRegExp.apply(this, arguments);
		}
		var arrayRemove = function arrayRemove(arr, index) {
			return arr.splice(index, 1);
		};
		var run = function run(cb, sync) {
			if (sync) cb();
			else if (document.hidden) Promise.resolve(1).then(cb);
			else setTimeout(cb, 0);
		};
		var on = function on() {
			var listeners = [];
			var off = function off(event, cb) {
				arrayRemove(listeners, listeners.findIndex(function(listener) {
					return listener.event === event && (listener.cb === cb || !cb);
				}));
			};
			var _fire = function fire(event, args, sync) {
				listeners.filter(function(listener) {
					return listener.event === event;
				}).map(function(listener) {
					return listener.cb;
				}).forEach(function(cb) {
					return run(function() {
						return cb.apply(void 0, _toConsumableArray(args));
					}, sync);
				});
			};
			return {
				fireSync: function fireSync(event) {
					for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) args[_key - 1] = arguments[_key];
					_fire(event, args, true);
				},
				fire: function fire(event) {
					for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) args[_key2 - 1] = arguments[_key2];
					_fire(event, args, false);
				},
				on: function on(event, cb) {
					listeners.push({
						event,
						cb
					});
				},
				onOnce: function onOnce(event, _cb) {
					listeners.push({
						event,
						cb: function cb() {
							off(event, _cb);
							_cb.apply(void 0, arguments);
						}
					});
				},
				off
			};
		};
		var copyObjectPropertiesToObject = function copyObjectPropertiesToObject(src, target, excluded) {
			Object.getOwnPropertyNames(src).filter(function(property) {
				return !excluded.includes(property);
			}).forEach(function(key) {
				return Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(src, key));
			});
		};
		var PRIVATE = [
			"fire",
			"process",
			"revert",
			"load",
			"on",
			"off",
			"onOnce",
			"retryLoad",
			"extend",
			"archive",
			"archived",
			"release",
			"released",
			"requestProcessing",
			"freeze"
		];
		var createItemAPI = function createItemAPI(item) {
			var api = {};
			copyObjectPropertiesToObject(item, api, PRIVATE);
			return api;
		};
		var removeReleasedItems = function removeReleasedItems(items) {
			items.forEach(function(item, index) {
				if (item.released) arrayRemove(items, index);
			});
		};
		var ItemStatus = {
			INIT: 1,
			IDLE: 2,
			PROCESSING_QUEUED: 9,
			PROCESSING: 3,
			PROCESSING_COMPLETE: 5,
			PROCESSING_ERROR: 6,
			PROCESSING_REVERT_ERROR: 10,
			LOADING: 7,
			LOAD_ERROR: 8
		};
		var FileOrigin = {
			INPUT: 1,
			LIMBO: 2,
			LOCAL: 3
		};
		var getNonNumeric = function getNonNumeric(str) {
			return /[^0-9]+/.exec(str);
		};
		var getDecimalSeparator = function getDecimalSeparator() {
			return getNonNumeric(1.1.toLocaleString())[0];
		};
		var getThousandsSeparator = function getThousandsSeparator() {
			var decimalSeparator = getDecimalSeparator();
			var thousandsStringWithSeparator = 1e3.toLocaleString();
			if (thousandsStringWithSeparator !== 1e3.toString()) return getNonNumeric(thousandsStringWithSeparator)[0];
			return decimalSeparator === "." ? "," : ".";
		};
		var Type = {
			BOOLEAN: "boolean",
			INT: "int",
			NUMBER: "number",
			STRING: "string",
			ARRAY: "array",
			OBJECT: "object",
			FUNCTION: "function",
			ACTION: "action",
			SERVER_API: "serverapi",
			REGEX: "regex"
		};
		var filters = [];
		var applyFilterChain = function applyFilterChain(key, value, utils) {
			return new Promise(function(resolve, reject) {
				var matchingFilters = filters.filter(function(f) {
					return f.key === key;
				}).map(function(f) {
					return f.cb;
				});
				if (matchingFilters.length === 0) {
					resolve(value);
					return;
				}
				var initialFilter = matchingFilters.shift();
				matchingFilters.reduce(function(current, next) {
					return current.then(function(value) {
						return next(value, utils);
					});
				}, initialFilter(value, utils)).then(function(value) {
					return resolve(value);
				}).catch(function(error) {
					return reject(error);
				});
			});
		};
		var applyFilters = function applyFilters(key, value, utils) {
			return filters.filter(function(f) {
				return f.key === key;
			}).map(function(f) {
				return f.cb(value, utils);
			});
		};
		var addFilter = function addFilter(key, cb) {
			return filters.push({
				key,
				cb
			});
		};
		var extendDefaultOptions = function extendDefaultOptions(additionalOptions) {
			return Object.assign(defaultOptions, additionalOptions);
		};
		var getOptions = function getOptions() {
			return Object.assign({}, defaultOptions);
		};
		var setOptions = function setOptions(opts) {
			forin(opts, function(key, value) {
				if (!defaultOptions[key]) return;
				defaultOptions[key][0] = getValueByType(value, defaultOptions[key][0], defaultOptions[key][1]);
			});
		};
		var defaultOptions = {
			id: [null, Type.STRING],
			name: ["filepond", Type.STRING],
			disabled: [false, Type.BOOLEAN],
			className: [null, Type.STRING],
			required: [false, Type.BOOLEAN],
			captureMethod: [null, Type.STRING],
			allowSyncAcceptAttribute: [true, Type.BOOLEAN],
			allowDrop: [true, Type.BOOLEAN],
			allowBrowse: [true, Type.BOOLEAN],
			allowPaste: [true, Type.BOOLEAN],
			allowMultiple: [false, Type.BOOLEAN],
			allowReplace: [true, Type.BOOLEAN],
			allowRevert: [true, Type.BOOLEAN],
			allowRemove: [true, Type.BOOLEAN],
			allowProcess: [true, Type.BOOLEAN],
			allowReorder: [false, Type.BOOLEAN],
			allowDirectoriesOnly: [false, Type.BOOLEAN],
			storeAsFile: [false, Type.BOOLEAN],
			forceRevert: [false, Type.BOOLEAN],
			maxFiles: [null, Type.INT],
			checkValidity: [false, Type.BOOLEAN],
			itemInsertLocationFreedom: [true, Type.BOOLEAN],
			itemInsertLocation: ["before", Type.STRING],
			itemInsertInterval: [75, Type.INT],
			dropOnPage: [false, Type.BOOLEAN],
			dropOnElement: [true, Type.BOOLEAN],
			dropValidation: [false, Type.BOOLEAN],
			ignoredFiles: [[
				".ds_store",
				"thumbs.db",
				"desktop.ini"
			], Type.ARRAY],
			instantUpload: [true, Type.BOOLEAN],
			maxParallelUploads: [2, Type.INT],
			allowMinimumUploadDuration: [true, Type.BOOLEAN],
			chunkUploads: [false, Type.BOOLEAN],
			chunkForce: [false, Type.BOOLEAN],
			chunkSize: [5e6, Type.INT],
			chunkRetryDelays: [[
				500,
				1e3,
				3e3
			], Type.ARRAY],
			server: [null, Type.SERVER_API],
			fileSizeBase: [1e3, Type.INT],
			labelFileSizeBytes: ["bytes", Type.STRING],
			labelFileSizeKilobytes: ["KB", Type.STRING],
			labelFileSizeMegabytes: ["MB", Type.STRING],
			labelFileSizeGigabytes: ["GB", Type.STRING],
			labelDecimalSeparator: [getDecimalSeparator(), Type.STRING],
			labelThousandsSeparator: [getThousandsSeparator(), Type.STRING],
			labelIdle: ["Drag & Drop your files or <span class=\"filepond--label-action\">Browse</span>", Type.STRING],
			labelInvalidField: ["Field contains invalid files", Type.STRING],
			labelFileWaitingForSize: ["Waiting for size", Type.STRING],
			labelFileSizeNotAvailable: ["Size not available", Type.STRING],
			labelFileCountSingular: ["file in list", Type.STRING],
			labelFileCountPlural: ["files in list", Type.STRING],
			labelFileLoading: ["Loading", Type.STRING],
			labelFileAdded: ["Added", Type.STRING],
			labelFileLoadError: ["Error during load", Type.STRING],
			labelFileRemoved: ["Removed", Type.STRING],
			labelFileRemoveError: ["Error during remove", Type.STRING],
			labelFileProcessing: ["Uploading", Type.STRING],
			labelFileProcessingComplete: ["Upload complete", Type.STRING],
			labelFileProcessingAborted: ["Upload cancelled", Type.STRING],
			labelFileProcessingError: ["Error during upload", Type.STRING],
			labelFileProcessingRevertError: ["Error during revert", Type.STRING],
			labelTapToCancel: ["tap to cancel", Type.STRING],
			labelTapToRetry: ["tap to retry", Type.STRING],
			labelTapToUndo: ["tap to undo", Type.STRING],
			labelButtonRemoveItem: ["Remove", Type.STRING],
			labelButtonAbortItemLoad: ["Abort", Type.STRING],
			labelButtonRetryItemLoad: ["Retry", Type.STRING],
			labelButtonAbortItemProcessing: ["Cancel", Type.STRING],
			labelButtonUndoItemProcessing: ["Undo", Type.STRING],
			labelButtonRetryItemProcessing: ["Retry", Type.STRING],
			labelButtonProcessItem: ["Upload", Type.STRING],
			iconRemove: ["<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.586 13l-2.293 2.293a1 1 0 0 0 1.414 1.414L13 14.414l2.293 2.293a1 1 0 0 0 1.414-1.414L14.414 13l2.293-2.293a1 1 0 0 0-1.414-1.414L13 11.586l-2.293-2.293a1 1 0 0 0-1.414 1.414L11.586 13z\" fill=\"currentColor\" fill-rule=\"nonzero\"/></svg>", Type.STRING],
			iconProcess: ["<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M14 10.414v3.585a1 1 0 0 1-2 0v-3.585l-1.293 1.293a1 1 0 0 1-1.414-1.415l3-3a1 1 0 0 1 1.414 0l3 3a1 1 0 0 1-1.414 1.415L14 10.414zM9 18a1 1 0 0 1 0-2h8a1 1 0 0 1 0 2H9z\" fill=\"currentColor\" fill-rule=\"evenodd\"/></svg>", Type.STRING],
			iconRetry: ["<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.81 9.185l-.038.02A4.997 4.997 0 0 0 8 13.683a5 5 0 0 0 5 5 5 5 0 0 0 5-5 1 1 0 0 1 2 0A7 7 0 1 1 9.722 7.496l-.842-.21a.999.999 0 1 1 .484-1.94l3.23.806c.535.133.86.675.73 1.21l-.804 3.233a.997.997 0 0 1-1.21.73.997.997 0 0 1-.73-1.21l.23-.928v-.002z\" fill=\"currentColor\" fill-rule=\"nonzero\"/></svg>", Type.STRING],
			iconUndo: ["<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9.185 10.81l.02-.038A4.997 4.997 0 0 1 13.683 8a5 5 0 0 1 5 5 5 5 0 0 1-5 5 1 1 0 0 0 0 2A7 7 0 1 0 7.496 9.722l-.21-.842a.999.999 0 1 0-1.94.484l.806 3.23c.133.535.675.86 1.21.73l3.233-.803a.997.997 0 0 0 .73-1.21.997.997 0 0 0-1.21-.73l-.928.23-.002-.001z\" fill=\"currentColor\" fill-rule=\"nonzero\"/></svg>", Type.STRING],
			iconDone: ["<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M18.293 9.293a1 1 0 0 1 1.414 1.414l-7.002 7a1 1 0 0 1-1.414 0l-3.998-4a1 1 0 1 1 1.414-1.414L12 15.586l6.294-6.293z\" fill=\"currentColor\" fill-rule=\"nonzero\"/></svg>", Type.STRING],
			oninit: [null, Type.FUNCTION],
			onwarning: [null, Type.FUNCTION],
			onerror: [null, Type.FUNCTION],
			onactivatefile: [null, Type.FUNCTION],
			oninitfile: [null, Type.FUNCTION],
			onaddfilestart: [null, Type.FUNCTION],
			onaddfileprogress: [null, Type.FUNCTION],
			onaddfile: [null, Type.FUNCTION],
			onprocessfilestart: [null, Type.FUNCTION],
			onprocessfileprogress: [null, Type.FUNCTION],
			onprocessfileabort: [null, Type.FUNCTION],
			onprocessfilerevert: [null, Type.FUNCTION],
			onprocessfile: [null, Type.FUNCTION],
			onprocessfiles: [null, Type.FUNCTION],
			onremovefile: [null, Type.FUNCTION],
			onpreparefile: [null, Type.FUNCTION],
			onupdatefiles: [null, Type.FUNCTION],
			onreorderfiles: [null, Type.FUNCTION],
			beforeDropFile: [null, Type.FUNCTION],
			beforeAddFile: [null, Type.FUNCTION],
			beforeRemoveFile: [null, Type.FUNCTION],
			beforePrepareFile: [null, Type.FUNCTION],
			stylePanelLayout: [null, Type.STRING],
			stylePanelAspectRatio: [null, Type.STRING],
			styleItemPanelAspectRatio: [null, Type.STRING],
			styleButtonRemoveItemPosition: ["left", Type.STRING],
			styleButtonProcessItemPosition: ["right", Type.STRING],
			styleLoadIndicatorPosition: ["right", Type.STRING],
			styleProgressIndicatorPosition: ["right", Type.STRING],
			styleButtonRemoveItemAlign: [false, Type.BOOLEAN],
			files: [[], Type.ARRAY],
			credits: [["https://filepond.com", "Powered by FilePond"], Type.ARRAY]
		};
		var getItemByQuery = function getItemByQuery(items, query) {
			if (isEmpty(query)) return items[0] || null;
			if (isInt(query)) return items[query] || null;
			if (typeof query === "object") query = query.id;
			return items.find(function(item) {
				return item.id === query;
			}) || null;
		};
		var getNumericAspectRatioFromString = function getNumericAspectRatioFromString(aspectRatio) {
			if (isEmpty(aspectRatio)) return aspectRatio;
			if (/:/.test(aspectRatio)) {
				var parts = aspectRatio.split(":");
				return parts[1] / parts[0];
			}
			return parseFloat(aspectRatio);
		};
		var getActiveItems = function getActiveItems(items) {
			return items.filter(function(item) {
				return !item.archived;
			});
		};
		var Status = {
			EMPTY: 0,
			IDLE: 1,
			ERROR: 2,
			BUSY: 3,
			READY: 4
		};
		var res = null;
		var canUpdateFileInput = function canUpdateFileInput() {
			if (res === null) try {
				var dataTransfer = new DataTransfer();
				dataTransfer.items.add(new File(["hello world"], "This_Works.txt"));
				var el = document.createElement("input");
				el.setAttribute("type", "file");
				el.files = dataTransfer.files;
				res = el.files.length === 1;
			} catch (err) {
				res = false;
			}
			return res;
		};
		var ITEM_ERROR = [
			ItemStatus.LOAD_ERROR,
			ItemStatus.PROCESSING_ERROR,
			ItemStatus.PROCESSING_REVERT_ERROR
		];
		var ITEM_BUSY = [
			ItemStatus.LOADING,
			ItemStatus.PROCESSING,
			ItemStatus.PROCESSING_QUEUED,
			ItemStatus.INIT
		];
		var ITEM_READY = [ItemStatus.PROCESSING_COMPLETE];
		var isItemInErrorState = function isItemInErrorState(item) {
			return ITEM_ERROR.includes(item.status);
		};
		var isItemInBusyState = function isItemInBusyState(item) {
			return ITEM_BUSY.includes(item.status);
		};
		var isItemInReadyState = function isItemInReadyState(item) {
			return ITEM_READY.includes(item.status);
		};
		var isAsync = function isAsync(state) {
			return isObject(state.options.server) && (isObject(state.options.server.process) || isFunction(state.options.server.process));
		};
		var queries = function queries(state) {
			return {
				GET_STATUS: function GET_STATUS() {
					var items = getActiveItems(state.items);
					var EMPTY = Status.EMPTY, ERROR = Status.ERROR, BUSY = Status.BUSY, IDLE = Status.IDLE, READY = Status.READY;
					if (items.length === 0) return EMPTY;
					if (items.some(isItemInErrorState)) return ERROR;
					if (items.some(isItemInBusyState)) return BUSY;
					if (items.some(isItemInReadyState)) return READY;
					return IDLE;
				},
				GET_ITEM: function GET_ITEM(query) {
					return getItemByQuery(state.items, query);
				},
				GET_ACTIVE_ITEM: function GET_ACTIVE_ITEM(query) {
					return getItemByQuery(getActiveItems(state.items), query);
				},
				GET_ACTIVE_ITEMS: function GET_ACTIVE_ITEMS() {
					return getActiveItems(state.items);
				},
				GET_ITEMS: function GET_ITEMS() {
					return state.items;
				},
				GET_ITEM_NAME: function GET_ITEM_NAME(query) {
					var item = getItemByQuery(state.items, query);
					return item ? item.filename : null;
				},
				GET_ITEM_SIZE: function GET_ITEM_SIZE(query) {
					var item = getItemByQuery(state.items, query);
					return item ? item.fileSize : null;
				},
				GET_STYLES: function GET_STYLES() {
					return Object.keys(state.options).filter(function(key) {
						return /^style/.test(key);
					}).map(function(option) {
						return {
							name: option,
							value: state.options[option]
						};
					});
				},
				GET_PANEL_ASPECT_RATIO: function GET_PANEL_ASPECT_RATIO() {
					return /circle/.test(state.options.stylePanelLayout) ? 1 : getNumericAspectRatioFromString(state.options.stylePanelAspectRatio);
				},
				GET_ITEM_PANEL_ASPECT_RATIO: function GET_ITEM_PANEL_ASPECT_RATIO() {
					return state.options.styleItemPanelAspectRatio;
				},
				GET_ITEMS_BY_STATUS: function GET_ITEMS_BY_STATUS(status) {
					return getActiveItems(state.items).filter(function(item) {
						return item.status === status;
					});
				},
				GET_TOTAL_ITEMS: function GET_TOTAL_ITEMS() {
					return getActiveItems(state.items).length;
				},
				SHOULD_UPDATE_FILE_INPUT: function SHOULD_UPDATE_FILE_INPUT() {
					return state.options.storeAsFile && canUpdateFileInput() && !isAsync(state);
				},
				IS_ASYNC: function IS_ASYNC() {
					return isAsync(state);
				},
				GET_FILE_SIZE_LABELS: function GET_FILE_SIZE_LABELS(query) {
					return {
						labelBytes: query("GET_LABEL_FILE_SIZE_BYTES") || void 0,
						labelKilobytes: query("GET_LABEL_FILE_SIZE_KILOBYTES") || void 0,
						labelMegabytes: query("GET_LABEL_FILE_SIZE_MEGABYTES") || void 0,
						labelGigabytes: query("GET_LABEL_FILE_SIZE_GIGABYTES") || void 0
					};
				}
			};
		};
		var hasRoomForItem = function hasRoomForItem(state) {
			var count = getActiveItems(state.items).length;
			if (!state.options.allowMultiple) return count === 0;
			var maxFileCount = state.options.maxFiles;
			if (maxFileCount === null) return true;
			if (count < maxFileCount) return true;
			return false;
		};
		var limit = function limit(value, min, max) {
			return Math.max(Math.min(max, value), min);
		};
		var arrayInsert = function arrayInsert(arr, index, item) {
			return arr.splice(index, 0, item);
		};
		var insertItem = function insertItem(items, item, index) {
			if (isEmpty(item)) return null;
			if (typeof index === "undefined") {
				items.push(item);
				return item;
			}
			index = limit(index, 0, items.length);
			arrayInsert(items, index, item);
			return item;
		};
		var isBase64DataURI = function isBase64DataURI(str) {
			return /^\s*data:([a-z]+\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s]*)\s*$/i.test(str);
		};
		var getFilenameFromURL = function getFilenameFromURL(url) {
			return ("" + url).split("/").pop().split("?").shift();
		};
		var getExtensionFromFilename = function getExtensionFromFilename(name) {
			return name.split(".").pop();
		};
		var guesstimateExtension = function guesstimateExtension(type) {
			if (typeof type !== "string") return "";
			var subtype = type.split("/").pop();
			if (/svg/.test(subtype)) return "svg";
			if (/zip|compressed/.test(subtype)) return "zip";
			if (/plain/.test(subtype)) return "txt";
			if (/msword/.test(subtype)) return "doc";
			if (/[a-z]+/.test(subtype)) {
				if (subtype === "jpeg") return "jpg";
				return subtype;
			}
			return "";
		};
		var leftPad = function leftPad(value) {
			var padding = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "";
			return (padding + value).slice(-padding.length);
		};
		var getDateString = function getDateString() {
			var date = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : /* @__PURE__ */ new Date();
			return date.getFullYear() + "-" + leftPad(date.getMonth() + 1, "00") + "-" + leftPad(date.getDate(), "00") + "_" + leftPad(date.getHours(), "00") + "-" + leftPad(date.getMinutes(), "00") + "-" + leftPad(date.getSeconds(), "00");
		};
		var getFileFromBlob = function getFileFromBlob(blob, filename) {
			var type = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : null;
			var extension = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : null;
			var file = typeof type === "string" ? blob.slice(0, blob.size, type) : blob.slice(0, blob.size, blob.type);
			file.lastModifiedDate = /* @__PURE__ */ new Date();
			if (blob._relativePath) file._relativePath = blob._relativePath;
			if (!isString(filename)) filename = getDateString();
			if (filename && extension === null && getExtensionFromFilename(filename)) file.name = filename;
			else {
				extension = extension || guesstimateExtension(file.type);
				file.name = filename + (extension ? "." + extension : "");
			}
			return file;
		};
		var getBlobBuilder = function getBlobBuilder() {
			return window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;
		};
		var createBlob = function createBlob(arrayBuffer, mimeType) {
			var BB = getBlobBuilder();
			if (BB) {
				var bb = new BB();
				bb.append(arrayBuffer);
				return bb.getBlob(mimeType);
			}
			return new Blob([arrayBuffer], { type: mimeType });
		};
		var getBlobFromByteStringWithMimeType = function getBlobFromByteStringWithMimeType(byteString, mimeType) {
			var ab = new ArrayBuffer(byteString.length);
			var ia = new Uint8Array(ab);
			for (var i = 0; i < byteString.length; i++) ia[i] = byteString.charCodeAt(i);
			return createBlob(ab, mimeType);
		};
		var getMimeTypeFromBase64DataURI = function getMimeTypeFromBase64DataURI(dataURI) {
			return (/^data:(.+);/.exec(dataURI) || [])[1] || null;
		};
		var getBase64DataFromBase64DataURI = function getBase64DataFromBase64DataURI(dataURI) {
			return dataURI.split(",")[1].replace(/\s/g, "");
		};
		var getByteStringFromBase64DataURI = function getByteStringFromBase64DataURI(dataURI) {
			return atob(getBase64DataFromBase64DataURI(dataURI));
		};
		var getBlobFromBase64DataURI = function getBlobFromBase64DataURI(dataURI) {
			var mimeType = getMimeTypeFromBase64DataURI(dataURI);
			return getBlobFromByteStringWithMimeType(getByteStringFromBase64DataURI(dataURI), mimeType);
		};
		var getFileFromBase64DataURI = function getFileFromBase64DataURI(dataURI, filename, extension) {
			return getFileFromBlob(getBlobFromBase64DataURI(dataURI), filename, null, extension);
		};
		var getFileNameFromHeader = function getFileNameFromHeader(header) {
			if (!/^content-disposition:/i.test(header)) return null;
			var matches = header.split(/filename=|filename\*=.+''/).splice(1).map(function(name) {
				return name.trim().replace(/^["']|[;"']{0,2}$/g, "");
			}).filter(function(name) {
				return name.length;
			});
			return matches.length ? decodeURI(matches[matches.length - 1]) : null;
		};
		var getFileSizeFromHeader = function getFileSizeFromHeader(header) {
			if (/content-length:/i.test(header)) {
				var size = header.match(/[0-9]+/)[0];
				return size ? parseInt(size, 10) : null;
			}
			return null;
		};
		var getTranfserIdFromHeader = function getTranfserIdFromHeader(header) {
			if (/x-content-transfer-id:/i.test(header)) return (header.split(":")[1] || "").trim() || null;
			return null;
		};
		var getFileInfoFromHeaders = function getFileInfoFromHeaders(headers) {
			var info = {
				source: null,
				name: null,
				size: null
			};
			var rows = headers.split("\n");
			var _iteratorNormalCompletion = true;
			var _didIteratorError = false;
			var _iteratorError = void 0;
			try {
				for (var _iterator = rows[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
					var header = _step.value;
					var name = getFileNameFromHeader(header);
					if (name) {
						info.name = name;
						continue;
					}
					var size = getFileSizeFromHeader(header);
					if (size) {
						info.size = size;
						continue;
					}
					var source = getTranfserIdFromHeader(header);
					if (source) {
						info.source = source;
						continue;
					}
				}
			} catch (err) {
				_didIteratorError = true;
				_iteratorError = err;
			} finally {
				try {
					if (!_iteratorNormalCompletion && _iterator.return != null) _iterator.return();
				} finally {
					if (_didIteratorError) throw _iteratorError;
				}
			}
			return info;
		};
		var createFileLoader = function createFileLoader(fetchFn) {
			var state = {
				source: null,
				complete: false,
				progress: 0,
				size: null,
				timestamp: null,
				duration: 0,
				request: null
			};
			var getProgress = function getProgress() {
				return state.progress;
			};
			var abort = function abort() {
				if (state.request && state.request.abort) state.request.abort();
			};
			var load = function load() {
				var source = state.source;
				api.fire("init", source);
				if (source instanceof File) api.fire("load", source);
				else if (source instanceof Blob) api.fire("load", getFileFromBlob(source, source.name));
				else if (isBase64DataURI(source)) api.fire("load", getFileFromBase64DataURI(source));
				else loadURL(source);
			};
			var loadURL = function loadURL(url) {
				if (!fetchFn) {
					api.fire("error", {
						type: "error",
						body: "Can't load URL",
						code: 400
					});
					return;
				}
				state.timestamp = Date.now();
				state.request = fetchFn(url, function(response) {
					state.duration = Date.now() - state.timestamp;
					state.complete = true;
					if (response instanceof Blob) response = getFileFromBlob(response, response.name || getFilenameFromURL(url));
					api.fire("load", response instanceof Blob ? response : response ? response.body : null);
				}, function(error) {
					api.fire("error", typeof error === "string" ? {
						type: "error",
						code: 0,
						body: error
					} : error);
				}, function(computable, current, total) {
					if (total) state.size = total;
					state.duration = Date.now() - state.timestamp;
					if (!computable) {
						state.progress = null;
						return;
					}
					state.progress = current / total;
					api.fire("progress", state.progress);
				}, function() {
					api.fire("abort");
				}, function(response) {
					var fileinfo = getFileInfoFromHeaders(typeof response === "string" ? response : response.headers);
					api.fire("meta", {
						size: state.size || fileinfo.size,
						filename: fileinfo.name,
						source: fileinfo.source
					});
				});
			};
			var api = Object.assign({}, on(), {
				setSource: function setSource(source) {
					return state.source = source;
				},
				getProgress,
				abort,
				load
			});
			return api;
		};
		var isGet = function isGet(method) {
			return /GET|HEAD/.test(method);
		};
		var sendRequest = function sendRequest(data, url, options) {
			var api = {
				onheaders: function onheaders() {},
				onprogress: function onprogress() {},
				onload: function onload() {},
				ontimeout: function ontimeout() {},
				onerror: function onerror() {},
				onabort: function onabort() {},
				abort: function abort() {
					aborted = true;
					xhr.abort();
				}
			};
			var aborted = false;
			var headersReceived = false;
			options = Object.assign({
				method: "POST",
				headers: {},
				withCredentials: false
			}, options);
			url = encodeURI(url);
			if (isGet(options.method) && data) url = "" + url + encodeURIComponent(typeof data === "string" ? data : JSON.stringify(data));
			var xhr = new XMLHttpRequest();
			var process = isGet(options.method) ? xhr : xhr.upload;
			process.onprogress = function(e) {
				if (aborted) return;
				api.onprogress(e.lengthComputable, e.loaded, e.total);
			};
			xhr.onreadystatechange = function() {
				if (xhr.readyState < 2) return;
				if (xhr.readyState === 4 && xhr.status === 0) return;
				if (headersReceived) return;
				headersReceived = true;
				api.onheaders(xhr);
			};
			xhr.onload = function() {
				if (xhr.status >= 200 && xhr.status < 300) api.onload(xhr);
				else api.onerror(xhr);
			};
			xhr.onerror = function() {
				return api.onerror(xhr);
			};
			xhr.onabort = function() {
				aborted = true;
				api.onabort();
			};
			xhr.ontimeout = function() {
				return api.ontimeout(xhr);
			};
			xhr.open(options.method, url, true);
			if (isInt(options.timeout)) xhr.timeout = options.timeout;
			Object.keys(options.headers).forEach(function(key) {
				var value = unescape(encodeURIComponent(options.headers[key]));
				xhr.setRequestHeader(key, value);
			});
			if (options.responseType) xhr.responseType = options.responseType;
			if (options.withCredentials) xhr.withCredentials = true;
			xhr.send(data);
			return api;
		};
		var createResponse = function createResponse(type, code, body, headers) {
			return {
				type,
				code,
				body,
				headers
			};
		};
		var createTimeoutResponse = function createTimeoutResponse(cb) {
			return function(xhr) {
				cb(createResponse("error", 0, "Timeout", xhr.getAllResponseHeaders()));
			};
		};
		var hasQS = function hasQS(str) {
			return /\?/.test(str);
		};
		var buildURL = function buildURL() {
			var url = "";
			for (var _len = arguments.length, parts = new Array(_len), _key = 0; _key < _len; _key++) parts[_key] = arguments[_key];
			parts.forEach(function(part) {
				url += hasQS(url) && hasQS(part) ? part.replace(/\?/, "&") : part;
			});
			return url;
		};
		var createFetchFunction = function createFetchFunction() {
			var apiUrl = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "";
			var action = arguments.length > 1 ? arguments[1] : void 0;
			if (typeof action === "function") return action;
			if (!action || !isString(action.url)) return null;
			var onload = action.onload || function(res) {
				return res;
			};
			var onerror = action.onerror || function(res) {
				return null;
			};
			return function(url, load, error, progress, abort, headers) {
				var request = sendRequest(url, buildURL(apiUrl, action.url), Object.assign({}, action, { responseType: "blob" }));
				request.onload = function(xhr) {
					var headers = xhr.getAllResponseHeaders();
					var filename = getFileInfoFromHeaders(headers).name || getFilenameFromURL(url);
					load(createResponse("load", xhr.status, action.method === "HEAD" ? null : getFileFromBlob(onload(xhr.response), filename), headers));
				};
				request.onerror = function(xhr) {
					error(createResponse("error", xhr.status, onerror(xhr.response) || xhr.statusText, xhr.getAllResponseHeaders()));
				};
				request.onheaders = function(xhr) {
					headers(createResponse("headers", xhr.status, null, xhr.getAllResponseHeaders()));
				};
				request.ontimeout = createTimeoutResponse(error);
				request.onprogress = progress;
				request.onabort = abort;
				return request;
			};
		};
		var ChunkStatus = {
			QUEUED: 0,
			COMPLETE: 1,
			PROCESSING: 2,
			ERROR: 3,
			WAITING: 4
		};
		var processFileChunked = function processFileChunked(apiUrl, action, name, file, metadata, load, error, progress, abort, transfer, options) {
			var chunks = [];
			var chunkTransferId = options.chunkTransferId, chunkServer = options.chunkServer, chunkSize = options.chunkSize, chunkRetryDelays = options.chunkRetryDelays;
			var state = {
				serverId: chunkTransferId,
				aborted: false
			};
			var ondata = action.ondata || function(fd) {
				return fd;
			};
			var onload = action.onload || function(xhr, method) {
				return method === "HEAD" ? xhr.getResponseHeader("Upload-Offset") : xhr.response;
			};
			var onerror = action.onerror || function(res) {
				return null;
			};
			var requestTransferId = function requestTransferId(cb) {
				var formData = new FormData();
				if (isObject(metadata)) formData.append(name, JSON.stringify(metadata));
				var headers = typeof action.headers === "function" ? action.headers(file, metadata) : Object.assign({}, action.headers, { "Upload-Length": file.size });
				var requestParams = Object.assign({}, action, { headers });
				var request = sendRequest(ondata(formData), buildURL(apiUrl, action.url), requestParams);
				request.onload = function(xhr) {
					return cb(onload(xhr, requestParams.method));
				};
				request.onerror = function(xhr) {
					return error(createResponse("error", xhr.status, onerror(xhr.response) || xhr.statusText, xhr.getAllResponseHeaders()));
				};
				request.ontimeout = createTimeoutResponse(error);
			};
			var requestTransferOffset = function requestTransferOffset(cb) {
				var requestUrl = buildURL(apiUrl, chunkServer.url, state.serverId);
				var requestParams = {
					headers: typeof action.headers === "function" ? action.headers(state.serverId) : Object.assign({}, action.headers),
					method: "HEAD"
				};
				var request = sendRequest(null, requestUrl, requestParams);
				request.onload = function(xhr) {
					return cb(onload(xhr, requestParams.method));
				};
				request.onerror = function(xhr) {
					return error(createResponse("error", xhr.status, onerror(xhr.response) || xhr.statusText, xhr.getAllResponseHeaders()));
				};
				request.ontimeout = createTimeoutResponse(error);
			};
			var lastChunkIndex = Math.floor(file.size / chunkSize);
			for (var i = 0; i <= lastChunkIndex; i++) {
				var offset = i * chunkSize;
				var data = file.slice(offset, offset + chunkSize, "application/offset+octet-stream");
				chunks[i] = {
					index: i,
					size: data.size,
					offset,
					data,
					file,
					progress: 0,
					retries: _toConsumableArray(chunkRetryDelays),
					status: ChunkStatus.QUEUED,
					error: null,
					request: null,
					timeout: null
				};
			}
			var completeProcessingChunks = function completeProcessingChunks() {
				return load(state.serverId);
			};
			var canProcessChunk = function canProcessChunk(chunk) {
				return chunk.status === ChunkStatus.QUEUED || chunk.status === ChunkStatus.ERROR;
			};
			var processChunk = function processChunk(chunk) {
				if (state.aborted) return;
				chunk = chunk || chunks.find(canProcessChunk);
				if (!chunk) {
					if (chunks.every(function(chunk) {
						return chunk.status === ChunkStatus.COMPLETE;
					})) completeProcessingChunks();
					return;
				}
				chunk.status = ChunkStatus.PROCESSING;
				chunk.progress = null;
				var ondata = chunkServer.ondata || function(fd) {
					return fd;
				};
				var onerror = chunkServer.onerror || function(res) {
					return null;
				};
				var onload = chunkServer.onload || function() {};
				var requestUrl = buildURL(apiUrl, chunkServer.url, state.serverId);
				var headers = typeof chunkServer.headers === "function" ? chunkServer.headers(chunk) : Object.assign({}, chunkServer.headers, {
					"Content-Type": "application/offset+octet-stream",
					"Upload-Offset": chunk.offset,
					"Upload-Length": file.size,
					"Upload-Name": file.name
				});
				var request = chunk.request = sendRequest(ondata(chunk.data), requestUrl, Object.assign({}, chunkServer, { headers }));
				request.onload = function(xhr) {
					onload(xhr, chunk.index, chunks.length);
					chunk.status = ChunkStatus.COMPLETE;
					chunk.request = null;
					processChunks();
				};
				request.onprogress = function(lengthComputable, loaded, total) {
					chunk.progress = lengthComputable ? loaded : null;
					updateTotalProgress();
				};
				request.onerror = function(xhr) {
					chunk.status = ChunkStatus.ERROR;
					chunk.request = null;
					chunk.error = onerror(xhr.response) || xhr.statusText;
					if (!retryProcessChunk(chunk)) error(createResponse("error", xhr.status, onerror(xhr.response) || xhr.statusText, xhr.getAllResponseHeaders()));
				};
				request.ontimeout = function(xhr) {
					chunk.status = ChunkStatus.ERROR;
					chunk.request = null;
					if (!retryProcessChunk(chunk)) createTimeoutResponse(error)(xhr);
				};
				request.onabort = function() {
					chunk.status = ChunkStatus.QUEUED;
					chunk.request = null;
					abort();
				};
			};
			var retryProcessChunk = function retryProcessChunk(chunk) {
				if (chunk.retries.length === 0) return false;
				chunk.status = ChunkStatus.WAITING;
				clearTimeout(chunk.timeout);
				chunk.timeout = setTimeout(function() {
					processChunk(chunk);
				}, chunk.retries.shift());
				return true;
			};
			var updateTotalProgress = function updateTotalProgress() {
				var totalBytesTransfered = chunks.reduce(function(p, chunk) {
					if (p === null || chunk.progress === null) return null;
					return p + chunk.progress;
				}, 0);
				if (totalBytesTransfered === null) return progress(false, 0, 0);
				progress(true, totalBytesTransfered, chunks.reduce(function(total, chunk) {
					return total + chunk.size;
				}, 0));
			};
			var processChunks = function processChunks() {
				if (chunks.filter(function(chunk) {
					return chunk.status === ChunkStatus.PROCESSING;
				}).length >= 1) return;
				processChunk();
			};
			var abortChunks = function abortChunks() {
				chunks.forEach(function(chunk) {
					clearTimeout(chunk.timeout);
					if (chunk.request) chunk.request.abort();
				});
			};
			if (!state.serverId) requestTransferId(function(serverId) {
				if (state.aborted) return;
				transfer(serverId);
				state.serverId = serverId;
				processChunks();
			});
			else requestTransferOffset(function(offset) {
				if (state.aborted) return;
				chunks.filter(function(chunk) {
					return chunk.offset < offset;
				}).forEach(function(chunk) {
					chunk.status = ChunkStatus.COMPLETE;
					chunk.progress = chunk.size;
				});
				processChunks();
			});
			return { abort: function abort() {
				state.aborted = true;
				abortChunks();
			} };
		};
		var createFileProcessorFunction = function createFileProcessorFunction(apiUrl, action, name, options) {
			return function(file, metadata, load, error, progress, abort, transfer) {
				if (!file) return;
				var canChunkUpload = options.chunkUploads;
				var shouldChunkUpload = canChunkUpload && file.size > options.chunkSize;
				var willChunkUpload = canChunkUpload && (shouldChunkUpload || options.chunkForce);
				if (file instanceof Blob && willChunkUpload) return processFileChunked(apiUrl, action, name, file, metadata, load, error, progress, abort, transfer, options);
				var ondata = action.ondata || function(fd) {
					return fd;
				};
				var onload = action.onload || function(res) {
					return res;
				};
				var onerror = action.onerror || function(res) {
					return null;
				};
				var headers = typeof action.headers === "function" ? action.headers(file, metadata) || {} : Object.assign({}, action.headers);
				var requestParams = Object.assign({}, action, { headers });
				var formData = new FormData();
				if (isObject(metadata)) formData.append(name, JSON.stringify(metadata));
				(file instanceof Blob ? [{
					name: null,
					file
				}] : file).forEach(function(item) {
					formData.append(name, item.file, item.name === null ? item.file.name : "" + item.name + item.file.name);
				});
				var request = sendRequest(ondata(formData), buildURL(apiUrl, action.url), requestParams);
				request.onload = function(xhr) {
					load(createResponse("load", xhr.status, onload(xhr.response), xhr.getAllResponseHeaders()));
				};
				request.onerror = function(xhr) {
					error(createResponse("error", xhr.status, onerror(xhr.response) || xhr.statusText, xhr.getAllResponseHeaders()));
				};
				request.ontimeout = createTimeoutResponse(error);
				request.onprogress = progress;
				request.onabort = abort;
				return request;
			};
		};
		var createProcessorFunction = function createProcessorFunction() {
			var apiUrl = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "";
			var action = arguments.length > 1 ? arguments[1] : void 0;
			var name = arguments.length > 2 ? arguments[2] : void 0;
			var options = arguments.length > 3 ? arguments[3] : void 0;
			if (typeof action === "function") return function() {
				for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) params[_key] = arguments[_key];
				return action.apply(void 0, [name].concat(params, [options]));
			};
			if (!action || !isString(action.url)) return null;
			return createFileProcessorFunction(apiUrl, action, name, options);
		};
		var createRevertFunction = function createRevertFunction() {
			var apiUrl = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "";
			var action = arguments.length > 1 ? arguments[1] : void 0;
			if (typeof action === "function") return action;
			if (!action || !isString(action.url)) return function(uniqueFileId, load) {
				return load();
			};
			var onload = action.onload || function(res) {
				return res;
			};
			var onerror = action.onerror || function(res) {
				return null;
			};
			return function(uniqueFileId, load, error) {
				var request = sendRequest(uniqueFileId, apiUrl + action.url, action);
				request.onload = function(xhr) {
					load(createResponse("load", xhr.status, onload(xhr.response), xhr.getAllResponseHeaders()));
				};
				request.onerror = function(xhr) {
					error(createResponse("error", xhr.status, onerror(xhr.response) || xhr.statusText, xhr.getAllResponseHeaders()));
				};
				request.ontimeout = createTimeoutResponse(error);
				return request;
			};
		};
		var getRandomNumber = function getRandomNumber() {
			var min = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0;
			var max = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 1;
			return min + Math.random() * (max - min);
		};
		var createPerceivedPerformanceUpdater = function createPerceivedPerformanceUpdater(cb) {
			var duration = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 1e3;
			arguments.length > 2 && arguments[2] !== void 0 && arguments[2];
			var tickMin = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 25;
			var tickMax = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : 250;
			var timeout = null;
			var start = Date.now();
			var tick = function tick() {
				var runtime = Date.now() - start;
				var delay = getRandomNumber(tickMin, tickMax);
				if (runtime + delay > duration) delay = runtime + delay - duration;
				var progress = runtime / duration;
				if (progress >= 1 || document.hidden) {
					cb(1);
					return;
				}
				cb(progress);
				timeout = setTimeout(tick, delay);
			};
			if (duration > 0) tick();
			return { clear: function clear() {
				clearTimeout(timeout);
			} };
		};
		var createFileProcessor = function createFileProcessor(processFn, options) {
			var state = {
				complete: false,
				perceivedProgress: 0,
				perceivedPerformanceUpdater: null,
				progress: null,
				timestamp: null,
				perceivedDuration: 0,
				duration: 0,
				request: null,
				response: null
			};
			var allowMinimumUploadDuration = options.allowMinimumUploadDuration;
			var process = function process(file, metadata) {
				var progressFn = function progressFn() {
					if (state.duration === 0 || state.progress === null) return;
					api.fire("progress", api.getProgress());
				};
				var completeFn = function completeFn() {
					state.complete = true;
					api.fire("load-perceived", state.response.body);
				};
				api.fire("start");
				state.timestamp = Date.now();
				state.perceivedPerformanceUpdater = createPerceivedPerformanceUpdater(function(progress) {
					state.perceivedProgress = progress;
					state.perceivedDuration = Date.now() - state.timestamp;
					progressFn();
					if (state.response && state.perceivedProgress === 1 && !state.complete) completeFn();
				}, allowMinimumUploadDuration ? getRandomNumber(750, 1500) : 0);
				state.request = processFn(file, metadata, function(response) {
					state.response = isObject(response) ? response : {
						type: "load",
						code: 200,
						body: "" + response,
						headers: {}
					};
					state.duration = Date.now() - state.timestamp;
					state.progress = 1;
					api.fire("load", state.response.body);
					if (!allowMinimumUploadDuration || allowMinimumUploadDuration && state.perceivedProgress === 1) completeFn();
				}, function(error) {
					state.perceivedPerformanceUpdater.clear();
					api.fire("error", isObject(error) ? error : {
						type: "error",
						code: 0,
						body: "" + error
					});
				}, function(computable, current, total) {
					state.duration = Date.now() - state.timestamp;
					state.progress = computable ? current / total : null;
					progressFn();
				}, function() {
					state.perceivedPerformanceUpdater.clear();
					api.fire("abort", state.response ? state.response.body : null);
				}, function(transferId) {
					api.fire("transfer", transferId);
				});
			};
			var abort = function abort() {
				if (!state.request) return;
				state.perceivedPerformanceUpdater.clear();
				if (state.request.abort) state.request.abort();
				state.complete = true;
			};
			var reset = function reset() {
				abort();
				state.complete = false;
				state.perceivedProgress = 0;
				state.progress = 0;
				state.timestamp = null;
				state.perceivedDuration = 0;
				state.duration = 0;
				state.request = null;
				state.response = null;
			};
			var getProgress = allowMinimumUploadDuration ? function() {
				return state.progress ? Math.min(state.progress, state.perceivedProgress) : null;
			} : function() {
				return state.progress || null;
			};
			var getDuration = allowMinimumUploadDuration ? function() {
				return Math.min(state.duration, state.perceivedDuration);
			} : function() {
				return state.duration;
			};
			var api = Object.assign({}, on(), {
				process,
				abort,
				getProgress,
				getDuration,
				reset
			});
			return api;
		};
		var getFilenameWithoutExtension = function getFilenameWithoutExtension(name) {
			return name.substring(0, name.lastIndexOf(".")) || name;
		};
		var createFileStub = function createFileStub(source) {
			var data = [
				source.name,
				source.size,
				source.type
			];
			if (source instanceof Blob || isBase64DataURI(source)) data[0] = source.name || getDateString();
			else if (isBase64DataURI(source)) {
				data[1] = source.length;
				data[2] = getMimeTypeFromBase64DataURI(source);
			} else if (isString(source)) {
				data[0] = getFilenameFromURL(source);
				data[1] = 0;
				data[2] = "application/octet-stream";
			}
			return {
				name: data[0],
				size: data[1],
				type: data[2]
			};
		};
		var isFile = function isFile(value) {
			return !!(value instanceof File || value instanceof Blob && value.name);
		};
		var deepCloneObject = function deepCloneObject(src) {
			if (!isObject(src)) return src;
			var target = isArray(src) ? [] : {};
			for (var key in src) {
				if (!src.hasOwnProperty(key)) continue;
				var v = src[key];
				target[key] = v && isObject(v) ? deepCloneObject(v) : v;
			}
			return target;
		};
		var createItem = function createItem() {
			var origin = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : null;
			var serverFileReference = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;
			var file = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : null;
			var id = getUniqueId();
			/**
			* Internal item state
			*/
			var state = {
				archived: false,
				frozen: false,
				released: false,
				source: null,
				file,
				serverFileReference,
				transferId: null,
				processingAborted: false,
				status: serverFileReference ? ItemStatus.PROCESSING_COMPLETE : ItemStatus.INIT,
				activeLoader: null,
				activeProcessor: null
			};
			var abortProcessingRequestComplete = null;
			/**
			* Externally added item metadata
			*/
			var metadata = {};
			var setStatus = function setStatus(status) {
				return state.status = status;
			};
			var fire = function fire(event) {
				if (state.released || state.frozen) return;
				for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) params[_key - 1] = arguments[_key];
				api.fire.apply(api, [event].concat(params));
			};
			var getFileExtension = function getFileExtension() {
				return getExtensionFromFilename(state.file.name);
			};
			var getFileType = function getFileType() {
				return state.file.type;
			};
			var getFileSize = function getFileSize() {
				return state.file.size;
			};
			var getFile = function getFile() {
				return state.file;
			};
			var load = function load(source, loader, onload) {
				state.source = source;
				api.fireSync("init");
				if (state.file) {
					api.fireSync("load-skip");
					return;
				}
				state.file = createFileStub(source);
				loader.on("init", function() {
					fire("load-init");
				});
				loader.on("meta", function(meta) {
					state.file.size = meta.size;
					state.file.filename = meta.filename;
					if (meta.source) {
						origin = FileOrigin.LIMBO;
						state.serverFileReference = meta.source;
						state.status = ItemStatus.PROCESSING_COMPLETE;
					}
					fire("load-meta");
				});
				loader.on("progress", function(progress) {
					setStatus(ItemStatus.LOADING);
					fire("load-progress", progress);
				});
				loader.on("error", function(error) {
					setStatus(ItemStatus.LOAD_ERROR);
					fire("load-request-error", error);
				});
				loader.on("abort", function() {
					setStatus(ItemStatus.INIT);
					fire("load-abort");
				});
				loader.on("load", function(file) {
					state.activeLoader = null;
					var success = function success(result) {
						state.file = isFile(result) ? result : state.file;
						if (origin === FileOrigin.LIMBO && state.serverFileReference) setStatus(ItemStatus.PROCESSING_COMPLETE);
						else setStatus(ItemStatus.IDLE);
						fire("load");
					};
					var error = function error(result) {
						state.file = file;
						fire("load-meta");
						setStatus(ItemStatus.LOAD_ERROR);
						fire("load-file-error", result);
					};
					if (state.serverFileReference) {
						success(file);
						return;
					}
					onload(file, success, error);
				});
				loader.setSource(source);
				state.activeLoader = loader;
				loader.load();
			};
			var retryLoad = function retryLoad() {
				if (!state.activeLoader) return;
				state.activeLoader.load();
			};
			var abortLoad = function abortLoad() {
				if (state.activeLoader) {
					state.activeLoader.abort();
					return;
				}
				setStatus(ItemStatus.INIT);
				fire("load-abort");
			};
			var process = function process(processor, onprocess) {
				if (state.processingAborted) {
					state.processingAborted = false;
					return;
				}
				setStatus(ItemStatus.PROCESSING);
				abortProcessingRequestComplete = null;
				if (!(state.file instanceof Blob)) {
					api.on("load", function() {
						process(processor, onprocess);
					});
					return;
				}
				processor.on("load", function(serverFileReference) {
					state.transferId = null;
					state.serverFileReference = serverFileReference;
				});
				processor.on("transfer", function(transferId) {
					state.transferId = transferId;
				});
				processor.on("load-perceived", function(serverFileReference) {
					state.activeProcessor = null;
					state.transferId = null;
					state.serverFileReference = serverFileReference;
					setStatus(ItemStatus.PROCESSING_COMPLETE);
					fire("process-complete", serverFileReference);
				});
				processor.on("start", function() {
					fire("process-start");
				});
				processor.on("error", function(error) {
					state.activeProcessor = null;
					setStatus(ItemStatus.PROCESSING_ERROR);
					fire("process-error", error);
				});
				processor.on("abort", function(serverFileReference) {
					state.activeProcessor = null;
					state.serverFileReference = serverFileReference;
					setStatus(ItemStatus.IDLE);
					fire("process-abort");
					if (abortProcessingRequestComplete) abortProcessingRequestComplete();
				});
				processor.on("progress", function(progress) {
					fire("process-progress", progress);
				});
				var success = function success(file) {
					if (state.archived) return;
					processor.process(file, Object.assign({}, metadata));
				};
				var error = console.error;
				onprocess(state.file, success, error);
				state.activeProcessor = processor;
			};
			var requestProcessing = function requestProcessing() {
				state.processingAborted = false;
				setStatus(ItemStatus.PROCESSING_QUEUED);
			};
			var abortProcessing = function abortProcessing() {
				return new Promise(function(resolve) {
					if (!state.activeProcessor) {
						state.processingAborted = true;
						setStatus(ItemStatus.IDLE);
						fire("process-abort");
						resolve();
						return;
					}
					abortProcessingRequestComplete = function abortProcessingRequestComplete() {
						resolve();
					};
					state.activeProcessor.abort();
				});
			};
			var revert = function revert(revertFileUpload, forceRevert) {
				return new Promise(function(resolve, reject) {
					var serverTransferId = state.serverFileReference !== null ? state.serverFileReference : state.transferId;
					if (serverTransferId === null) {
						resolve();
						return;
					}
					revertFileUpload(serverTransferId, function() {
						state.serverFileReference = null;
						state.transferId = null;
						resolve();
					}, function(error) {
						if (!forceRevert) {
							resolve();
							return;
						}
						setStatus(ItemStatus.PROCESSING_REVERT_ERROR);
						fire("process-revert-error");
						reject(error);
					});
					setStatus(ItemStatus.IDLE);
					fire("process-revert");
				});
			};
			var _setMetadata = function setMetadata(key, value, silent) {
				var keys = key.split(".");
				var root = keys[0];
				var last = keys.pop();
				var data = metadata;
				keys.forEach(function(key) {
					return data = data[key];
				});
				if (JSON.stringify(data[last]) === JSON.stringify(value)) return;
				data[last] = value;
				fire("metadata-update", {
					key: root,
					value: metadata[root],
					silent
				});
			};
			var api = Object.assign({
				id: { get: function get() {
					return id;
				} },
				origin: {
					get: function get() {
						return origin;
					},
					set: function set(value) {
						return origin = value;
					}
				},
				serverId: { get: function get() {
					return state.serverFileReference;
				} },
				transferId: { get: function get() {
					return state.transferId;
				} },
				status: { get: function get() {
					return state.status;
				} },
				filename: { get: function get() {
					return state.file.name;
				} },
				filenameWithoutExtension: { get: function get() {
					return getFilenameWithoutExtension(state.file.name);
				} },
				fileExtension: { get: getFileExtension },
				fileType: { get: getFileType },
				fileSize: { get: getFileSize },
				file: { get: getFile },
				relativePath: { get: function get() {
					return state.file._relativePath;
				} },
				source: { get: function get() {
					return state.source;
				} },
				getMetadata: function getMetadata(key) {
					return deepCloneObject(key ? metadata[key] : metadata);
				},
				setMetadata: function setMetadata(key, value, silent) {
					if (isObject(key)) {
						var data = key;
						Object.keys(data).forEach(function(key) {
							_setMetadata(key, data[key], value);
						});
						return key;
					}
					_setMetadata(key, value, silent);
					return value;
				},
				extend: function extend(name, handler) {
					return itemAPI[name] = handler;
				},
				abortLoad,
				retryLoad,
				requestProcessing,
				abortProcessing,
				load,
				process,
				revert
			}, on(), {
				freeze: function freeze() {
					return state.frozen = true;
				},
				release: function release() {
					return state.released = true;
				},
				released: { get: function get() {
					return state.released;
				} },
				archive: function archive() {
					return state.archived = true;
				},
				archived: { get: function get() {
					return state.archived;
				} },
				setFile: function setFile(file) {
					return state.file = file;
				}
			});
			var itemAPI = createObject(api);
			return itemAPI;
		};
		var getItemIndexByQuery = function getItemIndexByQuery(items, query) {
			if (isEmpty(query)) return 0;
			if (!isString(query)) return -1;
			return items.findIndex(function(item) {
				return item.id === query;
			});
		};
		var getItemById = function getItemById(items, itemId) {
			var index = getItemIndexByQuery(items, itemId);
			if (index < 0) return;
			return items[index] || null;
		};
		var fetchBlob = function fetchBlob(url, load, error, progress, abort, headers) {
			var request = sendRequest(null, url, {
				method: "GET",
				responseType: "blob"
			});
			request.onload = function(xhr) {
				var headers = xhr.getAllResponseHeaders();
				var filename = getFileInfoFromHeaders(headers).name || getFilenameFromURL(url);
				load(createResponse("load", xhr.status, getFileFromBlob(xhr.response, filename), headers));
			};
			request.onerror = function(xhr) {
				error(createResponse("error", xhr.status, xhr.statusText, xhr.getAllResponseHeaders()));
			};
			request.onheaders = function(xhr) {
				headers(createResponse("headers", xhr.status, null, xhr.getAllResponseHeaders()));
			};
			request.ontimeout = createTimeoutResponse(error);
			request.onprogress = progress;
			request.onabort = abort;
			return request;
		};
		var getDomainFromURL = function getDomainFromURL(url) {
			if (url.indexOf("//") === 0) url = location.protocol + url;
			return url.toLowerCase().replace("blob:", "").replace(/([a-z])?:\/\//, "$1").split("/")[0];
		};
		var isExternalURL = function isExternalURL(url) {
			return (url.indexOf(":") > -1 || url.indexOf("//") > -1) && getDomainFromURL(location.href) !== getDomainFromURL(url);
		};
		var dynamicLabel = function dynamicLabel(label) {
			return function() {
				return isFunction(label) ? label.apply(void 0, arguments) : label;
			};
		};
		var isMockItem = function isMockItem(item) {
			return !isFile(item.file);
		};
		var listUpdated = function listUpdated(dispatch, state) {
			clearTimeout(state.listUpdateTimeout);
			state.listUpdateTimeout = setTimeout(function() {
				dispatch("DID_UPDATE_ITEMS", { items: getActiveItems(state.items) });
			}, 0);
		};
		var optionalPromise = function optionalPromise(fn) {
			for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) params[_key - 1] = arguments[_key];
			return new Promise(function(resolve) {
				if (!fn) return resolve(true);
				var result = fn.apply(void 0, params);
				if (result == null) return resolve(true);
				if (typeof result === "boolean") return resolve(result);
				if (typeof result.then === "function") result.then(resolve);
			});
		};
		var sortItems = function sortItems(state, compare) {
			state.items.sort(function(a, b) {
				return compare(createItemAPI(a), createItemAPI(b));
			});
		};
		var getItemByQueryFromState = function getItemByQueryFromState(state, itemHandler) {
			return function() {
				var _ref = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
				var query = _ref.query, _ref$success = _ref.success, success = _ref$success === void 0 ? function() {} : _ref$success, _ref$failure = _ref.failure, failure = _ref$failure === void 0 ? function() {} : _ref$failure, options = _objectWithoutProperties(_ref, [
					"query",
					"success",
					"failure"
				]);
				var item = getItemByQuery(state.items, query);
				if (!item) {
					failure({
						error: createResponse("error", 0, "Item not found"),
						file: null
					});
					return;
				}
				itemHandler(item, success, failure, options || {});
			};
		};
		var actions = function actions(dispatch, query, state) {
			return {
				ABORT_ALL: function ABORT_ALL() {
					getActiveItems(state.items).forEach(function(item) {
						item.freeze();
						item.abortLoad();
						item.abortProcessing();
					});
				},
				DID_SET_FILES: function DID_SET_FILES(_ref2) {
					var _ref2$value = _ref2.value;
					var files = (_ref2$value === void 0 ? [] : _ref2$value).map(function(file) {
						return {
							source: file.source ? file.source : file,
							options: file.options
						};
					});
					var activeItems = getActiveItems(state.items);
					activeItems.forEach(function(item) {
						if (!files.find(function(file) {
							return file.source === item.source || file.source === item.file;
						})) dispatch("REMOVE_ITEM", {
							query: item,
							remove: false
						});
					});
					activeItems = getActiveItems(state.items);
					files.forEach(function(file, index) {
						if (activeItems.find(function(item) {
							return item.source === file.source || item.file === file.source;
						})) return;
						dispatch("ADD_ITEM", Object.assign({}, file, {
							interactionMethod: InteractionMethod.NONE,
							index
						}));
					});
				},
				DID_UPDATE_ITEM_METADATA: function DID_UPDATE_ITEM_METADATA(_ref3) {
					var id = _ref3.id, action = _ref3.action, change = _ref3.change;
					if (change.silent) return;
					clearTimeout(state.itemUpdateTimeout);
					state.itemUpdateTimeout = setTimeout(function() {
						var item = getItemById(state.items, id);
						if (!query("IS_ASYNC")) {
							applyFilterChain("SHOULD_PREPARE_OUTPUT", false, {
								item,
								query,
								action,
								change
							}).then(function(shouldPrepareOutput) {
								var beforePrepareFile = query("GET_BEFORE_PREPARE_FILE");
								if (beforePrepareFile) shouldPrepareOutput = beforePrepareFile(item, shouldPrepareOutput);
								if (!shouldPrepareOutput) return;
								dispatch("REQUEST_PREPARE_OUTPUT", {
									query: id,
									item,
									success: function success(file) {
										dispatch("DID_PREPARE_OUTPUT", {
											id,
											file
										});
									}
								}, true);
							});
							return;
						}
						if (item.origin === FileOrigin.LOCAL) dispatch("DID_LOAD_ITEM", {
							id: item.id,
							error: null,
							serverFileReference: item.source
						});
						var upload = function upload() {
							setTimeout(function() {
								dispatch("REQUEST_ITEM_PROCESSING", { query: id });
							}, 32);
						};
						var revert = function revert(doUpload) {
							item.revert(createRevertFunction(state.options.server.url, state.options.server.revert), query("GET_FORCE_REVERT")).then(doUpload ? upload : function() {}).catch(function() {});
						};
						var abort = function abort(doUpload) {
							item.abortProcessing().then(doUpload ? upload : function() {});
						};
						if (item.status === ItemStatus.PROCESSING_COMPLETE) return revert(state.options.instantUpload);
						if (item.status === ItemStatus.PROCESSING) return abort(state.options.instantUpload);
						if (state.options.instantUpload) upload();
					}, 0);
				},
				MOVE_ITEM: function MOVE_ITEM(_ref4) {
					var query = _ref4.query, index = _ref4.index;
					var item = getItemByQuery(state.items, query);
					if (!item) return;
					var currentIndex = state.items.indexOf(item);
					index = limit(index, 0, state.items.length - 1);
					if (currentIndex === index) return;
					state.items.splice(index, 0, state.items.splice(currentIndex, 1)[0]);
				},
				SORT: function SORT(_ref5) {
					var compare = _ref5.compare;
					sortItems(state, compare);
					dispatch("DID_SORT_ITEMS", { items: query("GET_ACTIVE_ITEMS") });
				},
				ADD_ITEMS: function ADD_ITEMS(_ref6) {
					var items = _ref6.items, index = _ref6.index, interactionMethod = _ref6.interactionMethod, _ref6$success = _ref6.success, success = _ref6$success === void 0 ? function() {} : _ref6$success, _ref6$failure = _ref6.failure, failure = _ref6$failure === void 0 ? function() {} : _ref6$failure;
					var currentIndex = index;
					if (index === -1 || typeof index === "undefined") {
						var insertLocation = query("GET_ITEM_INSERT_LOCATION");
						var totalItems = query("GET_TOTAL_ITEMS");
						currentIndex = insertLocation === "before" ? 0 : totalItems;
					}
					var ignoredFiles = query("GET_IGNORED_FILES");
					var promises = items.filter(function isValidFile(source) {
						return isFile(source) ? !ignoredFiles.includes(source.name.toLowerCase()) : !isEmpty(source);
					}).map(function(source) {
						return new Promise(function(resolve, reject) {
							dispatch("ADD_ITEM", {
								interactionMethod,
								source: source.source || source,
								success: resolve,
								failure: reject,
								index: currentIndex++,
								options: source.options || {}
							});
						});
					});
					Promise.all(promises).then(success).catch(failure);
				},
				ADD_ITEM: function ADD_ITEM(_ref7) {
					var source = _ref7.source, _ref7$index = _ref7.index, index = _ref7$index === void 0 ? -1 : _ref7$index, interactionMethod = _ref7.interactionMethod, _ref7$success = _ref7.success, success = _ref7$success === void 0 ? function() {} : _ref7$success, _ref7$failure = _ref7.failure, failure = _ref7$failure === void 0 ? function() {} : _ref7$failure, _ref7$options = _ref7.options, options = _ref7$options === void 0 ? {} : _ref7$options;
					if (isEmpty(source)) {
						failure({
							error: createResponse("error", 0, "No source"),
							file: null
						});
						return;
					}
					if (isFile(source) && state.options.ignoredFiles.includes(source.name.toLowerCase())) return;
					if (!hasRoomForItem(state)) {
						if (state.options.allowMultiple || !state.options.allowMultiple && !state.options.allowReplace) {
							var error = createResponse("warning", 0, "Max files");
							dispatch("DID_THROW_MAX_FILES", {
								source,
								error
							});
							failure({
								error,
								file: null
							});
							return;
						}
						var _item = getActiveItems(state.items)[0];
						if (_item.status === ItemStatus.PROCESSING_COMPLETE || _item.status === ItemStatus.PROCESSING_REVERT_ERROR) {
							var forceRevert = query("GET_FORCE_REVERT");
							_item.revert(createRevertFunction(state.options.server.url, state.options.server.revert), forceRevert).then(function() {
								if (!forceRevert) return;
								dispatch("ADD_ITEM", {
									source,
									index,
									interactionMethod,
									success,
									failure,
									options
								});
							}).catch(function() {});
							if (forceRevert) return;
						}
						dispatch("REMOVE_ITEM", { query: _item.id });
					}
					var origin = options.type === "local" ? FileOrigin.LOCAL : options.type === "limbo" ? FileOrigin.LIMBO : FileOrigin.INPUT;
					var item = createItem(origin, origin === FileOrigin.INPUT ? null : source, options.file);
					Object.keys(options.metadata || {}).forEach(function(key) {
						item.setMetadata(key, options.metadata[key]);
					});
					applyFilters("DID_CREATE_ITEM", item, {
						query,
						dispatch
					});
					var itemInsertLocation = query("GET_ITEM_INSERT_LOCATION");
					if (!state.options.itemInsertLocationFreedom) index = itemInsertLocation === "before" ? -1 : state.items.length;
					insertItem(state.items, item, index);
					if (isFunction(itemInsertLocation) && source) sortItems(state, itemInsertLocation);
					var id = item.id;
					item.on("init", function() {
						dispatch("DID_INIT_ITEM", { id });
					});
					item.on("load-init", function() {
						dispatch("DID_START_ITEM_LOAD", { id });
					});
					item.on("load-meta", function() {
						dispatch("DID_UPDATE_ITEM_META", { id });
					});
					item.on("load-progress", function(progress) {
						dispatch("DID_UPDATE_ITEM_LOAD_PROGRESS", {
							id,
							progress
						});
					});
					item.on("load-request-error", function(error) {
						var mainStatus = dynamicLabel(state.options.labelFileLoadError)(error);
						if (error.code >= 400 && error.code < 500) {
							dispatch("DID_THROW_ITEM_INVALID", {
								id,
								error,
								status: {
									main: mainStatus,
									sub: error.code + " (" + error.body + ")"
								}
							});
							failure({
								error,
								file: createItemAPI(item)
							});
							return;
						}
						dispatch("DID_THROW_ITEM_LOAD_ERROR", {
							id,
							error,
							status: {
								main: mainStatus,
								sub: state.options.labelTapToRetry
							}
						});
					});
					item.on("load-file-error", function(error) {
						dispatch("DID_THROW_ITEM_INVALID", {
							id,
							error: error.status,
							status: error.status
						});
						failure({
							error: error.status,
							file: createItemAPI(item)
						});
					});
					item.on("load-abort", function() {
						dispatch("REMOVE_ITEM", { query: id });
					});
					item.on("load-skip", function() {
						item.on("metadata-update", function(change) {
							if (!isFile(item.file)) return;
							dispatch("DID_UPDATE_ITEM_METADATA", {
								id,
								change
							});
						});
						dispatch("COMPLETE_LOAD_ITEM", {
							query: id,
							item,
							data: {
								source,
								success
							}
						});
					});
					item.on("load", function() {
						var handleAdd = function handleAdd(shouldAdd) {
							if (!shouldAdd) {
								dispatch("REMOVE_ITEM", { query: id });
								return;
							}
							item.on("metadata-update", function(change) {
								dispatch("DID_UPDATE_ITEM_METADATA", {
									id,
									change
								});
							});
							applyFilterChain("SHOULD_PREPARE_OUTPUT", false, {
								item,
								query
							}).then(function(shouldPrepareOutput) {
								var beforePrepareFile = query("GET_BEFORE_PREPARE_FILE");
								if (beforePrepareFile) shouldPrepareOutput = beforePrepareFile(item, shouldPrepareOutput);
								var loadComplete = function loadComplete() {
									dispatch("COMPLETE_LOAD_ITEM", {
										query: id,
										item,
										data: {
											source,
											success
										}
									});
									listUpdated(dispatch, state);
								};
								if (shouldPrepareOutput) {
									dispatch("REQUEST_PREPARE_OUTPUT", {
										query: id,
										item,
										success: function success(file) {
											dispatch("DID_PREPARE_OUTPUT", {
												id,
												file
											});
											loadComplete();
										}
									}, true);
									return;
								}
								loadComplete();
							});
						};
						applyFilterChain("DID_LOAD_ITEM", item, {
							query,
							dispatch
						}).then(function() {
							optionalPromise(query("GET_BEFORE_ADD_FILE"), createItemAPI(item)).then(handleAdd);
						}).catch(function(e) {
							if (!e || !e.error || !e.status) return handleAdd(false);
							dispatch("DID_THROW_ITEM_INVALID", {
								id,
								error: e.error,
								status: e.status
							});
						});
					});
					item.on("process-start", function() {
						dispatch("DID_START_ITEM_PROCESSING", { id });
					});
					item.on("process-progress", function(progress) {
						dispatch("DID_UPDATE_ITEM_PROCESS_PROGRESS", {
							id,
							progress
						});
					});
					item.on("process-error", function(error) {
						dispatch("DID_THROW_ITEM_PROCESSING_ERROR", {
							id,
							error,
							status: {
								main: dynamicLabel(state.options.labelFileProcessingError)(error),
								sub: state.options.labelTapToRetry
							}
						});
					});
					item.on("process-revert-error", function(error) {
						dispatch("DID_THROW_ITEM_PROCESSING_REVERT_ERROR", {
							id,
							error,
							status: {
								main: dynamicLabel(state.options.labelFileProcessingRevertError)(error),
								sub: state.options.labelTapToRetry
							}
						});
					});
					item.on("process-complete", function(serverFileReference) {
						dispatch("DID_COMPLETE_ITEM_PROCESSING", {
							id,
							error: null,
							serverFileReference
						});
						dispatch("DID_DEFINE_VALUE", {
							id,
							value: serverFileReference
						});
					});
					item.on("process-abort", function() {
						dispatch("DID_ABORT_ITEM_PROCESSING", { id });
					});
					item.on("process-revert", function() {
						dispatch("DID_REVERT_ITEM_PROCESSING", { id });
						dispatch("DID_DEFINE_VALUE", {
							id,
							value: null
						});
					});
					dispatch("DID_ADD_ITEM", {
						id,
						index,
						interactionMethod
					});
					listUpdated(dispatch, state);
					var _ref8 = state.options.server || {}, url = _ref8.url, load = _ref8.load, restore = _ref8.restore, fetch = _ref8.fetch;
					item.load(source, createFileLoader(origin === FileOrigin.INPUT ? isString(source) && isExternalURL(source) ? fetch ? createFetchFunction(url, fetch) : fetchBlob : fetchBlob : origin === FileOrigin.LIMBO ? createFetchFunction(url, restore) : createFetchFunction(url, load)), function(file, success, error) {
						applyFilterChain("LOAD_FILE", file, { query }).then(success).catch(error);
					});
				},
				REQUEST_PREPARE_OUTPUT: function REQUEST_PREPARE_OUTPUT(_ref9) {
					var item = _ref9.item, success = _ref9.success, _ref9$failure = _ref9.failure, failure = _ref9$failure === void 0 ? function() {} : _ref9$failure;
					var err = {
						error: createResponse("error", 0, "Item not found"),
						file: null
					};
					if (item.archived) return failure(err);
					applyFilterChain("PREPARE_OUTPUT", item.file, {
						query,
						item
					}).then(function(result) {
						applyFilterChain("COMPLETE_PREPARE_OUTPUT", result, {
							query,
							item
						}).then(function(result) {
							if (item.archived) return failure(err);
							success(result);
						});
					});
				},
				COMPLETE_LOAD_ITEM: function COMPLETE_LOAD_ITEM(_ref10) {
					var item = _ref10.item, data = _ref10.data;
					var success = data.success, source = data.source;
					var itemInsertLocation = query("GET_ITEM_INSERT_LOCATION");
					if (isFunction(itemInsertLocation) && source) sortItems(state, itemInsertLocation);
					dispatch("DID_LOAD_ITEM", {
						id: item.id,
						error: null,
						serverFileReference: item.origin === FileOrigin.INPUT ? null : source
					});
					success(createItemAPI(item));
					if (item.origin === FileOrigin.LOCAL) {
						dispatch("DID_LOAD_LOCAL_ITEM", { id: item.id });
						return;
					}
					if (item.origin === FileOrigin.LIMBO) {
						dispatch("DID_COMPLETE_ITEM_PROCESSING", {
							id: item.id,
							error: null,
							serverFileReference: source
						});
						dispatch("DID_DEFINE_VALUE", {
							id: item.id,
							value: item.serverId || source
						});
						return;
					}
					if (query("IS_ASYNC") && state.options.instantUpload) dispatch("REQUEST_ITEM_PROCESSING", { query: item.id });
				},
				RETRY_ITEM_LOAD: getItemByQueryFromState(state, function(item) {
					item.retryLoad();
				}),
				REQUEST_ITEM_PREPARE: getItemByQueryFromState(state, function(item, _success, failure) {
					dispatch("REQUEST_PREPARE_OUTPUT", {
						query: item.id,
						item,
						success: function success(file) {
							dispatch("DID_PREPARE_OUTPUT", {
								id: item.id,
								file
							});
							_success({
								file: item,
								output: file
							});
						},
						failure
					}, true);
				}),
				REQUEST_ITEM_PROCESSING: getItemByQueryFromState(state, function(item, success, failure) {
					if (!(item.status === ItemStatus.IDLE || item.status === ItemStatus.PROCESSING_ERROR)) {
						var processNow = function processNow() {
							return dispatch("REQUEST_ITEM_PROCESSING", {
								query: item,
								success,
								failure
							});
						};
						var process = function process() {
							return document.hidden ? processNow() : setTimeout(processNow, 32);
						};
						if (item.status === ItemStatus.PROCESSING_COMPLETE || item.status === ItemStatus.PROCESSING_REVERT_ERROR) item.revert(createRevertFunction(state.options.server.url, state.options.server.revert), query("GET_FORCE_REVERT")).then(process).catch(function() {});
						else if (item.status === ItemStatus.PROCESSING) item.abortProcessing().then(process);
						return;
					}
					if (item.status === ItemStatus.PROCESSING_QUEUED) return;
					item.requestProcessing();
					dispatch("DID_REQUEST_ITEM_PROCESSING", { id: item.id });
					dispatch("PROCESS_ITEM", {
						query: item,
						success,
						failure
					}, true);
				}),
				PROCESS_ITEM: getItemByQueryFromState(state, function(item, success, failure) {
					var maxParallelUploads = query("GET_MAX_PARALLEL_UPLOADS");
					if (query("GET_ITEMS_BY_STATUS", ItemStatus.PROCESSING).length === maxParallelUploads) {
						state.processingQueue.push({
							id: item.id,
							success,
							failure
						});
						return;
					}
					if (item.status === ItemStatus.PROCESSING) return;
					var processNext = function processNext() {
						var queueEntry = state.processingQueue.shift();
						if (!queueEntry) return;
						var id = queueEntry.id, success = queueEntry.success, failure = queueEntry.failure;
						var itemReference = getItemByQuery(state.items, id);
						if (!itemReference || itemReference.archived) {
							processNext();
							return;
						}
						dispatch("PROCESS_ITEM", {
							query: id,
							success,
							failure
						}, true);
					};
					item.onOnce("process-complete", function() {
						success(createItemAPI(item));
						processNext();
						var server = state.options.server;
						if (state.options.instantUpload && item.origin === FileOrigin.LOCAL && isFunction(server.remove)) {
							var noop = function noop() {};
							item.origin = FileOrigin.LIMBO;
							state.options.server.remove(item.source, noop, noop);
						}
						if (query("GET_ITEMS_BY_STATUS", ItemStatus.PROCESSING_COMPLETE).length === state.items.length) dispatch("DID_COMPLETE_ITEM_PROCESSING_ALL");
					});
					item.onOnce("process-error", function(error) {
						failure({
							error,
							file: createItemAPI(item)
						});
						processNext();
					});
					item.onOnce("process-abort", function() {
						processNext();
					});
					var options = state.options;
					item.process(createFileProcessor(createProcessorFunction(options.server.url, options.server.process, options.name, {
						chunkTransferId: item.transferId,
						chunkServer: options.server.patch,
						chunkUploads: options.chunkUploads,
						chunkForce: options.chunkForce,
						chunkSize: options.chunkSize,
						chunkRetryDelays: options.chunkRetryDelays
					}), { allowMinimumUploadDuration: query("GET_ALLOW_MINIMUM_UPLOAD_DURATION") }), function(file, success, error) {
						applyFilterChain("PREPARE_OUTPUT", file, {
							query,
							item
						}).then(function(file) {
							dispatch("DID_PREPARE_OUTPUT", {
								id: item.id,
								file
							});
							success(file);
						}).catch(error);
					});
				}),
				RETRY_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {
					dispatch("REQUEST_ITEM_PROCESSING", { query: item });
				}),
				REQUEST_REMOVE_ITEM: getItemByQueryFromState(state, function(item) {
					optionalPromise(query("GET_BEFORE_REMOVE_FILE"), createItemAPI(item)).then(function(shouldRemove) {
						if (!shouldRemove) return;
						dispatch("REMOVE_ITEM", { query: item });
					});
				}),
				RELEASE_ITEM: getItemByQueryFromState(state, function(item) {
					item.release();
				}),
				REMOVE_ITEM: getItemByQueryFromState(state, function(item, success, failure, options) {
					var removeFromView = function removeFromView() {
						var id = item.id;
						getItemById(state.items, id).archive();
						dispatch("DID_REMOVE_ITEM", {
							error: null,
							id,
							item
						});
						listUpdated(dispatch, state);
						success(createItemAPI(item));
					};
					var server = state.options.server;
					if (item.origin === FileOrigin.LOCAL && server && isFunction(server.remove) && options.remove !== false) {
						dispatch("DID_START_ITEM_REMOVE", { id: item.id });
						server.remove(item.source, function() {
							return removeFromView();
						}, function(status) {
							dispatch("DID_THROW_ITEM_REMOVE_ERROR", {
								id: item.id,
								error: createResponse("error", 0, status, null),
								status: {
									main: dynamicLabel(state.options.labelFileRemoveError)(status),
									sub: state.options.labelTapToRetry
								}
							});
						});
					} else {
						if (options.revert && item.origin !== FileOrigin.LOCAL && item.serverId !== null || state.options.chunkUploads && item.file.size > state.options.chunkSize || state.options.chunkUploads && state.options.chunkForce) item.revert(createRevertFunction(state.options.server.url, state.options.server.revert), query("GET_FORCE_REVERT"));
						removeFromView();
					}
				}),
				ABORT_ITEM_LOAD: getItemByQueryFromState(state, function(item) {
					item.abortLoad();
				}),
				ABORT_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {
					if (item.serverId) {
						dispatch("REVERT_ITEM_PROCESSING", { id: item.id });
						return;
					}
					item.abortProcessing().then(function() {
						if (state.options.instantUpload) dispatch("REMOVE_ITEM", { query: item.id });
					});
				}),
				REQUEST_REVERT_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {
					if (!state.options.instantUpload) {
						dispatch("REVERT_ITEM_PROCESSING", { query: item });
						return;
					}
					var handleRevert = function handleRevert(shouldRevert) {
						if (!shouldRevert) return;
						dispatch("REVERT_ITEM_PROCESSING", { query: item });
					};
					var fn = query("GET_BEFORE_REMOVE_FILE");
					if (!fn) return handleRevert(true);
					var requestRemoveResult = fn(createItemAPI(item));
					if (requestRemoveResult == null) return handleRevert(true);
					if (typeof requestRemoveResult === "boolean") return handleRevert(requestRemoveResult);
					if (typeof requestRemoveResult.then === "function") requestRemoveResult.then(handleRevert);
				}),
				REVERT_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {
					item.revert(createRevertFunction(state.options.server.url, state.options.server.revert), query("GET_FORCE_REVERT")).then(function() {
						if (state.options.instantUpload || isMockItem(item)) dispatch("REMOVE_ITEM", { query: item.id });
					}).catch(function() {});
				}),
				SET_OPTIONS: function SET_OPTIONS(_ref11) {
					var options = _ref11.options;
					var optionKeys = Object.keys(options);
					var prioritizedOptionKeys = PrioritizedOptions.filter(function(key) {
						return optionKeys.includes(key);
					});
					[].concat(_toConsumableArray(prioritizedOptionKeys), _toConsumableArray(Object.keys(options).filter(function(key) {
						return !prioritizedOptionKeys.includes(key);
					}))).forEach(function(key) {
						dispatch("SET_" + fromCamels(key, "_").toUpperCase(), { value: options[key] });
					});
				}
			};
		};
		var PrioritizedOptions = ["server"];
		var formatFilename = function formatFilename(name) {
			return name;
		};
		var createElement$1 = function createElement(tagName) {
			return document.createElement(tagName);
		};
		var text = function text(node, value) {
			var textNode = node.childNodes[0];
			if (!textNode) {
				textNode = document.createTextNode(value);
				node.appendChild(textNode);
			} else if (value !== textNode.nodeValue) textNode.nodeValue = value;
		};
		var polarToCartesian = function polarToCartesian(centerX, centerY, radius, angleInDegrees) {
			var angleInRadians = (angleInDegrees % 360 - 90) * Math.PI / 180;
			return {
				x: centerX + radius * Math.cos(angleInRadians),
				y: centerY + radius * Math.sin(angleInRadians)
			};
		};
		var describeArc = function describeArc(x, y, radius, startAngle, endAngle, arcSweep) {
			var start = polarToCartesian(x, y, radius, endAngle);
			var end = polarToCartesian(x, y, radius, startAngle);
			return [
				"M",
				start.x,
				start.y,
				"A",
				radius,
				radius,
				0,
				arcSweep,
				0,
				end.x,
				end.y
			].join(" ");
		};
		var percentageArc = function percentageArc(x, y, radius, from, to) {
			var arcSweep = 1;
			if (to > from && to - from <= .5) arcSweep = 0;
			if (from > to && from - to >= .5) arcSweep = 0;
			return describeArc(x, y, radius, Math.min(.9999, from) * 360, Math.min(.9999, to) * 360, arcSweep);
		};
		var progressIndicator = createView({
			tag: "div",
			name: "progress-indicator",
			ignoreRectUpdate: true,
			ignoreRect: true,
			create: function create(_ref) {
				var root = _ref.root, props = _ref.props;
				props.spin = false;
				props.progress = 0;
				props.opacity = 0;
				var svg = createElement("svg");
				root.ref.path = createElement("path", {
					"stroke-width": 2,
					"stroke-linecap": "round"
				});
				svg.appendChild(root.ref.path);
				root.ref.svg = svg;
				root.appendChild(svg);
			},
			write: function write(_ref2) {
				var root = _ref2.root, props = _ref2.props;
				if (props.opacity === 0) return;
				if (props.align) root.element.dataset.align = props.align;
				var ringStrokeWidth = parseInt(attr(root.ref.path, "stroke-width"), 10);
				var size = root.rect.element.width * .5;
				var ringFrom = 0;
				var ringTo = 0;
				if (props.spin) {
					ringFrom = 0;
					ringTo = .5;
				} else {
					ringFrom = 0;
					ringTo = props.progress;
				}
				var coordinates = percentageArc(size, size, size - ringStrokeWidth, ringFrom, ringTo);
				attr(root.ref.path, "d", coordinates);
				attr(root.ref.path, "stroke-opacity", props.spin || props.progress > 0 ? 1 : 0);
			},
			mixins: {
				apis: [
					"progress",
					"spin",
					"align"
				],
				styles: ["opacity"],
				animations: {
					opacity: {
						type: "tween",
						duration: 500
					},
					progress: {
						type: "spring",
						stiffness: .95,
						damping: .65,
						mass: 10
					}
				}
			}
		});
		var fileActionButton = createView({
			tag: "button",
			attributes: { type: "button" },
			ignoreRect: true,
			ignoreRectUpdate: true,
			name: "file-action-button",
			mixins: {
				apis: ["label"],
				styles: [
					"translateX",
					"translateY",
					"scaleX",
					"scaleY",
					"opacity"
				],
				animations: {
					scaleX: "spring",
					scaleY: "spring",
					translateX: "spring",
					translateY: "spring",
					opacity: {
						type: "tween",
						duration: 250
					}
				},
				listeners: true
			},
			create: function create(_ref) {
				var root = _ref.root, props = _ref.props;
				root.element.innerHTML = (props.icon || "") + ("<span>" + props.label + "</span>");
				props.isDisabled = false;
			},
			write: function write(_ref2) {
				var root = _ref2.root, props = _ref2.props;
				var isDisabled = props.isDisabled;
				var shouldDisable = root.query("GET_DISABLED") || props.opacity === 0;
				if (shouldDisable && !isDisabled) {
					props.isDisabled = true;
					attr(root.element, "disabled", "disabled");
				} else if (!shouldDisable && isDisabled) {
					props.isDisabled = false;
					root.element.removeAttribute("disabled");
				}
			}
		});
		var toNaturalFileSize = function toNaturalFileSize(bytes) {
			var decimalSeparator = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : ".";
			var base = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 1e3;
			var options = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {};
			var _options$labelBytes = options.labelBytes, labelBytes = _options$labelBytes === void 0 ? "bytes" : _options$labelBytes, _options$labelKilobyt = options.labelKilobytes, labelKilobytes = _options$labelKilobyt === void 0 ? "KB" : _options$labelKilobyt, _options$labelMegabyt = options.labelMegabytes, labelMegabytes = _options$labelMegabyt === void 0 ? "MB" : _options$labelMegabyt, _options$labelGigabyt = options.labelGigabytes, labelGigabytes = _options$labelGigabyt === void 0 ? "GB" : _options$labelGigabyt;
			bytes = Math.round(Math.abs(bytes));
			var KB = base;
			var MB = base * base;
			var GB = base * base * base;
			if (bytes < KB) return bytes + " " + labelBytes;
			if (bytes < MB) return Math.floor(bytes / KB) + " " + labelKilobytes;
			if (bytes < GB) return removeDecimalsWhenZero(bytes / MB, 1, decimalSeparator) + " " + labelMegabytes;
			return removeDecimalsWhenZero(bytes / GB, 2, decimalSeparator) + " " + labelGigabytes;
		};
		var removeDecimalsWhenZero = function removeDecimalsWhenZero(value, decimalCount, separator) {
			return value.toFixed(decimalCount).split(".").filter(function(part) {
				return part !== "0";
			}).join(separator);
		};
		var create$2 = function create(_ref) {
			var root = _ref.root, props = _ref.props;
			var fileName = createElement$1("span");
			fileName.className = "filepond--file-info-main";
			attr(fileName, "aria-hidden", "true");
			root.appendChild(fileName);
			root.ref.fileName = fileName;
			var fileSize = createElement$1("span");
			fileSize.className = "filepond--file-info-sub";
			root.appendChild(fileSize);
			root.ref.fileSize = fileSize;
			text(fileSize, root.query("GET_LABEL_FILE_WAITING_FOR_SIZE"));
			text(fileName, formatFilename(root.query("GET_ITEM_NAME", props.id)));
		};
		var updateFile = function updateFile(_ref2) {
			var root = _ref2.root, props = _ref2.props;
			text(root.ref.fileSize, toNaturalFileSize(root.query("GET_ITEM_SIZE", props.id), ".", root.query("GET_FILE_SIZE_BASE"), root.query("GET_FILE_SIZE_LABELS", root.query)));
			text(root.ref.fileName, formatFilename(root.query("GET_ITEM_NAME", props.id)));
		};
		var updateFileSizeOnError = function updateFileSizeOnError(_ref3) {
			var root = _ref3.root, props = _ref3.props;
			if (isInt(root.query("GET_ITEM_SIZE", props.id))) {
				updateFile({
					root,
					props
				});
				return;
			}
			text(root.ref.fileSize, root.query("GET_LABEL_FILE_SIZE_NOT_AVAILABLE"));
		};
		var fileInfo = createView({
			name: "file-info",
			ignoreRect: true,
			ignoreRectUpdate: true,
			write: createRoute({
				DID_LOAD_ITEM: updateFile,
				DID_UPDATE_ITEM_META: updateFile,
				DID_THROW_ITEM_LOAD_ERROR: updateFileSizeOnError,
				DID_THROW_ITEM_INVALID: updateFileSizeOnError
			}),
			didCreateView: function didCreateView(root) {
				applyFilters("CREATE_VIEW", Object.assign({}, root, { view: root }));
			},
			create: create$2,
			mixins: {
				styles: ["translateX", "translateY"],
				animations: {
					translateX: "spring",
					translateY: "spring"
				}
			}
		});
		var toPercentage = function toPercentage(value) {
			return Math.round(value * 100);
		};
		var create$3 = function create(_ref) {
			var root = _ref.root;
			var main = createElement$1("span");
			main.className = "filepond--file-status-main";
			root.appendChild(main);
			root.ref.main = main;
			var sub = createElement$1("span");
			sub.className = "filepond--file-status-sub";
			root.appendChild(sub);
			root.ref.sub = sub;
			didSetItemLoadProgress({
				root,
				action: { progress: null }
			});
		};
		var didSetItemLoadProgress = function didSetItemLoadProgress(_ref2) {
			var root = _ref2.root, action = _ref2.action;
			var title = action.progress === null ? root.query("GET_LABEL_FILE_LOADING") : root.query("GET_LABEL_FILE_LOADING") + " " + toPercentage(action.progress) + "%";
			text(root.ref.main, title);
			text(root.ref.sub, root.query("GET_LABEL_TAP_TO_CANCEL"));
		};
		var didSetItemProcessProgress = function didSetItemProcessProgress(_ref3) {
			var root = _ref3.root, action = _ref3.action;
			var title = action.progress === null ? root.query("GET_LABEL_FILE_PROCESSING") : root.query("GET_LABEL_FILE_PROCESSING") + " " + toPercentage(action.progress) + "%";
			text(root.ref.main, title);
			text(root.ref.sub, root.query("GET_LABEL_TAP_TO_CANCEL"));
		};
		var didRequestItemProcessing = function didRequestItemProcessing(_ref4) {
			var root = _ref4.root;
			text(root.ref.main, root.query("GET_LABEL_FILE_PROCESSING"));
			text(root.ref.sub, root.query("GET_LABEL_TAP_TO_CANCEL"));
		};
		var didAbortItemProcessing = function didAbortItemProcessing(_ref5) {
			var root = _ref5.root;
			text(root.ref.main, root.query("GET_LABEL_FILE_PROCESSING_ABORTED"));
			text(root.ref.sub, root.query("GET_LABEL_TAP_TO_RETRY"));
		};
		var didCompleteItemProcessing = function didCompleteItemProcessing(_ref6) {
			var root = _ref6.root;
			text(root.ref.main, root.query("GET_LABEL_FILE_PROCESSING_COMPLETE"));
			text(root.ref.sub, root.query("GET_LABEL_TAP_TO_UNDO"));
		};
		var clear = function clear(_ref7) {
			var root = _ref7.root;
			text(root.ref.main, "");
			text(root.ref.sub, "");
		};
		var error = function error(_ref8) {
			var root = _ref8.root, action = _ref8.action;
			text(root.ref.main, action.status.main);
			text(root.ref.sub, action.status.sub);
		};
		var fileStatus = createView({
			name: "file-status",
			ignoreRect: true,
			ignoreRectUpdate: true,
			write: createRoute({
				DID_LOAD_ITEM: clear,
				DID_REVERT_ITEM_PROCESSING: clear,
				DID_REQUEST_ITEM_PROCESSING: didRequestItemProcessing,
				DID_ABORT_ITEM_PROCESSING: didAbortItemProcessing,
				DID_COMPLETE_ITEM_PROCESSING: didCompleteItemProcessing,
				DID_UPDATE_ITEM_PROCESS_PROGRESS: didSetItemProcessProgress,
				DID_UPDATE_ITEM_LOAD_PROGRESS: didSetItemLoadProgress,
				DID_THROW_ITEM_LOAD_ERROR: error,
				DID_THROW_ITEM_INVALID: error,
				DID_THROW_ITEM_PROCESSING_ERROR: error,
				DID_THROW_ITEM_PROCESSING_REVERT_ERROR: error,
				DID_THROW_ITEM_REMOVE_ERROR: error
			}),
			didCreateView: function didCreateView(root) {
				applyFilters("CREATE_VIEW", Object.assign({}, root, { view: root }));
			},
			create: create$3,
			mixins: {
				styles: [
					"translateX",
					"translateY",
					"opacity"
				],
				animations: {
					opacity: {
						type: "tween",
						duration: 250
					},
					translateX: "spring",
					translateY: "spring"
				}
			}
		});
		/**
		* Button definitions for the file view
		*/
		var Buttons = {
			AbortItemLoad: {
				label: "GET_LABEL_BUTTON_ABORT_ITEM_LOAD",
				action: "ABORT_ITEM_LOAD",
				className: "filepond--action-abort-item-load",
				align: "LOAD_INDICATOR_POSITION"
			},
			RetryItemLoad: {
				label: "GET_LABEL_BUTTON_RETRY_ITEM_LOAD",
				action: "RETRY_ITEM_LOAD",
				icon: "GET_ICON_RETRY",
				className: "filepond--action-retry-item-load",
				align: "BUTTON_PROCESS_ITEM_POSITION"
			},
			RemoveItem: {
				label: "GET_LABEL_BUTTON_REMOVE_ITEM",
				action: "REQUEST_REMOVE_ITEM",
				icon: "GET_ICON_REMOVE",
				className: "filepond--action-remove-item",
				align: "BUTTON_REMOVE_ITEM_POSITION"
			},
			ProcessItem: {
				label: "GET_LABEL_BUTTON_PROCESS_ITEM",
				action: "REQUEST_ITEM_PROCESSING",
				icon: "GET_ICON_PROCESS",
				className: "filepond--action-process-item",
				align: "BUTTON_PROCESS_ITEM_POSITION"
			},
			AbortItemProcessing: {
				label: "GET_LABEL_BUTTON_ABORT_ITEM_PROCESSING",
				action: "ABORT_ITEM_PROCESSING",
				className: "filepond--action-abort-item-processing",
				align: "BUTTON_PROCESS_ITEM_POSITION"
			},
			RetryItemProcessing: {
				label: "GET_LABEL_BUTTON_RETRY_ITEM_PROCESSING",
				action: "RETRY_ITEM_PROCESSING",
				icon: "GET_ICON_RETRY",
				className: "filepond--action-retry-item-processing",
				align: "BUTTON_PROCESS_ITEM_POSITION"
			},
			RevertItemProcessing: {
				label: "GET_LABEL_BUTTON_UNDO_ITEM_PROCESSING",
				action: "REQUEST_REVERT_ITEM_PROCESSING",
				icon: "GET_ICON_UNDO",
				className: "filepond--action-revert-item-processing",
				align: "BUTTON_PROCESS_ITEM_POSITION"
			}
		};
		var ButtonKeys = [];
		forin(Buttons, function(key) {
			ButtonKeys.push(key);
		});
		var calculateFileInfoOffset = function calculateFileInfoOffset(root) {
			if (getRemoveIndicatorAligment(root) === "right") return 0;
			var buttonRect = root.ref.buttonRemoveItem.rect.element;
			return buttonRect.hidden ? null : buttonRect.width + buttonRect.left;
		};
		var calculateButtonWidth = function calculateButtonWidth(root) {
			return root.ref.buttonAbortItemLoad.rect.element.width;
		};
		var calculateFileVerticalCenterOffset = function calculateFileVerticalCenterOffset(root) {
			return Math.floor(root.ref.buttonRemoveItem.rect.element.height / 4);
		};
		var calculateFileHorizontalCenterOffset = function calculateFileHorizontalCenterOffset(root) {
			return Math.floor(root.ref.buttonRemoveItem.rect.element.left / 2);
		};
		var getLoadIndicatorAlignment = function getLoadIndicatorAlignment(root) {
			return root.query("GET_STYLE_LOAD_INDICATOR_POSITION");
		};
		var getProcessIndicatorAlignment = function getProcessIndicatorAlignment(root) {
			return root.query("GET_STYLE_PROGRESS_INDICATOR_POSITION");
		};
		var getRemoveIndicatorAligment = function getRemoveIndicatorAligment(root) {
			return root.query("GET_STYLE_BUTTON_REMOVE_ITEM_POSITION");
		};
		var DefaultStyle = {
			buttonAbortItemLoad: { opacity: 0 },
			buttonRetryItemLoad: { opacity: 0 },
			buttonRemoveItem: { opacity: 0 },
			buttonProcessItem: { opacity: 0 },
			buttonAbortItemProcessing: { opacity: 0 },
			buttonRetryItemProcessing: { opacity: 0 },
			buttonRevertItemProcessing: { opacity: 0 },
			loadProgressIndicator: {
				opacity: 0,
				align: getLoadIndicatorAlignment
			},
			processProgressIndicator: {
				opacity: 0,
				align: getProcessIndicatorAlignment
			},
			processingCompleteIndicator: {
				opacity: 0,
				scaleX: .75,
				scaleY: .75
			},
			info: {
				translateX: 0,
				translateY: 0,
				opacity: 0
			},
			status: {
				translateX: 0,
				translateY: 0,
				opacity: 0
			}
		};
		var IdleStyle = {
			buttonRemoveItem: { opacity: 1 },
			buttonProcessItem: { opacity: 1 },
			info: { translateX: calculateFileInfoOffset },
			status: { translateX: calculateFileInfoOffset }
		};
		var ProcessingStyle = {
			buttonAbortItemProcessing: { opacity: 1 },
			processProgressIndicator: { opacity: 1 },
			status: { opacity: 1 }
		};
		var StyleMap = {
			DID_THROW_ITEM_INVALID: {
				buttonRemoveItem: { opacity: 1 },
				info: { translateX: calculateFileInfoOffset },
				status: {
					translateX: calculateFileInfoOffset,
					opacity: 1
				}
			},
			DID_START_ITEM_LOAD: {
				buttonAbortItemLoad: { opacity: 1 },
				loadProgressIndicator: { opacity: 1 },
				status: { opacity: 1 }
			},
			DID_THROW_ITEM_LOAD_ERROR: {
				buttonRetryItemLoad: { opacity: 1 },
				buttonRemoveItem: { opacity: 1 },
				info: { translateX: calculateFileInfoOffset },
				status: { opacity: 1 }
			},
			DID_START_ITEM_REMOVE: {
				processProgressIndicator: {
					opacity: 1,
					align: getRemoveIndicatorAligment
				},
				info: { translateX: calculateFileInfoOffset },
				status: { opacity: 0 }
			},
			DID_THROW_ITEM_REMOVE_ERROR: {
				processProgressIndicator: {
					opacity: 0,
					align: getRemoveIndicatorAligment
				},
				buttonRemoveItem: { opacity: 1 },
				info: { translateX: calculateFileInfoOffset },
				status: {
					opacity: 1,
					translateX: calculateFileInfoOffset
				}
			},
			DID_LOAD_ITEM: IdleStyle,
			DID_LOAD_LOCAL_ITEM: {
				buttonRemoveItem: { opacity: 1 },
				info: { translateX: calculateFileInfoOffset },
				status: { translateX: calculateFileInfoOffset }
			},
			DID_START_ITEM_PROCESSING: ProcessingStyle,
			DID_REQUEST_ITEM_PROCESSING: ProcessingStyle,
			DID_UPDATE_ITEM_PROCESS_PROGRESS: ProcessingStyle,
			DID_COMPLETE_ITEM_PROCESSING: {
				buttonRevertItemProcessing: { opacity: 1 },
				info: { opacity: 1 },
				status: { opacity: 1 }
			},
			DID_THROW_ITEM_PROCESSING_ERROR: {
				buttonRemoveItem: { opacity: 1 },
				buttonRetryItemProcessing: { opacity: 1 },
				status: { opacity: 1 },
				info: { translateX: calculateFileInfoOffset }
			},
			DID_THROW_ITEM_PROCESSING_REVERT_ERROR: {
				buttonRevertItemProcessing: { opacity: 1 },
				status: { opacity: 1 },
				info: { opacity: 1 }
			},
			DID_ABORT_ITEM_PROCESSING: {
				buttonRemoveItem: { opacity: 1 },
				buttonProcessItem: { opacity: 1 },
				info: { translateX: calculateFileInfoOffset },
				status: { opacity: 1 }
			},
			DID_REVERT_ITEM_PROCESSING: IdleStyle
		};
		var processingCompleteIndicatorView = createView({
			create: function create(_ref) {
				var root = _ref.root;
				root.element.innerHTML = root.query("GET_ICON_DONE");
			},
			name: "processing-complete-indicator",
			ignoreRect: true,
			mixins: {
				styles: [
					"scaleX",
					"scaleY",
					"opacity"
				],
				animations: {
					scaleX: "spring",
					scaleY: "spring",
					opacity: {
						type: "tween",
						duration: 250
					}
				}
			}
		});
		/**
		* Creates the file view
		*/
		var create$4 = function create(_ref2) {
			var root = _ref2.root, props = _ref2.props;
			var LocalButtons = Object.keys(Buttons).reduce(function(prev, curr) {
				prev[curr] = Object.assign({}, Buttons[curr]);
				return prev;
			}, {});
			var id = props.id;
			var allowRevert = root.query("GET_ALLOW_REVERT");
			var allowRemove = root.query("GET_ALLOW_REMOVE");
			var allowProcess = root.query("GET_ALLOW_PROCESS");
			var instantUpload = root.query("GET_INSTANT_UPLOAD");
			var isAsync = root.query("IS_ASYNC");
			var alignRemoveItemButton = root.query("GET_STYLE_BUTTON_REMOVE_ITEM_ALIGN");
			var buttonFilter;
			if (isAsync) {
				if (allowProcess && !allowRevert) buttonFilter = function buttonFilter(key) {
					return !/RevertItemProcessing/.test(key);
				};
				else if (!allowProcess && allowRevert) buttonFilter = function buttonFilter(key) {
					return !/ProcessItem|RetryItemProcessing|AbortItemProcessing/.test(key);
				};
				else if (!allowProcess && !allowRevert) buttonFilter = function buttonFilter(key) {
					return !/Process/.test(key);
				};
			} else buttonFilter = function buttonFilter(key) {
				return !/Process/.test(key);
			};
			var enabledButtons = buttonFilter ? ButtonKeys.filter(buttonFilter) : ButtonKeys.concat();
			if (instantUpload && allowRevert) {
				LocalButtons["RevertItemProcessing"].label = "GET_LABEL_BUTTON_REMOVE_ITEM";
				LocalButtons["RevertItemProcessing"].icon = "GET_ICON_REMOVE";
			}
			if (isAsync && !allowRevert) {
				var map = StyleMap["DID_COMPLETE_ITEM_PROCESSING"];
				map.info.translateX = calculateFileHorizontalCenterOffset;
				map.info.translateY = calculateFileVerticalCenterOffset;
				map.status.translateY = calculateFileVerticalCenterOffset;
				map.processingCompleteIndicator = {
					opacity: 1,
					scaleX: 1,
					scaleY: 1
				};
			}
			if (isAsync && !allowProcess) {
				[
					"DID_START_ITEM_PROCESSING",
					"DID_REQUEST_ITEM_PROCESSING",
					"DID_UPDATE_ITEM_PROCESS_PROGRESS",
					"DID_THROW_ITEM_PROCESSING_ERROR"
				].forEach(function(key) {
					StyleMap[key].status.translateY = calculateFileVerticalCenterOffset;
				});
				StyleMap["DID_THROW_ITEM_PROCESSING_ERROR"].status.translateX = calculateButtonWidth;
			}
			if (alignRemoveItemButton && allowRevert) {
				LocalButtons["RevertItemProcessing"].align = "BUTTON_REMOVE_ITEM_POSITION";
				var _map = StyleMap["DID_COMPLETE_ITEM_PROCESSING"];
				_map.info.translateX = calculateFileInfoOffset;
				_map.status.translateY = calculateFileVerticalCenterOffset;
				_map.processingCompleteIndicator = {
					opacity: 1,
					scaleX: 1,
					scaleY: 1
				};
			}
			if (!allowRemove) LocalButtons["RemoveItem"].disabled = true;
			forin(LocalButtons, function(key, definition) {
				var buttonView = root.createChildView(fileActionButton, {
					label: root.query(definition.label),
					icon: root.query(definition.icon),
					opacity: 0
				});
				if (enabledButtons.includes(key)) root.appendChildView(buttonView);
				if (definition.disabled) {
					buttonView.element.setAttribute("disabled", "disabled");
					buttonView.element.setAttribute("hidden", "hidden");
				}
				buttonView.element.dataset.align = root.query("GET_STYLE_" + definition.align);
				buttonView.element.classList.add(definition.className);
				buttonView.on("click", function(e) {
					e.stopPropagation();
					if (definition.disabled) return;
					root.dispatch(definition.action, { query: id });
				});
				root.ref["button" + key] = buttonView;
			});
			root.ref.processingCompleteIndicator = root.appendChildView(root.createChildView(processingCompleteIndicatorView));
			root.ref.processingCompleteIndicator.element.dataset.align = root.query("GET_STYLE_BUTTON_PROCESS_ITEM_POSITION");
			root.ref.info = root.appendChildView(root.createChildView(fileInfo, { id }));
			root.ref.status = root.appendChildView(root.createChildView(fileStatus, { id }));
			var loadIndicatorView = root.appendChildView(root.createChildView(progressIndicator, {
				opacity: 0,
				align: root.query("GET_STYLE_LOAD_INDICATOR_POSITION")
			}));
			loadIndicatorView.element.classList.add("filepond--load-indicator");
			root.ref.loadProgressIndicator = loadIndicatorView;
			var progressIndicatorView = root.appendChildView(root.createChildView(progressIndicator, {
				opacity: 0,
				align: root.query("GET_STYLE_PROGRESS_INDICATOR_POSITION")
			}));
			progressIndicatorView.element.classList.add("filepond--process-indicator");
			root.ref.processProgressIndicator = progressIndicatorView;
			root.ref.activeStyles = [];
		};
		var write$2 = function write(_ref3) {
			var root = _ref3.root, actions = _ref3.actions, props = _ref3.props;
			route({
				root,
				actions,
				props
			});
			var action = actions.concat().filter(function(action) {
				return /^DID_/.test(action.type);
			}).reverse().find(function(action) {
				return StyleMap[action.type];
			});
			if (action) {
				root.ref.activeStyles = [];
				var stylesToApply = StyleMap[action.type];
				forin(DefaultStyle, function(name, defaultStyles) {
					var control = root.ref[name];
					forin(defaultStyles, function(key, defaultValue) {
						var value = stylesToApply[name] && typeof stylesToApply[name][key] !== "undefined" ? stylesToApply[name][key] : defaultValue;
						root.ref.activeStyles.push({
							control,
							key,
							value
						});
					});
				});
			}
			root.ref.activeStyles.forEach(function(_ref4) {
				var control = _ref4.control, key = _ref4.key, value = _ref4.value;
				control[key] = typeof value === "function" ? value(root) : value;
			});
		};
		var route = createRoute({
			DID_SET_LABEL_BUTTON_ABORT_ITEM_PROCESSING: function DID_SET_LABEL_BUTTON_ABORT_ITEM_PROCESSING(_ref5) {
				var root = _ref5.root, action = _ref5.action;
				root.ref.buttonAbortItemProcessing.label = action.value;
			},
			DID_SET_LABEL_BUTTON_ABORT_ITEM_LOAD: function DID_SET_LABEL_BUTTON_ABORT_ITEM_LOAD(_ref6) {
				var root = _ref6.root, action = _ref6.action;
				root.ref.buttonAbortItemLoad.label = action.value;
			},
			DID_SET_LABEL_BUTTON_ABORT_ITEM_REMOVAL: function DID_SET_LABEL_BUTTON_ABORT_ITEM_REMOVAL(_ref7) {
				var root = _ref7.root, action = _ref7.action;
				root.ref.buttonAbortItemRemoval.label = action.value;
			},
			DID_REQUEST_ITEM_PROCESSING: function DID_REQUEST_ITEM_PROCESSING(_ref8) {
				var root = _ref8.root;
				root.ref.processProgressIndicator.spin = true;
				root.ref.processProgressIndicator.progress = 0;
			},
			DID_START_ITEM_LOAD: function DID_START_ITEM_LOAD(_ref9) {
				var root = _ref9.root;
				root.ref.loadProgressIndicator.spin = true;
				root.ref.loadProgressIndicator.progress = 0;
			},
			DID_START_ITEM_REMOVE: function DID_START_ITEM_REMOVE(_ref10) {
				var root = _ref10.root;
				root.ref.processProgressIndicator.spin = true;
				root.ref.processProgressIndicator.progress = 0;
			},
			DID_UPDATE_ITEM_LOAD_PROGRESS: function DID_UPDATE_ITEM_LOAD_PROGRESS(_ref11) {
				var root = _ref11.root, action = _ref11.action;
				root.ref.loadProgressIndicator.spin = false;
				root.ref.loadProgressIndicator.progress = action.progress;
			},
			DID_UPDATE_ITEM_PROCESS_PROGRESS: function DID_UPDATE_ITEM_PROCESS_PROGRESS(_ref12) {
				var root = _ref12.root, action = _ref12.action;
				root.ref.processProgressIndicator.spin = false;
				root.ref.processProgressIndicator.progress = action.progress;
			}
		});
		var file = createView({
			create: create$4,
			write: write$2,
			didCreateView: function didCreateView(root) {
				applyFilters("CREATE_VIEW", Object.assign({}, root, { view: root }));
			},
			name: "file"
		});
		var fileWrapper = createView({
			create: function create(_ref) {
				var root = _ref.root, props = _ref.props;
				root.ref.fileName = createElement$1("legend");
				root.appendChild(root.ref.fileName);
				root.ref.file = root.appendChildView(root.createChildView(file, { id: props.id }));
				root.ref.data = false;
			},
			ignoreRect: true,
			write: createRoute({ DID_LOAD_ITEM: function didLoadItem(_ref2) {
				var root = _ref2.root, props = _ref2.props;
				text(root.ref.fileName, formatFilename(root.query("GET_ITEM_NAME", props.id)));
			} }),
			didCreateView: function didCreateView(root) {
				applyFilters("CREATE_VIEW", Object.assign({}, root, { view: root }));
			},
			tag: "fieldset",
			name: "file-wrapper"
		});
		var PANEL_SPRING_PROPS = {
			type: "spring",
			damping: .6,
			mass: 7
		};
		var create$6 = function create(_ref) {
			var root = _ref.root, props = _ref.props;
			[
				{ name: "top" },
				{
					name: "center",
					props: {
						translateY: null,
						scaleY: null
					},
					mixins: {
						animations: { scaleY: PANEL_SPRING_PROPS },
						styles: ["translateY", "scaleY"]
					}
				},
				{
					name: "bottom",
					props: { translateY: null },
					mixins: {
						animations: { translateY: PANEL_SPRING_PROPS },
						styles: ["translateY"]
					}
				}
			].forEach(function(section) {
				createSection(root, section, props.name);
			});
			root.element.classList.add("filepond--" + props.name);
			root.ref.scalable = null;
		};
		var createSection = function createSection(root, section, className) {
			var viewConstructor = createView({
				name: "panel-" + section.name + " filepond--" + className,
				mixins: section.mixins,
				ignoreRectUpdate: true
			});
			var view = root.createChildView(viewConstructor, section.props);
			root.ref[section.name] = root.appendChildView(view);
		};
		var panel = createView({
			name: "panel",
			read: function read(_ref3) {
				var root = _ref3.root, props = _ref3.props;
				return props.heightCurrent = root.ref.bottom.translateY;
			},
			write: function write(_ref2) {
				var root = _ref2.root, props = _ref2.props;
				if (root.ref.scalable === null || props.scalable !== root.ref.scalable) {
					root.ref.scalable = isBoolean(props.scalable) ? props.scalable : true;
					root.element.dataset.scalable = root.ref.scalable;
				}
				if (!props.height) return;
				var topRect = root.ref.top.rect.element;
				var bottomRect = root.ref.bottom.rect.element;
				var height = Math.max(topRect.height + bottomRect.height, props.height);
				root.ref.center.translateY = topRect.height;
				root.ref.center.scaleY = (height - topRect.height - bottomRect.height) / 100;
				root.ref.bottom.translateY = height - bottomRect.height;
			},
			create: create$6,
			ignoreRect: true,
			mixins: { apis: [
				"height",
				"heightCurrent",
				"scalable"
			] }
		});
		var createDragHelper = function createDragHelper(items) {
			var itemIds = items.map(function(item) {
				return item.id;
			});
			var prevIndex = void 0;
			return {
				setIndex: function setIndex(index) {
					prevIndex = index;
				},
				getIndex: function getIndex() {
					return prevIndex;
				},
				getItemIndex: function getItemIndex(item) {
					return itemIds.indexOf(item.id);
				}
			};
		};
		var ITEM_TRANSLATE_SPRING = {
			type: "spring",
			stiffness: .75,
			damping: .45,
			mass: 10
		};
		var ITEM_SCALE_SPRING = "spring";
		var StateMap = {
			DID_START_ITEM_LOAD: "busy",
			DID_UPDATE_ITEM_LOAD_PROGRESS: "loading",
			DID_THROW_ITEM_INVALID: "load-invalid",
			DID_THROW_ITEM_LOAD_ERROR: "load-error",
			DID_LOAD_ITEM: "idle",
			DID_THROW_ITEM_REMOVE_ERROR: "remove-error",
			DID_START_ITEM_REMOVE: "busy",
			DID_START_ITEM_PROCESSING: "busy processing",
			DID_REQUEST_ITEM_PROCESSING: "busy processing",
			DID_UPDATE_ITEM_PROCESS_PROGRESS: "processing",
			DID_COMPLETE_ITEM_PROCESSING: "processing-complete",
			DID_THROW_ITEM_PROCESSING_ERROR: "processing-error",
			DID_THROW_ITEM_PROCESSING_REVERT_ERROR: "processing-revert-error",
			DID_ABORT_ITEM_PROCESSING: "cancelled",
			DID_REVERT_ITEM_PROCESSING: "idle"
		};
		/**
		* Creates the file view
		*/
		var create$7 = function create(_ref) {
			var root = _ref.root, props = _ref.props;
			root.ref.handleClick = function(e) {
				return root.dispatch("DID_ACTIVATE_ITEM", { id: props.id });
			};
			root.element.id = "filepond--item-" + props.id;
			root.element.addEventListener("click", root.ref.handleClick);
			root.ref.container = root.appendChildView(root.createChildView(fileWrapper, { id: props.id }));
			root.ref.panel = root.appendChildView(root.createChildView(panel, { name: "item-panel" }));
			root.ref.panel.height = null;
			props.markedForRemoval = false;
			if (!root.query("GET_ALLOW_REORDER")) return;
			root.element.dataset.dragState = "idle";
			root.element.addEventListener("pointerdown", function grab(e) {
				if (!e.isPrimary) return;
				var removedActivateListener = false;
				var origin = {
					x: e.pageX,
					y: e.pageY
				};
				props.dragOrigin = {
					x: root.translateX,
					y: root.translateY
				};
				props.dragCenter = {
					x: e.offsetX,
					y: e.offsetY
				};
				var dragState = createDragHelper(root.query("GET_ACTIVE_ITEMS"));
				root.dispatch("DID_GRAB_ITEM", {
					id: props.id,
					dragState
				});
				var drag = function drag(e) {
					if (!e.isPrimary) return;
					e.stopPropagation();
					e.preventDefault();
					props.dragOffset = {
						x: e.pageX - origin.x,
						y: e.pageY - origin.y
					};
					if (props.dragOffset.x * props.dragOffset.x + props.dragOffset.y * props.dragOffset.y > 16 && !removedActivateListener) {
						removedActivateListener = true;
						root.element.removeEventListener("click", root.ref.handleClick);
					}
					root.dispatch("DID_DRAG_ITEM", {
						id: props.id,
						dragState
					});
				};
				var drop = function drop(e) {
					if (!e.isPrimary) return;
					props.dragOffset = {
						x: e.pageX - origin.x,
						y: e.pageY - origin.y
					};
					reset();
				};
				var cancel = function cancel() {
					reset();
				};
				var reset = function reset() {
					document.removeEventListener("pointercancel", cancel);
					document.removeEventListener("pointermove", drag);
					document.removeEventListener("pointerup", drop);
					root.dispatch("DID_DROP_ITEM", {
						id: props.id,
						dragState
					});
					if (removedActivateListener) setTimeout(function() {
						return root.element.addEventListener("click", root.ref.handleClick);
					}, 0);
				};
				document.addEventListener("pointercancel", cancel);
				document.addEventListener("pointermove", drag);
				document.addEventListener("pointerup", drop);
			});
		};
		var route$1 = createRoute({ DID_UPDATE_PANEL_HEIGHT: function DID_UPDATE_PANEL_HEIGHT(_ref2) {
			var root = _ref2.root;
			root.height = _ref2.action.height;
		} });
		var item = createView({
			create: create$7,
			write: createRoute({
				DID_GRAB_ITEM: function DID_GRAB_ITEM(_ref3) {
					var root = _ref3.root, props = _ref3.props;
					props.dragOrigin = {
						x: root.translateX,
						y: root.translateY
					};
				},
				DID_DRAG_ITEM: function DID_DRAG_ITEM(_ref4) {
					var root = _ref4.root;
					root.element.dataset.dragState = "drag";
				},
				DID_DROP_ITEM: function DID_DROP_ITEM(_ref5) {
					var root = _ref5.root, props = _ref5.props;
					props.dragOffset = null;
					props.dragOrigin = null;
					root.element.dataset.dragState = "drop";
				}
			}, function(_ref6) {
				var root = _ref6.root, actions = _ref6.actions, props = _ref6.props, shouldOptimize = _ref6.shouldOptimize;
				if (root.element.dataset.dragState === "drop") {
					if (root.scaleX <= 1) root.element.dataset.dragState = "idle";
				}
				var action = actions.concat().filter(function(action) {
					return /^DID_/.test(action.type);
				}).reverse().find(function(action) {
					return StateMap[action.type];
				});
				if (action && action.type !== props.currentState) {
					props.currentState = action.type;
					root.element.dataset.filepondItemState = StateMap[props.currentState] || "";
				}
				var aspectRatio = root.query("GET_ITEM_PANEL_ASPECT_RATIO") || root.query("GET_PANEL_ASPECT_RATIO");
				if (!aspectRatio) {
					route$1({
						root,
						actions,
						props
					});
					if (!root.height && root.ref.container.rect.element.height > 0) root.height = root.ref.container.rect.element.height;
				} else if (!shouldOptimize) root.height = root.rect.element.width * aspectRatio;
				if (shouldOptimize) root.ref.panel.height = null;
				root.ref.panel.height = root.height;
			}),
			destroy: function destroy(_ref7) {
				var root = _ref7.root, props = _ref7.props;
				root.element.removeEventListener("click", root.ref.handleClick);
				root.dispatch("RELEASE_ITEM", { query: props.id });
			},
			tag: "li",
			name: "item",
			mixins: {
				apis: [
					"id",
					"interactionMethod",
					"markedForRemoval",
					"spawnDate",
					"dragCenter",
					"dragOrigin",
					"dragOffset"
				],
				styles: [
					"translateX",
					"translateY",
					"scaleX",
					"scaleY",
					"opacity",
					"height"
				],
				animations: {
					scaleX: ITEM_SCALE_SPRING,
					scaleY: ITEM_SCALE_SPRING,
					translateX: ITEM_TRANSLATE_SPRING,
					translateY: ITEM_TRANSLATE_SPRING,
					opacity: {
						type: "tween",
						duration: 150
					}
				}
			}
		});
		var getItemsPerRow = function(horizontalSpace, itemWidth) {
			return Math.max(1, Math.floor((horizontalSpace + 1) / itemWidth));
		};
		var getItemIndexByPosition = function getItemIndexByPosition(view, children, positionInView) {
			if (!positionInView) return;
			var horizontalSpace = view.rect.element.width;
			var l = children.length;
			var last = null;
			if (l === 0 || positionInView.top < children[0].rect.element.top) return -1;
			var itemRect = children[0].rect.element;
			var itemHorizontalMargin = itemRect.marginLeft + itemRect.marginRight;
			var itemWidth = itemRect.width + itemHorizontalMargin;
			var itemsPerRow = getItemsPerRow(horizontalSpace, itemWidth);
			if (itemsPerRow === 1) {
				for (var index = 0; index < l; index++) {
					var child = children[index];
					var childMid = child.rect.outer.top + child.rect.element.height * .5;
					if (positionInView.top < childMid) return index;
				}
				return l;
			}
			var itemVerticalMargin = itemRect.marginTop + itemRect.marginBottom;
			var itemHeight = itemRect.height + itemVerticalMargin;
			for (var _index = 0; _index < l; _index++) {
				var indexX = _index % itemsPerRow;
				var indexY = Math.floor(_index / itemsPerRow);
				var offsetX = indexX * itemWidth;
				var offsetY = indexY * itemHeight;
				var itemTop = offsetY - itemRect.marginTop;
				var itemRight = offsetX + itemWidth;
				var itemBottom = offsetY + itemHeight + itemRect.marginBottom;
				if (positionInView.top < itemBottom && positionInView.top > itemTop) if (positionInView.left < itemRight) return _index;
				else if (_index !== l - 1) last = _index;
				else last = null;
			}
			if (last !== null) return last;
			return l;
		};
		var dropAreaDimensions = {
			height: 0,
			width: 0,
			get getHeight() {
				return this.height;
			},
			set setHeight(val) {
				if (this.height === 0 || val === 0) this.height = val;
			},
			get getWidth() {
				return this.width;
			},
			set setWidth(val) {
				if (this.width === 0 || val === 0) this.width = val;
			},
			setDimensions: function setDimensions(height, width) {
				if (this.height === 0 || height === 0) this.height = height;
				if (this.width === 0 || width === 0) this.width = width;
			}
		};
		var create$8 = function create(_ref) {
			var root = _ref.root;
			attr(root.element, "role", "list");
			root.ref.lastItemSpanwDate = Date.now();
		};
		/**
		* Inserts a new item
		* @param root
		* @param action
		*/
		var addItemView = function addItemView(_ref2) {
			var root = _ref2.root, action = _ref2.action;
			var id = action.id, index = action.index, interactionMethod = action.interactionMethod;
			root.ref.addIndex = index;
			var now = Date.now();
			var spawnDate = now;
			var opacity = 1;
			if (interactionMethod !== InteractionMethod.NONE) {
				opacity = 0;
				var cooldown = root.query("GET_ITEM_INSERT_INTERVAL");
				var dist = now - root.ref.lastItemSpanwDate;
				spawnDate = dist < cooldown ? now + (cooldown - dist) : now;
			}
			root.ref.lastItemSpanwDate = spawnDate;
			root.appendChildView(root.createChildView(item, {
				spawnDate,
				id,
				opacity,
				interactionMethod
			}), index);
		};
		var moveItem = function moveItem(item, x, y) {
			var vx = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 0;
			var vy = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : 1;
			if (item.dragOffset) {
				item.translateX = null;
				item.translateY = null;
				item.translateX = item.dragOrigin.x + item.dragOffset.x;
				item.translateY = item.dragOrigin.y + item.dragOffset.y;
				item.scaleX = 1.025;
				item.scaleY = 1.025;
			} else {
				item.translateX = x;
				item.translateY = y;
				if (Date.now() > item.spawnDate) {
					if (item.opacity === 0) introItemView(item, x, y, vx, vy);
					item.scaleX = 1;
					item.scaleY = 1;
					item.opacity = 1;
				}
			}
		};
		var introItemView = function introItemView(item, x, y, vx, vy) {
			if (item.interactionMethod === InteractionMethod.NONE) {
				item.translateX = null;
				item.translateX = x;
				item.translateY = null;
				item.translateY = y;
			} else if (item.interactionMethod === InteractionMethod.DROP) {
				item.translateX = null;
				item.translateX = x - vx * 20;
				item.translateY = null;
				item.translateY = y - vy * 10;
				item.scaleX = .8;
				item.scaleY = .8;
			} else if (item.interactionMethod === InteractionMethod.BROWSE) {
				item.translateY = null;
				item.translateY = y - 30;
			} else if (item.interactionMethod === InteractionMethod.API) {
				item.translateX = null;
				item.translateX = x - 30;
				item.translateY = null;
			}
		};
		/**
		* Removes an existing item
		* @param root
		* @param action
		*/
		var removeItemView = function removeItemView(_ref3) {
			var root = _ref3.root;
			var id = _ref3.action.id;
			var view = root.childViews.find(function(child) {
				return child.id === id;
			});
			if (!view) return;
			view.scaleX = .9;
			view.scaleY = .9;
			view.opacity = 0;
			view.markedForRemoval = true;
		};
		var getItemHeight = function getItemHeight(child) {
			return child.rect.element.height + child.rect.element.marginBottom + child.rect.element.marginTop;
		};
		var getItemWidth = function getItemWidth(child) {
			return child.rect.element.width + child.rect.element.marginLeft * .5 + child.rect.element.marginRight * .5;
		};
		/**
		* Setup action routes
		*/
		var route$2 = createRoute({
			DID_ADD_ITEM: addItemView,
			DID_REMOVE_ITEM: removeItemView,
			DID_DRAG_ITEM: function dragItem(_ref4) {
				var root = _ref4.root, action = _ref4.action;
				var id = action.id, dragState = action.dragState;
				var item = root.query("GET_ITEM", { id });
				var view = root.childViews.find(function(child) {
					return child.id === id;
				});
				var numItems = root.childViews.length;
				var oldIndex = dragState.getItemIndex(item);
				if (!view) return;
				var dragPosition = {
					x: view.dragOrigin.x + view.dragOffset.x + view.dragCenter.x,
					y: view.dragOrigin.y + view.dragOffset.y + view.dragCenter.y
				};
				var dragHeight = getItemHeight(view);
				var dragWidth = getItemWidth(view);
				var cols = Math.floor(root.rect.outer.width / dragWidth);
				if (cols > numItems) cols = numItems;
				dropAreaDimensions.setHeight = dragHeight * Math.floor(numItems / cols + 1);
				dropAreaDimensions.setWidth = dragWidth * cols;
				var location = {
					y: Math.floor(dragPosition.y / dragHeight),
					x: Math.floor(dragPosition.x / dragWidth),
					getGridIndex: function getGridIndex() {
						if (dragPosition.y > dropAreaDimensions.getHeight || dragPosition.y < 0 || dragPosition.x > dropAreaDimensions.getWidth || dragPosition.x < 0) return oldIndex;
						return this.y * cols + this.x;
					},
					getColIndex: function getColIndex() {
						var items = root.query("GET_ACTIVE_ITEMS");
						var visibleChildren = root.childViews.filter(function(child) {
							return child.rect.element.height;
						});
						var children = items.map(function(item) {
							return visibleChildren.find(function(childView) {
								return childView.id === item.id;
							});
						});
						var currentIndex = children.findIndex(function(child) {
							return child === view;
						});
						var dragHeight = getItemHeight(view);
						var l = children.length;
						var idx = l;
						var childHeight = 0;
						var childBottom = 0;
						var childTop = 0;
						for (var i = 0; i < l; i++) {
							childHeight = getItemHeight(children[i]);
							childTop = childBottom;
							childBottom = childTop + childHeight;
							if (dragPosition.y < childBottom) {
								if (currentIndex > i) {
									if (dragPosition.y < childTop + dragHeight) {
										idx = i;
										break;
									}
									continue;
								}
								idx = i;
								break;
							}
						}
						return idx;
					}
				};
				var index = cols > 1 ? location.getGridIndex() : location.getColIndex();
				root.dispatch("MOVE_ITEM", {
					query: view,
					index
				});
				var currentIndex = dragState.getIndex();
				if (currentIndex === void 0 || currentIndex !== index) {
					dragState.setIndex(index);
					if (currentIndex === void 0) return;
					root.dispatch("DID_REORDER_ITEMS", {
						items: root.query("GET_ACTIVE_ITEMS"),
						origin: oldIndex,
						target: index
					});
				}
			}
		});
		var list = createView({
			create: create$8,
			write: function write(_ref5) {
				var root = _ref5.root, props = _ref5.props, actions = _ref5.actions, shouldOptimize = _ref5.shouldOptimize;
				route$2({
					root,
					props,
					actions
				});
				var dragCoordinates = props.dragCoordinates;
				var horizontalSpace = root.rect.element.width;
				var visibleChildren = root.childViews.filter(function(child) {
					return child.rect.element.height;
				});
				var children = root.query("GET_ACTIVE_ITEMS").map(function(item) {
					return visibleChildren.find(function(child) {
						return child.id === item.id;
					});
				}).filter(function(item) {
					return item;
				});
				var dragIndex = dragCoordinates ? getItemIndexByPosition(root, children, dragCoordinates) : null;
				var addIndex = root.ref.addIndex || null;
				root.ref.addIndex = null;
				var dragIndexOffset = 0;
				var removeIndexOffset = 0;
				var addIndexOffset = 0;
				if (children.length === 0) return;
				var childRect = children[0].rect.element;
				var itemVerticalMargin = childRect.marginTop + childRect.marginBottom;
				var itemHorizontalMargin = childRect.marginLeft + childRect.marginRight;
				var itemWidth = childRect.width + itemHorizontalMargin;
				var itemHeight = childRect.height + itemVerticalMargin;
				var itemsPerRow = getItemsPerRow(horizontalSpace, itemWidth);
				if (itemsPerRow === 1) {
					var offsetY = 0;
					var dragOffset = 0;
					children.forEach(function(child, index) {
						if (dragIndex) {
							var dist = index - dragIndex;
							if (dist === -2) dragOffset = -itemVerticalMargin * .25;
							else if (dist === -1) dragOffset = -itemVerticalMargin * .75;
							else if (dist === 0) dragOffset = itemVerticalMargin * .75;
							else if (dist === 1) dragOffset = itemVerticalMargin * .25;
							else dragOffset = 0;
						}
						if (shouldOptimize) {
							child.translateX = null;
							child.translateY = null;
						}
						if (!child.markedForRemoval) moveItem(child, 0, offsetY + dragOffset);
						var visualHeight = (child.rect.element.height + itemVerticalMargin) * (child.markedForRemoval ? child.opacity : 1);
						offsetY += visualHeight;
					});
				} else {
					var prevX = 0;
					var prevY = 0;
					children.forEach(function(child, index) {
						if (index === dragIndex) dragIndexOffset = 1;
						if (index === addIndex) addIndexOffset += 1;
						if (child.markedForRemoval && child.opacity < .5) removeIndexOffset -= 1;
						var visualIndex = index + addIndexOffset + dragIndexOffset + removeIndexOffset;
						var indexX = visualIndex % itemsPerRow;
						var indexY = Math.floor(visualIndex / itemsPerRow);
						var offsetX = indexX * itemWidth;
						var offsetY = indexY * itemHeight;
						var vectorX = Math.sign(offsetX - prevX);
						var vectorY = Math.sign(offsetY - prevY);
						prevX = offsetX;
						prevY = offsetY;
						if (child.markedForRemoval) return;
						if (shouldOptimize) {
							child.translateX = null;
							child.translateY = null;
						}
						moveItem(child, offsetX, offsetY, vectorX, vectorY);
					});
				}
			},
			tag: "ul",
			name: "list",
			didWriteView: function didWriteView(_ref6) {
				var root = _ref6.root;
				root.childViews.filter(function(view) {
					return view.markedForRemoval && view.opacity === 0 && view.resting;
				}).forEach(function(view) {
					view._destroy();
					root.removeChildView(view);
				});
			},
			filterFrameActionsForChild: function filterSetItemActions(child, actions) {
				return actions.filter(function(action) {
					if (action.data && action.data.id) return child.id === action.data.id;
					return true;
				});
			},
			mixins: { apis: ["dragCoordinates"] }
		});
		var create$9 = function create(_ref) {
			var root = _ref.root, props = _ref.props;
			root.ref.list = root.appendChildView(root.createChildView(list));
			props.dragCoordinates = null;
			props.overflowing = false;
		};
		var route$3 = createRoute({
			DID_DRAG: function storeDragCoordinates(_ref2) {
				var root = _ref2.root, props = _ref2.props, action = _ref2.action;
				if (!root.query("GET_ITEM_INSERT_LOCATION_FREEDOM")) return;
				props.dragCoordinates = {
					left: action.position.scopeLeft - root.ref.list.rect.element.left,
					top: action.position.scopeTop - (root.rect.outer.top + root.rect.element.marginTop + root.rect.element.scrollTop)
				};
			},
			DID_END_DRAG: function clearDragCoordinates(_ref3) {
				var props = _ref3.props;
				props.dragCoordinates = null;
			}
		});
		var listScroller = createView({
			create: create$9,
			write: function write(_ref4) {
				var root = _ref4.root, props = _ref4.props, actions = _ref4.actions;
				route$3({
					root,
					props,
					actions
				});
				root.ref.list.dragCoordinates = props.dragCoordinates;
				if (props.overflowing && !props.overflow) {
					props.overflowing = false;
					root.element.dataset.state = "";
					root.height = null;
				}
				if (props.overflow) {
					var newHeight = Math.round(props.overflow);
					if (newHeight !== root.height) {
						props.overflowing = true;
						root.element.dataset.state = "overflow";
						root.height = newHeight;
					}
				}
			},
			name: "list-scroller",
			mixins: {
				apis: ["overflow", "dragCoordinates"],
				styles: ["height", "translateY"],
				animations: { translateY: "spring" }
			}
		});
		var attrToggle = function attrToggle(element, name, state) {
			var enabledValue = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : "";
			if (state) attr(element, name, enabledValue);
			else element.removeAttribute(name);
		};
		var resetFileInput = function resetFileInput(input) {
			if (!input || input.value === "") return;
			try {
				input.value = "";
			} catch (err) {}
			if (input.value) {
				var form = createElement$1("form");
				var parentNode = input.parentNode;
				var ref = input.nextSibling;
				form.appendChild(input);
				form.reset();
				if (ref) parentNode.insertBefore(input, ref);
				else parentNode.appendChild(input);
			}
		};
		var create$a = function create(_ref) {
			var root = _ref.root, props = _ref.props;
			root.element.id = "filepond--browser-" + props.id;
			attr(root.element, "name", root.query("GET_NAME"));
			attr(root.element, "aria-controls", "filepond--assistant-" + props.id);
			attr(root.element, "aria-labelledby", "filepond--drop-label-" + props.id);
			setAcceptedFileTypes({
				root,
				action: { value: root.query("GET_ACCEPTED_FILE_TYPES") }
			});
			toggleAllowMultiple({
				root,
				action: { value: root.query("GET_ALLOW_MULTIPLE") }
			});
			toggleDirectoryFilter({
				root,
				action: { value: root.query("GET_ALLOW_DIRECTORIES_ONLY") }
			});
			toggleDisabled({ root });
			toggleRequired({
				root,
				action: { value: root.query("GET_REQUIRED") }
			});
			setCaptureMethod({
				root,
				action: { value: root.query("GET_CAPTURE_METHOD") }
			});
			root.ref.handleChange = function(e) {
				if (!root.element.value) return;
				var files = Array.from(root.element.files).map(function(file) {
					file._relativePath = file.webkitRelativePath;
					return file;
				});
				setTimeout(function() {
					props.onload(files);
					resetFileInput(root.element);
				}, 250);
			};
			root.element.addEventListener("change", root.ref.handleChange);
		};
		var setAcceptedFileTypes = function setAcceptedFileTypes(_ref2) {
			var root = _ref2.root, action = _ref2.action;
			if (!root.query("GET_ALLOW_SYNC_ACCEPT_ATTRIBUTE")) return;
			attrToggle(root.element, "accept", !!action.value, action.value ? action.value.join(",") : "");
		};
		var toggleAllowMultiple = function toggleAllowMultiple(_ref3) {
			var root = _ref3.root, action = _ref3.action;
			attrToggle(root.element, "multiple", action.value);
		};
		var toggleDirectoryFilter = function toggleDirectoryFilter(_ref4) {
			var root = _ref4.root, action = _ref4.action;
			attrToggle(root.element, "webkitdirectory", action.value);
		};
		var toggleDisabled = function toggleDisabled(_ref5) {
			var root = _ref5.root;
			var isDisabled = root.query("GET_DISABLED");
			var doesAllowBrowse = root.query("GET_ALLOW_BROWSE");
			var disableField = isDisabled || !doesAllowBrowse;
			attrToggle(root.element, "disabled", disableField);
		};
		var toggleRequired = function toggleRequired(_ref6) {
			var root = _ref6.root;
			if (!_ref6.action.value) attrToggle(root.element, "required", false);
			else if (root.query("GET_TOTAL_ITEMS") === 0) attrToggle(root.element, "required", true);
		};
		var setCaptureMethod = function setCaptureMethod(_ref7) {
			var root = _ref7.root, action = _ref7.action;
			attrToggle(root.element, "capture", !!action.value, action.value === true ? "" : action.value);
		};
		var updateRequiredStatus = function updateRequiredStatus(_ref8) {
			var root = _ref8.root;
			var element = root.element;
			if (root.query("GET_TOTAL_ITEMS") > 0) {
				attrToggle(element, "required", false);
				attrToggle(element, "name", false);
				var activeItems = root.query("GET_ACTIVE_ITEMS");
				var hasInvalidField = false;
				for (var i = 0; i < activeItems.length; i++) if (activeItems[i].status === ItemStatus.LOAD_ERROR) hasInvalidField = true;
				root.element.setCustomValidity(hasInvalidField ? root.query("GET_LABEL_INVALID_FIELD") : "");
			} else {
				attrToggle(element, "name", true, root.query("GET_NAME"));
				if (root.query("GET_CHECK_VALIDITY")) element.setCustomValidity("");
				if (root.query("GET_REQUIRED")) attrToggle(element, "required", true);
			}
		};
		var browser = createView({
			tag: "input",
			name: "browser",
			ignoreRect: true,
			ignoreRectUpdate: true,
			attributes: { type: "file" },
			create: create$a,
			destroy: function destroy(_ref10) {
				var root = _ref10.root;
				root.element.removeEventListener("change", root.ref.handleChange);
			},
			write: createRoute({
				DID_LOAD_ITEM: updateRequiredStatus,
				DID_REMOVE_ITEM: updateRequiredStatus,
				DID_THROW_ITEM_INVALID: function updateFieldValidityStatus(_ref9) {
					var root = _ref9.root;
					if (!root.query("GET_CHECK_VALIDITY")) return;
					root.element.setCustomValidity(root.query("GET_LABEL_INVALID_FIELD"));
				},
				DID_SET_DISABLED: toggleDisabled,
				DID_SET_ALLOW_BROWSE: toggleDisabled,
				DID_SET_ALLOW_DIRECTORIES_ONLY: toggleDirectoryFilter,
				DID_SET_ALLOW_MULTIPLE: toggleAllowMultiple,
				DID_SET_ACCEPTED_FILE_TYPES: setAcceptedFileTypes,
				DID_SET_CAPTURE_METHOD: setCaptureMethod,
				DID_SET_REQUIRED: toggleRequired
			})
		});
		var Key = {
			ENTER: 13,
			SPACE: 32
		};
		var create$b = function create(_ref) {
			var root = _ref.root, props = _ref.props;
			var label = createElement$1("label");
			attr(label, "for", "filepond--browser-" + props.id);
			attr(label, "id", "filepond--drop-label-" + props.id);
			root.ref.handleKeyDown = function(e) {
				if (!(e.keyCode === Key.ENTER || e.keyCode === Key.SPACE)) return;
				e.preventDefault();
				root.ref.label.click();
			};
			root.ref.handleClick = function(e) {
				if (e.target === label || label.contains(e.target)) return;
				root.ref.label.click();
			};
			label.addEventListener("keydown", root.ref.handleKeyDown);
			root.element.addEventListener("click", root.ref.handleClick);
			updateLabelValue(label, props.caption);
			root.appendChild(label);
			root.ref.label = label;
		};
		var updateLabelValue = function updateLabelValue(label, value) {
			label.innerHTML = value;
			var clickable = label.querySelector(".filepond--label-action");
			if (clickable) attr(clickable, "tabindex", "0");
			return value;
		};
		var dropLabel = createView({
			name: "drop-label",
			ignoreRect: true,
			create: create$b,
			destroy: function destroy(_ref2) {
				var root = _ref2.root;
				root.ref.label.addEventListener("keydown", root.ref.handleKeyDown);
				root.element.removeEventListener("click", root.ref.handleClick);
			},
			write: createRoute({ DID_SET_LABEL_IDLE: function DID_SET_LABEL_IDLE(_ref3) {
				var root = _ref3.root, action = _ref3.action;
				updateLabelValue(root.ref.label, action.value);
			} }),
			mixins: {
				styles: [
					"opacity",
					"translateX",
					"translateY"
				],
				animations: {
					opacity: {
						type: "tween",
						duration: 150
					},
					translateX: "spring",
					translateY: "spring"
				}
			}
		});
		var blob = createView({
			name: "drip-blob",
			ignoreRect: true,
			mixins: {
				styles: [
					"translateX",
					"translateY",
					"scaleX",
					"scaleY",
					"opacity"
				],
				animations: {
					scaleX: "spring",
					scaleY: "spring",
					translateX: "spring",
					translateY: "spring",
					opacity: {
						type: "tween",
						duration: 250
					}
				}
			}
		});
		var addBlob = function addBlob(_ref) {
			var root = _ref.root;
			var centerX = root.rect.element.width * .5;
			var centerY = root.rect.element.height * .5;
			root.ref.blob = root.appendChildView(root.createChildView(blob, {
				opacity: 0,
				scaleX: 2.5,
				scaleY: 2.5,
				translateX: centerX,
				translateY: centerY
			}));
		};
		var moveBlob = function moveBlob(_ref2) {
			var root = _ref2.root, action = _ref2.action;
			if (!root.ref.blob) {
				addBlob({ root });
				return;
			}
			root.ref.blob.translateX = action.position.scopeLeft;
			root.ref.blob.translateY = action.position.scopeTop;
			root.ref.blob.scaleX = 1;
			root.ref.blob.scaleY = 1;
			root.ref.blob.opacity = 1;
		};
		var hideBlob = function hideBlob(_ref3) {
			var root = _ref3.root;
			if (!root.ref.blob) return;
			root.ref.blob.opacity = 0;
		};
		var explodeBlob = function explodeBlob(_ref4) {
			var root = _ref4.root;
			if (!root.ref.blob) return;
			root.ref.blob.scaleX = 2.5;
			root.ref.blob.scaleY = 2.5;
			root.ref.blob.opacity = 0;
		};
		var write$7 = function write(_ref5) {
			var root = _ref5.root, props = _ref5.props, actions = _ref5.actions;
			route$4({
				root,
				props,
				actions
			});
			var blob = root.ref.blob;
			if (actions.length === 0 && blob && blob.opacity === 0) {
				root.removeChildView(blob);
				root.ref.blob = null;
			}
		};
		var route$4 = createRoute({
			DID_DRAG: moveBlob,
			DID_DROP: explodeBlob,
			DID_END_DRAG: hideBlob
		});
		var drip = createView({
			ignoreRect: true,
			ignoreRectUpdate: true,
			name: "drip",
			write: write$7
		});
		var setInputFiles = function setInputFiles(element, files) {
			try {
				var dataTransfer = new DataTransfer();
				files.forEach(function(file) {
					if (file instanceof File) dataTransfer.items.add(file);
					else dataTransfer.items.add(new File([file], file.name, { type: file.type }));
				});
				element.files = dataTransfer.files;
			} catch (err) {
				return false;
			}
			return true;
		};
		var create$c = function create(_ref) {
			var root = _ref.root;
			root.ref.fields = {};
			var legend = document.createElement("legend");
			legend.textContent = "Files";
			root.element.appendChild(legend);
		};
		var getField = function getField(root, id) {
			return root.ref.fields[id];
		};
		var syncFieldPositionsWithItems = function syncFieldPositionsWithItems(root) {
			root.query("GET_ACTIVE_ITEMS").forEach(function(item) {
				if (!root.ref.fields[item.id]) return;
				root.element.appendChild(root.ref.fields[item.id]);
			});
		};
		var didReorderItems = function didReorderItems(_ref2) {
			var root = _ref2.root;
			return syncFieldPositionsWithItems(root);
		};
		var data = createView({
			tag: "fieldset",
			name: "data",
			create: create$c,
			write: createRoute({
				DID_SET_DISABLED: function didSetDisabled(_ref6) {
					var root = _ref6.root;
					root.element.disabled = root.query("GET_DISABLED");
				},
				DID_ADD_ITEM: function didAddItem(_ref3) {
					var root = _ref3.root, action = _ref3.action;
					var shouldUseFileInput = !(root.query("GET_ITEM", action.id).origin === FileOrigin.LOCAL) && root.query("SHOULD_UPDATE_FILE_INPUT");
					var dataContainer = createElement$1("input");
					dataContainer.type = shouldUseFileInput ? "file" : "hidden";
					dataContainer.name = root.query("GET_NAME");
					root.ref.fields[action.id] = dataContainer;
					syncFieldPositionsWithItems(root);
				},
				DID_LOAD_ITEM: function didLoadItem(_ref4) {
					var root = _ref4.root, action = _ref4.action;
					var field = getField(root, action.id);
					if (!field) return;
					if (action.serverFileReference !== null) field.value = action.serverFileReference;
					if (!root.query("SHOULD_UPDATE_FILE_INPUT")) return;
					setInputFiles(field, [root.query("GET_ITEM", action.id).file]);
				},
				DID_REMOVE_ITEM: function didRemoveItem(_ref7) {
					var root = _ref7.root, action = _ref7.action;
					var field = getField(root, action.id);
					if (!field) return;
					if (field.parentNode) field.parentNode.removeChild(field);
					delete root.ref.fields[action.id];
				},
				DID_DEFINE_VALUE: function didDefineValue(_ref8) {
					var root = _ref8.root, action = _ref8.action;
					var field = getField(root, action.id);
					if (!field) return;
					if (action.value === null) field.removeAttribute("value");
					else if (field.type != "file") field.value = action.value;
					syncFieldPositionsWithItems(root);
				},
				DID_PREPARE_OUTPUT: function didPrepareOutput(_ref5) {
					var root = _ref5.root, action = _ref5.action;
					if (!root.query("SHOULD_UPDATE_FILE_INPUT")) return;
					setTimeout(function() {
						var field = getField(root, action.id);
						if (!field) return;
						setInputFiles(field, [action.file]);
					}, 0);
				},
				DID_REORDER_ITEMS: didReorderItems,
				DID_SORT_ITEMS: didReorderItems
			}),
			ignoreRect: true
		});
		var getRootNode = function getRootNode(element) {
			return "getRootNode" in element ? element.getRootNode() : document;
		};
		var images = [
			"jpg",
			"jpeg",
			"png",
			"gif",
			"bmp",
			"webp",
			"svg",
			"tiff"
		];
		var text$1 = [
			"css",
			"csv",
			"html",
			"txt"
		];
		var map = {
			zip: "zip|compressed",
			epub: "application/epub+zip"
		};
		var guesstimateMimeType = function guesstimateMimeType() {
			var extension = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "";
			extension = extension.toLowerCase();
			if (images.includes(extension)) return "image/" + (extension === "jpg" ? "jpeg" : extension === "svg" ? "svg+xml" : extension);
			if (text$1.includes(extension)) return "text/" + extension;
			return map[extension] || "";
		};
		var requestDataTransferItems = function requestDataTransferItems(dataTransfer) {
			return new Promise(function(resolve, reject) {
				var links = getLinks(dataTransfer);
				if (links.length && !hasFiles(dataTransfer)) return resolve(links);
				getFiles(dataTransfer).then(resolve);
			});
		};
		/**
		* Test if datatransfer has files
		*/
		var hasFiles = function hasFiles(dataTransfer) {
			if (dataTransfer.files) return dataTransfer.files.length > 0;
			return false;
		};
		/**
		* Extracts files from a DataTransfer object
		*/
		var getFiles = function getFiles(dataTransfer) {
			return new Promise(function(resolve, reject) {
				var promisedFiles = (dataTransfer.items ? Array.from(dataTransfer.items) : []).filter(function(item) {
					return isFileSystemItem(item);
				}).map(function(item) {
					return getFilesFromItem(item);
				});
				if (!promisedFiles.length) {
					resolve(dataTransfer.files ? Array.from(dataTransfer.files) : []);
					return;
				}
				Promise.all(promisedFiles).then(function(returnedFileGroups) {
					var files = [];
					returnedFileGroups.forEach(function(group) {
						files.push.apply(files, group);
					});
					resolve(files.filter(function(file) {
						return file;
					}).map(function(file) {
						if (!file._relativePath) file._relativePath = file.webkitRelativePath;
						return file;
					}));
				}).catch(console.error);
			});
		};
		var isFileSystemItem = function isFileSystemItem(item) {
			if (isEntry(item)) {
				var entry = getAsEntry(item);
				if (entry) return entry.isFile || entry.isDirectory;
			}
			return item.kind === "file";
		};
		var getFilesFromItem = function getFilesFromItem(item) {
			return new Promise(function(resolve, reject) {
				if (isDirectoryEntry(item)) {
					getFilesInDirectory(getAsEntry(item)).then(resolve).catch(reject);
					return;
				}
				resolve([item.getAsFile()]);
			});
		};
		var getFilesInDirectory = function getFilesInDirectory(entry) {
			return new Promise(function(resolve, reject) {
				var files = [];
				var dirCounter = 0;
				var fileCounter = 0;
				var resolveIfDone = function resolveIfDone() {
					if (fileCounter === 0 && dirCounter === 0) resolve(files);
				};
				(function readEntries(dirEntry) {
					dirCounter++;
					var directoryReader = dirEntry.createReader();
					(function readBatch() {
						directoryReader.readEntries(function(entries) {
							if (entries.length === 0) {
								dirCounter--;
								resolveIfDone();
								return;
							}
							entries.forEach(function(entry) {
								if (entry.isDirectory) readEntries(entry);
								else {
									fileCounter++;
									entry.file(function(file) {
										var correctedFile = correctMissingFileType(file);
										if (entry.fullPath) correctedFile._relativePath = entry.fullPath;
										files.push(correctedFile);
										fileCounter--;
										resolveIfDone();
									});
								}
							});
							readBatch();
						}, reject);
					})();
				})(entry);
			});
		};
		var correctMissingFileType = function correctMissingFileType(file) {
			if (file.type.length) return file;
			var date = file.lastModifiedDate;
			var name = file.name;
			var type = guesstimateMimeType(getExtensionFromFilename(file.name));
			if (!type.length) return file;
			file = file.slice(0, file.size, type);
			file.name = name;
			file.lastModifiedDate = date;
			return file;
		};
		var isDirectoryEntry = function isDirectoryEntry(item) {
			return isEntry(item) && (getAsEntry(item) || {}).isDirectory;
		};
		var isEntry = function isEntry(item) {
			return "webkitGetAsEntry" in item;
		};
		var getAsEntry = function getAsEntry(item) {
			return item.webkitGetAsEntry();
		};
		/**
		* Extracts links from a DataTransfer object
		*/
		var getLinks = function getLinks(dataTransfer) {
			var links = [];
			try {
				links = getLinksFromTransferMetaData(dataTransfer);
				if (links.length) return links;
				links = getLinksFromTransferURLData(dataTransfer);
			} catch (e) {}
			return links;
		};
		var getLinksFromTransferURLData = function getLinksFromTransferURLData(dataTransfer) {
			var data = dataTransfer.getData("url");
			if (typeof data === "string" && data.length) return [data];
			return [];
		};
		var getLinksFromTransferMetaData = function getLinksFromTransferMetaData(dataTransfer) {
			var data = dataTransfer.getData("text/html");
			if (typeof data === "string" && data.length) {
				var matches = data.match(/src\s*=\s*"(.+?)"/);
				if (matches) return [matches[1]];
			}
			return [];
		};
		var dragNDropObservers = [];
		var eventPosition = function eventPosition(e) {
			return {
				pageLeft: e.pageX,
				pageTop: e.pageY,
				scopeLeft: e.offsetX || e.layerX,
				scopeTop: e.offsetY || e.layerY
			};
		};
		var createDragNDropClient = function createDragNDropClient(element, scopeToObserve, filterElement) {
			var observer = getDragNDropObserver(scopeToObserve);
			var client = {
				element,
				filterElement,
				state: null,
				ondrop: function ondrop() {},
				onenter: function onenter() {},
				ondrag: function ondrag() {},
				onexit: function onexit() {},
				onload: function onload() {},
				allowdrop: function allowdrop() {}
			};
			client.destroy = observer.addListener(client);
			return client;
		};
		var getDragNDropObserver = function getDragNDropObserver(element) {
			var observer = dragNDropObservers.find(function(item) {
				return item.element === element;
			});
			if (observer) return observer;
			var newObserver = createDragNDropObserver(element);
			dragNDropObservers.push(newObserver);
			return newObserver;
		};
		var createDragNDropObserver = function createDragNDropObserver(element) {
			var clients = [];
			var routes = {
				dragenter,
				dragover,
				dragleave,
				drop
			};
			var handlers = {};
			forin(routes, function(event, createHandler) {
				handlers[event] = createHandler(element, clients);
				element.addEventListener(event, handlers[event], false);
			});
			var observer = {
				element,
				addListener: function addListener(client) {
					clients.push(client);
					return function() {
						clients.splice(clients.indexOf(client), 1);
						if (clients.length === 0) {
							dragNDropObservers.splice(dragNDropObservers.indexOf(observer), 1);
							forin(routes, function(event) {
								element.removeEventListener(event, handlers[event], false);
							});
						}
					};
				}
			};
			return observer;
		};
		var elementFromPoint = function elementFromPoint(root, point) {
			if (!("elementFromPoint" in root)) root = document;
			return root.elementFromPoint(point.x, point.y);
		};
		var isEventTarget = function isEventTarget(e, target) {
			var elementAtPosition = elementFromPoint(getRootNode(target), {
				x: e.pageX - window.pageXOffset,
				y: e.pageY - window.pageYOffset
			});
			return elementAtPosition === target || target.contains(elementAtPosition);
		};
		var initialTarget = null;
		var setDropEffect = function setDropEffect(dataTransfer, effect) {
			try {
				dataTransfer.dropEffect = effect;
			} catch (e) {}
		};
		var dragenter = function dragenter(root, clients) {
			return function(e) {
				e.preventDefault();
				initialTarget = e.target;
				clients.forEach(function(client) {
					var element = client.element, onenter = client.onenter;
					if (isEventTarget(e, element)) {
						client.state = "enter";
						onenter(eventPosition(e));
					}
				});
			};
		};
		var dragover = function dragover(root, clients) {
			return function(e) {
				e.preventDefault();
				var dataTransfer = e.dataTransfer;
				requestDataTransferItems(dataTransfer).then(function(items) {
					var overDropTarget = false;
					clients.some(function(client) {
						var filterElement = client.filterElement, element = client.element, onenter = client.onenter, onexit = client.onexit, ondrag = client.ondrag, allowdrop = client.allowdrop;
						setDropEffect(dataTransfer, "copy");
						var allowsTransfer = allowdrop(items);
						if (!allowsTransfer) {
							setDropEffect(dataTransfer, "none");
							return;
						}
						if (isEventTarget(e, element)) {
							overDropTarget = true;
							if (client.state === null) {
								client.state = "enter";
								onenter(eventPosition(e));
								return;
							}
							client.state = "over";
							if (filterElement && !allowsTransfer) {
								setDropEffect(dataTransfer, "none");
								return;
							}
							ondrag(eventPosition(e));
						} else {
							if (filterElement && !overDropTarget) setDropEffect(dataTransfer, "none");
							if (client.state) {
								client.state = null;
								onexit(eventPosition(e));
							}
						}
					});
				});
			};
		};
		var drop = function drop(root, clients) {
			return function(e) {
				e.preventDefault();
				var dataTransfer = e.dataTransfer;
				requestDataTransferItems(dataTransfer).then(function(items) {
					clients.forEach(function(client) {
						var filterElement = client.filterElement, element = client.element, ondrop = client.ondrop, onexit = client.onexit, allowdrop = client.allowdrop;
						client.state = null;
						if (filterElement && !isEventTarget(e, element)) return;
						if (!allowdrop(items)) return onexit(eventPosition(e));
						ondrop(eventPosition(e), items);
					});
				});
			};
		};
		var dragleave = function dragleave(root, clients) {
			return function(e) {
				if (initialTarget !== e.target) return;
				clients.forEach(function(client) {
					var onexit = client.onexit;
					client.state = null;
					onexit(eventPosition(e));
				});
			};
		};
		var createHopper = function createHopper(scope, validateItems, options) {
			scope.classList.add("filepond--hopper");
			var catchesDropsOnPage = options.catchesDropsOnPage, requiresDropOnElement = options.requiresDropOnElement, _options$filterItems = options.filterItems, filterItems = _options$filterItems === void 0 ? function(items) {
				return items;
			} : _options$filterItems;
			var client = createDragNDropClient(scope, catchesDropsOnPage ? document.documentElement : scope, requiresDropOnElement);
			var lastState = "";
			var currentState = "";
			client.allowdrop = function(items) {
				return validateItems(filterItems(items));
			};
			client.ondrop = function(position, items) {
				var filteredItems = filterItems(items);
				if (!validateItems(filteredItems)) {
					api.ondragend(position);
					return;
				}
				currentState = "drag-drop";
				api.onload(filteredItems, position);
			};
			client.ondrag = function(position) {
				api.ondrag(position);
			};
			client.onenter = function(position) {
				currentState = "drag-over";
				api.ondragstart(position);
			};
			client.onexit = function(position) {
				currentState = "drag-exit";
				api.ondragend(position);
			};
			var api = {
				updateHopperState: function updateHopperState() {
					if (lastState !== currentState) {
						scope.dataset.hopperState = currentState;
						lastState = currentState;
					}
				},
				onload: function onload() {},
				ondragstart: function ondragstart() {},
				ondrag: function ondrag() {},
				ondragend: function ondragend() {},
				destroy: function destroy() {
					client.destroy();
				}
			};
			return api;
		};
		var listening = false;
		var listeners$1 = [];
		var handlePaste = function handlePaste(e) {
			var activeEl = document.activeElement;
			if (activeEl && (/textarea|input/i.test(activeEl.nodeName) || activeEl.getAttribute("contenteditable") === "true" || activeEl.getAttribute("contenteditable") === "")) {
				var inScope = false;
				var element = activeEl;
				while (element !== document.body) {
					if (element.classList.contains("filepond--root")) {
						inScope = true;
						break;
					}
					element = element.parentNode;
				}
				if (!inScope) return;
			}
			requestDataTransferItems(e.clipboardData).then(function(files) {
				if (!files.length) return;
				listeners$1.forEach(function(listener) {
					return listener(files);
				});
			});
		};
		var listen = function listen(cb) {
			if (listeners$1.includes(cb)) return;
			listeners$1.push(cb);
			if (listening) return;
			listening = true;
			document.addEventListener("paste", handlePaste);
		};
		var unlisten = function unlisten(listener) {
			arrayRemove(listeners$1, listeners$1.indexOf(listener));
			if (listeners$1.length === 0) {
				document.removeEventListener("paste", handlePaste);
				listening = false;
			}
		};
		var createPaster = function createPaster() {
			var cb = function cb(files) {
				api.onload(files);
			};
			var api = {
				destroy: function destroy() {
					unlisten(cb);
				},
				onload: function onload() {}
			};
			listen(cb);
			return api;
		};
		/**
		* Creates the file view
		*/
		var create$d = function create(_ref) {
			var root = _ref.root, props = _ref.props;
			root.element.id = "filepond--assistant-" + props.id;
			attr(root.element, "role", "alert");
			attr(root.element, "aria-live", "polite");
			attr(root.element, "aria-relevant", "additions");
		};
		var addFilesNotificationTimeout = null;
		var notificationClearTimeout = null;
		var filenames = [];
		var assist = function assist(root, message) {
			root.element.textContent = message;
		};
		var clear$1 = function clear(root) {
			root.element.textContent = "";
		};
		var listModified = function listModified(root, filename, label) {
			var total = root.query("GET_TOTAL_ITEMS");
			assist(root, label + " " + filename + ", " + total + " " + (total === 1 ? root.query("GET_LABEL_FILE_COUNT_SINGULAR") : root.query("GET_LABEL_FILE_COUNT_PLURAL")));
			clearTimeout(notificationClearTimeout);
			notificationClearTimeout = setTimeout(function() {
				clear$1(root);
			}, 1500);
		};
		var isUsingFilePond = function isUsingFilePond(root) {
			return root.element.parentNode.contains(document.activeElement);
		};
		var itemAdded = function itemAdded(_ref2) {
			var root = _ref2.root, action = _ref2.action;
			if (!isUsingFilePond(root)) return;
			root.element.textContent = "";
			var item = root.query("GET_ITEM", action.id);
			filenames.push(item.filename);
			clearTimeout(addFilesNotificationTimeout);
			addFilesNotificationTimeout = setTimeout(function() {
				listModified(root, filenames.join(", "), root.query("GET_LABEL_FILE_ADDED"));
				filenames.length = 0;
			}, 750);
		};
		var itemRemoved = function itemRemoved(_ref3) {
			var root = _ref3.root, action = _ref3.action;
			if (!isUsingFilePond(root)) return;
			var item = action.item;
			listModified(root, item.filename, root.query("GET_LABEL_FILE_REMOVED"));
		};
		var itemProcessed = function itemProcessed(_ref4) {
			var root = _ref4.root, action = _ref4.action;
			var filename = root.query("GET_ITEM", action.id).filename;
			var label = root.query("GET_LABEL_FILE_PROCESSING_COMPLETE");
			assist(root, filename + " " + label);
		};
		var itemProcessedUndo = function itemProcessedUndo(_ref5) {
			var root = _ref5.root, action = _ref5.action;
			var filename = root.query("GET_ITEM", action.id).filename;
			var label = root.query("GET_LABEL_FILE_PROCESSING_ABORTED");
			assist(root, filename + " " + label);
		};
		var itemError = function itemError(_ref6) {
			var root = _ref6.root, action = _ref6.action;
			var filename = root.query("GET_ITEM", action.id).filename;
			assist(root, action.status.main + " " + filename + " " + action.status.sub);
		};
		var assistant = createView({
			create: create$d,
			ignoreRect: true,
			ignoreRectUpdate: true,
			write: createRoute({
				DID_LOAD_ITEM: itemAdded,
				DID_REMOVE_ITEM: itemRemoved,
				DID_COMPLETE_ITEM_PROCESSING: itemProcessed,
				DID_ABORT_ITEM_PROCESSING: itemProcessedUndo,
				DID_REVERT_ITEM_PROCESSING: itemProcessedUndo,
				DID_THROW_ITEM_REMOVE_ERROR: itemError,
				DID_THROW_ITEM_LOAD_ERROR: itemError,
				DID_THROW_ITEM_INVALID: itemError,
				DID_THROW_ITEM_PROCESSING_ERROR: itemError
			}),
			tag: "span",
			name: "assistant"
		});
		var toCamels = function toCamels(string) {
			var separator = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "-";
			return string.replace(new RegExp(separator + ".", "g"), function(sub) {
				return sub.charAt(1).toUpperCase();
			});
		};
		var debounce = function debounce(func) {
			var interval = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 16;
			var immidiateOnly = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true;
			var last = Date.now();
			var timeout = null;
			return function() {
				for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key];
				clearTimeout(timeout);
				var dist = Date.now() - last;
				var fn = function fn() {
					last = Date.now();
					func.apply(void 0, args);
				};
				if (dist < interval) {
					if (!immidiateOnly) timeout = setTimeout(fn, interval - dist);
				} else fn();
			};
		};
		var MAX_FILES_LIMIT = 1e6;
		var prevent = function prevent(e) {
			return e.preventDefault();
		};
		var create$e = function create(_ref) {
			var root = _ref.root, props = _ref.props;
			var id = root.query("GET_ID");
			if (id) root.element.id = id;
			var className = root.query("GET_CLASS_NAME");
			if (className) className.split(" ").filter(function(name) {
				return name.length;
			}).forEach(function(name) {
				root.element.classList.add(name);
			});
			root.ref.label = root.appendChildView(root.createChildView(dropLabel, Object.assign({}, props, {
				translateY: null,
				caption: root.query("GET_LABEL_IDLE")
			})));
			root.ref.list = root.appendChildView(root.createChildView(listScroller, { translateY: null }));
			root.ref.panel = root.appendChildView(root.createChildView(panel, { name: "panel-root" }));
			root.ref.assistant = root.appendChildView(root.createChildView(assistant, Object.assign({}, props)));
			root.ref.data = root.appendChildView(root.createChildView(data, Object.assign({}, props)));
			root.ref.measure = createElement$1("div");
			root.ref.measure.style.height = "100%";
			root.element.appendChild(root.ref.measure);
			root.ref.bounds = null;
			root.query("GET_STYLES").filter(function(style) {
				return !isEmpty(style.value);
			}).map(function(_ref2) {
				var name = _ref2.name, value = _ref2.value;
				root.element.dataset[name] = value;
			});
			root.ref.widthPrevious = null;
			root.ref.widthUpdated = debounce(function() {
				root.ref.updateHistory = [];
				root.dispatch("DID_RESIZE_ROOT");
			}, 250);
			root.ref.previousAspectRatio = null;
			root.ref.updateHistory = [];
			var canHover = window.matchMedia("(pointer: fine) and (hover: hover)").matches;
			var hasPointerEvents = "PointerEvent" in window;
			if (root.query("GET_ALLOW_REORDER") && hasPointerEvents && !canHover) {
				root.element.addEventListener("touchmove", prevent, { passive: false });
				root.element.addEventListener("gesturestart", prevent);
			}
			var credits = root.query("GET_CREDITS");
			if (credits.length === 2) {
				var frag = document.createElement("a");
				frag.className = "filepond--credits";
				frag.href = credits[0];
				frag.tabIndex = -1;
				frag.target = "_blank";
				frag.rel = "noopener noreferrer nofollow";
				frag.textContent = credits[1];
				root.element.appendChild(frag);
				root.ref.credits = frag;
			}
		};
		var write$9 = function write(_ref3) {
			var root = _ref3.root, props = _ref3.props, actions = _ref3.actions;
			route$5({
				root,
				props,
				actions
			});
			actions.filter(function(action) {
				return /^DID_SET_STYLE_/.test(action.type);
			}).filter(function(action) {
				return !isEmpty(action.data.value);
			}).map(function(_ref4) {
				var type = _ref4.type, data = _ref4.data;
				var name = toCamels(type.substring(8).toLowerCase(), "_");
				root.element.dataset[name] = data.value;
				root.invalidateLayout();
			});
			if (root.rect.element.hidden) return;
			if (root.rect.element.width !== root.ref.widthPrevious) {
				root.ref.widthPrevious = root.rect.element.width;
				root.ref.widthUpdated();
			}
			var bounds = root.ref.bounds;
			if (!bounds) {
				bounds = root.ref.bounds = calculateRootBoundingBoxHeight(root);
				root.element.removeChild(root.ref.measure);
				root.ref.measure = null;
			}
			var _root$ref = root.ref, hopper = _root$ref.hopper, label = _root$ref.label, list = _root$ref.list, panel = _root$ref.panel;
			if (hopper) hopper.updateHopperState();
			var aspectRatio = root.query("GET_PANEL_ASPECT_RATIO");
			var isMultiItem = root.query("GET_ALLOW_MULTIPLE");
			var totalItems = root.query("GET_TOTAL_ITEMS");
			var atMaxCapacity = totalItems === (isMultiItem ? root.query("GET_MAX_FILES") || MAX_FILES_LIMIT : 1);
			var addAction = actions.find(function(action) {
				return action.type === "DID_ADD_ITEM";
			});
			if (atMaxCapacity && addAction) {
				var interactionMethod = addAction.data.interactionMethod;
				label.opacity = 0;
				if (isMultiItem) label.translateY = -40;
				else if (interactionMethod === InteractionMethod.API) label.translateX = 40;
				else if (interactionMethod === InteractionMethod.BROWSE) label.translateY = 40;
				else label.translateY = 30;
			} else if (!atMaxCapacity) {
				label.opacity = 1;
				label.translateX = 0;
				label.translateY = 0;
			}
			var listItemMargin = calculateListItemMargin(root);
			var listHeight = calculateListHeight(root);
			var labelHeight = label.rect.element.height;
			var currentLabelHeight = !isMultiItem || atMaxCapacity ? 0 : labelHeight;
			var listMarginTop = atMaxCapacity ? list.rect.element.marginTop : 0;
			var listMarginBottom = totalItems === 0 ? 0 : list.rect.element.marginBottom;
			var visualHeight = currentLabelHeight + listMarginTop + listHeight.visual + listMarginBottom;
			var boundsHeight = currentLabelHeight + listMarginTop + listHeight.bounds + listMarginBottom;
			list.translateY = Math.max(0, currentLabelHeight - list.rect.element.marginTop) - listItemMargin.top;
			if (aspectRatio) {
				var width = root.rect.element.width;
				var height = width * aspectRatio;
				if (aspectRatio !== root.ref.previousAspectRatio) {
					root.ref.previousAspectRatio = aspectRatio;
					root.ref.updateHistory = [];
				}
				var history = root.ref.updateHistory;
				history.push(width);
				var MAX_BOUNCES = 2;
				if (history.length > MAX_BOUNCES * 2) {
					var l = history.length;
					var bottom = l - 10;
					var bounces = 0;
					for (var i = l; i >= bottom; i--) {
						if (history[i] === history[i - 2]) bounces++;
						if (bounces >= MAX_BOUNCES) return;
					}
				}
				panel.scalable = false;
				panel.height = height;
				var listAvailableHeight = height - currentLabelHeight - (listMarginBottom - listItemMargin.bottom) - (atMaxCapacity ? listMarginTop : 0);
				if (listHeight.visual > listAvailableHeight) list.overflow = listAvailableHeight;
				else list.overflow = null;
				root.height = height;
			} else if (bounds.fixedHeight) {
				panel.scalable = false;
				var _listAvailableHeight = bounds.fixedHeight - currentLabelHeight - (listMarginBottom - listItemMargin.bottom) - (atMaxCapacity ? listMarginTop : 0);
				if (listHeight.visual > _listAvailableHeight) list.overflow = _listAvailableHeight;
				else list.overflow = null;
			} else if (bounds.cappedHeight) {
				var isCappedHeight = visualHeight >= bounds.cappedHeight;
				var panelHeight = Math.min(bounds.cappedHeight, visualHeight);
				panel.scalable = true;
				panel.height = isCappedHeight ? panelHeight : panelHeight - listItemMargin.top - listItemMargin.bottom;
				var _listAvailableHeight2 = panelHeight - currentLabelHeight - (listMarginBottom - listItemMargin.bottom) - (atMaxCapacity ? listMarginTop : 0);
				if (visualHeight > bounds.cappedHeight && listHeight.visual > _listAvailableHeight2) list.overflow = _listAvailableHeight2;
				else list.overflow = null;
				root.height = Math.min(bounds.cappedHeight, boundsHeight - listItemMargin.top - listItemMargin.bottom);
			} else {
				var itemMargin = totalItems > 0 ? listItemMargin.top + listItemMargin.bottom : 0;
				panel.scalable = true;
				panel.height = Math.max(labelHeight, visualHeight - itemMargin);
				root.height = Math.max(labelHeight, boundsHeight - itemMargin);
			}
			if (root.ref.credits && panel.heightCurrent) root.ref.credits.style.transform = "translateY(" + panel.heightCurrent + "px)";
		};
		var calculateListItemMargin = function calculateListItemMargin(root) {
			var item = root.ref.list.childViews[0].childViews[0];
			return item ? {
				top: item.rect.element.marginTop,
				bottom: item.rect.element.marginBottom
			} : {
				top: 0,
				bottom: 0
			};
		};
		var calculateListHeight = function calculateListHeight(root) {
			var visual = 0;
			var bounds = 0;
			var scrollList = root.ref.list;
			var itemList = scrollList.childViews[0];
			var visibleChildren = itemList.childViews.filter(function(child) {
				return child.rect.element.height;
			});
			var children = root.query("GET_ACTIVE_ITEMS").map(function(item) {
				return visibleChildren.find(function(child) {
					return child.id === item.id;
				});
			}).filter(function(item) {
				return item;
			});
			if (children.length === 0) return {
				visual,
				bounds
			};
			var horizontalSpace = itemList.rect.element.width;
			var dragIndex = getItemIndexByPosition(itemList, children, scrollList.dragCoordinates);
			var childRect = children[0].rect.element;
			var itemVerticalMargin = childRect.marginTop + childRect.marginBottom;
			var itemHorizontalMargin = childRect.marginLeft + childRect.marginRight;
			var itemWidth = childRect.width + itemHorizontalMargin;
			var itemHeight = childRect.height + itemVerticalMargin;
			var newItem = typeof dragIndex !== "undefined" && dragIndex >= 0 ? 1 : 0;
			var removedItem = children.find(function(child) {
				return child.markedForRemoval && child.opacity < .45;
			}) ? -1 : 0;
			var verticalItemCount = children.length + newItem + removedItem;
			var itemsPerRow = getItemsPerRow(horizontalSpace, itemWidth);
			if (itemsPerRow === 1) children.forEach(function(item) {
				var height = item.rect.element.height + itemVerticalMargin;
				bounds += height;
				visual += height * item.opacity;
			});
			else {
				bounds = Math.ceil(verticalItemCount / itemsPerRow) * itemHeight;
				visual = bounds;
			}
			return {
				visual,
				bounds
			};
		};
		var calculateRootBoundingBoxHeight = function calculateRootBoundingBoxHeight(root) {
			var height = root.ref.measureHeight || null;
			return {
				cappedHeight: parseInt(root.style.maxHeight, 10) || null,
				fixedHeight: height === 0 ? null : height
			};
		};
		var exceedsMaxFiles = function exceedsMaxFiles(root, items) {
			var allowReplace = root.query("GET_ALLOW_REPLACE");
			var allowMultiple = root.query("GET_ALLOW_MULTIPLE");
			var totalItems = root.query("GET_TOTAL_ITEMS");
			var maxItems = root.query("GET_MAX_FILES");
			var totalBrowseItems = items.length;
			if (!allowMultiple && totalBrowseItems > 1) {
				root.dispatch("DID_THROW_MAX_FILES", {
					source: items,
					error: createResponse("warning", 0, "Max files")
				});
				return true;
			}
			maxItems = allowMultiple ? maxItems : 1;
			if (!allowMultiple && allowReplace) return false;
			if (isInt(maxItems) && totalItems + totalBrowseItems > maxItems) {
				root.dispatch("DID_THROW_MAX_FILES", {
					source: items,
					error: createResponse("warning", 0, "Max files")
				});
				return true;
			}
			return false;
		};
		var getDragIndex = function getDragIndex(list, children, position) {
			var itemList = list.childViews[0];
			return getItemIndexByPosition(itemList, children, {
				left: position.scopeLeft - itemList.rect.element.left,
				top: position.scopeTop - (list.rect.outer.top + list.rect.element.marginTop + list.rect.element.scrollTop)
			});
		};
		/**
		* Enable or disable file drop functionality
		*/
		var toggleDrop = function toggleDrop(root) {
			var isAllowed = root.query("GET_ALLOW_DROP");
			var isDisabled = root.query("GET_DISABLED");
			var enabled = isAllowed && !isDisabled;
			if (enabled && !root.ref.hopper) {
				var hopper = createHopper(root.element, function(items) {
					var beforeDropFile = root.query("GET_BEFORE_DROP_FILE") || function() {
						return true;
					};
					return root.query("GET_DROP_VALIDATION") ? items.every(function(item) {
						return applyFilters("ALLOW_HOPPER_ITEM", item, { query: root.query }).every(function(result) {
							return result === true;
						}) && beforeDropFile(item);
					}) : true;
				}, {
					filterItems: function filterItems(items) {
						var ignoredFiles = root.query("GET_IGNORED_FILES");
						return items.filter(function(item) {
							if (isFile(item)) return !ignoredFiles.includes(item.name.toLowerCase());
							return true;
						});
					},
					catchesDropsOnPage: root.query("GET_DROP_ON_PAGE"),
					requiresDropOnElement: root.query("GET_DROP_ON_ELEMENT")
				});
				hopper.onload = function(items, position) {
					var visibleChildren = root.ref.list.childViews[0].childViews.filter(function(child) {
						return child.rect.element.height;
					});
					var children = root.query("GET_ACTIVE_ITEMS").map(function(item) {
						return visibleChildren.find(function(child) {
							return child.id === item.id;
						});
					}).filter(function(item) {
						return item;
					});
					applyFilterChain("ADD_ITEMS", items, { dispatch: root.dispatch }).then(function(queue) {
						if (exceedsMaxFiles(root, queue)) return false;
						root.dispatch("ADD_ITEMS", {
							items: queue,
							index: getDragIndex(root.ref.list, children, position),
							interactionMethod: InteractionMethod.DROP
						});
					});
					root.dispatch("DID_DROP", { position });
					root.dispatch("DID_END_DRAG", { position });
				};
				hopper.ondragstart = function(position) {
					root.dispatch("DID_START_DRAG", { position });
				};
				hopper.ondrag = debounce(function(position) {
					root.dispatch("DID_DRAG", { position });
				});
				hopper.ondragend = function(position) {
					root.dispatch("DID_END_DRAG", { position });
				};
				root.ref.hopper = hopper;
				root.ref.drip = root.appendChildView(root.createChildView(drip));
			} else if (!enabled && root.ref.hopper) {
				root.ref.hopper.destroy();
				root.ref.hopper = null;
				root.removeChildView(root.ref.drip);
			}
		};
		/**
		* Enable or disable browse functionality
		*/
		var toggleBrowse = function toggleBrowse(root, props) {
			var isAllowed = root.query("GET_ALLOW_BROWSE");
			var isDisabled = root.query("GET_DISABLED");
			var enabled = isAllowed && !isDisabled;
			if (enabled && !root.ref.browser) root.ref.browser = root.appendChildView(root.createChildView(browser, Object.assign({}, props, { onload: function onload(items) {
				applyFilterChain("ADD_ITEMS", items, { dispatch: root.dispatch }).then(function(queue) {
					if (exceedsMaxFiles(root, queue)) return false;
					root.dispatch("ADD_ITEMS", {
						items: queue,
						index: -1,
						interactionMethod: InteractionMethod.BROWSE
					});
				});
			} })), 0);
			else if (!enabled && root.ref.browser) {
				root.removeChildView(root.ref.browser);
				root.ref.browser = null;
			}
		};
		/**
		* Enable or disable paste functionality
		*/
		var togglePaste = function togglePaste(root) {
			var isAllowed = root.query("GET_ALLOW_PASTE");
			var isDisabled = root.query("GET_DISABLED");
			var enabled = isAllowed && !isDisabled;
			if (enabled && !root.ref.paster) {
				root.ref.paster = createPaster();
				root.ref.paster.onload = function(items) {
					applyFilterChain("ADD_ITEMS", items, { dispatch: root.dispatch }).then(function(queue) {
						if (exceedsMaxFiles(root, queue)) return false;
						root.dispatch("ADD_ITEMS", {
							items: queue,
							index: -1,
							interactionMethod: InteractionMethod.PASTE
						});
					});
				};
			} else if (!enabled && root.ref.paster) {
				root.ref.paster.destroy();
				root.ref.paster = null;
			}
		};
		/**
		* Route actions
		*/
		var route$5 = createRoute({
			DID_SET_ALLOW_BROWSE: function DID_SET_ALLOW_BROWSE(_ref5) {
				var root = _ref5.root, props = _ref5.props;
				toggleBrowse(root, props);
			},
			DID_SET_ALLOW_DROP: function DID_SET_ALLOW_DROP(_ref6) {
				var root = _ref6.root;
				toggleDrop(root);
			},
			DID_SET_ALLOW_PASTE: function DID_SET_ALLOW_PASTE(_ref7) {
				var root = _ref7.root;
				togglePaste(root);
			},
			DID_SET_DISABLED: function DID_SET_DISABLED(_ref8) {
				var root = _ref8.root, props = _ref8.props;
				toggleDrop(root);
				togglePaste(root);
				toggleBrowse(root, props);
				if (root.query("GET_DISABLED")) root.element.dataset.disabled = "disabled";
				else root.element.removeAttribute("data-disabled");
			}
		});
		var root = createView({
			name: "root",
			read: function read(_ref9) {
				var root = _ref9.root;
				if (root.ref.measure) root.ref.measureHeight = root.ref.measure.offsetHeight;
			},
			create: create$e,
			write: write$9,
			destroy: function destroy(_ref10) {
				var root = _ref10.root;
				if (root.ref.paster) root.ref.paster.destroy();
				if (root.ref.hopper) root.ref.hopper.destroy();
				root.element.removeEventListener("touchmove", prevent);
				root.element.removeEventListener("gesturestart", prevent);
			},
			mixins: { styles: ["height"] }
		});
		var createApp = function createApp() {
			var initialOptions = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
			var originalElement = null;
			var defaultOptions = getOptions();
			var store = createStore(createInitialState(defaultOptions), [queries, createOptionQueries(defaultOptions)], [actions, createOptionActions(defaultOptions)]);
			store.dispatch("SET_OPTIONS", { options: initialOptions });
			var visibilityHandler = function visibilityHandler() {
				if (document.hidden) return;
				store.dispatch("KICK");
			};
			document.addEventListener("visibilitychange", visibilityHandler);
			var resizeDoneTimer = null;
			var isResizing = false;
			var isResizingHorizontally = false;
			var initialWindowWidth = null;
			var currentWindowWidth = null;
			var resizeHandler = function resizeHandler() {
				if (!isResizing) isResizing = true;
				clearTimeout(resizeDoneTimer);
				resizeDoneTimer = setTimeout(function() {
					isResizing = false;
					initialWindowWidth = null;
					currentWindowWidth = null;
					if (isResizingHorizontally) {
						isResizingHorizontally = false;
						store.dispatch("DID_STOP_RESIZE");
					}
				}, 500);
			};
			window.addEventListener("resize", resizeHandler);
			var view = root(store, { id: getUniqueId() });
			var isResting = false;
			var isHidden = false;
			var readWriteApi = {
				_read: function _read() {
					if (isResizing) {
						currentWindowWidth = window.innerWidth;
						if (!initialWindowWidth) initialWindowWidth = currentWindowWidth;
						if (!isResizingHorizontally && currentWindowWidth !== initialWindowWidth) {
							store.dispatch("DID_START_RESIZE");
							isResizingHorizontally = true;
						}
					}
					if (isHidden && isResting) isResting = view.element.offsetParent === null;
					if (isResting) return;
					view._read();
					isHidden = view.rect.element.hidden;
				},
				_write: function _write(ts) {
					var actions = store.processActionQueue().filter(function(action) {
						return !/^SET_/.test(action.type);
					});
					if (isResting && !actions.length) return;
					routeActionsToEvents(actions);
					isResting = view._write(ts, actions, isResizingHorizontally);
					removeReleasedItems(store.query("GET_ITEMS"));
					if (isResting) store.processDispatchQueue();
				}
			};
			var createEvent = function createEvent(name) {
				return function(data) {
					var event = { type: name };
					if (!data) return event;
					if (data.hasOwnProperty("error")) event.error = data.error ? Object.assign({}, data.error) : null;
					if (data.status) event.status = Object.assign({}, data.status);
					if (data.file) event.output = data.file;
					if (data.source) event.file = data.source;
					else if (data.item || data.id) {
						var item = data.item ? data.item : store.query("GET_ITEM", data.id);
						event.file = item ? createItemAPI(item) : null;
					}
					if (data.items) event.items = data.items.map(createItemAPI);
					if (/progress/.test(name)) event.progress = data.progress;
					if (data.hasOwnProperty("origin") && data.hasOwnProperty("target")) {
						event.origin = data.origin;
						event.target = data.target;
					}
					return event;
				};
			};
			var eventRoutes = {
				DID_DESTROY: createEvent("destroy"),
				DID_INIT: createEvent("init"),
				DID_THROW_MAX_FILES: createEvent("warning"),
				DID_INIT_ITEM: createEvent("initfile"),
				DID_START_ITEM_LOAD: createEvent("addfilestart"),
				DID_UPDATE_ITEM_LOAD_PROGRESS: createEvent("addfileprogress"),
				DID_LOAD_ITEM: createEvent("addfile"),
				DID_THROW_ITEM_INVALID: [createEvent("error"), createEvent("addfile")],
				DID_THROW_ITEM_LOAD_ERROR: [createEvent("error"), createEvent("addfile")],
				DID_THROW_ITEM_REMOVE_ERROR: [createEvent("error"), createEvent("removefile")],
				DID_PREPARE_OUTPUT: createEvent("preparefile"),
				DID_START_ITEM_PROCESSING: createEvent("processfilestart"),
				DID_UPDATE_ITEM_PROCESS_PROGRESS: createEvent("processfileprogress"),
				DID_ABORT_ITEM_PROCESSING: createEvent("processfileabort"),
				DID_COMPLETE_ITEM_PROCESSING: createEvent("processfile"),
				DID_COMPLETE_ITEM_PROCESSING_ALL: createEvent("processfiles"),
				DID_REVERT_ITEM_PROCESSING: createEvent("processfilerevert"),
				DID_THROW_ITEM_PROCESSING_ERROR: [createEvent("error"), createEvent("processfile")],
				DID_REMOVE_ITEM: createEvent("removefile"),
				DID_UPDATE_ITEMS: createEvent("updatefiles"),
				DID_ACTIVATE_ITEM: createEvent("activatefile"),
				DID_REORDER_ITEMS: createEvent("reorderfiles")
			};
			var exposeEvent = function exposeEvent(event) {
				var detail = Object.assign({ pond: exports$2 }, event);
				delete detail.type;
				view.element.dispatchEvent(new CustomEvent("FilePond:" + event.type, {
					detail,
					bubbles: true,
					cancelable: true,
					composed: true
				}));
				var params = [];
				if (event.hasOwnProperty("error")) params.push(event.error);
				if (event.hasOwnProperty("file")) params.push(event.file);
				var filtered = [
					"type",
					"error",
					"file"
				];
				Object.keys(event).filter(function(key) {
					return !filtered.includes(key);
				}).forEach(function(key) {
					return params.push(event[key]);
				});
				exports$2.fire.apply(exports$2, [event.type].concat(params));
				var handler = store.query("GET_ON" + event.type.toUpperCase());
				if (handler) handler.apply(void 0, params);
			};
			var routeActionsToEvents = function routeActionsToEvents(actions) {
				if (!actions.length) return;
				actions.filter(function(action) {
					return eventRoutes[action.type];
				}).forEach(function(action) {
					var routes = eventRoutes[action.type];
					(Array.isArray(routes) ? routes : [routes]).forEach(function(route) {
						if (action.type === "DID_INIT_ITEM") exposeEvent(route(action.data));
						else setTimeout(function() {
							exposeEvent(route(action.data));
						}, 0);
					});
				});
			};
			var setOptions = function setOptions(options) {
				return store.dispatch("SET_OPTIONS", { options });
			};
			var getFile = function getFile(query) {
				return store.query("GET_ACTIVE_ITEM", query);
			};
			var prepareFile = function prepareFile(query) {
				return new Promise(function(resolve, reject) {
					store.dispatch("REQUEST_ITEM_PREPARE", {
						query,
						success: function success(item) {
							resolve(item);
						},
						failure: function failure(error) {
							reject(error);
						}
					});
				});
			};
			var addFile = function addFile(source) {
				var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
				return new Promise(function(resolve, reject) {
					addFiles([{
						source,
						options
					}], { index: options.index }).then(function(items) {
						return resolve(items && items[0]);
					}).catch(reject);
				});
			};
			var isFilePondFile = function isFilePondFile(obj) {
				return obj.file && obj.id;
			};
			var removeFile = function removeFile(query, options) {
				if (typeof query === "object" && !isFilePondFile(query) && !options) {
					options = query;
					query = void 0;
				}
				store.dispatch("REMOVE_ITEM", Object.assign({}, options, { query }));
				return store.query("GET_ACTIVE_ITEM", query) === null;
			};
			var addFiles = function addFiles() {
				for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key];
				return new Promise(function(resolve, reject) {
					var sources = [];
					var options = {};
					if (isArray(args[0])) {
						sources.push.apply(sources, args[0]);
						Object.assign(options, args[1] || {});
					} else {
						var lastArgument = args[args.length - 1];
						if (typeof lastArgument === "object" && !(lastArgument instanceof Blob)) Object.assign(options, args.pop());
						sources.push.apply(sources, args);
					}
					store.dispatch("ADD_ITEMS", {
						items: sources,
						index: options.index,
						interactionMethod: InteractionMethod.API,
						success: resolve,
						failure: reject
					});
				});
			};
			var getFiles = function getFiles() {
				return store.query("GET_ACTIVE_ITEMS");
			};
			var processFile = function processFile(query) {
				return new Promise(function(resolve, reject) {
					store.dispatch("REQUEST_ITEM_PROCESSING", {
						query,
						success: function success(item) {
							resolve(item);
						},
						failure: function failure(error) {
							reject(error);
						}
					});
				});
			};
			var exports$2 = Object.assign({}, on(), {}, readWriteApi, {}, createOptionAPI(store, defaultOptions), {
				setOptions,
				addFile,
				addFiles,
				getFile,
				processFile,
				prepareFile,
				removeFile,
				moveFile: function moveFile(query, index) {
					return store.dispatch("MOVE_ITEM", {
						query,
						index
					});
				},
				getFiles,
				processFiles: function processFiles() {
					for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) args[_key3] = arguments[_key3];
					var queries = Array.isArray(args[0]) ? args[0] : args;
					if (!queries.length) {
						var files = getFiles().filter(function(item) {
							return !(item.status === ItemStatus.IDLE && item.origin === FileOrigin.LOCAL) && item.status !== ItemStatus.PROCESSING && item.status !== ItemStatus.PROCESSING_COMPLETE && item.status !== ItemStatus.PROCESSING_REVERT_ERROR;
						});
						return Promise.all(files.map(processFile));
					}
					return Promise.all(queries.map(processFile));
				},
				removeFiles: function removeFiles() {
					for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) args[_key4] = arguments[_key4];
					var queries = Array.isArray(args[0]) ? args[0] : args;
					var options;
					if (typeof queries[queries.length - 1] === "object") options = queries.pop();
					else if (Array.isArray(args[0])) options = args[1];
					var files = getFiles();
					if (!queries.length) return Promise.all(files.map(function(file) {
						return removeFile(file, options);
					}));
					return queries.map(function(query) {
						return isNumber(query) ? files[query] ? files[query].id : null : query;
					}).filter(function(query) {
						return query;
					}).map(function(q) {
						return removeFile(q, options);
					});
				},
				prepareFiles: function prepareFiles() {
					for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) args[_key2] = arguments[_key2];
					var queries = Array.isArray(args[0]) ? args[0] : args;
					var items = queries.length ? queries : getFiles();
					return Promise.all(items.map(prepareFile));
				},
				sort: function sort(compare) {
					return store.dispatch("SORT", { compare });
				},
				browse: function browse() {
					var input = view.element.querySelector("input[type=file]");
					if (input) input.click();
				},
				destroy: function destroy() {
					exports$2.fire("destroy", view.element);
					store.dispatch("ABORT_ALL");
					view._destroy();
					window.removeEventListener("resize", resizeHandler);
					document.removeEventListener("visibilitychange", visibilityHandler);
					store.dispatch("DID_DESTROY");
				},
				insertBefore: function insertBefore$1(element) {
					return insertBefore(view.element, element);
				},
				insertAfter: function insertAfter$1(element) {
					return insertAfter(view.element, element);
				},
				appendTo: function appendTo(element) {
					return element.appendChild(view.element);
				},
				replaceElement: function replaceElement(element) {
					insertBefore(view.element, element);
					element.parentNode.removeChild(element);
					originalElement = element;
				},
				restoreElement: function restoreElement() {
					if (!originalElement) return;
					insertAfter(originalElement, view.element);
					view.element.parentNode.removeChild(view.element);
					originalElement = null;
				},
				isAttachedTo: function isAttachedTo(element) {
					return view.element === element || originalElement === element;
				},
				element: { get: function get() {
					return view.element;
				} },
				status: { get: function get() {
					return store.query("GET_STATUS");
				} }
			});
			store.dispatch("DID_INIT");
			return createObject(exports$2);
		};
		var createAppObject = function createAppObject() {
			var customOptions = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
			var defaultOptions = {};
			forin(getOptions(), function(key, value) {
				defaultOptions[key] = value[0];
			});
			return createApp(Object.assign({}, defaultOptions, {}, customOptions));
		};
		var lowerCaseFirstLetter = function lowerCaseFirstLetter(string) {
			return string.charAt(0).toLowerCase() + string.slice(1);
		};
		var attributeNameToPropertyName = function attributeNameToPropertyName(attributeName) {
			return toCamels(attributeName.replace(/^data-/, ""));
		};
		var mapObject = function mapObject(object, propertyMap) {
			forin(propertyMap, function(selector, mapping) {
				forin(object, function(property, value) {
					var selectorRegExp = new RegExp(selector);
					if (!selectorRegExp.test(property)) return;
					delete object[property];
					if (mapping === false) return;
					if (isString(mapping)) {
						object[mapping] = value;
						return;
					}
					var group = mapping.group;
					if (isObject(mapping) && !object[group]) object[group] = {};
					object[group][lowerCaseFirstLetter(property.replace(selectorRegExp, ""))] = value;
				});
				if (mapping.mapping) mapObject(object[mapping.group], mapping.mapping);
			});
		};
		var getAttributesAsObject = function getAttributesAsObject(node) {
			var attributeMapping = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
			var attributes = [];
			forin(node.attributes, function(index) {
				attributes.push(node.attributes[index]);
			});
			var output = attributes.filter(function(attribute) {
				return attribute.name;
			}).reduce(function(obj, attribute) {
				var value = attr(node, attribute.name);
				obj[attributeNameToPropertyName(attribute.name)] = value === attribute.name ? true : value;
				return obj;
			}, {});
			mapObject(output, attributeMapping);
			return output;
		};
		var createAppAtElement = function createAppAtElement(element) {
			var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
			var attributeMapping = {
				"^class$": "className",
				"^multiple$": "allowMultiple",
				"^capture$": "captureMethod",
				"^webkitdirectory$": "allowDirectoriesOnly",
				"^server": {
					group: "server",
					mapping: {
						"^process": { group: "process" },
						"^revert": { group: "revert" },
						"^fetch": { group: "fetch" },
						"^restore": { group: "restore" },
						"^load": { group: "load" }
					}
				},
				"^type$": false,
				"^files$": false
			};
			applyFilters("SET_ATTRIBUTE_TO_OPTION_MAP", attributeMapping);
			var mergedOptions = Object.assign({}, options);
			var attributeOptions = getAttributesAsObject(element.nodeName === "FIELDSET" ? element.querySelector("input[type=file]") : element, attributeMapping);
			Object.keys(attributeOptions).forEach(function(key) {
				if (isObject(attributeOptions[key])) {
					if (!isObject(mergedOptions[key])) mergedOptions[key] = {};
					Object.assign(mergedOptions[key], attributeOptions[key]);
				} else mergedOptions[key] = attributeOptions[key];
			});
			mergedOptions.files = (options.files || []).concat(Array.from(element.querySelectorAll("input:not([type=file])")).map(function(input) {
				return {
					source: input.value,
					options: { type: input.dataset.type }
				};
			}));
			var app = createAppObject(mergedOptions);
			if (element.files) Array.from(element.files).forEach(function(file) {
				app.addFile(file);
			});
			app.replaceElement(element);
			return app;
		};
		var createApp$1 = function createApp() {
			return isNode(arguments.length <= 0 ? void 0 : arguments[0]) ? createAppAtElement.apply(void 0, arguments) : createAppObject.apply(void 0, arguments);
		};
		var PRIVATE_METHODS = [
			"fire",
			"_read",
			"_write"
		];
		var createAppAPI = function createAppAPI(app) {
			var api = {};
			copyObjectPropertiesToObject(app, api, PRIVATE_METHODS);
			return api;
		};
		/**
		* Replaces placeholders in given string with replacements
		* @param string - "Foo {bar}""
		* @param replacements - { "bar": 10 }
		*/
		var replaceInString = function replaceInString(string, replacements) {
			return string.replace(/(?:{([a-zA-Z]+)})/g, function(match, group) {
				return replacements[group];
			});
		};
		var createWorker = function createWorker(fn) {
			var workerBlob = new Blob([
				"(",
				fn.toString(),
				")()"
			], { type: "application/javascript" });
			var workerURL = URL.createObjectURL(workerBlob);
			var worker = new Worker(workerURL);
			return {
				transfer: function transfer(message, cb) {},
				post: function post(message, cb, transferList) {
					var id = getUniqueId();
					worker.onmessage = function(e) {
						if (e.data.id === id) cb(e.data.message);
					};
					worker.postMessage({
						id,
						message
					}, transferList);
				},
				terminate: function terminate() {
					worker.terminate();
					URL.revokeObjectURL(workerURL);
				}
			};
		};
		var loadImage = function loadImage(url) {
			return new Promise(function(resolve, reject) {
				var img = new Image();
				img.onload = function() {
					resolve(img);
				};
				img.onerror = function(e) {
					reject(e);
				};
				img.src = url;
			});
		};
		var renameFile = function renameFile(file, name) {
			var renamedFile = file.slice(0, file.size, file.type);
			renamedFile.lastModifiedDate = file.lastModifiedDate;
			renamedFile.name = name;
			return renamedFile;
		};
		var copyFile = function copyFile(file) {
			return renameFile(file, file.name);
		};
		var registeredPlugins = [];
		var createAppPlugin = function createAppPlugin(plugin) {
			if (registeredPlugins.includes(plugin)) return;
			registeredPlugins.push(plugin);
			extendDefaultOptions(plugin({
				addFilter,
				utils: {
					Type,
					forin,
					isString,
					isFile,
					toNaturalFileSize,
					replaceInString,
					getExtensionFromFilename,
					getFilenameWithoutExtension,
					guesstimateMimeType,
					getFileFromBlob,
					getFilenameFromURL,
					createRoute,
					createWorker,
					createView,
					createItemAPI,
					loadImage,
					copyFile,
					renameFile,
					createBlob,
					applyFilterChain,
					text,
					getNumericAspectRatioFromString
				},
				views: { fileActionButton }
			}).options);
		};
		var isOperaMini = function isOperaMini() {
			return Object.prototype.toString.call(window.operamini) === "[object OperaMini]";
		};
		var hasPromises = function hasPromises() {
			return "Promise" in window;
		};
		var hasBlobSlice = function hasBlobSlice() {
			return "slice" in Blob.prototype;
		};
		var hasCreateObjectURL = function hasCreateObjectURL() {
			return "URL" in window && "createObjectURL" in window.URL;
		};
		var hasVisibility = function hasVisibility() {
			return "visibilityState" in document;
		};
		var hasTiming = function hasTiming() {
			return "performance" in window;
		};
		var hasCSSSupports = function hasCSSSupports() {
			return "supports" in (window.CSS || {});
		};
		var isIE11 = function isIE11() {
			return /MSIE|Trident/.test(window.navigator.userAgent);
		};
		var supported = (function() {
			var isSupported = isBrowser() && !isOperaMini() && hasVisibility() && hasPromises() && hasBlobSlice() && hasCreateObjectURL() && hasTiming() && (hasCSSSupports() || isIE11());
			return function() {
				return isSupported;
			};
		})();
		/**
		* Plugin internal state (over all instances)
		*/
		var state = { apps: [] };
		var name = "filepond";
		/**
		* Public Plugin methods
		*/
		var fn = function fn() {};
		exports$1.Status = {};
		exports$1.FileStatus = {};
		exports$1.FileOrigin = {};
		exports$1.OptionTypes = {};
		exports$1.create = fn;
		exports$1.destroy = fn;
		exports$1.parse = fn;
		exports$1.find = fn;
		exports$1.registerPlugin = fn;
		exports$1.getOptions = fn;
		exports$1.setOptions = fn;
		if (supported()) {
			createPainter(function() {
				state.apps.forEach(function(app) {
					return app._read();
				});
			}, function(ts) {
				state.apps.forEach(function(app) {
					return app._write(ts);
				});
			});
			var dispatch = function dispatch() {
				document.dispatchEvent(new CustomEvent("FilePond:loaded", { detail: {
					supported,
					create: exports$1.create,
					destroy: exports$1.destroy,
					parse: exports$1.parse,
					find: exports$1.find,
					registerPlugin: exports$1.registerPlugin,
					setOptions: exports$1.setOptions
				} }));
				document.removeEventListener("DOMContentLoaded", dispatch);
			};
			if (document.readyState !== "loading") setTimeout(function() {
				return dispatch();
			}, 0);
			else document.addEventListener("DOMContentLoaded", dispatch);
			var updateOptionTypes = function updateOptionTypes() {
				return forin(getOptions(), function(key, value) {
					exports$1.OptionTypes[key] = value[1];
				});
			};
			exports$1.Status = Object.assign({}, Status);
			exports$1.FileOrigin = Object.assign({}, FileOrigin);
			exports$1.FileStatus = Object.assign({}, ItemStatus);
			exports$1.OptionTypes = {};
			updateOptionTypes();
			exports$1.create = function create() {
				var app = createApp$1.apply(void 0, arguments);
				app.on("destroy", exports$1.destroy);
				state.apps.push(app);
				return createAppAPI(app);
			};
			exports$1.destroy = function destroy(hook) {
				var indexToRemove = state.apps.findIndex(function(app) {
					return app.isAttachedTo(hook);
				});
				if (indexToRemove >= 0) {
					state.apps.splice(indexToRemove, 1)[0].restoreElement();
					return true;
				}
				return false;
			};
			exports$1.parse = function parse(context) {
				return Array.from(context.querySelectorAll("." + name)).filter(function(newHook) {
					return !state.apps.find(function(app) {
						return app.isAttachedTo(newHook);
					});
				}).map(function(hook) {
					return exports$1.create(hook);
				});
			};
			exports$1.find = function find(hook) {
				var app = state.apps.find(function(app) {
					return app.isAttachedTo(hook);
				});
				if (!app) return null;
				return createAppAPI(app);
			};
			exports$1.registerPlugin = function registerPlugin() {
				for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) plugins[_key] = arguments[_key];
				plugins.forEach(createAppPlugin);
				updateOptionTypes();
			};
			exports$1.getOptions = function getOptions$1() {
				var opts = {};
				forin(getOptions(), function(key, value) {
					opts[key] = value[0];
				});
				return opts;
			};
			exports$1.setOptions = function setOptions$1(opts) {
				if (isObject(opts)) {
					state.apps.forEach(function(app) {
						app.setOptions(opts);
					});
					setOptions(opts);
				}
				return exports$1.getOptions();
			};
		}
		exports$1.supported = supported;
		Object.defineProperty(exports$1, "__esModule", { value: true });
	});
}));
//#endregion
export default require_filepond();

//# sourceMappingURL=filepond.js.map