{"version":3,"sources":["webpack:///./node_modules/filepond/dist/filepond.js"],"names":["global","factory","exports","this","isNode","value","HTMLElement","createStore","initialState","queries","arguments","length","undefined","actions","state","Object","assign","actionQueue","dispatchQueue","getState","processActionQueue","queue","concat","processDispatchQueue","forEach","_ref","type","data","dispatch","isBlocking","document","hidden","actionHandlers","push","query","str","_queryHandles","_len","args","Array","_key","queryHandles","apply","api","action","defineProperty","obj","property","definition","forin","cb","key","hasOwnProperty","createObject","attr","node","name","getAttribute","hasAttribute","setAttribute","ns","svgElements","isSVGElement","tag","includes","createElement","className","attributes","element","createElementNS","appendChild","parent","child","index","children","insertBefore","appendChildView","childViews","view","splice","removeChildView","indexOf","parentNode","removeChild","IS_BROWSER","window","isBrowser","testElement","getChildCount","el","childNodes","getViewRect","elementRect","offset","scale","left","top","right","width","bottom","height","rect","inner","outer","filter","childView","isRectIgnored","map","childViewRect","expandRect","calculateRectSize","marginBottom","marginRight","isNumber","thereYet","position","destination","velocity","errorMargin","Math","abs","spring","_ref$stiffness","stiffness","_ref$damping","damping","_ref$mass","mass","target","resting","interpolate","ts","skipToEndState","f","onupdate","oncomplete","setTarget","set","get","easeInOutQuad","t","tween","p","_ref$duration","duration","_ref$easing","easing","_ref$delay","delay","start","reverse","animator","createAnimator","category","def","props","addGetSet","keys","overwrite","isArray","o","getter","setter","animations","mixinConfig","viewProps","viewInternalAPI","viewExternalAPI","initialProps","animation","prop","write","destroy","addEvent","fn","addEventListener","removeEvent","removeEventListener","listeners","viewState","events","add","remove","on","off","findIndex","event","apis","isDefined","defaults","opacity","scaleX","scaleY","translateX","translateY","rotateX","rotateY","rotateZ","originX","originY","styles","currentProps","getOffset","getScale","getRect","propsHaveChanged","applyStyles","newProps","_ref2","perspective","transforms","elementCurrentStyle","style","cssText","Mixins","updateRect","layoutCalculated","paddingTop","parseInt","marginTop","marginLeft","offsetLeft","offsetTop","offsetWidth","offsetHeight","scrollTop","offsetParent","createView","_ref$tag","_ref$name","_ref$attributes","_ref$read","read","_ref$write","_ref$create","create","_ref$destroy","_ref$filterFrameActio","filterFrameActionsForChild","_ref$didCreateView","didCreateView","_ref$didWriteView","didWriteView","_ref$ignoreRect","ignoreRect","_ref$ignoreRectUpdate","ignoreRectUpdate","_ref$mixins","mixins","store","getComputedStyle","frameRect","isResting","activeMixins","ref","writers","readers","destroyers","getElement","getChildViews","getReference","createChildView","getStyle","_read","shouldUpdate","root","internalAPI","reader","_write","frameActions","shouldOptimize","writer","writerResting","timestamp","mixin","mixinResting","childResting","_destroy","destroyer","sharedAPIDefinition","internalAPIDefinition","is","needle","linkView","unlinkView","registerWriter","registerReader","registerDestroyer","invalidateLayout","externalAPIDefinition","mixinAPIDefinition","sort","a","b","mixinAPI","childCount","createPainter","fps","painter","interval","last","id","requestTick","cancelTick","setTimerType","setTimeout","tick","performance","now","clearTimeout","requestAnimationFrame","cancelAnimationFrame","delta","pause","createRoute","routes","_ref$actions","newNode","referenceNode","insertAfter","nextSibling","isEmpty","trim","toString","toArray","splitter","split","isBoolean","toBoolean","isString","toNumber","replace","toInt","toFloat","parseFloat","isInt","isFinite","floor","toBytes","base","naturalFileSize","test","isFunction","toFunctionReference","string","self","levels","level","shift","methods","process","patch","revert","fetch","restore","load","createServerAPI","outline","url","timeout","headers","createAction","method","withCredentials","onload","ondata","onerror","parts","header","toServerAPI","isNull","isObject","isAPI","getType","replaceSingleQuotes","conversionTable","array","boolean","int","number","float","bytes","function","serverapi","object","JSON","parse","e","convertTo","getValueByType","newValue","defaultValue","valueType","newValueType","convertedValue","option","createOption","currentValue","enumerable","createOptions","options","optionDefinition","createInitialState","items","listUpdateTimeout","itemUpdateTimeout","processingQueue","fromCamels","separator","part","toLowerCase","join","createOptionAPI","toUpperCase","createOptionActions","createOptionQueries","InteractionMethod","API","DROP","BROWSE","PASTE","NONE","getUniqueId","random","substr","_AwaitValue","wrapped","_AsyncGenerator","gen","front","back","send","arg","Promise","resolve","reject","request","next","resume","result","wrappedAwait","then","settle","done","err","_invoke","return","_objectWithoutPropertiesLoose","source","excluded","i","sourceKeys","_objectWithoutProperties","getOwnPropertySymbols","sourceSymbolKeys","prototype","propertyIsEnumerable","call","Symbol","asyncIterator","throw","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","arr2","iter","iterator","from","TypeError","arrayRemove","run","sync","listener","_fire","fireSync","fire","_len2","_key2","onOnce","_cb","copyObjectPropertiesToObject","src","getOwnPropertyNames","getOwnPropertyDescriptor","PRIVATE","createItemAPI","item","removeReleasedItems","released","ItemStatus","INIT","IDLE","PROCESSING_QUEUED","PROCESSING","PROCESSING_COMPLETE","PROCESSING_ERROR","PROCESSING_REVERT_ERROR","LOADING","LOAD_ERROR","FileOrigin","INPUT","LIMBO","LOCAL","getNonNumeric","exec","getDecimalSeparator","toLocaleString","getThousandsSeparator","decimalSeparator","thousandsStringWithSeparator","thousandsStringWithoutSeparator","Type","BOOLEAN","INT","NUMBER","STRING","ARRAY","OBJECT","FUNCTION","ACTION","SERVER_API","REGEX","filters","applyFilterChain","utils","matchingFilters","initialFilter","reduce","current","catch","error","applyFilters","addFilter","extendDefaultOptions","additionalOptions","defaultOptions","getOptions","setOptions","opts","disabled","required","captureMethod","allowSyncAcceptAttribute","allowDrop","allowBrowse","allowPaste","allowMultiple","allowReplace","allowRevert","allowRemove","allowProcess","allowReorder","allowDirectoriesOnly","storeAsFile","forceRevert","maxFiles","checkValidity","itemInsertLocationFreedom","itemInsertLocation","itemInsertInterval","dropOnPage","dropOnElement","dropValidation","ignoredFiles","instantUpload","maxParallelUploads","allowMinimumUploadDuration","chunkUploads","chunkForce","chunkSize","chunkRetryDelays","server","fileSizeBase","labelFileSizeBytes","labelFileSizeKilobytes","labelFileSizeMegabytes","labelFileSizeGigabytes","labelDecimalSeparator","labelThousandsSeparator","labelIdle","labelInvalidField","labelFileWaitingForSize","labelFileSizeNotAvailable","labelFileCountSingular","labelFileCountPlural","labelFileLoading","labelFileAdded","labelFileLoadError","labelFileRemoved","labelFileRemoveError","labelFileProcessing","labelFileProcessingComplete","labelFileProcessingAborted","labelFileProcessingError","labelFileProcessingRevertError","labelTapToCancel","labelTapToRetry","labelTapToUndo","labelButtonRemoveItem","labelButtonAbortItemLoad","labelButtonRetryItemLoad","labelButtonAbortItemProcessing","labelButtonUndoItemProcessing","labelButtonRetryItemProcessing","labelButtonProcessItem","iconRemove","iconProcess","iconRetry","iconUndo","iconDone","oninit","onwarning","onactivatefile","oninitfile","onaddfilestart","onaddfileprogress","onaddfile","onprocessfilestart","onprocessfileprogress","onprocessfileabort","onprocessfilerevert","onprocessfile","onprocessfiles","onremovefile","onpreparefile","onupdatefiles","onreorderfiles","beforeDropFile","beforeAddFile","beforeRemoveFile","beforePrepareFile","stylePanelLayout","stylePanelAspectRatio","styleItemPanelAspectRatio","styleButtonRemoveItemPosition","styleButtonProcessItemPosition","styleLoadIndicatorPosition","styleProgressIndicatorPosition","styleButtonRemoveItemAlign","files","credits","getItemByQuery","find","getNumericAspectRatioFromString","aspectRatio","getActiveItems","archived","Status","EMPTY","ERROR","BUSY","READY","res","canUpdateFileInput","dataTransfer","DataTransfer","File","ITEM_ERROR","ITEM_BUSY","ITEM_READY","isItemInErrorState","status","isItemInBusyState","isItemInReadyState","isAsync","GET_STATUS","some","GET_ITEM","GET_ACTIVE_ITEM","GET_ACTIVE_ITEMS","GET_ITEMS","GET_ITEM_NAME","filename","GET_ITEM_SIZE","fileSize","GET_STYLES","GET_PANEL_ASPECT_RATIO","isShapeCircle","GET_ITEM_PANEL_ASPECT_RATIO","GET_ITEMS_BY_STATUS","GET_TOTAL_ITEMS","SHOULD_UPDATE_FILE_INPUT","IS_ASYNC","GET_FILE_SIZE_LABELS","labelBytes","labelKilobytes","labelMegabytes","labelGigabytes","hasRoomForItem","count","maxFileCount","limit","min","max","arrayInsert","insertItem","isBase64DataURI","getFilenameFromURL","pop","getExtensionFromFilename","guesstimateExtension","subtype","leftPad","padding","slice","getDateString","date","Date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getFileFromBlob","blob","extension","file","size","lastModifiedDate","_relativePath","getBlobBuilder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","createBlob","arrayBuffer","mimeType","BB","bb","append","getBlob","Blob","getBlobFromByteStringWithMimeType","byteString","ab","ArrayBuffer","ia","Uint8Array","charCodeAt","getMimeTypeFromBase64DataURI","dataURI","getBase64DataFromBase64DataURI","getByteStringFromBase64DataURI","atob","getBlobFromBase64DataURI","getFileFromBase64DataURI","getFileNameFromHeader","matches","decodeURI","getFileSizeFromHeader","match","getTranfserIdFromHeader","getFileInfoFromHeaders","info","rows","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","createFileLoader","fetchFn","complete","progress","getProgress","abort","loadURL","response","body","code","computable","total","fileinfo","setSource","isGet","sendRequest","onheaders","onprogress","ontimeout","onabort","aborted","xhr","headersReceived","encodeURI","encodeURIComponent","stringify","XMLHttpRequest","upload","lengthComputable","loaded","onreadystatechange","readyState","open","unescape","setRequestHeader","responseType","createResponse","createTimeoutResponse","getAllResponseHeaders","hasQS","buildURL","createFetchFunction","apiUrl","statusText","ChunkStatus","QUEUED","COMPLETE","WAITING","processFileChunked","metadata","transfer","chunks","chunkTransferId","chunkServer","serverId","fd","getResponseHeader","requestTransferId","formData","FormData","requestParams","requestTransferOffset","requestUrl","lastChunkIndex","retries","completeProcessingChunks","canProcessChunk","chunk","processChunk","processChunks","updateTotalProgress","retryProcessChunk","every","totalBytesTransfered","totalSize","totalProcessing","abortChunks","createFileProcessorFunction","canChunkUpload","shouldChunkUpload","willChunkUpload","createProcessorFunction","params","createRevertFunction","uniqueFileId","getRandomNumber","createPerceivedPerformanceUpdater","tickMin","tickMax","runtime","clear","createFileProcessor","processFn","perceivedProgress","perceivedPerformanceUpdater","perceivedDuration","progressFn","completeFn","transferId","reset","getDuration","getFilenameWithoutExtension","lastIndexOf","createFileStub","isFile","deepCloneObject","v","createItem","origin","serverFileReference","frozen","processingAborted","activeLoader","activeProcessor","abortProcessingRequestComplete","setStatus","getFileExtension","getFileType","getFileSize","getFile","loader","meta","success","retryLoad","abortLoad","processor","onprocess","console","requestProcessing","abortProcessing","revertFileUpload","serverTransferId","_setMetadata","silent","getMetadata","filenameWithoutExtension","fileExtension","fileType","relativePath","setMetadata","extend","handler","itemAPI","freeze","release","archive","getItemIndexByQuery","getItemById","itemId","fetchBlob","getDomainFromURL","location","protocol","isExternalURL","href","dynamicLabel","label","isMockItem","listUpdated","optionalPromise","sortItems","compare","getItemByQueryFromState","itemHandler","_ref$success","_ref$failure","failure","ABORT_ALL","DID_SET_FILES","_ref2$value","activeItems","interactionMethod","DID_UPDATE_ITEM_METADATA","_ref3","change","doUpload","shouldPrepareOutput","MOVE_ITEM","_ref4","currentIndex","SORT","_ref5","ADD_ITEMS","_ref6","_ref6$success","_ref6$failure","insertLocation","totalItems","isValidFile","validItems","promises","all","ADD_ITEM","_ref7","_ref7$index","_ref7$success","_ref7$failure","_ref7$options","_item","mainStatus","main","sub","handleAdd","shouldAdd","loadComplete","_ref8","REQUEST_PREPARE_OUTPUT","_ref9","_ref9$failure","COMPLETE_LOAD_ITEM","_ref10","RETRY_ITEM_LOAD","REQUEST_ITEM_PREPARE","_success","output","REQUEST_ITEM_PROCESSING","itemCanBeQueuedForProcessing","processNow","PROCESS_ITEM","totalCurrentUploads","processNext","queueEntry","itemReference","noop","allItemsProcessed","RETRY_ITEM_PROCESSING","REQUEST_REMOVE_ITEM","shouldRemove","RELEASE_ITEM","REMOVE_ITEM","removeFromView","ABORT_ITEM_LOAD","ABORT_ITEM_PROCESSING","REQUEST_REVERT_ITEM_PROCESSING","handleRevert","shouldRevert","requestRemoveResult","REVERT_ITEM_PROCESSING","SET_OPTIONS","_ref11","optionKeys","prioritizedOptionKeys","PrioritizedOptions","orderedOptionKeys","formatFilename","createElement$1","tagName","text","textNode","nodeValue","createTextNode","polarToCartesian","centerX","centerY","radius","angleInDegrees","angleInRadians","PI","x","cos","y","sin","describeArc","startAngle","endAngle","arcSweep","end","percentageArc","to","spin","svg","path","align","dataset","ringStrokeWidth","ringFrom","ringTo","coordinates","progressIndicator","create$1","innerHTML","icon","isDisabled","write$1","shouldDisable","removeAttribute","fileActionButton","toNaturalFileSize","_options$labelBytes","_options$labelKilobyt","_options$labelMegabyt","_options$labelGigabyt","round","KB","MB","GB","removeDecimalsWhenZero","decimalCount","toFixed","create$2","fileName","updateFile","updateFileSizeOnError","fileInfo","DID_LOAD_ITEM","DID_UPDATE_ITEM_META","DID_THROW_ITEM_LOAD_ERROR","DID_THROW_ITEM_INVALID","toPercentage","create$3","didSetItemLoadProgress","title","didSetItemProcessProgress","didRequestItemProcessing","didAbortItemProcessing","didCompleteItemProcessing","fileStatus","DID_REVERT_ITEM_PROCESSING","DID_REQUEST_ITEM_PROCESSING","DID_ABORT_ITEM_PROCESSING","DID_COMPLETE_ITEM_PROCESSING","DID_UPDATE_ITEM_PROCESS_PROGRESS","DID_UPDATE_ITEM_LOAD_PROGRESS","DID_THROW_ITEM_PROCESSING_ERROR","DID_THROW_ITEM_PROCESSING_REVERT_ERROR","DID_THROW_ITEM_REMOVE_ERROR","Buttons","AbortItemLoad","RetryItemLoad","RemoveItem","ProcessItem","AbortItemProcessing","RetryItemProcessing","RevertItemProcessing","ButtonKeys","calculateFileInfoOffset","getRemoveIndicatorAligment","buttonRect","buttonRemoveItem","calculateButtonWidth","buttonAbortItemLoad","calculateFileVerticalCenterOffset","calculateFileHorizontalCenterOffset","getLoadIndicatorAlignment","getProcessIndicatorAlignment","DefaultStyle","buttonRetryItemLoad","buttonProcessItem","buttonAbortItemProcessing","buttonRetryItemProcessing","buttonRevertItemProcessing","loadProgressIndicator","processProgressIndicator","processingCompleteIndicator","IdleStyle","ProcessingStyle","StyleMap","DID_START_ITEM_LOAD","DID_START_ITEM_REMOVE","DID_LOAD_LOCAL_ITEM","DID_START_ITEM_PROCESSING","processingCompleteIndicatorView","create$4","buttonFilter","LocalButtons","prev","curr","alignRemoveItemButton","enabledButtons","_map","buttonView","classList","stopPropagation","loadIndicatorView","progressIndicatorView","activeStyles","write$2","route","stylesToApply","defaultStyles","control","DID_SET_LABEL_BUTTON_ABORT_ITEM_PROCESSING","DID_SET_LABEL_BUTTON_ABORT_ITEM_LOAD","DID_SET_LABEL_BUTTON_ABORT_ITEM_REMOVAL","buttonAbortItemRemoval","_ref12","create$5","didLoadItem","fileWrapper","PANEL_SPRING_PROPS","create$6","section","createSection","scalable","viewConstructor","write$3","topRect","bottomRect","center","panel","heightCurrent","createDragHelper","itemIds","prevIndex","setIndex","getIndex","getItemIndex","ITEM_TRANSLATE_SPRING","ITEM_SCALE_SPRING","StateMap","create$7","handleClick","container","markedForRemoval","dragState","grab","isPrimary","removedActivateListener","pageX","pageY","dragOrigin","dragCenter","offsetX","offsetY","drag","preventDefault","dragOffset","dist","drop","route$1","DID_UPDATE_PANEL_HEIGHT","write$4","DID_GRAB_ITEM","DID_DRAG_ITEM","DID_DROP_ITEM","currentState","filepondItemState","getItemsPerRow","horizontalSpace","itemWidth","getItemIndexByPosition","positionInView","l","itemRect","itemHorizontalMargin","itemsPerRow","childMid","itemVerticalMargin","itemHeight","_index","indexX","indexY","itemTop","itemRight","itemBottom","dropAreaDimensions","val","setDimensions","create$8","lastItemSpanwDate","addItemView","addIndex","spawnDate","cooldown","moveItem","vx","vy","introItemView","removeItemView","getItemHeight","getItemWidth","dragItem","numItems","oldIndex","dragPosition","dragHeight","dragWidth","cols","setHeight","setWidth","getGridIndex","getHeight","getWidth","getColIndex","visibleChildren","idx","childHeight","childBottom","childTop","route$2","DID_ADD_ITEM","DID_REMOVE_ITEM","write$5","dragCoordinates","dragIndex","dragIndexOffset","removeIndexOffset","addIndexOffset","childRect","visualHeight","prevX","prevY","visualIndex","vectorX","sign","vectorY","filterSetItemActions","list","create$9","overflowing","storeDragCoordinates","scopeLeft","scopeTop","clearDragCoordinates","route$3","DID_DRAG","DID_END_DRAG","write$6","overflow","newHeight","listScroller","attrToggle","enabledValue","resetFileInput","input","form","create$a","setAcceptedFileTypes","toggleAllowMultiple","toggleDirectoryFilter","toggleDisabled","toggleRequired","setCaptureMethod","handleChange","webkitRelativePath","doesAllowBrowse","disableField","updateRequiredStatus","shouldCheckValidity","setCustomValidity","updateFieldValidityStatus","browser","DID_SET_DISABLED","DID_SET_ALLOW_BROWSE","DID_SET_ALLOW_DIRECTORIES_ONLY","DID_SET_ALLOW_MULTIPLE","DID_SET_ACCEPTED_FILE_TYPES","DID_SET_CAPTURE_METHOD","DID_SET_REQUIRED","Key","ENTER","SPACE","create$b","handleKeyDown","isActivationKey","keyCode","click","isLabelClick","contains","updateLabelValue","caption","clickable","querySelector","dropLabel","DID_SET_LABEL_IDLE","addBlob","moveBlob","hideBlob","explodeBlob","write$7","route$4","DID_DROP","drip","setInputFiles","create$c","fields","getField","syncFieldPositionsWithItems","didReorderItems","didAddItem","fileItem","isLocalFile","shouldUseFileInput","dataContainer","didLoadItem$1","field","didPrepareOutput","didSetDisabled","didRemoveItem","didDefineValue","write$8","DID_DEFINE_VALUE","DID_PREPARE_OUTPUT","DID_REORDER_ITEMS","DID_SORT_ITEMS","getRootNode","images","text$1","zip","epub","guesstimateMimeType","requestDataTransferItems","links","getLinks","hasFiles","getFiles","promisedFiles","isFileSystemItem","getFilesFromItem","returnedFileGroups","group","isEntry","entry","getAsEntry","isDirectory","kind","isDirectoryEntry","getFilesInDirectory","getAsFile","dirCounter","fileCounter","resolveIfDone","readEntries","dirEntry","directoryReader","createReader","readBatch","entries","correctedFile","correctMissingFileType","fullPath","webkitGetAsEntry","getLinksFromTransferMetaData","getLinksFromTransferURLData","getData","dragNDropObservers","eventPosition","pageLeft","pageTop","layerX","layerY","createDragNDropClient","scopeToObserve","filterElement","observer","getDragNDropObserver","client","ondrop","onenter","ondrag","onexit","allowdrop","addListener","newObserver","createDragNDropObserver","clients","dragenter","dragover","dragleave","handlers","createHandler","elementFromPoint","point","isEventTarget","elementAtPosition","pageXOffset","pageYOffset","initialTarget","setDropEffect","effect","dropEffect","overDropTarget","allowsTransfer","createHopper","scope","validateItems","catchesDropsOnPage","requiresDropOnElement","_options$filterItems","filterItems","documentElement","lastState","filteredItems","ondragend","ondragstart","updateHopperState","hopperState","listening","listeners$1","handlePaste","activeEl","activeElement","nodeName","inScope","clipboardData","listen","unlisten","createPaster","create$d","addFilesNotificationTimeout","notificationClearTimeout","filenames","assist","message","textContent","clear$1","listModified","isUsingFilePond","itemAdded","itemRemoved","itemProcessed","itemProcessedUndo","itemError","assistant","toCamels","RegExp","charAt","debounce","func","immidiateOnly","MAX_FILES_LIMIT","prevent","create$e","measure","bounds","widthPrevious","widthUpdated","updateHistory","previousAspectRatio","canHover","matchMedia","hasPointerEvents","passive","hasCredits","frag","tabindex","rel","write$9","route$5","calculateRootBoundingBoxHeight","_root$ref","hopper","isMultiItem","maxItems","atMaxCapacity","addAction","listItemMargin","calculateListItemMargin","listHeight","calculateListHeight","labelHeight","currentLabelHeight","listMarginTop","listMarginBottom","visual","boundsHeight","history","MAX_BOUNCES","bounces","listAvailableHeight","fixedHeight","_listAvailableHeight","cappedHeight","isCappedHeight","panelHeight","_listAvailableHeight2","itemMargin","transform","scrollList","itemList","newItem","removedItem","verticalItemCount","ceil","measureHeight","maxHeight","exceedsMaxFiles","totalBrowseItems","hasMaxItems","getDragIndex","toggleDrop","isAllowed","enabled","toggleBrowse","togglePaste","paster","DID_SET_ALLOW_DROP","DID_SET_ALLOW_PASTE","createApp","initialOptions","originalElement","visibilityHandler","resizeDoneTimer","isResizing","isResizingHorizontally","initialWindowWidth","currentWindowWidth","resizeHandler","isHidden","readWriteApi","innerWidth","routeActionsToEvents","createEvent","eventRoutes","DID_DESTROY","DID_INIT","DID_THROW_MAX_FILES","DID_INIT_ITEM","DID_COMPLETE_ITEM_PROCESSING_ALL","DID_UPDATE_ITEMS","DID_ACTIVATE_ITEM","exposeEvent","detail","pond","dispatchEvent","CustomEvent","bubbles","cancelable","composed","filtered","prepareFile","addFile","addFiles","isFilePondFile","removeFile","sources","lastArgument","processFile","prepareFiles","processFiles","_len3","_key3","removeFiles","_len4","_key4","mappedQueries","q","moveFile","browse","appendTo","replaceElement","restoreElement","isAttachedTo","createAppObject","customOptions","app","lowerCaseFirstLetter","attributeNameToPropertyName","attributeName","mapObject","propertyMap","selector","mapping","selectorRegExp","getAttributesAsObject","attributeMapping","attribute","createAppAtElement","mergedOptions","attributeOptions","querySelectorAll","createApp$1","PRIVATE_METHODS","createAppAPI","replaceInString","replacements","createWorker","workerBlob","workerURL","URL","createObjectURL","worker","Worker","post","transferList","onmessage","postMessage","terminate","revokeObjectURL","loadImage","img","Image","renameFile","renamedFile","copyFile","registeredPlugins","createAppPlugin","plugin","pluginOutline","views","isOperaMini","operamini","hasPromises","hasBlobSlice","hasCreateObjectURL","hasVisibility","hasTiming","hasCSSSupports","CSS","isIE11","navigator","userAgent","supported","isSupported","apps","FileStatus","OptionTypes","registerPlugin","updateOptionTypes","hook","indexToRemove","context","matchedHooks","newHooks","newHook","plugins"],"mappings":"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","file":"js/chunk-vendors~b59c2b61.a3d26fa1.js","sourcesContent":["/*!\n * FilePond 4.30.3\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 .substr(2, 9);\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 Browse',\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 '',\n Type.STRING,\n ],\n\n iconProcess: [\n '',\n Type.STRING,\n ],\n\n iconRetry: [\n '',\n Type.STRING,\n ],\n\n iconUndo: [\n '',\n Type.STRING,\n ],\n\n iconDone: [\n '',\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://pqina.nl/', 'Powered by PQINA'], 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({}, action.headers, {\n 'Upload-Length': file.size,\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({}, action.headers);\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\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({}, chunkServer.headers, {\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 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() {\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.substr(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 );\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 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 // 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 || '') + ('' + props.label + '');\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\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 document.removeEventListener('pointermove', drag);\n document.removeEventListener('pointerup', drop);\n\n props.dragOffset = {\n x: e.pageX - origin.x,\n y: e.pageY - origin.y,\n };\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('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 function(_ref6) {\n var root = _ref6.root,\n actions = _ref6.actions,\n props = _ref6.props,\n shouldOptimize = _ref6.shouldOptimize;\n\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 styles: ['translateX', 'translateY', 'scaleX', 'scaleY', 'opacity', 'height'],\n\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 * 0.5 +\n child.rect.element.marginTop * 0.5\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\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 } 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\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 // hide the label for screenreaders, the input element will read the contents of the label when it's focussed. If we don't set aria-hidden the screenreader will also navigate the contents of the label separately from the input.\n attr(label, 'aria-hidden', 'true');\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 return (root.ref.fields = {});\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 dataContainer.disabled = root.query('GET_DISABLED');\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 (so doesn't deal with file input)\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 field.value = action.value;\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 if (activeEl && /textarea|input/i.test(activeEl.nodeName)) {\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', 'status');\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\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.setAttribute('aria-hidden', 'true');\n frag.href = credits[0];\n frag.tabindex = -1;\n frag.target = '_blank';\n frag.rel = 'noopener noreferrer';\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.substr(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 return true;\n }\n\n // limit max items to one if not allowed to drop multiple items\n maxItems = allowMultiple ? maxItems : allowReplace ? maxItems : 1;\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"],"sourceRoot":""}