| Current Path : /var/www/html/dev/reddsis-dev/node_modules/.vite/deps/ |
| Current File : /var/www/html/dev/reddsis-dev/node_modules/.vite/deps/filepond.js.map |
{"version":3,"file":"filepond.js","names":["exports"],"sources":["../../filepond/dist/filepond.js"],"sourcesContent":["/*!\n * FilePond 4.32.12\n * Licensed under MIT, https://opensource.org/licenses/MIT/\n * Please visit https://pqina.nl/filepond/ for details.\n */\n\n/* eslint-disable */\n\n(function(global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n ? factory(exports)\n : typeof define === 'function' && define.amd\n ? define(['exports'], factory)\n : ((global = global || self), factory((global.FilePond = {})));\n})(this, function(exports) {\n 'use strict';\n\n var isNode = function isNode(value) {\n return value instanceof HTMLElement;\n };\n\n var createStore = function createStore(initialState) {\n var queries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var actions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n // internal state\n var state = Object.assign({}, initialState);\n\n // contains all actions for next frame, is clear when actions are requested\n var actionQueue = [];\n var dispatchQueue = [];\n\n // returns a duplicate of the current state\n var getState = function getState() {\n return Object.assign({}, state);\n };\n\n // returns a duplicate of the actions array and clears the actions array\n var processActionQueue = function processActionQueue() {\n // create copy of actions queue\n var queue = [].concat(actionQueue);\n\n // clear actions queue (we don't want no double actions)\n actionQueue.length = 0;\n\n return queue;\n };\n\n // processes actions that might block the main UI thread\n var processDispatchQueue = function processDispatchQueue() {\n // create copy of actions queue\n var queue = [].concat(dispatchQueue);\n\n // clear actions queue (we don't want no double actions)\n dispatchQueue.length = 0;\n\n // now dispatch these actions\n queue.forEach(function(_ref) {\n var type = _ref.type,\n data = _ref.data;\n dispatch(type, data);\n });\n };\n\n // adds a new action, calls its handler and\n var dispatch = function dispatch(type, data, isBlocking) {\n // is blocking action (should never block if document is hidden)\n if (isBlocking && !document.hidden) {\n dispatchQueue.push({ type: type, data: data });\n return;\n }\n\n // if this action has a handler, handle the action\n if (actionHandlers[type]) {\n actionHandlers[type](data);\n }\n\n // now add action\n actionQueue.push({\n type: type,\n data: data,\n });\n };\n\n var query = function query(str) {\n var _queryHandles;\n for (\n var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1;\n _key < _len;\n _key++\n ) {\n args[_key - 1] = arguments[_key];\n }\n return queryHandles[str]\n ? (_queryHandles = queryHandles)[str].apply(_queryHandles, args)\n : null;\n };\n\n var api = {\n getState: getState,\n processActionQueue: processActionQueue,\n processDispatchQueue: processDispatchQueue,\n dispatch: dispatch,\n query: query,\n };\n\n var queryHandles = {};\n queries.forEach(function(query) {\n queryHandles = Object.assign({}, query(state), {}, queryHandles);\n });\n\n var actionHandlers = {};\n actions.forEach(function(action) {\n actionHandlers = Object.assign({}, action(dispatch, query, state), {}, actionHandlers);\n });\n\n return api;\n };\n\n var defineProperty = function defineProperty(obj, property, definition) {\n if (typeof definition === 'function') {\n obj[property] = definition;\n return;\n }\n Object.defineProperty(obj, property, Object.assign({}, definition));\n };\n\n var forin = function forin(obj, cb) {\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) {\n continue;\n }\n\n cb(key, obj[key]);\n }\n };\n\n var createObject = function createObject(definition) {\n var obj = {};\n forin(definition, function(property) {\n defineProperty(obj, property, definition[property]);\n });\n return obj;\n };\n\n var attr = function attr(node, name) {\n var value = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n if (value === null) {\n return node.getAttribute(name) || node.hasAttribute(name);\n }\n node.setAttribute(name, value);\n };\n\n var ns = 'http://www.w3.org/2000/svg';\n var svgElements = ['svg', 'path']; // only svg elements used\n\n var isSVGElement = function isSVGElement(tag) {\n return svgElements.includes(tag);\n };\n\n var createElement = function createElement(tag, className) {\n var attributes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n if (typeof className === 'object') {\n attributes = className;\n className = null;\n }\n var element = isSVGElement(tag)\n ? document.createElementNS(ns, tag)\n : document.createElement(tag);\n if (className) {\n if (isSVGElement(tag)) {\n attr(element, 'class', className);\n } else {\n element.className = className;\n }\n }\n forin(attributes, function(name, value) {\n attr(element, name, value);\n });\n return element;\n };\n\n var appendChild = function appendChild(parent) {\n return function(child, index) {\n if (typeof index !== 'undefined' && parent.children[index]) {\n parent.insertBefore(child, parent.children[index]);\n } else {\n parent.appendChild(child);\n }\n };\n };\n\n var appendChildView = function appendChildView(parent, childViews) {\n return function(view, index) {\n if (typeof index !== 'undefined') {\n childViews.splice(index, 0, view);\n } else {\n childViews.push(view);\n }\n\n return view;\n };\n };\n\n var removeChildView = function removeChildView(parent, childViews) {\n return function(view) {\n // remove from child views\n childViews.splice(childViews.indexOf(view), 1);\n\n // remove the element\n if (view.element.parentNode) {\n parent.removeChild(view.element);\n }\n\n return view;\n };\n };\n\n var IS_BROWSER = (function() {\n return typeof window !== 'undefined' && typeof window.document !== 'undefined';\n })();\n var isBrowser = function isBrowser() {\n return IS_BROWSER;\n };\n\n var testElement = isBrowser() ? createElement('svg') : {};\n var getChildCount =\n 'children' in testElement\n ? function(el) {\n return el.children.length;\n }\n : function(el) {\n return el.childNodes.length;\n };\n\n var getViewRect = function getViewRect(elementRect, childViews, offset, scale) {\n var left = offset[0] || elementRect.left;\n var top = offset[1] || elementRect.top;\n var right = left + elementRect.width;\n var bottom = top + elementRect.height * (scale[1] || 1);\n\n var rect = {\n // the rectangle of the element itself\n element: Object.assign({}, elementRect),\n\n // the rectangle of the element expanded to contain its children, does not include any margins\n inner: {\n left: elementRect.left,\n top: elementRect.top,\n right: elementRect.right,\n bottom: elementRect.bottom,\n },\n\n // the rectangle of the element expanded to contain its children including own margin and child margins\n // margins will be added after we've recalculated the size\n outer: {\n left: left,\n top: top,\n right: right,\n bottom: bottom,\n },\n };\n\n // expand rect to fit all child rectangles\n childViews\n .filter(function(childView) {\n return !childView.isRectIgnored();\n })\n .map(function(childView) {\n return childView.rect;\n })\n .forEach(function(childViewRect) {\n expandRect(rect.inner, Object.assign({}, childViewRect.inner));\n expandRect(rect.outer, Object.assign({}, childViewRect.outer));\n });\n\n // calculate inner width and height\n calculateRectSize(rect.inner);\n\n // append additional margin (top and left margins are included in top and left automatically)\n rect.outer.bottom += rect.element.marginBottom;\n rect.outer.right += rect.element.marginRight;\n\n // calculate outer width and height\n calculateRectSize(rect.outer);\n\n return rect;\n };\n\n var expandRect = function expandRect(parent, child) {\n // adjust for parent offset\n child.top += parent.top;\n child.right += parent.left;\n child.bottom += parent.top;\n child.left += parent.left;\n\n if (child.bottom > parent.bottom) {\n parent.bottom = child.bottom;\n }\n\n if (child.right > parent.right) {\n parent.right = child.right;\n }\n };\n\n var calculateRectSize = function calculateRectSize(rect) {\n rect.width = rect.right - rect.left;\n rect.height = rect.bottom - rect.top;\n };\n\n var isNumber = function isNumber(value) {\n return typeof value === 'number';\n };\n\n /**\n * Determines if position is at destination\n * @param position\n * @param destination\n * @param velocity\n * @param errorMargin\n * @returns {boolean}\n */\n var thereYet = function thereYet(position, destination, velocity) {\n var errorMargin = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.001;\n return Math.abs(position - destination) < errorMargin && Math.abs(velocity) < errorMargin;\n };\n\n /**\n * Spring animation\n */\n var spring =\n // default options\n function spring() // method definition\n {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$stiffness = _ref.stiffness,\n stiffness = _ref$stiffness === void 0 ? 0.5 : _ref$stiffness,\n _ref$damping = _ref.damping,\n damping = _ref$damping === void 0 ? 0.75 : _ref$damping,\n _ref$mass = _ref.mass,\n mass = _ref$mass === void 0 ? 10 : _ref$mass;\n var target = null;\n var position = null;\n var velocity = 0;\n var resting = false;\n\n // updates spring state\n var interpolate = function interpolate(ts, skipToEndState) {\n // in rest, don't animate\n if (resting) return;\n\n // need at least a target or position to do springy things\n if (!(isNumber(target) && isNumber(position))) {\n resting = true;\n velocity = 0;\n return;\n }\n\n // calculate spring force\n var f = -(position - target) * stiffness;\n\n // update velocity by adding force based on mass\n velocity += f / mass;\n\n // update position by adding velocity\n position += velocity;\n\n // slow down based on amount of damping\n velocity *= damping;\n\n // we've arrived if we're near target and our velocity is near zero\n if (thereYet(position, target, velocity) || skipToEndState) {\n position = target;\n velocity = 0;\n resting = true;\n\n // we done\n api.onupdate(position);\n api.oncomplete(position);\n } else {\n // progress update\n api.onupdate(position);\n }\n };\n\n /**\n * Set new target value\n * @param value\n */\n var setTarget = function setTarget(value) {\n // if currently has no position, set target and position to this value\n if (isNumber(value) && !isNumber(position)) {\n position = value;\n }\n\n // next target value will not be animated to\n if (target === null) {\n target = value;\n position = value;\n }\n\n // let start moving to target\n target = value;\n\n // already at target\n if (position === target || typeof target === 'undefined') {\n // now resting as target is current position, stop moving\n resting = true;\n velocity = 0;\n\n // done!\n api.onupdate(position);\n api.oncomplete(position);\n\n return;\n }\n\n resting = false;\n };\n\n // need 'api' to call onupdate callback\n var api = createObject({\n interpolate: interpolate,\n target: {\n set: setTarget,\n get: function get() {\n return target;\n },\n },\n\n resting: {\n get: function get() {\n return resting;\n },\n },\n\n onupdate: function onupdate(value) {},\n oncomplete: function oncomplete(value) {},\n });\n\n return api;\n };\n\n var easeLinear = function easeLinear(t) {\n return t;\n };\n var easeInOutQuad = function easeInOutQuad(t) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n };\n\n var tween =\n // default values\n function tween() // method definition\n {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$duration = _ref.duration,\n duration = _ref$duration === void 0 ? 500 : _ref$duration,\n _ref$easing = _ref.easing,\n easing = _ref$easing === void 0 ? easeInOutQuad : _ref$easing,\n _ref$delay = _ref.delay,\n delay = _ref$delay === void 0 ? 0 : _ref$delay;\n var start = null;\n var t;\n var p;\n var resting = true;\n var reverse = false;\n var target = null;\n\n var interpolate = function interpolate(ts, skipToEndState) {\n if (resting || target === null) return;\n\n if (start === null) {\n start = ts;\n }\n\n if (ts - start < delay) return;\n\n t = ts - start - delay;\n\n if (t >= duration || skipToEndState) {\n t = 1;\n p = reverse ? 0 : 1;\n api.onupdate(p * target);\n api.oncomplete(p * target);\n resting = true;\n } else {\n p = t / duration;\n api.onupdate((t >= 0 ? easing(reverse ? 1 - p : p) : 0) * target);\n }\n };\n\n // need 'api' to call onupdate callback\n var api = createObject({\n interpolate: interpolate,\n target: {\n get: function get() {\n return reverse ? 0 : target;\n },\n set: function set(value) {\n // is initial value\n if (target === null) {\n target = value;\n api.onupdate(value);\n api.oncomplete(value);\n return;\n }\n\n // want to tween to a smaller value and have a current value\n if (value < target) {\n target = 1;\n reverse = true;\n } else {\n // not tweening to a smaller value\n reverse = false;\n target = value;\n }\n\n // let's go!\n resting = false;\n start = null;\n },\n },\n\n resting: {\n get: function get() {\n return resting;\n },\n },\n\n onupdate: function onupdate(value) {},\n oncomplete: function oncomplete(value) {},\n });\n\n return api;\n };\n\n var animator = {\n spring: spring,\n tween: tween,\n };\n\n /*\n { type: 'spring', stiffness: .5, damping: .75, mass: 10 };\n { translation: { type: 'spring', ... }, ... }\n { translation: { x: { type: 'spring', ... } } }\n */\n var createAnimator = function createAnimator(definition, category, property) {\n // default is single definition\n // we check if transform is set, if so, we check if property is set\n var def =\n definition[category] && typeof definition[category][property] === 'object'\n ? definition[category][property]\n : definition[category] || definition;\n\n var type = typeof def === 'string' ? def : def.type;\n var props = typeof def === 'object' ? Object.assign({}, def) : {};\n\n return animator[type] ? animator[type](props) : null;\n };\n\n var addGetSet = function addGetSet(keys, obj, props) {\n var overwrite = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n obj = Array.isArray(obj) ? obj : [obj];\n obj.forEach(function(o) {\n keys.forEach(function(key) {\n var name = key;\n var getter = function getter() {\n return props[key];\n };\n var setter = function setter(value) {\n return (props[key] = value);\n };\n\n if (typeof key === 'object') {\n name = key.key;\n getter = key.getter || getter;\n setter = key.setter || setter;\n }\n\n if (o[name] && !overwrite) {\n return;\n }\n\n o[name] = {\n get: getter,\n set: setter,\n };\n });\n });\n };\n\n // add to state,\n // add getters and setters to internal and external api (if not set)\n // setup animators\n\n var animations = function animations(_ref) {\n var mixinConfig = _ref.mixinConfig,\n viewProps = _ref.viewProps,\n viewInternalAPI = _ref.viewInternalAPI,\n viewExternalAPI = _ref.viewExternalAPI;\n // initial properties\n var initialProps = Object.assign({}, viewProps);\n\n // list of all active animations\n var animations = [];\n\n // setup animators\n forin(mixinConfig, function(property, animation) {\n var animator = createAnimator(animation);\n if (!animator) {\n return;\n }\n\n // when the animator updates, update the view state value\n animator.onupdate = function(value) {\n viewProps[property] = value;\n };\n\n // set animator target\n animator.target = initialProps[property];\n\n // when value is set, set the animator target value\n var prop = {\n key: property,\n setter: function setter(value) {\n // if already at target, we done!\n if (animator.target === value) {\n return;\n }\n\n animator.target = value;\n },\n getter: function getter() {\n return viewProps[property];\n },\n };\n\n // add getters and setters\n addGetSet([prop], [viewInternalAPI, viewExternalAPI], viewProps, true);\n\n // add it to the list for easy updating from the _write method\n animations.push(animator);\n });\n\n // expose internal write api\n return {\n write: function write(ts) {\n var skipToEndState = document.hidden;\n var resting = true;\n animations.forEach(function(animation) {\n if (!animation.resting) resting = false;\n animation.interpolate(ts, skipToEndState);\n });\n return resting;\n },\n destroy: function destroy() {},\n };\n };\n\n var addEvent = function addEvent(element) {\n return function(type, fn) {\n element.addEventListener(type, fn);\n };\n };\n\n var removeEvent = function removeEvent(element) {\n return function(type, fn) {\n element.removeEventListener(type, fn);\n };\n };\n\n // mixin\n var listeners = function listeners(_ref) {\n var mixinConfig = _ref.mixinConfig,\n viewProps = _ref.viewProps,\n viewInternalAPI = _ref.viewInternalAPI,\n viewExternalAPI = _ref.viewExternalAPI,\n viewState = _ref.viewState,\n view = _ref.view;\n var events = [];\n\n var add = addEvent(view.element);\n var remove = removeEvent(view.element);\n\n viewExternalAPI.on = function(type, fn) {\n events.push({\n type: type,\n fn: fn,\n });\n\n add(type, fn);\n };\n\n viewExternalAPI.off = function(type, fn) {\n events.splice(\n events.findIndex(function(event) {\n return event.type === type && event.fn === fn;\n }),\n 1\n );\n\n remove(type, fn);\n };\n\n return {\n write: function write() {\n // not busy\n return true;\n },\n destroy: function destroy() {\n events.forEach(function(event) {\n remove(event.type, event.fn);\n });\n },\n };\n };\n\n // add to external api and link to props\n\n var apis = function apis(_ref) {\n var mixinConfig = _ref.mixinConfig,\n viewProps = _ref.viewProps,\n viewExternalAPI = _ref.viewExternalAPI;\n addGetSet(mixinConfig, viewExternalAPI, viewProps);\n };\n\n var isDefined = function isDefined(value) {\n return value != null;\n };\n\n // add to state,\n // add getters and setters to internal and external api (if not set)\n // set initial state based on props in viewProps\n // apply as transforms each frame\n\n var defaults = {\n opacity: 1,\n scaleX: 1,\n scaleY: 1,\n translateX: 0,\n translateY: 0,\n rotateX: 0,\n rotateY: 0,\n rotateZ: 0,\n originX: 0,\n originY: 0,\n };\n\n var styles = function styles(_ref) {\n var mixinConfig = _ref.mixinConfig,\n viewProps = _ref.viewProps,\n viewInternalAPI = _ref.viewInternalAPI,\n viewExternalAPI = _ref.viewExternalAPI,\n view = _ref.view;\n // initial props\n var initialProps = Object.assign({}, viewProps);\n\n // current props\n var currentProps = {};\n\n // we will add those properties to the external API and link them to the viewState\n addGetSet(mixinConfig, [viewInternalAPI, viewExternalAPI], viewProps);\n\n // override rect on internal and external rect getter so it takes in account transforms\n var getOffset = function getOffset() {\n return [viewProps['translateX'] || 0, viewProps['translateY'] || 0];\n };\n\n var getScale = function getScale() {\n return [viewProps['scaleX'] || 0, viewProps['scaleY'] || 0];\n };\n var getRect = function getRect() {\n return view.rect\n ? getViewRect(view.rect, view.childViews, getOffset(), getScale())\n : null;\n };\n viewInternalAPI.rect = { get: getRect };\n viewExternalAPI.rect = { get: getRect };\n\n // apply view props\n mixinConfig.forEach(function(key) {\n viewProps[key] =\n typeof initialProps[key] === 'undefined' ? defaults[key] : initialProps[key];\n });\n\n // expose api\n return {\n write: function write() {\n // see if props have changed\n if (!propsHaveChanged(currentProps, viewProps)) {\n return;\n }\n\n // moves element to correct position on screen\n applyStyles(view.element, viewProps);\n\n // store new transforms\n Object.assign(currentProps, Object.assign({}, viewProps));\n\n // no longer busy\n return true;\n },\n destroy: function destroy() {},\n };\n };\n\n var propsHaveChanged = function propsHaveChanged(currentProps, newProps) {\n // different amount of keys\n if (Object.keys(currentProps).length !== Object.keys(newProps).length) {\n return true;\n }\n\n // lets analyze the individual props\n for (var prop in newProps) {\n if (newProps[prop] !== currentProps[prop]) {\n return true;\n }\n }\n\n return false;\n };\n\n var applyStyles = function applyStyles(element, _ref2) {\n var opacity = _ref2.opacity,\n perspective = _ref2.perspective,\n translateX = _ref2.translateX,\n translateY = _ref2.translateY,\n scaleX = _ref2.scaleX,\n scaleY = _ref2.scaleY,\n rotateX = _ref2.rotateX,\n rotateY = _ref2.rotateY,\n rotateZ = _ref2.rotateZ,\n originX = _ref2.originX,\n originY = _ref2.originY,\n width = _ref2.width,\n height = _ref2.height;\n\n var transforms = '';\n var styles = '';\n\n // handle transform origin\n if (isDefined(originX) || isDefined(originY)) {\n styles += 'transform-origin: ' + (originX || 0) + 'px ' + (originY || 0) + 'px;';\n }\n\n // transform order is relevant\n // 0. perspective\n if (isDefined(perspective)) {\n transforms += 'perspective(' + perspective + 'px) ';\n }\n\n // 1. translate\n if (isDefined(translateX) || isDefined(translateY)) {\n transforms +=\n 'translate3d(' + (translateX || 0) + 'px, ' + (translateY || 0) + 'px, 0) ';\n }\n\n // 2. scale\n if (isDefined(scaleX) || isDefined(scaleY)) {\n transforms +=\n 'scale3d(' +\n (isDefined(scaleX) ? scaleX : 1) +\n ', ' +\n (isDefined(scaleY) ? scaleY : 1) +\n ', 1) ';\n }\n\n // 3. rotate\n if (isDefined(rotateZ)) {\n transforms += 'rotateZ(' + rotateZ + 'rad) ';\n }\n\n if (isDefined(rotateX)) {\n transforms += 'rotateX(' + rotateX + 'rad) ';\n }\n\n if (isDefined(rotateY)) {\n transforms += 'rotateY(' + rotateY + 'rad) ';\n }\n\n // add transforms\n if (transforms.length) {\n styles += 'transform:' + transforms + ';';\n }\n\n // add opacity\n if (isDefined(opacity)) {\n styles += 'opacity:' + opacity + ';';\n\n // if we reach zero, we make the element inaccessible\n if (opacity === 0) {\n styles += 'visibility:hidden;';\n }\n\n // if we're below 100% opacity this element can't be clicked\n if (opacity < 1) {\n styles += 'pointer-events:none;';\n }\n }\n\n // add height\n if (isDefined(height)) {\n styles += 'height:' + height + 'px;';\n }\n\n // add width\n if (isDefined(width)) {\n styles += 'width:' + width + 'px;';\n }\n\n // apply styles\n var elementCurrentStyle = element.elementCurrentStyle || '';\n\n // if new styles does not match current styles, lets update!\n if (styles.length !== elementCurrentStyle.length || styles !== elementCurrentStyle) {\n element.style.cssText = styles;\n // store current styles so we can compare them to new styles later on\n // _not_ getting the style value is faster\n element.elementCurrentStyle = styles;\n }\n };\n\n var Mixins = {\n styles: styles,\n listeners: listeners,\n animations: animations,\n apis: apis,\n };\n\n var updateRect = function updateRect() {\n var rect = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (!element.layoutCalculated) {\n rect.paddingTop = parseInt(style.paddingTop, 10) || 0;\n rect.marginTop = parseInt(style.marginTop, 10) || 0;\n rect.marginRight = parseInt(style.marginRight, 10) || 0;\n rect.marginBottom = parseInt(style.marginBottom, 10) || 0;\n rect.marginLeft = parseInt(style.marginLeft, 10) || 0;\n element.layoutCalculated = true;\n }\n\n rect.left = element.offsetLeft || 0;\n rect.top = element.offsetTop || 0;\n rect.width = element.offsetWidth || 0;\n rect.height = element.offsetHeight || 0;\n\n rect.right = rect.left + rect.width;\n rect.bottom = rect.top + rect.height;\n\n rect.scrollTop = element.scrollTop;\n\n rect.hidden = element.offsetParent === null;\n\n return rect;\n };\n\n var createView =\n // default view definition\n function createView() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$tag = _ref.tag,\n tag = _ref$tag === void 0 ? 'div' : _ref$tag,\n _ref$name = _ref.name,\n name = _ref$name === void 0 ? null : _ref$name,\n _ref$attributes = _ref.attributes,\n attributes = _ref$attributes === void 0 ? {} : _ref$attributes,\n _ref$read = _ref.read,\n read = _ref$read === void 0 ? function() {} : _ref$read,\n _ref$write = _ref.write,\n write = _ref$write === void 0 ? function() {} : _ref$write,\n _ref$create = _ref.create,\n create = _ref$create === void 0 ? function() {} : _ref$create,\n _ref$destroy = _ref.destroy,\n destroy = _ref$destroy === void 0 ? function() {} : _ref$destroy,\n _ref$filterFrameActio = _ref.filterFrameActionsForChild,\n filterFrameActionsForChild =\n _ref$filterFrameActio === void 0\n ? function(child, actions) {\n return actions;\n }\n : _ref$filterFrameActio,\n _ref$didCreateView = _ref.didCreateView,\n didCreateView = _ref$didCreateView === void 0 ? function() {} : _ref$didCreateView,\n _ref$didWriteView = _ref.didWriteView,\n didWriteView = _ref$didWriteView === void 0 ? function() {} : _ref$didWriteView,\n _ref$ignoreRect = _ref.ignoreRect,\n ignoreRect = _ref$ignoreRect === void 0 ? false : _ref$ignoreRect,\n _ref$ignoreRectUpdate = _ref.ignoreRectUpdate,\n ignoreRectUpdate = _ref$ignoreRectUpdate === void 0 ? false : _ref$ignoreRectUpdate,\n _ref$mixins = _ref.mixins,\n mixins = _ref$mixins === void 0 ? [] : _ref$mixins;\n return function(\n // each view requires reference to store\n store\n ) {\n var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n // root element should not be changed\n var element = createElement(tag, 'filepond--' + name, attributes);\n\n // style reference should also not be changed\n var style = window.getComputedStyle(element, null);\n\n // element rectangle\n var rect = updateRect();\n var frameRect = null;\n\n // rest state\n var isResting = false;\n\n // pretty self explanatory\n var childViews = [];\n\n // loaded mixins\n var activeMixins = [];\n\n // references to created children\n var ref = {};\n\n // state used for each instance\n var state = {};\n\n // list of writers that will be called to update this view\n var writers = [\n write, // default writer\n ];\n\n var readers = [\n read, // default reader\n ];\n\n var destroyers = [\n destroy, // default destroy\n ];\n\n // core view methods\n var getElement = function getElement() {\n return element;\n };\n var getChildViews = function getChildViews() {\n return childViews.concat();\n };\n var getReference = function getReference() {\n return ref;\n };\n var createChildView = function createChildView(store) {\n return function(view, props) {\n return view(store, props);\n };\n };\n var getRect = function getRect() {\n if (frameRect) {\n return frameRect;\n }\n frameRect = getViewRect(rect, childViews, [0, 0], [1, 1]);\n return frameRect;\n };\n var getStyle = function getStyle() {\n return style;\n };\n\n /**\n * Read data from DOM\n * @private\n */\n var _read = function _read() {\n frameRect = null;\n\n // read child views\n childViews.forEach(function(child) {\n return child._read();\n });\n\n var shouldUpdate = !(ignoreRectUpdate && rect.width && rect.height);\n if (shouldUpdate) {\n updateRect(rect, element, style);\n }\n\n // readers\n var api = { root: internalAPI, props: props, rect: rect };\n readers.forEach(function(reader) {\n return reader(api);\n });\n };\n\n /**\n * Write data to DOM\n * @private\n */\n var _write = function _write(ts, frameActions, shouldOptimize) {\n // if no actions, we assume that the view is resting\n var resting = frameActions.length === 0;\n\n // writers\n writers.forEach(function(writer) {\n var writerResting = writer({\n props: props,\n root: internalAPI,\n actions: frameActions,\n timestamp: ts,\n shouldOptimize: shouldOptimize,\n });\n\n if (writerResting === false) {\n resting = false;\n }\n });\n\n // run mixins\n activeMixins.forEach(function(mixin) {\n // if one of the mixins is still busy after write operation, we are not resting\n var mixinResting = mixin.write(ts);\n if (mixinResting === false) {\n resting = false;\n }\n });\n\n // updates child views that are currently attached to the DOM\n childViews\n .filter(function(child) {\n return !!child.element.parentNode;\n })\n .forEach(function(child) {\n // if a child view is not resting, we are not resting\n var childResting = child._write(\n ts,\n filterFrameActionsForChild(child, frameActions),\n shouldOptimize\n );\n\n if (!childResting) {\n resting = false;\n }\n });\n\n // append new elements to DOM and update those\n childViews\n //.filter(child => !child.element.parentNode)\n .forEach(function(child, index) {\n // skip\n if (child.element.parentNode) {\n return;\n }\n\n // append to DOM\n internalAPI.appendChild(child.element, index);\n\n // call read (need to know the size of these elements)\n child._read();\n\n // re-call write\n child._write(\n ts,\n filterFrameActionsForChild(child, frameActions),\n shouldOptimize\n );\n\n // we just added somthing to the dom, no rest\n resting = false;\n });\n\n // update resting state\n isResting = resting;\n\n didWriteView({\n props: props,\n root: internalAPI,\n actions: frameActions,\n timestamp: ts,\n });\n\n // let parent know if we are resting\n return resting;\n };\n\n var _destroy = function _destroy() {\n activeMixins.forEach(function(mixin) {\n return mixin.destroy();\n });\n destroyers.forEach(function(destroyer) {\n destroyer({ root: internalAPI, props: props });\n });\n childViews.forEach(function(child) {\n return child._destroy();\n });\n };\n\n // sharedAPI\n var sharedAPIDefinition = {\n element: {\n get: getElement,\n },\n\n style: {\n get: getStyle,\n },\n\n childViews: {\n get: getChildViews,\n },\n };\n\n // private API definition\n var internalAPIDefinition = Object.assign({}, sharedAPIDefinition, {\n rect: {\n get: getRect,\n },\n\n // access to custom children references\n ref: {\n get: getReference,\n },\n\n // dom modifiers\n is: function is(needle) {\n return name === needle;\n },\n appendChild: appendChild(element),\n createChildView: createChildView(store),\n linkView: function linkView(view) {\n childViews.push(view);\n return view;\n },\n unlinkView: function unlinkView(view) {\n childViews.splice(childViews.indexOf(view), 1);\n },\n appendChildView: appendChildView(element, childViews),\n removeChildView: removeChildView(element, childViews),\n registerWriter: function registerWriter(writer) {\n return writers.push(writer);\n },\n registerReader: function registerReader(reader) {\n return readers.push(reader);\n },\n registerDestroyer: function registerDestroyer(destroyer) {\n return destroyers.push(destroyer);\n },\n invalidateLayout: function invalidateLayout() {\n return (element.layoutCalculated = false);\n },\n\n // access to data store\n dispatch: store.dispatch,\n query: store.query,\n });\n\n // public view API methods\n var externalAPIDefinition = {\n element: {\n get: getElement,\n },\n\n childViews: {\n get: getChildViews,\n },\n\n rect: {\n get: getRect,\n },\n\n resting: {\n get: function get() {\n return isResting;\n },\n },\n\n isRectIgnored: function isRectIgnored() {\n return ignoreRect;\n },\n _read: _read,\n _write: _write,\n _destroy: _destroy,\n };\n\n // mixin API methods\n var mixinAPIDefinition = Object.assign({}, sharedAPIDefinition, {\n rect: {\n get: function get() {\n return rect;\n },\n },\n });\n\n // add mixin functionality\n Object.keys(mixins)\n .sort(function(a, b) {\n // move styles to the back of the mixin list (so adjustments of other mixins are applied to the props correctly)\n if (a === 'styles') {\n return 1;\n } else if (b === 'styles') {\n return -1;\n }\n return 0;\n })\n .forEach(function(key) {\n var mixinAPI = Mixins[key]({\n mixinConfig: mixins[key],\n viewProps: props,\n viewState: state,\n viewInternalAPI: internalAPIDefinition,\n viewExternalAPI: externalAPIDefinition,\n view: createObject(mixinAPIDefinition),\n });\n\n if (mixinAPI) {\n activeMixins.push(mixinAPI);\n }\n });\n\n // construct private api\n var internalAPI = createObject(internalAPIDefinition);\n\n // create the view\n create({\n root: internalAPI,\n props: props,\n });\n\n // append created child views to root node\n var childCount = getChildCount(element); // need to know the current child count so appending happens in correct order\n childViews.forEach(function(child, index) {\n internalAPI.appendChild(child.element, childCount + index);\n });\n\n // call did create\n didCreateView(internalAPI);\n\n // expose public api\n return createObject(externalAPIDefinition);\n };\n };\n\n var createPainter = function createPainter(read, write) {\n var fps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 60;\n\n var name = '__framePainter';\n\n // set global painter\n if (window[name]) {\n window[name].readers.push(read);\n window[name].writers.push(write);\n return;\n }\n\n window[name] = {\n readers: [read],\n writers: [write],\n };\n\n var painter = window[name];\n\n var interval = 1000 / fps;\n var last = null;\n var id = null;\n var requestTick = null;\n var cancelTick = null;\n\n var setTimerType = function setTimerType() {\n if (document.hidden) {\n requestTick = function requestTick() {\n return window.setTimeout(function() {\n return tick(performance.now());\n }, interval);\n };\n cancelTick = function cancelTick() {\n return window.clearTimeout(id);\n };\n } else {\n requestTick = function requestTick() {\n return window.requestAnimationFrame(tick);\n };\n cancelTick = function cancelTick() {\n return window.cancelAnimationFrame(id);\n };\n }\n };\n\n document.addEventListener('visibilitychange', function() {\n if (cancelTick) cancelTick();\n setTimerType();\n tick(performance.now());\n });\n\n var tick = function tick(ts) {\n // queue next tick\n id = requestTick(tick);\n\n // limit fps\n if (!last) {\n last = ts;\n }\n\n var delta = ts - last;\n\n if (delta <= interval) {\n // skip frame\n return;\n }\n\n // align next frame\n last = ts - (delta % interval);\n\n // update view\n painter.readers.forEach(function(read) {\n return read();\n });\n painter.writers.forEach(function(write) {\n return write(ts);\n });\n };\n\n setTimerType();\n tick(performance.now());\n\n return {\n pause: function pause() {\n cancelTick(id);\n },\n };\n };\n\n var createRoute = function createRoute(routes, fn) {\n return function(_ref) {\n var root = _ref.root,\n props = _ref.props,\n _ref$actions = _ref.actions,\n actions = _ref$actions === void 0 ? [] : _ref$actions,\n timestamp = _ref.timestamp,\n shouldOptimize = _ref.shouldOptimize;\n actions\n .filter(function(action) {\n return routes[action.type];\n })\n .forEach(function(action) {\n return routes[action.type]({\n root: root,\n props: props,\n action: action.data,\n timestamp: timestamp,\n shouldOptimize: shouldOptimize,\n });\n });\n\n if (fn) {\n fn({\n root: root,\n props: props,\n actions: actions,\n timestamp: timestamp,\n shouldOptimize: shouldOptimize,\n });\n }\n };\n };\n\n var insertBefore = function insertBefore(newNode, referenceNode) {\n return referenceNode.parentNode.insertBefore(newNode, referenceNode);\n };\n\n var insertAfter = function insertAfter(newNode, referenceNode) {\n return referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n };\n\n var isArray = function isArray(value) {\n return Array.isArray(value);\n };\n\n var isEmpty = function isEmpty(value) {\n return value == null;\n };\n\n var trim = function trim(str) {\n return str.trim();\n };\n\n var toString = function toString(value) {\n return '' + value;\n };\n\n var toArray = function toArray(value) {\n var splitter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ',';\n if (isEmpty(value)) {\n return [];\n }\n if (isArray(value)) {\n return value;\n }\n return toString(value)\n .split(splitter)\n .map(trim)\n .filter(function(str) {\n return str.length;\n });\n };\n\n var isBoolean = function isBoolean(value) {\n return typeof value === 'boolean';\n };\n\n var toBoolean = function toBoolean(value) {\n return isBoolean(value) ? value : value === 'true';\n };\n\n var isString = function isString(value) {\n return typeof value === 'string';\n };\n\n var toNumber = function toNumber(value) {\n return isNumber(value)\n ? value\n : isString(value)\n ? toString(value).replace(/[a-z]+/gi, '')\n : 0;\n };\n\n var toInt = function toInt(value) {\n return parseInt(toNumber(value), 10);\n };\n\n var toFloat = function toFloat(value) {\n return parseFloat(toNumber(value));\n };\n\n var isInt = function isInt(value) {\n return isNumber(value) && isFinite(value) && Math.floor(value) === value;\n };\n\n var toBytes = function toBytes(value) {\n var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n // is in bytes\n if (isInt(value)) {\n return value;\n }\n\n // is natural file size\n var naturalFileSize = toString(value).trim();\n\n // if is value in megabytes\n if (/MB$/i.test(naturalFileSize)) {\n naturalFileSize = naturalFileSize.replace(/MB$i/, '').trim();\n return toInt(naturalFileSize) * base * base;\n }\n\n // if is value in kilobytes\n if (/KB/i.test(naturalFileSize)) {\n naturalFileSize = naturalFileSize.replace(/KB$i/, '').trim();\n return toInt(naturalFileSize) * base;\n }\n\n return toInt(naturalFileSize);\n };\n\n var isFunction = function isFunction(value) {\n return typeof value === 'function';\n };\n\n var toFunctionReference = function toFunctionReference(string) {\n var ref = self;\n var levels = string.split('.');\n var level = null;\n while ((level = levels.shift())) {\n ref = ref[level];\n if (!ref) {\n return null;\n }\n }\n return ref;\n };\n\n var methods = {\n process: 'POST',\n patch: 'PATCH',\n revert: 'DELETE',\n fetch: 'GET',\n restore: 'GET',\n load: 'GET',\n };\n\n var createServerAPI = function createServerAPI(outline) {\n var api = {};\n\n api.url = isString(outline) ? outline : outline.url || '';\n api.timeout = outline.timeout ? parseInt(outline.timeout, 10) : 0;\n api.headers = outline.headers ? outline.headers : {};\n\n forin(methods, function(key) {\n api[key] = createAction(key, outline[key], methods[key], api.timeout, api.headers);\n });\n\n // remove process if no url or process on outline\n api.process = outline.process || isString(outline) || outline.url ? api.process : null;\n\n // special treatment for remove\n api.remove = outline.remove || null;\n\n // remove generic headers from api object\n delete api.headers;\n\n return api;\n };\n\n var createAction = function createAction(name, outline, method, timeout, headers) {\n // is explicitely set to null so disable\n if (outline === null) {\n return null;\n }\n\n // if is custom function, done! Dev handles everything.\n if (typeof outline === 'function') {\n return outline;\n }\n\n // build action object\n var action = {\n url: method === 'GET' || method === 'PATCH' ? '?' + name + '=' : '',\n method: method,\n headers: headers,\n withCredentials: false,\n timeout: timeout,\n onload: null,\n ondata: null,\n onerror: null,\n };\n\n // is a single url\n if (isString(outline)) {\n action.url = outline;\n return action;\n }\n\n // overwrite\n Object.assign(action, outline);\n\n // see if should reformat headers;\n if (isString(action.headers)) {\n var parts = action.headers.split(/:(.+)/);\n action.headers = {\n header: parts[0],\n value: parts[1],\n };\n }\n\n // if is bool withCredentials\n action.withCredentials = toBoolean(action.withCredentials);\n\n return action;\n };\n\n var toServerAPI = function toServerAPI(value) {\n return createServerAPI(value);\n };\n\n var isNull = function isNull(value) {\n return value === null;\n };\n\n var isObject = function isObject(value) {\n return typeof value === 'object' && value !== null;\n };\n\n var isAPI = function isAPI(value) {\n return (\n isObject(value) &&\n isString(value.url) &&\n isObject(value.process) &&\n isObject(value.revert) &&\n isObject(value.restore) &&\n isObject(value.fetch)\n );\n };\n\n var getType = function getType(value) {\n if (isArray(value)) {\n return 'array';\n }\n\n if (isNull(value)) {\n return 'null';\n }\n\n if (isInt(value)) {\n return 'int';\n }\n\n if (/^[0-9]+ ?(?:GB|MB|KB)$/gi.test(value)) {\n return 'bytes';\n }\n\n if (isAPI(value)) {\n return 'api';\n }\n\n return typeof value;\n };\n\n var replaceSingleQuotes = function replaceSingleQuotes(str) {\n return str\n .replace(/{\\s*'/g, '{\"')\n .replace(/'\\s*}/g, '\"}')\n .replace(/'\\s*:/g, '\":')\n .replace(/:\\s*'/g, ':\"')\n .replace(/,\\s*'/g, ',\"')\n .replace(/'\\s*,/g, '\",');\n };\n\n var conversionTable = {\n array: toArray,\n boolean: toBoolean,\n int: function int(value) {\n return getType(value) === 'bytes' ? toBytes(value) : toInt(value);\n },\n number: toFloat,\n float: toFloat,\n bytes: toBytes,\n string: function string(value) {\n return isFunction(value) ? value : toString(value);\n },\n function: function _function(value) {\n return toFunctionReference(value);\n },\n serverapi: toServerAPI,\n object: function object(value) {\n try {\n return JSON.parse(replaceSingleQuotes(value));\n } catch (e) {\n return null;\n }\n },\n };\n\n var convertTo = function convertTo(value, type) {\n return conversionTable[type](value);\n };\n\n var getValueByType = function getValueByType(newValue, defaultValue, valueType) {\n // can always assign default value\n if (newValue === defaultValue) {\n return newValue;\n }\n\n // get the type of the new value\n var newValueType = getType(newValue);\n\n // is valid type?\n if (newValueType !== valueType) {\n // is string input, let's attempt to convert\n var convertedValue = convertTo(newValue, valueType);\n\n // what is the type now\n newValueType = getType(convertedValue);\n\n // no valid conversions found\n if (convertedValue === null) {\n throw 'Trying to assign value with incorrect type to \"' +\n option +\n '\", allowed type: \"' +\n valueType +\n '\"';\n } else {\n newValue = convertedValue;\n }\n }\n\n // assign new value\n return newValue;\n };\n\n var createOption = function createOption(defaultValue, valueType) {\n var currentValue = defaultValue;\n return {\n enumerable: true,\n get: function get() {\n return currentValue;\n },\n set: function set(newValue) {\n currentValue = getValueByType(newValue, defaultValue, valueType);\n },\n };\n };\n\n var createOptions = function createOptions(options) {\n var obj = {};\n forin(options, function(prop) {\n var optionDefinition = options[prop];\n obj[prop] = createOption(optionDefinition[0], optionDefinition[1]);\n });\n return createObject(obj);\n };\n\n var createInitialState = function createInitialState(options) {\n return {\n // model\n items: [],\n\n // timeout used for calling update items\n listUpdateTimeout: null,\n\n // timeout used for stacking metadata updates\n itemUpdateTimeout: null,\n\n // queue of items waiting to be processed\n processingQueue: [],\n\n // options\n options: createOptions(options),\n };\n };\n\n var fromCamels = function fromCamels(string) {\n var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '-';\n return string\n .split(/(?=[A-Z])/)\n .map(function(part) {\n return part.toLowerCase();\n })\n .join(separator);\n };\n\n var createOptionAPI = function createOptionAPI(store, options) {\n var obj = {};\n forin(options, function(key) {\n obj[key] = {\n get: function get() {\n return store.getState().options[key];\n },\n set: function set(value) {\n store.dispatch('SET_' + fromCamels(key, '_').toUpperCase(), {\n value: value,\n });\n },\n };\n });\n return obj;\n };\n\n var createOptionActions = function createOptionActions(options) {\n return function(dispatch, query, state) {\n var obj = {};\n forin(options, function(key) {\n var name = fromCamels(key, '_').toUpperCase();\n\n obj['SET_' + name] = function(action) {\n try {\n state.options[key] = action.value;\n } catch (e) {} // nope, failed\n\n // we successfully set the value of this option\n dispatch('DID_SET_' + name, { value: state.options[key] });\n };\n });\n return obj;\n };\n };\n\n var createOptionQueries = function createOptionQueries(options) {\n return function(state) {\n var obj = {};\n forin(options, function(key) {\n obj['GET_' + fromCamels(key, '_').toUpperCase()] = function(action) {\n return state.options[key];\n };\n });\n return obj;\n };\n };\n\n var InteractionMethod = {\n API: 1,\n DROP: 2,\n BROWSE: 3,\n PASTE: 4,\n NONE: 5,\n };\n\n var getUniqueId = function getUniqueId() {\n return Math.random()\n .toString(36)\n .substring(2, 11);\n };\n\n function _typeof(obj) {\n if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {\n _typeof = function(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function(obj) {\n return obj &&\n typeof Symbol === 'function' &&\n obj.constructor === Symbol &&\n obj !== Symbol.prototype\n ? 'symbol'\n : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n var REACT_ELEMENT_TYPE;\n\n function _jsx(type, props, key, children) {\n if (!REACT_ELEMENT_TYPE) {\n REACT_ELEMENT_TYPE =\n (typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element')) ||\n 0xeac7;\n }\n\n var defaultProps = type && type.defaultProps;\n var childrenLength = arguments.length - 3;\n\n if (!props && childrenLength !== 0) {\n props = {\n children: void 0,\n };\n }\n\n if (props && defaultProps) {\n for (var propName in defaultProps) {\n if (props[propName] === void 0) {\n props[propName] = defaultProps[propName];\n }\n }\n } else if (!props) {\n props = defaultProps || {};\n }\n\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = new Array(childrenLength);\n\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 3];\n }\n\n props.children = childArray;\n }\n\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key === undefined ? null : '' + key,\n ref: null,\n props: props,\n _owner: null,\n };\n }\n\n function _asyncIterator(iterable) {\n var method;\n\n if (typeof Symbol !== 'undefined') {\n if (Symbol.asyncIterator) {\n method = iterable[Symbol.asyncIterator];\n if (method != null) return method.call(iterable);\n }\n\n if (Symbol.iterator) {\n method = iterable[Symbol.iterator];\n if (method != null) return method.call(iterable);\n }\n }\n\n throw new TypeError('Object is not async iterable');\n }\n\n function _AwaitValue(value) {\n this.wrapped = value;\n }\n\n function _AsyncGenerator(gen) {\n var front, back;\n\n function send(key, arg) {\n return new Promise(function(resolve, reject) {\n var request = {\n key: key,\n arg: arg,\n resolve: resolve,\n reject: reject,\n next: null,\n };\n\n if (back) {\n back = back.next = request;\n } else {\n front = back = request;\n resume(key, arg);\n }\n });\n }\n\n function resume(key, arg) {\n try {\n var result = gen[key](arg);\n var value = result.value;\n var wrappedAwait = value instanceof _AwaitValue;\n Promise.resolve(wrappedAwait ? value.wrapped : value).then(\n function(arg) {\n if (wrappedAwait) {\n resume('next', arg);\n return;\n }\n\n settle(result.done ? 'return' : 'normal', arg);\n },\n function(err) {\n resume('throw', err);\n }\n );\n } catch (err) {\n settle('throw', err);\n }\n }\n\n function settle(type, value) {\n switch (type) {\n case 'return':\n front.resolve({\n value: value,\n done: true,\n });\n break;\n\n case 'throw':\n front.reject(value);\n break;\n\n default:\n front.resolve({\n value: value,\n done: false,\n });\n break;\n }\n\n front = front.next;\n\n if (front) {\n resume(front.key, front.arg);\n } else {\n back = null;\n }\n }\n\n this._invoke = send;\n\n if (typeof gen.return !== 'function') {\n this.return = undefined;\n }\n }\n\n if (typeof Symbol === 'function' && Symbol.asyncIterator) {\n _AsyncGenerator.prototype[Symbol.asyncIterator] = function() {\n return this;\n };\n }\n\n _AsyncGenerator.prototype.next = function(arg) {\n return this._invoke('next', arg);\n };\n\n _AsyncGenerator.prototype.throw = function(arg) {\n return this._invoke('throw', arg);\n };\n\n _AsyncGenerator.prototype.return = function(arg) {\n return this._invoke('return', arg);\n };\n\n function _wrapAsyncGenerator(fn) {\n return function() {\n return new _AsyncGenerator(fn.apply(this, arguments));\n };\n }\n\n function _awaitAsyncGenerator(value) {\n return new _AwaitValue(value);\n }\n\n function _asyncGeneratorDelegate(inner, awaitWrap) {\n var iter = {},\n waiting = false;\n\n function pump(key, value) {\n waiting = true;\n value = new Promise(function(resolve) {\n resolve(inner[key](value));\n });\n return {\n done: false,\n value: awaitWrap(value),\n };\n }\n\n if (typeof Symbol === 'function' && Symbol.iterator) {\n iter[Symbol.iterator] = function() {\n return this;\n };\n }\n\n iter.next = function(value) {\n if (waiting) {\n waiting = false;\n return value;\n }\n\n return pump('next', value);\n };\n\n if (typeof inner.throw === 'function') {\n iter.throw = function(value) {\n if (waiting) {\n waiting = false;\n throw value;\n }\n\n return pump('throw', value);\n };\n }\n\n if (typeof inner.return === 'function') {\n iter.return = function(value) {\n return pump('return', value);\n };\n }\n\n return iter;\n }\n\n function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n }\n\n function _asyncToGenerator(fn) {\n return function() {\n var self = this,\n args = arguments;\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'next', value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'throw', err);\n }\n\n _next(undefined);\n });\n };\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n }\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineEnumerableProperties(obj, descs) {\n for (var key in descs) {\n var desc = descs[key];\n desc.configurable = desc.enumerable = true;\n if ('value' in desc) desc.writable = true;\n Object.defineProperty(obj, key, desc);\n }\n\n if (Object.getOwnPropertySymbols) {\n var objectSymbols = Object.getOwnPropertySymbols(descs);\n\n for (var i = 0; i < objectSymbols.length; i++) {\n var sym = objectSymbols[i];\n var desc = descs[sym];\n desc.configurable = desc.enumerable = true;\n if ('value' in desc) desc.writable = true;\n Object.defineProperty(obj, sym, desc);\n }\n }\n\n return obj;\n }\n\n function _defaults(obj, defaults) {\n var keys = Object.getOwnPropertyNames(defaults);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = Object.getOwnPropertyDescriptor(defaults, key);\n\n if (value && value.configurable && obj[key] === undefined) {\n Object.defineProperty(obj, key, value);\n }\n }\n\n return obj;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _extends() {\n _extends =\n Object.assign ||\n function(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n }\n\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(\n Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n })\n );\n }\n\n ownKeys.forEach(function(key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n }\n\n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly)\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n }\n\n function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function(key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function(key) {\n Object.defineProperty(\n target,\n key,\n Object.getOwnPropertyDescriptor(source, key)\n );\n });\n }\n }\n\n return target;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== 'function' && superClass !== null) {\n throw new TypeError('Super expression must either be null or a function');\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true,\n },\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n }\n\n function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n }\n\n function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf\n ? Object.getPrototypeOf\n : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n }\n\n function _setPrototypeOf(o, p) {\n _setPrototypeOf =\n Object.setPrototypeOf ||\n function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n }\n\n function isNativeReflectConstruct() {\n if (typeof Reflect === 'undefined' || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === 'function') return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));\n return true;\n } catch (e) {\n return false;\n }\n }\n\n function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n }\n\n function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf('[native code]') !== -1;\n }\n\n function _wrapNativeSuper(Class) {\n var _cache = typeof Map === 'function' ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !_isNativeFunction(Class)) return Class;\n\n if (typeof Class !== 'function') {\n throw new TypeError('Super expression must either be null or a function');\n }\n\n if (typeof _cache !== 'undefined') {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true,\n },\n });\n return _setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n }\n\n function _instanceof(left, right) {\n if (right != null && typeof Symbol !== 'undefined' && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n }\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule\n ? obj\n : {\n default: obj,\n };\n }\n\n function _interopRequireWildcard(obj) {\n if (obj && obj.__esModule) {\n return obj;\n } else {\n var newObj = {};\n\n if (obj != null) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc =\n Object.defineProperty && Object.getOwnPropertyDescriptor\n ? Object.getOwnPropertyDescriptor(obj, key)\n : {};\n\n if (desc.get || desc.set) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n }\n\n newObj.default = obj;\n return newObj;\n }\n }\n\n function _newArrowCheck(innerThis, boundThis) {\n if (innerThis !== boundThis) {\n throw new TypeError('Cannot instantiate an arrow function');\n }\n }\n\n function _objectDestructuringEmpty(obj) {\n if (obj == null) throw new TypeError('Cannot destructure undefined');\n }\n\n function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n }\n\n function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n }\n\n function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n }\n\n function _possibleConstructorReturn(self, call) {\n if (call && (typeof call === 'object' || typeof call === 'function')) {\n return call;\n }\n\n return _assertThisInitialized(self);\n }\n\n function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = _getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n }\n\n function _get(target, property, receiver) {\n if (typeof Reflect !== 'undefined' && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = _superPropBase(target, property);\n\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get(target, property, receiver || target);\n }\n\n function set(target, property, value, receiver) {\n if (typeof Reflect !== 'undefined' && Reflect.set) {\n set = Reflect.set;\n } else {\n set = function set(target, property, value, receiver) {\n var base = _superPropBase(target, property);\n\n var desc;\n\n if (base) {\n desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.set) {\n desc.set.call(receiver, value);\n return true;\n } else if (!desc.writable) {\n return false;\n }\n }\n\n desc = Object.getOwnPropertyDescriptor(receiver, property);\n\n if (desc) {\n if (!desc.writable) {\n return false;\n }\n\n desc.value = value;\n Object.defineProperty(receiver, property, desc);\n } else {\n _defineProperty(receiver, property, value);\n }\n\n return true;\n };\n }\n\n return set(target, property, value, receiver);\n }\n\n function _set(target, property, value, receiver, isStrict) {\n var s = set(target, property, value, receiver || target);\n\n if (!s && isStrict) {\n throw new Error('failed to set property');\n }\n\n return value;\n }\n\n function _taggedTemplateLiteral(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n\n return Object.freeze(\n Object.defineProperties(strings, {\n raw: {\n value: Object.freeze(raw),\n },\n })\n );\n }\n\n function _taggedTemplateLiteralLoose(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n\n strings.raw = raw;\n return strings;\n }\n\n function _temporalRef(val, name) {\n if (val === _temporalUndefined) {\n throw new ReferenceError(name + ' is not defined - temporal dead zone');\n } else {\n return val;\n }\n }\n\n function _readOnlyError(name) {\n throw new Error('\"' + name + '\" is read-only');\n }\n\n function _classNameTDZError(name) {\n throw new Error('Class \"' + name + '\" cannot be referenced in computed property keys.');\n }\n\n var _temporalUndefined = {};\n\n function _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n }\n\n function _slicedToArrayLoose(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimitLoose(arr, i) || _nonIterableRest();\n }\n\n function _toArray(arr) {\n return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest();\n }\n\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n }\n\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n }\n\n function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n }\n\n function _iterableToArray(iter) {\n if (\n Symbol.iterator in Object(iter) ||\n Object.prototype.toString.call(iter) === '[object Arguments]'\n )\n return Array.from(iter);\n }\n\n function _iterableToArrayLimit(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i['return'] != null) _i['return']();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n function _iterableToArrayLimitLoose(arr, i) {\n var _arr = [];\n\n for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done; ) {\n _arr.push(_step.value);\n\n if (i && _arr.length === i) break;\n }\n\n return _arr;\n }\n\n function _nonIterableSpread() {\n throw new TypeError('Invalid attempt to spread non-iterable instance');\n }\n\n function _nonIterableRest() {\n throw new TypeError('Invalid attempt to destructure non-iterable instance');\n }\n\n function _skipFirstGeneratorNext(fn) {\n return function() {\n var it = fn.apply(this, arguments);\n it.next();\n return it;\n };\n }\n\n function _toPrimitive(input, hint) {\n if (typeof input !== 'object' || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n\n if (prim !== undefined) {\n var res = prim.call(input, hint || 'default');\n if (typeof res !== 'object') return res;\n throw new TypeError('@@toPrimitive must return a primitive value.');\n }\n\n return (hint === 'string' ? String : Number)(input);\n }\n\n function _toPropertyKey(arg) {\n var key = _toPrimitive(arg, 'string');\n\n return typeof key === 'symbol' ? key : String(key);\n }\n\n function _initializerWarningHelper(descriptor, context) {\n throw new Error(\n 'Decorating class property failed. Please ensure that ' +\n 'proposal-class-properties is enabled and set to use loose mode. ' +\n 'To use proposal-class-properties in spec mode with decorators, wait for ' +\n 'the next major version of decorators in stage 2.'\n );\n }\n\n function _initializerDefineProperty(target, property, descriptor, context) {\n if (!descriptor) return;\n Object.defineProperty(target, property, {\n enumerable: descriptor.enumerable,\n configurable: descriptor.configurable,\n writable: descriptor.writable,\n value: descriptor.initializer ? descriptor.initializer.call(context) : void 0,\n });\n }\n\n function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object.keys(descriptor).forEach(function(key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators\n .slice()\n .reverse()\n .reduce(function(desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object.defineProperty(target, property, desc);\n desc = null;\n }\n\n return desc;\n }\n\n var id = 0;\n\n function _classPrivateFieldLooseKey(name) {\n return '__private_' + id++ + '_' + name;\n }\n\n function _classPrivateFieldLooseBase(receiver, privateKey) {\n if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {\n throw new TypeError('attempted to use private field on non-instance');\n }\n\n return receiver;\n }\n\n function _classPrivateFieldGet(receiver, privateMap) {\n var descriptor = privateMap.get(receiver);\n\n if (!descriptor) {\n throw new TypeError('attempted to get private field on non-instance');\n }\n\n if (descriptor.get) {\n return descriptor.get.call(receiver);\n }\n\n return descriptor.value;\n }\n\n function _classPrivateFieldSet(receiver, privateMap, value) {\n var descriptor = privateMap.get(receiver);\n\n if (!descriptor) {\n throw new TypeError('attempted to set private field on non-instance');\n }\n\n if (descriptor.set) {\n descriptor.set.call(receiver, value);\n } else {\n if (!descriptor.writable) {\n throw new TypeError('attempted to set read only private field');\n }\n\n descriptor.value = value;\n }\n\n return value;\n }\n\n function _classPrivateFieldDestructureSet(receiver, privateMap) {\n if (!privateMap.has(receiver)) {\n throw new TypeError('attempted to set private field on non-instance');\n }\n\n var descriptor = privateMap.get(receiver);\n\n if (descriptor.set) {\n if (!('__destrObj' in descriptor)) {\n descriptor.__destrObj = {\n set value(v) {\n descriptor.set.call(receiver, v);\n },\n };\n }\n\n return descriptor.__destrObj;\n } else {\n if (!descriptor.writable) {\n throw new TypeError('attempted to set read only private field');\n }\n\n return descriptor;\n }\n }\n\n function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) {\n if (receiver !== classConstructor) {\n throw new TypeError('Private static access of wrong provenance');\n }\n\n return descriptor.value;\n }\n\n function _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) {\n if (receiver !== classConstructor) {\n throw new TypeError('Private static access of wrong provenance');\n }\n\n if (!descriptor.writable) {\n throw new TypeError('attempted to set read only private field');\n }\n\n descriptor.value = value;\n return value;\n }\n\n function _classStaticPrivateMethodGet(receiver, classConstructor, method) {\n if (receiver !== classConstructor) {\n throw new TypeError('Private static access of wrong provenance');\n }\n\n return method;\n }\n\n function _classStaticPrivateMethodSet() {\n throw new TypeError('attempted to set read only static private field');\n }\n\n function _decorate(decorators, factory, superClass, mixins) {\n var api = _getDecoratorsApi();\n\n if (mixins) {\n for (var i = 0; i < mixins.length; i++) {\n api = mixins[i](api);\n }\n }\n\n var r = factory(function initialize(O) {\n api.initializeInstanceElements(O, decorated.elements);\n }, superClass);\n var decorated = api.decorateClass(\n _coalesceClassElements(r.d.map(_createElementDescriptor)),\n decorators\n );\n api.initializeClassElements(r.F, decorated.elements);\n return api.runClassFinishers(r.F, decorated.finishers);\n }\n\n function _getDecoratorsApi() {\n _getDecoratorsApi = function() {\n return api;\n };\n\n var api = {\n elementsDefinitionOrder: [['method'], ['field']],\n initializeInstanceElements: function(O, elements) {\n ['method', 'field'].forEach(function(kind) {\n elements.forEach(function(element) {\n if (element.kind === kind && element.placement === 'own') {\n this.defineClassElement(O, element);\n }\n }, this);\n }, this);\n },\n initializeClassElements: function(F, elements) {\n var proto = F.prototype;\n ['method', 'field'].forEach(function(kind) {\n elements.forEach(function(element) {\n var placement = element.placement;\n\n if (\n element.kind === kind &&\n (placement === 'static' || placement === 'prototype')\n ) {\n var receiver = placement === 'static' ? F : proto;\n this.defineClassElement(receiver, element);\n }\n }, this);\n }, this);\n },\n defineClassElement: function(receiver, element) {\n var descriptor = element.descriptor;\n\n if (element.kind === 'field') {\n var initializer = element.initializer;\n descriptor = {\n enumerable: descriptor.enumerable,\n writable: descriptor.writable,\n configurable: descriptor.configurable,\n value: initializer === void 0 ? void 0 : initializer.call(receiver),\n };\n }\n\n Object.defineProperty(receiver, element.key, descriptor);\n },\n decorateClass: function(elements, decorators) {\n var newElements = [];\n var finishers = [];\n var placements = {\n static: [],\n prototype: [],\n own: [],\n };\n elements.forEach(function(element) {\n this.addElementPlacement(element, placements);\n }, this);\n elements.forEach(function(element) {\n if (!_hasDecorators(element)) return newElements.push(element);\n var elementFinishersExtras = this.decorateElement(element, placements);\n newElements.push(elementFinishersExtras.element);\n newElements.push.apply(newElements, elementFinishersExtras.extras);\n finishers.push.apply(finishers, elementFinishersExtras.finishers);\n }, this);\n\n if (!decorators) {\n return {\n elements: newElements,\n finishers: finishers,\n };\n }\n\n var result = this.decorateConstructor(newElements, decorators);\n finishers.push.apply(finishers, result.finishers);\n result.finishers = finishers;\n return result;\n },\n addElementPlacement: function(element, placements, silent) {\n var keys = placements[element.placement];\n\n if (!silent && keys.indexOf(element.key) !== -1) {\n throw new TypeError('Duplicated element (' + element.key + ')');\n }\n\n keys.push(element.key);\n },\n decorateElement: function(element, placements) {\n var extras = [];\n var finishers = [];\n\n for (var decorators = element.decorators, i = decorators.length - 1; i >= 0; i--) {\n var keys = placements[element.placement];\n keys.splice(keys.indexOf(element.key), 1);\n var elementObject = this.fromElementDescriptor(element);\n var elementFinisherExtras = this.toElementFinisherExtras(\n (0, decorators[i])(elementObject) || elementObject\n );\n element = elementFinisherExtras.element;\n this.addElementPlacement(element, placements);\n\n if (elementFinisherExtras.finisher) {\n finishers.push(elementFinisherExtras.finisher);\n }\n\n var newExtras = elementFinisherExtras.extras;\n\n if (newExtras) {\n for (var j = 0; j < newExtras.length; j++) {\n this.addElementPlacement(newExtras[j], placements);\n }\n\n extras.push.apply(extras, newExtras);\n }\n }\n\n return {\n element: element,\n finishers: finishers,\n extras: extras,\n };\n },\n decorateConstructor: function(elements, decorators) {\n var finishers = [];\n\n for (var i = decorators.length - 1; i >= 0; i--) {\n var obj = this.fromClassDescriptor(elements);\n var elementsAndFinisher = this.toClassDescriptor(\n (0, decorators[i])(obj) || obj\n );\n\n if (elementsAndFinisher.finisher !== undefined) {\n finishers.push(elementsAndFinisher.finisher);\n }\n\n if (elementsAndFinisher.elements !== undefined) {\n elements = elementsAndFinisher.elements;\n\n for (var j = 0; j < elements.length - 1; j++) {\n for (var k = j + 1; k < elements.length; k++) {\n if (\n elements[j].key === elements[k].key &&\n elements[j].placement === elements[k].placement\n ) {\n throw new TypeError(\n 'Duplicated element (' + elements[j].key + ')'\n );\n }\n }\n }\n }\n }\n\n return {\n elements: elements,\n finishers: finishers,\n };\n },\n fromElementDescriptor: function(element) {\n var obj = {\n kind: element.kind,\n key: element.key,\n placement: element.placement,\n descriptor: element.descriptor,\n };\n var desc = {\n value: 'Descriptor',\n configurable: true,\n };\n Object.defineProperty(obj, Symbol.toStringTag, desc);\n if (element.kind === 'field') obj.initializer = element.initializer;\n return obj;\n },\n toElementDescriptors: function(elementObjects) {\n if (elementObjects === undefined) return;\n return _toArray(elementObjects).map(function(elementObject) {\n var element = this.toElementDescriptor(elementObject);\n this.disallowProperty(elementObject, 'finisher', 'An element descriptor');\n this.disallowProperty(elementObject, 'extras', 'An element descriptor');\n return element;\n }, this);\n },\n toElementDescriptor: function(elementObject) {\n var kind = String(elementObject.kind);\n\n if (kind !== 'method' && kind !== 'field') {\n throw new TypeError(\n 'An element descriptor\\'s .kind property must be either \"method\" or' +\n ' \"field\", but a decorator created an element descriptor with' +\n ' .kind \"' +\n kind +\n '\"'\n );\n }\n\n var key = _toPropertyKey(elementObject.key);\n\n var placement = String(elementObject.placement);\n\n if (placement !== 'static' && placement !== 'prototype' && placement !== 'own') {\n throw new TypeError(\n 'An element descriptor\\'s .placement property must be one of \"static\",' +\n ' \"prototype\" or \"own\", but a decorator created an element descriptor' +\n ' with .placement \"' +\n placement +\n '\"'\n );\n }\n\n var descriptor = elementObject.descriptor;\n this.disallowProperty(elementObject, 'elements', 'An element descriptor');\n var element = {\n kind: kind,\n key: key,\n placement: placement,\n descriptor: Object.assign({}, descriptor),\n };\n\n if (kind !== 'field') {\n this.disallowProperty(elementObject, 'initializer', 'A method descriptor');\n } else {\n this.disallowProperty(\n descriptor,\n 'get',\n 'The property descriptor of a field descriptor'\n );\n this.disallowProperty(\n descriptor,\n 'set',\n 'The property descriptor of a field descriptor'\n );\n this.disallowProperty(\n descriptor,\n 'value',\n 'The property descriptor of a field descriptor'\n );\n element.initializer = elementObject.initializer;\n }\n\n return element;\n },\n toElementFinisherExtras: function(elementObject) {\n var element = this.toElementDescriptor(elementObject);\n\n var finisher = _optionalCallableProperty(elementObject, 'finisher');\n\n var extras = this.toElementDescriptors(elementObject.extras);\n return {\n element: element,\n finisher: finisher,\n extras: extras,\n };\n },\n fromClassDescriptor: function(elements) {\n var obj = {\n kind: 'class',\n elements: elements.map(this.fromElementDescriptor, this),\n };\n var desc = {\n value: 'Descriptor',\n configurable: true,\n };\n Object.defineProperty(obj, Symbol.toStringTag, desc);\n return obj;\n },\n toClassDescriptor: function(obj) {\n var kind = String(obj.kind);\n\n if (kind !== 'class') {\n throw new TypeError(\n 'A class descriptor\\'s .kind property must be \"class\", but a decorator' +\n ' created a class descriptor with .kind \"' +\n kind +\n '\"'\n );\n }\n\n this.disallowProperty(obj, 'key', 'A class descriptor');\n this.disallowProperty(obj, 'placement', 'A class descriptor');\n this.disallowProperty(obj, 'descriptor', 'A class descriptor');\n this.disallowProperty(obj, 'initializer', 'A class descriptor');\n this.disallowProperty(obj, 'extras', 'A class descriptor');\n\n var finisher = _optionalCallableProperty(obj, 'finisher');\n\n var elements = this.toElementDescriptors(obj.elements);\n return {\n elements: elements,\n finisher: finisher,\n };\n },\n runClassFinishers: function(constructor, finishers) {\n for (var i = 0; i < finishers.length; i++) {\n var newConstructor = (0, finishers[i])(constructor);\n\n if (newConstructor !== undefined) {\n if (typeof newConstructor !== 'function') {\n throw new TypeError('Finishers must return a constructor.');\n }\n\n constructor = newConstructor;\n }\n }\n\n return constructor;\n },\n disallowProperty: function(obj, name, objectType) {\n if (obj[name] !== undefined) {\n throw new TypeError(objectType + \" can't have a .\" + name + ' property.');\n }\n },\n };\n return api;\n }\n\n function _createElementDescriptor(def) {\n var key = _toPropertyKey(def.key);\n\n var descriptor;\n\n if (def.kind === 'method') {\n descriptor = {\n value: def.value,\n writable: true,\n configurable: true,\n enumerable: false,\n };\n } else if (def.kind === 'get') {\n descriptor = {\n get: def.value,\n configurable: true,\n enumerable: false,\n };\n } else if (def.kind === 'set') {\n descriptor = {\n set: def.value,\n configurable: true,\n enumerable: false,\n };\n } else if (def.kind === 'field') {\n descriptor = {\n configurable: true,\n writable: true,\n enumerable: true,\n };\n }\n\n var element = {\n kind: def.kind === 'field' ? 'field' : 'method',\n key: key,\n placement: def.static ? 'static' : def.kind === 'field' ? 'own' : 'prototype',\n descriptor: descriptor,\n };\n if (def.decorators) element.decorators = def.decorators;\n if (def.kind === 'field') element.initializer = def.value;\n return element;\n }\n\n function _coalesceGetterSetter(element, other) {\n if (element.descriptor.get !== undefined) {\n other.descriptor.get = element.descriptor.get;\n } else {\n other.descriptor.set = element.descriptor.set;\n }\n }\n\n function _coalesceClassElements(elements) {\n var newElements = [];\n\n var isSameElement = function(other) {\n return (\n other.kind === 'method' &&\n other.key === element.key &&\n other.placement === element.placement\n );\n };\n\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n var other;\n\n if (element.kind === 'method' && (other = newElements.find(isSameElement))) {\n if (_isDataDescriptor(element.descriptor) || _isDataDescriptor(other.descriptor)) {\n if (_hasDecorators(element) || _hasDecorators(other)) {\n throw new ReferenceError(\n 'Duplicated methods (' + element.key + \") can't be decorated.\"\n );\n }\n\n other.descriptor = element.descriptor;\n } else {\n if (_hasDecorators(element)) {\n if (_hasDecorators(other)) {\n throw new ReferenceError(\n \"Decorators can't be placed on different accessors with for \" +\n 'the same property (' +\n element.key +\n ').'\n );\n }\n\n other.decorators = element.decorators;\n }\n\n _coalesceGetterSetter(element, other);\n }\n } else {\n newElements.push(element);\n }\n }\n\n return newElements;\n }\n\n function _hasDecorators(element) {\n return element.decorators && element.decorators.length;\n }\n\n function _isDataDescriptor(desc) {\n return desc !== undefined && !(desc.value === undefined && desc.writable === undefined);\n }\n\n function _optionalCallableProperty(obj, name) {\n var value = obj[name];\n\n if (value !== undefined && typeof value !== 'function') {\n throw new TypeError(\"Expected '\" + name + \"' to be a function\");\n }\n\n return value;\n }\n\n function _classPrivateMethodGet(receiver, privateSet, fn) {\n if (!privateSet.has(receiver)) {\n throw new TypeError('attempted to get private field on non-instance');\n }\n\n return fn;\n }\n\n function _classPrivateMethodSet() {\n throw new TypeError('attempted to reassign private method');\n }\n\n function _wrapRegExp(re, groups) {\n _wrapRegExp = function(re, groups) {\n return new BabelRegExp(re, groups);\n };\n\n var _RegExp = _wrapNativeSuper(RegExp);\n\n var _super = RegExp.prototype;\n\n var _groups = new WeakMap();\n\n function BabelRegExp(re, groups) {\n var _this = _RegExp.call(this, re);\n\n _groups.set(_this, groups);\n\n return _this;\n }\n\n _inherits(BabelRegExp, _RegExp);\n\n BabelRegExp.prototype.exec = function(str) {\n var result = _super.exec.call(this, str);\n\n if (result) result.groups = buildGroups(result, this);\n return result;\n };\n\n BabelRegExp.prototype[Symbol.replace] = function(str, substitution) {\n if (typeof substitution === 'string') {\n var groups = _groups.get(this);\n\n return _super[Symbol.replace].call(\n this,\n str,\n substitution.replace(/\\$<([^>]+)>/g, function(_, name) {\n return '$' + groups[name];\n })\n );\n } else if (typeof substitution === 'function') {\n var _this = this;\n\n return _super[Symbol.replace].call(this, str, function() {\n var args = [];\n args.push.apply(args, arguments);\n\n if (typeof args[args.length - 1] !== 'object') {\n args.push(buildGroups(args, _this));\n }\n\n return substitution.apply(this, args);\n });\n } else {\n return _super[Symbol.replace].call(this, str, substitution);\n }\n };\n\n function buildGroups(result, re) {\n var g = _groups.get(re);\n\n return Object.keys(g).reduce(function(groups, name) {\n groups[name] = result[g[name]];\n return groups;\n }, Object.create(null));\n }\n\n return _wrapRegExp.apply(this, arguments);\n }\n\n var arrayRemove = function arrayRemove(arr, index) {\n return arr.splice(index, 1);\n };\n\n var run = function run(cb, sync) {\n if (sync) {\n cb();\n } else if (document.hidden) {\n Promise.resolve(1).then(cb);\n } else {\n setTimeout(cb, 0);\n }\n };\n\n var on = function on() {\n var listeners = [];\n var off = function off(event, cb) {\n arrayRemove(\n listeners,\n listeners.findIndex(function(listener) {\n return listener.event === event && (listener.cb === cb || !cb);\n })\n );\n };\n var _fire = function fire(event, args, sync) {\n listeners\n .filter(function(listener) {\n return listener.event === event;\n })\n .map(function(listener) {\n return listener.cb;\n })\n .forEach(function(cb) {\n return run(function() {\n return cb.apply(void 0, _toConsumableArray(args));\n }, sync);\n });\n };\n return {\n fireSync: function fireSync(event) {\n for (\n var _len = arguments.length,\n args = new Array(_len > 1 ? _len - 1 : 0),\n _key = 1;\n _key < _len;\n _key++\n ) {\n args[_key - 1] = arguments[_key];\n }\n _fire(event, args, true);\n },\n fire: function fire(event) {\n for (\n var _len2 = arguments.length,\n args = new Array(_len2 > 1 ? _len2 - 1 : 0),\n _key2 = 1;\n _key2 < _len2;\n _key2++\n ) {\n args[_key2 - 1] = arguments[_key2];\n }\n _fire(event, args, false);\n },\n on: function on(event, cb) {\n listeners.push({ event: event, cb: cb });\n },\n onOnce: function onOnce(event, _cb) {\n listeners.push({\n event: event,\n cb: function cb() {\n off(event, _cb);\n _cb.apply(void 0, arguments);\n },\n });\n },\n off: off,\n };\n };\n\n var copyObjectPropertiesToObject = function copyObjectPropertiesToObject(\n src,\n target,\n excluded\n ) {\n Object.getOwnPropertyNames(src)\n .filter(function(property) {\n return !excluded.includes(property);\n })\n .forEach(function(key) {\n return Object.defineProperty(\n target,\n key,\n Object.getOwnPropertyDescriptor(src, key)\n );\n });\n };\n\n var PRIVATE = [\n 'fire',\n 'process',\n 'revert',\n 'load',\n 'on',\n 'off',\n 'onOnce',\n 'retryLoad',\n 'extend',\n 'archive',\n 'archived',\n 'release',\n 'released',\n 'requestProcessing',\n 'freeze',\n ];\n\n var createItemAPI = function createItemAPI(item) {\n var api = {};\n copyObjectPropertiesToObject(item, api, PRIVATE);\n return api;\n };\n\n var removeReleasedItems = function removeReleasedItems(items) {\n items.forEach(function(item, index) {\n if (item.released) {\n arrayRemove(items, index);\n }\n });\n };\n\n var ItemStatus = {\n INIT: 1,\n IDLE: 2,\n PROCESSING_QUEUED: 9,\n PROCESSING: 3,\n PROCESSING_COMPLETE: 5,\n PROCESSING_ERROR: 6,\n PROCESSING_REVERT_ERROR: 10,\n LOADING: 7,\n LOAD_ERROR: 8,\n };\n\n var FileOrigin = {\n INPUT: 1,\n LIMBO: 2,\n LOCAL: 3,\n };\n\n var getNonNumeric = function getNonNumeric(str) {\n return /[^0-9]+/.exec(str);\n };\n\n var getDecimalSeparator = function getDecimalSeparator() {\n return getNonNumeric((1.1).toLocaleString())[0];\n };\n\n var getThousandsSeparator = function getThousandsSeparator() {\n // Added for browsers that do not return the thousands separator (happend on native browser Android 4.4.4)\n // We check against the normal toString output and if they're the same return a comma when decimal separator is a dot\n var decimalSeparator = getDecimalSeparator();\n var thousandsStringWithSeparator = (1000.0).toLocaleString();\n var thousandsStringWithoutSeparator = (1000.0).toString();\n if (thousandsStringWithSeparator !== thousandsStringWithoutSeparator) {\n return getNonNumeric(thousandsStringWithSeparator)[0];\n }\n return decimalSeparator === '.' ? ',' : '.';\n };\n\n var Type = {\n BOOLEAN: 'boolean',\n INT: 'int',\n NUMBER: 'number',\n STRING: 'string',\n ARRAY: 'array',\n OBJECT: 'object',\n FUNCTION: 'function',\n ACTION: 'action',\n SERVER_API: 'serverapi',\n REGEX: 'regex',\n };\n\n // all registered filters\n var filters = [];\n\n // loops over matching filters and passes options to each filter, returning the mapped results\n var applyFilterChain = function applyFilterChain(key, value, utils) {\n return new Promise(function(resolve, reject) {\n // find matching filters for this key\n var matchingFilters = filters\n .filter(function(f) {\n return f.key === key;\n })\n .map(function(f) {\n return f.cb;\n });\n\n // resolve now\n if (matchingFilters.length === 0) {\n resolve(value);\n return;\n }\n\n // first filter to kick things of\n var initialFilter = matchingFilters.shift();\n\n // chain filters\n matchingFilters\n .reduce(\n // loop over promises passing value to next promise\n function(current, next) {\n return current.then(function(value) {\n return next(value, utils);\n });\n },\n\n // call initial filter, will return a promise\n initialFilter(value, utils)\n\n // all executed\n )\n .then(function(value) {\n return resolve(value);\n })\n .catch(function(error) {\n return reject(error);\n });\n });\n };\n\n var applyFilters = function applyFilters(key, value, utils) {\n return filters\n .filter(function(f) {\n return f.key === key;\n })\n .map(function(f) {\n return f.cb(value, utils);\n });\n };\n\n // adds a new filter to the list\n var addFilter = function addFilter(key, cb) {\n return filters.push({ key: key, cb: cb });\n };\n\n var extendDefaultOptions = function extendDefaultOptions(additionalOptions) {\n return Object.assign(defaultOptions, additionalOptions);\n };\n\n var getOptions = function getOptions() {\n return Object.assign({}, defaultOptions);\n };\n\n var setOptions = function setOptions(opts) {\n forin(opts, function(key, value) {\n // key does not exist, so this option cannot be set\n if (!defaultOptions[key]) {\n return;\n }\n defaultOptions[key][0] = getValueByType(\n value,\n defaultOptions[key][0],\n defaultOptions[key][1]\n );\n });\n };\n\n // default options on app\n var defaultOptions = {\n // the id to add to the root element\n id: [null, Type.STRING],\n\n // input field name to use\n name: ['filepond', Type.STRING],\n\n // disable the field\n disabled: [false, Type.BOOLEAN],\n\n // classname to put on wrapper\n className: [null, Type.STRING],\n\n // is the field required\n required: [false, Type.BOOLEAN],\n\n // Allow media capture when value is set\n captureMethod: [null, Type.STRING],\n // - \"camera\", \"microphone\" or \"camcorder\",\n // - Does not work with multiple on apple devices\n // - If set, acceptedFileTypes must be made to match with media wildcard \"image/*\", \"audio/*\" or \"video/*\"\n\n // sync `acceptedFileTypes` property with `accept` attribute\n allowSyncAcceptAttribute: [true, Type.BOOLEAN],\n\n // Feature toggles\n allowDrop: [true, Type.BOOLEAN], // Allow dropping of files\n allowBrowse: [true, Type.BOOLEAN], // Allow browsing the file system\n allowPaste: [true, Type.BOOLEAN], // Allow pasting files\n allowMultiple: [false, Type.BOOLEAN], // Allow multiple files (disabled by default, as multiple attribute is also required on input to allow multiple)\n allowReplace: [true, Type.BOOLEAN], // Allow dropping a file on other file to replace it (only works when multiple is set to false)\n allowRevert: [true, Type.BOOLEAN], // Allows user to revert file upload\n allowRemove: [true, Type.BOOLEAN], // Allow user to remove a file\n allowProcess: [true, Type.BOOLEAN], // Allows user to process a file, when set to false, this removes the file upload button\n allowReorder: [false, Type.BOOLEAN], // Allow reordering of files\n allowDirectoriesOnly: [false, Type.BOOLEAN], // Allow only selecting directories with browse (no support for filtering dnd at this point)\n\n // Try store file if `server` not set\n storeAsFile: [false, Type.BOOLEAN],\n\n // Revert mode\n forceRevert: [false, Type.BOOLEAN], // Set to 'force' to require the file to be reverted before removal\n\n // Input requirements\n maxFiles: [null, Type.INT], // Max number of files\n checkValidity: [false, Type.BOOLEAN], // Enables custom validity messages\n\n // Where to put file\n itemInsertLocationFreedom: [true, Type.BOOLEAN], // Set to false to always add items to begin or end of list\n itemInsertLocation: ['before', Type.STRING], // Default index in list to add items that have been dropped at the top of the list\n itemInsertInterval: [75, Type.INT],\n\n // Drag 'n Drop related\n dropOnPage: [false, Type.BOOLEAN], // Allow dropping of files anywhere on page (prevents browser from opening file if dropped outside of Up)\n dropOnElement: [true, Type.BOOLEAN], // Drop needs to happen on element (set to false to also load drops outside of Up)\n dropValidation: [false, Type.BOOLEAN], // Enable or disable validating files on drop\n ignoredFiles: [['.ds_store', 'thumbs.db', 'desktop.ini'], Type.ARRAY],\n\n // Upload related\n instantUpload: [true, Type.BOOLEAN], // Should upload files immediately on drop\n maxParallelUploads: [2, Type.INT], // Maximum files to upload in parallel\n allowMinimumUploadDuration: [true, Type.BOOLEAN], // if true uploads take at least 750 ms, this ensures the user sees the upload progress giving trust the upload actually happened\n\n // Chunks\n chunkUploads: [false, Type.BOOLEAN], // Enable chunked uploads\n chunkForce: [false, Type.BOOLEAN], // Force use of chunk uploads even for files smaller than chunk size\n chunkSize: [5000000, Type.INT], // Size of chunks (5MB default)\n chunkRetryDelays: [[500, 1000, 3000], Type.ARRAY], // Amount of times to retry upload of a chunk when it fails\n\n // The server api end points to use for uploading (see docs)\n server: [null, Type.SERVER_API],\n\n // File size calculations, can set to 1024, this is only used for display, properties use file size base 1000\n fileSizeBase: [1000, Type.INT],\n\n // Labels and status messages\n labelFileSizeBytes: ['bytes', Type.STRING],\n labelFileSizeKilobytes: ['KB', Type.STRING],\n labelFileSizeMegabytes: ['MB', Type.STRING],\n labelFileSizeGigabytes: ['GB', Type.STRING],\n\n labelDecimalSeparator: [getDecimalSeparator(), Type.STRING], // Default is locale separator\n labelThousandsSeparator: [getThousandsSeparator(), Type.STRING], // Default is locale separator\n\n labelIdle: [\n 'Drag & Drop your files or <span class=\"filepond--label-action\">Browse</span>',\n Type.STRING,\n ],\n\n labelInvalidField: ['Field contains invalid files', Type.STRING],\n labelFileWaitingForSize: ['Waiting for size', Type.STRING],\n labelFileSizeNotAvailable: ['Size not available', Type.STRING],\n labelFileCountSingular: ['file in list', Type.STRING],\n labelFileCountPlural: ['files in list', Type.STRING],\n labelFileLoading: ['Loading', Type.STRING],\n labelFileAdded: ['Added', Type.STRING], // assistive only\n labelFileLoadError: ['Error during load', Type.STRING],\n labelFileRemoved: ['Removed', Type.STRING], // assistive only\n labelFileRemoveError: ['Error during remove', Type.STRING],\n labelFileProcessing: ['Uploading', Type.STRING],\n labelFileProcessingComplete: ['Upload complete', Type.STRING],\n labelFileProcessingAborted: ['Upload cancelled', Type.STRING],\n labelFileProcessingError: ['Error during upload', Type.STRING],\n labelFileProcessingRevertError: ['Error during revert', Type.STRING],\n\n labelTapToCancel: ['tap to cancel', Type.STRING],\n labelTapToRetry: ['tap to retry', Type.STRING],\n labelTapToUndo: ['tap to undo', Type.STRING],\n\n labelButtonRemoveItem: ['Remove', Type.STRING],\n labelButtonAbortItemLoad: ['Abort', Type.STRING],\n labelButtonRetryItemLoad: ['Retry', Type.STRING],\n labelButtonAbortItemProcessing: ['Cancel', Type.STRING],\n labelButtonUndoItemProcessing: ['Undo', Type.STRING],\n labelButtonRetryItemProcessing: ['Retry', Type.STRING],\n labelButtonProcessItem: ['Upload', Type.STRING],\n\n // make sure width and height plus viewpox are even numbers so icons are nicely centered\n iconRemove: [\n '<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>',\n Type.STRING,\n ],\n\n iconProcess: [\n '<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>',\n Type.STRING,\n ],\n\n iconRetry: [\n '<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>',\n Type.STRING,\n ],\n\n iconUndo: [\n '<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>',\n Type.STRING,\n ],\n\n iconDone: [\n '<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>',\n Type.STRING,\n ],\n\n // event handlers\n oninit: [null, Type.FUNCTION],\n onwarning: [null, Type.FUNCTION],\n onerror: [null, Type.FUNCTION],\n onactivatefile: [null, Type.FUNCTION],\n oninitfile: [null, Type.FUNCTION],\n onaddfilestart: [null, Type.FUNCTION],\n onaddfileprogress: [null, Type.FUNCTION],\n onaddfile: [null, Type.FUNCTION],\n onprocessfilestart: [null, Type.FUNCTION],\n onprocessfileprogress: [null, Type.FUNCTION],\n onprocessfileabort: [null, Type.FUNCTION],\n onprocessfilerevert: [null, Type.FUNCTION],\n onprocessfile: [null, Type.FUNCTION],\n onprocessfiles: [null, Type.FUNCTION],\n onremovefile: [null, Type.FUNCTION],\n onpreparefile: [null, Type.FUNCTION],\n onupdatefiles: [null, Type.FUNCTION],\n onreorderfiles: [null, Type.FUNCTION],\n\n // hooks\n beforeDropFile: [null, Type.FUNCTION],\n beforeAddFile: [null, Type.FUNCTION],\n beforeRemoveFile: [null, Type.FUNCTION],\n beforePrepareFile: [null, Type.FUNCTION],\n\n // styles\n stylePanelLayout: [null, Type.STRING], // null 'integrated', 'compact', 'circle'\n stylePanelAspectRatio: [null, Type.STRING], // null or '3:2' or 1\n styleItemPanelAspectRatio: [null, Type.STRING],\n styleButtonRemoveItemPosition: ['left', Type.STRING],\n styleButtonProcessItemPosition: ['right', Type.STRING],\n styleLoadIndicatorPosition: ['right', Type.STRING],\n styleProgressIndicatorPosition: ['right', Type.STRING],\n styleButtonRemoveItemAlign: [false, Type.BOOLEAN],\n\n // custom initial files array\n files: [[], Type.ARRAY],\n\n // show support by displaying credits\n credits: [['https://filepond.com', 'Powered by FilePond'], Type.ARRAY],\n };\n\n var getItemByQuery = function getItemByQuery(items, query) {\n // just return first index\n if (isEmpty(query)) {\n return items[0] || null;\n }\n\n // query is index\n if (isInt(query)) {\n return items[query] || null;\n }\n\n // if query is item, get the id\n if (typeof query === 'object') {\n query = query.id;\n }\n\n // assume query is a string and return item by id\n return (\n items.find(function(item) {\n return item.id === query;\n }) || null\n );\n };\n\n var getNumericAspectRatioFromString = function getNumericAspectRatioFromString(aspectRatio) {\n if (isEmpty(aspectRatio)) {\n return aspectRatio;\n }\n if (/:/.test(aspectRatio)) {\n var parts = aspectRatio.split(':');\n return parts[1] / parts[0];\n }\n return parseFloat(aspectRatio);\n };\n\n var getActiveItems = function getActiveItems(items) {\n return items.filter(function(item) {\n return !item.archived;\n });\n };\n\n var Status = {\n EMPTY: 0,\n IDLE: 1, // waiting\n ERROR: 2, // a file is in error state\n BUSY: 3, // busy processing or loading\n READY: 4, // all files uploaded\n };\n\n var res = null;\n var canUpdateFileInput = function canUpdateFileInput() {\n if (res === null) {\n try {\n var dataTransfer = new DataTransfer();\n dataTransfer.items.add(new File(['hello world'], 'This_Works.txt'));\n var el = document.createElement('input');\n el.setAttribute('type', 'file');\n el.files = dataTransfer.files;\n res = el.files.length === 1;\n } catch (err) {\n res = false;\n }\n }\n return res;\n };\n\n var ITEM_ERROR = [\n ItemStatus.LOAD_ERROR,\n ItemStatus.PROCESSING_ERROR,\n ItemStatus.PROCESSING_REVERT_ERROR,\n ];\n\n var ITEM_BUSY = [\n ItemStatus.LOADING,\n ItemStatus.PROCESSING,\n ItemStatus.PROCESSING_QUEUED,\n ItemStatus.INIT,\n ];\n\n var ITEM_READY = [ItemStatus.PROCESSING_COMPLETE];\n\n var isItemInErrorState = function isItemInErrorState(item) {\n return ITEM_ERROR.includes(item.status);\n };\n var isItemInBusyState = function isItemInBusyState(item) {\n return ITEM_BUSY.includes(item.status);\n };\n var isItemInReadyState = function isItemInReadyState(item) {\n return ITEM_READY.includes(item.status);\n };\n\n var isAsync = function isAsync(state) {\n return (\n isObject(state.options.server) &&\n (isObject(state.options.server.process) || isFunction(state.options.server.process))\n );\n };\n\n var queries = function queries(state) {\n return {\n GET_STATUS: function GET_STATUS() {\n var items = getActiveItems(state.items);\n var EMPTY = Status.EMPTY,\n ERROR = Status.ERROR,\n BUSY = Status.BUSY,\n IDLE = Status.IDLE,\n READY = Status.READY;\n\n if (items.length === 0) return EMPTY;\n\n if (items.some(isItemInErrorState)) return ERROR;\n\n if (items.some(isItemInBusyState)) return BUSY;\n\n if (items.some(isItemInReadyState)) return READY;\n\n return IDLE;\n },\n\n GET_ITEM: function GET_ITEM(query) {\n return getItemByQuery(state.items, query);\n },\n\n GET_ACTIVE_ITEM: function GET_ACTIVE_ITEM(query) {\n return getItemByQuery(getActiveItems(state.items), query);\n },\n\n GET_ACTIVE_ITEMS: function GET_ACTIVE_ITEMS() {\n return getActiveItems(state.items);\n },\n\n GET_ITEMS: function GET_ITEMS() {\n return state.items;\n },\n\n GET_ITEM_NAME: function GET_ITEM_NAME(query) {\n var item = getItemByQuery(state.items, query);\n return item ? item.filename : null;\n },\n\n GET_ITEM_SIZE: function GET_ITEM_SIZE(query) {\n var item = getItemByQuery(state.items, query);\n return item ? item.fileSize : null;\n },\n\n GET_STYLES: function GET_STYLES() {\n return Object.keys(state.options)\n .filter(function(key) {\n return /^style/.test(key);\n })\n .map(function(option) {\n return {\n name: option,\n value: state.options[option],\n };\n });\n },\n\n GET_PANEL_ASPECT_RATIO: function GET_PANEL_ASPECT_RATIO() {\n var isShapeCircle = /circle/.test(state.options.stylePanelLayout);\n var aspectRatio = isShapeCircle\n ? 1\n : getNumericAspectRatioFromString(state.options.stylePanelAspectRatio);\n return aspectRatio;\n },\n\n GET_ITEM_PANEL_ASPECT_RATIO: function GET_ITEM_PANEL_ASPECT_RATIO() {\n return state.options.styleItemPanelAspectRatio;\n },\n\n GET_ITEMS_BY_STATUS: function GET_ITEMS_BY_STATUS(status) {\n return getActiveItems(state.items).filter(function(item) {\n return item.status === status;\n });\n },\n\n GET_TOTAL_ITEMS: function GET_TOTAL_ITEMS() {\n return getActiveItems(state.items).length;\n },\n\n SHOULD_UPDATE_FILE_INPUT: function SHOULD_UPDATE_FILE_INPUT() {\n return state.options.storeAsFile && canUpdateFileInput() && !isAsync(state);\n },\n\n IS_ASYNC: function IS_ASYNC() {\n return isAsync(state);\n },\n\n GET_FILE_SIZE_LABELS: function GET_FILE_SIZE_LABELS(query) {\n return {\n labelBytes: query('GET_LABEL_FILE_SIZE_BYTES') || undefined,\n labelKilobytes: query('GET_LABEL_FILE_SIZE_KILOBYTES') || undefined,\n labelMegabytes: query('GET_LABEL_FILE_SIZE_MEGABYTES') || undefined,\n labelGigabytes: query('GET_LABEL_FILE_SIZE_GIGABYTES') || undefined,\n };\n },\n };\n };\n\n var hasRoomForItem = function hasRoomForItem(state) {\n var count = getActiveItems(state.items).length;\n\n // if cannot have multiple items, to add one item it should currently not contain items\n if (!state.options.allowMultiple) {\n return count === 0;\n }\n\n // if allows multiple items, we check if a max item count has been set, if not, there's no limit\n var maxFileCount = state.options.maxFiles;\n if (maxFileCount === null) {\n return true;\n }\n\n // we check if the current count is smaller than the max count, if so, another file can still be added\n if (count < maxFileCount) {\n return true;\n }\n\n // no more room for another file\n return false;\n };\n\n var limit = function limit(value, min, max) {\n return Math.max(Math.min(max, value), min);\n };\n\n var arrayInsert = function arrayInsert(arr, index, item) {\n return arr.splice(index, 0, item);\n };\n\n var insertItem = function insertItem(items, item, index) {\n if (isEmpty(item)) {\n return null;\n }\n\n // if index is undefined, append\n if (typeof index === 'undefined') {\n items.push(item);\n return item;\n }\n\n // limit the index to the size of the items array\n index = limit(index, 0, items.length);\n\n // add item to array\n arrayInsert(items, index, item);\n\n // expose\n return item;\n };\n\n var isBase64DataURI = function isBase64DataURI(str) {\n return /^\\s*data:([a-z]+\\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\\-._~:@\\/?%\\s]*)\\s*$/i.test(\n str\n );\n };\n\n var getFilenameFromURL = function getFilenameFromURL(url) {\n return ('' + url)\n .split('/')\n .pop()\n .split('?')\n .shift();\n };\n\n var getExtensionFromFilename = function getExtensionFromFilename(name) {\n return name.split('.').pop();\n };\n\n var guesstimateExtension = function guesstimateExtension(type) {\n // if no extension supplied, exit here\n if (typeof type !== 'string') {\n return '';\n }\n\n // get subtype\n var subtype = type.split('/').pop();\n\n // is svg subtype\n if (/svg/.test(subtype)) {\n return 'svg';\n }\n\n if (/zip|compressed/.test(subtype)) {\n return 'zip';\n }\n\n if (/plain/.test(subtype)) {\n return 'txt';\n }\n\n if (/msword/.test(subtype)) {\n return 'doc';\n }\n\n // if is valid subtype\n if (/[a-z]+/.test(subtype)) {\n // always use jpg extension\n if (subtype === 'jpeg') {\n return 'jpg';\n }\n\n // return subtype\n return subtype;\n }\n\n return '';\n };\n\n var leftPad = function leftPad(value) {\n var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n return (padding + value).slice(-padding.length);\n };\n\n var getDateString = function getDateString() {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n return (\n date.getFullYear() +\n '-' +\n leftPad(date.getMonth() + 1, '00') +\n '-' +\n leftPad(date.getDate(), '00') +\n '_' +\n leftPad(date.getHours(), '00') +\n '-' +\n leftPad(date.getMinutes(), '00') +\n '-' +\n leftPad(date.getSeconds(), '00')\n );\n };\n\n var getFileFromBlob = function getFileFromBlob(blob, filename) {\n var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var extension = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var file =\n typeof type === 'string'\n ? blob.slice(0, blob.size, type)\n : blob.slice(0, blob.size, blob.type);\n file.lastModifiedDate = new Date();\n\n // copy relative path\n if (blob._relativePath) file._relativePath = blob._relativePath;\n\n // if blob has name property, use as filename if no filename supplied\n if (!isString(filename)) {\n filename = getDateString();\n }\n\n // if filename supplied but no extension and filename has extension\n if (filename && extension === null && getExtensionFromFilename(filename)) {\n file.name = filename;\n } else {\n extension = extension || guesstimateExtension(file.type);\n file.name = filename + (extension ? '.' + extension : '');\n }\n\n return file;\n };\n\n var getBlobBuilder = function getBlobBuilder() {\n return (window.BlobBuilder =\n window.BlobBuilder ||\n window.WebKitBlobBuilder ||\n window.MozBlobBuilder ||\n window.MSBlobBuilder);\n };\n\n var createBlob = function createBlob(arrayBuffer, mimeType) {\n var BB = getBlobBuilder();\n\n if (BB) {\n var bb = new BB();\n bb.append(arrayBuffer);\n return bb.getBlob(mimeType);\n }\n\n return new Blob([arrayBuffer], {\n type: mimeType,\n });\n };\n\n var getBlobFromByteStringWithMimeType = function getBlobFromByteStringWithMimeType(\n byteString,\n mimeType\n ) {\n var ab = new ArrayBuffer(byteString.length);\n var ia = new Uint8Array(ab);\n\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n\n return createBlob(ab, mimeType);\n };\n\n var getMimeTypeFromBase64DataURI = function getMimeTypeFromBase64DataURI(dataURI) {\n return (/^data:(.+);/.exec(dataURI) || [])[1] || null;\n };\n\n var getBase64DataFromBase64DataURI = function getBase64DataFromBase64DataURI(dataURI) {\n // get data part of string (remove data:image/jpeg...,)\n var data = dataURI.split(',')[1];\n\n // remove any whitespace as that causes InvalidCharacterError in IE\n return data.replace(/\\s/g, '');\n };\n\n var getByteStringFromBase64DataURI = function getByteStringFromBase64DataURI(dataURI) {\n return atob(getBase64DataFromBase64DataURI(dataURI));\n };\n\n var getBlobFromBase64DataURI = function getBlobFromBase64DataURI(dataURI) {\n var mimeType = getMimeTypeFromBase64DataURI(dataURI);\n var byteString = getByteStringFromBase64DataURI(dataURI);\n\n return getBlobFromByteStringWithMimeType(byteString, mimeType);\n };\n\n var getFileFromBase64DataURI = function getFileFromBase64DataURI(dataURI, filename, extension) {\n return getFileFromBlob(getBlobFromBase64DataURI(dataURI), filename, null, extension);\n };\n\n var getFileNameFromHeader = function getFileNameFromHeader(header) {\n // test if is content disposition header, if not exit\n if (!/^content-disposition:/i.test(header)) return null;\n\n // get filename parts\n var matches = header\n .split(/filename=|filename\\*=.+''/)\n .splice(1)\n .map(function(name) {\n return name.trim().replace(/^[\"']|[;\"']{0,2}$/g, '');\n })\n .filter(function(name) {\n return name.length;\n });\n\n return matches.length ? decodeURI(matches[matches.length - 1]) : null;\n };\n\n var getFileSizeFromHeader = function getFileSizeFromHeader(header) {\n if (/content-length:/i.test(header)) {\n var size = header.match(/[0-9]+/)[0];\n return size ? parseInt(size, 10) : null;\n }\n return null;\n };\n\n var getTranfserIdFromHeader = function getTranfserIdFromHeader(header) {\n if (/x-content-transfer-id:/i.test(header)) {\n var id = (header.split(':')[1] || '').trim();\n return id || null;\n }\n return null;\n };\n\n var getFileInfoFromHeaders = function getFileInfoFromHeaders(headers) {\n var info = {\n source: null,\n name: null,\n size: null,\n };\n\n var rows = headers.split('\\n');\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n try {\n for (\n var _iterator = rows[Symbol.iterator](), _step;\n !(_iteratorNormalCompletion = (_step = _iterator.next()).done);\n _iteratorNormalCompletion = true\n ) {\n var header = _step.value;\n\n var name = getFileNameFromHeader(header);\n if (name) {\n info.name = name;\n continue;\n }\n\n var size = getFileSizeFromHeader(header);\n if (size) {\n info.size = size;\n continue;\n }\n\n var source = getTranfserIdFromHeader(header);\n if (source) {\n info.source = source;\n continue;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return info;\n };\n\n var createFileLoader = function createFileLoader(fetchFn) {\n var state = {\n source: null,\n complete: false,\n progress: 0,\n size: null,\n timestamp: null,\n duration: 0,\n request: null,\n };\n\n var getProgress = function getProgress() {\n return state.progress;\n };\n var abort = function abort() {\n if (state.request && state.request.abort) {\n state.request.abort();\n }\n };\n\n // load source\n var load = function load() {\n // get quick reference\n var source = state.source;\n\n api.fire('init', source);\n\n // Load Files\n if (source instanceof File) {\n api.fire('load', source);\n } else if (source instanceof Blob) {\n // Load blobs, set default name to current date\n api.fire('load', getFileFromBlob(source, source.name));\n } else if (isBase64DataURI(source)) {\n // Load base 64, set default name to current date\n api.fire('load', getFileFromBase64DataURI(source));\n } else {\n // Deal as if is external URL, let's load it!\n loadURL(source);\n }\n };\n\n // loads a url\n var loadURL = function loadURL(url) {\n // is remote url and no fetch method supplied\n if (!fetchFn) {\n api.fire('error', {\n type: 'error',\n body: \"Can't load URL\",\n code: 400,\n });\n\n return;\n }\n\n // set request start\n state.timestamp = Date.now();\n\n // load file\n state.request = fetchFn(\n url,\n function(response) {\n // update duration\n state.duration = Date.now() - state.timestamp;\n\n // done!\n state.complete = true;\n\n // turn blob response into a file\n if (response instanceof Blob) {\n response = getFileFromBlob(\n response,\n response.name || getFilenameFromURL(url)\n );\n }\n\n api.fire(\n 'load',\n // if has received blob, we go with blob, if no response, we return null\n response instanceof Blob ? response : response ? response.body : null\n );\n },\n function(error) {\n api.fire(\n 'error',\n typeof error === 'string'\n ? {\n type: 'error',\n code: 0,\n body: error,\n }\n : error\n );\n },\n function(computable, current, total) {\n // collected some meta data already\n if (total) {\n state.size = total;\n }\n\n // update duration\n state.duration = Date.now() - state.timestamp;\n\n // if we can't compute progress, we're not going to fire progress events\n if (!computable) {\n state.progress = null;\n return;\n }\n\n // update progress percentage\n state.progress = current / total;\n\n // expose\n api.fire('progress', state.progress);\n },\n function() {\n api.fire('abort');\n },\n function(response) {\n var fileinfo = getFileInfoFromHeaders(\n typeof response === 'string' ? response : response.headers\n );\n api.fire('meta', {\n size: state.size || fileinfo.size,\n filename: fileinfo.name,\n source: fileinfo.source,\n });\n }\n );\n };\n\n var api = Object.assign({}, on(), {\n setSource: function setSource(source) {\n return (state.source = source);\n },\n getProgress: getProgress, // file load progress\n abort: abort, // abort file load\n load: load, // start load\n });\n\n return api;\n };\n\n var isGet = function isGet(method) {\n return /GET|HEAD/.test(method);\n };\n\n var sendRequest = function sendRequest(data, url, options) {\n var api = {\n onheaders: function onheaders() {},\n onprogress: function onprogress() {},\n onload: function onload() {},\n ontimeout: function ontimeout() {},\n onerror: function onerror() {},\n onabort: function onabort() {},\n abort: function abort() {\n aborted = true;\n xhr.abort();\n },\n };\n\n // timeout identifier, only used when timeout is defined\n var aborted = false;\n var headersReceived = false;\n\n // set default options\n options = Object.assign(\n {\n method: 'POST',\n headers: {},\n withCredentials: false,\n },\n options\n );\n\n // encode url\n url = encodeURI(url);\n\n // if method is GET, add any received data to url\n\n if (isGet(options.method) && data) {\n url =\n '' +\n url +\n encodeURIComponent(typeof data === 'string' ? data : JSON.stringify(data));\n }\n\n // create request\n var xhr = new XMLHttpRequest();\n\n // progress of load\n var process = isGet(options.method) ? xhr : xhr.upload;\n process.onprogress = function(e) {\n // no progress event when aborted ( onprogress is called once after abort() )\n if (aborted) {\n return;\n }\n\n api.onprogress(e.lengthComputable, e.loaded, e.total);\n };\n\n // tries to get header info to the app as fast as possible\n xhr.onreadystatechange = function() {\n // not interesting in these states ('unsent' and 'openend' as they don't give us any additional info)\n if (xhr.readyState < 2) {\n return;\n }\n\n // no server response\n if (xhr.readyState === 4 && xhr.status === 0) {\n return;\n }\n\n if (headersReceived) {\n return;\n }\n\n headersReceived = true;\n\n // we've probably received some useful data in response headers\n api.onheaders(xhr);\n };\n\n // load successful\n xhr.onload = function() {\n // is classified as valid response\n if (xhr.status >= 200 && xhr.status < 300) {\n api.onload(xhr);\n } else {\n api.onerror(xhr);\n }\n };\n\n // error during load\n xhr.onerror = function() {\n return api.onerror(xhr);\n };\n\n // request aborted\n xhr.onabort = function() {\n aborted = true;\n api.onabort();\n };\n\n // request timeout\n xhr.ontimeout = function() {\n return api.ontimeout(xhr);\n };\n\n // open up open up!\n xhr.open(options.method, url, true);\n\n // set timeout if defined (do it after open so IE11 plays ball)\n if (isInt(options.timeout)) {\n xhr.timeout = options.timeout;\n }\n\n // add headers\n Object.keys(options.headers).forEach(function(key) {\n var value = unescape(encodeURIComponent(options.headers[key]));\n xhr.setRequestHeader(key, value);\n });\n\n // set type of response\n if (options.responseType) {\n xhr.responseType = options.responseType;\n }\n\n // set credentials\n if (options.withCredentials) {\n xhr.withCredentials = true;\n }\n\n // let's send our data\n xhr.send(data);\n\n return api;\n };\n\n var createResponse = function createResponse(type, code, body, headers) {\n return {\n type: type,\n code: code,\n body: body,\n headers: headers,\n };\n };\n\n var createTimeoutResponse = function createTimeoutResponse(cb) {\n return function(xhr) {\n cb(createResponse('error', 0, 'Timeout', xhr.getAllResponseHeaders()));\n };\n };\n\n var hasQS = function hasQS(str) {\n return /\\?/.test(str);\n };\n var buildURL = function buildURL() {\n var url = '';\n for (var _len = arguments.length, parts = new Array(_len), _key = 0; _key < _len; _key++) {\n parts[_key] = arguments[_key];\n }\n parts.forEach(function(part) {\n url += hasQS(url) && hasQS(part) ? part.replace(/\\?/, '&') : part;\n });\n return url;\n };\n\n var createFetchFunction = function createFetchFunction() {\n var apiUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var action = arguments.length > 1 ? arguments[1] : undefined;\n // custom handler (should also handle file, load, error, progress and abort)\n if (typeof action === 'function') {\n return action;\n }\n\n // no action supplied\n if (!action || !isString(action.url)) {\n return null;\n }\n\n // set onload hanlder\n var onload =\n action.onload ||\n function(res) {\n return res;\n };\n var onerror =\n action.onerror ||\n function(res) {\n return null;\n };\n\n // internal handler\n return function(url, load, error, progress, abort, headers) {\n // do local or remote request based on if the url is external\n var request = sendRequest(\n url,\n buildURL(apiUrl, action.url),\n Object.assign({}, action, {\n responseType: 'blob',\n })\n );\n\n request.onload = function(xhr) {\n // get headers\n var headers = xhr.getAllResponseHeaders();\n\n // get filename\n var filename = getFileInfoFromHeaders(headers).name || getFilenameFromURL(url);\n\n // create response\n load(\n createResponse(\n 'load',\n xhr.status,\n action.method === 'HEAD'\n ? null\n : getFileFromBlob(onload(xhr.response), filename),\n headers\n )\n );\n };\n\n request.onerror = function(xhr) {\n error(\n createResponse(\n 'error',\n xhr.status,\n onerror(xhr.response) || xhr.statusText,\n xhr.getAllResponseHeaders()\n )\n );\n };\n\n request.onheaders = function(xhr) {\n headers(createResponse('headers', xhr.status, null, xhr.getAllResponseHeaders()));\n };\n\n request.ontimeout = createTimeoutResponse(error);\n request.onprogress = progress;\n request.onabort = abort;\n\n // should return request\n return request;\n };\n };\n\n var ChunkStatus = {\n QUEUED: 0,\n COMPLETE: 1,\n PROCESSING: 2,\n ERROR: 3,\n WAITING: 4,\n };\n\n /*\n function signature:\n (file, metadata, load, error, progress, abort, transfer, options) => {\n return {\n abort:() => {}\n }\n }\n */\n\n // apiUrl, action, name, file, metadata, load, error, progress, abort, transfer, options\n var processFileChunked = function processFileChunked(\n apiUrl,\n action,\n name,\n file,\n metadata,\n load,\n error,\n progress,\n abort,\n transfer,\n options\n ) {\n // all chunks\n var chunks = [];\n var chunkTransferId = options.chunkTransferId,\n chunkServer = options.chunkServer,\n chunkSize = options.chunkSize,\n chunkRetryDelays = options.chunkRetryDelays;\n\n // default state\n var state = {\n serverId: chunkTransferId,\n aborted: false,\n };\n\n // set onload handlers\n var ondata =\n action.ondata ||\n function(fd) {\n return fd;\n };\n var onload =\n action.onload ||\n function(xhr, method) {\n return method === 'HEAD' ? xhr.getResponseHeader('Upload-Offset') : xhr.response;\n };\n var onerror =\n action.onerror ||\n function(res) {\n return null;\n };\n\n // create server hook\n var requestTransferId = function requestTransferId(cb) {\n var formData = new FormData();\n\n // add metadata under same name\n if (isObject(metadata)) formData.append(name, JSON.stringify(metadata));\n\n var headers =\n typeof action.headers === 'function'\n ? action.headers(file, metadata)\n : Object.assign(\n {},\n\n action.headers,\n {\n 'Upload-Length': file.size,\n }\n );\n\n var requestParams = Object.assign({}, action, {\n headers: headers,\n });\n\n // send request object\n var request = sendRequest(\n ondata(formData),\n buildURL(apiUrl, action.url),\n requestParams\n );\n\n request.onload = function(xhr) {\n return cb(onload(xhr, requestParams.method));\n };\n\n request.onerror = function(xhr) {\n return error(\n createResponse(\n 'error',\n xhr.status,\n onerror(xhr.response) || xhr.statusText,\n xhr.getAllResponseHeaders()\n )\n );\n };\n\n request.ontimeout = createTimeoutResponse(error);\n };\n\n var requestTransferOffset = function requestTransferOffset(cb) {\n var requestUrl = buildURL(apiUrl, chunkServer.url, state.serverId);\n\n var headers =\n typeof action.headers === 'function'\n ? action.headers(state.serverId)\n : Object.assign(\n {},\n\n action.headers\n );\n\n var requestParams = {\n headers: headers,\n method: 'HEAD',\n };\n\n var request = sendRequest(null, requestUrl, requestParams);\n\n request.onload = function(xhr) {\n return cb(onload(xhr, requestParams.method));\n };\n\n request.onerror = function(xhr) {\n return error(\n createResponse(\n 'error',\n xhr.status,\n onerror(xhr.response) || xhr.statusText,\n xhr.getAllResponseHeaders()\n )\n );\n };\n\n request.ontimeout = createTimeoutResponse(error);\n };\n\n // create chunks\n var lastChunkIndex = Math.floor(file.size / chunkSize);\n for (var i = 0; i <= lastChunkIndex; i++) {\n var offset = i * chunkSize;\n var data = file.slice(offset, offset + chunkSize, 'application/offset+octet-stream');\n chunks[i] = {\n index: i,\n size: data.size,\n offset: offset,\n data: data,\n file: file,\n progress: 0,\n retries: _toConsumableArray(chunkRetryDelays),\n status: ChunkStatus.QUEUED,\n error: null,\n request: null,\n timeout: null,\n };\n }\n\n var completeProcessingChunks = function completeProcessingChunks() {\n return load(state.serverId);\n };\n\n var canProcessChunk = function canProcessChunk(chunk) {\n return chunk.status === ChunkStatus.QUEUED || chunk.status === ChunkStatus.ERROR;\n };\n\n var processChunk = function processChunk(chunk) {\n // processing is paused, wait here\n if (state.aborted) return;\n\n // get next chunk to process\n chunk = chunk || chunks.find(canProcessChunk);\n\n // no more chunks to process\n if (!chunk) {\n // all done?\n if (\n chunks.every(function(chunk) {\n return chunk.status === ChunkStatus.COMPLETE;\n })\n ) {\n completeProcessingChunks();\n }\n\n // no chunk to handle\n return;\n }\n\n // now processing this chunk\n chunk.status = ChunkStatus.PROCESSING;\n chunk.progress = null;\n\n // allow parsing of formdata\n var ondata =\n chunkServer.ondata ||\n function(fd) {\n return fd;\n };\n var onerror =\n chunkServer.onerror ||\n function(res) {\n return null;\n };\n var onload = chunkServer.onload || function() {};\n\n // send request object\n var requestUrl = buildURL(apiUrl, chunkServer.url, state.serverId);\n\n var headers =\n typeof chunkServer.headers === 'function'\n ? chunkServer.headers(chunk)\n : Object.assign(\n {},\n\n chunkServer.headers,\n {\n 'Content-Type': 'application/offset+octet-stream',\n 'Upload-Offset': chunk.offset,\n 'Upload-Length': file.size,\n 'Upload-Name': file.name,\n }\n );\n\n var request = (chunk.request = sendRequest(\n ondata(chunk.data),\n requestUrl,\n Object.assign({}, chunkServer, {\n headers: headers,\n })\n ));\n\n request.onload = function(xhr) {\n // allow hooking into request result\n onload(xhr, chunk.index, chunks.length);\n\n // done!\n chunk.status = ChunkStatus.COMPLETE;\n\n // remove request reference\n chunk.request = null;\n\n // start processing more chunks\n processChunks();\n };\n\n request.onprogress = function(lengthComputable, loaded, total) {\n chunk.progress = lengthComputable ? loaded : null;\n updateTotalProgress();\n };\n\n request.onerror = function(xhr) {\n chunk.status = ChunkStatus.ERROR;\n chunk.request = null;\n chunk.error = onerror(xhr.response) || xhr.statusText;\n if (!retryProcessChunk(chunk)) {\n error(\n createResponse(\n 'error',\n xhr.status,\n onerror(xhr.response) || xhr.statusText,\n xhr.getAllResponseHeaders()\n )\n );\n }\n };\n\n request.ontimeout = function(xhr) {\n chunk.status = ChunkStatus.ERROR;\n chunk.request = null;\n if (!retryProcessChunk(chunk)) {\n createTimeoutResponse(error)(xhr);\n }\n };\n\n request.onabort = function() {\n chunk.status = ChunkStatus.QUEUED;\n chunk.request = null;\n abort();\n };\n };\n\n var retryProcessChunk = function retryProcessChunk(chunk) {\n // no more retries left\n if (chunk.retries.length === 0) return false;\n\n // new retry\n chunk.status = ChunkStatus.WAITING;\n clearTimeout(chunk.timeout);\n chunk.timeout = setTimeout(function() {\n processChunk(chunk);\n }, chunk.retries.shift());\n\n // we're going to retry\n return true;\n };\n\n var updateTotalProgress = function updateTotalProgress() {\n // calculate total progress fraction\n var totalBytesTransfered = chunks.reduce(function(p, chunk) {\n if (p === null || chunk.progress === null) return null;\n return p + chunk.progress;\n }, 0);\n\n // can't compute progress\n if (totalBytesTransfered === null) return progress(false, 0, 0);\n\n // calculate progress values\n var totalSize = chunks.reduce(function(total, chunk) {\n return total + chunk.size;\n }, 0);\n\n // can update progress indicator\n progress(true, totalBytesTransfered, totalSize);\n };\n\n // process new chunks\n var processChunks = function processChunks() {\n var totalProcessing = chunks.filter(function(chunk) {\n return chunk.status === ChunkStatus.PROCESSING;\n }).length;\n if (totalProcessing >= 1) return;\n processChunk();\n };\n\n var abortChunks = function abortChunks() {\n chunks.forEach(function(chunk) {\n clearTimeout(chunk.timeout);\n if (chunk.request) {\n chunk.request.abort();\n }\n });\n };\n\n // let's go!\n if (!state.serverId) {\n requestTransferId(function(serverId) {\n // stop here if aborted, might have happened in between request and callback\n if (state.aborted) return;\n\n // pass back to item so we can use it if something goes wrong\n transfer(serverId);\n\n // store internally\n state.serverId = serverId;\n processChunks();\n });\n } else {\n requestTransferOffset(function(offset) {\n // stop here if aborted, might have happened in between request and callback\n if (state.aborted) return;\n\n // mark chunks with lower offset as complete\n chunks\n .filter(function(chunk) {\n return chunk.offset < offset;\n })\n .forEach(function(chunk) {\n chunk.status = ChunkStatus.COMPLETE;\n chunk.progress = chunk.size;\n });\n\n // continue processing\n processChunks();\n });\n }\n\n return {\n abort: function abort() {\n state.aborted = true;\n abortChunks();\n },\n };\n };\n\n /*\n function signature:\n (file, metadata, load, error, progress, abort) => {\n return {\n abort:() => {}\n }\n }\n */\n var createFileProcessorFunction = function createFileProcessorFunction(\n apiUrl,\n action,\n name,\n options\n ) {\n return function(file, metadata, load, error, progress, abort, transfer) {\n // no file received\n if (!file) return;\n\n // if was passed a file, and we can chunk it, exit here\n var canChunkUpload = options.chunkUploads;\n var shouldChunkUpload = canChunkUpload && file.size > options.chunkSize;\n var willChunkUpload = canChunkUpload && (shouldChunkUpload || options.chunkForce);\n if (file instanceof Blob && willChunkUpload)\n return processFileChunked(\n apiUrl,\n action,\n name,\n file,\n metadata,\n load,\n error,\n progress,\n abort,\n transfer,\n options\n );\n\n // set handlers\n var ondata =\n action.ondata ||\n function(fd) {\n return fd;\n };\n var onload =\n action.onload ||\n function(res) {\n return res;\n };\n var onerror =\n action.onerror ||\n function(res) {\n return null;\n };\n\n var headers =\n typeof action.headers === 'function'\n ? action.headers(file, metadata) || {}\n : Object.assign(\n {},\n\n action.headers\n );\n\n var requestParams = Object.assign({}, action, {\n headers: headers,\n });\n\n // create formdata object\n var formData = new FormData();\n\n // add metadata under same name\n if (isObject(metadata)) {\n formData.append(name, JSON.stringify(metadata));\n }\n\n // Turn into an array of objects so no matter what the input, we can handle it the same way\n (file instanceof Blob ? [{ name: null, file: file }] : file).forEach(function(item) {\n formData.append(\n name,\n item.file,\n item.name === null ? item.file.name : '' + item.name + item.file.name\n );\n });\n\n // send request object\n var request = sendRequest(\n ondata(formData),\n buildURL(apiUrl, action.url),\n requestParams\n );\n request.onload = function(xhr) {\n load(\n createResponse(\n 'load',\n xhr.status,\n onload(xhr.response),\n xhr.getAllResponseHeaders()\n )\n );\n };\n\n request.onerror = function(xhr) {\n error(\n createResponse(\n 'error',\n xhr.status,\n onerror(xhr.response) || xhr.statusText,\n xhr.getAllResponseHeaders()\n )\n );\n };\n\n request.ontimeout = createTimeoutResponse(error);\n request.onprogress = progress;\n request.onabort = abort;\n\n // should return request\n return request;\n };\n };\n\n var createProcessorFunction = function createProcessorFunction() {\n var apiUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var name = arguments.length > 2 ? arguments[2] : undefined;\n var options = arguments.length > 3 ? arguments[3] : undefined;\n\n // custom handler (should also handle file, load, error, progress and abort)\n if (typeof action === 'function')\n return function() {\n for (\n var _len = arguments.length, params = new Array(_len), _key = 0;\n _key < _len;\n _key++\n ) {\n params[_key] = arguments[_key];\n }\n return action.apply(void 0, [name].concat(params, [options]));\n };\n\n // no action supplied\n if (!action || !isString(action.url)) return null;\n\n // internal handler\n return createFileProcessorFunction(apiUrl, action, name, options);\n };\n\n /*\n function signature:\n (uniqueFileId, load, error) => { }\n */\n var createRevertFunction = function createRevertFunction() {\n var apiUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var action = arguments.length > 1 ? arguments[1] : undefined;\n // is custom implementation\n if (typeof action === 'function') {\n return action;\n }\n\n // no action supplied, return stub function, interface will work, but file won't be removed\n if (!action || !isString(action.url)) {\n return function(uniqueFileId, load) {\n return load();\n };\n }\n\n // set onload hanlder\n var onload =\n action.onload ||\n function(res) {\n return res;\n };\n var onerror =\n action.onerror ||\n function(res) {\n return null;\n };\n\n // internal implementation\n return function(uniqueFileId, load, error) {\n var request = sendRequest(\n uniqueFileId,\n apiUrl + action.url,\n action // contains method, headers and withCredentials properties\n );\n request.onload = function(xhr) {\n load(\n createResponse(\n 'load',\n xhr.status,\n onload(xhr.response),\n xhr.getAllResponseHeaders()\n )\n );\n };\n\n request.onerror = function(xhr) {\n error(\n createResponse(\n 'error',\n xhr.status,\n onerror(xhr.response) || xhr.statusText,\n xhr.getAllResponseHeaders()\n )\n );\n };\n\n request.ontimeout = createTimeoutResponse(error);\n\n return request;\n };\n };\n\n var getRandomNumber = function getRandomNumber() {\n var min = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n return min + Math.random() * (max - min);\n };\n\n var createPerceivedPerformanceUpdater = function createPerceivedPerformanceUpdater(cb) {\n var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var tickMin = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 25;\n var tickMax = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 250;\n var timeout = null;\n var start = Date.now();\n\n var tick = function tick() {\n var runtime = Date.now() - start;\n var delay = getRandomNumber(tickMin, tickMax);\n\n if (runtime + delay > duration) {\n delay = runtime + delay - duration;\n }\n\n var progress = runtime / duration;\n if (progress >= 1 || document.hidden) {\n cb(1);\n return;\n }\n\n cb(progress);\n\n timeout = setTimeout(tick, delay);\n };\n\n if (duration > 0) tick();\n\n return {\n clear: function clear() {\n clearTimeout(timeout);\n },\n };\n };\n\n var createFileProcessor = function createFileProcessor(processFn, options) {\n var state = {\n complete: false,\n perceivedProgress: 0,\n perceivedPerformanceUpdater: null,\n progress: null,\n timestamp: null,\n perceivedDuration: 0,\n duration: 0,\n request: null,\n response: null,\n };\n var allowMinimumUploadDuration = options.allowMinimumUploadDuration;\n\n var process = function process(file, metadata) {\n var progressFn = function progressFn() {\n // we've not yet started the real download, stop here\n // the request might not go through, for instance, there might be some server trouble\n // if state.progress is null, the server does not allow computing progress and we show the spinner instead\n if (state.duration === 0 || state.progress === null) return;\n\n // as we're now processing, fire the progress event\n api.fire('progress', api.getProgress());\n };\n\n var completeFn = function completeFn() {\n state.complete = true;\n api.fire('load-perceived', state.response.body);\n };\n\n // let's start processing\n api.fire('start');\n\n // set request start\n state.timestamp = Date.now();\n\n // create perceived performance progress indicator\n state.perceivedPerformanceUpdater = createPerceivedPerformanceUpdater(\n function(progress) {\n state.perceivedProgress = progress;\n state.perceivedDuration = Date.now() - state.timestamp;\n\n progressFn();\n\n // if fake progress is done, and a response has been received,\n // and we've not yet called the complete method\n if (state.response && state.perceivedProgress === 1 && !state.complete) {\n // we done!\n completeFn();\n }\n },\n // random delay as in a list of files you start noticing\n // files uploading at the exact same speed\n allowMinimumUploadDuration ? getRandomNumber(750, 1500) : 0\n );\n\n // remember request so we can abort it later\n state.request = processFn(\n // the file to process\n file,\n\n // the metadata to send along\n metadata,\n\n // callbacks (load, error, progress, abort, transfer)\n // load expects the body to be a server id if\n // you want to make use of revert\n function(response) {\n // we put the response in state so we can access\n // it outside of this method\n state.response = isObject(response)\n ? response\n : {\n type: 'load',\n code: 200,\n body: '' + response,\n headers: {},\n };\n\n // update duration\n state.duration = Date.now() - state.timestamp;\n\n // force progress to 1 as we're now done\n state.progress = 1;\n\n // actual load is done let's share results\n api.fire('load', state.response.body);\n\n // we are really done\n // if perceived progress is 1 ( wait for perceived progress to complete )\n // or if server does not support progress ( null )\n if (\n !allowMinimumUploadDuration ||\n (allowMinimumUploadDuration && state.perceivedProgress === 1)\n ) {\n completeFn();\n }\n },\n\n // error is expected to be an object with type, code, body\n function(error) {\n // cancel updater\n state.perceivedPerformanceUpdater.clear();\n\n // update others about this error\n api.fire(\n 'error',\n isObject(error)\n ? error\n : {\n type: 'error',\n code: 0,\n body: '' + error,\n }\n );\n },\n\n // actual processing progress\n function(computable, current, total) {\n // update actual duration\n state.duration = Date.now() - state.timestamp;\n\n // update actual progress\n state.progress = computable ? current / total : null;\n\n progressFn();\n },\n\n // abort does not expect a value\n function() {\n // stop updater\n state.perceivedPerformanceUpdater.clear();\n\n // fire the abort event so we can switch visuals\n api.fire('abort', state.response ? state.response.body : null);\n },\n\n // register the id for this transfer\n function(transferId) {\n api.fire('transfer', transferId);\n }\n );\n };\n\n var abort = function abort() {\n // no request running, can't abort\n if (!state.request) return;\n\n // stop updater\n state.perceivedPerformanceUpdater.clear();\n\n // abort actual request\n if (state.request.abort) state.request.abort();\n\n // if has response object, we've completed the request\n state.complete = true;\n };\n\n var reset = function reset() {\n abort();\n state.complete = false;\n state.perceivedProgress = 0;\n state.progress = 0;\n state.timestamp = null;\n state.perceivedDuration = 0;\n state.duration = 0;\n state.request = null;\n state.response = null;\n };\n\n var getProgress = allowMinimumUploadDuration\n ? function() {\n return state.progress ? Math.min(state.progress, state.perceivedProgress) : null;\n }\n : function() {\n return state.progress || null;\n };\n\n var getDuration = allowMinimumUploadDuration\n ? function() {\n return Math.min(state.duration, state.perceivedDuration);\n }\n : function() {\n return state.duration;\n };\n\n var api = Object.assign({}, on(), {\n process: process, // start processing file\n abort: abort, // abort active process request\n getProgress: getProgress,\n getDuration: getDuration,\n reset: reset,\n });\n\n return api;\n };\n\n var getFilenameWithoutExtension = function getFilenameWithoutExtension(name) {\n return name.substring(0, name.lastIndexOf('.')) || name;\n };\n\n var createFileStub = function createFileStub(source) {\n var data = [source.name, source.size, source.type];\n\n // is blob or base64, then we need to set the name\n if (source instanceof Blob || isBase64DataURI(source)) {\n data[0] = source.name || getDateString();\n } else if (isBase64DataURI(source)) {\n // if is base64 data uri we need to determine the average size and type\n data[1] = source.length;\n data[2] = getMimeTypeFromBase64DataURI(source);\n } else if (isString(source)) {\n // url\n data[0] = getFilenameFromURL(source);\n data[1] = 0;\n data[2] = 'application/octet-stream';\n }\n\n return {\n name: data[0],\n size: data[1],\n type: data[2],\n };\n };\n\n var isFile = function isFile(value) {\n return !!(value instanceof File || (value instanceof Blob && value.name));\n };\n\n var deepCloneObject = function deepCloneObject(src) {\n if (!isObject(src)) return src;\n var target = isArray(src) ? [] : {};\n for (var key in src) {\n if (!src.hasOwnProperty(key)) continue;\n var v = src[key];\n target[key] = v && isObject(v) ? deepCloneObject(v) : v;\n }\n return target;\n };\n\n var createItem = function createItem() {\n var origin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var serverFileReference =\n arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var file = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n // unique id for this item, is used to identify the item across views\n var id = getUniqueId();\n\n /**\n * Internal item state\n */\n var state = {\n // is archived\n archived: false,\n\n // if is frozen, no longer fires events\n frozen: false,\n\n // removed from view\n released: false,\n\n // original source\n source: null,\n\n // file model reference\n file: file,\n\n // id of file on server\n serverFileReference: serverFileReference,\n\n // id of file transfer on server\n transferId: null,\n\n // is aborted\n processingAborted: false,\n\n // current item status\n status: serverFileReference ? ItemStatus.PROCESSING_COMPLETE : ItemStatus.INIT,\n\n // active processes\n activeLoader: null,\n activeProcessor: null,\n };\n\n // callback used when abort processing is called to link back to the resolve method\n var abortProcessingRequestComplete = null;\n\n /**\n * Externally added item metadata\n */\n var metadata = {};\n\n // item data\n var setStatus = function setStatus(status) {\n return (state.status = status);\n };\n\n // fire event unless the item has been archived\n var fire = function fire(event) {\n if (state.released || state.frozen) return;\n for (\n var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1;\n _key < _len;\n _key++\n ) {\n params[_key - 1] = arguments[_key];\n }\n api.fire.apply(api, [event].concat(params));\n };\n\n // file data\n var getFileExtension = function getFileExtension() {\n return getExtensionFromFilename(state.file.name);\n };\n var getFileType = function getFileType() {\n return state.file.type;\n };\n var getFileSize = function getFileSize() {\n return state.file.size;\n };\n var getFile = function getFile() {\n return state.file;\n };\n\n //\n // logic to load a file\n //\n var load = function load(source, loader, onload) {\n // remember the original item source\n state.source = source;\n\n // source is known\n api.fireSync('init');\n\n // file stub is already there\n if (state.file) {\n api.fireSync('load-skip');\n return;\n }\n\n // set a stub file object while loading the actual data\n state.file = createFileStub(source);\n\n // starts loading\n loader.on('init', function() {\n fire('load-init');\n });\n\n // we'eve received a size indication, let's update the stub\n loader.on('meta', function(meta) {\n // set size of file stub\n state.file.size = meta.size;\n\n // set name of file stub\n state.file.filename = meta.filename;\n\n // if has received source, we done\n if (meta.source) {\n origin = FileOrigin.LIMBO;\n state.serverFileReference = meta.source;\n state.status = ItemStatus.PROCESSING_COMPLETE;\n }\n\n // size has been updated\n fire('load-meta');\n });\n\n // the file is now loading we need to update the progress indicators\n loader.on('progress', function(progress) {\n setStatus(ItemStatus.LOADING);\n\n fire('load-progress', progress);\n });\n\n // an error was thrown while loading the file, we need to switch to error state\n loader.on('error', function(error) {\n setStatus(ItemStatus.LOAD_ERROR);\n\n fire('load-request-error', error);\n });\n\n // user or another process aborted the file load (cannot retry)\n loader.on('abort', function() {\n setStatus(ItemStatus.INIT);\n fire('load-abort');\n });\n\n // done loading\n loader.on('load', function(file) {\n // as we've now loaded the file the loader is no longer required\n state.activeLoader = null;\n\n // called when file has loaded succesfully\n var success = function success(result) {\n // set (possibly) transformed file\n state.file = isFile(result) ? result : state.file;\n\n // file received\n if (origin === FileOrigin.LIMBO && state.serverFileReference) {\n setStatus(ItemStatus.PROCESSING_COMPLETE);\n } else {\n setStatus(ItemStatus.IDLE);\n }\n\n fire('load');\n };\n\n var error = function error(result) {\n // set original file\n state.file = file;\n fire('load-meta');\n\n setStatus(ItemStatus.LOAD_ERROR);\n fire('load-file-error', result);\n };\n\n // if we already have a server file reference, we don't need to call the onload method\n if (state.serverFileReference) {\n success(file);\n return;\n }\n\n // no server id, let's give this file the full treatment\n onload(file, success, error);\n });\n\n // set loader source data\n loader.setSource(source);\n\n // set as active loader\n state.activeLoader = loader;\n\n // load the source data\n loader.load();\n };\n\n var retryLoad = function retryLoad() {\n if (!state.activeLoader) {\n return;\n }\n state.activeLoader.load();\n };\n\n var abortLoad = function abortLoad() {\n if (state.activeLoader) {\n state.activeLoader.abort();\n return;\n }\n setStatus(ItemStatus.INIT);\n fire('load-abort');\n };\n\n //\n // logic to process a file\n //\n var process = function process(processor, onprocess) {\n // processing was aborted\n if (state.processingAborted) {\n state.processingAborted = false;\n return;\n }\n\n // now processing\n setStatus(ItemStatus.PROCESSING);\n\n // reset abort callback\n abortProcessingRequestComplete = null;\n\n // if no file loaded we'll wait for the load event\n if (!(state.file instanceof Blob)) {\n api.on('load', function() {\n process(processor, onprocess);\n });\n return;\n }\n\n // setup processor\n processor.on('load', function(serverFileReference) {\n // need this id to be able to revert the upload\n state.transferId = null;\n state.serverFileReference = serverFileReference;\n });\n\n // register transfer id\n processor.on('transfer', function(transferId) {\n // need this id to be able to revert the upload\n state.transferId = transferId;\n });\n\n processor.on('load-perceived', function(serverFileReference) {\n // no longer required\n state.activeProcessor = null;\n\n // need this id to be able to rever the upload\n state.transferId = null;\n state.serverFileReference = serverFileReference;\n\n setStatus(ItemStatus.PROCESSING_COMPLETE);\n fire('process-complete', serverFileReference);\n });\n\n processor.on('start', function() {\n fire('process-start');\n });\n\n processor.on('error', function(error) {\n state.activeProcessor = null;\n setStatus(ItemStatus.PROCESSING_ERROR);\n fire('process-error', error);\n });\n\n processor.on('abort', function(serverFileReference) {\n state.activeProcessor = null;\n\n // if file was uploaded but processing was cancelled during perceived processor time store file reference\n state.serverFileReference = serverFileReference;\n\n setStatus(ItemStatus.IDLE);\n fire('process-abort');\n\n // has timeout so doesn't interfere with remove action\n if (abortProcessingRequestComplete) {\n abortProcessingRequestComplete();\n }\n });\n\n processor.on('progress', function(progress) {\n fire('process-progress', progress);\n });\n\n // when successfully transformed\n var success = function success(file) {\n // if was archived in the mean time, don't process\n if (state.archived) return;\n\n // process file!\n processor.process(file, Object.assign({}, metadata));\n };\n\n // something went wrong during transform phase\n var error = console.error;\n\n // start processing the file\n onprocess(state.file, success, error);\n\n // set as active processor\n state.activeProcessor = processor;\n };\n\n var requestProcessing = function requestProcessing() {\n state.processingAborted = false;\n setStatus(ItemStatus.PROCESSING_QUEUED);\n };\n\n var abortProcessing = function abortProcessing() {\n return new Promise(function(resolve) {\n if (!state.activeProcessor) {\n state.processingAborted = true;\n\n setStatus(ItemStatus.IDLE);\n fire('process-abort');\n\n resolve();\n return;\n }\n\n abortProcessingRequestComplete = function abortProcessingRequestComplete() {\n resolve();\n };\n\n state.activeProcessor.abort();\n });\n };\n\n //\n // logic to revert a processed file\n //\n var revert = function revert(revertFileUpload, forceRevert) {\n return new Promise(function(resolve, reject) {\n // a completed upload will have a serverFileReference, a failed chunked upload where\n // getting a serverId succeeded but >=0 chunks have been uploaded will have transferId set\n var serverTransferId =\n state.serverFileReference !== null\n ? state.serverFileReference\n : state.transferId;\n\n // cannot revert without a server id for this process\n if (serverTransferId === null) {\n resolve();\n return;\n }\n\n // revert the upload (fire and forget)\n revertFileUpload(\n serverTransferId,\n function() {\n // reset file server id and transfer id as now it's not available on the server\n state.serverFileReference = null;\n state.transferId = null;\n resolve();\n },\n function(error) {\n // don't set error state when reverting is optional, it will always resolve\n if (!forceRevert) {\n resolve();\n return;\n }\n\n // oh no errors\n setStatus(ItemStatus.PROCESSING_REVERT_ERROR);\n fire('process-revert-error');\n reject(error);\n }\n );\n\n // fire event\n setStatus(ItemStatus.IDLE);\n fire('process-revert');\n });\n };\n\n // exposed methods\n var _setMetadata = function setMetadata(key, value, silent) {\n var keys = key.split('.');\n var root = keys[0];\n var last = keys.pop();\n var data = metadata;\n keys.forEach(function(key) {\n return (data = data[key]);\n });\n\n // compare old value against new value, if they're the same, we're not updating\n if (JSON.stringify(data[last]) === JSON.stringify(value)) return;\n\n // update value\n data[last] = value;\n\n // fire update\n fire('metadata-update', {\n key: root,\n value: metadata[root],\n silent: silent,\n });\n };\n\n var getMetadata = function getMetadata(key) {\n return deepCloneObject(key ? metadata[key] : metadata);\n };\n\n var api = Object.assign(\n {\n id: {\n get: function get() {\n return id;\n },\n },\n origin: {\n get: function get() {\n return origin;\n },\n set: function set(value) {\n return (origin = value);\n },\n },\n serverId: {\n get: function get() {\n return state.serverFileReference;\n },\n },\n transferId: {\n get: function get() {\n return state.transferId;\n },\n },\n status: {\n get: function get() {\n return state.status;\n },\n },\n filename: {\n get: function get() {\n return state.file.name;\n },\n },\n filenameWithoutExtension: {\n get: function get() {\n return getFilenameWithoutExtension(state.file.name);\n },\n },\n fileExtension: { get: getFileExtension },\n fileType: { get: getFileType },\n fileSize: { get: getFileSize },\n file: { get: getFile },\n relativePath: {\n get: function get() {\n return state.file._relativePath;\n },\n },\n\n source: {\n get: function get() {\n return state.source;\n },\n },\n\n getMetadata: getMetadata,\n setMetadata: function setMetadata(key, value, silent) {\n if (isObject(key)) {\n var data = key;\n Object.keys(data).forEach(function(key) {\n _setMetadata(key, data[key], value);\n });\n return key;\n }\n _setMetadata(key, value, silent);\n return value;\n },\n\n extend: function extend(name, handler) {\n return (itemAPI[name] = handler);\n },\n\n abortLoad: abortLoad,\n retryLoad: retryLoad,\n requestProcessing: requestProcessing,\n abortProcessing: abortProcessing,\n\n load: load,\n process: process,\n revert: revert,\n },\n\n on(),\n {\n freeze: function freeze() {\n return (state.frozen = true);\n },\n\n release: function release() {\n return (state.released = true);\n },\n released: {\n get: function get() {\n return state.released;\n },\n },\n\n archive: function archive() {\n return (state.archived = true);\n },\n archived: {\n get: function get() {\n return state.archived;\n },\n },\n\n // replace source and file object\n setFile: function setFile(file) {\n return (state.file = file);\n },\n }\n );\n\n // create it here instead of returning it instantly so we can extend it later\n var itemAPI = createObject(api);\n\n return itemAPI;\n };\n\n var getItemIndexByQuery = function getItemIndexByQuery(items, query) {\n // just return first index\n if (isEmpty(query)) {\n return 0;\n }\n\n // invalid queries\n if (!isString(query)) {\n return -1;\n }\n\n // return item by id (or -1 if not found)\n return items.findIndex(function(item) {\n return item.id === query;\n });\n };\n\n var getItemById = function getItemById(items, itemId) {\n var index = getItemIndexByQuery(items, itemId);\n if (index < 0) {\n return;\n }\n return items[index] || null;\n };\n\n var fetchBlob = function fetchBlob(url, load, error, progress, abort, headers) {\n var request = sendRequest(null, url, {\n method: 'GET',\n responseType: 'blob',\n });\n\n request.onload = function(xhr) {\n // get headers\n var headers = xhr.getAllResponseHeaders();\n\n // get filename\n var filename = getFileInfoFromHeaders(headers).name || getFilenameFromURL(url);\n\n // create response\n load(\n createResponse('load', xhr.status, getFileFromBlob(xhr.response, filename), headers)\n );\n };\n\n request.onerror = function(xhr) {\n error(createResponse('error', xhr.status, xhr.statusText, xhr.getAllResponseHeaders()));\n };\n\n request.onheaders = function(xhr) {\n headers(createResponse('headers', xhr.status, null, xhr.getAllResponseHeaders()));\n };\n\n request.ontimeout = createTimeoutResponse(error);\n request.onprogress = progress;\n request.onabort = abort;\n\n // should return request\n return request;\n };\n\n var getDomainFromURL = function getDomainFromURL(url) {\n if (url.indexOf('//') === 0) {\n url = location.protocol + url;\n }\n return url\n .toLowerCase()\n .replace('blob:', '')\n .replace(/([a-z])?:\\/\\//, '$1')\n .split('/')[0];\n };\n\n var isExternalURL = function isExternalURL(url) {\n return (\n (url.indexOf(':') > -1 || url.indexOf('//') > -1) &&\n getDomainFromURL(location.href) !== getDomainFromURL(url)\n );\n };\n\n var dynamicLabel = function dynamicLabel(label) {\n return function() {\n return isFunction(label) ? label.apply(void 0, arguments) : label;\n };\n };\n\n var isMockItem = function isMockItem(item) {\n return !isFile(item.file);\n };\n\n var listUpdated = function listUpdated(dispatch, state) {\n clearTimeout(state.listUpdateTimeout);\n state.listUpdateTimeout = setTimeout(function() {\n dispatch('DID_UPDATE_ITEMS', { items: getActiveItems(state.items) });\n }, 0);\n };\n\n var optionalPromise = function optionalPromise(fn) {\n for (\n var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1;\n _key < _len;\n _key++\n ) {\n params[_key - 1] = arguments[_key];\n }\n return new Promise(function(resolve) {\n if (!fn) {\n return resolve(true);\n }\n\n var result = fn.apply(void 0, params);\n\n if (result == null) {\n return resolve(true);\n }\n\n if (typeof result === 'boolean') {\n return resolve(result);\n }\n\n if (typeof result.then === 'function') {\n result.then(resolve);\n }\n });\n };\n\n var sortItems = function sortItems(state, compare) {\n state.items.sort(function(a, b) {\n return compare(createItemAPI(a), createItemAPI(b));\n });\n };\n\n // returns item based on state\n var getItemByQueryFromState = function getItemByQueryFromState(state, itemHandler) {\n return function() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var query = _ref.query,\n _ref$success = _ref.success,\n success = _ref$success === void 0 ? function() {} : _ref$success,\n _ref$failure = _ref.failure,\n failure = _ref$failure === void 0 ? function() {} : _ref$failure,\n options = _objectWithoutProperties(_ref, ['query', 'success', 'failure']);\n var item = getItemByQuery(state.items, query);\n if (!item) {\n failure({\n error: createResponse('error', 0, 'Item not found'),\n file: null,\n });\n\n return;\n }\n itemHandler(item, success, failure, options || {});\n };\n };\n\n var actions = function actions(dispatch, query, state) {\n return {\n /**\n * Aborts all ongoing processes\n */\n ABORT_ALL: function ABORT_ALL() {\n getActiveItems(state.items).forEach(function(item) {\n item.freeze();\n item.abortLoad();\n item.abortProcessing();\n });\n },\n\n /**\n * Sets initial files\n */\n DID_SET_FILES: function DID_SET_FILES(_ref2) {\n var _ref2$value = _ref2.value,\n value = _ref2$value === void 0 ? [] : _ref2$value;\n // map values to file objects\n var files = value.map(function(file) {\n return {\n source: file.source ? file.source : file,\n options: file.options,\n };\n });\n\n // loop over files, if file is in list, leave it be, if not, remove\n // test if items should be moved\n var activeItems = getActiveItems(state.items);\n\n activeItems.forEach(function(item) {\n // if item not is in new value, remove\n if (\n !files.find(function(file) {\n return file.source === item.source || file.source === item.file;\n })\n ) {\n dispatch('REMOVE_ITEM', { query: item, remove: false });\n }\n });\n\n // add new files\n activeItems = getActiveItems(state.items);\n files.forEach(function(file, index) {\n // if file is already in list\n if (\n activeItems.find(function(item) {\n return item.source === file.source || item.file === file.source;\n })\n )\n return;\n\n // not in list, add\n dispatch(\n 'ADD_ITEM',\n Object.assign({}, file, {\n interactionMethod: InteractionMethod.NONE,\n index: index,\n })\n );\n });\n },\n\n DID_UPDATE_ITEM_METADATA: function DID_UPDATE_ITEM_METADATA(_ref3) {\n var id = _ref3.id,\n action = _ref3.action,\n change = _ref3.change;\n // don't do anything\n if (change.silent) return;\n\n // if is called multiple times in close succession we combined all calls together to save resources\n clearTimeout(state.itemUpdateTimeout);\n state.itemUpdateTimeout = setTimeout(function() {\n var item = getItemById(state.items, id);\n\n // only revert and attempt to upload when we're uploading to a server\n if (!query('IS_ASYNC')) {\n // should we update the output data\n applyFilterChain('SHOULD_PREPARE_OUTPUT', false, {\n item: item,\n query: query,\n action: action,\n change: change,\n }).then(function(shouldPrepareOutput) {\n // plugins determined the output data should be prepared (or not), can be adjusted with beforePrepareOutput hook\n var beforePrepareFile = query('GET_BEFORE_PREPARE_FILE');\n if (beforePrepareFile)\n shouldPrepareOutput = beforePrepareFile(item, shouldPrepareOutput);\n\n if (!shouldPrepareOutput) return;\n\n dispatch(\n 'REQUEST_PREPARE_OUTPUT',\n {\n query: id,\n item: item,\n success: function success(file) {\n dispatch('DID_PREPARE_OUTPUT', { id: id, file: file });\n },\n },\n\n true\n );\n });\n\n return;\n }\n\n // if is local item we need to enable upload button so change can be propagated to server\n if (item.origin === FileOrigin.LOCAL) {\n dispatch('DID_LOAD_ITEM', {\n id: item.id,\n error: null,\n serverFileReference: item.source,\n });\n }\n\n // for async scenarios\n var upload = function upload() {\n // we push this forward a bit so the interface is updated correctly\n setTimeout(function() {\n dispatch('REQUEST_ITEM_PROCESSING', { query: id });\n }, 32);\n };\n\n var revert = function revert(doUpload) {\n item.revert(\n createRevertFunction(\n state.options.server.url,\n state.options.server.revert\n ),\n query('GET_FORCE_REVERT')\n )\n .then(doUpload ? upload : function() {})\n .catch(function() {});\n };\n\n var abort = function abort(doUpload) {\n item.abortProcessing().then(doUpload ? upload : function() {});\n };\n\n // if we should re-upload the file immediately\n if (item.status === ItemStatus.PROCESSING_COMPLETE) {\n return revert(state.options.instantUpload);\n }\n\n // if currently uploading, cancel upload\n if (item.status === ItemStatus.PROCESSING) {\n return abort(state.options.instantUpload);\n }\n\n if (state.options.instantUpload) {\n upload();\n }\n }, 0);\n },\n\n MOVE_ITEM: function MOVE_ITEM(_ref4) {\n var query = _ref4.query,\n index = _ref4.index;\n var item = getItemByQuery(state.items, query);\n if (!item) return;\n var currentIndex = state.items.indexOf(item);\n index = limit(index, 0, state.items.length - 1);\n if (currentIndex === index) return;\n state.items.splice(index, 0, state.items.splice(currentIndex, 1)[0]);\n },\n\n SORT: function SORT(_ref5) {\n var compare = _ref5.compare;\n sortItems(state, compare);\n dispatch('DID_SORT_ITEMS', {\n items: query('GET_ACTIVE_ITEMS'),\n });\n },\n\n ADD_ITEMS: function ADD_ITEMS(_ref6) {\n var items = _ref6.items,\n index = _ref6.index,\n interactionMethod = _ref6.interactionMethod,\n _ref6$success = _ref6.success,\n success = _ref6$success === void 0 ? function() {} : _ref6$success,\n _ref6$failure = _ref6.failure,\n failure = _ref6$failure === void 0 ? function() {} : _ref6$failure;\n var currentIndex = index;\n\n if (index === -1 || typeof index === 'undefined') {\n var insertLocation = query('GET_ITEM_INSERT_LOCATION');\n var totalItems = query('GET_TOTAL_ITEMS');\n currentIndex = insertLocation === 'before' ? 0 : totalItems;\n }\n\n var ignoredFiles = query('GET_IGNORED_FILES');\n var isValidFile = function isValidFile(source) {\n return isFile(source)\n ? !ignoredFiles.includes(source.name.toLowerCase())\n : !isEmpty(source);\n };\n var validItems = items.filter(isValidFile);\n\n var promises = validItems.map(function(source) {\n return new Promise(function(resolve, reject) {\n dispatch('ADD_ITEM', {\n interactionMethod: interactionMethod,\n source: source.source || source,\n success: resolve,\n failure: reject,\n index: currentIndex++,\n options: source.options || {},\n });\n });\n });\n\n Promise.all(promises)\n .then(success)\n .catch(failure);\n },\n\n /**\n * @param source\n * @param index\n * @param interactionMethod\n */\n ADD_ITEM: function ADD_ITEM(_ref7) {\n var source = _ref7.source,\n _ref7$index = _ref7.index,\n index = _ref7$index === void 0 ? -1 : _ref7$index,\n interactionMethod = _ref7.interactionMethod,\n _ref7$success = _ref7.success,\n success = _ref7$success === void 0 ? function() {} : _ref7$success,\n _ref7$failure = _ref7.failure,\n failure = _ref7$failure === void 0 ? function() {} : _ref7$failure,\n _ref7$options = _ref7.options,\n options = _ref7$options === void 0 ? {} : _ref7$options;\n // if no source supplied\n if (isEmpty(source)) {\n failure({\n error: createResponse('error', 0, 'No source'),\n file: null,\n });\n\n return;\n }\n\n // filter out invalid file items, used to filter dropped directory contents\n if (\n isFile(source) &&\n state.options.ignoredFiles.includes(source.name.toLowerCase())\n ) {\n // fail silently\n return;\n }\n\n // test if there's still room in the list of files\n if (!hasRoomForItem(state)) {\n // if multiple allowed, we can't replace\n // or if only a single item is allowed but we're not allowed to replace it we exit\n if (\n state.options.allowMultiple ||\n (!state.options.allowMultiple && !state.options.allowReplace)\n ) {\n var error = createResponse('warning', 0, 'Max files');\n\n dispatch('DID_THROW_MAX_FILES', {\n source: source,\n error: error,\n });\n\n failure({ error: error, file: null });\n\n return;\n }\n\n // let's replace the item\n // id of first item we're about to remove\n var _item = getActiveItems(state.items)[0];\n\n // if has been processed remove it from the server as well\n if (\n _item.status === ItemStatus.PROCESSING_COMPLETE ||\n _item.status === ItemStatus.PROCESSING_REVERT_ERROR\n ) {\n var forceRevert = query('GET_FORCE_REVERT');\n _item\n .revert(\n createRevertFunction(\n state.options.server.url,\n state.options.server.revert\n ),\n forceRevert\n )\n .then(function() {\n if (!forceRevert) return;\n\n // try to add now\n dispatch('ADD_ITEM', {\n source: source,\n index: index,\n interactionMethod: interactionMethod,\n success: success,\n failure: failure,\n options: options,\n });\n })\n .catch(function() {}); // no need to handle this catch state for now\n\n if (forceRevert) return;\n }\n\n // remove first item as it will be replaced by this item\n dispatch('REMOVE_ITEM', { query: _item.id });\n }\n\n // where did the file originate\n var origin =\n options.type === 'local'\n ? FileOrigin.LOCAL\n : options.type === 'limbo'\n ? FileOrigin.LIMBO\n : FileOrigin.INPUT;\n\n // create a new blank item\n var item = createItem(\n // where did this file come from\n origin,\n\n // an input file never has a server file reference\n origin === FileOrigin.INPUT ? null : source,\n\n // file mock data, if defined\n options.file\n );\n\n // set initial meta data\n Object.keys(options.metadata || {}).forEach(function(key) {\n item.setMetadata(key, options.metadata[key]);\n });\n\n // created the item, let plugins add methods\n applyFilters('DID_CREATE_ITEM', item, { query: query, dispatch: dispatch });\n\n // where to insert new items\n var itemInsertLocation = query('GET_ITEM_INSERT_LOCATION');\n\n // adjust index if is not allowed to pick location\n if (!state.options.itemInsertLocationFreedom) {\n index = itemInsertLocation === 'before' ? -1 : state.items.length;\n }\n\n // add item to list\n insertItem(state.items, item, index);\n\n // sort items in list\n if (isFunction(itemInsertLocation) && source) {\n sortItems(state, itemInsertLocation);\n }\n\n // get a quick reference to the item id\n var id = item.id;\n\n // observe item events\n item.on('init', function() {\n dispatch('DID_INIT_ITEM', { id: id });\n });\n\n item.on('load-init', function() {\n dispatch('DID_START_ITEM_LOAD', { id: id });\n });\n\n item.on('load-meta', function() {\n dispatch('DID_UPDATE_ITEM_META', { id: id });\n });\n\n item.on('load-progress', function(progress) {\n dispatch('DID_UPDATE_ITEM_LOAD_PROGRESS', { id: id, progress: progress });\n });\n\n item.on('load-request-error', function(error) {\n var mainStatus = dynamicLabel(state.options.labelFileLoadError)(error);\n\n // is client error, no way to recover\n if (error.code >= 400 && error.code < 500) {\n dispatch('DID_THROW_ITEM_INVALID', {\n id: id,\n error: error,\n status: {\n main: mainStatus,\n sub: error.code + ' (' + error.body + ')',\n },\n });\n\n // reject the file so can be dealt with through API\n failure({ error: error, file: createItemAPI(item) });\n return;\n }\n\n // is possible server error, so might be possible to retry\n dispatch('DID_THROW_ITEM_LOAD_ERROR', {\n id: id,\n error: error,\n status: {\n main: mainStatus,\n sub: state.options.labelTapToRetry,\n },\n });\n });\n\n item.on('load-file-error', function(error) {\n dispatch('DID_THROW_ITEM_INVALID', {\n id: id,\n error: error.status,\n status: error.status,\n });\n\n failure({ error: error.status, file: createItemAPI(item) });\n });\n\n item.on('load-abort', function() {\n dispatch('REMOVE_ITEM', { query: id });\n });\n\n item.on('load-skip', function() {\n item.on('metadata-update', function(change) {\n if (!isFile(item.file)) return;\n dispatch('DID_UPDATE_ITEM_METADATA', { id: id, change: change });\n });\n\n dispatch('COMPLETE_LOAD_ITEM', {\n query: id,\n item: item,\n data: {\n source: source,\n success: success,\n },\n });\n });\n\n item.on('load', function() {\n var handleAdd = function handleAdd(shouldAdd) {\n // no should not add this file\n if (!shouldAdd) {\n dispatch('REMOVE_ITEM', {\n query: id,\n });\n\n return;\n }\n\n // now interested in metadata updates\n item.on('metadata-update', function(change) {\n dispatch('DID_UPDATE_ITEM_METADATA', { id: id, change: change });\n });\n\n // let plugins decide if the output data should be prepared at this point\n // means we'll do this and wait for idle state\n applyFilterChain('SHOULD_PREPARE_OUTPUT', false, {\n item: item,\n query: query,\n }).then(function(shouldPrepareOutput) {\n // plugins determined the output data should be prepared (or not), can be adjusted with beforePrepareOutput hook\n var beforePrepareFile = query('GET_BEFORE_PREPARE_FILE');\n if (beforePrepareFile)\n shouldPrepareOutput = beforePrepareFile(item, shouldPrepareOutput);\n\n var loadComplete = function loadComplete() {\n dispatch('COMPLETE_LOAD_ITEM', {\n query: id,\n item: item,\n data: {\n source: source,\n success: success,\n },\n });\n\n listUpdated(dispatch, state);\n };\n\n // exit\n if (shouldPrepareOutput) {\n // wait for idle state and then run PREPARE_OUTPUT\n dispatch(\n 'REQUEST_PREPARE_OUTPUT',\n {\n query: id,\n item: item,\n success: function success(file) {\n dispatch('DID_PREPARE_OUTPUT', { id: id, file: file });\n loadComplete();\n },\n },\n\n true\n );\n\n return;\n }\n\n loadComplete();\n });\n };\n\n // item loaded, allow plugins to\n // - read data (quickly)\n // - add metadata\n applyFilterChain('DID_LOAD_ITEM', item, { query: query, dispatch: dispatch })\n .then(function() {\n optionalPromise(query('GET_BEFORE_ADD_FILE'), createItemAPI(item)).then(\n handleAdd\n );\n })\n .catch(function(e) {\n if (!e || !e.error || !e.status) return handleAdd(false);\n dispatch('DID_THROW_ITEM_INVALID', {\n id: id,\n error: e.error,\n status: e.status,\n });\n });\n });\n\n item.on('process-start', function() {\n dispatch('DID_START_ITEM_PROCESSING', { id: id });\n });\n\n item.on('process-progress', function(progress) {\n dispatch('DID_UPDATE_ITEM_PROCESS_PROGRESS', { id: id, progress: progress });\n });\n\n item.on('process-error', function(error) {\n dispatch('DID_THROW_ITEM_PROCESSING_ERROR', {\n id: id,\n error: error,\n status: {\n main: dynamicLabel(state.options.labelFileProcessingError)(error),\n sub: state.options.labelTapToRetry,\n },\n });\n });\n\n item.on('process-revert-error', function(error) {\n dispatch('DID_THROW_ITEM_PROCESSING_REVERT_ERROR', {\n id: id,\n error: error,\n status: {\n main: dynamicLabel(state.options.labelFileProcessingRevertError)(error),\n sub: state.options.labelTapToRetry,\n },\n });\n });\n\n item.on('process-complete', function(serverFileReference) {\n dispatch('DID_COMPLETE_ITEM_PROCESSING', {\n id: id,\n error: null,\n serverFileReference: serverFileReference,\n });\n\n dispatch('DID_DEFINE_VALUE', { id: id, value: serverFileReference });\n });\n\n item.on('process-abort', function() {\n dispatch('DID_ABORT_ITEM_PROCESSING', { id: id });\n });\n\n item.on('process-revert', function() {\n dispatch('DID_REVERT_ITEM_PROCESSING', { id: id });\n dispatch('DID_DEFINE_VALUE', { id: id, value: null });\n });\n\n // let view know the item has been inserted\n dispatch('DID_ADD_ITEM', {\n id: id,\n index: index,\n interactionMethod: interactionMethod,\n });\n\n listUpdated(dispatch, state);\n\n // start loading the source\n var _ref8 = state.options.server || {},\n url = _ref8.url,\n load = _ref8.load,\n restore = _ref8.restore,\n fetch = _ref8.fetch;\n\n item.load(\n source,\n\n // this creates a function that loads the file based on the type of file (string, base64, blob, file) and location of file (local, remote, limbo)\n createFileLoader(\n origin === FileOrigin.INPUT\n ? // input, if is remote, see if should use custom fetch, else use default fetchBlob\n isString(source) && isExternalURL(source)\n ? fetch\n ? createFetchFunction(url, fetch)\n : fetchBlob // remote url\n : fetchBlob // try to fetch url\n : // limbo or local\n origin === FileOrigin.LIMBO\n ? createFetchFunction(url, restore) // limbo\n : createFetchFunction(url, load) // local\n ),\n\n // called when the file is loaded so it can be piped through the filters\n function(file, success, error) {\n // let's process the file\n applyFilterChain('LOAD_FILE', file, { query: query })\n .then(success)\n .catch(error);\n }\n );\n },\n\n REQUEST_PREPARE_OUTPUT: function REQUEST_PREPARE_OUTPUT(_ref9) {\n var item = _ref9.item,\n success = _ref9.success,\n _ref9$failure = _ref9.failure,\n failure = _ref9$failure === void 0 ? function() {} : _ref9$failure;\n // error response if item archived\n var err = {\n error: createResponse('error', 0, 'Item not found'),\n file: null,\n };\n\n // don't handle archived items, an item could have been archived (load aborted) while waiting to be prepared\n if (item.archived) return failure(err);\n\n // allow plugins to alter the file data\n applyFilterChain('PREPARE_OUTPUT', item.file, { query: query, item: item }).then(\n function(result) {\n applyFilterChain('COMPLETE_PREPARE_OUTPUT', result, {\n query: query,\n item: item,\n }).then(function(result) {\n // don't handle archived items, an item could have been archived (load aborted) while being prepared\n if (item.archived) return failure(err);\n\n // we done!\n success(result);\n });\n }\n );\n },\n\n COMPLETE_LOAD_ITEM: function COMPLETE_LOAD_ITEM(_ref10) {\n var item = _ref10.item,\n data = _ref10.data;\n var success = data.success,\n source = data.source;\n\n // sort items in list\n var itemInsertLocation = query('GET_ITEM_INSERT_LOCATION');\n if (isFunction(itemInsertLocation) && source) {\n sortItems(state, itemInsertLocation);\n }\n\n // let interface know the item has loaded\n dispatch('DID_LOAD_ITEM', {\n id: item.id,\n error: null,\n serverFileReference: item.origin === FileOrigin.INPUT ? null : source,\n });\n\n // item has been successfully loaded and added to the\n // list of items so can now be safely returned for use\n success(createItemAPI(item));\n\n // if this is a local server file we need to show a different state\n if (item.origin === FileOrigin.LOCAL) {\n dispatch('DID_LOAD_LOCAL_ITEM', { id: item.id });\n return;\n }\n\n // if is a temp server file we prevent async upload call here (as the file is already on the server)\n if (item.origin === FileOrigin.LIMBO) {\n dispatch('DID_COMPLETE_ITEM_PROCESSING', {\n id: item.id,\n error: null,\n serverFileReference: source,\n });\n\n dispatch('DID_DEFINE_VALUE', {\n id: item.id,\n value: item.serverId || source,\n });\n\n return;\n }\n\n // id we are allowed to upload the file immediately, lets do it\n if (query('IS_ASYNC') && state.options.instantUpload) {\n dispatch('REQUEST_ITEM_PROCESSING', { query: item.id });\n }\n },\n\n RETRY_ITEM_LOAD: getItemByQueryFromState(state, function(item) {\n // try loading the source one more time\n item.retryLoad();\n }),\n\n REQUEST_ITEM_PREPARE: getItemByQueryFromState(state, function(item, _success, failure) {\n dispatch(\n 'REQUEST_PREPARE_OUTPUT',\n {\n query: item.id,\n item: item,\n success: function success(file) {\n dispatch('DID_PREPARE_OUTPUT', { id: item.id, file: file });\n _success({\n file: item,\n output: file,\n });\n },\n failure: failure,\n },\n\n true\n );\n }),\n\n REQUEST_ITEM_PROCESSING: getItemByQueryFromState(state, function(\n item,\n success,\n failure\n ) {\n // cannot be queued (or is already queued)\n var itemCanBeQueuedForProcessing =\n // waiting for something\n item.status === ItemStatus.IDLE ||\n // processing went wrong earlier\n item.status === ItemStatus.PROCESSING_ERROR;\n\n // not ready to be processed\n if (!itemCanBeQueuedForProcessing) {\n var processNow = function processNow() {\n return dispatch('REQUEST_ITEM_PROCESSING', {\n query: item,\n success: success,\n failure: failure,\n });\n };\n\n var process = function process() {\n return document.hidden ? processNow() : setTimeout(processNow, 32);\n };\n\n // if already done processing or tried to revert but didn't work, try again\n if (\n item.status === ItemStatus.PROCESSING_COMPLETE ||\n item.status === ItemStatus.PROCESSING_REVERT_ERROR\n ) {\n item.revert(\n createRevertFunction(\n state.options.server.url,\n state.options.server.revert\n ),\n query('GET_FORCE_REVERT')\n )\n .then(process)\n .catch(function() {}); // don't continue with processing if something went wrong\n } else if (item.status === ItemStatus.PROCESSING) {\n item.abortProcessing().then(process);\n }\n\n return;\n }\n\n // already queued for processing\n if (item.status === ItemStatus.PROCESSING_QUEUED) return;\n\n item.requestProcessing();\n\n dispatch('DID_REQUEST_ITEM_PROCESSING', { id: item.id });\n\n dispatch('PROCESS_ITEM', { query: item, success: success, failure: failure }, true);\n }),\n\n PROCESS_ITEM: getItemByQueryFromState(state, function(item, success, failure) {\n var maxParallelUploads = query('GET_MAX_PARALLEL_UPLOADS');\n var totalCurrentUploads = query('GET_ITEMS_BY_STATUS', ItemStatus.PROCESSING)\n .length;\n\n // queue and wait till queue is freed up\n if (totalCurrentUploads === maxParallelUploads) {\n // queue for later processing\n state.processingQueue.push({\n id: item.id,\n success: success,\n failure: failure,\n });\n\n // stop it!\n return;\n }\n\n // if was not queued or is already processing exit here\n if (item.status === ItemStatus.PROCESSING) return;\n\n var processNext = function processNext() {\n // process queueud items\n var queueEntry = state.processingQueue.shift();\n\n // no items left\n if (!queueEntry) return;\n\n // get item reference\n var id = queueEntry.id,\n success = queueEntry.success,\n failure = queueEntry.failure;\n var itemReference = getItemByQuery(state.items, id);\n\n // if item was archived while in queue, jump to next\n if (!itemReference || itemReference.archived) {\n processNext();\n return;\n }\n\n // process queued item\n dispatch(\n 'PROCESS_ITEM',\n { query: id, success: success, failure: failure },\n true\n );\n };\n\n // we done function\n item.onOnce('process-complete', function() {\n success(createItemAPI(item));\n processNext();\n\n // if origin is local, and we're instant uploading, trigger remove of original\n // as revert will remove file from list\n var server = state.options.server;\n var instantUpload = state.options.instantUpload;\n if (\n instantUpload &&\n item.origin === FileOrigin.LOCAL &&\n isFunction(server.remove)\n ) {\n var noop = function noop() {};\n item.origin = FileOrigin.LIMBO;\n state.options.server.remove(item.source, noop, noop);\n }\n\n // All items processed? No errors?\n var allItemsProcessed =\n query('GET_ITEMS_BY_STATUS', ItemStatus.PROCESSING_COMPLETE).length ===\n state.items.length;\n if (allItemsProcessed) {\n dispatch('DID_COMPLETE_ITEM_PROCESSING_ALL');\n }\n });\n\n // we error function\n item.onOnce('process-error', function(error) {\n failure({ error: error, file: createItemAPI(item) });\n processNext();\n });\n\n // abort function\n item.onOnce('process-abort', function() {\n processNext();\n });\n\n // start file processing\n var options = state.options;\n item.process(\n createFileProcessor(\n createProcessorFunction(\n options.server.url,\n options.server.process,\n options.name,\n {\n chunkTransferId: item.transferId,\n chunkServer: options.server.patch,\n chunkUploads: options.chunkUploads,\n chunkForce: options.chunkForce,\n chunkSize: options.chunkSize,\n chunkRetryDelays: options.chunkRetryDelays,\n }\n ),\n\n {\n allowMinimumUploadDuration: query('GET_ALLOW_MINIMUM_UPLOAD_DURATION'),\n }\n ),\n\n // called when the file is about to be processed so it can be piped through the transform filters\n function(file, success, error) {\n // allow plugins to alter the file data\n applyFilterChain('PREPARE_OUTPUT', file, { query: query, item: item })\n .then(function(file) {\n dispatch('DID_PREPARE_OUTPUT', { id: item.id, file: file });\n\n success(file);\n })\n .catch(error);\n }\n );\n }),\n\n RETRY_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {\n dispatch('REQUEST_ITEM_PROCESSING', { query: item });\n }),\n\n REQUEST_REMOVE_ITEM: getItemByQueryFromState(state, function(item) {\n optionalPromise(query('GET_BEFORE_REMOVE_FILE'), createItemAPI(item)).then(function(\n shouldRemove\n ) {\n if (!shouldRemove) {\n return;\n }\n dispatch('REMOVE_ITEM', { query: item });\n });\n }),\n\n RELEASE_ITEM: getItemByQueryFromState(state, function(item) {\n item.release();\n }),\n\n REMOVE_ITEM: getItemByQueryFromState(state, function(item, success, failure, options) {\n var removeFromView = function removeFromView() {\n // get id reference\n var id = item.id;\n\n // archive the item, this does not remove it from the list\n getItemById(state.items, id).archive();\n\n // tell the view the item has been removed\n dispatch('DID_REMOVE_ITEM', { error: null, id: id, item: item });\n\n // now the list has been modified\n listUpdated(dispatch, state);\n\n // correctly removed\n success(createItemAPI(item));\n };\n\n // if this is a local file and the `server.remove` function has been configured,\n // send source there so dev can remove file from server\n var server = state.options.server;\n if (\n item.origin === FileOrigin.LOCAL &&\n server &&\n isFunction(server.remove) &&\n options.remove !== false\n ) {\n dispatch('DID_START_ITEM_REMOVE', { id: item.id });\n\n server.remove(\n item.source,\n function() {\n return removeFromView();\n },\n function(status) {\n dispatch('DID_THROW_ITEM_REMOVE_ERROR', {\n id: item.id,\n error: createResponse('error', 0, status, null),\n status: {\n main: dynamicLabel(state.options.labelFileRemoveError)(status),\n sub: state.options.labelTapToRetry,\n },\n });\n }\n );\n } else {\n // if is requesting revert and can revert need to call revert handler (not calling request_ because that would also trigger beforeRemoveHook)\n if (\n (options.revert &&\n item.origin !== FileOrigin.LOCAL &&\n item.serverId !== null) ||\n // if chunked uploads are enabled and we're uploading in chunks for this specific file\n // or if the file isn't big enough for chunked uploads but chunkForce is set then call\n // revert before removing from the view...\n (state.options.chunkUploads && item.file.size > state.options.chunkSize) ||\n (state.options.chunkUploads && state.options.chunkForce)\n ) {\n item.revert(\n createRevertFunction(\n state.options.server.url,\n state.options.server.revert\n ),\n query('GET_FORCE_REVERT')\n );\n }\n\n // can now safely remove from view\n removeFromView();\n }\n }),\n\n ABORT_ITEM_LOAD: getItemByQueryFromState(state, function(item) {\n item.abortLoad();\n }),\n\n ABORT_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {\n // test if is already processed\n if (item.serverId) {\n dispatch('REVERT_ITEM_PROCESSING', { id: item.id });\n return;\n }\n\n // abort\n item.abortProcessing().then(function() {\n var shouldRemove = state.options.instantUpload;\n if (shouldRemove) {\n dispatch('REMOVE_ITEM', { query: item.id });\n }\n });\n }),\n\n REQUEST_REVERT_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {\n // not instant uploading, revert immediately\n if (!state.options.instantUpload) {\n dispatch('REVERT_ITEM_PROCESSING', { query: item });\n return;\n }\n\n // if we're instant uploading the file will also be removed if we revert,\n // so if a before remove file hook is defined we need to run it now\n var handleRevert = function handleRevert(shouldRevert) {\n if (!shouldRevert) return;\n dispatch('REVERT_ITEM_PROCESSING', { query: item });\n };\n\n var fn = query('GET_BEFORE_REMOVE_FILE');\n if (!fn) {\n return handleRevert(true);\n }\n\n var requestRemoveResult = fn(createItemAPI(item));\n if (requestRemoveResult == null) {\n // undefined or null\n return handleRevert(true);\n }\n\n if (typeof requestRemoveResult === 'boolean') {\n return handleRevert(requestRemoveResult);\n }\n\n if (typeof requestRemoveResult.then === 'function') {\n requestRemoveResult.then(handleRevert);\n }\n }),\n\n REVERT_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {\n item.revert(\n createRevertFunction(state.options.server.url, state.options.server.revert),\n query('GET_FORCE_REVERT')\n )\n .then(function() {\n var shouldRemove = state.options.instantUpload || isMockItem(item);\n if (shouldRemove) {\n dispatch('REMOVE_ITEM', { query: item.id });\n }\n })\n .catch(function() {});\n }),\n\n SET_OPTIONS: function SET_OPTIONS(_ref11) {\n var options = _ref11.options;\n // get all keys passed\n var optionKeys = Object.keys(options);\n\n // get prioritized keyed to include (remove once not in options object)\n var prioritizedOptionKeys = PrioritizedOptions.filter(function(key) {\n return optionKeys.includes(key);\n });\n\n // order the keys, prioritized first, then rest\n var orderedOptionKeys = [].concat(\n _toConsumableArray(prioritizedOptionKeys),\n _toConsumableArray(\n Object.keys(options).filter(function(key) {\n return !prioritizedOptionKeys.includes(key);\n })\n )\n );\n\n // dispatch set event for each option\n orderedOptionKeys.forEach(function(key) {\n dispatch('SET_' + fromCamels(key, '_').toUpperCase(), {\n value: options[key],\n });\n });\n },\n };\n };\n\n var PrioritizedOptions = ['server'];\n\n var formatFilename = function formatFilename(name) {\n return name;\n };\n\n var createElement$1 = function createElement(tagName) {\n return document.createElement(tagName);\n };\n\n var text = function text(node, value) {\n var textNode = node.childNodes[0];\n if (!textNode) {\n textNode = document.createTextNode(value);\n node.appendChild(textNode);\n } else if (value !== textNode.nodeValue) {\n textNode.nodeValue = value;\n }\n };\n\n var polarToCartesian = function polarToCartesian(centerX, centerY, radius, angleInDegrees) {\n var angleInRadians = (((angleInDegrees % 360) - 90) * Math.PI) / 180.0;\n return {\n x: centerX + radius * Math.cos(angleInRadians),\n y: centerY + radius * Math.sin(angleInRadians),\n };\n };\n\n var describeArc = function describeArc(x, y, radius, startAngle, endAngle, arcSweep) {\n var start = polarToCartesian(x, y, radius, endAngle);\n var end = polarToCartesian(x, y, radius, startAngle);\n return ['M', start.x, start.y, 'A', radius, radius, 0, arcSweep, 0, end.x, end.y].join(' ');\n };\n\n var percentageArc = function percentageArc(x, y, radius, from, to) {\n var arcSweep = 1;\n if (to > from && to - from <= 0.5) {\n arcSweep = 0;\n }\n if (from > to && from - to >= 0.5) {\n arcSweep = 0;\n }\n return describeArc(\n x,\n y,\n radius,\n Math.min(0.9999, from) * 360,\n Math.min(0.9999, to) * 360,\n arcSweep\n );\n };\n\n var create = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n // start at 0\n props.spin = false;\n props.progress = 0;\n props.opacity = 0;\n\n // svg\n var svg = createElement('svg');\n root.ref.path = createElement('path', {\n 'stroke-width': 2,\n 'stroke-linecap': 'round',\n });\n\n svg.appendChild(root.ref.path);\n\n root.ref.svg = svg;\n\n root.appendChild(svg);\n };\n\n var write = function write(_ref2) {\n var root = _ref2.root,\n props = _ref2.props;\n if (props.opacity === 0) {\n return;\n }\n\n if (props.align) {\n root.element.dataset.align = props.align;\n }\n\n // get width of stroke\n var ringStrokeWidth = parseInt(attr(root.ref.path, 'stroke-width'), 10);\n\n // calculate size of ring\n var size = root.rect.element.width * 0.5;\n\n // ring state\n var ringFrom = 0;\n var ringTo = 0;\n\n // now in busy mode\n if (props.spin) {\n ringFrom = 0;\n ringTo = 0.5;\n } else {\n ringFrom = 0;\n ringTo = props.progress;\n }\n\n // get arc path\n var coordinates = percentageArc(size, size, size - ringStrokeWidth, ringFrom, ringTo);\n\n // update progress bar\n attr(root.ref.path, 'd', coordinates);\n\n // hide while contains 0 value\n attr(root.ref.path, 'stroke-opacity', props.spin || props.progress > 0 ? 1 : 0);\n };\n\n var progressIndicator = createView({\n tag: 'div',\n name: 'progress-indicator',\n ignoreRectUpdate: true,\n ignoreRect: true,\n create: create,\n write: write,\n mixins: {\n apis: ['progress', 'spin', 'align'],\n styles: ['opacity'],\n animations: {\n opacity: { type: 'tween', duration: 500 },\n progress: {\n type: 'spring',\n stiffness: 0.95,\n damping: 0.65,\n mass: 10,\n },\n },\n },\n });\n\n var create$1 = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n root.element.innerHTML = (props.icon || '') + ('<span>' + props.label + '</span>');\n\n props.isDisabled = false;\n };\n\n var write$1 = function write(_ref2) {\n var root = _ref2.root,\n props = _ref2.props;\n var isDisabled = props.isDisabled;\n var shouldDisable = root.query('GET_DISABLED') || props.opacity === 0;\n\n if (shouldDisable && !isDisabled) {\n props.isDisabled = true;\n attr(root.element, 'disabled', 'disabled');\n } else if (!shouldDisable && isDisabled) {\n props.isDisabled = false;\n root.element.removeAttribute('disabled');\n }\n };\n\n var fileActionButton = createView({\n tag: 'button',\n attributes: {\n type: 'button',\n },\n\n ignoreRect: true,\n ignoreRectUpdate: true,\n name: 'file-action-button',\n mixins: {\n apis: ['label'],\n styles: ['translateX', 'translateY', 'scaleX', 'scaleY', 'opacity'],\n animations: {\n scaleX: 'spring',\n scaleY: 'spring',\n translateX: 'spring',\n translateY: 'spring',\n opacity: { type: 'tween', duration: 250 },\n },\n\n listeners: true,\n },\n\n create: create$1,\n write: write$1,\n });\n\n var toNaturalFileSize = function toNaturalFileSize(bytes) {\n var decimalSeparator =\n arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '.';\n var base = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1000;\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _options$labelBytes = options.labelBytes,\n labelBytes = _options$labelBytes === void 0 ? 'bytes' : _options$labelBytes,\n _options$labelKilobyt = options.labelKilobytes,\n labelKilobytes = _options$labelKilobyt === void 0 ? 'KB' : _options$labelKilobyt,\n _options$labelMegabyt = options.labelMegabytes,\n labelMegabytes = _options$labelMegabyt === void 0 ? 'MB' : _options$labelMegabyt,\n _options$labelGigabyt = options.labelGigabytes,\n labelGigabytes = _options$labelGigabyt === void 0 ? 'GB' : _options$labelGigabyt;\n\n // no negative byte sizes\n bytes = Math.round(Math.abs(bytes));\n\n var KB = base;\n var MB = base * base;\n var GB = base * base * base;\n\n // just bytes\n if (bytes < KB) {\n return bytes + ' ' + labelBytes;\n }\n\n // kilobytes\n if (bytes < MB) {\n return Math.floor(bytes / KB) + ' ' + labelKilobytes;\n }\n\n // megabytes\n if (bytes < GB) {\n return removeDecimalsWhenZero(bytes / MB, 1, decimalSeparator) + ' ' + labelMegabytes;\n }\n\n // gigabytes\n return removeDecimalsWhenZero(bytes / GB, 2, decimalSeparator) + ' ' + labelGigabytes;\n };\n\n var removeDecimalsWhenZero = function removeDecimalsWhenZero(value, decimalCount, separator) {\n return value\n .toFixed(decimalCount)\n .split('.')\n .filter(function(part) {\n return part !== '0';\n })\n .join(separator);\n };\n\n var create$2 = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n // filename\n var fileName = createElement$1('span');\n fileName.className = 'filepond--file-info-main';\n // hide for screenreaders\n // the file is contained in a fieldset with legend that contains the filename\n // no need to read it twice\n attr(fileName, 'aria-hidden', 'true');\n root.appendChild(fileName);\n root.ref.fileName = fileName;\n\n // filesize\n var fileSize = createElement$1('span');\n fileSize.className = 'filepond--file-info-sub';\n root.appendChild(fileSize);\n root.ref.fileSize = fileSize;\n\n // set initial values\n text(fileSize, root.query('GET_LABEL_FILE_WAITING_FOR_SIZE'));\n text(fileName, formatFilename(root.query('GET_ITEM_NAME', props.id)));\n };\n\n var updateFile = function updateFile(_ref2) {\n var root = _ref2.root,\n props = _ref2.props;\n text(\n root.ref.fileSize,\n toNaturalFileSize(\n root.query('GET_ITEM_SIZE', props.id),\n '.',\n root.query('GET_FILE_SIZE_BASE'),\n root.query('GET_FILE_SIZE_LABELS', root.query)\n )\n );\n\n text(root.ref.fileName, formatFilename(root.query('GET_ITEM_NAME', props.id)));\n };\n\n var updateFileSizeOnError = function updateFileSizeOnError(_ref3) {\n var root = _ref3.root,\n props = _ref3.props;\n // if size is available don't fallback to unknown size message\n if (isInt(root.query('GET_ITEM_SIZE', props.id))) {\n updateFile({ root: root, props: props });\n return;\n }\n\n text(root.ref.fileSize, root.query('GET_LABEL_FILE_SIZE_NOT_AVAILABLE'));\n };\n\n var fileInfo = createView({\n name: 'file-info',\n ignoreRect: true,\n ignoreRectUpdate: true,\n write: createRoute({\n DID_LOAD_ITEM: updateFile,\n DID_UPDATE_ITEM_META: updateFile,\n DID_THROW_ITEM_LOAD_ERROR: updateFileSizeOnError,\n DID_THROW_ITEM_INVALID: updateFileSizeOnError,\n }),\n\n didCreateView: function didCreateView(root) {\n applyFilters('CREATE_VIEW', Object.assign({}, root, { view: root }));\n },\n create: create$2,\n mixins: {\n styles: ['translateX', 'translateY'],\n animations: {\n translateX: 'spring',\n translateY: 'spring',\n },\n },\n });\n\n var toPercentage = function toPercentage(value) {\n return Math.round(value * 100);\n };\n\n var create$3 = function create(_ref) {\n var root = _ref.root;\n\n // main status\n var main = createElement$1('span');\n main.className = 'filepond--file-status-main';\n root.appendChild(main);\n root.ref.main = main;\n\n // sub status\n var sub = createElement$1('span');\n sub.className = 'filepond--file-status-sub';\n root.appendChild(sub);\n root.ref.sub = sub;\n\n didSetItemLoadProgress({ root: root, action: { progress: null } });\n };\n\n var didSetItemLoadProgress = function didSetItemLoadProgress(_ref2) {\n var root = _ref2.root,\n action = _ref2.action;\n var title =\n action.progress === null\n ? root.query('GET_LABEL_FILE_LOADING')\n : root.query('GET_LABEL_FILE_LOADING') + ' ' + toPercentage(action.progress) + '%';\n\n text(root.ref.main, title);\n text(root.ref.sub, root.query('GET_LABEL_TAP_TO_CANCEL'));\n };\n\n var didSetItemProcessProgress = function didSetItemProcessProgress(_ref3) {\n var root = _ref3.root,\n action = _ref3.action;\n var title =\n action.progress === null\n ? root.query('GET_LABEL_FILE_PROCESSING')\n : root.query('GET_LABEL_FILE_PROCESSING') +\n ' ' +\n toPercentage(action.progress) +\n '%';\n\n text(root.ref.main, title);\n text(root.ref.sub, root.query('GET_LABEL_TAP_TO_CANCEL'));\n };\n\n var didRequestItemProcessing = function didRequestItemProcessing(_ref4) {\n var root = _ref4.root;\n text(root.ref.main, root.query('GET_LABEL_FILE_PROCESSING'));\n text(root.ref.sub, root.query('GET_LABEL_TAP_TO_CANCEL'));\n };\n\n var didAbortItemProcessing = function didAbortItemProcessing(_ref5) {\n var root = _ref5.root;\n text(root.ref.main, root.query('GET_LABEL_FILE_PROCESSING_ABORTED'));\n text(root.ref.sub, root.query('GET_LABEL_TAP_TO_RETRY'));\n };\n\n var didCompleteItemProcessing = function didCompleteItemProcessing(_ref6) {\n var root = _ref6.root;\n text(root.ref.main, root.query('GET_LABEL_FILE_PROCESSING_COMPLETE'));\n text(root.ref.sub, root.query('GET_LABEL_TAP_TO_UNDO'));\n };\n\n var clear = function clear(_ref7) {\n var root = _ref7.root;\n text(root.ref.main, '');\n text(root.ref.sub, '');\n };\n\n var error = function error(_ref8) {\n var root = _ref8.root,\n action = _ref8.action;\n text(root.ref.main, action.status.main);\n text(root.ref.sub, action.status.sub);\n };\n\n var fileStatus = createView({\n name: 'file-status',\n ignoreRect: true,\n ignoreRectUpdate: true,\n write: createRoute({\n DID_LOAD_ITEM: clear,\n DID_REVERT_ITEM_PROCESSING: clear,\n DID_REQUEST_ITEM_PROCESSING: didRequestItemProcessing,\n DID_ABORT_ITEM_PROCESSING: didAbortItemProcessing,\n DID_COMPLETE_ITEM_PROCESSING: didCompleteItemProcessing,\n DID_UPDATE_ITEM_PROCESS_PROGRESS: didSetItemProcessProgress,\n DID_UPDATE_ITEM_LOAD_PROGRESS: didSetItemLoadProgress,\n DID_THROW_ITEM_LOAD_ERROR: error,\n DID_THROW_ITEM_INVALID: error,\n DID_THROW_ITEM_PROCESSING_ERROR: error,\n DID_THROW_ITEM_PROCESSING_REVERT_ERROR: error,\n DID_THROW_ITEM_REMOVE_ERROR: error,\n }),\n\n didCreateView: function didCreateView(root) {\n applyFilters('CREATE_VIEW', Object.assign({}, root, { view: root }));\n },\n create: create$3,\n mixins: {\n styles: ['translateX', 'translateY', 'opacity'],\n animations: {\n opacity: { type: 'tween', duration: 250 },\n translateX: 'spring',\n translateY: 'spring',\n },\n },\n });\n\n /**\n * Button definitions for the file view\n */\n\n var Buttons = {\n AbortItemLoad: {\n label: 'GET_LABEL_BUTTON_ABORT_ITEM_LOAD',\n action: 'ABORT_ITEM_LOAD',\n className: 'filepond--action-abort-item-load',\n align: 'LOAD_INDICATOR_POSITION', // right\n },\n RetryItemLoad: {\n label: 'GET_LABEL_BUTTON_RETRY_ITEM_LOAD',\n action: 'RETRY_ITEM_LOAD',\n icon: 'GET_ICON_RETRY',\n className: 'filepond--action-retry-item-load',\n align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n },\n RemoveItem: {\n label: 'GET_LABEL_BUTTON_REMOVE_ITEM',\n action: 'REQUEST_REMOVE_ITEM',\n icon: 'GET_ICON_REMOVE',\n className: 'filepond--action-remove-item',\n align: 'BUTTON_REMOVE_ITEM_POSITION', // left\n },\n ProcessItem: {\n label: 'GET_LABEL_BUTTON_PROCESS_ITEM',\n action: 'REQUEST_ITEM_PROCESSING',\n icon: 'GET_ICON_PROCESS',\n className: 'filepond--action-process-item',\n align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n },\n AbortItemProcessing: {\n label: 'GET_LABEL_BUTTON_ABORT_ITEM_PROCESSING',\n action: 'ABORT_ITEM_PROCESSING',\n className: 'filepond--action-abort-item-processing',\n align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n },\n RetryItemProcessing: {\n label: 'GET_LABEL_BUTTON_RETRY_ITEM_PROCESSING',\n action: 'RETRY_ITEM_PROCESSING',\n icon: 'GET_ICON_RETRY',\n className: 'filepond--action-retry-item-processing',\n align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n },\n RevertItemProcessing: {\n label: 'GET_LABEL_BUTTON_UNDO_ITEM_PROCESSING',\n action: 'REQUEST_REVERT_ITEM_PROCESSING',\n icon: 'GET_ICON_UNDO',\n className: 'filepond--action-revert-item-processing',\n align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n },\n };\n\n // make a list of buttons, we can then remove buttons from this list if they're disabled\n var ButtonKeys = [];\n forin(Buttons, function(key) {\n ButtonKeys.push(key);\n });\n\n var calculateFileInfoOffset = function calculateFileInfoOffset(root) {\n if (getRemoveIndicatorAligment(root) === 'right') return 0;\n var buttonRect = root.ref.buttonRemoveItem.rect.element;\n return buttonRect.hidden ? null : buttonRect.width + buttonRect.left;\n };\n\n var calculateButtonWidth = function calculateButtonWidth(root) {\n var buttonRect = root.ref.buttonAbortItemLoad.rect.element;\n return buttonRect.width;\n };\n\n // Force on full pixels so text stays crips\n var calculateFileVerticalCenterOffset = function calculateFileVerticalCenterOffset(root) {\n return Math.floor(root.ref.buttonRemoveItem.rect.element.height / 4);\n };\n var calculateFileHorizontalCenterOffset = function calculateFileHorizontalCenterOffset(root) {\n return Math.floor(root.ref.buttonRemoveItem.rect.element.left / 2);\n };\n\n var getLoadIndicatorAlignment = function getLoadIndicatorAlignment(root) {\n return root.query('GET_STYLE_LOAD_INDICATOR_POSITION');\n };\n var getProcessIndicatorAlignment = function getProcessIndicatorAlignment(root) {\n return root.query('GET_STYLE_PROGRESS_INDICATOR_POSITION');\n };\n var getRemoveIndicatorAligment = function getRemoveIndicatorAligment(root) {\n return root.query('GET_STYLE_BUTTON_REMOVE_ITEM_POSITION');\n };\n\n var DefaultStyle = {\n buttonAbortItemLoad: { opacity: 0 },\n buttonRetryItemLoad: { opacity: 0 },\n buttonRemoveItem: { opacity: 0 },\n buttonProcessItem: { opacity: 0 },\n buttonAbortItemProcessing: { opacity: 0 },\n buttonRetryItemProcessing: { opacity: 0 },\n buttonRevertItemProcessing: { opacity: 0 },\n loadProgressIndicator: { opacity: 0, align: getLoadIndicatorAlignment },\n processProgressIndicator: { opacity: 0, align: getProcessIndicatorAlignment },\n processingCompleteIndicator: { opacity: 0, scaleX: 0.75, scaleY: 0.75 },\n info: { translateX: 0, translateY: 0, opacity: 0 },\n status: { translateX: 0, translateY: 0, opacity: 0 },\n };\n\n var IdleStyle = {\n buttonRemoveItem: { opacity: 1 },\n buttonProcessItem: { opacity: 1 },\n info: { translateX: calculateFileInfoOffset },\n status: { translateX: calculateFileInfoOffset },\n };\n\n var ProcessingStyle = {\n buttonAbortItemProcessing: { opacity: 1 },\n processProgressIndicator: { opacity: 1 },\n status: { opacity: 1 },\n };\n\n var StyleMap = {\n DID_THROW_ITEM_INVALID: {\n buttonRemoveItem: { opacity: 1 },\n info: { translateX: calculateFileInfoOffset },\n status: { translateX: calculateFileInfoOffset, opacity: 1 },\n },\n\n DID_START_ITEM_LOAD: {\n buttonAbortItemLoad: { opacity: 1 },\n loadProgressIndicator: { opacity: 1 },\n status: { opacity: 1 },\n },\n\n DID_THROW_ITEM_LOAD_ERROR: {\n buttonRetryItemLoad: { opacity: 1 },\n buttonRemoveItem: { opacity: 1 },\n info: { translateX: calculateFileInfoOffset },\n status: { opacity: 1 },\n },\n\n DID_START_ITEM_REMOVE: {\n processProgressIndicator: { opacity: 1, align: getRemoveIndicatorAligment },\n info: { translateX: calculateFileInfoOffset },\n status: { opacity: 0 },\n },\n\n DID_THROW_ITEM_REMOVE_ERROR: {\n processProgressIndicator: { opacity: 0, align: getRemoveIndicatorAligment },\n buttonRemoveItem: { opacity: 1 },\n info: { translateX: calculateFileInfoOffset },\n status: { opacity: 1, translateX: calculateFileInfoOffset },\n },\n\n DID_LOAD_ITEM: IdleStyle,\n DID_LOAD_LOCAL_ITEM: {\n buttonRemoveItem: { opacity: 1 },\n info: { translateX: calculateFileInfoOffset },\n status: { translateX: calculateFileInfoOffset },\n },\n\n DID_START_ITEM_PROCESSING: ProcessingStyle,\n DID_REQUEST_ITEM_PROCESSING: ProcessingStyle,\n DID_UPDATE_ITEM_PROCESS_PROGRESS: ProcessingStyle,\n DID_COMPLETE_ITEM_PROCESSING: {\n buttonRevertItemProcessing: { opacity: 1 },\n info: { opacity: 1 },\n status: { opacity: 1 },\n },\n\n DID_THROW_ITEM_PROCESSING_ERROR: {\n buttonRemoveItem: { opacity: 1 },\n buttonRetryItemProcessing: { opacity: 1 },\n status: { opacity: 1 },\n info: { translateX: calculateFileInfoOffset },\n },\n\n DID_THROW_ITEM_PROCESSING_REVERT_ERROR: {\n buttonRevertItemProcessing: { opacity: 1 },\n status: { opacity: 1 },\n info: { opacity: 1 },\n },\n\n DID_ABORT_ITEM_PROCESSING: {\n buttonRemoveItem: { opacity: 1 },\n buttonProcessItem: { opacity: 1 },\n info: { translateX: calculateFileInfoOffset },\n status: { opacity: 1 },\n },\n\n DID_REVERT_ITEM_PROCESSING: IdleStyle,\n };\n\n // complete indicator view\n var processingCompleteIndicatorView = createView({\n create: function create(_ref) {\n var root = _ref.root;\n root.element.innerHTML = root.query('GET_ICON_DONE');\n },\n name: 'processing-complete-indicator',\n ignoreRect: true,\n mixins: {\n styles: ['scaleX', 'scaleY', 'opacity'],\n animations: {\n scaleX: 'spring',\n scaleY: 'spring',\n opacity: { type: 'tween', duration: 250 },\n },\n },\n });\n\n /**\n * Creates the file view\n */\n var create$4 = function create(_ref2) {\n var root = _ref2.root,\n props = _ref2.props;\n // copy Buttons object\n var LocalButtons = Object.keys(Buttons).reduce(function(prev, curr) {\n prev[curr] = Object.assign({}, Buttons[curr]);\n return prev;\n }, {});\n var id = props.id;\n\n // allow reverting upload\n var allowRevert = root.query('GET_ALLOW_REVERT');\n\n // allow remove file\n var allowRemove = root.query('GET_ALLOW_REMOVE');\n\n // allow processing upload\n var allowProcess = root.query('GET_ALLOW_PROCESS');\n\n // is instant uploading, need this to determine the icon of the undo button\n var instantUpload = root.query('GET_INSTANT_UPLOAD');\n\n // is async set up\n var isAsync = root.query('IS_ASYNC');\n\n // should align remove item buttons\n var alignRemoveItemButton = root.query('GET_STYLE_BUTTON_REMOVE_ITEM_ALIGN');\n\n // enabled buttons array\n var buttonFilter;\n if (isAsync) {\n if (allowProcess && !allowRevert) {\n // only remove revert button\n buttonFilter = function buttonFilter(key) {\n return !/RevertItemProcessing/.test(key);\n };\n } else if (!allowProcess && allowRevert) {\n // only remove process button\n buttonFilter = function buttonFilter(key) {\n return !/ProcessItem|RetryItemProcessing|AbortItemProcessing/.test(key);\n };\n } else if (!allowProcess && !allowRevert) {\n // remove all process buttons\n buttonFilter = function buttonFilter(key) {\n return !/Process/.test(key);\n };\n }\n } else {\n // no process controls available\n buttonFilter = function buttonFilter(key) {\n return !/Process/.test(key);\n };\n }\n\n var enabledButtons = buttonFilter ? ButtonKeys.filter(buttonFilter) : ButtonKeys.concat();\n\n // update icon and label for revert button when instant uploading\n if (instantUpload && allowRevert) {\n LocalButtons['RevertItemProcessing'].label = 'GET_LABEL_BUTTON_REMOVE_ITEM';\n LocalButtons['RevertItemProcessing'].icon = 'GET_ICON_REMOVE';\n }\n\n // remove last button (revert) if not allowed\n if (isAsync && !allowRevert) {\n var map = StyleMap['DID_COMPLETE_ITEM_PROCESSING'];\n map.info.translateX = calculateFileHorizontalCenterOffset;\n map.info.translateY = calculateFileVerticalCenterOffset;\n map.status.translateY = calculateFileVerticalCenterOffset;\n map.processingCompleteIndicator = { opacity: 1, scaleX: 1, scaleY: 1 };\n }\n\n // should align center\n if (isAsync && !allowProcess) {\n [\n 'DID_START_ITEM_PROCESSING',\n 'DID_REQUEST_ITEM_PROCESSING',\n 'DID_UPDATE_ITEM_PROCESS_PROGRESS',\n 'DID_THROW_ITEM_PROCESSING_ERROR',\n ].forEach(function(key) {\n StyleMap[key].status.translateY = calculateFileVerticalCenterOffset;\n });\n StyleMap['DID_THROW_ITEM_PROCESSING_ERROR'].status.translateX = calculateButtonWidth;\n }\n\n // move remove button to right\n if (alignRemoveItemButton && allowRevert) {\n LocalButtons['RevertItemProcessing'].align = 'BUTTON_REMOVE_ITEM_POSITION';\n var _map = StyleMap['DID_COMPLETE_ITEM_PROCESSING'];\n _map.info.translateX = calculateFileInfoOffset;\n _map.status.translateY = calculateFileVerticalCenterOffset;\n _map.processingCompleteIndicator = { opacity: 1, scaleX: 1, scaleY: 1 };\n }\n\n // show/hide RemoveItem button\n if (!allowRemove) {\n LocalButtons['RemoveItem'].disabled = true;\n }\n\n // create the button views\n forin(LocalButtons, function(key, definition) {\n // create button\n var buttonView = root.createChildView(fileActionButton, {\n label: root.query(definition.label),\n icon: root.query(definition.icon),\n opacity: 0,\n });\n\n // should be appended?\n if (enabledButtons.includes(key)) {\n root.appendChildView(buttonView);\n }\n\n // toggle\n if (definition.disabled) {\n buttonView.element.setAttribute('disabled', 'disabled');\n buttonView.element.setAttribute('hidden', 'hidden');\n }\n\n // add position attribute\n buttonView.element.dataset.align = root.query('GET_STYLE_' + definition.align);\n\n // add class\n buttonView.element.classList.add(definition.className);\n\n // handle interactions\n buttonView.on('click', function(e) {\n e.stopPropagation();\n if (definition.disabled) return;\n root.dispatch(definition.action, { query: id });\n });\n\n // set reference\n root.ref['button' + key] = buttonView;\n });\n\n // checkmark\n root.ref.processingCompleteIndicator = root.appendChildView(\n root.createChildView(processingCompleteIndicatorView)\n );\n\n root.ref.processingCompleteIndicator.element.dataset.align = root.query(\n 'GET_STYLE_BUTTON_PROCESS_ITEM_POSITION'\n );\n\n // create file info view\n root.ref.info = root.appendChildView(root.createChildView(fileInfo, { id: id }));\n\n // create file status view\n root.ref.status = root.appendChildView(root.createChildView(fileStatus, { id: id }));\n\n // add progress indicators\n var loadIndicatorView = root.appendChildView(\n root.createChildView(progressIndicator, {\n opacity: 0,\n align: root.query('GET_STYLE_LOAD_INDICATOR_POSITION'),\n })\n );\n\n loadIndicatorView.element.classList.add('filepond--load-indicator');\n root.ref.loadProgressIndicator = loadIndicatorView;\n\n var progressIndicatorView = root.appendChildView(\n root.createChildView(progressIndicator, {\n opacity: 0,\n align: root.query('GET_STYLE_PROGRESS_INDICATOR_POSITION'),\n })\n );\n\n progressIndicatorView.element.classList.add('filepond--process-indicator');\n root.ref.processProgressIndicator = progressIndicatorView;\n\n // current active styles\n root.ref.activeStyles = [];\n };\n\n var write$2 = function write(_ref3) {\n var root = _ref3.root,\n actions = _ref3.actions,\n props = _ref3.props;\n // route actions\n route({ root: root, actions: actions, props: props });\n\n // select last state change action\n var action = actions\n .concat()\n .filter(function(action) {\n return /^DID_/.test(action.type);\n })\n .reverse()\n .find(function(action) {\n return StyleMap[action.type];\n });\n\n // a new action happened, let's get the matching styles\n if (action) {\n // define new active styles\n root.ref.activeStyles = [];\n\n var stylesToApply = StyleMap[action.type];\n forin(DefaultStyle, function(name, defaultStyles) {\n // get reference to control\n var control = root.ref[name];\n\n // loop over all styles for this control\n forin(defaultStyles, function(key, defaultValue) {\n var value =\n stylesToApply[name] && typeof stylesToApply[name][key] !== 'undefined'\n ? stylesToApply[name][key]\n : defaultValue;\n root.ref.activeStyles.push({ control: control, key: key, value: value });\n });\n });\n }\n\n // apply active styles to element\n root.ref.activeStyles.forEach(function(_ref4) {\n var control = _ref4.control,\n key = _ref4.key,\n value = _ref4.value;\n control[key] = typeof value === 'function' ? value(root) : value;\n });\n };\n\n var route = createRoute({\n DID_SET_LABEL_BUTTON_ABORT_ITEM_PROCESSING: function DID_SET_LABEL_BUTTON_ABORT_ITEM_PROCESSING(\n _ref5\n ) {\n var root = _ref5.root,\n action = _ref5.action;\n root.ref.buttonAbortItemProcessing.label = action.value;\n },\n DID_SET_LABEL_BUTTON_ABORT_ITEM_LOAD: function DID_SET_LABEL_BUTTON_ABORT_ITEM_LOAD(_ref6) {\n var root = _ref6.root,\n action = _ref6.action;\n root.ref.buttonAbortItemLoad.label = action.value;\n },\n DID_SET_LABEL_BUTTON_ABORT_ITEM_REMOVAL: function DID_SET_LABEL_BUTTON_ABORT_ITEM_REMOVAL(\n _ref7\n ) {\n var root = _ref7.root,\n action = _ref7.action;\n root.ref.buttonAbortItemRemoval.label = action.value;\n },\n DID_REQUEST_ITEM_PROCESSING: function DID_REQUEST_ITEM_PROCESSING(_ref8) {\n var root = _ref8.root;\n root.ref.processProgressIndicator.spin = true;\n root.ref.processProgressIndicator.progress = 0;\n },\n DID_START_ITEM_LOAD: function DID_START_ITEM_LOAD(_ref9) {\n var root = _ref9.root;\n root.ref.loadProgressIndicator.spin = true;\n root.ref.loadProgressIndicator.progress = 0;\n },\n DID_START_ITEM_REMOVE: function DID_START_ITEM_REMOVE(_ref10) {\n var root = _ref10.root;\n root.ref.processProgressIndicator.spin = true;\n root.ref.processProgressIndicator.progress = 0;\n },\n DID_UPDATE_ITEM_LOAD_PROGRESS: function DID_UPDATE_ITEM_LOAD_PROGRESS(_ref11) {\n var root = _ref11.root,\n action = _ref11.action;\n root.ref.loadProgressIndicator.spin = false;\n root.ref.loadProgressIndicator.progress = action.progress;\n },\n DID_UPDATE_ITEM_PROCESS_PROGRESS: function DID_UPDATE_ITEM_PROCESS_PROGRESS(_ref12) {\n var root = _ref12.root,\n action = _ref12.action;\n root.ref.processProgressIndicator.spin = false;\n root.ref.processProgressIndicator.progress = action.progress;\n },\n });\n\n var file = createView({\n create: create$4,\n write: write$2,\n didCreateView: function didCreateView(root) {\n applyFilters('CREATE_VIEW', Object.assign({}, root, { view: root }));\n },\n name: 'file',\n });\n\n /**\n * Creates the file view\n */\n var create$5 = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n\n // filename\n root.ref.fileName = createElement$1('legend');\n root.appendChild(root.ref.fileName);\n\n // file appended\n root.ref.file = root.appendChildView(root.createChildView(file, { id: props.id }));\n\n // data has moved to data.js\n root.ref.data = false;\n };\n\n /**\n * Data storage\n */\n var didLoadItem = function didLoadItem(_ref2) {\n var root = _ref2.root,\n props = _ref2.props;\n // updates the legend of the fieldset so screenreaders can better group buttons\n text(root.ref.fileName, formatFilename(root.query('GET_ITEM_NAME', props.id)));\n };\n\n var fileWrapper = createView({\n create: create$5,\n ignoreRect: true,\n write: createRoute({\n DID_LOAD_ITEM: didLoadItem,\n }),\n\n didCreateView: function didCreateView(root) {\n applyFilters('CREATE_VIEW', Object.assign({}, root, { view: root }));\n },\n tag: 'fieldset',\n name: 'file-wrapper',\n });\n\n var PANEL_SPRING_PROPS = { type: 'spring', damping: 0.6, mass: 7 };\n\n var create$6 = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n [\n {\n name: 'top',\n },\n\n {\n name: 'center',\n props: {\n translateY: null,\n scaleY: null,\n },\n\n mixins: {\n animations: {\n scaleY: PANEL_SPRING_PROPS,\n },\n\n styles: ['translateY', 'scaleY'],\n },\n },\n\n {\n name: 'bottom',\n props: {\n translateY: null,\n },\n\n mixins: {\n animations: {\n translateY: PANEL_SPRING_PROPS,\n },\n\n styles: ['translateY'],\n },\n },\n ].forEach(function(section) {\n createSection(root, section, props.name);\n });\n\n root.element.classList.add('filepond--' + props.name);\n\n root.ref.scalable = null;\n };\n\n var createSection = function createSection(root, section, className) {\n var viewConstructor = createView({\n name: 'panel-' + section.name + ' filepond--' + className,\n mixins: section.mixins,\n ignoreRectUpdate: true,\n });\n\n var view = root.createChildView(viewConstructor, section.props);\n\n root.ref[section.name] = root.appendChildView(view);\n };\n\n var write$3 = function write(_ref2) {\n var root = _ref2.root,\n props = _ref2.props;\n\n // update scalable state\n if (root.ref.scalable === null || props.scalable !== root.ref.scalable) {\n root.ref.scalable = isBoolean(props.scalable) ? props.scalable : true;\n root.element.dataset.scalable = root.ref.scalable;\n }\n\n // no height, can't set\n if (!props.height) return;\n\n // get child rects\n var topRect = root.ref.top.rect.element;\n var bottomRect = root.ref.bottom.rect.element;\n\n // make sure height never is smaller than bottom and top seciton heights combined (will probably never happen, but who knows)\n var height = Math.max(topRect.height + bottomRect.height, props.height);\n\n // offset center part\n root.ref.center.translateY = topRect.height;\n\n // scale center part\n // use math ceil to prevent transparent lines because of rounding errors\n root.ref.center.scaleY = (height - topRect.height - bottomRect.height) / 100;\n\n // offset bottom part\n root.ref.bottom.translateY = height - bottomRect.height;\n };\n\n var panel = createView({\n name: 'panel',\n read: function read(_ref3) {\n var root = _ref3.root,\n props = _ref3.props;\n return (props.heightCurrent = root.ref.bottom.translateY);\n },\n write: write$3,\n create: create$6,\n ignoreRect: true,\n mixins: {\n apis: ['height', 'heightCurrent', 'scalable'],\n },\n });\n\n var createDragHelper = function createDragHelper(items) {\n var itemIds = items.map(function(item) {\n return item.id;\n });\n var prevIndex = undefined;\n return {\n setIndex: function setIndex(index) {\n prevIndex = index;\n },\n getIndex: function getIndex() {\n return prevIndex;\n },\n getItemIndex: function getItemIndex(item) {\n return itemIds.indexOf(item.id);\n },\n };\n };\n\n var ITEM_TRANSLATE_SPRING = {\n type: 'spring',\n stiffness: 0.75,\n damping: 0.45,\n mass: 10,\n };\n\n var ITEM_SCALE_SPRING = 'spring';\n\n var StateMap = {\n DID_START_ITEM_LOAD: 'busy',\n DID_UPDATE_ITEM_LOAD_PROGRESS: 'loading',\n DID_THROW_ITEM_INVALID: 'load-invalid',\n DID_THROW_ITEM_LOAD_ERROR: 'load-error',\n DID_LOAD_ITEM: 'idle',\n DID_THROW_ITEM_REMOVE_ERROR: 'remove-error',\n DID_START_ITEM_REMOVE: 'busy',\n DID_START_ITEM_PROCESSING: 'busy processing',\n DID_REQUEST_ITEM_PROCESSING: 'busy processing',\n DID_UPDATE_ITEM_PROCESS_PROGRESS: 'processing',\n DID_COMPLETE_ITEM_PROCESSING: 'processing-complete',\n DID_THROW_ITEM_PROCESSING_ERROR: 'processing-error',\n DID_THROW_ITEM_PROCESSING_REVERT_ERROR: 'processing-revert-error',\n DID_ABORT_ITEM_PROCESSING: 'cancelled',\n DID_REVERT_ITEM_PROCESSING: 'idle',\n };\n\n /**\n * Creates the file view\n */\n var create$7 = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n // select\n root.ref.handleClick = function(e) {\n return root.dispatch('DID_ACTIVATE_ITEM', { id: props.id });\n };\n\n // set id\n root.element.id = 'filepond--item-' + props.id;\n root.element.addEventListener('click', root.ref.handleClick);\n\n // file view\n root.ref.container = root.appendChildView(\n root.createChildView(fileWrapper, { id: props.id })\n );\n\n // file panel\n root.ref.panel = root.appendChildView(root.createChildView(panel, { name: 'item-panel' }));\n\n // default start height\n root.ref.panel.height = null;\n\n // by default not marked for removal\n props.markedForRemoval = false;\n\n // if not allowed to reorder file items, exit here\n if (!root.query('GET_ALLOW_REORDER')) return;\n\n // set to idle so shows grab cursor\n root.element.dataset.dragState = 'idle';\n\n var grab = function grab(e) {\n if (!e.isPrimary) return;\n\n var removedActivateListener = false;\n\n var origin = {\n x: e.pageX,\n y: e.pageY,\n };\n\n props.dragOrigin = {\n x: root.translateX,\n y: root.translateY,\n };\n\n props.dragCenter = {\n x: e.offsetX,\n y: e.offsetY,\n };\n\n var dragState = createDragHelper(root.query('GET_ACTIVE_ITEMS'));\n\n root.dispatch('DID_GRAB_ITEM', { id: props.id, dragState: dragState });\n\n var drag = function drag(e) {\n if (!e.isPrimary) return;\n\n e.stopPropagation();\n e.preventDefault();\n\n props.dragOffset = {\n x: e.pageX - origin.x,\n y: e.pageY - origin.y,\n };\n\n // if dragged stop listening to clicks, will re-add when done dragging\n var dist =\n props.dragOffset.x * props.dragOffset.x +\n props.dragOffset.y * props.dragOffset.y;\n if (dist > 16 && !removedActivateListener) {\n removedActivateListener = true;\n root.element.removeEventListener('click', root.ref.handleClick);\n }\n\n root.dispatch('DID_DRAG_ITEM', { id: props.id, dragState: dragState });\n };\n\n var drop = function drop(e) {\n if (!e.isPrimary) return;\n\n props.dragOffset = {\n x: e.pageX - origin.x,\n y: e.pageY - origin.y,\n };\n\n reset();\n };\n\n var cancel = function cancel() {\n reset();\n };\n\n var reset = function reset() {\n document.removeEventListener('pointercancel', cancel);\n document.removeEventListener('pointermove', drag);\n document.removeEventListener('pointerup', drop);\n\n root.dispatch('DID_DROP_ITEM', { id: props.id, dragState: dragState });\n\n // start listening to clicks again\n if (removedActivateListener) {\n setTimeout(function() {\n return root.element.addEventListener('click', root.ref.handleClick);\n }, 0);\n }\n };\n\n document.addEventListener('pointercancel', cancel);\n document.addEventListener('pointermove', drag);\n document.addEventListener('pointerup', drop);\n };\n\n root.element.addEventListener('pointerdown', grab);\n };\n\n var route$1 = createRoute({\n DID_UPDATE_PANEL_HEIGHT: function DID_UPDATE_PANEL_HEIGHT(_ref2) {\n var root = _ref2.root,\n action = _ref2.action;\n root.height = action.height;\n },\n });\n\n var write$4 = createRoute(\n {\n DID_GRAB_ITEM: function DID_GRAB_ITEM(_ref3) {\n var root = _ref3.root,\n props = _ref3.props;\n props.dragOrigin = {\n x: root.translateX,\n y: root.translateY,\n };\n },\n DID_DRAG_ITEM: function DID_DRAG_ITEM(_ref4) {\n var root = _ref4.root;\n root.element.dataset.dragState = 'drag';\n },\n DID_DROP_ITEM: function DID_DROP_ITEM(_ref5) {\n var root = _ref5.root,\n props = _ref5.props;\n props.dragOffset = null;\n props.dragOrigin = null;\n root.element.dataset.dragState = 'drop';\n },\n },\n\n function(_ref6) {\n var root = _ref6.root,\n actions = _ref6.actions,\n props = _ref6.props,\n shouldOptimize = _ref6.shouldOptimize;\n if (root.element.dataset.dragState === 'drop') {\n if (root.scaleX <= 1) {\n root.element.dataset.dragState = 'idle';\n }\n }\n\n // select last state change action\n var action = actions\n .concat()\n .filter(function(action) {\n return /^DID_/.test(action.type);\n })\n .reverse()\n .find(function(action) {\n return StateMap[action.type];\n });\n\n // no need to set same state twice\n if (action && action.type !== props.currentState) {\n // set current state\n props.currentState = action.type;\n\n // set state\n root.element.dataset.filepondItemState = StateMap[props.currentState] || '';\n }\n\n // route actions\n var aspectRatio =\n root.query('GET_ITEM_PANEL_ASPECT_RATIO') || root.query('GET_PANEL_ASPECT_RATIO');\n if (!aspectRatio) {\n route$1({ root: root, actions: actions, props: props });\n if (!root.height && root.ref.container.rect.element.height > 0) {\n root.height = root.ref.container.rect.element.height;\n }\n } else if (!shouldOptimize) {\n root.height = root.rect.element.width * aspectRatio;\n }\n\n // sync panel height with item height\n if (shouldOptimize) {\n root.ref.panel.height = null;\n }\n\n root.ref.panel.height = root.height;\n }\n );\n\n var item = createView({\n create: create$7,\n write: write$4,\n destroy: function destroy(_ref7) {\n var root = _ref7.root,\n props = _ref7.props;\n root.element.removeEventListener('click', root.ref.handleClick);\n root.dispatch('RELEASE_ITEM', { query: props.id });\n },\n tag: 'li',\n name: 'item',\n mixins: {\n apis: [\n 'id',\n 'interactionMethod',\n 'markedForRemoval',\n 'spawnDate',\n 'dragCenter',\n 'dragOrigin',\n 'dragOffset',\n ],\n\n styles: ['translateX', 'translateY', 'scaleX', 'scaleY', 'opacity', 'height'],\n animations: {\n scaleX: ITEM_SCALE_SPRING,\n scaleY: ITEM_SCALE_SPRING,\n translateX: ITEM_TRANSLATE_SPRING,\n translateY: ITEM_TRANSLATE_SPRING,\n opacity: { type: 'tween', duration: 150 },\n },\n },\n });\n\n var getItemsPerRow = function(horizontalSpace, itemWidth) {\n // add one pixel leeway, when using percentages for item width total items can be 1.99 per row\n\n return Math.max(1, Math.floor((horizontalSpace + 1) / itemWidth));\n };\n\n var getItemIndexByPosition = function getItemIndexByPosition(view, children, positionInView) {\n if (!positionInView) return;\n\n var horizontalSpace = view.rect.element.width;\n // const children = view.childViews;\n var l = children.length;\n var last = null;\n\n // -1, don't move items to accomodate (either add to top or bottom)\n if (l === 0 || positionInView.top < children[0].rect.element.top) return -1;\n\n // let's get the item width\n var item = children[0];\n var itemRect = item.rect.element;\n var itemHorizontalMargin = itemRect.marginLeft + itemRect.marginRight;\n var itemWidth = itemRect.width + itemHorizontalMargin;\n var itemsPerRow = getItemsPerRow(horizontalSpace, itemWidth);\n\n // stack\n if (itemsPerRow === 1) {\n for (var index = 0; index < l; index++) {\n var child = children[index];\n var childMid = child.rect.outer.top + child.rect.element.height * 0.5;\n if (positionInView.top < childMid) {\n return index;\n }\n }\n return l;\n }\n\n // grid\n var itemVerticalMargin = itemRect.marginTop + itemRect.marginBottom;\n var itemHeight = itemRect.height + itemVerticalMargin;\n for (var _index = 0; _index < l; _index++) {\n var indexX = _index % itemsPerRow;\n var indexY = Math.floor(_index / itemsPerRow);\n\n var offsetX = indexX * itemWidth;\n var offsetY = indexY * itemHeight;\n\n var itemTop = offsetY - itemRect.marginTop;\n var itemRight = offsetX + itemWidth;\n var itemBottom = offsetY + itemHeight + itemRect.marginBottom;\n\n if (positionInView.top < itemBottom && positionInView.top > itemTop) {\n if (positionInView.left < itemRight) {\n return _index;\n } else if (_index !== l - 1) {\n last = _index;\n } else {\n last = null;\n }\n }\n }\n\n if (last !== null) {\n return last;\n }\n\n return l;\n };\n\n var dropAreaDimensions = {\n height: 0,\n width: 0,\n get getHeight() {\n return this.height;\n },\n set setHeight(val) {\n if (this.height === 0 || val === 0) this.height = val;\n },\n get getWidth() {\n return this.width;\n },\n set setWidth(val) {\n if (this.width === 0 || val === 0) this.width = val;\n },\n setDimensions: function setDimensions(height, width) {\n if (this.height === 0 || height === 0) this.height = height;\n if (this.width === 0 || width === 0) this.width = width;\n },\n };\n\n var create$8 = function create(_ref) {\n var root = _ref.root;\n // need to set role to list as otherwise it won't be read as a list by VoiceOver\n attr(root.element, 'role', 'list');\n\n root.ref.lastItemSpanwDate = Date.now();\n };\n\n /**\n * Inserts a new item\n * @param root\n * @param action\n */\n var addItemView = function addItemView(_ref2) {\n var root = _ref2.root,\n action = _ref2.action;\n var id = action.id,\n index = action.index,\n interactionMethod = action.interactionMethod;\n\n root.ref.addIndex = index;\n\n var now = Date.now();\n var spawnDate = now;\n var opacity = 1;\n\n if (interactionMethod !== InteractionMethod.NONE) {\n opacity = 0;\n var cooldown = root.query('GET_ITEM_INSERT_INTERVAL');\n var dist = now - root.ref.lastItemSpanwDate;\n spawnDate = dist < cooldown ? now + (cooldown - dist) : now;\n }\n\n root.ref.lastItemSpanwDate = spawnDate;\n\n root.appendChildView(\n root.createChildView(\n // view type\n item,\n\n // props\n {\n spawnDate: spawnDate,\n id: id,\n opacity: opacity,\n interactionMethod: interactionMethod,\n }\n ),\n\n index\n );\n };\n\n var moveItem = function moveItem(item, x, y) {\n var vx = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var vy = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;\n // set to null to remove animation while dragging\n if (item.dragOffset) {\n item.translateX = null;\n item.translateY = null;\n item.translateX = item.dragOrigin.x + item.dragOffset.x;\n item.translateY = item.dragOrigin.y + item.dragOffset.y;\n item.scaleX = 1.025;\n item.scaleY = 1.025;\n } else {\n item.translateX = x;\n item.translateY = y;\n\n if (Date.now() > item.spawnDate) {\n // reveal element\n if (item.opacity === 0) {\n introItemView(item, x, y, vx, vy);\n }\n\n // make sure is default scale every frame\n item.scaleX = 1;\n item.scaleY = 1;\n item.opacity = 1;\n }\n }\n };\n\n var introItemView = function introItemView(item, x, y, vx, vy) {\n if (item.interactionMethod === InteractionMethod.NONE) {\n item.translateX = null;\n item.translateX = x;\n item.translateY = null;\n item.translateY = y;\n } else if (item.interactionMethod === InteractionMethod.DROP) {\n item.translateX = null;\n item.translateX = x - vx * 20;\n\n item.translateY = null;\n item.translateY = y - vy * 10;\n\n item.scaleX = 0.8;\n item.scaleY = 0.8;\n } else if (item.interactionMethod === InteractionMethod.BROWSE) {\n item.translateY = null;\n item.translateY = y - 30;\n } else if (item.interactionMethod === InteractionMethod.API) {\n item.translateX = null;\n item.translateX = x - 30;\n item.translateY = null;\n }\n };\n\n /**\n * Removes an existing item\n * @param root\n * @param action\n */\n var removeItemView = function removeItemView(_ref3) {\n var root = _ref3.root,\n action = _ref3.action;\n var id = action.id;\n\n // get the view matching the given id\n var view = root.childViews.find(function(child) {\n return child.id === id;\n });\n\n // if no view found, exit\n if (!view) {\n return;\n }\n\n // animate view out of view\n view.scaleX = 0.9;\n view.scaleY = 0.9;\n view.opacity = 0;\n\n // mark for removal\n view.markedForRemoval = true;\n };\n\n var getItemHeight = function getItemHeight(child) {\n return (\n child.rect.element.height +\n child.rect.element.marginBottom +\n child.rect.element.marginTop\n );\n };\n var getItemWidth = function getItemWidth(child) {\n return (\n child.rect.element.width +\n child.rect.element.marginLeft * 0.5 +\n child.rect.element.marginRight * 0.5\n );\n };\n\n var dragItem = function dragItem(_ref4) {\n var root = _ref4.root,\n action = _ref4.action;\n var id = action.id,\n dragState = action.dragState;\n\n // reference to item\n var item = root.query('GET_ITEM', { id: id });\n\n // get the view matching the given id\n var view = root.childViews.find(function(child) {\n return child.id === id;\n });\n\n var numItems = root.childViews.length;\n var oldIndex = dragState.getItemIndex(item);\n\n // if no view found, exit\n if (!view) return;\n\n var dragPosition = {\n x: view.dragOrigin.x + view.dragOffset.x + view.dragCenter.x,\n y: view.dragOrigin.y + view.dragOffset.y + view.dragCenter.y,\n };\n\n // get drag area dimensions\n var dragHeight = getItemHeight(view);\n var dragWidth = getItemWidth(view);\n\n // get rows and columns (There will always be at least one row and one column if a file is present)\n var cols = Math.floor(root.rect.outer.width / dragWidth);\n if (cols > numItems) cols = numItems;\n\n // rows are used to find when we have left the preview area bounding box\n var rows = Math.floor(numItems / cols + 1);\n\n dropAreaDimensions.setHeight = dragHeight * rows;\n dropAreaDimensions.setWidth = dragWidth * cols;\n\n // get new index of dragged item\n var location = {\n y: Math.floor(dragPosition.y / dragHeight),\n x: Math.floor(dragPosition.x / dragWidth),\n getGridIndex: function getGridIndex() {\n if (\n dragPosition.y > dropAreaDimensions.getHeight ||\n dragPosition.y < 0 ||\n dragPosition.x > dropAreaDimensions.getWidth ||\n dragPosition.x < 0\n )\n return oldIndex;\n return this.y * cols + this.x;\n },\n getColIndex: function getColIndex() {\n var items = root.query('GET_ACTIVE_ITEMS');\n var visibleChildren = root.childViews.filter(function(child) {\n return child.rect.element.height;\n });\n var children = items.map(function(item) {\n return visibleChildren.find(function(childView) {\n return childView.id === item.id;\n });\n });\n\n var currentIndex = children.findIndex(function(child) {\n return child === view;\n });\n var dragHeight = getItemHeight(view);\n var l = children.length;\n var idx = l;\n var childHeight = 0;\n var childBottom = 0;\n var childTop = 0;\n for (var i = 0; i < l; i++) {\n childHeight = getItemHeight(children[i]);\n childTop = childBottom;\n childBottom = childTop + childHeight;\n if (dragPosition.y < childBottom) {\n if (currentIndex > i) {\n if (dragPosition.y < childTop + dragHeight) {\n idx = i;\n break;\n }\n continue;\n }\n idx = i;\n break;\n }\n }\n return idx;\n },\n };\n\n // get new index\n var index = cols > 1 ? location.getGridIndex() : location.getColIndex();\n root.dispatch('MOVE_ITEM', { query: view, index: index });\n\n // if the index of the item changed, dispatch reorder action\n var currentIndex = dragState.getIndex();\n\n if (currentIndex === undefined || currentIndex !== index) {\n dragState.setIndex(index);\n\n if (currentIndex === undefined) return;\n\n root.dispatch('DID_REORDER_ITEMS', {\n items: root.query('GET_ACTIVE_ITEMS'),\n origin: oldIndex,\n target: index,\n });\n }\n };\n\n /**\n * Setup action routes\n */\n var route$2 = createRoute({\n DID_ADD_ITEM: addItemView,\n DID_REMOVE_ITEM: removeItemView,\n DID_DRAG_ITEM: dragItem,\n });\n\n /**\n * Write to view\n * @param root\n * @param actions\n * @param props\n */\n var write$5 = function write(_ref5) {\n var root = _ref5.root,\n props = _ref5.props,\n actions = _ref5.actions,\n shouldOptimize = _ref5.shouldOptimize;\n // route actions\n route$2({ root: root, props: props, actions: actions });\n var dragCoordinates = props.dragCoordinates;\n\n // available space on horizontal axis\n var horizontalSpace = root.rect.element.width;\n\n // only draw children that have dimensions\n var visibleChildren = root.childViews.filter(function(child) {\n return child.rect.element.height;\n });\n\n // sort based on current active items\n var children = root\n .query('GET_ACTIVE_ITEMS')\n .map(function(item) {\n return visibleChildren.find(function(child) {\n return child.id === item.id;\n });\n })\n .filter(function(item) {\n return item;\n });\n\n // get index\n var dragIndex = dragCoordinates\n ? getItemIndexByPosition(root, children, dragCoordinates)\n : null;\n\n // add index is used to reserve the dropped/added item index till the actual item is rendered\n var addIndex = root.ref.addIndex || null;\n\n // add index no longer needed till possibly next draw\n root.ref.addIndex = null;\n\n var dragIndexOffset = 0;\n var removeIndexOffset = 0;\n var addIndexOffset = 0;\n\n if (children.length === 0) return;\n\n var childRect = children[0].rect.element;\n var itemVerticalMargin = childRect.marginTop + childRect.marginBottom;\n var itemHorizontalMargin = childRect.marginLeft + childRect.marginRight;\n var itemWidth = childRect.width + itemHorizontalMargin;\n var itemHeight = childRect.height + itemVerticalMargin;\n var itemsPerRow = getItemsPerRow(horizontalSpace, itemWidth);\n\n // stack\n if (itemsPerRow === 1) {\n var offsetY = 0;\n var dragOffset = 0;\n\n children.forEach(function(child, index) {\n if (dragIndex) {\n var dist = index - dragIndex;\n if (dist === -2) {\n dragOffset = -itemVerticalMargin * 0.25;\n } else if (dist === -1) {\n dragOffset = -itemVerticalMargin * 0.75;\n } else if (dist === 0) {\n dragOffset = itemVerticalMargin * 0.75;\n } else if (dist === 1) {\n dragOffset = itemVerticalMargin * 0.25;\n } else {\n dragOffset = 0;\n }\n }\n\n if (shouldOptimize) {\n child.translateX = null;\n child.translateY = null;\n }\n\n if (!child.markedForRemoval) {\n moveItem(child, 0, offsetY + dragOffset);\n }\n\n var itemHeight = child.rect.element.height + itemVerticalMargin;\n\n var visualHeight = itemHeight * (child.markedForRemoval ? child.opacity : 1);\n\n offsetY += visualHeight;\n });\n }\n // grid\n else {\n var prevX = 0;\n var prevY = 0;\n\n children.forEach(function(child, index) {\n if (index === dragIndex) {\n dragIndexOffset = 1;\n }\n\n if (index === addIndex) {\n addIndexOffset += 1;\n }\n\n if (child.markedForRemoval && child.opacity < 0.5) {\n removeIndexOffset -= 1;\n }\n\n var visualIndex = index + addIndexOffset + dragIndexOffset + removeIndexOffset;\n\n var indexX = visualIndex % itemsPerRow;\n var indexY = Math.floor(visualIndex / itemsPerRow);\n\n var offsetX = indexX * itemWidth;\n var offsetY = indexY * itemHeight;\n\n var vectorX = Math.sign(offsetX - prevX);\n var vectorY = Math.sign(offsetY - prevY);\n\n prevX = offsetX;\n prevY = offsetY;\n\n if (child.markedForRemoval) return;\n\n if (shouldOptimize) {\n child.translateX = null;\n child.translateY = null;\n }\n\n moveItem(child, offsetX, offsetY, vectorX, vectorY);\n });\n }\n };\n\n /**\n * Filters actions that are meant specifically for a certain child of the list\n * @param child\n * @param actions\n */\n var filterSetItemActions = function filterSetItemActions(child, actions) {\n return actions.filter(function(action) {\n // if action has an id, filter out actions that don't have this child id\n if (action.data && action.data.id) {\n return child.id === action.data.id;\n }\n\n // allow all other actions\n return true;\n });\n };\n\n var list = createView({\n create: create$8,\n write: write$5,\n tag: 'ul',\n name: 'list',\n didWriteView: function didWriteView(_ref6) {\n var root = _ref6.root;\n root.childViews\n .filter(function(view) {\n return view.markedForRemoval && view.opacity === 0 && view.resting;\n })\n .forEach(function(view) {\n view._destroy();\n root.removeChildView(view);\n });\n },\n filterFrameActionsForChild: filterSetItemActions,\n mixins: {\n apis: ['dragCoordinates'],\n },\n });\n\n var create$9 = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n root.ref.list = root.appendChildView(root.createChildView(list));\n props.dragCoordinates = null;\n props.overflowing = false;\n };\n\n var storeDragCoordinates = function storeDragCoordinates(_ref2) {\n var root = _ref2.root,\n props = _ref2.props,\n action = _ref2.action;\n if (!root.query('GET_ITEM_INSERT_LOCATION_FREEDOM')) return;\n props.dragCoordinates = {\n left: action.position.scopeLeft - root.ref.list.rect.element.left,\n top:\n action.position.scopeTop -\n (root.rect.outer.top + root.rect.element.marginTop + root.rect.element.scrollTop),\n };\n };\n\n var clearDragCoordinates = function clearDragCoordinates(_ref3) {\n var props = _ref3.props;\n props.dragCoordinates = null;\n };\n\n var route$3 = createRoute({\n DID_DRAG: storeDragCoordinates,\n DID_END_DRAG: clearDragCoordinates,\n });\n\n var write$6 = function write(_ref4) {\n var root = _ref4.root,\n props = _ref4.props,\n actions = _ref4.actions;\n\n // route actions\n route$3({ root: root, props: props, actions: actions });\n\n // current drag position\n root.ref.list.dragCoordinates = props.dragCoordinates;\n\n // if currently overflowing but no longer received overflow\n if (props.overflowing && !props.overflow) {\n props.overflowing = false;\n\n // reset overflow state\n root.element.dataset.state = '';\n root.height = null;\n }\n\n // if is not overflowing currently but does receive overflow value\n if (props.overflow) {\n var newHeight = Math.round(props.overflow);\n if (newHeight !== root.height) {\n props.overflowing = true;\n root.element.dataset.state = 'overflow';\n root.height = newHeight;\n }\n }\n };\n\n var listScroller = createView({\n create: create$9,\n write: write$6,\n name: 'list-scroller',\n mixins: {\n apis: ['overflow', 'dragCoordinates'],\n styles: ['height', 'translateY'],\n animations: {\n translateY: 'spring',\n },\n },\n });\n\n var attrToggle = function attrToggle(element, name, state) {\n var enabledValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n if (state) {\n attr(element, name, enabledValue);\n } else {\n element.removeAttribute(name);\n }\n };\n\n var resetFileInput = function resetFileInput(input) {\n // no value, no need to reset\n if (!input || input.value === '') {\n return;\n }\n\n try {\n // for modern browsers\n input.value = '';\n } catch (err) {}\n\n // for IE10\n if (input.value) {\n // quickly append input to temp form and reset form\n var form = createElement$1('form');\n var parentNode = input.parentNode;\n var ref = input.nextSibling;\n form.appendChild(input);\n form.reset();\n\n // re-inject input where it originally was\n if (ref) {\n parentNode.insertBefore(input, ref);\n } else {\n parentNode.appendChild(input);\n }\n }\n };\n\n var create$a = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n // set id so can be referenced from outside labels\n root.element.id = 'filepond--browser-' + props.id;\n\n // set name of element (is removed when a value is set)\n attr(root.element, 'name', root.query('GET_NAME'));\n\n // we have to link this element to the status element\n attr(root.element, 'aria-controls', 'filepond--assistant-' + props.id);\n\n // set label, we use labelled by as otherwise the screenreader does not read the \"browse\" text in the label (as it has tabindex: 0)\n attr(root.element, 'aria-labelledby', 'filepond--drop-label-' + props.id);\n\n // set configurable props\n setAcceptedFileTypes({\n root: root,\n action: { value: root.query('GET_ACCEPTED_FILE_TYPES') },\n });\n toggleAllowMultiple({ root: root, action: { value: root.query('GET_ALLOW_MULTIPLE') } });\n toggleDirectoryFilter({\n root: root,\n action: { value: root.query('GET_ALLOW_DIRECTORIES_ONLY') },\n });\n toggleDisabled({ root: root });\n toggleRequired({ root: root, action: { value: root.query('GET_REQUIRED') } });\n setCaptureMethod({ root: root, action: { value: root.query('GET_CAPTURE_METHOD') } });\n\n // handle changes to the input field\n root.ref.handleChange = function(e) {\n if (!root.element.value) {\n return;\n }\n\n // extract files and move value of webkitRelativePath path to _relativePath\n var files = Array.from(root.element.files).map(function(file) {\n file._relativePath = file.webkitRelativePath;\n return file;\n });\n\n // we add a little delay so the OS file select window can move out of the way before we add our file\n setTimeout(function() {\n // load files\n props.onload(files);\n\n // reset input, it's just for exposing a method to drop files, should not retain any state\n resetFileInput(root.element);\n }, 250);\n };\n\n root.element.addEventListener('change', root.ref.handleChange);\n };\n\n var setAcceptedFileTypes = function setAcceptedFileTypes(_ref2) {\n var root = _ref2.root,\n action = _ref2.action;\n if (!root.query('GET_ALLOW_SYNC_ACCEPT_ATTRIBUTE')) return;\n attrToggle(\n root.element,\n 'accept',\n !!action.value,\n action.value ? action.value.join(',') : ''\n );\n };\n\n var toggleAllowMultiple = function toggleAllowMultiple(_ref3) {\n var root = _ref3.root,\n action = _ref3.action;\n attrToggle(root.element, 'multiple', action.value);\n };\n\n var toggleDirectoryFilter = function toggleDirectoryFilter(_ref4) {\n var root = _ref4.root,\n action = _ref4.action;\n attrToggle(root.element, 'webkitdirectory', action.value);\n };\n\n var toggleDisabled = function toggleDisabled(_ref5) {\n var root = _ref5.root;\n var isDisabled = root.query('GET_DISABLED');\n var doesAllowBrowse = root.query('GET_ALLOW_BROWSE');\n var disableField = isDisabled || !doesAllowBrowse;\n attrToggle(root.element, 'disabled', disableField);\n };\n\n var toggleRequired = function toggleRequired(_ref6) {\n var root = _ref6.root,\n action = _ref6.action;\n // want to remove required, always possible\n if (!action.value) {\n attrToggle(root.element, 'required', false);\n }\n // if want to make required, only possible when zero items\n else if (root.query('GET_TOTAL_ITEMS') === 0) {\n attrToggle(root.element, 'required', true);\n }\n };\n\n var setCaptureMethod = function setCaptureMethod(_ref7) {\n var root = _ref7.root,\n action = _ref7.action;\n attrToggle(\n root.element,\n 'capture',\n !!action.value,\n action.value === true ? '' : action.value\n );\n };\n\n var updateRequiredStatus = function updateRequiredStatus(_ref8) {\n var root = _ref8.root;\n var element = root.element;\n // always remove the required attribute when more than zero items\n if (root.query('GET_TOTAL_ITEMS') > 0) {\n attrToggle(element, 'required', false);\n attrToggle(element, 'name', false);\n\n // still has items\n var activeItems = root.query('GET_ACTIVE_ITEMS');\n var hasInvalidField = false;\n for (var i = 0; i < activeItems.length; i++) {\n if (activeItems[i].status === ItemStatus.LOAD_ERROR) {\n hasInvalidField = true;\n }\n }\n // set validity status\n root.element.setCustomValidity(\n hasInvalidField ? root.query('GET_LABEL_INVALID_FIELD') : ''\n );\n } else {\n // add name attribute\n attrToggle(element, 'name', true, root.query('GET_NAME'));\n\n // remove any validation messages\n var shouldCheckValidity = root.query('GET_CHECK_VALIDITY');\n if (shouldCheckValidity) {\n element.setCustomValidity('');\n }\n\n // we only add required if the field has been deemed required\n if (root.query('GET_REQUIRED')) {\n attrToggle(element, 'required', true);\n }\n }\n };\n\n var updateFieldValidityStatus = function updateFieldValidityStatus(_ref9) {\n var root = _ref9.root;\n var shouldCheckValidity = root.query('GET_CHECK_VALIDITY');\n if (!shouldCheckValidity) return;\n root.element.setCustomValidity(root.query('GET_LABEL_INVALID_FIELD'));\n };\n\n var browser = createView({\n tag: 'input',\n name: 'browser',\n ignoreRect: true,\n ignoreRectUpdate: true,\n attributes: {\n type: 'file',\n },\n\n create: create$a,\n destroy: function destroy(_ref10) {\n var root = _ref10.root;\n root.element.removeEventListener('change', root.ref.handleChange);\n },\n write: createRoute({\n DID_LOAD_ITEM: updateRequiredStatus,\n DID_REMOVE_ITEM: updateRequiredStatus,\n DID_THROW_ITEM_INVALID: updateFieldValidityStatus,\n\n DID_SET_DISABLED: toggleDisabled,\n DID_SET_ALLOW_BROWSE: toggleDisabled,\n DID_SET_ALLOW_DIRECTORIES_ONLY: toggleDirectoryFilter,\n DID_SET_ALLOW_MULTIPLE: toggleAllowMultiple,\n DID_SET_ACCEPTED_FILE_TYPES: setAcceptedFileTypes,\n DID_SET_CAPTURE_METHOD: setCaptureMethod,\n DID_SET_REQUIRED: toggleRequired,\n }),\n });\n\n var Key = {\n ENTER: 13,\n SPACE: 32,\n };\n\n var create$b = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n // create the label and link it to the file browser\n var label = createElement$1('label');\n attr(label, 'for', 'filepond--browser-' + props.id);\n\n // use for labeling file input (aria-labelledby on file input)\n attr(label, 'id', 'filepond--drop-label-' + props.id);\n\n // handle keys\n root.ref.handleKeyDown = function(e) {\n var isActivationKey = e.keyCode === Key.ENTER || e.keyCode === Key.SPACE;\n if (!isActivationKey) return;\n // stops from triggering the element a second time\n e.preventDefault();\n\n // click link (will then in turn activate file input)\n root.ref.label.click();\n };\n\n root.ref.handleClick = function(e) {\n var isLabelClick = e.target === label || label.contains(e.target);\n\n // don't want to click twice\n if (isLabelClick) return;\n\n // click link (will then in turn activate file input)\n root.ref.label.click();\n };\n\n // attach events\n label.addEventListener('keydown', root.ref.handleKeyDown);\n root.element.addEventListener('click', root.ref.handleClick);\n\n // update\n updateLabelValue(label, props.caption);\n\n // add!\n root.appendChild(label);\n root.ref.label = label;\n };\n\n var updateLabelValue = function updateLabelValue(label, value) {\n label.innerHTML = value;\n var clickable = label.querySelector('.filepond--label-action');\n if (clickable) {\n attr(clickable, 'tabindex', '0');\n }\n return value;\n };\n\n var dropLabel = createView({\n name: 'drop-label',\n ignoreRect: true,\n create: create$b,\n destroy: function destroy(_ref2) {\n var root = _ref2.root;\n root.ref.label.addEventListener('keydown', root.ref.handleKeyDown);\n root.element.removeEventListener('click', root.ref.handleClick);\n },\n write: createRoute({\n DID_SET_LABEL_IDLE: function DID_SET_LABEL_IDLE(_ref3) {\n var root = _ref3.root,\n action = _ref3.action;\n updateLabelValue(root.ref.label, action.value);\n },\n }),\n\n mixins: {\n styles: ['opacity', 'translateX', 'translateY'],\n animations: {\n opacity: { type: 'tween', duration: 150 },\n translateX: 'spring',\n translateY: 'spring',\n },\n },\n });\n\n var blob = createView({\n name: 'drip-blob',\n ignoreRect: true,\n mixins: {\n styles: ['translateX', 'translateY', 'scaleX', 'scaleY', 'opacity'],\n animations: {\n scaleX: 'spring',\n scaleY: 'spring',\n translateX: 'spring',\n translateY: 'spring',\n opacity: { type: 'tween', duration: 250 },\n },\n },\n });\n\n var addBlob = function addBlob(_ref) {\n var root = _ref.root;\n var centerX = root.rect.element.width * 0.5;\n var centerY = root.rect.element.height * 0.5;\n\n root.ref.blob = root.appendChildView(\n root.createChildView(blob, {\n opacity: 0,\n scaleX: 2.5,\n scaleY: 2.5,\n translateX: centerX,\n translateY: centerY,\n })\n );\n };\n\n var moveBlob = function moveBlob(_ref2) {\n var root = _ref2.root,\n action = _ref2.action;\n if (!root.ref.blob) {\n addBlob({ root: root });\n return;\n }\n\n root.ref.blob.translateX = action.position.scopeLeft;\n root.ref.blob.translateY = action.position.scopeTop;\n root.ref.blob.scaleX = 1;\n root.ref.blob.scaleY = 1;\n root.ref.blob.opacity = 1;\n };\n\n var hideBlob = function hideBlob(_ref3) {\n var root = _ref3.root;\n if (!root.ref.blob) {\n return;\n }\n root.ref.blob.opacity = 0;\n };\n\n var explodeBlob = function explodeBlob(_ref4) {\n var root = _ref4.root;\n if (!root.ref.blob) {\n return;\n }\n root.ref.blob.scaleX = 2.5;\n root.ref.blob.scaleY = 2.5;\n root.ref.blob.opacity = 0;\n };\n\n var write$7 = function write(_ref5) {\n var root = _ref5.root,\n props = _ref5.props,\n actions = _ref5.actions;\n route$4({ root: root, props: props, actions: actions });\n var blob = root.ref.blob;\n\n if (actions.length === 0 && blob && blob.opacity === 0) {\n root.removeChildView(blob);\n root.ref.blob = null;\n }\n };\n\n var route$4 = createRoute({\n DID_DRAG: moveBlob,\n DID_DROP: explodeBlob,\n DID_END_DRAG: hideBlob,\n });\n\n var drip = createView({\n ignoreRect: true,\n ignoreRectUpdate: true,\n name: 'drip',\n write: write$7,\n });\n\n var setInputFiles = function setInputFiles(element, files) {\n try {\n // Create a DataTransfer instance and add a newly created file\n var dataTransfer = new DataTransfer();\n files.forEach(function(file) {\n if (file instanceof File) {\n dataTransfer.items.add(file);\n } else {\n dataTransfer.items.add(\n new File([file], file.name, {\n type: file.type,\n })\n );\n }\n });\n\n // Assign the DataTransfer files list to the file input\n element.files = dataTransfer.files;\n } catch (err) {\n return false;\n }\n return true;\n };\n\n var create$c = function create(_ref) {\n var root = _ref.root;\n root.ref.fields = {};\n var legend = document.createElement('legend');\n legend.textContent = 'Files';\n root.element.appendChild(legend);\n };\n\n var getField = function getField(root, id) {\n return root.ref.fields[id];\n };\n\n var syncFieldPositionsWithItems = function syncFieldPositionsWithItems(root) {\n root.query('GET_ACTIVE_ITEMS').forEach(function(item) {\n if (!root.ref.fields[item.id]) return;\n root.element.appendChild(root.ref.fields[item.id]);\n });\n };\n\n var didReorderItems = function didReorderItems(_ref2) {\n var root = _ref2.root;\n return syncFieldPositionsWithItems(root);\n };\n\n var didAddItem = function didAddItem(_ref3) {\n var root = _ref3.root,\n action = _ref3.action;\n var fileItem = root.query('GET_ITEM', action.id);\n var isLocalFile = fileItem.origin === FileOrigin.LOCAL;\n var shouldUseFileInput = !isLocalFile && root.query('SHOULD_UPDATE_FILE_INPUT');\n var dataContainer = createElement$1('input');\n dataContainer.type = shouldUseFileInput ? 'file' : 'hidden';\n dataContainer.name = root.query('GET_NAME');\n root.ref.fields[action.id] = dataContainer;\n syncFieldPositionsWithItems(root);\n };\n\n var didLoadItem$1 = function didLoadItem(_ref4) {\n var root = _ref4.root,\n action = _ref4.action;\n var field = getField(root, action.id);\n if (!field) return;\n\n // store server ref in hidden input\n if (action.serverFileReference !== null) field.value = action.serverFileReference;\n\n // store file item in file input\n if (!root.query('SHOULD_UPDATE_FILE_INPUT')) return;\n\n var fileItem = root.query('GET_ITEM', action.id);\n setInputFiles(field, [fileItem.file]);\n };\n\n var didPrepareOutput = function didPrepareOutput(_ref5) {\n var root = _ref5.root,\n action = _ref5.action;\n // this timeout pushes the handler after 'load'\n if (!root.query('SHOULD_UPDATE_FILE_INPUT')) return;\n setTimeout(function() {\n var field = getField(root, action.id);\n if (!field) return;\n setInputFiles(field, [action.file]);\n }, 0);\n };\n\n var didSetDisabled = function didSetDisabled(_ref6) {\n var root = _ref6.root;\n root.element.disabled = root.query('GET_DISABLED');\n };\n\n var didRemoveItem = function didRemoveItem(_ref7) {\n var root = _ref7.root,\n action = _ref7.action;\n var field = getField(root, action.id);\n if (!field) return;\n if (field.parentNode) field.parentNode.removeChild(field);\n delete root.ref.fields[action.id];\n };\n\n // only runs for server files. will refuse to update the value if the field\n // is a file field\n var didDefineValue = function didDefineValue(_ref8) {\n var root = _ref8.root,\n action = _ref8.action;\n var field = getField(root, action.id);\n if (!field) return;\n if (action.value === null) {\n // clear field value\n field.removeAttribute('value');\n } else {\n // set field value\n if (field.type != 'file') {\n field.value = action.value;\n }\n }\n syncFieldPositionsWithItems(root);\n };\n\n var write$8 = createRoute({\n DID_SET_DISABLED: didSetDisabled,\n DID_ADD_ITEM: didAddItem,\n DID_LOAD_ITEM: didLoadItem$1,\n DID_REMOVE_ITEM: didRemoveItem,\n DID_DEFINE_VALUE: didDefineValue,\n DID_PREPARE_OUTPUT: didPrepareOutput,\n DID_REORDER_ITEMS: didReorderItems,\n DID_SORT_ITEMS: didReorderItems,\n });\n\n var data = createView({\n tag: 'fieldset',\n name: 'data',\n create: create$c,\n write: write$8,\n ignoreRect: true,\n });\n\n var getRootNode = function getRootNode(element) {\n return 'getRootNode' in element ? element.getRootNode() : document;\n };\n\n var images = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'tiff'];\n var text$1 = ['css', 'csv', 'html', 'txt'];\n var map = {\n zip: 'zip|compressed',\n epub: 'application/epub+zip',\n };\n\n var guesstimateMimeType = function guesstimateMimeType() {\n var extension = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n extension = extension.toLowerCase();\n if (images.includes(extension)) {\n return (\n 'image/' +\n (extension === 'jpg' ? 'jpeg' : extension === 'svg' ? 'svg+xml' : extension)\n );\n }\n if (text$1.includes(extension)) {\n return 'text/' + extension;\n }\n\n return map[extension] || '';\n };\n\n var requestDataTransferItems = function requestDataTransferItems(dataTransfer) {\n return new Promise(function(resolve, reject) {\n // try to get links from transfer, if found we'll exit immediately (unless a file is in the dataTransfer as well, this is because Firefox could represent the file as a URL and a file object at the same time)\n var links = getLinks(dataTransfer);\n if (links.length && !hasFiles(dataTransfer)) {\n return resolve(links);\n }\n // try to get files from the transfer\n getFiles(dataTransfer).then(resolve);\n });\n };\n\n /**\n * Test if datatransfer has files\n */\n var hasFiles = function hasFiles(dataTransfer) {\n if (dataTransfer.files) return dataTransfer.files.length > 0;\n return false;\n };\n\n /**\n * Extracts files from a DataTransfer object\n */\n var getFiles = function getFiles(dataTransfer) {\n return new Promise(function(resolve, reject) {\n // get the transfer items as promises\n var promisedFiles = (dataTransfer.items ? Array.from(dataTransfer.items) : [])\n // only keep file system items (files and directories)\n .filter(function(item) {\n return isFileSystemItem(item);\n })\n\n // map each item to promise\n .map(function(item) {\n return getFilesFromItem(item);\n });\n\n // if is empty, see if we can extract some info from the files property as a fallback\n if (!promisedFiles.length) {\n // TODO: test for directories (should not be allowed)\n // Use FileReader, problem is that the files property gets lost in the process\n resolve(dataTransfer.files ? Array.from(dataTransfer.files) : []);\n return;\n }\n\n // done!\n Promise.all(promisedFiles)\n .then(function(returnedFileGroups) {\n // flatten groups\n var files = [];\n returnedFileGroups.forEach(function(group) {\n files.push.apply(files, group);\n });\n\n // done (filter out empty files)!\n resolve(\n files\n .filter(function(file) {\n return file;\n })\n .map(function(file) {\n if (!file._relativePath)\n file._relativePath = file.webkitRelativePath;\n return file;\n })\n );\n })\n .catch(console.error);\n });\n };\n\n var isFileSystemItem = function isFileSystemItem(item) {\n if (isEntry(item)) {\n var entry = getAsEntry(item);\n if (entry) {\n return entry.isFile || entry.isDirectory;\n }\n }\n return item.kind === 'file';\n };\n\n var getFilesFromItem = function getFilesFromItem(item) {\n return new Promise(function(resolve, reject) {\n if (isDirectoryEntry(item)) {\n getFilesInDirectory(getAsEntry(item))\n .then(resolve)\n .catch(reject);\n return;\n }\n\n resolve([item.getAsFile()]);\n });\n };\n\n var getFilesInDirectory = function getFilesInDirectory(entry) {\n return new Promise(function(resolve, reject) {\n var files = [];\n\n // the total entries to read\n var dirCounter = 0;\n var fileCounter = 0;\n\n var resolveIfDone = function resolveIfDone() {\n if (fileCounter === 0 && dirCounter === 0) {\n resolve(files);\n }\n };\n\n // the recursive function\n var readEntries = function readEntries(dirEntry) {\n dirCounter++;\n\n var directoryReader = dirEntry.createReader();\n\n // directories are returned in batches, we need to process all batches before we're done\n var readBatch = function readBatch() {\n directoryReader.readEntries(function(entries) {\n if (entries.length === 0) {\n dirCounter--;\n resolveIfDone();\n return;\n }\n\n entries.forEach(function(entry) {\n // recursively read more directories\n if (entry.isDirectory) {\n readEntries(entry);\n } else {\n // read as file\n fileCounter++;\n\n entry.file(function(file) {\n var correctedFile = correctMissingFileType(file);\n if (entry.fullPath)\n correctedFile._relativePath = entry.fullPath;\n files.push(correctedFile);\n fileCounter--;\n resolveIfDone();\n });\n }\n });\n\n // try to get next batch of files\n readBatch();\n }, reject);\n };\n\n // read first batch of files\n readBatch();\n };\n\n // go!\n readEntries(entry);\n });\n };\n\n var correctMissingFileType = function correctMissingFileType(file) {\n if (file.type.length) return file;\n var date = file.lastModifiedDate;\n var name = file.name;\n var type = guesstimateMimeType(getExtensionFromFilename(file.name));\n if (!type.length) return file;\n file = file.slice(0, file.size, type);\n file.name = name;\n file.lastModifiedDate = date;\n return file;\n };\n\n var isDirectoryEntry = function isDirectoryEntry(item) {\n return isEntry(item) && (getAsEntry(item) || {}).isDirectory;\n };\n\n var isEntry = function isEntry(item) {\n return 'webkitGetAsEntry' in item;\n };\n\n var getAsEntry = function getAsEntry(item) {\n return item.webkitGetAsEntry();\n };\n\n /**\n * Extracts links from a DataTransfer object\n */\n var getLinks = function getLinks(dataTransfer) {\n var links = [];\n try {\n // look in meta data property\n links = getLinksFromTransferMetaData(dataTransfer);\n if (links.length) {\n return links;\n }\n links = getLinksFromTransferURLData(dataTransfer);\n } catch (e) {\n // nope nope nope (probably IE trouble)\n }\n return links;\n };\n\n var getLinksFromTransferURLData = function getLinksFromTransferURLData(dataTransfer) {\n var data = dataTransfer.getData('url');\n if (typeof data === 'string' && data.length) {\n return [data];\n }\n return [];\n };\n\n var getLinksFromTransferMetaData = function getLinksFromTransferMetaData(dataTransfer) {\n var data = dataTransfer.getData('text/html');\n if (typeof data === 'string' && data.length) {\n var matches = data.match(/src\\s*=\\s*\"(.+?)\"/);\n if (matches) {\n return [matches[1]];\n }\n }\n return [];\n };\n\n var dragNDropObservers = [];\n\n var eventPosition = function eventPosition(e) {\n return {\n pageLeft: e.pageX,\n pageTop: e.pageY,\n scopeLeft: e.offsetX || e.layerX,\n scopeTop: e.offsetY || e.layerY,\n };\n };\n\n var createDragNDropClient = function createDragNDropClient(\n element,\n scopeToObserve,\n filterElement\n ) {\n var observer = getDragNDropObserver(scopeToObserve);\n\n var client = {\n element: element,\n filterElement: filterElement,\n state: null,\n ondrop: function ondrop() {},\n onenter: function onenter() {},\n ondrag: function ondrag() {},\n onexit: function onexit() {},\n onload: function onload() {},\n allowdrop: function allowdrop() {},\n };\n\n client.destroy = observer.addListener(client);\n\n return client;\n };\n\n var getDragNDropObserver = function getDragNDropObserver(element) {\n // see if already exists, if so, return\n var observer = dragNDropObservers.find(function(item) {\n return item.element === element;\n });\n if (observer) {\n return observer;\n }\n\n // create new observer, does not yet exist for this element\n var newObserver = createDragNDropObserver(element);\n dragNDropObservers.push(newObserver);\n return newObserver;\n };\n\n var createDragNDropObserver = function createDragNDropObserver(element) {\n var clients = [];\n\n var routes = {\n dragenter: dragenter,\n dragover: dragover,\n dragleave: dragleave,\n drop: drop,\n };\n\n var handlers = {};\n\n forin(routes, function(event, createHandler) {\n handlers[event] = createHandler(element, clients);\n element.addEventListener(event, handlers[event], false);\n });\n\n var observer = {\n element: element,\n addListener: function addListener(client) {\n // add as client\n clients.push(client);\n\n // return removeListener function\n return function() {\n // remove client\n clients.splice(clients.indexOf(client), 1);\n\n // if no more clients, clean up observer\n if (clients.length === 0) {\n dragNDropObservers.splice(dragNDropObservers.indexOf(observer), 1);\n\n forin(routes, function(event) {\n element.removeEventListener(event, handlers[event], false);\n });\n }\n };\n },\n };\n\n return observer;\n };\n\n var elementFromPoint = function elementFromPoint(root, point) {\n if (!('elementFromPoint' in root)) {\n root = document;\n }\n return root.elementFromPoint(point.x, point.y);\n };\n\n var isEventTarget = function isEventTarget(e, target) {\n // get root\n var root = getRootNode(target);\n\n // get element at position\n // if root is not actual shadow DOM and does not have elementFromPoint method, use the one on document\n var elementAtPosition = elementFromPoint(root, {\n x: e.pageX - window.pageXOffset,\n y: e.pageY - window.pageYOffset,\n });\n\n // test if target is the element or if one of its children is\n return elementAtPosition === target || target.contains(elementAtPosition);\n };\n\n var initialTarget = null;\n\n var setDropEffect = function setDropEffect(dataTransfer, effect) {\n // is in try catch as IE11 will throw error if not\n try {\n dataTransfer.dropEffect = effect;\n } catch (e) {}\n };\n\n var dragenter = function dragenter(root, clients) {\n return function(e) {\n e.preventDefault();\n\n initialTarget = e.target;\n\n clients.forEach(function(client) {\n var element = client.element,\n onenter = client.onenter;\n\n if (isEventTarget(e, element)) {\n client.state = 'enter';\n\n // fire enter event\n onenter(eventPosition(e));\n }\n });\n };\n };\n\n var dragover = function dragover(root, clients) {\n return function(e) {\n e.preventDefault();\n\n var dataTransfer = e.dataTransfer;\n\n requestDataTransferItems(dataTransfer).then(function(items) {\n var overDropTarget = false;\n\n clients.some(function(client) {\n var filterElement = client.filterElement,\n element = client.element,\n onenter = client.onenter,\n onexit = client.onexit,\n ondrag = client.ondrag,\n allowdrop = client.allowdrop;\n\n // by default we can drop\n setDropEffect(dataTransfer, 'copy');\n\n // allow transfer of these items\n var allowsTransfer = allowdrop(items);\n\n // only used when can be dropped on page\n if (!allowsTransfer) {\n setDropEffect(dataTransfer, 'none');\n return;\n }\n\n // targetting this client\n if (isEventTarget(e, element)) {\n overDropTarget = true;\n\n // had no previous state, means we are entering this client\n if (client.state === null) {\n client.state = 'enter';\n onenter(eventPosition(e));\n return;\n }\n\n // now over element (no matter if it allows the drop or not)\n client.state = 'over';\n\n // needs to allow transfer\n if (filterElement && !allowsTransfer) {\n setDropEffect(dataTransfer, 'none');\n return;\n }\n\n // dragging\n ondrag(eventPosition(e));\n } else {\n // should be over an element to drop\n if (filterElement && !overDropTarget) {\n setDropEffect(dataTransfer, 'none');\n }\n\n // might have just left this client?\n if (client.state) {\n client.state = null;\n onexit(eventPosition(e));\n }\n }\n });\n });\n };\n };\n\n var drop = function drop(root, clients) {\n return function(e) {\n e.preventDefault();\n\n var dataTransfer = e.dataTransfer;\n\n requestDataTransferItems(dataTransfer).then(function(items) {\n clients.forEach(function(client) {\n var filterElement = client.filterElement,\n element = client.element,\n ondrop = client.ondrop,\n onexit = client.onexit,\n allowdrop = client.allowdrop;\n\n client.state = null;\n\n // if we're filtering on element we need to be over the element to drop\n if (filterElement && !isEventTarget(e, element)) return;\n\n // no transfer for this client\n if (!allowdrop(items)) return onexit(eventPosition(e));\n\n // we can drop these items on this client\n ondrop(eventPosition(e), items);\n });\n });\n };\n };\n\n var dragleave = function dragleave(root, clients) {\n return function(e) {\n if (initialTarget !== e.target) {\n return;\n }\n\n clients.forEach(function(client) {\n var onexit = client.onexit;\n\n client.state = null;\n\n onexit(eventPosition(e));\n });\n };\n };\n\n var createHopper = function createHopper(scope, validateItems, options) {\n // is now hopper scope\n scope.classList.add('filepond--hopper');\n\n // shortcuts\n var catchesDropsOnPage = options.catchesDropsOnPage,\n requiresDropOnElement = options.requiresDropOnElement,\n _options$filterItems = options.filterItems,\n filterItems =\n _options$filterItems === void 0\n ? function(items) {\n return items;\n }\n : _options$filterItems;\n\n // create a dnd client\n var client = createDragNDropClient(\n scope,\n catchesDropsOnPage ? document.documentElement : scope,\n requiresDropOnElement\n );\n\n // current client state\n var lastState = '';\n var currentState = '';\n\n // determines if a file may be dropped\n client.allowdrop = function(items) {\n // TODO: if we can, throw error to indicate the items cannot by dropped\n\n return validateItems(filterItems(items));\n };\n\n client.ondrop = function(position, items) {\n var filteredItems = filterItems(items);\n\n if (!validateItems(filteredItems)) {\n api.ondragend(position);\n return;\n }\n\n currentState = 'drag-drop';\n\n api.onload(filteredItems, position);\n };\n\n client.ondrag = function(position) {\n api.ondrag(position);\n };\n\n client.onenter = function(position) {\n currentState = 'drag-over';\n\n api.ondragstart(position);\n };\n\n client.onexit = function(position) {\n currentState = 'drag-exit';\n\n api.ondragend(position);\n };\n\n var api = {\n updateHopperState: function updateHopperState() {\n if (lastState !== currentState) {\n scope.dataset.hopperState = currentState;\n lastState = currentState;\n }\n },\n onload: function onload() {},\n ondragstart: function ondragstart() {},\n ondrag: function ondrag() {},\n ondragend: function ondragend() {},\n destroy: function destroy() {\n // destroy client\n client.destroy();\n },\n };\n\n return api;\n };\n\n var listening = false;\n var listeners$1 = [];\n\n var handlePaste = function handlePaste(e) {\n // if is pasting in input or textarea and the target is outside of a filepond scope, ignore\n var activeEl = document.activeElement;\n var isActiveElementEditable =\n activeEl &&\n (/textarea|input/i.test(activeEl.nodeName) ||\n activeEl.getAttribute('contenteditable') === 'true' ||\n activeEl.getAttribute('contenteditable') === '');\n\n if (isActiveElementEditable) {\n // test textarea or input is contained in filepond root\n var inScope = false;\n var element = activeEl;\n while (element !== document.body) {\n if (element.classList.contains('filepond--root')) {\n inScope = true;\n break;\n }\n element = element.parentNode;\n }\n\n if (!inScope) return;\n }\n\n requestDataTransferItems(e.clipboardData).then(function(files) {\n // no files received\n if (!files.length) {\n return;\n }\n\n // notify listeners of received files\n listeners$1.forEach(function(listener) {\n return listener(files);\n });\n });\n };\n\n var listen = function listen(cb) {\n // can't add twice\n if (listeners$1.includes(cb)) {\n return;\n }\n\n // add initial listener\n listeners$1.push(cb);\n\n // setup paste listener for entire page\n if (listening) {\n return;\n }\n\n listening = true;\n document.addEventListener('paste', handlePaste);\n };\n\n var unlisten = function unlisten(listener) {\n arrayRemove(listeners$1, listeners$1.indexOf(listener));\n\n // clean up\n if (listeners$1.length === 0) {\n document.removeEventListener('paste', handlePaste);\n listening = false;\n }\n };\n\n var createPaster = function createPaster() {\n var cb = function cb(files) {\n api.onload(files);\n };\n\n var api = {\n destroy: function destroy() {\n unlisten(cb);\n },\n onload: function onload() {},\n };\n\n listen(cb);\n\n return api;\n };\n\n /**\n * Creates the file view\n */\n var create$d = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n root.element.id = 'filepond--assistant-' + props.id;\n attr(root.element, 'role', 'alert');\n attr(root.element, 'aria-live', 'polite');\n attr(root.element, 'aria-relevant', 'additions');\n };\n\n var addFilesNotificationTimeout = null;\n var notificationClearTimeout = null;\n\n var filenames = [];\n\n var assist = function assist(root, message) {\n root.element.textContent = message;\n };\n\n var clear$1 = function clear(root) {\n root.element.textContent = '';\n };\n\n var listModified = function listModified(root, filename, label) {\n var total = root.query('GET_TOTAL_ITEMS');\n assist(\n root,\n label +\n ' ' +\n filename +\n ', ' +\n total +\n ' ' +\n (total === 1\n ? root.query('GET_LABEL_FILE_COUNT_SINGULAR')\n : root.query('GET_LABEL_FILE_COUNT_PLURAL'))\n );\n\n // clear group after set amount of time so the status is not read twice\n clearTimeout(notificationClearTimeout);\n notificationClearTimeout = setTimeout(function() {\n clear$1(root);\n }, 1500);\n };\n\n var isUsingFilePond = function isUsingFilePond(root) {\n return root.element.parentNode.contains(document.activeElement);\n };\n\n var itemAdded = function itemAdded(_ref2) {\n var root = _ref2.root,\n action = _ref2.action;\n if (!isUsingFilePond(root)) {\n return;\n }\n\n root.element.textContent = '';\n var item = root.query('GET_ITEM', action.id);\n filenames.push(item.filename);\n\n clearTimeout(addFilesNotificationTimeout);\n addFilesNotificationTimeout = setTimeout(function() {\n listModified(root, filenames.join(', '), root.query('GET_LABEL_FILE_ADDED'));\n filenames.length = 0;\n }, 750);\n };\n\n var itemRemoved = function itemRemoved(_ref3) {\n var root = _ref3.root,\n action = _ref3.action;\n if (!isUsingFilePond(root)) {\n return;\n }\n\n var item = action.item;\n listModified(root, item.filename, root.query('GET_LABEL_FILE_REMOVED'));\n };\n\n var itemProcessed = function itemProcessed(_ref4) {\n var root = _ref4.root,\n action = _ref4.action;\n // will also notify the user when FilePond is not being used, as the user might be occupied with other activities while uploading a file\n\n var item = root.query('GET_ITEM', action.id);\n var filename = item.filename;\n var label = root.query('GET_LABEL_FILE_PROCESSING_COMPLETE');\n\n assist(root, filename + ' ' + label);\n };\n\n var itemProcessedUndo = function itemProcessedUndo(_ref5) {\n var root = _ref5.root,\n action = _ref5.action;\n var item = root.query('GET_ITEM', action.id);\n var filename = item.filename;\n var label = root.query('GET_LABEL_FILE_PROCESSING_ABORTED');\n\n assist(root, filename + ' ' + label);\n };\n\n var itemError = function itemError(_ref6) {\n var root = _ref6.root,\n action = _ref6.action;\n var item = root.query('GET_ITEM', action.id);\n var filename = item.filename;\n\n // will also notify the user when FilePond is not being used, as the user might be occupied with other activities while uploading a file\n\n assist(root, action.status.main + ' ' + filename + ' ' + action.status.sub);\n };\n\n var assistant = createView({\n create: create$d,\n ignoreRect: true,\n ignoreRectUpdate: true,\n write: createRoute({\n DID_LOAD_ITEM: itemAdded,\n DID_REMOVE_ITEM: itemRemoved,\n DID_COMPLETE_ITEM_PROCESSING: itemProcessed,\n\n DID_ABORT_ITEM_PROCESSING: itemProcessedUndo,\n DID_REVERT_ITEM_PROCESSING: itemProcessedUndo,\n\n DID_THROW_ITEM_REMOVE_ERROR: itemError,\n DID_THROW_ITEM_LOAD_ERROR: itemError,\n DID_THROW_ITEM_INVALID: itemError,\n DID_THROW_ITEM_PROCESSING_ERROR: itemError,\n }),\n\n tag: 'span',\n name: 'assistant',\n });\n\n var toCamels = function toCamels(string) {\n var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '-';\n return string.replace(new RegExp(separator + '.', 'g'), function(sub) {\n return sub.charAt(1).toUpperCase();\n });\n };\n\n var debounce = function debounce(func) {\n var interval = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 16;\n var immidiateOnly =\n arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var last = Date.now();\n var timeout = null;\n\n return function() {\n for (\n var _len = arguments.length, args = new Array(_len), _key = 0;\n _key < _len;\n _key++\n ) {\n args[_key] = arguments[_key];\n }\n clearTimeout(timeout);\n\n var dist = Date.now() - last;\n\n var fn = function fn() {\n last = Date.now();\n func.apply(void 0, args);\n };\n\n if (dist < interval) {\n // we need to delay by the difference between interval and dist\n // for example: if distance is 10 ms and interval is 16 ms,\n // we need to wait an additional 6ms before calling the function)\n if (!immidiateOnly) {\n timeout = setTimeout(fn, interval - dist);\n }\n } else {\n // go!\n fn();\n }\n };\n };\n\n var MAX_FILES_LIMIT = 1000000;\n\n var prevent = function prevent(e) {\n return e.preventDefault();\n };\n\n var create$e = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n // Add id\n var id = root.query('GET_ID');\n if (id) {\n root.element.id = id;\n }\n\n // Add className\n var className = root.query('GET_CLASS_NAME');\n if (className) {\n className\n .split(' ')\n .filter(function(name) {\n return name.length;\n })\n .forEach(function(name) {\n root.element.classList.add(name);\n });\n }\n\n // Field label\n root.ref.label = root.appendChildView(\n root.createChildView(\n dropLabel,\n Object.assign({}, props, {\n translateY: null,\n caption: root.query('GET_LABEL_IDLE'),\n })\n )\n );\n\n // List of items\n root.ref.list = root.appendChildView(\n root.createChildView(listScroller, { translateY: null })\n );\n\n // Background panel\n root.ref.panel = root.appendChildView(root.createChildView(panel, { name: 'panel-root' }));\n\n // Assistant notifies assistive tech when content changes\n root.ref.assistant = root.appendChildView(\n root.createChildView(assistant, Object.assign({}, props))\n );\n\n // Data\n root.ref.data = root.appendChildView(root.createChildView(data, Object.assign({}, props)));\n\n // Measure (tests if fixed height was set)\n // DOCTYPE needs to be set for this to work\n root.ref.measure = createElement$1('div');\n root.ref.measure.style.height = '100%';\n root.element.appendChild(root.ref.measure);\n\n // information on the root height or fixed height status\n root.ref.bounds = null;\n\n // apply initial style properties\n root.query('GET_STYLES')\n .filter(function(style) {\n return !isEmpty(style.value);\n })\n .map(function(_ref2) {\n var name = _ref2.name,\n value = _ref2.value;\n root.element.dataset[name] = value;\n });\n\n // determine if width changed\n root.ref.widthPrevious = null;\n root.ref.widthUpdated = debounce(function() {\n root.ref.updateHistory = [];\n root.dispatch('DID_RESIZE_ROOT');\n }, 250);\n\n // history of updates\n root.ref.previousAspectRatio = null;\n root.ref.updateHistory = [];\n\n // prevent scrolling and zooming on iOS (only if supports pointer events, for then we can enable reorder)\n var canHover = window.matchMedia('(pointer: fine) and (hover: hover)').matches;\n var hasPointerEvents = 'PointerEvent' in window;\n if (root.query('GET_ALLOW_REORDER') && hasPointerEvents && !canHover) {\n root.element.addEventListener('touchmove', prevent, { passive: false });\n root.element.addEventListener('gesturestart', prevent);\n }\n\n // add credits\n var credits = root.query('GET_CREDITS');\n var hasCredits = credits.length === 2;\n if (hasCredits) {\n var frag = document.createElement('a');\n frag.className = 'filepond--credits';\n frag.href = credits[0];\n frag.tabIndex = -1;\n frag.target = '_blank';\n frag.rel = 'noopener noreferrer nofollow';\n frag.textContent = credits[1];\n root.element.appendChild(frag);\n root.ref.credits = frag;\n }\n };\n\n var write$9 = function write(_ref3) {\n var root = _ref3.root,\n props = _ref3.props,\n actions = _ref3.actions;\n // route actions\n route$5({ root: root, props: props, actions: actions });\n\n // apply style properties\n actions\n .filter(function(action) {\n return /^DID_SET_STYLE_/.test(action.type);\n })\n .filter(function(action) {\n return !isEmpty(action.data.value);\n })\n .map(function(_ref4) {\n var type = _ref4.type,\n data = _ref4.data;\n var name = toCamels(type.substring(8).toLowerCase(), '_');\n root.element.dataset[name] = data.value;\n root.invalidateLayout();\n });\n\n if (root.rect.element.hidden) return;\n\n if (root.rect.element.width !== root.ref.widthPrevious) {\n root.ref.widthPrevious = root.rect.element.width;\n root.ref.widthUpdated();\n }\n\n // get box bounds, we do this only once\n var bounds = root.ref.bounds;\n if (!bounds) {\n bounds = root.ref.bounds = calculateRootBoundingBoxHeight(root);\n\n // destroy measure element\n root.element.removeChild(root.ref.measure);\n root.ref.measure = null;\n }\n\n // get quick references to various high level parts of the upload tool\n var _root$ref = root.ref,\n hopper = _root$ref.hopper,\n label = _root$ref.label,\n list = _root$ref.list,\n panel = _root$ref.panel;\n\n // sets correct state to hopper scope\n if (hopper) {\n hopper.updateHopperState();\n }\n\n // bool to indicate if we're full or not\n var aspectRatio = root.query('GET_PANEL_ASPECT_RATIO');\n var isMultiItem = root.query('GET_ALLOW_MULTIPLE');\n var totalItems = root.query('GET_TOTAL_ITEMS');\n var maxItems = isMultiItem ? root.query('GET_MAX_FILES') || MAX_FILES_LIMIT : 1;\n var atMaxCapacity = totalItems === maxItems;\n\n // action used to add item\n var addAction = actions.find(function(action) {\n return action.type === 'DID_ADD_ITEM';\n });\n\n // if reached max capacity and we've just reached it\n if (atMaxCapacity && addAction) {\n // get interaction type\n var interactionMethod = addAction.data.interactionMethod;\n\n // hide label\n label.opacity = 0;\n\n if (isMultiItem) {\n label.translateY = -40;\n } else {\n if (interactionMethod === InteractionMethod.API) {\n label.translateX = 40;\n } else if (interactionMethod === InteractionMethod.BROWSE) {\n label.translateY = 40;\n } else {\n label.translateY = 30;\n }\n }\n } else if (!atMaxCapacity) {\n label.opacity = 1;\n label.translateX = 0;\n label.translateY = 0;\n }\n\n var listItemMargin = calculateListItemMargin(root);\n\n var listHeight = calculateListHeight(root);\n\n var labelHeight = label.rect.element.height;\n var currentLabelHeight = !isMultiItem || atMaxCapacity ? 0 : labelHeight;\n\n var listMarginTop = atMaxCapacity ? list.rect.element.marginTop : 0;\n var listMarginBottom = totalItems === 0 ? 0 : list.rect.element.marginBottom;\n\n var visualHeight =\n currentLabelHeight + listMarginTop + listHeight.visual + listMarginBottom;\n var boundsHeight =\n currentLabelHeight + listMarginTop + listHeight.bounds + listMarginBottom;\n\n // link list to label bottom position\n list.translateY =\n Math.max(0, currentLabelHeight - list.rect.element.marginTop) - listItemMargin.top;\n\n if (aspectRatio) {\n // fixed aspect ratio\n\n // calculate height based on width\n var width = root.rect.element.width;\n var height = width * aspectRatio;\n\n // clear history if aspect ratio has changed\n if (aspectRatio !== root.ref.previousAspectRatio) {\n root.ref.previousAspectRatio = aspectRatio;\n root.ref.updateHistory = [];\n }\n\n // remember this width\n var history = root.ref.updateHistory;\n history.push(width);\n\n var MAX_BOUNCES = 2;\n if (history.length > MAX_BOUNCES * 2) {\n var l = history.length;\n var bottom = l - 10;\n var bounces = 0;\n for (var i = l; i >= bottom; i--) {\n if (history[i] === history[i - 2]) {\n bounces++;\n }\n\n if (bounces >= MAX_BOUNCES) {\n // dont adjust height\n return;\n }\n }\n }\n\n // fix height of panel so it adheres to aspect ratio\n panel.scalable = false;\n panel.height = height;\n\n // available height for list\n var listAvailableHeight =\n // the height of the panel minus the label height\n height -\n currentLabelHeight -\n // the room we leave open between the end of the list and the panel bottom\n (listMarginBottom - listItemMargin.bottom) -\n // if we're full we need to leave some room between the top of the panel and the list\n (atMaxCapacity ? listMarginTop : 0);\n\n if (listHeight.visual > listAvailableHeight) {\n list.overflow = listAvailableHeight;\n } else {\n list.overflow = null;\n }\n\n // set container bounds (so pushes siblings downwards)\n root.height = height;\n } else if (bounds.fixedHeight) {\n // fixed height\n\n // fix height of panel\n panel.scalable = false;\n\n // available height for list\n var _listAvailableHeight =\n // the height of the panel minus the label height\n bounds.fixedHeight -\n currentLabelHeight -\n // the room we leave open between the end of the list and the panel bottom\n (listMarginBottom - listItemMargin.bottom) -\n // if we're full we need to leave some room between the top of the panel and the list\n (atMaxCapacity ? listMarginTop : 0);\n\n // set list height\n if (listHeight.visual > _listAvailableHeight) {\n list.overflow = _listAvailableHeight;\n } else {\n list.overflow = null;\n }\n\n // no need to set container bounds as these are handles by CSS fixed height\n } else if (bounds.cappedHeight) {\n // max-height\n\n // not a fixed height panel\n var isCappedHeight = visualHeight >= bounds.cappedHeight;\n var panelHeight = Math.min(bounds.cappedHeight, visualHeight);\n panel.scalable = true;\n panel.height = isCappedHeight\n ? panelHeight\n : panelHeight - listItemMargin.top - listItemMargin.bottom;\n\n // available height for list\n var _listAvailableHeight2 =\n // the height of the panel minus the label height\n panelHeight -\n currentLabelHeight -\n // the room we leave open between the end of the list and the panel bottom\n (listMarginBottom - listItemMargin.bottom) -\n // if we're full we need to leave some room between the top of the panel and the list\n (atMaxCapacity ? listMarginTop : 0);\n\n // set list height (if is overflowing)\n if (visualHeight > bounds.cappedHeight && listHeight.visual > _listAvailableHeight2) {\n list.overflow = _listAvailableHeight2;\n } else {\n list.overflow = null;\n }\n\n // set container bounds (so pushes siblings downwards)\n root.height = Math.min(\n bounds.cappedHeight,\n boundsHeight - listItemMargin.top - listItemMargin.bottom\n );\n } else {\n // flexible height\n\n // not a fixed height panel\n var itemMargin = totalItems > 0 ? listItemMargin.top + listItemMargin.bottom : 0;\n panel.scalable = true;\n panel.height = Math.max(labelHeight, visualHeight - itemMargin);\n\n // set container bounds (so pushes siblings downwards)\n root.height = Math.max(labelHeight, boundsHeight - itemMargin);\n }\n\n // move credits to bottom\n if (root.ref.credits && panel.heightCurrent)\n root.ref.credits.style.transform = 'translateY(' + panel.heightCurrent + 'px)';\n };\n\n var calculateListItemMargin = function calculateListItemMargin(root) {\n var item = root.ref.list.childViews[0].childViews[0];\n return item\n ? {\n top: item.rect.element.marginTop,\n bottom: item.rect.element.marginBottom,\n }\n : {\n top: 0,\n bottom: 0,\n };\n };\n\n var calculateListHeight = function calculateListHeight(root) {\n var visual = 0;\n var bounds = 0;\n\n // get file list reference\n var scrollList = root.ref.list;\n var itemList = scrollList.childViews[0];\n var visibleChildren = itemList.childViews.filter(function(child) {\n return child.rect.element.height;\n });\n var children = root\n .query('GET_ACTIVE_ITEMS')\n .map(function(item) {\n return visibleChildren.find(function(child) {\n return child.id === item.id;\n });\n })\n .filter(function(item) {\n return item;\n });\n\n // no children, done!\n if (children.length === 0) return { visual: visual, bounds: bounds };\n\n var horizontalSpace = itemList.rect.element.width;\n var dragIndex = getItemIndexByPosition(itemList, children, scrollList.dragCoordinates);\n\n var childRect = children[0].rect.element;\n\n var itemVerticalMargin = childRect.marginTop + childRect.marginBottom;\n var itemHorizontalMargin = childRect.marginLeft + childRect.marginRight;\n\n var itemWidth = childRect.width + itemHorizontalMargin;\n var itemHeight = childRect.height + itemVerticalMargin;\n\n var newItem = typeof dragIndex !== 'undefined' && dragIndex >= 0 ? 1 : 0;\n var removedItem = children.find(function(child) {\n return child.markedForRemoval && child.opacity < 0.45;\n })\n ? -1\n : 0;\n var verticalItemCount = children.length + newItem + removedItem;\n var itemsPerRow = getItemsPerRow(horizontalSpace, itemWidth);\n\n // stack\n if (itemsPerRow === 1) {\n children.forEach(function(item) {\n var height = item.rect.element.height + itemVerticalMargin;\n bounds += height;\n visual += height * item.opacity;\n });\n }\n // grid\n else {\n bounds = Math.ceil(verticalItemCount / itemsPerRow) * itemHeight;\n visual = bounds;\n }\n\n return { visual: visual, bounds: bounds };\n };\n\n var calculateRootBoundingBoxHeight = function calculateRootBoundingBoxHeight(root) {\n var height = root.ref.measureHeight || null;\n var cappedHeight = parseInt(root.style.maxHeight, 10) || null;\n var fixedHeight = height === 0 ? null : height;\n\n return {\n cappedHeight: cappedHeight,\n fixedHeight: fixedHeight,\n };\n };\n\n var exceedsMaxFiles = function exceedsMaxFiles(root, items) {\n var allowReplace = root.query('GET_ALLOW_REPLACE');\n var allowMultiple = root.query('GET_ALLOW_MULTIPLE');\n var totalItems = root.query('GET_TOTAL_ITEMS');\n var maxItems = root.query('GET_MAX_FILES');\n\n // total amount of items being dragged\n var totalBrowseItems = items.length;\n\n // if does not allow multiple items and dragging more than one item\n if (!allowMultiple && totalBrowseItems > 1) {\n root.dispatch('DID_THROW_MAX_FILES', {\n source: items,\n error: createResponse('warning', 0, 'Max files'),\n });\n\n return true;\n }\n\n // limit max items to one if not allowed to drop multiple items\n maxItems = allowMultiple ? maxItems : 1;\n\n if (!allowMultiple && allowReplace) {\n // There is only one item, so there is room to replace or add an item\n return false;\n }\n\n // no more room?\n var hasMaxItems = isInt(maxItems);\n if (hasMaxItems && totalItems + totalBrowseItems > maxItems) {\n root.dispatch('DID_THROW_MAX_FILES', {\n source: items,\n error: createResponse('warning', 0, 'Max files'),\n });\n\n return true;\n }\n\n return false;\n };\n\n var getDragIndex = function getDragIndex(list, children, position) {\n var itemList = list.childViews[0];\n return getItemIndexByPosition(itemList, children, {\n left: position.scopeLeft - itemList.rect.element.left,\n top:\n position.scopeTop -\n (list.rect.outer.top + list.rect.element.marginTop + list.rect.element.scrollTop),\n });\n };\n\n /**\n * Enable or disable file drop functionality\n */\n var toggleDrop = function toggleDrop(root) {\n var isAllowed = root.query('GET_ALLOW_DROP');\n var isDisabled = root.query('GET_DISABLED');\n var enabled = isAllowed && !isDisabled;\n if (enabled && !root.ref.hopper) {\n var hopper = createHopper(\n root.element,\n function(items) {\n // allow quick validation of dropped items\n var beforeDropFile =\n root.query('GET_BEFORE_DROP_FILE') ||\n function() {\n return true;\n };\n\n // all items should be validated by all filters as valid\n var dropValidation = root.query('GET_DROP_VALIDATION');\n return dropValidation\n ? items.every(function(item) {\n return (\n applyFilters('ALLOW_HOPPER_ITEM', item, {\n query: root.query,\n }).every(function(result) {\n return result === true;\n }) && beforeDropFile(item)\n );\n })\n : true;\n },\n {\n filterItems: function filterItems(items) {\n var ignoredFiles = root.query('GET_IGNORED_FILES');\n return items.filter(function(item) {\n if (isFile(item)) {\n return !ignoredFiles.includes(item.name.toLowerCase());\n }\n return true;\n });\n },\n catchesDropsOnPage: root.query('GET_DROP_ON_PAGE'),\n requiresDropOnElement: root.query('GET_DROP_ON_ELEMENT'),\n }\n );\n\n hopper.onload = function(items, position) {\n // get item children elements and sort based on list sort\n var list = root.ref.list.childViews[0];\n var visibleChildren = list.childViews.filter(function(child) {\n return child.rect.element.height;\n });\n var children = root\n .query('GET_ACTIVE_ITEMS')\n .map(function(item) {\n return visibleChildren.find(function(child) {\n return child.id === item.id;\n });\n })\n .filter(function(item) {\n return item;\n });\n\n applyFilterChain('ADD_ITEMS', items, { dispatch: root.dispatch }).then(function(\n queue\n ) {\n // these files don't fit so stop here\n if (exceedsMaxFiles(root, queue)) return false;\n\n // go\n root.dispatch('ADD_ITEMS', {\n items: queue,\n index: getDragIndex(root.ref.list, children, position),\n interactionMethod: InteractionMethod.DROP,\n });\n });\n\n root.dispatch('DID_DROP', { position: position });\n\n root.dispatch('DID_END_DRAG', { position: position });\n };\n\n hopper.ondragstart = function(position) {\n root.dispatch('DID_START_DRAG', { position: position });\n };\n\n hopper.ondrag = debounce(function(position) {\n root.dispatch('DID_DRAG', { position: position });\n });\n\n hopper.ondragend = function(position) {\n root.dispatch('DID_END_DRAG', { position: position });\n };\n\n root.ref.hopper = hopper;\n\n root.ref.drip = root.appendChildView(root.createChildView(drip));\n } else if (!enabled && root.ref.hopper) {\n root.ref.hopper.destroy();\n root.ref.hopper = null;\n root.removeChildView(root.ref.drip);\n }\n };\n\n /**\n * Enable or disable browse functionality\n */\n var toggleBrowse = function toggleBrowse(root, props) {\n var isAllowed = root.query('GET_ALLOW_BROWSE');\n var isDisabled = root.query('GET_DISABLED');\n var enabled = isAllowed && !isDisabled;\n if (enabled && !root.ref.browser) {\n root.ref.browser = root.appendChildView(\n root.createChildView(\n browser,\n Object.assign({}, props, {\n onload: function onload(items) {\n applyFilterChain('ADD_ITEMS', items, {\n dispatch: root.dispatch,\n }).then(function(queue) {\n // these files don't fit so stop here\n if (exceedsMaxFiles(root, queue)) return false;\n\n // add items!\n root.dispatch('ADD_ITEMS', {\n items: queue,\n index: -1,\n interactionMethod: InteractionMethod.BROWSE,\n });\n });\n },\n })\n ),\n\n 0\n );\n } else if (!enabled && root.ref.browser) {\n root.removeChildView(root.ref.browser);\n root.ref.browser = null;\n }\n };\n\n /**\n * Enable or disable paste functionality\n */\n var togglePaste = function togglePaste(root) {\n var isAllowed = root.query('GET_ALLOW_PASTE');\n var isDisabled = root.query('GET_DISABLED');\n var enabled = isAllowed && !isDisabled;\n if (enabled && !root.ref.paster) {\n root.ref.paster = createPaster();\n root.ref.paster.onload = function(items) {\n applyFilterChain('ADD_ITEMS', items, { dispatch: root.dispatch }).then(function(\n queue\n ) {\n // these files don't fit so stop here\n if (exceedsMaxFiles(root, queue)) return false;\n\n // add items!\n root.dispatch('ADD_ITEMS', {\n items: queue,\n index: -1,\n interactionMethod: InteractionMethod.PASTE,\n });\n });\n };\n } else if (!enabled && root.ref.paster) {\n root.ref.paster.destroy();\n root.ref.paster = null;\n }\n };\n\n /**\n * Route actions\n */\n var route$5 = createRoute({\n DID_SET_ALLOW_BROWSE: function DID_SET_ALLOW_BROWSE(_ref5) {\n var root = _ref5.root,\n props = _ref5.props;\n toggleBrowse(root, props);\n },\n DID_SET_ALLOW_DROP: function DID_SET_ALLOW_DROP(_ref6) {\n var root = _ref6.root;\n toggleDrop(root);\n },\n DID_SET_ALLOW_PASTE: function DID_SET_ALLOW_PASTE(_ref7) {\n var root = _ref7.root;\n togglePaste(root);\n },\n DID_SET_DISABLED: function DID_SET_DISABLED(_ref8) {\n var root = _ref8.root,\n props = _ref8.props;\n toggleDrop(root);\n togglePaste(root);\n toggleBrowse(root, props);\n var isDisabled = root.query('GET_DISABLED');\n if (isDisabled) {\n root.element.dataset.disabled = 'disabled';\n } else {\n // delete root.element.dataset.disabled; <= this does not work on iOS 10\n root.element.removeAttribute('data-disabled');\n }\n },\n });\n\n var root = createView({\n name: 'root',\n read: function read(_ref9) {\n var root = _ref9.root;\n if (root.ref.measure) {\n root.ref.measureHeight = root.ref.measure.offsetHeight;\n }\n },\n create: create$e,\n write: write$9,\n destroy: function destroy(_ref10) {\n var root = _ref10.root;\n if (root.ref.paster) {\n root.ref.paster.destroy();\n }\n if (root.ref.hopper) {\n root.ref.hopper.destroy();\n }\n root.element.removeEventListener('touchmove', prevent);\n root.element.removeEventListener('gesturestart', prevent);\n },\n mixins: {\n styles: ['height'],\n },\n });\n\n // creates the app\n var createApp = function createApp() {\n var initialOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // let element\n var originalElement = null;\n\n // get default options\n var defaultOptions = getOptions();\n\n // create the data store, this will contain all our app info\n var store = createStore(\n // initial state (should be serializable)\n createInitialState(defaultOptions),\n\n // queries\n [queries, createOptionQueries(defaultOptions)],\n\n // action handlers\n [actions, createOptionActions(defaultOptions)]\n );\n\n // set initial options\n store.dispatch('SET_OPTIONS', { options: initialOptions });\n\n // kick thread if visibility changes\n var visibilityHandler = function visibilityHandler() {\n if (document.hidden) return;\n store.dispatch('KICK');\n };\n document.addEventListener('visibilitychange', visibilityHandler);\n\n // re-render on window resize start and finish\n var resizeDoneTimer = null;\n var isResizing = false;\n var isResizingHorizontally = false;\n var initialWindowWidth = null;\n var currentWindowWidth = null;\n var resizeHandler = function resizeHandler() {\n if (!isResizing) {\n isResizing = true;\n }\n clearTimeout(resizeDoneTimer);\n resizeDoneTimer = setTimeout(function() {\n isResizing = false;\n initialWindowWidth = null;\n currentWindowWidth = null;\n if (isResizingHorizontally) {\n isResizingHorizontally = false;\n store.dispatch('DID_STOP_RESIZE');\n }\n }, 500);\n };\n window.addEventListener('resize', resizeHandler);\n\n // render initial view\n var view = root(store, { id: getUniqueId() });\n\n //\n // PRIVATE API -------------------------------------------------------------------------------------\n //\n var isResting = false;\n var isHidden = false;\n\n var readWriteApi = {\n // necessary for update loop\n\n /**\n * Reads from dom (never call manually)\n * @private\n */\n _read: function _read() {\n // test if we're resizing horizontally\n // TODO: see if we can optimize this by measuring root rect\n if (isResizing) {\n currentWindowWidth = window.innerWidth;\n if (!initialWindowWidth) {\n initialWindowWidth = currentWindowWidth;\n }\n\n if (!isResizingHorizontally && currentWindowWidth !== initialWindowWidth) {\n store.dispatch('DID_START_RESIZE');\n isResizingHorizontally = true;\n }\n }\n\n if (isHidden && isResting) {\n // test if is no longer hidden\n isResting = view.element.offsetParent === null;\n }\n\n // if resting, no need to read as numbers will still all be correct\n if (isResting) return;\n\n // read view data\n view._read();\n\n // if is hidden we need to know so we exit rest mode when revealed\n isHidden = view.rect.element.hidden;\n },\n\n /**\n * Writes to dom (never call manually)\n * @private\n */\n _write: function _write(ts) {\n // get all actions from store\n var actions = store\n .processActionQueue()\n\n // filter out set actions (these will automatically trigger DID_SET)\n .filter(function(action) {\n return !/^SET_/.test(action.type);\n });\n\n // if was idling and no actions stop here\n if (isResting && !actions.length) return;\n\n // some actions might trigger events\n routeActionsToEvents(actions);\n\n // update the view\n isResting = view._write(ts, actions, isResizingHorizontally);\n\n // will clean up all archived items\n removeReleasedItems(store.query('GET_ITEMS'));\n\n // now idling\n if (isResting) {\n store.processDispatchQueue();\n }\n },\n };\n\n //\n // EXPOSE EVENTS -------------------------------------------------------------------------------------\n //\n var createEvent = function createEvent(name) {\n return function(data) {\n // create default event\n var event = {\n type: name,\n };\n\n // no data to add\n if (!data) {\n return event;\n }\n\n // copy relevant props\n if (data.hasOwnProperty('error')) {\n event.error = data.error ? Object.assign({}, data.error) : null;\n }\n\n if (data.status) {\n event.status = Object.assign({}, data.status);\n }\n\n if (data.file) {\n event.output = data.file;\n }\n\n // only source is available, else add item if possible\n if (data.source) {\n event.file = data.source;\n } else if (data.item || data.id) {\n var item = data.item ? data.item : store.query('GET_ITEM', data.id);\n event.file = item ? createItemAPI(item) : null;\n }\n\n // map all items in a possible items array\n if (data.items) {\n event.items = data.items.map(createItemAPI);\n }\n\n // if this is a progress event add the progress amount\n if (/progress/.test(name)) {\n event.progress = data.progress;\n }\n\n // copy relevant props\n if (data.hasOwnProperty('origin') && data.hasOwnProperty('target')) {\n event.origin = data.origin;\n event.target = data.target;\n }\n\n return event;\n };\n };\n\n var eventRoutes = {\n DID_DESTROY: createEvent('destroy'),\n\n DID_INIT: createEvent('init'),\n\n DID_THROW_MAX_FILES: createEvent('warning'),\n\n DID_INIT_ITEM: createEvent('initfile'),\n DID_START_ITEM_LOAD: createEvent('addfilestart'),\n DID_UPDATE_ITEM_LOAD_PROGRESS: createEvent('addfileprogress'),\n DID_LOAD_ITEM: createEvent('addfile'),\n\n DID_THROW_ITEM_INVALID: [createEvent('error'), createEvent('addfile')],\n\n DID_THROW_ITEM_LOAD_ERROR: [createEvent('error'), createEvent('addfile')],\n\n DID_THROW_ITEM_REMOVE_ERROR: [createEvent('error'), createEvent('removefile')],\n\n DID_PREPARE_OUTPUT: createEvent('preparefile'),\n\n DID_START_ITEM_PROCESSING: createEvent('processfilestart'),\n DID_UPDATE_ITEM_PROCESS_PROGRESS: createEvent('processfileprogress'),\n DID_ABORT_ITEM_PROCESSING: createEvent('processfileabort'),\n DID_COMPLETE_ITEM_PROCESSING: createEvent('processfile'),\n DID_COMPLETE_ITEM_PROCESSING_ALL: createEvent('processfiles'),\n DID_REVERT_ITEM_PROCESSING: createEvent('processfilerevert'),\n\n DID_THROW_ITEM_PROCESSING_ERROR: [createEvent('error'), createEvent('processfile')],\n\n DID_REMOVE_ITEM: createEvent('removefile'),\n\n DID_UPDATE_ITEMS: createEvent('updatefiles'),\n\n DID_ACTIVATE_ITEM: createEvent('activatefile'),\n\n DID_REORDER_ITEMS: createEvent('reorderfiles'),\n };\n\n var exposeEvent = function exposeEvent(event) {\n // create event object to be dispatched\n var detail = Object.assign({ pond: exports }, event);\n delete detail.type;\n view.element.dispatchEvent(\n new CustomEvent('FilePond:' + event.type, {\n // event info\n detail: detail,\n\n // event behaviour\n bubbles: true,\n cancelable: true,\n composed: true, // triggers listeners outside of shadow root\n })\n );\n\n // event object to params used for `on()` event handlers and callbacks `oninit()`\n var params = [];\n\n // if is possible error event, make it the first param\n if (event.hasOwnProperty('error')) {\n params.push(event.error);\n }\n\n // file is always section\n if (event.hasOwnProperty('file')) {\n params.push(event.file);\n }\n\n // append other props\n var filtered = ['type', 'error', 'file'];\n Object.keys(event)\n .filter(function(key) {\n return !filtered.includes(key);\n })\n .forEach(function(key) {\n return params.push(event[key]);\n });\n\n // on(type, () => { })\n exports.fire.apply(exports, [event.type].concat(params));\n\n // oninit = () => {}\n var handler = store.query('GET_ON' + event.type.toUpperCase());\n if (handler) {\n handler.apply(void 0, params);\n }\n };\n\n var routeActionsToEvents = function routeActionsToEvents(actions) {\n if (!actions.length) return;\n actions\n .filter(function(action) {\n return eventRoutes[action.type];\n })\n .forEach(function(action) {\n var routes = eventRoutes[action.type];\n (Array.isArray(routes) ? routes : [routes]).forEach(function(route) {\n // this isn't fantastic, but because of the stacking of settimeouts plugins can handle the did_load before the did_init\n if (action.type === 'DID_INIT_ITEM') {\n exposeEvent(route(action.data));\n } else {\n setTimeout(function() {\n exposeEvent(route(action.data));\n }, 0);\n }\n });\n });\n };\n\n //\n // PUBLIC API -------------------------------------------------------------------------------------\n //\n var setOptions = function setOptions(options) {\n return store.dispatch('SET_OPTIONS', { options: options });\n };\n\n var getFile = function getFile(query) {\n return store.query('GET_ACTIVE_ITEM', query);\n };\n\n var prepareFile = function prepareFile(query) {\n return new Promise(function(resolve, reject) {\n store.dispatch('REQUEST_ITEM_PREPARE', {\n query: query,\n success: function success(item) {\n resolve(item);\n },\n failure: function failure(error) {\n reject(error);\n },\n });\n });\n };\n\n var addFile = function addFile(source) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return new Promise(function(resolve, reject) {\n addFiles([{ source: source, options: options }], { index: options.index })\n .then(function(items) {\n return resolve(items && items[0]);\n })\n .catch(reject);\n });\n };\n\n var isFilePondFile = function isFilePondFile(obj) {\n return obj.file && obj.id;\n };\n\n var removeFile = function removeFile(query, options) {\n // if only passed options\n if (typeof query === 'object' && !isFilePondFile(query) && !options) {\n options = query;\n query = undefined;\n }\n\n // request item removal\n store.dispatch('REMOVE_ITEM', Object.assign({}, options, { query: query }));\n\n // see if item has been removed\n return store.query('GET_ACTIVE_ITEM', query) === null;\n };\n\n var addFiles = function addFiles() {\n for (\n var _len = arguments.length, args = new Array(_len), _key = 0;\n _key < _len;\n _key++\n ) {\n args[_key] = arguments[_key];\n }\n return new Promise(function(resolve, reject) {\n var sources = [];\n var options = {};\n\n // user passed a sources array\n if (isArray(args[0])) {\n sources.push.apply(sources, args[0]);\n Object.assign(options, args[1] || {});\n } else {\n // user passed sources as arguments, last one might be options object\n var lastArgument = args[args.length - 1];\n if (typeof lastArgument === 'object' && !(lastArgument instanceof Blob)) {\n Object.assign(options, args.pop());\n }\n\n // add rest to sources\n sources.push.apply(sources, args);\n }\n\n store.dispatch('ADD_ITEMS', {\n items: sources,\n index: options.index,\n interactionMethod: InteractionMethod.API,\n success: resolve,\n failure: reject,\n });\n });\n };\n\n var getFiles = function getFiles() {\n return store.query('GET_ACTIVE_ITEMS');\n };\n\n var processFile = function processFile(query) {\n return new Promise(function(resolve, reject) {\n store.dispatch('REQUEST_ITEM_PROCESSING', {\n query: query,\n success: function success(item) {\n resolve(item);\n },\n failure: function failure(error) {\n reject(error);\n },\n });\n });\n };\n\n var prepareFiles = function prepareFiles() {\n for (\n var _len2 = arguments.length, args = new Array(_len2), _key2 = 0;\n _key2 < _len2;\n _key2++\n ) {\n args[_key2] = arguments[_key2];\n }\n var queries = Array.isArray(args[0]) ? args[0] : args;\n var items = queries.length ? queries : getFiles();\n return Promise.all(items.map(prepareFile));\n };\n\n var processFiles = function processFiles() {\n for (\n var _len3 = arguments.length, args = new Array(_len3), _key3 = 0;\n _key3 < _len3;\n _key3++\n ) {\n args[_key3] = arguments[_key3];\n }\n var queries = Array.isArray(args[0]) ? args[0] : args;\n if (!queries.length) {\n var files = getFiles().filter(function(item) {\n return (\n !(item.status === ItemStatus.IDLE && item.origin === FileOrigin.LOCAL) &&\n item.status !== ItemStatus.PROCESSING &&\n item.status !== ItemStatus.PROCESSING_COMPLETE &&\n item.status !== ItemStatus.PROCESSING_REVERT_ERROR\n );\n });\n\n return Promise.all(files.map(processFile));\n }\n return Promise.all(queries.map(processFile));\n };\n\n var removeFiles = function removeFiles() {\n for (\n var _len4 = arguments.length, args = new Array(_len4), _key4 = 0;\n _key4 < _len4;\n _key4++\n ) {\n args[_key4] = arguments[_key4];\n }\n\n var queries = Array.isArray(args[0]) ? args[0] : args;\n\n var options;\n if (typeof queries[queries.length - 1] === 'object') {\n options = queries.pop();\n } else if (Array.isArray(args[0])) {\n options = args[1];\n }\n\n var files = getFiles();\n\n if (!queries.length)\n return Promise.all(\n files.map(function(file) {\n return removeFile(file, options);\n })\n );\n\n // when removing by index the indexes shift after each file removal so we need to convert indexes to ids\n var mappedQueries = queries\n .map(function(query) {\n return isNumber(query) ? (files[query] ? files[query].id : null) : query;\n })\n .filter(function(query) {\n return query;\n });\n\n return mappedQueries.map(function(q) {\n return removeFile(q, options);\n });\n };\n\n var exports = Object.assign(\n {},\n\n on(),\n {},\n\n readWriteApi,\n {},\n\n createOptionAPI(store, defaultOptions),\n {\n /**\n * Override options defined in options object\n * @param options\n */\n setOptions: setOptions,\n\n /**\n * Load the given file\n * @param source - the source of the file (either a File, base64 data uri or url)\n * @param options - object, { index: 0 }\n */\n addFile: addFile,\n\n /**\n * Load the given files\n * @param sources - the sources of the files to load\n * @param options - object, { index: 0 }\n */\n addFiles: addFiles,\n\n /**\n * Returns the file objects matching the given query\n * @param query { string, number, null }\n */\n getFile: getFile,\n\n /**\n * Upload file with given name\n * @param query { string, number, null }\n */\n processFile: processFile,\n\n /**\n * Request prepare output for file with given name\n * @param query { string, number, null }\n */\n prepareFile: prepareFile,\n\n /**\n * Removes a file by its name\n * @param query { string, number, null }\n */\n removeFile: removeFile,\n\n /**\n * Moves a file to a new location in the files list\n */\n moveFile: function moveFile(query, index) {\n return store.dispatch('MOVE_ITEM', { query: query, index: index });\n },\n\n /**\n * Returns all files (wrapped in public api)\n */\n getFiles: getFiles,\n\n /**\n * Starts uploading all files\n */\n processFiles: processFiles,\n\n /**\n * Clears all files from the files list\n */\n removeFiles: removeFiles,\n\n /**\n * Starts preparing output of all files\n */\n prepareFiles: prepareFiles,\n\n /**\n * Sort list of files\n */\n sort: function sort(compare) {\n return store.dispatch('SORT', { compare: compare });\n },\n\n /**\n * Browse the file system for a file\n */\n browse: function browse() {\n // needs to be trigger directly as user action needs to be traceable (is not traceable in requestAnimationFrame)\n var input = view.element.querySelector('input[type=file]');\n if (input) {\n input.click();\n }\n },\n\n /**\n * Destroys the app\n */\n destroy: function destroy() {\n // request destruction\n exports.fire('destroy', view.element);\n\n // stop active processes (file uploads, fetches, stuff like that)\n // loop over items and depending on states call abort for ongoing processes\n store.dispatch('ABORT_ALL');\n\n // destroy view\n view._destroy();\n\n // stop listening to resize\n window.removeEventListener('resize', resizeHandler);\n\n // stop listening to the visiblitychange event\n document.removeEventListener('visibilitychange', visibilityHandler);\n\n // dispatch destroy\n store.dispatch('DID_DESTROY');\n },\n\n /**\n * Inserts the plugin before the target element\n */\n insertBefore: function insertBefore$1(element) {\n return insertBefore(view.element, element);\n },\n\n /**\n * Inserts the plugin after the target element\n */\n insertAfter: function insertAfter$1(element) {\n return insertAfter(view.element, element);\n },\n\n /**\n * Appends the plugin to the target element\n */\n appendTo: function appendTo(element) {\n return element.appendChild(view.element);\n },\n\n /**\n * Replaces an element with the app\n */\n replaceElement: function replaceElement(element) {\n // insert the app before the element\n insertBefore(view.element, element);\n\n // remove the original element\n element.parentNode.removeChild(element);\n\n // remember original element\n originalElement = element;\n },\n\n /**\n * Restores the original element\n */\n restoreElement: function restoreElement() {\n if (!originalElement) {\n return; // no element to restore\n }\n\n // restore original element\n insertAfter(originalElement, view.element);\n\n // remove our element\n view.element.parentNode.removeChild(view.element);\n\n // remove reference\n originalElement = null;\n },\n\n /**\n * Returns true if the app root is attached to given element\n * @param element\n */\n isAttachedTo: function isAttachedTo(element) {\n return view.element === element || originalElement === element;\n },\n\n /**\n * Returns the root element\n */\n element: {\n get: function get() {\n return view.element;\n },\n },\n\n /**\n * Returns the current pond status\n */\n status: {\n get: function get() {\n return store.query('GET_STATUS');\n },\n },\n }\n );\n\n // Done!\n store.dispatch('DID_INIT');\n\n // create actual api object\n return createObject(exports);\n };\n\n var createAppObject = function createAppObject() {\n var customOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // default options\n var defaultOptions = {};\n forin(getOptions(), function(key, value) {\n defaultOptions[key] = value[0];\n });\n\n // set app options\n var app = createApp(\n Object.assign(\n {},\n\n defaultOptions,\n {},\n\n customOptions\n )\n );\n\n // return the plugin instance\n return app;\n };\n\n var lowerCaseFirstLetter = function lowerCaseFirstLetter(string) {\n return string.charAt(0).toLowerCase() + string.slice(1);\n };\n\n var attributeNameToPropertyName = function attributeNameToPropertyName(attributeName) {\n return toCamels(attributeName.replace(/^data-/, ''));\n };\n\n var mapObject = function mapObject(object, propertyMap) {\n // remove unwanted\n forin(propertyMap, function(selector, mapping) {\n forin(object, function(property, value) {\n // create regexp shortcut\n var selectorRegExp = new RegExp(selector);\n\n // tests if\n var matches = selectorRegExp.test(property);\n\n // no match, skip\n if (!matches) {\n return;\n }\n\n // if there's a mapping, the original property is always removed\n delete object[property];\n\n // should only remove, we done!\n if (mapping === false) {\n return;\n }\n\n // move value to new property\n if (isString(mapping)) {\n object[mapping] = value;\n return;\n }\n\n // move to group\n var group = mapping.group;\n if (isObject(mapping) && !object[group]) {\n object[group] = {};\n }\n\n object[group][lowerCaseFirstLetter(property.replace(selectorRegExp, ''))] = value;\n });\n\n // do submapping\n if (mapping.mapping) {\n mapObject(object[mapping.group], mapping.mapping);\n }\n });\n };\n\n var getAttributesAsObject = function getAttributesAsObject(node) {\n var attributeMapping =\n arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n // turn attributes into object\n var attributes = [];\n forin(node.attributes, function(index) {\n attributes.push(node.attributes[index]);\n });\n\n var output = attributes\n .filter(function(attribute) {\n return attribute.name;\n })\n .reduce(function(obj, attribute) {\n var value = attr(node, attribute.name);\n\n obj[attributeNameToPropertyName(attribute.name)] =\n value === attribute.name ? true : value;\n return obj;\n }, {});\n\n // do mapping of object properties\n mapObject(output, attributeMapping);\n\n return output;\n };\n\n var createAppAtElement = function createAppAtElement(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n // how attributes of the input element are mapped to the options for the plugin\n var attributeMapping = {\n // translate to other name\n '^class$': 'className',\n '^multiple$': 'allowMultiple',\n '^capture$': 'captureMethod',\n '^webkitdirectory$': 'allowDirectoriesOnly',\n\n // group under single property\n '^server': {\n group: 'server',\n mapping: {\n '^process': {\n group: 'process',\n },\n\n '^revert': {\n group: 'revert',\n },\n\n '^fetch': {\n group: 'fetch',\n },\n\n '^restore': {\n group: 'restore',\n },\n\n '^load': {\n group: 'load',\n },\n },\n },\n\n // don't include in object\n '^type$': false,\n '^files$': false,\n };\n\n // add additional option translators\n applyFilters('SET_ATTRIBUTE_TO_OPTION_MAP', attributeMapping);\n\n // create final options object by setting options object and then overriding options supplied on element\n var mergedOptions = Object.assign({}, options);\n\n var attributeOptions = getAttributesAsObject(\n element.nodeName === 'FIELDSET' ? element.querySelector('input[type=file]') : element,\n attributeMapping\n );\n\n // merge with options object\n Object.keys(attributeOptions).forEach(function(key) {\n if (isObject(attributeOptions[key])) {\n if (!isObject(mergedOptions[key])) {\n mergedOptions[key] = {};\n }\n Object.assign(mergedOptions[key], attributeOptions[key]);\n } else {\n mergedOptions[key] = attributeOptions[key];\n }\n });\n\n // if parent is a fieldset, get files from parent by selecting all input fields that are not file upload fields\n // these will then be automatically set to the initial files\n mergedOptions.files = (options.files || []).concat(\n Array.from(element.querySelectorAll('input:not([type=file])')).map(function(input) {\n return {\n source: input.value,\n options: {\n type: input.dataset.type,\n },\n };\n })\n );\n\n // build plugin\n var app = createAppObject(mergedOptions);\n\n // add already selected files\n if (element.files) {\n Array.from(element.files).forEach(function(file) {\n app.addFile(file);\n });\n }\n\n // replace the target element\n app.replaceElement(element);\n\n // expose\n return app;\n };\n\n // if an element is passed, we create the instance at that element, if not, we just create an up object\n var createApp$1 = function createApp() {\n return isNode(arguments.length <= 0 ? undefined : arguments[0])\n ? createAppAtElement.apply(void 0, arguments)\n : createAppObject.apply(void 0, arguments);\n };\n\n var PRIVATE_METHODS = ['fire', '_read', '_write'];\n\n var createAppAPI = function createAppAPI(app) {\n var api = {};\n\n copyObjectPropertiesToObject(app, api, PRIVATE_METHODS);\n\n return api;\n };\n\n /**\n * Replaces placeholders in given string with replacements\n * @param string - \"Foo {bar}\"\"\n * @param replacements - { \"bar\": 10 }\n */\n var replaceInString = function replaceInString(string, replacements) {\n return string.replace(/(?:{([a-zA-Z]+)})/g, function(match, group) {\n return replacements[group];\n });\n };\n\n var createWorker = function createWorker(fn) {\n var workerBlob = new Blob(['(', fn.toString(), ')()'], {\n type: 'application/javascript',\n });\n\n var workerURL = URL.createObjectURL(workerBlob);\n var worker = new Worker(workerURL);\n\n return {\n transfer: function transfer(message, cb) {},\n post: function post(message, cb, transferList) {\n var id = getUniqueId();\n\n worker.onmessage = function(e) {\n if (e.data.id === id) {\n cb(e.data.message);\n }\n };\n\n worker.postMessage(\n {\n id: id,\n message: message,\n },\n\n transferList\n );\n },\n terminate: function terminate() {\n worker.terminate();\n URL.revokeObjectURL(workerURL);\n },\n };\n };\n\n var loadImage = function loadImage(url) {\n return new Promise(function(resolve, reject) {\n var img = new Image();\n img.onload = function() {\n resolve(img);\n };\n img.onerror = function(e) {\n reject(e);\n };\n img.src = url;\n });\n };\n\n var renameFile = function renameFile(file, name) {\n var renamedFile = file.slice(0, file.size, file.type);\n renamedFile.lastModifiedDate = file.lastModifiedDate;\n renamedFile.name = name;\n return renamedFile;\n };\n\n var copyFile = function copyFile(file) {\n return renameFile(file, file.name);\n };\n\n // already registered plugins (can't register twice)\n var registeredPlugins = [];\n\n // pass utils to plugin\n var createAppPlugin = function createAppPlugin(plugin) {\n // already registered\n if (registeredPlugins.includes(plugin)) {\n return;\n }\n\n // remember this plugin\n registeredPlugins.push(plugin);\n\n // setup!\n var pluginOutline = plugin({\n addFilter: addFilter,\n utils: {\n Type: Type,\n forin: forin,\n isString: isString,\n isFile: isFile,\n toNaturalFileSize: toNaturalFileSize,\n replaceInString: replaceInString,\n getExtensionFromFilename: getExtensionFromFilename,\n getFilenameWithoutExtension: getFilenameWithoutExtension,\n guesstimateMimeType: guesstimateMimeType,\n getFileFromBlob: getFileFromBlob,\n getFilenameFromURL: getFilenameFromURL,\n createRoute: createRoute,\n createWorker: createWorker,\n createView: createView,\n createItemAPI: createItemAPI,\n loadImage: loadImage,\n copyFile: copyFile,\n renameFile: renameFile,\n createBlob: createBlob,\n applyFilterChain: applyFilterChain,\n text: text,\n getNumericAspectRatioFromString: getNumericAspectRatioFromString,\n },\n\n views: {\n fileActionButton: fileActionButton,\n },\n });\n\n // add plugin options to default options\n extendDefaultOptions(pluginOutline.options);\n };\n\n // feature detection used by supported() method\n var isOperaMini = function isOperaMini() {\n return Object.prototype.toString.call(window.operamini) === '[object OperaMini]';\n };\n var hasPromises = function hasPromises() {\n return 'Promise' in window;\n };\n var hasBlobSlice = function hasBlobSlice() {\n return 'slice' in Blob.prototype;\n };\n var hasCreateObjectURL = function hasCreateObjectURL() {\n return 'URL' in window && 'createObjectURL' in window.URL;\n };\n var hasVisibility = function hasVisibility() {\n return 'visibilityState' in document;\n };\n var hasTiming = function hasTiming() {\n return 'performance' in window;\n }; // iOS 8.x\n var hasCSSSupports = function hasCSSSupports() {\n return 'supports' in (window.CSS || {});\n }; // use to detect Safari 9+\n var isIE11 = function isIE11() {\n return /MSIE|Trident/.test(window.navigator.userAgent);\n };\n\n var supported = (function() {\n // Runs immediately and then remembers result for subsequent calls\n var isSupported =\n // Has to be a browser\n isBrowser() &&\n // Can't run on Opera Mini due to lack of everything\n !isOperaMini() &&\n // Require these APIs to feature detect a modern browser\n hasVisibility() &&\n hasPromises() &&\n hasBlobSlice() &&\n hasCreateObjectURL() &&\n hasTiming() &&\n // doesn't need CSSSupports but is a good way to detect Safari 9+ (we do want to support IE11 though)\n (hasCSSSupports() || isIE11());\n\n return function() {\n return isSupported;\n };\n })();\n\n /**\n * Plugin internal state (over all instances)\n */\n var state = {\n // active app instances, used to redraw the apps and to find the later\n apps: [],\n };\n\n // plugin name\n var name = 'filepond';\n\n /**\n * Public Plugin methods\n */\n var fn = function fn() {};\n exports.Status = {};\n exports.FileStatus = {};\n exports.FileOrigin = {};\n exports.OptionTypes = {};\n exports.create = fn;\n exports.destroy = fn;\n exports.parse = fn;\n exports.find = fn;\n exports.registerPlugin = fn;\n exports.getOptions = fn;\n exports.setOptions = fn;\n\n // if not supported, no API\n if (supported()) {\n // start painter and fire load event\n createPainter(\n function() {\n state.apps.forEach(function(app) {\n return app._read();\n });\n },\n function(ts) {\n state.apps.forEach(function(app) {\n return app._write(ts);\n });\n }\n );\n\n // fire loaded event so we know when FilePond is available\n var dispatch = function dispatch() {\n // let others know we have area ready\n document.dispatchEvent(\n new CustomEvent('FilePond:loaded', {\n detail: {\n supported: supported,\n create: exports.create,\n destroy: exports.destroy,\n parse: exports.parse,\n find: exports.find,\n registerPlugin: exports.registerPlugin,\n setOptions: exports.setOptions,\n },\n })\n );\n\n // clean up event\n document.removeEventListener('DOMContentLoaded', dispatch);\n };\n\n if (document.readyState !== 'loading') {\n // move to back of execution queue, FilePond should have been exported by then\n setTimeout(function() {\n return dispatch();\n }, 0);\n } else {\n document.addEventListener('DOMContentLoaded', dispatch);\n }\n\n // updates the OptionTypes object based on the current options\n var updateOptionTypes = function updateOptionTypes() {\n return forin(getOptions(), function(key, value) {\n exports.OptionTypes[key] = value[1];\n });\n };\n\n exports.Status = Object.assign({}, Status);\n exports.FileOrigin = Object.assign({}, FileOrigin);\n exports.FileStatus = Object.assign({}, ItemStatus);\n\n exports.OptionTypes = {};\n updateOptionTypes();\n\n // create method, creates apps and adds them to the app array\n exports.create = function create() {\n var app = createApp$1.apply(void 0, arguments);\n app.on('destroy', exports.destroy);\n state.apps.push(app);\n return createAppAPI(app);\n };\n\n // destroys apps and removes them from the app array\n exports.destroy = function destroy(hook) {\n // returns true if the app was destroyed successfully\n var indexToRemove = state.apps.findIndex(function(app) {\n return app.isAttachedTo(hook);\n });\n if (indexToRemove >= 0) {\n // remove from apps\n var app = state.apps.splice(indexToRemove, 1)[0];\n\n // restore original dom element\n app.restoreElement();\n\n return true;\n }\n\n return false;\n };\n\n // parses the given context for plugins (does not include the context element itself)\n exports.parse = function parse(context) {\n // get all possible hooks\n var matchedHooks = Array.from(context.querySelectorAll('.' + name));\n\n // filter out already active hooks\n var newHooks = matchedHooks.filter(function(newHook) {\n return !state.apps.find(function(app) {\n return app.isAttachedTo(newHook);\n });\n });\n\n // create new instance for each hook\n return newHooks.map(function(hook) {\n return exports.create(hook);\n });\n };\n\n // returns an app based on the given element hook\n exports.find = function find(hook) {\n var app = state.apps.find(function(app) {\n return app.isAttachedTo(hook);\n });\n if (!app) {\n return null;\n }\n return createAppAPI(app);\n };\n\n // adds a plugin extension\n exports.registerPlugin = function registerPlugin() {\n for (\n var _len = arguments.length, plugins = new Array(_len), _key = 0;\n _key < _len;\n _key++\n ) {\n plugins[_key] = arguments[_key];\n }\n\n // register plugins\n plugins.forEach(createAppPlugin);\n\n // update OptionTypes, each plugin might have extended the default options\n updateOptionTypes();\n };\n\n exports.getOptions = function getOptions$1() {\n var opts = {};\n forin(getOptions(), function(key, value) {\n opts[key] = value[0];\n });\n return opts;\n };\n\n exports.setOptions = function setOptions$1(opts) {\n if (isObject(opts)) {\n // update existing plugins\n state.apps.forEach(function(app) {\n app.setOptions(opts);\n });\n\n // override defaults\n setOptions(opts);\n }\n\n // return new options\n return exports.getOptions();\n };\n }\n\n exports.supported = supported;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n});\n"],"mappings":"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"}