{"version":3,"sources":["webpack:///./node_modules/vue-filepond/dist/vue-filepond.js","webpack:///./node_modules/filepond-plugin-image-preview/dist/filepond-plugin-image-preview.js","webpack:///./node_modules/filepond-plugin-file-encode/dist/filepond-plugin-file-encode.js","webpack:///./node_modules/filepond/dist/filepond.js"],"names":["global","factory","globalThis","self","_exports","_vue","_filepond","_interopRequireDefault","obj","__esModule","default","Object","defineProperty","value","setOptions","filteredComponentMethods","isSupported","supported","getNativeConstructorFromType","type","string","String","boolean","Boolean","array","Array","function","Function","int","Number","serverapi","object","props","events","watch","instances","globalOptions","options","assign","forEach","instance","_default","registerPlugin","apply","arguments","length","_loop","prop","test","push","OptionTypes","this","_pond","component","name","render","h","attrs","id","className","required","multiple","allowMultiple","accept","acceptedFileTypes","capture","captureMethod","mounted","_this","_element","$el","querySelector","reduce","$emit","getFiles","_len","args","_key","substr","concat","$attrs","create","$options","propsData","keys","filter","key","includes","destroyed","_this2","detached","offsetParent","mutationHandler","mutations","observer","removedNodes","removedNode","contains","disconnect","call","MutationObserver","observe","document","documentElement","childList","subtree","destroy","index","indexOf","splice","module","exports","isPreviewableImage","file","_AwaitValue","wrapped","_AsyncGenerator","gen","front","back","send","arg","Promise","resolve","reject","request","next","resume","result","wrappedAwait","then","settle","done","err","_invoke","return","undefined","Symbol","asyncIterator","prototype","throw","_slicedToArray","arr","i","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","isArray","_arr","_n","_d","_e","_s","_i","iterator","TypeError","vectorMultiply","v","amount","createVector","x","y","vectorAdd","a","b","vectorNormalize","l","Math","sqrt","vectorRotate","radians","origin","cos","sin","t","getMarkupValue","size","scalar","axis","parseFloat","min","width","height","getMarkupStyles","markup","scale","lineStyle","borderStyle","fill","backgroundColor","fontColor","stroke","borderColor","lineColor","strokeWidth","borderWidth","lineWidth","lineCap","lineJoin","dashes","map","join","opacity","isDefined","getMarkupRect","rect","left","top","right","bottom","pointsToPathShape","points","point","setAttributes","element","attr","setAttribute","ns","svg","tag","createElementNS","updateRect","styles","updateEllipse","cx","cy","rx","ry","IMAGE_FIT_STYLE","contain","cover","updateImage","preserveAspectRatio","fit","TEXT_ANCHOR","center","updateText","fontSize","fontFamily","fontWeight","textAlign","text","textContent","updateLine","line","childNodes","begin","end","target","x1","y1","x2","y2","lineDecoration","style","display","arrowBeginRotationPoint","arrowBeginCenter","arrowBeginA","arrowBeginB","d","arrowEndRotationPoint","arrowEndCenter","arrowEndA","arrowEndB","updatePath","createShape","node","createImage","shape","onload","setAttributeNS","src","createLine","appendChild","CREATE_TYPE_ROUTES","image","ellipse","path","UPDATE_TYPE_ROUTES","createMarkupByType","updateMarkupByType","MARKUP_RECT","toOptionalFraction","prepareMarkup","_markup","prev","curr","zIndex","sortMarkupByZIndex","createMarkupView","_","utils","createView","ignoreRect","mixins","apis","write","_ref","root","dirty","crop","resize","viewWidth","viewHeight","cropWidth","cropHeight","_size","outputWidth","outputHeight","outputFit","mode","outputUpscale","upscale","shouldUpscale","scalarWidth","scalarHeight","max","innerHTML","markupFilter","query","sort","settings","createVector$1","vectorDot","vectorSubtract","vectorDistanceSquared","vectorDistance","getOffsetPointOnEdge","rotation","A","B","C","sinA","sinB","sinC","cosC","ratio","c","getRotatedRectSize","w","hor","ver","tl","abs","tr","bl","calculateCanvasSize","canvasAspectRatio","zoom","imageAspectRatio","canvasWidth","canvasHeight","imgWidth","imgHeight","getImageRectZoomFactor","imageRect","cropRect","imageWidth","imageHeight","rotatedCropSize","getCenteredCropRect","container","aspectRatio","getCurrentCropSize","imageSize","canvasSize","canvasCenter","stage","shouldLimit","scaleToFit","stageZoomFactor","widthFloat","heightFloat","round","IMAGE_SCALE_SPRING_PROPS","stiffness","damping","mass","createBitmapView","createImageCanvasWrapper","animations","originX","originY","scaleX","scaleY","translateX","translateY","rotateZ","_ref2","ref","bitmap","appendChildView","createChildView","_ref3","flip","horizontal","vertical","createClipView","duration","didWriteView","_ref4","background","_ref5","createMarkup","destroyMarkup","removeChildView","transparencyIndicator","dataset","_ref6","shouldOptimize","translation","PI","cropAspectRatio","imageView","createImageView","_ref7","clip","_ref8","hidden","containerWidth","inner","containerHeight","fixedPreviewHeight","minPreviewHeight","maxPreviewHeight","panelAspectRatio","clipHeight","clipWidth","SVG_MASK","SVGMaskUniqueId","createImageOverlayView","fpAPI","mask","url","window","location","href","replace","hash","classList","add","status","BitmapWorker","onmessage","e","createImageBitmap","data","message","postMessage","ColorMatrixWorker","imageData","matrix","colorMatrix","m11","m12","m13","m14","m15","m21","m22","m23","m24","m25","m31","m32","m33","m34","m35","m41","m42","m43","m44","m45","r","g","buffer","getImageSize","cb","Image","naturalWidth","naturalHeight","transforms","1","2","3","4","5","6","7","8","fixImageOrientation","ctx","orientation","transform","createPreviewImage","canvas","createElement","getContext","drawImage","isBitmap","MAX_WIDTH","MAX_HEIGHT","calculateAverageColor","ceil","getImageData","averageColor","floor","cloneCanvas","cloneImageData","ImageData","createImageData","set","Uint8ClampedArray","loadImage","img","crossOrigin","onerror","createImageWrapperView","OverlayView","ImageView","createWorker","applyFilter","putImageData","worker","post","response","terminate","removeImageView","_destroy","shiftImage","images","shift","imageViewBin","pushImage","item","getMetadata","childViews","setTimeout","dispatch","didUpdateItemMetadata","action","change","_imageView","canCreateImageBitmap","userAgent","navigator","isFirefox","match","firefoxVersion","parseInt","didCreatePreviewContainer","fileURL","URL","createObjectURL","drawPreview","loadPreviewFallback","previewImageLoaded","revokeObjectURL","exif","pixelDensityFactor","devicePixelRatio","zoomFactor","scaleFactor","previewImageRatio","previewContainerWidth","previewContainerHeight","previewImage","setMetadata","close","overlayShadow","imageBitmap","didDrawPreview","restoreOverlay","_ref9","overlayError","overlaySuccess","didThrowError","_ref10","didCompleteProcessing","_ref11","_ref12","_ref13","_ref14","createRoute","DID_IMAGE_PREVIEW_DRAW","DID_IMAGE_PREVIEW_CONTAINER_CREATE","DID_FINISH_CALCULATE_PREVIEWSIZE","DID_UPDATE_ITEM_METADATA","DID_THROW_ITEM_LOAD_ERROR","DID_THROW_ITEM_PROCESSING_ERROR","DID_THROW_ITEM_INVALID","DID_COMPLETE_ITEM_PROCESSING","DID_START_ITEM_PROCESSING","DID_REVERT_ITEM_PROCESSING","_ref15","viewsToRemove","plugin","addFilter","Type","isFile","imagePreviewView","viewAPI","is","view","didLoadItem","archived","supportsCreateImageBitmap","maxPreviewFileSize","imagePreview","queue","rescaleItem","itemPanelAspectRatio","fixedHeight","_root$ref","previewAspectRatio","previewHeightMax","itemWidth","previewHeight","didResizeView","shouldRescale","didCalculatePreviewSize","shouldDrawPreview","registerWriter","DID_RESIZE_ROOT","DID_STOP_RESIZE","DID_LOAD_ITEM","DID_IMAGE_PREVIEW_CALCULATE_SIZE","requestAnimationFrame","allowImagePreview","BOOLEAN","imagePreviewFilterItem","FUNCTION","imagePreviewHeight","INT","imagePreviewMinHeight","imagePreviewMaxHeight","imagePreviewMaxFileSize","imagePreviewZoomFactor","imagePreviewUpscale","imagePreviewMaxInstantPreviewFileSize","imagePreviewTransparencyIndicator","STRING","imagePreviewCalculateAverageImageColor","imagePreviewMarkupShow","imagePreviewMarkupFilter","isBrowser","dispatchEvent","CustomEvent","detail","DataURIWorker","convert","reader","FileReader","onloadend","readAsDataURL","encode","base64Cache","extend","fileType","shouldPrepareOutput","metadata","all","Blob","dataItems","DID_PREPARE_OUTPUT","cache","JSON","stringify","DID_REMOVE_ITEM","allowFileEncode","isNode","HTMLElement","createStore","initialState","queries","actions","state","actionQueue","dispatchQueue","getState","processActionQueue","processDispatchQueue","isBlocking","actionHandlers","str","_queryHandles","queryHandles","api","property","definition","forin","hasOwnProperty","createObject","getAttribute","hasAttribute","svgElements","isSVGElement","attributes","parent","child","children","insertBefore","parentNode","removeChild","IS_BROWSER","testElement","getChildCount","el","getViewRect","elementRect","offset","outer","childView","isRectIgnored","childViewRect","expandRect","calculateRectSize","marginBottom","marginRight","isNumber","thereYet","position","destination","velocity","errorMargin","spring","_ref$stiffness","_ref$damping","_ref$mass","resting","interpolate","ts","skipToEndState","f","onupdate","oncomplete","setTarget","get","easeInOutQuad","tween","p","_ref$duration","_ref$easing","easing","_ref$delay","delay","start","reverse","animator","createAnimator","category","def","addGetSet","overwrite","o","getter","setter","mixinConfig","viewProps","viewInternalAPI","viewExternalAPI","initialProps","animation","addEvent","fn","addEventListener","removeEvent","removeEventListener","listeners","viewState","remove","on","off","findIndex","event","defaults","rotateX","rotateY","currentProps","getOffset","getScale","getRect","propsHaveChanged","applyStyles","newProps","perspective","elementCurrentStyle","cssText","Mixins","layoutCalculated","paddingTop","marginTop","marginLeft","offsetLeft","offsetTop","offsetWidth","offsetHeight","scrollTop","_ref$tag","_ref$name","_ref$attributes","_ref$read","read","_ref$write","_ref$create","_ref$destroy","_ref$filterFrameActio","filterFrameActionsForChild","_ref$didCreateView","didCreateView","_ref$didWriteView","_ref$ignoreRect","_ref$ignoreRectUpdate","ignoreRectUpdate","_ref$mixins","store","getComputedStyle","frameRect","isResting","activeMixins","writers","readers","destroyers","getElement","getChildViews","getReference","getStyle","_read","shouldUpdate","internalAPI","_write","frameActions","writer","writerResting","timestamp","mixin","mixinResting","childResting","destroyer","sharedAPIDefinition","internalAPIDefinition","needle","linkView","unlinkView","registerReader","registerDestroyer","invalidateLayout","externalAPIDefinition","mixinAPIDefinition","mixinAPI","childCount","createPainter","fps","painter","interval","last","requestTick","cancelTick","setTimerType","tick","performance","now","clearTimeout","cancelAnimationFrame","delta","pause","routes","_ref$actions","newNode","referenceNode","insertAfter","nextSibling","isEmpty","trim","toString","toArray","splitter","split","isBoolean","toBoolean","isString","toNumber","toInt","toFloat","isInt","isFinite","toBytes","base","naturalFileSize","isFunction","toFunctionReference","levels","level","methods","process","patch","revert","fetch","restore","load","createServerAPI","outline","timeout","headers","createAction","method","withCredentials","ondata","parts","header","toServerAPI","isNull","isObject","isAPI","getType","replaceSingleQuotes","conversionTable","number","float","bytes","parse","convertTo","getValueByType","newValue","defaultValue","valueType","newValueType","convertedValue","option","createOption","currentValue","enumerable","createOptions","optionDefinition","createInitialState","items","listUpdateTimeout","itemUpdateTimeout","processingQueue","fromCamels","separator","part","toLowerCase","createOptionAPI","toUpperCase","createOptionActions","createOptionQueries","InteractionMethod","API","DROP","BROWSE","PASTE","NONE","getUniqueId","random","_objectWithoutPropertiesLoose","source","excluded","sourceKeys","_objectWithoutProperties","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","arr2","iter","from","arrayRemove","run","sync","listener","_fire","fireSync","fire","_len2","_key2","onOnce","_cb","copyObjectPropertiesToObject","getOwnPropertyNames","getOwnPropertyDescriptor","PRIVATE","createItemAPI","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","NUMBER","ARRAY","OBJECT","ACTION","SERVER_API","REGEX","filters","applyFilterChain","matchingFilters","initialFilter","current","catch","error","applyFilters","extendDefaultOptions","additionalOptions","defaultOptions","getOptions","opts","disabled","allowSyncAcceptAttribute","allowDrop","allowBrowse","allowPaste","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","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","getActiveItems","Status","EMPTY","ERROR","BUSY","READY","res","canUpdateFileInput","dataTransfer","DataTransfer","File","ITEM_ERROR","ITEM_BUSY","ITEM_READY","isItemInErrorState","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","hasRoomForItem","count","maxFileCount","limit","arrayInsert","insertItem","isBase64DataURI","getFilenameFromURL","pop","getExtensionFromFilename","guesstimateExtension","subtype","leftPad","padding","slice","getDateString","date","Date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getFileFromBlob","blob","extension","lastModifiedDate","_relativePath","getBlobBuilder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","createBlob","arrayBuffer","mimeType","BB","bb","append","getBlob","getBlobFromByteStringWithMimeType","byteString","ab","ArrayBuffer","ia","Uint8Array","charCodeAt","getMimeTypeFromBase64DataURI","dataURI","getBase64DataFromBase64DataURI","getByteStringFromBase64DataURI","atob","getBlobFromBase64DataURI","getFileFromBase64DataURI","getFileNameFromHeader","matches","decodeURI","getFileSizeFromHeader","getTranfserIdFromHeader","getFileInfoFromHeaders","info","rows","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","createFileLoader","fetchFn","complete","progress","getProgress","abort","loadURL","body","code","computable","total","fileinfo","setSource","isGet","sendRequest","onheaders","onprogress","ontimeout","onabort","aborted","xhr","headersReceived","encodeURI","encodeURIComponent","XMLHttpRequest","upload","lengthComputable","loaded","onreadystatechange","readyState","open","unescape","setRequestHeader","responseType","createResponse","createTimeoutResponse","getAllResponseHeaders","hasQS","buildURL","createFetchFunction","apiUrl","statusText","ChunkStatus","QUEUED","COMPLETE","WAITING","processFileChunked","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","deepCloneObject","createItem","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","filenameWithoutExtension","fileExtension","relativePath","handler","itemAPI","freeze","release","archive","getItemIndexByQuery","getItemById","itemId","fetchBlob","getDomainFromURL","protocol","isExternalURL","dynamicLabel","label","isMockItem","listUpdated","optionalPromise","sortItems","compare","getItemByQueryFromState","itemHandler","_ref$success","_ref$failure","failure","ABORT_ALL","DID_SET_FILES","_ref2$value","activeItems","interactionMethod","doUpload","MOVE_ITEM","currentIndex","SORT","ADD_ITEMS","_ref6$success","_ref6$failure","insertLocation","totalItems","isValidFile","validItems","promises","ADD_ITEM","_ref7$index","_ref7$success","_ref7$failure","_ref7$options","_item","mainStatus","main","sub","handleAdd","shouldAdd","loadComplete","REQUEST_PREPARE_OUTPUT","_ref9$failure","COMPLETE_LOAD_ITEM","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","formatFilename","createElement$1","tagName","textNode","nodeValue","createTextNode","polarToCartesian","centerX","centerY","radius","angleInDegrees","angleInRadians","describeArc","startAngle","endAngle","arcSweep","percentageArc","to","spin","align","ringStrokeWidth","ringFrom","ringTo","coordinates","progressIndicator","create$1","icon","isDisabled","write$1","shouldDisable","removeAttribute","fileActionButton","toNaturalFileSize","KB","MB","GB","removeDecimalsWhenZero","decimalCount","toFixed","create$2","fileName","updateFile","updateFileSizeOnError","fileInfo","DID_UPDATE_ITEM_META","toPercentage","create$3","didSetItemLoadProgress","title","didSetItemProcessProgress","didRequestItemProcessing","didAbortItemProcessing","didCompleteItemProcessing","fileStatus","DID_REQUEST_ITEM_PROCESSING","DID_ABORT_ITEM_PROCESSING","DID_UPDATE_ITEM_PROCESS_PROGRESS","DID_UPDATE_ITEM_LOAD_PROGRESS","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","processingCompleteIndicatorView","create$4","buttonFilter","LocalButtons","alignRemoveItemButton","enabledButtons","_map","buttonView","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","create$5","fileWrapper","PANEL_SPRING_PROPS","create$6","section","createSection","scalable","viewConstructor","write$3","topRect","bottomRect","panel","heightCurrent","createDragHelper","itemIds","prevIndex","setIndex","getIndex","getItemIndex","ITEM_TRANSLATE_SPRING","ITEM_SCALE_SPRING","StateMap","create$7","handleClick","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","getItemIndexByPosition","positionInView","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","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","updateLabelValue","caption","clickable","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_REORDER_ITEMS","DID_SORT_ITEMS","getRootNode","text$1","zip","epub","guesstimateMimeType","requestDataTransferItems","links","getLinks","hasFiles","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","getDragNDropObserver","client","ondrop","onenter","ondrag","onexit","allowdrop","addListener","newObserver","createDragNDropObserver","clients","dragenter","dragover","dragleave","handlers","createHandler","elementFromPoint","isEventTarget","elementAtPosition","pageXOffset","pageYOffset","initialTarget","setDropEffect","effect","dropEffect","overDropTarget","allowsTransfer","createHopper","scope","validateItems","catchesDropsOnPage","requiresDropOnElement","_options$filterItems","filterItems","lastState","filteredItems","ondragend","ondragstart","updateHopperState","hopperState","listening","listeners$1","handlePaste","activeEl","activeElement","nodeName","inScope","clipboardData","listen","unlisten","createPaster","create$d","addFilesNotificationTimeout","notificationClearTimeout","filenames","assist","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","hopper","isMultiItem","maxItems","atMaxCapacity","addAction","listItemMargin","calculateListItemMargin","listHeight","calculateListHeight","labelHeight","currentLabelHeight","listMarginTop","listMarginBottom","visual","boundsHeight","history","MAX_BOUNCES","bounces","listAvailableHeight","_listAvailableHeight","cappedHeight","isCappedHeight","panelHeight","_listAvailableHeight2","itemMargin","scrollList","itemList","newItem","removedItem","verticalItemCount","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","pond","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","workerBlob","workerURL","Worker","transferList","renameFile","renamedFile","copyFile","registeredPlugins","createAppPlugin","pluginOutline","views","isOperaMini","operamini","hasPromises","hasBlobSlice","hasCreateObjectURL","hasVisibility","hasTiming","hasCSSSupports","CSS","isIE11","apps","FileStatus","updateOptionTypes","hook","indexToRemove","context","matchedHooks","newHooks","newHook","plugins"],"mappings":"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","file":"js/chunk-348acbb2.79bea833.js","sourcesContent":["/*!\n * vue-filepond v6.0.3\n * A handy FilePond adapter component for Vue\n * \n * Copyright (c) 2020 PQINA\n * https://pqina.nl/filepond\n * \n * Licensed under the MIT license.\n */\n\n(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(\"vueFilePond\", [\"exports\", \"vue\", \"filepond\"], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(exports, require(\"vue\"), require(\"filepond\"));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod.exports, global.Vue, global.FilePond);\n global.vueFilePond = mod.exports;\n }\n})(typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : this, function (_exports, _vue, _filepond) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = _exports.setOptions = void 0;\n _vue = _interopRequireDefault(_vue);\n\n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n // Methods not made available to the component\n var filteredComponentMethods = ['setOptions', 'on', 'off', 'onOnce', 'appendTo', 'insertAfter', 'insertBefore', 'isAttachedTo', 'replaceElement', 'restoreElement', 'destroy']; // Test if is supported on this client\n\n var isSupported = (0, _filepond.supported)(); // Setup initial prop types and update when plugins are added\n\n var getNativeConstructorFromType = function getNativeConstructorFromType(type) {\n return {\n string: String,\n boolean: Boolean,\n array: Array,\n function: Function,\n int: Number,\n serverapi: Object,\n object: Object\n }[type];\n }; // Activated props\n\n\n var props = {}; // Events that need to be mapped to emitters\n\n var events = []; // Props to watch\n\n var watch = {}; // all active instances\n\n var instances = []; // global options\n\n var globalOptions = {};\n\n var setOptions = function setOptions(options) {\n globalOptions = Object.assign(globalOptions, options);\n instances.forEach(function (instance) {\n instance.setOptions(globalOptions);\n });\n };\n\n _exports.setOptions = setOptions;\n\n var _default = function _default() {\n // register plugins in FilePond\n _filepond.registerPlugin.apply(void 0, arguments); // build events and props array\n\n\n events.length = 0;\n\n var _loop = function _loop(prop) {\n // don't add events to the props array\n if (/^on/.test(prop)) {\n events.push(prop);\n return \"continue\";\n } // get property type ( can be either a String or the type defined within FilePond )\n\n\n props[prop] = [String, getNativeConstructorFromType(_filepond.OptionTypes[prop])]; // setup watcher\n\n watch[prop] = function (value) {\n this._pond[prop] = value;\n };\n };\n\n for (var prop in _filepond.OptionTypes) {\n var _ret = _loop(prop);\n\n if (_ret === \"continue\") continue;\n } // create \n\n\n return _vue.default.component('FilePond', {\n name: 'FilePond',\n props: props,\n watch: watch,\n render: function render(h) {\n return h('div', {\n 'class': {\n 'filepond--wrapper': true\n }\n }, [h('input', {\n attrs: {\n id: this.id,\n name: this.name,\n type: 'file',\n 'class': this.className,\n required: this.required,\n multiple: this.allowMultiple,\n accept: this.acceptedFileTypes,\n capture: this.captureMethod\n }\n })]);\n },\n // Will setup FilePond instance when mounted\n mounted: function mounted() {\n var _this = this;\n\n // exit here if not supported\n if (!isSupported) {\n return;\n } // get pond element\n\n\n this._element = this.$el.querySelector('input'); // Map FilePond callback methods to Vue $emitters\n\n var options = events.reduce(function (obj, value) {\n obj[value] = function () {\n _this.$emit('input', _this._pond ? _this._pond.getFiles() : []);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this.$emit.apply(_this, [value.substr(2)].concat(args));\n };\n\n return obj;\n }, {}); // Scoop up attributes that might not have been caught by Vue ( because the props object is extended dynamically )\n\n var attrs = Object.assign({}, this.$attrs); // Create our pond\n\n this._pond = (0, _filepond.create)(this._element, Object.assign({}, globalOptions, options, attrs, this.$options.propsData)); // Copy instance method references to component instance\n\n Object.keys(this._pond).filter(function (key) {\n return !filteredComponentMethods.includes(key);\n }).forEach(function (key) {\n _this[key] = _this._pond[key];\n }); // Add to instances so we can apply global options when used\n\n instances.push(this._pond);\n },\n // Will clean up FilePond instance when unmounted\n destroyed: function destroyed() {\n var _this2 = this;\n\n // reference to detached method\n var detached = this.$options.detached; // no longer attached, clean up\n\n if (!this.$el.offsetParent) {\n detached.call(this);\n return;\n } // if we're still attached it's likely a transition is running, we need to \n // determine the moment when we're no longer attached to the DOM so we can \n // clean up properly\n\n\n var mutationHandler = function mutationHandler(mutations, observer) {\n var removedNodes = (mutations[0] || {}).removedNodes || [];\n var removedNode = removedNodes[0];\n if (!removedNode || !removedNode.contains(_this2.$el)) return;\n observer.disconnect();\n detached.call(_this2);\n }; // start observing parent element for changes to the DOM\n\n\n var observer = new MutationObserver(mutationHandler);\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true\n });\n },\n // called when the component root node has been detached\n detached: function detached() {\n // exit when no pond defined\n if (!this._pond) return; // bye bye pond\n\n this._pond.destroy(); // remove from instances\n\n\n var index = instances.indexOf(this._pond);\n\n if (index >= 0) {\n instances.splice(index, 1);\n } // clear reference\n\n\n this._pond = null;\n }\n });\n };\n\n _exports.default = _default;\n});\n\n\n","/*!\n * FilePondPluginImagePreview 4.6.8\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 ? (module.exports = factory())\n : typeof define === 'function' && define.amd\n ? define(factory)\n : ((global = global || self),\n (global.FilePondPluginImagePreview = factory()));\n})(this, function() {\n 'use strict';\n\n // test if file is of type image and can be viewed in canvas\n var isPreviewableImage = function isPreviewableImage(file) {\n return /^image/.test(file.type);\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' &&\n Symbol.for &&\n 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 === 'function') {\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(\n gen,\n resolve,\n reject,\n _next,\n _throw,\n 'next',\n value\n );\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 _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(\n 'Super expression must either be null or a function'\n );\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 (\n right != null &&\n typeof Symbol !== 'undefined' &&\n right[Symbol.hasInstance]\n ) {\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(\n \"this hasn't been initialised - super() hasn't been called\"\n );\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(\n 'Class \"' + name + '\" cannot be referenced in computed property keys.'\n );\n }\n\n var _temporalUndefined = {};\n\n function _slicedToArray(arr, i) {\n return (\n _arrayWithHoles(arr) ||\n _iterableToArrayLimit(arr, i) ||\n _nonIterableRest()\n );\n }\n\n function _slicedToArrayLoose(arr, i) {\n return (\n _arrayWithHoles(arr) ||\n _iterableToArrayLimitLoose(arr, i) ||\n _nonIterableRest()\n );\n }\n\n function _toArray(arr) {\n return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest();\n }\n\n function _toConsumableArray(arr) {\n return (\n _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread()\n );\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++)\n 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 (\n var _i = arr[Symbol.iterator](), _s;\n !(_n = (_s = _i.next()).done);\n _n = true\n ) {\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 (\n var _iterator = arr[Symbol.iterator](), _step;\n !(_step = _iterator.next()).done;\n\n ) {\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\n ? descriptor.initializer.call(context)\n : void 0\n });\n }\n\n function _applyDecoratedDescriptor(\n target,\n property,\n decorators,\n descriptor,\n context\n ) {\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 if (!privateMap.has(receiver)) {\n throw new TypeError('attempted to get private field on non-instance');\n }\n\n var descriptor = privateMap.get(receiver);\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 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 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 _classStaticPrivateFieldSpecGet(\n receiver,\n classConstructor,\n descriptor\n ) {\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(\n receiver,\n classConstructor,\n descriptor,\n value\n ) {\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(\n element,\n placements\n );\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 (\n var decorators = element.decorators, i = decorators.length - 1;\n i >= 0;\n i--\n ) {\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(\n elementObject,\n 'finisher',\n 'An element descriptor'\n );\n this.disallowProperty(\n elementObject,\n 'extras',\n 'An element descriptor'\n );\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 (\n placement !== 'static' &&\n placement !== 'prototype' &&\n placement !== 'own'\n ) {\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(\n elementObject,\n 'elements',\n 'An element descriptor'\n );\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(\n elementObject,\n 'initializer',\n 'A method descriptor'\n );\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(\n objectType + \" can't have a .\" + name + ' property.'\n );\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\n ? 'static'\n : def.kind === 'field'\n ? 'own'\n : '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 (\n element.kind === 'method' &&\n (other = newElements.find(isSameElement))\n ) {\n if (\n _isDataDescriptor(element.descriptor) ||\n _isDataDescriptor(other.descriptor)\n ) {\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 (\n desc !== undefined &&\n !(desc.value === undefined && desc.writable === undefined)\n );\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 vectorMultiply = function vectorMultiply(v, amount) {\n return createVector(v.x * amount, v.y * amount);\n };\n\n var vectorAdd = function vectorAdd(a, b) {\n return createVector(a.x + b.x, a.y + b.y);\n };\n\n var vectorNormalize = function vectorNormalize(v) {\n var l = Math.sqrt(v.x * v.x + v.y * v.y);\n if (l === 0) {\n return {\n x: 0,\n y: 0\n };\n }\n return createVector(v.x / l, v.y / l);\n };\n\n var vectorRotate = function vectorRotate(v, radians, origin) {\n var cos = Math.cos(radians);\n var sin = Math.sin(radians);\n var t = createVector(v.x - origin.x, v.y - origin.y);\n return createVector(\n origin.x + cos * t.x - sin * t.y,\n origin.y + sin * t.x + cos * t.y\n );\n };\n\n var createVector = function createVector() {\n var x =\n arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var y =\n arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n return { x: x, y: y };\n };\n\n var getMarkupValue = function getMarkupValue(value, size) {\n var scalar =\n arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n var axis = arguments.length > 3 ? arguments[3] : undefined;\n if (typeof value === 'string') {\n return parseFloat(value) * scalar;\n }\n if (typeof value === 'number') {\n return value * (axis ? size[axis] : Math.min(size.width, size.height));\n }\n return;\n };\n\n var getMarkupStyles = function getMarkupStyles(markup, size, scale) {\n var lineStyle = markup.borderStyle || markup.lineStyle || 'solid';\n var fill = markup.backgroundColor || markup.fontColor || 'transparent';\n var stroke = markup.borderColor || markup.lineColor || 'transparent';\n var strokeWidth = getMarkupValue(\n markup.borderWidth || markup.lineWidth,\n size,\n scale\n );\n var lineCap = markup.lineCap || 'round';\n var lineJoin = markup.lineJoin || 'round';\n var dashes =\n typeof lineStyle === 'string'\n ? ''\n : lineStyle\n .map(function(v) {\n return getMarkupValue(v, size, scale);\n })\n .join(',');\n var opacity = markup.opacity || 1;\n return {\n 'stroke-linecap': lineCap,\n 'stroke-linejoin': lineJoin,\n 'stroke-width': strokeWidth || 0,\n 'stroke-dasharray': dashes,\n stroke: stroke,\n fill: fill,\n opacity: opacity\n };\n };\n\n var isDefined = function isDefined(value) {\n return value != null;\n };\n\n var getMarkupRect = function getMarkupRect(rect, size) {\n var scalar =\n arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n\n var left =\n getMarkupValue(rect.x, size, scalar, 'width') ||\n getMarkupValue(rect.left, size, scalar, 'width');\n var top =\n getMarkupValue(rect.y, size, scalar, 'height') ||\n getMarkupValue(rect.top, size, scalar, 'height');\n var width = getMarkupValue(rect.width, size, scalar, 'width');\n var height = getMarkupValue(rect.height, size, scalar, 'height');\n var right = getMarkupValue(rect.right, size, scalar, 'width');\n var bottom = getMarkupValue(rect.bottom, size, scalar, 'height');\n\n if (!isDefined(top)) {\n if (isDefined(height) && isDefined(bottom)) {\n top = size.height - height - bottom;\n } else {\n top = bottom;\n }\n }\n\n if (!isDefined(left)) {\n if (isDefined(width) && isDefined(right)) {\n left = size.width - width - right;\n } else {\n left = right;\n }\n }\n\n if (!isDefined(width)) {\n if (isDefined(left) && isDefined(right)) {\n width = size.width - left - right;\n } else {\n width = 0;\n }\n }\n\n if (!isDefined(height)) {\n if (isDefined(top) && isDefined(bottom)) {\n height = size.height - top - bottom;\n } else {\n height = 0;\n }\n }\n\n return {\n x: left || 0,\n y: top || 0,\n width: width || 0,\n height: height || 0\n };\n };\n\n var pointsToPathShape = function pointsToPathShape(points) {\n return points\n .map(function(point, index) {\n return ''\n .concat(index === 0 ? 'M' : 'L', ' ')\n .concat(point.x, ' ')\n .concat(point.y);\n })\n .join(' ');\n };\n\n var setAttributes = function setAttributes(element, attr) {\n return Object.keys(attr).forEach(function(key) {\n return element.setAttribute(key, attr[key]);\n });\n };\n\n var ns = 'http://www.w3.org/2000/svg';\n var svg = function svg(tag, attr) {\n var element = document.createElementNS(ns, tag);\n if (attr) {\n setAttributes(element, attr);\n }\n return element;\n };\n\n var updateRect = function updateRect(element) {\n return setAttributes(\n element,\n Object.assign({}, element.rect, element.styles)\n );\n };\n\n var updateEllipse = function updateEllipse(element) {\n var cx = element.rect.x + element.rect.width * 0.5;\n var cy = element.rect.y + element.rect.height * 0.5;\n var rx = element.rect.width * 0.5;\n var ry = element.rect.height * 0.5;\n return setAttributes(\n element,\n Object.assign(\n {\n cx: cx,\n cy: cy,\n rx: rx,\n ry: ry\n },\n element.styles\n )\n );\n };\n\n var IMAGE_FIT_STYLE = {\n contain: 'xMidYMid meet',\n cover: 'xMidYMid slice'\n };\n\n var updateImage = function updateImage(element, markup) {\n setAttributes(\n element,\n Object.assign({}, element.rect, element.styles, {\n preserveAspectRatio: IMAGE_FIT_STYLE[markup.fit] || 'none'\n })\n );\n };\n\n var TEXT_ANCHOR = {\n left: 'start',\n center: 'middle',\n right: 'end'\n };\n\n var updateText = function updateText(element, markup, size, scale) {\n var fontSize = getMarkupValue(markup.fontSize, size, scale);\n var fontFamily = markup.fontFamily || 'sans-serif';\n var fontWeight = markup.fontWeight || 'normal';\n var textAlign = TEXT_ANCHOR[markup.textAlign] || 'start';\n\n setAttributes(\n element,\n Object.assign({}, element.rect, element.styles, {\n 'stroke-width': 0,\n 'font-weight': fontWeight,\n 'font-size': fontSize,\n 'font-family': fontFamily,\n 'text-anchor': textAlign\n })\n );\n\n // update text\n if (element.text !== markup.text) {\n element.text = markup.text;\n element.textContent = markup.text.length ? markup.text : ' ';\n }\n };\n\n var updateLine = function updateLine(element, markup, size, scale) {\n setAttributes(\n element,\n Object.assign({}, element.rect, element.styles, {\n fill: 'none'\n })\n );\n\n var line = element.childNodes[0];\n var begin = element.childNodes[1];\n var end = element.childNodes[2];\n\n var origin = element.rect;\n\n var target = {\n x: element.rect.x + element.rect.width,\n y: element.rect.y + element.rect.height\n };\n\n setAttributes(line, {\n x1: origin.x,\n y1: origin.y,\n x2: target.x,\n y2: target.y\n });\n\n if (!markup.lineDecoration) return;\n\n begin.style.display = 'none';\n end.style.display = 'none';\n\n var v = vectorNormalize({\n x: target.x - origin.x,\n y: target.y - origin.y\n });\n\n var l = getMarkupValue(0.05, size, scale);\n\n if (markup.lineDecoration.indexOf('arrow-begin') !== -1) {\n var arrowBeginRotationPoint = vectorMultiply(v, l);\n var arrowBeginCenter = vectorAdd(origin, arrowBeginRotationPoint);\n var arrowBeginA = vectorRotate(origin, 2, arrowBeginCenter);\n var arrowBeginB = vectorRotate(origin, -2, arrowBeginCenter);\n\n setAttributes(begin, {\n style: 'display:block;',\n d: 'M'\n .concat(arrowBeginA.x, ',')\n .concat(arrowBeginA.y, ' L')\n .concat(origin.x, ',')\n .concat(origin.y, ' L')\n .concat(arrowBeginB.x, ',')\n .concat(arrowBeginB.y)\n });\n }\n\n if (markup.lineDecoration.indexOf('arrow-end') !== -1) {\n var arrowEndRotationPoint = vectorMultiply(v, -l);\n var arrowEndCenter = vectorAdd(target, arrowEndRotationPoint);\n var arrowEndA = vectorRotate(target, 2, arrowEndCenter);\n var arrowEndB = vectorRotate(target, -2, arrowEndCenter);\n\n setAttributes(end, {\n style: 'display:block;',\n d: 'M'\n .concat(arrowEndA.x, ',')\n .concat(arrowEndA.y, ' L')\n .concat(target.x, ',')\n .concat(target.y, ' L')\n .concat(arrowEndB.x, ',')\n .concat(arrowEndB.y)\n });\n }\n };\n\n var updatePath = function updatePath(element, markup, size, scale) {\n setAttributes(\n element,\n Object.assign({}, element.styles, {\n fill: 'none',\n d: pointsToPathShape(\n markup.points.map(function(point) {\n return {\n x: getMarkupValue(point.x, size, scale, 'width'),\n y: getMarkupValue(point.y, size, scale, 'height')\n };\n })\n )\n })\n );\n };\n\n var createShape = function createShape(node) {\n return function(markup) {\n return svg(node, { id: markup.id });\n };\n };\n\n var createImage = function createImage(markup) {\n var shape = svg('image', {\n id: markup.id,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n opacity: '0'\n });\n\n shape.onload = function() {\n shape.setAttribute('opacity', markup.opacity || 1);\n };\n shape.setAttributeNS(\n 'http://www.w3.org/1999/xlink',\n 'xlink:href',\n markup.src\n );\n return shape;\n };\n\n var createLine = function createLine(markup) {\n var shape = svg('g', {\n id: markup.id,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round'\n });\n\n var line = svg('line');\n shape.appendChild(line);\n\n var begin = svg('path');\n shape.appendChild(begin);\n\n var end = svg('path');\n shape.appendChild(end);\n\n return shape;\n };\n\n var CREATE_TYPE_ROUTES = {\n image: createImage,\n rect: createShape('rect'),\n ellipse: createShape('ellipse'),\n text: createShape('text'),\n path: createShape('path'),\n line: createLine\n };\n\n var UPDATE_TYPE_ROUTES = {\n rect: updateRect,\n ellipse: updateEllipse,\n image: updateImage,\n text: updateText,\n path: updatePath,\n line: updateLine\n };\n\n var createMarkupByType = function createMarkupByType(type, markup) {\n return CREATE_TYPE_ROUTES[type](markup);\n };\n\n var updateMarkupByType = function updateMarkupByType(\n element,\n type,\n markup,\n size,\n scale\n ) {\n if (type !== 'path') {\n element.rect = getMarkupRect(markup, size, scale);\n }\n element.styles = getMarkupStyles(markup, size, scale);\n UPDATE_TYPE_ROUTES[type](element, markup, size, scale);\n };\n\n var MARKUP_RECT = [\n 'x',\n 'y',\n 'left',\n 'top',\n 'right',\n 'bottom',\n 'width',\n 'height'\n ];\n\n var toOptionalFraction = function toOptionalFraction(value) {\n return typeof value === 'string' && /%/.test(value)\n ? parseFloat(value) / 100\n : value;\n };\n\n // adds default markup properties, clones markup\n var prepareMarkup = function prepareMarkup(markup) {\n var _markup = _slicedToArray(markup, 2),\n type = _markup[0],\n props = _markup[1];\n\n var rect = props.points\n ? {}\n : MARKUP_RECT.reduce(function(prev, curr) {\n prev[curr] = toOptionalFraction(props[curr]);\n return prev;\n }, {});\n\n return [\n type,\n Object.assign(\n {\n zIndex: 0\n },\n props,\n rect\n )\n ];\n };\n\n var sortMarkupByZIndex = function sortMarkupByZIndex(a, b) {\n if (a[1].zIndex > b[1].zIndex) {\n return 1;\n }\n if (a[1].zIndex < b[1].zIndex) {\n return -1;\n }\n return 0;\n };\n\n var createMarkupView = function createMarkupView(_) {\n return _.utils.createView({\n name: 'image-preview-markup',\n tag: 'svg',\n ignoreRect: true,\n mixins: {\n apis: ['width', 'height', 'crop', 'markup', 'resize', 'dirty']\n },\n\n write: function write(_ref) {\n var root = _ref.root,\n props = _ref.props;\n\n if (!props.dirty) return;\n var crop = props.crop,\n resize = props.resize,\n markup = props.markup;\n\n var viewWidth = props.width;\n var viewHeight = props.height;\n\n var cropWidth = crop.width;\n var cropHeight = crop.height;\n\n if (resize) {\n var _size = resize.size;\n\n var outputWidth = _size && _size.width;\n var outputHeight = _size && _size.height;\n var outputFit = resize.mode;\n var outputUpscale = resize.upscale;\n\n if (outputWidth && !outputHeight) outputHeight = outputWidth;\n if (outputHeight && !outputWidth) outputWidth = outputHeight;\n\n var shouldUpscale =\n cropWidth < outputWidth && cropHeight < outputHeight;\n\n if (!shouldUpscale || (shouldUpscale && outputUpscale)) {\n var scalarWidth = outputWidth / cropWidth;\n var scalarHeight = outputHeight / cropHeight;\n\n if (outputFit === 'force') {\n cropWidth = outputWidth;\n cropHeight = outputHeight;\n } else {\n var scalar;\n if (outputFit === 'cover') {\n scalar = Math.max(scalarWidth, scalarHeight);\n } else if (outputFit === 'contain') {\n scalar = Math.min(scalarWidth, scalarHeight);\n }\n cropWidth = cropWidth * scalar;\n cropHeight = cropHeight * scalar;\n }\n }\n }\n\n var size = {\n width: viewWidth,\n height: viewHeight\n };\n\n root.element.setAttribute('width', size.width);\n root.element.setAttribute('height', size.height);\n\n var scale = Math.min(viewWidth / cropWidth, viewHeight / cropHeight);\n\n // clear\n root.element.innerHTML = '';\n\n // get filter\n var markupFilter = root.query('GET_IMAGE_PREVIEW_MARKUP_FILTER');\n\n // draw new\n markup\n .filter(markupFilter)\n .map(prepareMarkup)\n .sort(sortMarkupByZIndex)\n .forEach(function(markup) {\n var _markup = _slicedToArray(markup, 2),\n type = _markup[0],\n settings = _markup[1];\n\n // create\n var element = createMarkupByType(type, settings);\n\n // update\n updateMarkupByType(element, type, settings, size, scale);\n\n // add\n root.element.appendChild(element);\n });\n }\n });\n };\n\n var createVector$1 = function createVector(x, y) {\n return { x: x, y: y };\n };\n\n var vectorDot = function vectorDot(a, b) {\n return a.x * b.x + a.y * b.y;\n };\n\n var vectorSubtract = function vectorSubtract(a, b) {\n return createVector$1(a.x - b.x, a.y - b.y);\n };\n\n var vectorDistanceSquared = function vectorDistanceSquared(a, b) {\n return vectorDot(vectorSubtract(a, b), vectorSubtract(a, b));\n };\n\n var vectorDistance = function vectorDistance(a, b) {\n return Math.sqrt(vectorDistanceSquared(a, b));\n };\n\n var getOffsetPointOnEdge = function getOffsetPointOnEdge(length, rotation) {\n var a = length;\n\n var A = 1.5707963267948966;\n var B = rotation;\n var C = 1.5707963267948966 - rotation;\n\n var sinA = Math.sin(A);\n var sinB = Math.sin(B);\n var sinC = Math.sin(C);\n var cosC = Math.cos(C);\n var ratio = a / sinA;\n var b = ratio * sinB;\n var c = ratio * sinC;\n\n return createVector$1(cosC * b, cosC * c);\n };\n\n var getRotatedRectSize = function getRotatedRectSize(rect, rotation) {\n var w = rect.width;\n var h = rect.height;\n\n var hor = getOffsetPointOnEdge(w, rotation);\n var ver = getOffsetPointOnEdge(h, rotation);\n\n var tl = createVector$1(rect.x + Math.abs(hor.x), rect.y - Math.abs(hor.y));\n\n var tr = createVector$1(\n rect.x + rect.width + Math.abs(ver.y),\n rect.y + Math.abs(ver.x)\n );\n\n var bl = createVector$1(\n rect.x - Math.abs(ver.y),\n rect.y + rect.height - Math.abs(ver.x)\n );\n\n return {\n width: vectorDistance(tl, tr),\n height: vectorDistance(tl, bl)\n };\n };\n\n var calculateCanvasSize = function calculateCanvasSize(\n image,\n canvasAspectRatio\n ) {\n var zoom =\n arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n\n var imageAspectRatio = image.height / image.width;\n\n // determine actual pixels on x and y axis\n var canvasWidth = 1;\n var canvasHeight = canvasAspectRatio;\n var imgWidth = 1;\n var imgHeight = imageAspectRatio;\n if (imgHeight > canvasHeight) {\n imgHeight = canvasHeight;\n imgWidth = imgHeight / imageAspectRatio;\n }\n\n var scalar = Math.max(canvasWidth / imgWidth, canvasHeight / imgHeight);\n var width = image.width / (zoom * scalar * imgWidth);\n var height = width * canvasAspectRatio;\n\n return {\n width: width,\n height: height\n };\n };\n\n var getImageRectZoomFactor = function getImageRectZoomFactor(\n imageRect,\n cropRect,\n rotation,\n center\n ) {\n // calculate available space round image center position\n var cx = center.x > 0.5 ? 1 - center.x : center.x;\n var cy = center.y > 0.5 ? 1 - center.y : center.y;\n var imageWidth = cx * 2 * imageRect.width;\n var imageHeight = cy * 2 * imageRect.height;\n\n // calculate rotated crop rectangle size\n var rotatedCropSize = getRotatedRectSize(cropRect, rotation);\n\n // calculate scalar required to fit image\n return Math.max(\n rotatedCropSize.width / imageWidth,\n rotatedCropSize.height / imageHeight\n );\n };\n\n var getCenteredCropRect = function getCenteredCropRect(\n container,\n aspectRatio\n ) {\n var width = container.width;\n var height = width * aspectRatio;\n if (height > container.height) {\n height = container.height;\n width = height / aspectRatio;\n }\n var x = (container.width - width) * 0.5;\n var y = (container.height - height) * 0.5;\n\n return {\n x: x,\n y: y,\n width: width,\n height: height\n };\n };\n\n var getCurrentCropSize = function getCurrentCropSize(imageSize) {\n var crop =\n arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var zoom = crop.zoom,\n rotation = crop.rotation,\n center = crop.center,\n aspectRatio = crop.aspectRatio;\n\n if (!aspectRatio) aspectRatio = imageSize.height / imageSize.width;\n\n var canvasSize = calculateCanvasSize(imageSize, aspectRatio, zoom);\n\n var canvasCenter = {\n x: canvasSize.width * 0.5,\n y: canvasSize.height * 0.5\n };\n\n var stage = {\n x: 0,\n y: 0,\n width: canvasSize.width,\n height: canvasSize.height,\n center: canvasCenter\n };\n\n var shouldLimit = typeof crop.scaleToFit === 'undefined' || crop.scaleToFit;\n\n var stageZoomFactor = getImageRectZoomFactor(\n imageSize,\n getCenteredCropRect(stage, aspectRatio),\n rotation,\n shouldLimit ? center : { x: 0.5, y: 0.5 }\n );\n\n var scale = zoom * stageZoomFactor;\n\n // start drawing\n return {\n widthFloat: canvasSize.width / scale,\n heightFloat: canvasSize.height / scale,\n width: Math.round(canvasSize.width / scale),\n height: Math.round(canvasSize.height / scale)\n };\n };\n\n var IMAGE_SCALE_SPRING_PROPS = {\n type: 'spring',\n stiffness: 0.5,\n damping: 0.45,\n mass: 10\n };\n\n // does horizontal and vertical flipping\n var createBitmapView = function createBitmapView(_) {\n return _.utils.createView({\n name: 'image-bitmap',\n ignoreRect: true,\n mixins: { styles: ['scaleX', 'scaleY'] },\n create: function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n root.appendChild(props.image);\n }\n });\n };\n\n // shifts and rotates image\n var createImageCanvasWrapper = function createImageCanvasWrapper(_) {\n return _.utils.createView({\n name: 'image-canvas-wrapper',\n tag: 'div',\n ignoreRect: true,\n mixins: {\n apis: ['crop', 'width', 'height'],\n\n styles: [\n 'originX',\n 'originY',\n 'translateX',\n 'translateY',\n 'scaleX',\n 'scaleY',\n 'rotateZ'\n ],\n\n animations: {\n originX: IMAGE_SCALE_SPRING_PROPS,\n originY: IMAGE_SCALE_SPRING_PROPS,\n scaleX: IMAGE_SCALE_SPRING_PROPS,\n scaleY: IMAGE_SCALE_SPRING_PROPS,\n translateX: IMAGE_SCALE_SPRING_PROPS,\n translateY: IMAGE_SCALE_SPRING_PROPS,\n rotateZ: IMAGE_SCALE_SPRING_PROPS\n }\n },\n\n create: function create(_ref2) {\n var root = _ref2.root,\n props = _ref2.props;\n props.width = props.image.width;\n props.height = props.image.height;\n root.ref.bitmap = root.appendChildView(\n root.createChildView(createBitmapView(_), { image: props.image })\n );\n },\n write: function write(_ref3) {\n var root = _ref3.root,\n props = _ref3.props;\n var flip = props.crop.flip;\n var bitmap = root.ref.bitmap;\n bitmap.scaleX = flip.horizontal ? -1 : 1;\n bitmap.scaleY = flip.vertical ? -1 : 1;\n }\n });\n };\n\n // clips canvas to correct aspect ratio\n var createClipView = function createClipView(_) {\n return _.utils.createView({\n name: 'image-clip',\n tag: 'div',\n ignoreRect: true,\n mixins: {\n apis: [\n 'crop',\n 'markup',\n 'resize',\n 'width',\n 'height',\n 'dirty',\n 'background'\n ],\n\n styles: ['width', 'height', 'opacity'],\n animations: {\n opacity: { type: 'tween', duration: 250 }\n }\n },\n\n didWriteView: function didWriteView(_ref4) {\n var root = _ref4.root,\n props = _ref4.props;\n if (!props.background) return;\n root.element.style.backgroundColor = props.background;\n },\n create: function create(_ref5) {\n var root = _ref5.root,\n props = _ref5.props;\n\n root.ref.image = root.appendChildView(\n root.createChildView(\n createImageCanvasWrapper(_),\n Object.assign({}, props)\n )\n );\n\n root.ref.createMarkup = function() {\n if (root.ref.markup) return;\n root.ref.markup = root.appendChildView(\n root.createChildView(createMarkupView(_), Object.assign({}, props))\n );\n };\n\n root.ref.destroyMarkup = function() {\n if (!root.ref.markup) return;\n root.removeChildView(root.ref.markup);\n root.ref.markup = null;\n };\n\n // set up transparency grid\n var transparencyIndicator = root.query(\n 'GET_IMAGE_PREVIEW_TRANSPARENCY_INDICATOR'\n );\n if (transparencyIndicator === null) return;\n\n // grid pattern\n if (transparencyIndicator === 'grid') {\n root.element.dataset.transparencyIndicator = transparencyIndicator;\n }\n // basic color\n else {\n root.element.dataset.transparencyIndicator = 'color';\n }\n },\n write: function write(_ref6) {\n var root = _ref6.root,\n props = _ref6.props,\n shouldOptimize = _ref6.shouldOptimize;\n var crop = props.crop,\n markup = props.markup,\n resize = props.resize,\n dirty = props.dirty,\n width = props.width,\n height = props.height;\n\n root.ref.image.crop = crop;\n\n var stage = {\n x: 0,\n y: 0,\n width: width,\n height: height,\n center: {\n x: width * 0.5,\n y: height * 0.5\n }\n };\n\n var image = {\n width: root.ref.image.width,\n height: root.ref.image.height\n };\n\n var origin = {\n x: crop.center.x * image.width,\n y: crop.center.y * image.height\n };\n\n var translation = {\n x: stage.center.x - image.width * crop.center.x,\n y: stage.center.y - image.height * crop.center.y\n };\n\n var rotation = Math.PI * 2 + (crop.rotation % (Math.PI * 2));\n\n var cropAspectRatio = crop.aspectRatio || image.height / image.width;\n\n var shouldLimit =\n typeof crop.scaleToFit === 'undefined' || crop.scaleToFit;\n\n var stageZoomFactor = getImageRectZoomFactor(\n image,\n getCenteredCropRect(stage, cropAspectRatio),\n\n rotation,\n shouldLimit ? crop.center : { x: 0.5, y: 0.5 }\n );\n\n var scale = crop.zoom * stageZoomFactor;\n\n // update markup view\n if (markup && markup.length) {\n root.ref.createMarkup();\n root.ref.markup.width = width;\n root.ref.markup.height = height;\n root.ref.markup.resize = resize;\n root.ref.markup.dirty = dirty;\n root.ref.markup.markup = markup;\n root.ref.markup.crop = getCurrentCropSize(image, crop);\n } else if (root.ref.markup) {\n root.ref.destroyMarkup();\n }\n\n // update image view\n var imageView = root.ref.image;\n\n // don't update clip layout\n if (shouldOptimize) {\n imageView.originX = null;\n imageView.originY = null;\n imageView.translateX = null;\n imageView.translateY = null;\n imageView.rotateZ = null;\n imageView.scaleX = null;\n imageView.scaleY = null;\n return;\n }\n\n imageView.originX = origin.x;\n imageView.originY = origin.y;\n imageView.translateX = translation.x;\n imageView.translateY = translation.y;\n imageView.rotateZ = rotation;\n imageView.scaleX = scale;\n imageView.scaleY = scale;\n }\n });\n };\n\n var createImageView = function createImageView(_) {\n return _.utils.createView({\n name: 'image-preview',\n tag: 'div',\n ignoreRect: true,\n mixins: {\n apis: ['image', 'crop', 'markup', 'resize', 'dirty', 'background'],\n\n styles: ['translateY', 'scaleX', 'scaleY', 'opacity'],\n\n animations: {\n scaleX: IMAGE_SCALE_SPRING_PROPS,\n scaleY: IMAGE_SCALE_SPRING_PROPS,\n translateY: IMAGE_SCALE_SPRING_PROPS,\n opacity: { type: 'tween', duration: 400 }\n }\n },\n\n create: function create(_ref7) {\n var root = _ref7.root,\n props = _ref7.props;\n root.ref.clip = root.appendChildView(\n root.createChildView(createClipView(_), {\n id: props.id,\n image: props.image,\n crop: props.crop,\n markup: props.markup,\n resize: props.resize,\n dirty: props.dirty,\n background: props.background\n })\n );\n },\n write: function write(_ref8) {\n var root = _ref8.root,\n props = _ref8.props,\n shouldOptimize = _ref8.shouldOptimize;\n var clip = root.ref.clip;\n var image = props.image,\n crop = props.crop,\n markup = props.markup,\n resize = props.resize,\n dirty = props.dirty;\n\n clip.crop = crop;\n clip.markup = markup;\n clip.resize = resize;\n clip.dirty = dirty;\n\n // don't update clip layout\n clip.opacity = shouldOptimize ? 0 : 1;\n\n // don't re-render if optimizing or hidden (width will be zero resulting in weird animations)\n if (shouldOptimize || root.rect.element.hidden) return;\n\n // calculate scaled preview image size\n var imageAspectRatio = image.height / image.width;\n var aspectRatio = crop.aspectRatio || imageAspectRatio;\n\n // calculate container size\n var containerWidth = root.rect.inner.width;\n var containerHeight = root.rect.inner.height;\n\n var fixedPreviewHeight = root.query('GET_IMAGE_PREVIEW_HEIGHT');\n var minPreviewHeight = root.query('GET_IMAGE_PREVIEW_MIN_HEIGHT');\n var maxPreviewHeight = root.query('GET_IMAGE_PREVIEW_MAX_HEIGHT');\n\n var panelAspectRatio = root.query('GET_PANEL_ASPECT_RATIO');\n var allowMultiple = root.query('GET_ALLOW_MULTIPLE');\n\n if (panelAspectRatio && !allowMultiple) {\n fixedPreviewHeight = containerWidth * panelAspectRatio;\n aspectRatio = panelAspectRatio;\n }\n\n // determine clip width and height\n var clipHeight =\n fixedPreviewHeight !== null\n ? fixedPreviewHeight\n : Math.max(\n minPreviewHeight,\n Math.min(containerWidth * aspectRatio, maxPreviewHeight)\n );\n\n var clipWidth = clipHeight / aspectRatio;\n if (clipWidth > containerWidth) {\n clipWidth = containerWidth;\n clipHeight = clipWidth * aspectRatio;\n }\n\n if (clipHeight > containerHeight) {\n clipHeight = containerHeight;\n clipWidth = containerHeight / aspectRatio;\n }\n\n clip.width = clipWidth;\n clip.height = clipHeight;\n }\n });\n };\n\n var SVG_MASK =\n '\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n';\n\n var SVGMaskUniqueId = 0;\n\n var createImageOverlayView = function createImageOverlayView(fpAPI) {\n return fpAPI.utils.createView({\n name: 'image-preview-overlay',\n tag: 'div',\n ignoreRect: true,\n create: function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n var mask = SVG_MASK;\n if (document.querySelector('base')) {\n var url = window.location.href.replace(window.location.hash, '');\n mask = mask.replace(/url\\(\\#/g, 'url(' + url + '#');\n }\n\n SVGMaskUniqueId++;\n root.element.classList.add(\n 'filepond--image-preview-overlay-'.concat(props.status)\n );\n\n root.element.innerHTML = mask.replace(/__UID__/g, SVGMaskUniqueId);\n },\n mixins: {\n styles: ['opacity'],\n animations: {\n opacity: { type: 'spring', mass: 25 }\n }\n }\n });\n };\n\n /**\n * Bitmap Worker\n */\n var BitmapWorker = function BitmapWorker() {\n self.onmessage = function(e) {\n createImageBitmap(e.data.message.file).then(function(bitmap) {\n self.postMessage({ id: e.data.id, message: bitmap }, [bitmap]);\n });\n };\n };\n\n /**\n * ColorMatrix Worker\n */\n var ColorMatrixWorker = function ColorMatrixWorker() {\n self.onmessage = function(e) {\n var imageData = e.data.message.imageData;\n var matrix = e.data.message.colorMatrix;\n\n var data = imageData.data;\n var l = data.length;\n\n var m11 = matrix[0];\n var m12 = matrix[1];\n var m13 = matrix[2];\n var m14 = matrix[3];\n var m15 = matrix[4];\n\n var m21 = matrix[5];\n var m22 = matrix[6];\n var m23 = matrix[7];\n var m24 = matrix[8];\n var m25 = matrix[9];\n\n var m31 = matrix[10];\n var m32 = matrix[11];\n var m33 = matrix[12];\n var m34 = matrix[13];\n var m35 = matrix[14];\n\n var m41 = matrix[15];\n var m42 = matrix[16];\n var m43 = matrix[17];\n var m44 = matrix[18];\n var m45 = matrix[19];\n\n var index = 0,\n r = 0.0,\n g = 0.0,\n b = 0.0,\n a = 0.0;\n\n for (; index < l; index += 4) {\n r = data[index] / 255;\n g = data[index + 1] / 255;\n b = data[index + 2] / 255;\n a = data[index + 3] / 255;\n data[index] = Math.max(\n 0,\n Math.min((r * m11 + g * m12 + b * m13 + a * m14 + m15) * 255, 255)\n );\n data[index + 1] = Math.max(\n 0,\n Math.min((r * m21 + g * m22 + b * m23 + a * m24 + m25) * 255, 255)\n );\n data[index + 2] = Math.max(\n 0,\n Math.min((r * m31 + g * m32 + b * m33 + a * m34 + m35) * 255, 255)\n );\n data[index + 3] = Math.max(\n 0,\n Math.min((r * m41 + g * m42 + b * m43 + a * m44 + m45) * 255, 255)\n );\n }\n\n self.postMessage({ id: e.data.id, message: imageData }, [\n imageData.data.buffer\n ]);\n };\n };\n\n var getImageSize = function getImageSize(url, cb) {\n var image = new Image();\n image.onload = function() {\n var width = image.naturalWidth;\n var height = image.naturalHeight;\n image = null;\n cb(width, height);\n };\n image.src = url;\n };\n\n var transforms = {\n 1: function _() {\n return [1, 0, 0, 1, 0, 0];\n },\n 2: function _(width) {\n return [-1, 0, 0, 1, width, 0];\n },\n 3: function _(width, height) {\n return [-1, 0, 0, -1, width, height];\n },\n 4: function _(width, height) {\n return [1, 0, 0, -1, 0, height];\n },\n 5: function _() {\n return [0, 1, 1, 0, 0, 0];\n },\n 6: function _(width, height) {\n return [0, 1, -1, 0, height, 0];\n },\n 7: function _(width, height) {\n return [0, -1, -1, 0, height, width];\n },\n 8: function _(width) {\n return [0, -1, 1, 0, 0, width];\n }\n };\n\n var fixImageOrientation = function fixImageOrientation(\n ctx,\n width,\n height,\n orientation\n ) {\n // no orientation supplied\n if (orientation === -1) {\n return;\n }\n\n ctx.transform.apply(ctx, transforms[orientation](width, height));\n };\n\n // draws the preview image to canvas\n var createPreviewImage = function createPreviewImage(\n data,\n width,\n height,\n orientation\n ) {\n // can't draw on half pixels\n width = Math.round(width);\n height = Math.round(height);\n\n // draw image\n var canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n var ctx = canvas.getContext('2d');\n\n // if is rotated incorrectly swap width and height\n if (orientation >= 5 && orientation <= 8) {\n var _ref = [height, width];\n width = _ref[0];\n height = _ref[1];\n }\n\n // correct image orientation\n fixImageOrientation(ctx, width, height, orientation);\n\n // draw the image\n ctx.drawImage(data, 0, 0, width, height);\n\n return canvas;\n };\n\n var isBitmap = function isBitmap(file) {\n return /^image/.test(file.type) && !/svg/.test(file.type);\n };\n\n var MAX_WIDTH = 10;\n var MAX_HEIGHT = 10;\n\n var calculateAverageColor = function calculateAverageColor(image) {\n var scalar = Math.min(MAX_WIDTH / image.width, MAX_HEIGHT / image.height);\n\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n var width = (canvas.width = Math.ceil(image.width * scalar));\n var height = (canvas.height = Math.ceil(image.height * scalar));\n ctx.drawImage(image, 0, 0, width, height);\n var data = null;\n try {\n data = ctx.getImageData(0, 0, width, height).data;\n } catch (e) {\n return null;\n }\n var l = data.length;\n\n var r = 0;\n var g = 0;\n var b = 0;\n var i = 0;\n\n for (; i < l; i += 4) {\n r += data[i] * data[i];\n g += data[i + 1] * data[i + 1];\n b += data[i + 2] * data[i + 2];\n }\n\n r = averageColor(r, l);\n g = averageColor(g, l);\n b = averageColor(b, l);\n\n return { r: r, g: g, b: b };\n };\n\n var averageColor = function averageColor(c, l) {\n return Math.floor(Math.sqrt(c / (l / 4)));\n };\n\n var cloneCanvas = function cloneCanvas(origin, target) {\n target = target || document.createElement('canvas');\n target.width = origin.width;\n target.height = origin.height;\n var ctx = target.getContext('2d');\n ctx.drawImage(origin, 0, 0);\n return target;\n };\n\n var cloneImageData = function cloneImageData(imageData) {\n var id;\n try {\n id = new ImageData(imageData.width, imageData.height);\n } catch (e) {\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n id = ctx.createImageData(imageData.width, imageData.height);\n }\n id.data.set(new Uint8ClampedArray(imageData.data));\n return id;\n };\n\n var loadImage = function loadImage(url) {\n return new Promise(function(resolve, reject) {\n var img = new Image();\n img.crossOrigin = 'Anonymous';\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 createImageWrapperView = function createImageWrapperView(_) {\n // create overlay view\n var OverlayView = createImageOverlayView(_);\n\n var ImageView = createImageView(_);\n var createWorker = _.utils.createWorker;\n\n var applyFilter = function applyFilter(root, filter, target) {\n return new Promise(function(resolve) {\n // will store image data for future filter updates\n if (!root.ref.imageData) {\n root.ref.imageData = target\n .getContext('2d')\n .getImageData(0, 0, target.width, target.height);\n }\n\n // get image data reference\n var imageData = cloneImageData(root.ref.imageData);\n\n if (!filter || filter.length !== 20) {\n target.getContext('2d').putImageData(imageData, 0, 0);\n return resolve();\n }\n\n var worker = createWorker(ColorMatrixWorker);\n worker.post(\n {\n imageData: imageData,\n colorMatrix: filter\n },\n\n function(response) {\n // apply filtered colors\n target.getContext('2d').putImageData(response, 0, 0);\n\n // stop worker\n worker.terminate();\n\n // done!\n resolve();\n },\n [imageData.data.buffer]\n );\n });\n };\n\n var removeImageView = function removeImageView(root, imageView) {\n root.removeChildView(imageView);\n imageView.image.width = 1;\n imageView.image.height = 1;\n imageView._destroy();\n };\n\n // remove an image\n var shiftImage = function shiftImage(_ref) {\n var root = _ref.root;\n var imageView = root.ref.images.shift();\n imageView.opacity = 0;\n imageView.translateY = -15;\n root.ref.imageViewBin.push(imageView);\n return imageView;\n };\n\n // add new image\n var pushImage = function pushImage(_ref2) {\n var root = _ref2.root,\n props = _ref2.props,\n image = _ref2.image;\n\n var id = props.id;\n var item = root.query('GET_ITEM', { id: id });\n if (!item) return;\n\n var crop = item.getMetadata('crop') || {\n center: {\n x: 0.5,\n y: 0.5\n },\n\n flip: {\n horizontal: false,\n vertical: false\n },\n\n zoom: 1,\n rotation: 0,\n aspectRatio: null\n };\n\n var background = root.query(\n 'GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR'\n );\n\n var markup;\n var resize;\n var dirty = false;\n if (root.query('GET_IMAGE_PREVIEW_MARKUP_SHOW')) {\n markup = item.getMetadata('markup') || [];\n resize = item.getMetadata('resize');\n dirty = true;\n }\n\n // append image presenter\n var imageView = root.appendChildView(\n root.createChildView(ImageView, {\n id: id,\n image: image,\n crop: crop,\n resize: resize,\n markup: markup,\n dirty: dirty,\n background: background,\n opacity: 0,\n scaleX: 1.15,\n scaleY: 1.15,\n translateY: 15\n }),\n\n root.childViews.length\n );\n\n root.ref.images.push(imageView);\n\n // reveal the preview image\n imageView.opacity = 1;\n imageView.scaleX = 1;\n imageView.scaleY = 1;\n imageView.translateY = 0;\n\n // the preview is now ready to be drawn\n setTimeout(function() {\n root.dispatch('DID_IMAGE_PREVIEW_SHOW', { id: id });\n }, 250);\n };\n\n var updateImage = function updateImage(_ref3) {\n var root = _ref3.root,\n props = _ref3.props;\n var item = root.query('GET_ITEM', { id: props.id });\n if (!item) return;\n var imageView = root.ref.images[root.ref.images.length - 1];\n imageView.crop = item.getMetadata('crop');\n imageView.background = root.query(\n 'GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR'\n );\n if (root.query('GET_IMAGE_PREVIEW_MARKUP_SHOW')) {\n imageView.dirty = true;\n imageView.resize = item.getMetadata('resize');\n imageView.markup = item.getMetadata('markup');\n }\n };\n\n // replace image preview\n var didUpdateItemMetadata = function didUpdateItemMetadata(_ref4) {\n var root = _ref4.root,\n props = _ref4.props,\n action = _ref4.action;\n\n // only filter and crop trigger redraw\n if (!/crop|filter|markup|resize/.test(action.change.key)) return;\n\n // no images to update, exit\n if (!root.ref.images.length) return;\n\n // no item found, exit\n var item = root.query('GET_ITEM', { id: props.id });\n if (!item) return;\n\n // for now, update existing image when filtering\n if (/filter/.test(action.change.key)) {\n var imageView = root.ref.images[root.ref.images.length - 1];\n applyFilter(root, action.change.value, imageView.image);\n return;\n }\n\n if (/crop|markup|resize/.test(action.change.key)) {\n var crop = item.getMetadata('crop');\n var image = root.ref.images[root.ref.images.length - 1];\n\n // if aspect ratio has changed, we need to create a new image\n if (Math.abs(crop.aspectRatio - image.crop.aspectRatio) > 0.00001) {\n var _imageView = shiftImage({ root: root });\n pushImage({\n root: root,\n props: props,\n image: cloneCanvas(_imageView.image)\n });\n }\n // if not, we can update the current image\n else {\n updateImage({ root: root, props: props });\n }\n }\n };\n\n var canCreateImageBitmap = function canCreateImageBitmap(file) {\n // Firefox versions before 58 will freeze when running createImageBitmap\n // in a Web Worker so we detect those versions and return false for support\n var userAgent = window.navigator.userAgent;\n var isFirefox = userAgent.match(/Firefox\\/([0-9]+)\\./);\n var firefoxVersion = isFirefox ? parseInt(isFirefox[1]) : null;\n if (firefoxVersion <= 58) return false;\n\n return 'createImageBitmap' in window && isBitmap(file);\n };\n\n /**\n * Write handler for when preview container has been created\n */\n var didCreatePreviewContainer = function didCreatePreviewContainer(_ref5) {\n var root = _ref5.root,\n props = _ref5.props;\n var id = props.id;\n\n // we need to get the file data to determine the eventual image size\n var item = root.query('GET_ITEM', id);\n if (!item) return;\n\n // get url to file (we'll revoke it later on when done)\n var fileURL = URL.createObjectURL(item.file);\n\n // determine image size of this item\n getImageSize(fileURL, function(width, height) {\n // we can now scale the panel to the final size\n root.dispatch('DID_IMAGE_PREVIEW_CALCULATE_SIZE', {\n id: id,\n width: width,\n height: height\n });\n });\n };\n\n var drawPreview = function drawPreview(_ref6) {\n var root = _ref6.root,\n props = _ref6.props;\n var id = props.id;\n\n // we need to get the file data to determine the eventual image size\n var item = root.query('GET_ITEM', id);\n if (!item) return;\n\n // get url to file (we'll revoke it later on when done)\n var fileURL = URL.createObjectURL(item.file);\n\n // fallback\n var loadPreviewFallback = function loadPreviewFallback() {\n // let's scale the image in the main thread :(\n loadImage(fileURL).then(previewImageLoaded);\n };\n\n // image is now ready\n var previewImageLoaded = function previewImageLoaded(imageData) {\n // the file url is no longer needed\n URL.revokeObjectURL(fileURL);\n\n // draw the scaled down version here and use that as source so bitmapdata can be closed\n // orientation info\n var exif = item.getMetadata('exif') || {};\n var orientation = exif.orientation || -1;\n\n // get width and height from action, and swap if orientation is incorrect\n var width = imageData.width,\n height = imageData.height;\n\n // if no width or height, just return early.\n if (!width || !height) return;\n\n if (orientation >= 5 && orientation <= 8) {\n var _ref7 = [height, width];\n width = _ref7[0];\n height = _ref7[1];\n }\n\n // scale canvas based on pixel density\n // we multiply by .75 as that creates smaller but still clear images on screens with high res displays\n var pixelDensityFactor = Math.max(1, window.devicePixelRatio * 0.75);\n\n // we want as much pixels to work with as possible,\n // this multiplies the minimum image resolution,\n // so when zooming in it doesn't get too blurry\n var zoomFactor = root.query('GET_IMAGE_PREVIEW_ZOOM_FACTOR');\n\n // imaeg scale factor\n var scaleFactor = zoomFactor * pixelDensityFactor;\n\n // calculate scaled preview image size\n var previewImageRatio = height / width;\n\n // calculate image preview height and width\n var previewContainerWidth = root.rect.element.width;\n var previewContainerHeight = root.rect.element.height;\n\n var imageWidth = previewContainerWidth;\n var imageHeight = imageWidth * previewImageRatio;\n\n if (previewImageRatio > 1) {\n imageWidth = Math.min(width, previewContainerWidth * scaleFactor);\n imageHeight = imageWidth * previewImageRatio;\n } else {\n imageHeight = Math.min(height, previewContainerHeight * scaleFactor);\n imageWidth = imageHeight / previewImageRatio;\n }\n\n // transfer to image tag so no canvas memory wasted on iOS\n var previewImage = createPreviewImage(\n imageData,\n imageWidth,\n imageHeight,\n orientation\n );\n\n // done\n var done = function done() {\n // calculate average image color, disabled for now\n var averageColor = root.query(\n 'GET_IMAGE_PREVIEW_CALCULATE_AVERAGE_IMAGE_COLOR'\n )\n ? calculateAverageColor(data)\n : null;\n item.setMetadata('color', averageColor, true);\n\n // data has been transferred to canvas ( if was ImageBitmap )\n if ('close' in imageData) {\n imageData.close();\n }\n\n // show the overlay\n root.ref.overlayShadow.opacity = 1;\n\n // create the first image\n pushImage({ root: root, props: props, image: previewImage });\n };\n\n // apply filter\n var filter = item.getMetadata('filter');\n if (filter) {\n applyFilter(root, filter, previewImage).then(done);\n } else {\n done();\n }\n };\n\n // if we support scaling using createImageBitmap we use a worker\n if (canCreateImageBitmap(item.file)) {\n // let's scale the image in a worker\n var worker = createWorker(BitmapWorker);\n\n worker.post(\n {\n file: item.file\n },\n\n function(imageBitmap) {\n // destroy worker\n worker.terminate();\n\n // no bitmap returned, must be something wrong,\n // try the oldschool way\n if (!imageBitmap) {\n loadPreviewFallback();\n return;\n }\n\n // yay we got our bitmap, let's continue showing the preview\n previewImageLoaded(imageBitmap);\n }\n );\n } else {\n // create fallback preview\n loadPreviewFallback();\n }\n };\n\n /**\n * Write handler for when the preview image is ready to be animated\n */\n var didDrawPreview = function didDrawPreview(_ref8) {\n var root = _ref8.root;\n // get last added image\n var image = root.ref.images[root.ref.images.length - 1];\n image.translateY = 0;\n image.scaleX = 1.0;\n image.scaleY = 1.0;\n image.opacity = 1;\n };\n\n /**\n * Write handler for when the preview has been loaded\n */\n var restoreOverlay = function restoreOverlay(_ref9) {\n var root = _ref9.root;\n root.ref.overlayShadow.opacity = 1;\n root.ref.overlayError.opacity = 0;\n root.ref.overlaySuccess.opacity = 0;\n };\n\n var didThrowError = function didThrowError(_ref10) {\n var root = _ref10.root;\n root.ref.overlayShadow.opacity = 0.25;\n root.ref.overlayError.opacity = 1;\n };\n\n var didCompleteProcessing = function didCompleteProcessing(_ref11) {\n var root = _ref11.root;\n root.ref.overlayShadow.opacity = 0.25;\n root.ref.overlaySuccess.opacity = 1;\n };\n\n /**\n * Constructor\n */\n var create = function create(_ref12) {\n var root = _ref12.root;\n\n // image view\n root.ref.images = [];\n\n // the preview image data (we need this to filter the image)\n root.ref.imageData = null;\n\n // image bin\n root.ref.imageViewBin = [];\n\n // image overlays\n root.ref.overlayShadow = root.appendChildView(\n root.createChildView(OverlayView, {\n opacity: 0,\n status: 'idle'\n })\n );\n\n root.ref.overlaySuccess = root.appendChildView(\n root.createChildView(OverlayView, {\n opacity: 0,\n status: 'success'\n })\n );\n\n root.ref.overlayError = root.appendChildView(\n root.createChildView(OverlayView, {\n opacity: 0,\n status: 'failure'\n })\n );\n };\n\n return _.utils.createView({\n name: 'image-preview-wrapper',\n create: create,\n styles: ['height'],\n\n apis: ['height'],\n\n destroy: function destroy(_ref13) {\n var root = _ref13.root;\n // we resize the image so memory on iOS 12 is released more quickly (it seems)\n root.ref.images.forEach(function(imageView) {\n imageView.image.width = 1;\n imageView.image.height = 1;\n });\n },\n didWriteView: function didWriteView(_ref14) {\n var root = _ref14.root;\n root.ref.images.forEach(function(imageView) {\n imageView.dirty = false;\n });\n },\n write: _.utils.createRoute(\n {\n // image preview stated\n DID_IMAGE_PREVIEW_DRAW: didDrawPreview,\n DID_IMAGE_PREVIEW_CONTAINER_CREATE: didCreatePreviewContainer,\n DID_FINISH_CALCULATE_PREVIEWSIZE: drawPreview,\n DID_UPDATE_ITEM_METADATA: didUpdateItemMetadata,\n\n // file states\n DID_THROW_ITEM_LOAD_ERROR: didThrowError,\n DID_THROW_ITEM_PROCESSING_ERROR: didThrowError,\n DID_THROW_ITEM_INVALID: didThrowError,\n DID_COMPLETE_ITEM_PROCESSING: didCompleteProcessing,\n DID_START_ITEM_PROCESSING: restoreOverlay,\n DID_REVERT_ITEM_PROCESSING: restoreOverlay\n },\n function(_ref15) {\n var root = _ref15.root;\n\n // views on death row\n var viewsToRemove = root.ref.imageViewBin.filter(function(imageView) {\n return imageView.opacity === 0;\n });\n\n // views to retain\n root.ref.imageViewBin = root.ref.imageViewBin.filter(function(\n imageView\n ) {\n return imageView.opacity > 0;\n });\n\n // remove these views\n viewsToRemove.forEach(function(imageView) {\n return removeImageView(root, imageView);\n });\n viewsToRemove.length = 0;\n }\n )\n });\n };\n\n /**\n * Image Preview Plugin\n */\n var plugin = function plugin(fpAPI) {\n var addFilter = fpAPI.addFilter,\n utils = fpAPI.utils;\n var Type = utils.Type,\n createRoute = utils.createRoute,\n isFile = utils.isFile;\n\n // imagePreviewView\n var imagePreviewView = createImageWrapperView(fpAPI);\n\n // called for each view that is created right after the 'create' method\n addFilter('CREATE_VIEW', function(viewAPI) {\n // get reference to created view\n var is = viewAPI.is,\n view = viewAPI.view,\n query = viewAPI.query;\n\n // only hook up to item view and only if is enabled for this cropper\n if (!is('file') || !query('GET_ALLOW_IMAGE_PREVIEW')) return;\n\n // create the image preview plugin, but only do so if the item is an image\n var didLoadItem = function didLoadItem(_ref) {\n var root = _ref.root,\n props = _ref.props;\n var id = props.id;\n var item = query('GET_ITEM', id);\n\n // item could theoretically have been removed in the mean time\n if (!item || !isFile(item.file) || item.archived) return;\n\n // get the file object\n var file = item.file;\n\n // exit if this is not an image\n if (!isPreviewableImage(file)) return;\n\n // test if is filtered\n if (!query('GET_IMAGE_PREVIEW_FILTER_ITEM')(item)) return;\n\n // exit if image size is too high and no createImageBitmap support\n // this would simply bring the browser to its knees and that is not what we want\n var supportsCreateImageBitmap = 'createImageBitmap' in (window || {});\n var maxPreviewFileSize = query('GET_IMAGE_PREVIEW_MAX_FILE_SIZE');\n if (\n !supportsCreateImageBitmap &&\n maxPreviewFileSize &&\n file.size > maxPreviewFileSize\n )\n return;\n\n // set preview view\n root.ref.imagePreview = view.appendChildView(\n view.createChildView(imagePreviewView, { id: id })\n );\n\n // update height if is fixed\n var fixedPreviewHeight = root.query('GET_IMAGE_PREVIEW_HEIGHT');\n if (fixedPreviewHeight) {\n root.dispatch('DID_UPDATE_PANEL_HEIGHT', {\n id: item.id,\n height: fixedPreviewHeight\n });\n }\n\n // now ready\n var queue =\n !supportsCreateImageBitmap &&\n file.size > query('GET_IMAGE_PREVIEW_MAX_INSTANT_PREVIEW_FILE_SIZE');\n root.dispatch('DID_IMAGE_PREVIEW_CONTAINER_CREATE', { id: id }, queue);\n };\n\n var rescaleItem = function rescaleItem(root, props) {\n if (!root.ref.imagePreview) return;\n var id = props.id;\n\n // get item\n var item = root.query('GET_ITEM', { id: id });\n if (!item) return;\n\n // if is fixed height or panel has aspect ratio, exit here, height has already been defined\n var panelAspectRatio = root.query('GET_PANEL_ASPECT_RATIO');\n var itemPanelAspectRatio = root.query('GET_ITEM_PANEL_ASPECT_RATIO');\n var fixedHeight = root.query('GET_IMAGE_PREVIEW_HEIGHT');\n if (panelAspectRatio || itemPanelAspectRatio || fixedHeight) return;\n\n // no data!\n var _root$ref = root.ref,\n imageWidth = _root$ref.imageWidth,\n imageHeight = _root$ref.imageHeight;\n if (!imageWidth || !imageHeight) return;\n\n // get height min and max\n var minPreviewHeight = root.query('GET_IMAGE_PREVIEW_MIN_HEIGHT');\n var maxPreviewHeight = root.query('GET_IMAGE_PREVIEW_MAX_HEIGHT');\n\n // orientation info\n var exif = item.getMetadata('exif') || {};\n var orientation = exif.orientation || -1;\n\n // get width and height from action, and swap of orientation is incorrect\n if (orientation >= 5 && orientation <= 8) {\n var _ref2 = [imageHeight, imageWidth];\n imageWidth = _ref2[0];\n imageHeight = _ref2[1];\n }\n\n // scale up width and height when we're dealing with an SVG\n if (!isBitmap(item.file) || root.query('GET_IMAGE_PREVIEW_UPSCALE')) {\n var scalar = 2048 / imageWidth;\n imageWidth *= scalar;\n imageHeight *= scalar;\n }\n\n // image aspect ratio\n var imageAspectRatio = imageHeight / imageWidth;\n\n // we need the item to get to the crop size\n var previewAspectRatio =\n (item.getMetadata('crop') || {}).aspectRatio || imageAspectRatio;\n\n // preview height range\n var previewHeightMax = Math.max(\n minPreviewHeight,\n Math.min(imageHeight, maxPreviewHeight)\n );\n var itemWidth = root.rect.element.width;\n var previewHeight = Math.min(\n itemWidth * previewAspectRatio,\n previewHeightMax\n );\n\n // request update to panel height\n root.dispatch('DID_UPDATE_PANEL_HEIGHT', {\n id: item.id,\n height: previewHeight\n });\n };\n\n var didResizeView = function didResizeView(_ref3) {\n var root = _ref3.root;\n // actions in next write operation\n root.ref.shouldRescale = true;\n };\n\n var didUpdateItemMetadata = function didUpdateItemMetadata(_ref4) {\n var root = _ref4.root,\n action = _ref4.action;\n\n if (action.change.key !== 'crop') return;\n\n // actions in next write operation\n root.ref.shouldRescale = true;\n };\n\n var didCalculatePreviewSize = function didCalculatePreviewSize(_ref5) {\n var root = _ref5.root,\n action = _ref5.action;\n\n // remember dimensions\n root.ref.imageWidth = action.width;\n root.ref.imageHeight = action.height;\n\n // actions in next write operation\n root.ref.shouldRescale = true;\n root.ref.shouldDrawPreview = true;\n\n // as image load could take a while and fire when draw loop is resting we need to give it a kick\n root.dispatch('KICK');\n };\n\n // start writing\n view.registerWriter(\n createRoute(\n {\n DID_RESIZE_ROOT: didResizeView,\n DID_STOP_RESIZE: didResizeView,\n DID_LOAD_ITEM: didLoadItem,\n DID_IMAGE_PREVIEW_CALCULATE_SIZE: didCalculatePreviewSize,\n DID_UPDATE_ITEM_METADATA: didUpdateItemMetadata\n },\n function(_ref6) {\n var root = _ref6.root,\n props = _ref6.props;\n\n // no preview view attached\n if (!root.ref.imagePreview) return;\n\n // don't do anything while hidden\n if (root.rect.element.hidden) return;\n\n // resize the item panel\n if (root.ref.shouldRescale) {\n rescaleItem(root, props);\n root.ref.shouldRescale = false;\n }\n\n if (root.ref.shouldDrawPreview) {\n // queue till next frame so we're sure the height has been applied this forces the draw image call inside the wrapper view to use the correct height\n requestAnimationFrame(function() {\n root.dispatch('DID_FINISH_CALCULATE_PREVIEWSIZE', {\n id: props.id\n });\n });\n root.ref.shouldDrawPreview = false;\n }\n }\n )\n );\n });\n\n // expose plugin\n return {\n options: {\n // Enable or disable image preview\n allowImagePreview: [true, Type.BOOLEAN],\n\n // filters file items to determine which are shown as preview\n imagePreviewFilterItem: [\n function() {\n return true;\n },\n Type.FUNCTION\n ],\n\n // Fixed preview height\n imagePreviewHeight: [null, Type.INT],\n\n // Min image height\n imagePreviewMinHeight: [44, Type.INT],\n\n // Max image height\n imagePreviewMaxHeight: [256, Type.INT],\n\n // Max size of preview file for when createImageBitmap is not supported\n imagePreviewMaxFileSize: [null, Type.INT],\n\n // The amount of extra pixels added to the image preview to allow comfortable zooming\n imagePreviewZoomFactor: [2, Type.INT],\n\n // Should we upscale small images to fit the max bounding box of the preview area\n imagePreviewUpscale: [false, Type.BOOLEAN],\n\n // Max size of preview file that we allow to try to instant preview if createImageBitmap is not supported, else image is queued for loading\n imagePreviewMaxInstantPreviewFileSize: [1000000, Type.INT],\n\n // Style of the transparancy indicator used behind images\n imagePreviewTransparencyIndicator: [null, Type.STRING],\n\n // Enables or disables reading average image color\n imagePreviewCalculateAverageImageColor: [false, Type.BOOLEAN],\n\n // Enables or disables the previewing of markup\n imagePreviewMarkupShow: [true, Type.BOOLEAN],\n\n // Allows filtering of markup to only show certain shapes\n imagePreviewMarkupFilter: [\n function() {\n return true;\n },\n Type.FUNCTION\n ]\n }\n };\n };\n\n // fire pluginloaded event if running in browser, this allows registering the plugin when using async script tags\n var isBrowser =\n typeof window !== 'undefined' && typeof window.document !== 'undefined';\n if (isBrowser) {\n document.dispatchEvent(\n new CustomEvent('FilePond:pluginloaded', { detail: plugin })\n );\n }\n\n return plugin;\n});\n","/*!\n * FilePondPluginFileEncode 2.1.10\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 ? (module.exports = factory())\n : typeof define === 'function' && define.amd\n ? define(factory)\n : ((global = global || self),\n (global.FilePondPluginFileEncode = factory()));\n})(this, function() {\n 'use strict';\n\n var DataURIWorker = function DataURIWorker() {\n // route messages\n self.onmessage = function(e) {\n convert(e.data.message, function(response) {\n self.postMessage({ id: e.data.id, message: response });\n });\n };\n\n // convert file to data uri\n var convert = function convert(options, cb) {\n var file = options.file;\n\n var reader = new FileReader();\n reader.onloadend = function() {\n cb(reader.result.replace('data:', '').replace(/^.+,/, ''));\n };\n reader.readAsDataURL(file);\n };\n };\n\n var plugin = function plugin(_ref) {\n var addFilter = _ref.addFilter,\n utils = _ref.utils;\n\n // get quick reference to Type utils\n var Type = utils.Type,\n createWorker = utils.createWorker,\n createRoute = utils.createRoute,\n isFile = utils.isFile;\n\n var encode = function encode(_ref2) {\n var name = _ref2.name,\n file = _ref2.file;\n return new Promise(function(resolve) {\n var worker = createWorker(DataURIWorker);\n worker.post({ file: file }, function(data) {\n resolve({ name: name, data: data });\n worker.terminate();\n });\n });\n };\n\n // holds base64 strings till can be moved to item\n var base64Cache = [];\n addFilter('DID_CREATE_ITEM', function(item, _ref3) {\n var query = _ref3.query;\n\n if (!query('GET_ALLOW_FILE_ENCODE')) return;\n\n item.extend('getFileEncodeBase64String', function() {\n return base64Cache[item.id] && base64Cache[item.id].data;\n });\n item.extend('getFileEncodeDataURL', function() {\n return 'data:'\n .concat(item.fileType, ';base64,')\n .concat(base64Cache[item.id].data);\n });\n });\n\n addFilter('SHOULD_PREPARE_OUTPUT', function(shouldPrepareOutput, _ref4) {\n var query = _ref4.query;\n return new Promise(function(resolve) {\n resolve(query('GET_ALLOW_FILE_ENCODE'));\n });\n });\n\n addFilter('COMPLETE_PREPARE_OUTPUT', function(file, _ref5) {\n var item = _ref5.item,\n query = _ref5.query;\n return new Promise(function(resolve) {\n // if it's not a file or a list of files, continue\n if (\n !query('GET_ALLOW_FILE_ENCODE') ||\n (!isFile(file) && !Array.isArray(file))\n ) {\n return resolve(file);\n }\n\n // store metadata settings for this cache\n base64Cache[item.id] = {\n metadata: item.getMetadata(),\n data: null\n };\n\n // wait for all file items to be encoded\n Promise.all(\n (file instanceof Blob ? [{ name: null, file: file }] : file).map(\n encode\n )\n ).then(function(dataItems) {\n base64Cache[item.id].data =\n file instanceof Blob ? dataItems[0].data : dataItems;\n resolve(file);\n });\n });\n });\n\n // called for each view that is created right after the 'create' method\n addFilter('CREATE_VIEW', function(viewAPI) {\n // get reference to created view\n var is = viewAPI.is,\n view = viewAPI.view,\n query = viewAPI.query;\n\n // only hook up to item view\n if (!is('file-wrapper') || !query('GET_ALLOW_FILE_ENCODE')) {\n return;\n }\n\n view.registerWriter(\n createRoute({\n DID_PREPARE_OUTPUT: function DID_PREPARE_OUTPUT(_ref6) {\n var root = _ref6.root,\n action = _ref6.action;\n\n // only do this if is not uploading async\n if (query('IS_ASYNC')) {\n return;\n }\n\n var item = query('GET_ITEM', action.id);\n if (!item) return;\n\n // extract base64 string\n var cache = base64Cache[item.id];\n var metadata = cache.metadata;\n var data = cache.data;\n\n // create JSON string from encoded data\n var value = JSON.stringify({\n id: item.id,\n name: item.file.name,\n type: item.file.type,\n size: item.file.size,\n metadata: metadata,\n data: data\n });\n\n // for filepond < 4.13.0\n if (root.ref.data) {\n root.ref.data.value = value;\n }\n // newer versions\n else {\n root.dispatch('DID_DEFINE_VALUE', {\n id: item.id,\n value: value\n });\n }\n },\n DID_REMOVE_ITEM: function DID_REMOVE_ITEM(_ref7) {\n var action = _ref7.action;\n var item = query('GET_ITEM', action.id);\n if (!item) return;\n delete base64Cache[item.id];\n }\n })\n );\n });\n\n return {\n options: {\n // Enable or disable file encoding\n allowFileEncode: [true, Type.BOOLEAN]\n }\n };\n };\n\n // fire pluginloaded event if running in browser, this allows registering the plugin when using async script tags\n var isBrowser =\n typeof window !== 'undefined' && typeof window.document !== 'undefined';\n if (isBrowser) {\n document.dispatchEvent(\n new CustomEvent('FilePond:pluginloaded', { detail: plugin })\n );\n }\n\n return plugin;\n});\n","/*!\n * FilePond 4.29.1\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 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 };\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 forin(options, function(key, value) {\n dispatch('SET_' + fromCamels(key, '_').toUpperCase(), { value: value });\n });\n },\n };\n };\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 // 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 + ' bytes';\n }\n\n // kilobytes\n if (bytes < MB) {\n return Math.floor(bytes / KB) + ' KB';\n }\n\n // megabytes\n if (bytes < GB) {\n return removeDecimalsWhenZero(bytes / MB, 1, decimalSeparator) + ' MB';\n }\n\n // gigabytes\n return removeDecimalsWhenZero(bytes / GB, 2, decimalSeparator) + ' GB';\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 )\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":""}