{"version":3,"sources":["webpack:///./node_modules/vuelidate/lib/validators/integer.js","webpack:///./node_modules/vue-filepond/dist/vue-filepond.js","webpack:///./node_modules/filepond-plugin-file-validate-type/dist/filepond-plugin-file-validate-type.js","webpack:///./node_modules/core-js/modules/es.string.includes.js","webpack:///./node_modules/vuelidate/lib/validators/maxLength.js","webpack:///./node_modules/filepond-plugin-image-preview/dist/filepond-plugin-image-preview.js","webpack:///./node_modules/vuelidate/lib/validators/and.js","webpack:///./node_modules/vuelidate/lib/validators/alphaNum.js","webpack:///./node_modules/filepond-plugin-file-validate-size/dist/filepond-plugin-file-validate-size.js","webpack:///./node_modules/vuelidate/lib/validators/numeric.js","webpack:///./node_modules/vuelidate/lib/validators/maxValue.js","webpack:///./node_modules/filepond-plugin-image-validate-size/dist/filepond-plugin-image-validate-size.js","webpack:///./node_modules/core-js/internals/not-a-regexp.js","webpack:///./node_modules/vuelidate/lib/validators/email.js","webpack:///./node_modules/vuelidate/lib/validators/minLength.js","webpack:///./node_modules/vuelidate/lib/validators/alpha.js","webpack:///./node_modules/vuelidate/lib/validators/not.js","webpack:///./src/components/widgets/filepond.vue?264f","webpack:///src/components/widgets/filepond.vue","webpack:///./src/components/widgets/filepond.vue?8b3c","webpack:///./src/components/widgets/filepond.vue","webpack:///./node_modules/vuelidate/lib/validators/url.js","webpack:///./node_modules/vuelidate/lib/validators/common.js","webpack:///./node_modules/filepond-plugin-image-exif-orientation/dist/filepond-plugin-image-exif-orientation.js","webpack:///./node_modules/vuelidate/lib/withParams.js","webpack:///./node_modules/vuelidate/lib/validators/macAddress.js","webpack:///./node_modules/filepond-plugin-image-crop/dist/filepond-plugin-image-crop.js","webpack:///./node_modules/vuelidate/lib/validators/requiredIf.js","webpack:///./node_modules/core-js/internals/correct-is-regexp-logic.js","webpack:///./node_modules/vuelidate/lib/validators/index.js","webpack:///./node_modules/vuelidate/lib/validators/sameAs.js","webpack:///./node_modules/filepond/dist/filepond.js","webpack:///./node_modules/vuelidate/lib/validators/decimal.js","webpack:///./node_modules/vuelidate/lib/validators/ipAddress.js","webpack:///./node_modules/core-js/modules/es.array.includes.js","webpack:///./node_modules/vuelidate/lib/withParamsBrowser.js","webpack:///./node_modules/vuelidate/lib/validators/or.js","webpack:///./node_modules/vuelidate/lib/validators/required.js","webpack:///./node_modules/core-js/modules/es.array.map.js","webpack:///./node_modules/vuelidate/lib/validators/requiredUnless.js","webpack:///./node_modules/vuelidate/lib/validators/minValue.js","webpack:///./node_modules/vuelidate/lib/validators/between.js","webpack:///./node_modules/filepond-plugin-image-edit/dist/filepond-plugin-image-edit.js"],"names":["Object","defineProperty","exports","value","default","_common","_default","regex","global","factory","globalThis","self","_exports","_vue","_filepond","_interopRequireDefault","obj","__esModule","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","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","plugin","_ref","addFilter","utils","Type","isString","replaceInString","guesstimateMimeType","getExtensionFromFilename","getFilenameFromURL","mimeTypeMatchesWildCard","mimeType","wildcard","mimeTypeGroup","exec","pop","wildcardGroup","slice","isValidMimeType","acceptedTypes","userInputType","some","acceptedType","getItemType","item","filename","extension","validateFile","typeDetector","Promise","resolve","reject","then","detectedType","catch","applyMimeTypeMap","map","acceptedFileType","file","_ref2","query","_ref3","validationResult","handleRejection","acceptedFileTypesMapped","label","acceptedFileTypesMapped_unique","status","main","sub","allTypes","join","allButLastType","lastType","allowFileTypeValidation","BOOLEAN","ARRAY","labelFileTypeNotAllowed","STRING","fileValidateTypeLabelExpectedTypes","fileValidateTypeLabelExpectedTypesMap","OBJECT","fileValidateTypeDetectType","FUNCTION","isBrowser","window","dispatchEvent","CustomEvent","detail","$","uncurryThis","notARegExp","requireObjectCoercible","toString","correctIsRegExpLogic","stringIndexOf","target","proto","forced","searchString","undefined","withParams","max","req","len","isPreviewableImage","_AwaitValue","wrapped","_AsyncGenerator","gen","front","back","send","arg","request","next","resume","result","wrappedAwait","settle","done","err","_invoke","return","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","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","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","_","createView","ignoreRect","mixins","apis","write","root","dirty","crop","resize","viewWidth","viewHeight","cropWidth","cropHeight","_size","outputWidth","outputHeight","outputFit","mode","outputUpscale","upscale","shouldUpscale","scalarWidth","scalarHeight","innerHTML","markupFilter","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","ref","bitmap","appendChildView","createChildView","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","URL","location","href","replace","hash","classList","add","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","getMetadata","childViews","setTimeout","dispatch","didUpdateItemMetadata","action","change","_imageView","canCreateImageBitmap","userAgent","navigator","isFirefox","match","firefoxVersion","parseInt","didCreatePreviewContainer","fileURL","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","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","imagePreviewFilterItem","imagePreviewHeight","INT","imagePreviewMinHeight","imagePreviewMaxHeight","imagePreviewMaxFileSize","imagePreviewZoomFactor","imagePreviewUpscale","imagePreviewMaxInstantPreviewFileSize","imagePreviewTransparencyIndicator","imagePreviewCalculateAverageImageColor","imagePreviewMarkupShow","imagePreviewMarkupFilter","validators","_len2","_key2","valid","fn","toNaturalFileSize","sizeMax","sizeMin","fileFilter","filesize","totalSizeMax","currentTotalSize","total","fileSize","allowFileSizeValidation","maxFileSize","minFileSize","maxTotalFileSize","fileValidateSizeFilter","labelMinFileSizeExceeded","labelMinFileSize","labelMaxFileSizeExceeded","labelMaxFileSize","labelMaxTotalFileSizeExceeded","labelMaxTotalFileSize","Date","isImage","clearInterval","intervalId","setInterval","bounds","measure","onReceiveSize","minWidth","minHeight","maxWidth","maxHeight","minResolution","maxResolution","resolution","error","TOO_SMALL","details","TOO_BIG","TOO_LOW_RES","TOO_HIGH_RES","allowImageValidateSize","imageValidateSizeLabelFormatError","imageValidateSizeMeasure","imageValidateSizeMinResolution","imageValidateSizeMaxResolution","imageValidateSizeLabelImageResolutionTooLow","imageValidateSizeLabelImageResolutionTooHigh","imageValidateSizeLabelExpectedMinResolution","imageValidateSizeLabelExpectedMaxResolution","imageValidateSizeMinWidth","imageValidateSizeMinHeight","imageValidateSizeMaxWidth","imageValidateSizeMaxHeight","imageValidateSizeLabelImageSizeTooSmall","imageValidateSizeLabelImageSizeTooBig","imageValidateSizeLabelExpectedMinSize","imageValidateSizeLabelExpectedMaxSize","isRegExp","$TypeError","it","emailRegex","validator","vm","_vm","_h","$createElement","_c","_self","refId","$t","allowImageCrop","imageCropAspectRatio","process","load","baseURL","method","revert","headers","Authorization","token","init","files","on","remove","staticRenderFns","removedFiles","uploadedFiles","lodash","isNil","newValue","getValues","source","uniq","union","files2","computed","methods","compact","formData","append","abort","filenames","components","FilePond","urlRegex","enumerable","get","_withParams","_typeof","constructor","isNaN","getTime","reference","parentVm","expr","isJPEG","Marker","JPEG","APP1","EXIF","TIFF","Orientation","Unknown","getUint16","offset","little","getUint32","getImageOrientation","reader","FileReader","DataView","byteLength","marker","tags","readAsArrayBuffer","IS_BROWSER","testSrc","shouldCorrect","testImage","shouldCorrectImageExifOrientation","allowImageExifOrientation","isBrowser$1","BUILD","separator","parts","split","every","hexValid","hex","toLowerCase","getNumericAspectRatioFromString","allowCrop","isObject","isNumber","updateCrop","extend","newAspectRatio","currentCrop","newCrop","humanAspectRatio","wellKnownSymbol","MATCH","METHOD_NAME","regexp","error1","error2","_alpha","_alphaNum","_numeric","_between","_email","_ipAddress","_macAddress","_maxLength","_minLength","_required","_requiredIf","_requiredUnless","_sameAs","_url","_or","_and","_not","_minValue","_maxValue","_integer","_decimal","helpers","_interopRequireWildcard","newObj","hasOwnProperty","desc","getOwnPropertyDescriptor","equalTo","eq","isNode","HTMLElement","createStore","initialState","queries","actions","state","actionQueue","dispatchQueue","getState","processActionQueue","processDispatchQueue","isBlocking","actionHandlers","str","_queryHandles","queryHandles","api","property","definition","forin","createObject","getAttribute","hasAttribute","svgElements","isSVGElement","attributes","parent","child","children","insertBefore","parentNode","removeChild","testElement","getChildCount","el","getViewRect","elementRect","outer","childView","isRectIgnored","childViewRect","expandRect","calculateRectSize","marginBottom","marginRight","thereYet","position","destination","velocity","errorMargin","spring","_ref$stiffness","_ref$damping","_ref$mass","resting","interpolate","ts","skipToEndState","f","onupdate","oncomplete","setTarget","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","addEventListener","removeEvent","removeEventListener","listeners","viewState","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","toArray","splitter","isBoolean","toBoolean","toNumber","toInt","toFloat","isInt","isFinite","toBytes","base","naturalFileSize","isFunction","toFunctionReference","levels","level","patch","fetch","restore","createServerAPI","outline","timeout","createAction","withCredentials","ondata","header","toServerAPI","isNull","isAPI","getType","replaceSingleQuotes","conversionTable","number","float","bytes","JSON","parse","convertTo","getValueByType","defaultValue","valueType","newValueType","convertedValue","option","createOption","currentValue","createOptions","optionDefinition","createInitialState","items","listUpdateTimeout","itemUpdateTimeout","processingQueue","fromCamels","part","createOptionAPI","toUpperCase","createOptionActions","createOptionQueries","InteractionMethod","API","DROP","BROWSE","PASTE","NONE","getUniqueId","random","substring","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","arr2","iter","from","arrayRemove","run","sync","listener","_fire","fireSync","fire","onOnce","_cb","copyObjectPropertiesToObject","getOwnPropertyNames","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","getDecimalSeparator","toLocaleString","getThousandsSeparator","decimalSeparator","thousandsStringWithSeparator","thousandsStringWithoutSeparator","NUMBER","ACTION","SERVER_API","REGEX","filters","applyFilterChain","matchingFilters","initialFilter","current","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","labelFileSizeBytes","labelFileSizeKilobytes","labelFileSizeMegabytes","labelFileSizeGigabytes","labelDecimalSeparator","labelThousandsSeparator","labelIdle","labelInvalidField","labelFileWaitingForSize","labelFileSizeNotAvailable","labelFileCountSingular","labelFileCountPlural","labelFileLoading","labelFileAdded","labelFileLoadError","labelFileRemoved","labelFileRemoveError","labelFileProcessing","labelFileProcessingComplete","labelFileProcessingAborted","labelFileProcessingError","labelFileProcessingRevertError","labelTapToCancel","labelTapToRetry","labelTapToUndo","labelButtonRemoveItem","labelButtonAbortItemLoad","labelButtonRetryItemLoad","labelButtonAbortItemProcessing","labelButtonUndoItemProcessing","labelButtonRetryItemProcessing","labelButtonProcessItem","iconRemove","iconProcess","iconRetry","iconUndo","iconDone","oninit","onwarning","onactivatefile","oninitfile","onaddfilestart","onaddfileprogress","onaddfile","onprocessfilestart","onprocessfileprogress","onprocessfileabort","onprocessfilerevert","onprocessfile","onprocessfiles","onremovefile","onpreparefile","onupdatefiles","onreorderfiles","beforeDropFile","beforeAddFile","beforeRemoveFile","beforePrepareFile","stylePanelLayout","stylePanelAspectRatio","styleItemPanelAspectRatio","styleButtonRemoveItemPosition","styleButtonProcessItemPosition","styleLoadIndicatorPosition","styleProgressIndicatorPosition","styleButtonRemoveItemAlign","credits","getItemByQuery","find","getActiveItems","Status","EMPTY","ERROR","BUSY","READY","res","canUpdateFileInput","dataTransfer","DataTransfer","File","ITEM_ERROR","ITEM_BUSY","ITEM_READY","isItemInErrorState","isItemInBusyState","isItemInReadyState","isAsync","GET_STATUS","GET_ITEM","GET_ACTIVE_ITEM","GET_ACTIVE_ITEMS","GET_ITEMS","GET_ITEM_NAME","GET_ITEM_SIZE","GET_STYLES","GET_PANEL_ASPECT_RATIO","isShapeCircle","GET_ITEM_PANEL_ASPECT_RATIO","GET_ITEMS_BY_STATUS","GET_TOTAL_ITEMS","SHOULD_UPDATE_FILE_INPUT","IS_ASYNC","GET_FILE_SIZE_LABELS","labelBytes","labelKilobytes","labelMegabytes","labelGigabytes","hasRoomForItem","count","maxFileCount","limit","arrayInsert","insertItem","isBase64DataURI","guesstimateExtension","subtype","leftPad","padding","getDateString","date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getFileFromBlob","blob","lastModifiedDate","_relativePath","getBlobBuilder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","createBlob","arrayBuffer","BB","bb","getBlob","Blob","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","loadURL","body","code","computable","fileinfo","setSource","isGet","sendRequest","onheaders","onprogress","ontimeout","onabort","aborted","xhr","headersReceived","encodeURI","encodeURIComponent","stringify","XMLHttpRequest","upload","lengthComputable","loaded","onreadystatechange","readyState","open","unescape","setRequestHeader","responseType","createResponse","createTimeoutResponse","getAllResponseHeaders","hasQS","buildURL","createFetchFunction","apiUrl","statusText","ChunkStatus","QUEUED","COMPLETE","WAITING","processFileChunked","metadata","transfer","chunks","chunkTransferId","chunkServer","serverId","fd","getResponseHeader","requestTransferId","FormData","requestParams","requestTransferOffset","requestUrl","lastChunkIndex","retries","completeProcessingChunks","canProcessChunk","chunk","processChunk","processChunks","updateTotalProgress","retryProcessChunk","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","fileType","relativePath","handler","itemAPI","freeze","release","archive","getItemIndexByQuery","getItemById","itemId","fetchBlob","getDomainFromURL","protocol","isExternalURL","dynamicLabel","isMockItem","listUpdated","optionalPromise","sortItems","compare","getItemByQueryFromState","itemHandler","_ref$success","_ref$failure","failure","ABORT_ALL","DID_SET_FILES","_ref2$value","activeItems","interactionMethod","doUpload","shouldPrepareOutput","MOVE_ITEM","currentIndex","SORT","ADD_ITEMS","_ref6$success","_ref6$failure","insertLocation","totalItems","isValidFile","validItems","promises","all","ADD_ITEM","_ref7$index","_ref7$success","_ref7$failure","_ref7$options","_item","mainStatus","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","optionKeys","prioritizedOptionKeys","PrioritizedOptions","orderedOptionKeys","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","_options$labelBytes","_options$labelKilobyt","_options$labelMegabyt","_options$labelGigabyt","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","DID_REMOVE_ITEM","write$5","dragCoordinates","dragIndex","dragIndexOffset","removeIndexOffset","addIndexOffset","childRect","visualHeight","prevX","prevY","visualIndex","vectorX","sign","vectorY","filterSetItemActions","list","create$9","overflowing","storeDragCoordinates","scopeLeft","scopeTop","clearDragCoordinates","route$3","DID_DRAG","DID_END_DRAG","write$6","overflow","newHeight","listScroller","attrToggle","enabledValue","resetFileInput","input","form","create$a","setAcceptedFileTypes","toggleAllowMultiple","toggleDirectoryFilter","toggleDisabled","toggleRequired","setCaptureMethod","handleChange","webkitRelativePath","doesAllowBrowse","disableField","updateRequiredStatus","shouldCheckValidity","setCustomValidity","updateFieldValidityStatus","browser","DID_SET_DISABLED","DID_SET_ALLOW_BROWSE","DID_SET_ALLOW_DIRECTORIES_ONLY","DID_SET_ALLOW_MULTIPLE","DID_SET_ACCEPTED_FILE_TYPES","DID_SET_CAPTURE_METHOD","DID_SET_REQUIRED","Key","ENTER","SPACE","create$b","handleKeyDown","isActivationKey","keyCode","click","isLabelClick","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_PREPARE_OUTPUT","DID_REORDER_ITEMS","DID_SORT_ITEMS","getRootNode","text$1","zip","epub","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","assist","clear$1","listModified","isUsingFilePond","itemAdded","itemRemoved","itemProcessed","itemProcessedUndo","itemError","assistant","toCamels","RegExp","charAt","debounce","func","immidiateOnly","MAX_FILES_LIMIT","prevent","create$e","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","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","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","nibbles","nibbleValid","nibble","numeric","$includes","fails","addToUnscopables","BROKEN_ON_SPARSE","fakeWithParams","paramsOrClosure","maybeValidator","vuelidate","$map","arrayMethodHasSpeciesSupport","HAS_SPECIES_SUPPORT","callbackfn","_utils$createItemAPI","canEdit","createEditorResponseHandler","userDidConfirm","editRequestQueue","requestEdit","_editRequestQueue$","handleEditorResponse","queueEditRequest","editRequest","canShowImagePreview","shouldExtendView","editor","filepondCallbackBridge","outputData","outputFile","onconfirm","oncancel","openEditor","outputCanvasBackgroundColor","cropDefault","colors","imageParameters","color","initialSize","targetSize","onclose","handleEdit","buttonEditItem","filenameElement","editButton","EDIT_ITEM","didPreviewUpdate","DID_IMAGE_PREVIEW_SHOW","allowImageEdit","styleImageEditButtonEditItemPosition","imageEditInstantEdit","imageEditAllowEdit","imageEditIconEdit","imageEditEditor"],"mappings":"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","file":"js/chunk-49735918.083733d0.js","sourcesContent":["\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = (0, _common.regex)('integer', /(^[0-9]*$)|(^-[0-9]+$)/);\n\nexports.default = _default;","/*!\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 * FilePondPluginFileValidateType 1.2.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.FilePondPluginFileValidateType = factory()));\n})(this, function() {\n 'use strict';\n\n var plugin = function plugin(_ref) {\n var addFilter = _ref.addFilter,\n utils = _ref.utils;\n // get quick reference to Type utils\n var Type = utils.Type,\n isString = utils.isString,\n replaceInString = utils.replaceInString,\n guesstimateMimeType = utils.guesstimateMimeType,\n getExtensionFromFilename = utils.getExtensionFromFilename,\n getFilenameFromURL = utils.getFilenameFromURL;\n\n var mimeTypeMatchesWildCard = function mimeTypeMatchesWildCard(\n mimeType,\n wildcard\n ) {\n var mimeTypeGroup = (/^[^/]+/.exec(mimeType) || []).pop(); // image/png -> image\n var wildcardGroup = wildcard.slice(0, -2); // image/* -> image\n return mimeTypeGroup === wildcardGroup;\n };\n\n var isValidMimeType = function isValidMimeType(\n acceptedTypes,\n userInputType\n ) {\n return acceptedTypes.some(function(acceptedType) {\n // accepted is wildcard mime type\n if (/\\*$/.test(acceptedType)) {\n return mimeTypeMatchesWildCard(userInputType, acceptedType);\n }\n\n // is normal mime type\n return acceptedType === userInputType;\n });\n };\n\n var getItemType = function getItemType(item) {\n // if the item is a url we guess the mime type by the extension\n var type = '';\n if (isString(item)) {\n var filename = getFilenameFromURL(item);\n var extension = getExtensionFromFilename(filename);\n if (extension) {\n type = guesstimateMimeType(extension);\n }\n } else {\n type = item.type;\n }\n\n return type;\n };\n\n var validateFile = function validateFile(\n item,\n acceptedFileTypes,\n typeDetector\n ) {\n // no types defined, everything is allowed \\o/\n if (acceptedFileTypes.length === 0) {\n return true;\n }\n\n // gets the item type\n var type = getItemType(item);\n\n // no type detector, test now\n if (!typeDetector) {\n return isValidMimeType(acceptedFileTypes, type);\n }\n\n // use type detector\n return new Promise(function(resolve, reject) {\n typeDetector(item, type)\n .then(function(detectedType) {\n if (isValidMimeType(acceptedFileTypes, detectedType)) {\n resolve();\n } else {\n reject();\n }\n })\n .catch(reject);\n });\n };\n\n var applyMimeTypeMap = function applyMimeTypeMap(map) {\n return function(acceptedFileType) {\n return map[acceptedFileType] === null\n ? false\n : map[acceptedFileType] || acceptedFileType;\n };\n };\n\n // setup attribute mapping for accept\n addFilter('SET_ATTRIBUTE_TO_OPTION_MAP', function(map) {\n return Object.assign(map, {\n accept: 'acceptedFileTypes'\n });\n });\n\n // filtering if an item is allowed in hopper\n addFilter('ALLOW_HOPPER_ITEM', function(file, _ref2) {\n var query = _ref2.query;\n // if we are not doing file type validation exit\n if (!query('GET_ALLOW_FILE_TYPE_VALIDATION')) {\n return true;\n }\n\n // we validate the file against the accepted file types\n return validateFile(file, query('GET_ACCEPTED_FILE_TYPES'));\n });\n\n // called for each file that is loaded\n // right before it is set to the item state\n // should return a promise\n addFilter('LOAD_FILE', function(file, _ref3) {\n var query = _ref3.query;\n return new Promise(function(resolve, reject) {\n if (!query('GET_ALLOW_FILE_TYPE_VALIDATION')) {\n resolve(file);\n return;\n }\n\n var acceptedFileTypes = query('GET_ACCEPTED_FILE_TYPES');\n\n // custom type detector method\n var typeDetector = query('GET_FILE_VALIDATE_TYPE_DETECT_TYPE');\n\n // if invalid, exit here\n var validationResult = validateFile(\n file,\n acceptedFileTypes,\n typeDetector\n );\n\n var handleRejection = function handleRejection() {\n var acceptedFileTypesMapped = acceptedFileTypes\n .map(\n applyMimeTypeMap(\n query('GET_FILE_VALIDATE_TYPE_LABEL_EXPECTED_TYPES_MAP')\n )\n )\n .filter(function(label) {\n return label !== false;\n });\n\n var acceptedFileTypesMapped_unique = acceptedFileTypesMapped.filter(\n function(item, index) {\n return acceptedFileTypesMapped.indexOf(item) === index;\n }\n );\n\n reject({\n status: {\n main: query('GET_LABEL_FILE_TYPE_NOT_ALLOWED'),\n sub: replaceInString(\n query('GET_FILE_VALIDATE_TYPE_LABEL_EXPECTED_TYPES'),\n {\n allTypes: acceptedFileTypesMapped_unique.join(', '),\n allButLastType: acceptedFileTypesMapped_unique\n .slice(0, -1)\n .join(', '),\n lastType:\n acceptedFileTypesMapped_unique[\n acceptedFileTypesMapped.length - 1\n ]\n }\n )\n }\n });\n };\n\n // has returned new filename immidiately\n if (typeof validationResult === 'boolean') {\n if (!validationResult) {\n return handleRejection();\n }\n return resolve(file);\n }\n\n // is promise\n validationResult\n .then(function() {\n resolve(file);\n })\n .catch(handleRejection);\n });\n });\n\n // expose plugin\n return {\n // default options\n options: {\n // Enable or disable file type validation\n allowFileTypeValidation: [true, Type.BOOLEAN],\n\n // What file types to accept\n acceptedFileTypes: [[], Type.ARRAY],\n // - must be comma separated\n // - mime types: image/png, image/jpeg, image/gif\n // - extensions: .png, .jpg, .jpeg ( not enabled yet )\n // - wildcards: image/*\n\n // label to show when a type is not allowed\n labelFileTypeNotAllowed: ['File is of invalid type', Type.STRING],\n\n // nicer label\n fileValidateTypeLabelExpectedTypes: [\n 'Expects {allButLastType} or {lastType}',\n Type.STRING\n ],\n\n // map mime types to extensions\n fileValidateTypeLabelExpectedTypesMap: [{}, Type.OBJECT],\n\n // Custom function to detect type of file\n fileValidateTypeDetectType: [null, Type.FUNCTION]\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","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\nvar stringIndexOf = uncurryThis(''.indexOf);\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~stringIndexOf(\n toString(requireObjectCoercible(this)),\n toString(notARegExp(searchString)),\n arguments.length > 1 ? arguments[1] : undefined\n );\n }\n});\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default(length) {\n return (0, _common.withParams)({\n type: 'maxLength',\n max: length\n }, function (value) {\n return !(0, _common.req)(value) || (0, _common.len)(value) <= length;\n });\n};\n\nexports.default = _default;","/*!\n * FilePondPluginImagePreview 4.6.11\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 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 = new URL(\n window.location.href.replace(window.location.hash, '')\n ).href;\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 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\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 // 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 (\n crop &&\n crop.aspectRatio &&\n image.crop &&\n image.crop.aspectRatio &&\n Math.abs(crop.aspectRatio - image.crop.aspectRatio) > 0.00001\n ) {\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 // 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 apis: ['height'],\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\n function(_ref15) {\n var root = _ref15.root;\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\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 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 // 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\n function(_ref6) {\n var root = _ref6.root,\n props = _ref6.props;\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 // this requestAnimationFrame nesting is horrible but it fixes an issue with 100hz displays on Chrome\n // https://github.com/pqina/filepond-plugin-image-preview/issues/57\n requestAnimationFrame(function() {\n root.dispatch('DID_FINISH_CALCULATE_PREVIEWSIZE', {\n id: props.id\n });\n });\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","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default() {\n for (var _len = arguments.length, validators = new Array(_len), _key = 0; _key < _len; _key++) {\n validators[_key] = arguments[_key];\n }\n\n return (0, _common.withParams)({\n type: 'and'\n }, function () {\n var _this = this;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return validators.length > 0 && validators.reduce(function (valid, fn) {\n return valid && fn.apply(_this, args);\n }, true);\n });\n};\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = (0, _common.regex)('alphaNum', /^[a-zA-Z0-9]*$/);\n\nexports.default = _default;","/*!\n * FilePondPluginFileValidateSize 2.2.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), (global.FilePondPluginFileValidateSize = factory()));\n})(this, function() {\n 'use strict';\n\n var plugin = function plugin(_ref) {\n var addFilter = _ref.addFilter,\n utils = _ref.utils;\n // get quick reference to Type utils\n var Type = utils.Type,\n replaceInString = utils.replaceInString,\n toNaturalFileSize = utils.toNaturalFileSize;\n\n // filtering if an item is allowed in hopper\n addFilter('ALLOW_HOPPER_ITEM', function(file, _ref2) {\n var query = _ref2.query;\n if (!query('GET_ALLOW_FILE_SIZE_VALIDATION')) {\n return true;\n }\n\n var sizeMax = query('GET_MAX_FILE_SIZE');\n if (sizeMax !== null && file.size > sizeMax) {\n return false;\n }\n\n var sizeMin = query('GET_MIN_FILE_SIZE');\n if (sizeMin !== null && file.size < sizeMin) {\n return false;\n }\n\n return true;\n });\n\n // called for each file that is loaded\n // right before it is set to the item state\n // should return a promise\n addFilter('LOAD_FILE', function(file, _ref3) {\n var query = _ref3.query;\n return new Promise(function(resolve, reject) {\n // if not allowed, all fine, exit\n if (!query('GET_ALLOW_FILE_SIZE_VALIDATION')) {\n return resolve(file);\n }\n\n // check if file should be filtered\n var fileFilter = query('GET_FILE_VALIDATE_SIZE_FILTER');\n if (fileFilter && !fileFilter(file)) {\n return resolve(file);\n }\n\n // reject or resolve based on file size\n var sizeMax = query('GET_MAX_FILE_SIZE');\n if (sizeMax !== null && file.size > sizeMax) {\n reject({\n status: {\n main: query('GET_LABEL_MAX_FILE_SIZE_EXCEEDED'),\n sub: replaceInString(query('GET_LABEL_MAX_FILE_SIZE'), {\n filesize: toNaturalFileSize(\n sizeMax,\n '.',\n query('GET_FILE_SIZE_BASE'),\n query('GET_FILE_SIZE_LABELS', query)\n ),\n }),\n },\n });\n\n return;\n }\n\n // reject or resolve based on file size\n var sizeMin = query('GET_MIN_FILE_SIZE');\n if (sizeMin !== null && file.size < sizeMin) {\n reject({\n status: {\n main: query('GET_LABEL_MIN_FILE_SIZE_EXCEEDED'),\n sub: replaceInString(query('GET_LABEL_MIN_FILE_SIZE'), {\n filesize: toNaturalFileSize(\n sizeMin,\n '.',\n query('GET_FILE_SIZE_BASE'),\n query('GET_FILE_SIZE_LABELS', query)\n ),\n }),\n },\n });\n\n return;\n }\n\n // returns the current option value\n var totalSizeMax = query('GET_MAX_TOTAL_FILE_SIZE');\n if (totalSizeMax !== null) {\n // get the current total file size\n var currentTotalSize = query('GET_ACTIVE_ITEMS').reduce(function(total, item) {\n return total + item.fileSize;\n }, 0);\n\n // get the size of the new file\n if (currentTotalSize > totalSizeMax) {\n reject({\n status: {\n main: query('GET_LABEL_MAX_TOTAL_FILE_SIZE_EXCEEDED'),\n sub: replaceInString(query('GET_LABEL_MAX_TOTAL_FILE_SIZE'), {\n filesize: toNaturalFileSize(\n totalSizeMax,\n '.',\n query('GET_FILE_SIZE_BASE'),\n query('GET_FILE_SIZE_LABELS', query)\n ),\n }),\n },\n });\n\n return;\n }\n }\n\n // file is fine, let's pass it back\n resolve(file);\n });\n });\n\n return {\n options: {\n // Enable or disable file type validation\n allowFileSizeValidation: [true, Type.BOOLEAN],\n\n // Max individual file size in bytes\n maxFileSize: [null, Type.INT],\n\n // Min individual file size in bytes\n minFileSize: [null, Type.INT],\n\n // Max total file size in bytes\n maxTotalFileSize: [null, Type.INT],\n\n // Filter the files that need to be validated for size\n fileValidateSizeFilter: [null, Type.FUNCTION],\n\n // error labels\n labelMinFileSizeExceeded: ['File is too small', Type.STRING],\n labelMinFileSize: ['Minimum file size is {filesize}', Type.STRING],\n\n labelMaxFileSizeExceeded: ['File is too large', Type.STRING],\n labelMaxFileSize: ['Maximum file size is {filesize}', Type.STRING],\n\n labelMaxTotalFileSizeExceeded: ['Maximum total size exceeded', Type.STRING],\n labelMaxTotalFileSize: ['Maximum total file size is {filesize}', Type.STRING],\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 = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n if (isBrowser) {\n document.dispatchEvent(new CustomEvent('FilePond:pluginloaded', { detail: plugin }));\n }\n\n return plugin;\n});\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = (0, _common.regex)('numeric', /^[0-9]*$/);\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default(max) {\n return (0, _common.withParams)({\n type: 'maxValue',\n max: max\n }, function (value) {\n return !(0, _common.req)(value) || (!/\\s/.test(value) || value instanceof Date) && +value <= +max;\n });\n};\n\nexports.default = _default;","/*!\n * FilePondPluginImageValidateSize 1.2.7\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.FilePondPluginImageValidateSize = factory()));\n})(this, function() {\n 'use strict';\n\n // test if file is of type image\n var isImage = function isImage(file) {\n return /^image/.test(file.type);\n };\n\n var getImageSize = function getImageSize(file) {\n return new Promise(function(resolve, reject) {\n var image = document.createElement('img');\n image.src = URL.createObjectURL(file);\n image.onerror = function(err) {\n clearInterval(intervalId);\n reject(err);\n };\n var intervalId = setInterval(function() {\n if (image.naturalWidth && image.naturalHeight) {\n clearInterval(intervalId);\n URL.revokeObjectURL(image.src);\n resolve({\n width: image.naturalWidth,\n height: image.naturalHeight\n });\n }\n }, 1);\n });\n };\n\n var plugin = function plugin(_ref) {\n var addFilter = _ref.addFilter,\n utils = _ref.utils;\n // get quick reference to Type utils\n var Type = utils.Type,\n replaceInString = utils.replaceInString,\n isFile = utils.isFile;\n\n // required file size\n var validateFile = function validateFile(file, bounds, measure) {\n return new Promise(function(resolve, reject) {\n var onReceiveSize = function onReceiveSize(_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n var minWidth = bounds.minWidth,\n minHeight = bounds.minHeight,\n maxWidth = bounds.maxWidth,\n maxHeight = bounds.maxHeight,\n minResolution = bounds.minResolution,\n maxResolution = bounds.maxResolution;\n\n var resolution = width * height;\n\n // validation result\n if (width < minWidth || height < minHeight) {\n reject('TOO_SMALL');\n } else if (width > maxWidth || height > maxHeight) {\n reject('TOO_BIG');\n } else if (minResolution !== null && resolution < minResolution) {\n reject('TOO_LOW_RES');\n } else if (maxResolution !== null && resolution > maxResolution) {\n reject('TOO_HIGH_RES');\n }\n\n // all is well\n resolve();\n };\n\n getImageSize(file)\n .then(onReceiveSize)\n .catch(function() {\n // no custom measure method supplied, exit here\n if (!measure) {\n reject();\n return;\n }\n\n // try fallback if defined by user, else reject\n measure(file, bounds)\n .then(onReceiveSize)\n .catch(function() {\n return reject();\n });\n });\n });\n };\n\n // called for each file that is loaded\n // right before it is set to the item state\n // should return a promise\n addFilter('LOAD_FILE', function(file, _ref3) {\n var query = _ref3.query;\n return new Promise(function(resolve, reject) {\n if (\n !isFile(file) ||\n !isImage(file) ||\n !query('GET_ALLOW_IMAGE_VALIDATE_SIZE')\n ) {\n resolve(file);\n return;\n }\n\n // get required dimensions\n var bounds = {\n minWidth: query('GET_IMAGE_VALIDATE_SIZE_MIN_WIDTH'),\n minHeight: query('GET_IMAGE_VALIDATE_SIZE_MIN_HEIGHT'),\n maxWidth: query('GET_IMAGE_VALIDATE_SIZE_MAX_WIDTH'),\n maxHeight: query('GET_IMAGE_VALIDATE_SIZE_MAX_HEIGHT'),\n minResolution: query('GET_IMAGE_VALIDATE_SIZE_MIN_RESOLUTION'),\n maxResolution: query('GET_IMAGE_VALIDATE_SIZE_MAX_RESOLUTION')\n };\n\n // get optional custom measure function\n var measure = query('GET_IMAGE_VALIDATE_SIZE_MEASURE');\n\n validateFile(file, bounds, measure)\n .then(function() {\n resolve(file);\n })\n .catch(function(error) {\n var status = error\n ? {\n TOO_SMALL: {\n label: query(\n 'GET_IMAGE_VALIDATE_SIZE_LABEL_IMAGE_SIZE_TOO_SMALL'\n ),\n details: query(\n 'GET_IMAGE_VALIDATE_SIZE_LABEL_EXPECTED_MIN_SIZE'\n )\n },\n\n TOO_BIG: {\n label: query(\n 'GET_IMAGE_VALIDATE_SIZE_LABEL_IMAGE_SIZE_TOO_BIG'\n ),\n details: query(\n 'GET_IMAGE_VALIDATE_SIZE_LABEL_EXPECTED_MAX_SIZE'\n )\n },\n\n TOO_LOW_RES: {\n label: query(\n 'GET_IMAGE_VALIDATE_SIZE_LABEL_IMAGE_RESOLUTION_TOO_LOW'\n ),\n details: query(\n 'GET_IMAGE_VALIDATE_SIZE_LABEL_EXPECTED_MIN_RESOLUTION'\n )\n },\n\n TOO_HIGH_RES: {\n label: query(\n 'GET_IMAGE_VALIDATE_SIZE_LABEL_IMAGE_RESOLUTION_TOO_HIGH'\n ),\n details: query(\n 'GET_IMAGE_VALIDATE_SIZE_LABEL_EXPECTED_MAX_RESOLUTION'\n )\n }\n }[error]\n : {\n label: query('GET_IMAGE_VALIDATE_SIZE_LABEL_FORMAT_ERROR'),\n details: file.type\n };\n\n reject({\n status: {\n main: status.label,\n sub: error\n ? replaceInString(status.details, bounds)\n : status.details\n }\n });\n });\n });\n });\n\n // expose plugin\n return {\n // default options\n options: {\n // Enable or disable file type validation\n allowImageValidateSize: [true, Type.BOOLEAN],\n\n // Error thrown when image can not be loaded\n imageValidateSizeLabelFormatError: [\n 'Image type not supported',\n Type.STRING\n ],\n\n // Custom function to use as image measure\n imageValidateSizeMeasure: [null, Type.FUNCTION],\n\n // Required amount of pixels in the image\n imageValidateSizeMinResolution: [null, Type.INT],\n imageValidateSizeMaxResolution: [null, Type.INT],\n imageValidateSizeLabelImageResolutionTooLow: [\n 'Resolution is too low',\n Type.STRING\n ],\n imageValidateSizeLabelImageResolutionTooHigh: [\n 'Resolution is too high',\n Type.STRING\n ],\n imageValidateSizeLabelExpectedMinResolution: [\n 'Minimum resolution is {minResolution}',\n Type.STRING\n ],\n imageValidateSizeLabelExpectedMaxResolution: [\n 'Maximum resolution is {maxResolution}',\n Type.STRING\n ],\n\n // Required dimensions\n imageValidateSizeMinWidth: [1, Type.INT], // needs to be at least one pixel\n imageValidateSizeMinHeight: [1, Type.INT],\n imageValidateSizeMaxWidth: [65535, Type.INT], // maximum size of JPEG, fine for now I guess\n imageValidateSizeMaxHeight: [65535, Type.INT],\n\n // Label to show when an image is too small or image is too big\n imageValidateSizeLabelImageSizeTooSmall: [\n 'Image is too small',\n Type.STRING\n ],\n imageValidateSizeLabelImageSizeTooBig: [\n 'Image is too big',\n Type.STRING\n ],\n imageValidateSizeLabelExpectedMinSize: [\n 'Minimum size is {minWidth} × {minHeight}',\n Type.STRING\n ],\n imageValidateSizeLabelExpectedMaxSize: [\n 'Maximum size is {maxWidth} × {maxHeight}',\n Type.STRING\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","var isRegExp = require('../internals/is-regexp');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw $TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar emailRegex = /^(?:[A-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[A-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9]{2,}(?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/;\n\nvar _default = (0, _common.regex)('email', emailRegex);\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default(length) {\n return (0, _common.withParams)({\n type: 'minLength',\n min: length\n }, function (value) {\n return !(0, _common.req)(value) || (0, _common.len)(value) >= length;\n });\n};\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = (0, _common.regex)('alpha', /^[a-zA-Z]*$/);\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default(validator) {\n return (0, _common.withParams)({\n type: 'not'\n }, function (value, vm) {\n return !(0, _common.req)(value) || !validator.call(this, value, vm);\n });\n};\n\nexports.default = _default;","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('file-pond',{ref:_vm.refId,attrs:{\"name\":\"filepond\",\"label-idle\":_vm.allowMultiple ? _vm.$t('label.drop-files') : _vm.$t('label.drop-file'),\"required\":_vm.required,\"allow-multiple\":_vm.allowMultiple,\"accepted-file-types\":_vm.acceptedFileTypes,\"image-validate-size-min-width\":_vm.minWidth,\"image-validate-size-max-width\":_vm.maxWidth,\"image-validate-size-min-height\":_vm.minHeight,\"image-validate-size-max-height\":_vm.maxHeight,\"allow-file-size-validation\":_vm.allowFileSizeValidation,\"min-file-size\":_vm.minFileSize,\"max-file-size\":_vm.maxFileSize,\"max-total-file-size\":_vm.maxTotalFileSize,\"allow-image-crop\":_vm.allowImageCrop,\"image-crop-aspect-ratio\":_vm.imageCropAspectRatio,\"server\":{\n process: _vm.process,\n load: {\n url: (_vm.baseURL + \"/api/v2/image/do/\"),\n method: 'GET',\n },\n revert: {\n url: (_vm.baseURL + \"/api/v1/file/\"),\n method: 'DELETE',\n headers: {\n Authorization: (\"Bearer \" + (this.token.accessToken)),\n },\n },\n },\"init\":_vm.init,\"files\":_vm.files,\"credits\":\"false\"},on:{\"removefile\":_vm.remove}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n \n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filepond.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filepond.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./filepond.vue?vue&type=template&id=77cad3f0&\"\nimport script from \"./filepond.vue?vue&type=script&lang=js&\"\nexport * from \"./filepond.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar urlRegex = /^(?:(?:https?|ftp):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))(?::\\d{2,5})?(?:[/?#]\\S*)?$/i;\n\nvar _default = (0, _common.regex)('url', urlRegex);\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"withParams\", {\n enumerable: true,\n get: function get() {\n return _withParams.default;\n }\n});\nexports.regex = exports.ref = exports.len = exports.req = void 0;\n\nvar _withParams = _interopRequireDefault(require(\"../withParams\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar req = function req(value) {\n if (Array.isArray(value)) return !!value.length;\n\n if (value === undefined || value === null) {\n return false;\n }\n\n if (value === false) {\n return true;\n }\n\n if (value instanceof Date) {\n return !isNaN(value.getTime());\n }\n\n if (_typeof(value) === 'object') {\n for (var _ in value) {\n return true;\n }\n\n return false;\n }\n\n return !!String(value).length;\n};\n\nexports.req = req;\n\nvar len = function len(value) {\n if (Array.isArray(value)) return value.length;\n\n if (_typeof(value) === 'object') {\n return Object.keys(value).length;\n }\n\n return String(value).length;\n};\n\nexports.len = len;\n\nvar ref = function ref(reference, vm, parentVm) {\n return typeof reference === 'function' ? reference.call(vm, parentVm) : parentVm[reference];\n};\n\nexports.ref = ref;\n\nvar regex = function regex(type, expr) {\n return (0, _withParams.default)({\n type: type\n }, function (value) {\n return !req(value) || expr.test(value);\n });\n};\n\nexports.regex = regex;","/*!\n * FilePondPluginImageExifOrientation 1.0.11\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.FilePondPluginImageExifOrientation = factory()));\n})(this, function() {\n 'use strict';\n\n // test if file is of type image\n var isJPEG = function isJPEG(file) {\n return /^image\\/jpeg/.test(file.type);\n };\n\n var Marker = {\n JPEG: 0xffd8,\n APP1: 0xffe1,\n EXIF: 0x45786966,\n TIFF: 0x4949,\n Orientation: 0x0112,\n Unknown: 0xff00\n };\n\n var getUint16 = function getUint16(view, offset) {\n var little =\n arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n return view.getUint16(offset, little);\n };\n var getUint32 = function getUint32(view, offset) {\n var little =\n arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n return view.getUint32(offset, little);\n };\n\n var getImageOrientation = function getImageOrientation(file) {\n return new Promise(function(resolve, reject) {\n var reader = new FileReader();\n reader.onload = function(e) {\n var view = new DataView(e.target.result);\n\n // Every JPEG file starts from binary value '0xFFD8'\n if (getUint16(view, 0) !== Marker.JPEG) {\n // This aint no JPEG\n resolve(-1);\n return;\n }\n\n var length = view.byteLength;\n var offset = 2;\n\n while (offset < length) {\n var marker = getUint16(view, offset);\n offset += 2;\n\n // There's our APP1 Marker\n if (marker === Marker.APP1) {\n if (getUint32(view, (offset += 2)) !== Marker.EXIF) {\n // no EXIF info defined\n break;\n }\n\n // Get TIFF Header\n var little = getUint16(view, (offset += 6)) === Marker.TIFF;\n offset += getUint32(view, offset + 4, little);\n\n var tags = getUint16(view, offset, little);\n offset += 2;\n\n for (var i = 0; i < tags; i++) {\n // found the orientation tag\n if (\n getUint16(view, offset + i * 12, little) === Marker.Orientation\n ) {\n resolve(getUint16(view, offset + i * 12 + 8, little));\n\n return;\n }\n }\n } else if ((marker & Marker.Unknown) !== Marker.Unknown) {\n // Invalid\n break;\n } else {\n offset += getUint16(view, offset);\n }\n }\n\n // Nothing found\n resolve(-1);\n };\n\n // we don't need to read the entire file to get the orientation\n reader.readAsArrayBuffer(file.slice(0, 64 * 1024));\n });\n };\n\n var IS_BROWSER = (function() {\n return (\n typeof window !== 'undefined' && typeof window.document !== 'undefined'\n );\n })();\n var isBrowser = function isBrowser() {\n return IS_BROWSER;\n };\n\n // 2x1 pixel image 90CW rotated with orientation header\n var testSrc =\n 'data:image/jpg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4QA6RXhpZgAATU0AKgAAAAgAAwESAAMAAAABAAYAAAEoAAMAAAABAAIAAAITAAMAAAABAAEAAAAAAAD/2wBDAP//////////////////////////////////////////////////////////////////////////////////////wAALCAABAAIBASIA/8QAJgABAAAAAAAAAAAAAAAAAAAAAxABAAAAAAAAAAAAAAAAAAAAAP/aAAgBAQAAPwBH/9k=';\n\n // should correct orientation if is presented in landscape, in which case the browser doesn't autocorrect\n var shouldCorrect = undefined;\n var testImage = isBrowser() ? new Image() : {};\n testImage.onload = function() {\n return (shouldCorrect = testImage.naturalWidth > testImage.naturalHeight);\n };\n testImage.src = testSrc;\n\n var shouldCorrectImageExifOrientation = function shouldCorrectImageExifOrientation() {\n return shouldCorrect;\n };\n\n /**\n * Read Image Orientation Plugin\n */\n var plugin = function plugin(_ref) {\n var addFilter = _ref.addFilter,\n utils = _ref.utils;\n var Type = utils.Type,\n isFile = utils.isFile;\n\n // subscribe to file load and append required info\n addFilter('DID_LOAD_ITEM', function(item, _ref2) {\n var query = _ref2.query;\n return new Promise(function(resolve, reject) {\n // get file reference\n var file = item.file;\n\n // if this is not a jpeg image we are not interested\n if (\n !isFile(file) ||\n !isJPEG(file) ||\n !query('GET_ALLOW_IMAGE_EXIF_ORIENTATION') ||\n !shouldCorrectImageExifOrientation()\n ) {\n // continue with the unaltered dataset\n return resolve(item);\n }\n\n // get orientation from exif data\n getImageOrientation(file).then(function(orientation) {\n item.setMetadata('exif', { orientation: orientation });\n resolve(item);\n });\n });\n });\n\n // Expose plugin options\n return {\n options: {\n // Enable or disable image orientation reading\n allowImageExifOrientation: [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$1 =\n typeof window !== 'undefined' && typeof window.document !== 'undefined';\n if (isBrowser$1) {\n document.dispatchEvent(\n new CustomEvent('FilePond:pluginloaded', { detail: plugin })\n );\n }\n\n return plugin;\n});\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar withParams = process.env.BUILD === 'web' ? require('./withParamsBrowser').withParams : require('./params').withParams;\nvar _default = withParams;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default() {\n var separator = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ':';\n return (0, _common.withParams)({\n type: 'macAddress'\n }, function (value) {\n if (!(0, _common.req)(value)) {\n return true;\n }\n\n if (typeof value !== 'string') {\n return false;\n }\n\n var parts = typeof separator === 'string' && separator !== '' ? value.split(separator) : value.length === 12 || value.length === 16 ? value.match(/.{2}/g) : null;\n return parts !== null && (parts.length === 6 || parts.length === 8) && parts.every(hexValid);\n });\n};\n\nexports.default = _default;\n\nvar hexValid = function hexValid(hex) {\n return hex.toLowerCase().match(/^[0-9a-f]{2}$/);\n};","/*!\n * FilePondPluginImageCrop 2.0.6\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), (global.FilePondPluginImageCrop = factory()));\n})(this, function() {\n 'use strict';\n\n var isImage = function isImage(file) {\n return /^image/.test(file.type);\n };\n\n /**\n * Image Auto Crop Plugin\n */\n var plugin = function plugin(_ref) {\n var addFilter = _ref.addFilter,\n utils = _ref.utils;\n var Type = utils.Type,\n isFile = utils.isFile,\n getNumericAspectRatioFromString = utils.getNumericAspectRatioFromString;\n\n // tests if crop is allowed on this item\n var allowCrop = function allowCrop(item, query) {\n return !(!isImage(item.file) || !query('GET_ALLOW_IMAGE_CROP'));\n };\n\n var isObject = function isObject(value) {\n return typeof value === 'object';\n };\n\n var isNumber = function isNumber(value) {\n return typeof value === 'number';\n };\n\n var updateCrop = function updateCrop(item, obj) {\n return item.setMetadata(\n 'crop',\n Object.assign({}, item.getMetadata('crop'), obj)\n );\n };\n\n // extend item methods\n addFilter('DID_CREATE_ITEM', function(item, _ref2) {\n var query = _ref2.query;\n\n item.extend('setImageCrop', function(crop) {\n if (!allowCrop(item, query) || !isObject(center)) return;\n item.setMetadata('crop', crop);\n return crop;\n });\n\n item.extend('setImageCropCenter', function(center) {\n if (!allowCrop(item, query) || !isObject(center)) return;\n return updateCrop(item, { center: center });\n });\n\n item.extend('setImageCropZoom', function(zoom) {\n if (!allowCrop(item, query) || !isNumber(zoom)) return;\n return updateCrop(item, { zoom: Math.max(1, zoom) });\n });\n\n item.extend('setImageCropRotation', function(rotation) {\n if (!allowCrop(item, query) || !isNumber(rotation)) return;\n return updateCrop(item, { rotation: rotation });\n });\n\n item.extend('setImageCropFlip', function(flip) {\n if (!allowCrop(item, query) || !isObject(flip)) return;\n return updateCrop(item, { flip: flip });\n });\n\n item.extend('setImageCropAspectRatio', function(newAspectRatio) {\n if (!allowCrop(item, query) || typeof newAspectRatio === 'undefined')\n return;\n\n var currentCrop = item.getMetadata('crop');\n\n var aspectRatio = getNumericAspectRatioFromString(newAspectRatio);\n\n var newCrop = {\n center: {\n x: 0.5,\n y: 0.5\n },\n\n flip: currentCrop\n ? Object.assign({}, currentCrop.flip)\n : {\n horizontal: false,\n vertical: false\n },\n\n rotation: 0,\n zoom: 1,\n aspectRatio: aspectRatio\n };\n\n item.setMetadata('crop', newCrop);\n\n return newCrop;\n });\n });\n\n // subscribe to file transformations\n addFilter('DID_LOAD_ITEM', function(item, _ref3) {\n var query = _ref3.query;\n return new Promise(function(resolve, reject) {\n // get file reference\n var file = item.file;\n\n // if this is not an image we do not have any business cropping it and we'll continue with the unaltered dataset\n if (!isFile(file) || !isImage(file) || !query('GET_ALLOW_IMAGE_CROP')) {\n return resolve(item);\n }\n\n // already has crop metadata set?\n var crop = item.getMetadata('crop');\n if (crop) {\n return resolve(item);\n }\n\n // get the required aspect ratio and exit if it's not set\n var humanAspectRatio = query('GET_IMAGE_CROP_ASPECT_RATIO');\n\n // set default crop rectangle\n item.setMetadata('crop', {\n center: {\n x: 0.5,\n y: 0.5\n },\n\n flip: {\n horizontal: false,\n vertical: false\n },\n\n rotation: 0,\n zoom: 1,\n aspectRatio: humanAspectRatio\n ? getNumericAspectRatioFromString(humanAspectRatio)\n : null\n });\n\n // we done!\n resolve(item);\n });\n });\n\n // Expose plugin options\n return {\n options: {\n // enable or disable image cropping\n allowImageCrop: [true, Type.BOOLEAN],\n\n // the aspect ratio of the crop ('1:1', '16:9', etc)\n imageCropAspectRatio: [null, Type.STRING]\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","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default(prop) {\n return (0, _common.withParams)({\n type: 'requiredIf',\n prop: prop\n }, function (value, parentVm) {\n return (0, _common.ref)(prop, this, parentVm) ? (0, _common.req)(value) : true;\n });\n};\n\nexports.default = _default;","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n var regexp = /./;\n try {\n '/./'[METHOD_NAME](regexp);\n } catch (error1) {\n try {\n regexp[MATCH] = false;\n return '/./'[METHOD_NAME](regexp);\n } catch (error2) { /* empty */ }\n } return false;\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"alpha\", {\n enumerable: true,\n get: function get() {\n return _alpha.default;\n }\n});\nObject.defineProperty(exports, \"alphaNum\", {\n enumerable: true,\n get: function get() {\n return _alphaNum.default;\n }\n});\nObject.defineProperty(exports, \"numeric\", {\n enumerable: true,\n get: function get() {\n return _numeric.default;\n }\n});\nObject.defineProperty(exports, \"between\", {\n enumerable: true,\n get: function get() {\n return _between.default;\n }\n});\nObject.defineProperty(exports, \"email\", {\n enumerable: true,\n get: function get() {\n return _email.default;\n }\n});\nObject.defineProperty(exports, \"ipAddress\", {\n enumerable: true,\n get: function get() {\n return _ipAddress.default;\n }\n});\nObject.defineProperty(exports, \"macAddress\", {\n enumerable: true,\n get: function get() {\n return _macAddress.default;\n }\n});\nObject.defineProperty(exports, \"maxLength\", {\n enumerable: true,\n get: function get() {\n return _maxLength.default;\n }\n});\nObject.defineProperty(exports, \"minLength\", {\n enumerable: true,\n get: function get() {\n return _minLength.default;\n }\n});\nObject.defineProperty(exports, \"required\", {\n enumerable: true,\n get: function get() {\n return _required.default;\n }\n});\nObject.defineProperty(exports, \"requiredIf\", {\n enumerable: true,\n get: function get() {\n return _requiredIf.default;\n }\n});\nObject.defineProperty(exports, \"requiredUnless\", {\n enumerable: true,\n get: function get() {\n return _requiredUnless.default;\n }\n});\nObject.defineProperty(exports, \"sameAs\", {\n enumerable: true,\n get: function get() {\n return _sameAs.default;\n }\n});\nObject.defineProperty(exports, \"url\", {\n enumerable: true,\n get: function get() {\n return _url.default;\n }\n});\nObject.defineProperty(exports, \"or\", {\n enumerable: true,\n get: function get() {\n return _or.default;\n }\n});\nObject.defineProperty(exports, \"and\", {\n enumerable: true,\n get: function get() {\n return _and.default;\n }\n});\nObject.defineProperty(exports, \"not\", {\n enumerable: true,\n get: function get() {\n return _not.default;\n }\n});\nObject.defineProperty(exports, \"minValue\", {\n enumerable: true,\n get: function get() {\n return _minValue.default;\n }\n});\nObject.defineProperty(exports, \"maxValue\", {\n enumerable: true,\n get: function get() {\n return _maxValue.default;\n }\n});\nObject.defineProperty(exports, \"integer\", {\n enumerable: true,\n get: function get() {\n return _integer.default;\n }\n});\nObject.defineProperty(exports, \"decimal\", {\n enumerable: true,\n get: function get() {\n return _decimal.default;\n }\n});\nexports.helpers = void 0;\n\nvar _alpha = _interopRequireDefault(require(\"./alpha\"));\n\nvar _alphaNum = _interopRequireDefault(require(\"./alphaNum\"));\n\nvar _numeric = _interopRequireDefault(require(\"./numeric\"));\n\nvar _between = _interopRequireDefault(require(\"./between\"));\n\nvar _email = _interopRequireDefault(require(\"./email\"));\n\nvar _ipAddress = _interopRequireDefault(require(\"./ipAddress\"));\n\nvar _macAddress = _interopRequireDefault(require(\"./macAddress\"));\n\nvar _maxLength = _interopRequireDefault(require(\"./maxLength\"));\n\nvar _minLength = _interopRequireDefault(require(\"./minLength\"));\n\nvar _required = _interopRequireDefault(require(\"./required\"));\n\nvar _requiredIf = _interopRequireDefault(require(\"./requiredIf\"));\n\nvar _requiredUnless = _interopRequireDefault(require(\"./requiredUnless\"));\n\nvar _sameAs = _interopRequireDefault(require(\"./sameAs\"));\n\nvar _url = _interopRequireDefault(require(\"./url\"));\n\nvar _or = _interopRequireDefault(require(\"./or\"));\n\nvar _and = _interopRequireDefault(require(\"./and\"));\n\nvar _not = _interopRequireDefault(require(\"./not\"));\n\nvar _minValue = _interopRequireDefault(require(\"./minValue\"));\n\nvar _maxValue = _interopRequireDefault(require(\"./maxValue\"));\n\nvar _integer = _interopRequireDefault(require(\"./integer\"));\n\nvar _decimal = _interopRequireDefault(require(\"./decimal\"));\n\nvar helpers = _interopRequireWildcard(require(\"./common\"));\n\nexports.helpers = helpers;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default(equalTo) {\n return (0, _common.withParams)({\n type: 'sameAs',\n eq: equalTo\n }, function (value, parentVm) {\n return value === (0, _common.ref)(equalTo, this, parentVm);\n });\n};\n\nexports.default = _default;","/*!\n * FilePond 4.30.4\n * Licensed under MIT, https://opensource.org/licenses/MIT/\n * Please visit https://pqina.nl/filepond/ for details.\n */\n\n/* eslint-disable */\n\n(function(global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n ? factory(exports)\n : typeof define === 'function' && define.amd\n ? define(['exports'], factory)\n : ((global = global || self), factory((global.FilePond = {})));\n})(this, function(exports) {\n 'use strict';\n\n var isNode = function isNode(value) {\n return value instanceof HTMLElement;\n };\n\n var createStore = function createStore(initialState) {\n var queries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var actions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n // internal state\n var state = Object.assign({}, initialState);\n\n // contains all actions for next frame, is clear when actions are requested\n var actionQueue = [];\n var dispatchQueue = [];\n\n // returns a duplicate of the current state\n var getState = function getState() {\n return Object.assign({}, state);\n };\n\n // returns a duplicate of the actions array and clears the actions array\n var processActionQueue = function processActionQueue() {\n // create copy of actions queue\n var queue = [].concat(actionQueue);\n\n // clear actions queue (we don't want no double actions)\n actionQueue.length = 0;\n\n return queue;\n };\n\n // processes actions that might block the main UI thread\n var processDispatchQueue = function processDispatchQueue() {\n // create copy of actions queue\n var queue = [].concat(dispatchQueue);\n\n // clear actions queue (we don't want no double actions)\n dispatchQueue.length = 0;\n\n // now dispatch these actions\n queue.forEach(function(_ref) {\n var type = _ref.type,\n data = _ref.data;\n dispatch(type, data);\n });\n };\n\n // adds a new action, calls its handler and\n var dispatch = function dispatch(type, data, isBlocking) {\n // is blocking action (should never block if document is hidden)\n if (isBlocking && !document.hidden) {\n dispatchQueue.push({ type: type, data: data });\n return;\n }\n\n // if this action has a handler, handle the action\n if (actionHandlers[type]) {\n actionHandlers[type](data);\n }\n\n // now add action\n actionQueue.push({\n type: type,\n data: data,\n });\n };\n\n var query = function query(str) {\n var _queryHandles;\n for (\n var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1;\n _key < _len;\n _key++\n ) {\n args[_key - 1] = arguments[_key];\n }\n return queryHandles[str]\n ? (_queryHandles = queryHandles)[str].apply(_queryHandles, args)\n : null;\n };\n\n var api = {\n getState: getState,\n processActionQueue: processActionQueue,\n processDispatchQueue: processDispatchQueue,\n dispatch: dispatch,\n query: query,\n };\n\n var queryHandles = {};\n queries.forEach(function(query) {\n queryHandles = Object.assign({}, query(state), {}, queryHandles);\n });\n\n var actionHandlers = {};\n actions.forEach(function(action) {\n actionHandlers = Object.assign({}, action(dispatch, query, state), {}, actionHandlers);\n });\n\n return api;\n };\n\n var defineProperty = function defineProperty(obj, property, definition) {\n if (typeof definition === 'function') {\n obj[property] = definition;\n return;\n }\n Object.defineProperty(obj, property, Object.assign({}, definition));\n };\n\n var forin = function forin(obj, cb) {\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) {\n continue;\n }\n\n cb(key, obj[key]);\n }\n };\n\n var createObject = function createObject(definition) {\n var obj = {};\n forin(definition, function(property) {\n defineProperty(obj, property, definition[property]);\n });\n return obj;\n };\n\n var attr = function attr(node, name) {\n var value = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n if (value === null) {\n return node.getAttribute(name) || node.hasAttribute(name);\n }\n node.setAttribute(name, value);\n };\n\n var ns = 'http://www.w3.org/2000/svg';\n var svgElements = ['svg', 'path']; // only svg elements used\n\n var isSVGElement = function isSVGElement(tag) {\n return svgElements.includes(tag);\n };\n\n var createElement = function createElement(tag, className) {\n var attributes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n if (typeof className === 'object') {\n attributes = className;\n className = null;\n }\n var element = isSVGElement(tag)\n ? document.createElementNS(ns, tag)\n : document.createElement(tag);\n if (className) {\n if (isSVGElement(tag)) {\n attr(element, 'class', className);\n } else {\n element.className = className;\n }\n }\n forin(attributes, function(name, value) {\n attr(element, name, value);\n });\n return element;\n };\n\n var appendChild = function appendChild(parent) {\n return function(child, index) {\n if (typeof index !== 'undefined' && parent.children[index]) {\n parent.insertBefore(child, parent.children[index]);\n } else {\n parent.appendChild(child);\n }\n };\n };\n\n var appendChildView = function appendChildView(parent, childViews) {\n return function(view, index) {\n if (typeof index !== 'undefined') {\n childViews.splice(index, 0, view);\n } else {\n childViews.push(view);\n }\n\n return view;\n };\n };\n\n var removeChildView = function removeChildView(parent, childViews) {\n return function(view) {\n // remove from child views\n childViews.splice(childViews.indexOf(view), 1);\n\n // remove the element\n if (view.element.parentNode) {\n parent.removeChild(view.element);\n }\n\n return view;\n };\n };\n\n var IS_BROWSER = (function() {\n return typeof window !== 'undefined' && typeof window.document !== 'undefined';\n })();\n var isBrowser = function isBrowser() {\n return IS_BROWSER;\n };\n\n var testElement = isBrowser() ? createElement('svg') : {};\n var getChildCount =\n 'children' in testElement\n ? function(el) {\n return el.children.length;\n }\n : function(el) {\n return el.childNodes.length;\n };\n\n var getViewRect = function getViewRect(elementRect, childViews, offset, scale) {\n var left = offset[0] || elementRect.left;\n var top = offset[1] || elementRect.top;\n var right = left + elementRect.width;\n var bottom = top + elementRect.height * (scale[1] || 1);\n\n var rect = {\n // the rectangle of the element itself\n element: Object.assign({}, elementRect),\n\n // the rectangle of the element expanded to contain its children, does not include any margins\n inner: {\n left: elementRect.left,\n top: elementRect.top,\n right: elementRect.right,\n bottom: elementRect.bottom,\n },\n\n // the rectangle of the element expanded to contain its children including own margin and child margins\n // margins will be added after we've recalculated the size\n outer: {\n left: left,\n top: top,\n right: right,\n bottom: bottom,\n },\n };\n\n // expand rect to fit all child rectangles\n childViews\n .filter(function(childView) {\n return !childView.isRectIgnored();\n })\n .map(function(childView) {\n return childView.rect;\n })\n .forEach(function(childViewRect) {\n expandRect(rect.inner, Object.assign({}, childViewRect.inner));\n expandRect(rect.outer, Object.assign({}, childViewRect.outer));\n });\n\n // calculate inner width and height\n calculateRectSize(rect.inner);\n\n // append additional margin (top and left margins are included in top and left automatically)\n rect.outer.bottom += rect.element.marginBottom;\n rect.outer.right += rect.element.marginRight;\n\n // calculate outer width and height\n calculateRectSize(rect.outer);\n\n return rect;\n };\n\n var expandRect = function expandRect(parent, child) {\n // adjust for parent offset\n child.top += parent.top;\n child.right += parent.left;\n child.bottom += parent.top;\n child.left += parent.left;\n\n if (child.bottom > parent.bottom) {\n parent.bottom = child.bottom;\n }\n\n if (child.right > parent.right) {\n parent.right = child.right;\n }\n };\n\n var calculateRectSize = function calculateRectSize(rect) {\n rect.width = rect.right - rect.left;\n rect.height = rect.bottom - rect.top;\n };\n\n var isNumber = function isNumber(value) {\n return typeof value === 'number';\n };\n\n /**\n * Determines if position is at destination\n * @param position\n * @param destination\n * @param velocity\n * @param errorMargin\n * @returns {boolean}\n */\n var thereYet = function thereYet(position, destination, velocity) {\n var errorMargin = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.001;\n return Math.abs(position - destination) < errorMargin && Math.abs(velocity) < errorMargin;\n };\n\n /**\n * Spring animation\n */\n var spring =\n // default options\n function spring() // method definition\n {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$stiffness = _ref.stiffness,\n stiffness = _ref$stiffness === void 0 ? 0.5 : _ref$stiffness,\n _ref$damping = _ref.damping,\n damping = _ref$damping === void 0 ? 0.75 : _ref$damping,\n _ref$mass = _ref.mass,\n mass = _ref$mass === void 0 ? 10 : _ref$mass;\n var target = null;\n var position = null;\n var velocity = 0;\n var resting = false;\n\n // updates spring state\n var interpolate = function interpolate(ts, skipToEndState) {\n // in rest, don't animate\n if (resting) return;\n\n // need at least a target or position to do springy things\n if (!(isNumber(target) && isNumber(position))) {\n resting = true;\n velocity = 0;\n return;\n }\n\n // calculate spring force\n var f = -(position - target) * stiffness;\n\n // update velocity by adding force based on mass\n velocity += f / mass;\n\n // update position by adding velocity\n position += velocity;\n\n // slow down based on amount of damping\n velocity *= damping;\n\n // we've arrived if we're near target and our velocity is near zero\n if (thereYet(position, target, velocity) || skipToEndState) {\n position = target;\n velocity = 0;\n resting = true;\n\n // we done\n api.onupdate(position);\n api.oncomplete(position);\n } else {\n // progress update\n api.onupdate(position);\n }\n };\n\n /**\n * Set new target value\n * @param value\n */\n var setTarget = function setTarget(value) {\n // if currently has no position, set target and position to this value\n if (isNumber(value) && !isNumber(position)) {\n position = value;\n }\n\n // next target value will not be animated to\n if (target === null) {\n target = value;\n position = value;\n }\n\n // let start moving to target\n target = value;\n\n // already at target\n if (position === target || typeof target === 'undefined') {\n // now resting as target is current position, stop moving\n resting = true;\n velocity = 0;\n\n // done!\n api.onupdate(position);\n api.oncomplete(position);\n\n return;\n }\n\n resting = false;\n };\n\n // need 'api' to call onupdate callback\n var api = createObject({\n interpolate: interpolate,\n target: {\n set: setTarget,\n get: function get() {\n return target;\n },\n },\n\n resting: {\n get: function get() {\n return resting;\n },\n },\n\n onupdate: function onupdate(value) {},\n oncomplete: function oncomplete(value) {},\n });\n\n return api;\n };\n\n var easeLinear = function easeLinear(t) {\n return t;\n };\n var easeInOutQuad = function easeInOutQuad(t) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n };\n\n var tween =\n // default values\n function tween() // method definition\n {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$duration = _ref.duration,\n duration = _ref$duration === void 0 ? 500 : _ref$duration,\n _ref$easing = _ref.easing,\n easing = _ref$easing === void 0 ? easeInOutQuad : _ref$easing,\n _ref$delay = _ref.delay,\n delay = _ref$delay === void 0 ? 0 : _ref$delay;\n var start = null;\n var t;\n var p;\n var resting = true;\n var reverse = false;\n var target = null;\n\n var interpolate = function interpolate(ts, skipToEndState) {\n if (resting || target === null) return;\n\n if (start === null) {\n start = ts;\n }\n\n if (ts - start < delay) return;\n\n t = ts - start - delay;\n\n if (t >= duration || skipToEndState) {\n t = 1;\n p = reverse ? 0 : 1;\n api.onupdate(p * target);\n api.oncomplete(p * target);\n resting = true;\n } else {\n p = t / duration;\n api.onupdate((t >= 0 ? easing(reverse ? 1 - p : p) : 0) * target);\n }\n };\n\n // need 'api' to call onupdate callback\n var api = createObject({\n interpolate: interpolate,\n target: {\n get: function get() {\n return reverse ? 0 : target;\n },\n set: function set(value) {\n // is initial value\n if (target === null) {\n target = value;\n api.onupdate(value);\n api.oncomplete(value);\n return;\n }\n\n // want to tween to a smaller value and have a current value\n if (value < target) {\n target = 1;\n reverse = true;\n } else {\n // not tweening to a smaller value\n reverse = false;\n target = value;\n }\n\n // let's go!\n resting = false;\n start = null;\n },\n },\n\n resting: {\n get: function get() {\n return resting;\n },\n },\n\n onupdate: function onupdate(value) {},\n oncomplete: function oncomplete(value) {},\n });\n\n return api;\n };\n\n var animator = {\n spring: spring,\n tween: tween,\n };\n\n /*\n { type: 'spring', stiffness: .5, damping: .75, mass: 10 };\n { translation: { type: 'spring', ... }, ... }\n { translation: { x: { type: 'spring', ... } } }\n */\n var createAnimator = function createAnimator(definition, category, property) {\n // default is single definition\n // we check if transform is set, if so, we check if property is set\n var def =\n definition[category] && typeof definition[category][property] === 'object'\n ? definition[category][property]\n : definition[category] || definition;\n\n var type = typeof def === 'string' ? def : def.type;\n var props = typeof def === 'object' ? Object.assign({}, def) : {};\n\n return animator[type] ? animator[type](props) : null;\n };\n\n var addGetSet = function addGetSet(keys, obj, props) {\n var overwrite = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n obj = Array.isArray(obj) ? obj : [obj];\n obj.forEach(function(o) {\n keys.forEach(function(key) {\n var name = key;\n var getter = function getter() {\n return props[key];\n };\n var setter = function setter(value) {\n return (props[key] = value);\n };\n\n if (typeof key === 'object') {\n name = key.key;\n getter = key.getter || getter;\n setter = key.setter || setter;\n }\n\n if (o[name] && !overwrite) {\n return;\n }\n\n o[name] = {\n get: getter,\n set: setter,\n };\n });\n });\n };\n\n // add to state,\n // add getters and setters to internal and external api (if not set)\n // setup animators\n\n var animations = function animations(_ref) {\n var mixinConfig = _ref.mixinConfig,\n viewProps = _ref.viewProps,\n viewInternalAPI = _ref.viewInternalAPI,\n viewExternalAPI = _ref.viewExternalAPI;\n // initial properties\n var initialProps = Object.assign({}, viewProps);\n\n // list of all active animations\n var animations = [];\n\n // setup animators\n forin(mixinConfig, function(property, animation) {\n var animator = createAnimator(animation);\n if (!animator) {\n return;\n }\n\n // when the animator updates, update the view state value\n animator.onupdate = function(value) {\n viewProps[property] = value;\n };\n\n // set animator target\n animator.target = initialProps[property];\n\n // when value is set, set the animator target value\n var prop = {\n key: property,\n setter: function setter(value) {\n // if already at target, we done!\n if (animator.target === value) {\n return;\n }\n\n animator.target = value;\n },\n getter: function getter() {\n return viewProps[property];\n },\n };\n\n // add getters and setters\n addGetSet([prop], [viewInternalAPI, viewExternalAPI], viewProps, true);\n\n // add it to the list for easy updating from the _write method\n animations.push(animator);\n });\n\n // expose internal write api\n return {\n write: function write(ts) {\n var skipToEndState = document.hidden;\n var resting = true;\n animations.forEach(function(animation) {\n if (!animation.resting) resting = false;\n animation.interpolate(ts, skipToEndState);\n });\n return resting;\n },\n destroy: function destroy() {},\n };\n };\n\n var addEvent = function addEvent(element) {\n return function(type, fn) {\n element.addEventListener(type, fn);\n };\n };\n\n var removeEvent = function removeEvent(element) {\n return function(type, fn) {\n element.removeEventListener(type, fn);\n };\n };\n\n // mixin\n var listeners = function listeners(_ref) {\n var mixinConfig = _ref.mixinConfig,\n viewProps = _ref.viewProps,\n viewInternalAPI = _ref.viewInternalAPI,\n viewExternalAPI = _ref.viewExternalAPI,\n viewState = _ref.viewState,\n view = _ref.view;\n var events = [];\n\n var add = addEvent(view.element);\n var remove = removeEvent(view.element);\n\n viewExternalAPI.on = function(type, fn) {\n events.push({\n type: type,\n fn: fn,\n });\n\n add(type, fn);\n };\n\n viewExternalAPI.off = function(type, fn) {\n events.splice(\n events.findIndex(function(event) {\n return event.type === type && event.fn === fn;\n }),\n 1\n );\n\n remove(type, fn);\n };\n\n return {\n write: function write() {\n // not busy\n return true;\n },\n destroy: function destroy() {\n events.forEach(function(event) {\n remove(event.type, event.fn);\n });\n },\n };\n };\n\n // add to external api and link to props\n\n var apis = function apis(_ref) {\n var mixinConfig = _ref.mixinConfig,\n viewProps = _ref.viewProps,\n viewExternalAPI = _ref.viewExternalAPI;\n addGetSet(mixinConfig, viewExternalAPI, viewProps);\n };\n\n var isDefined = function isDefined(value) {\n return value != null;\n };\n\n // add to state,\n // add getters and setters to internal and external api (if not set)\n // set initial state based on props in viewProps\n // apply as transforms each frame\n\n var defaults = {\n opacity: 1,\n scaleX: 1,\n scaleY: 1,\n translateX: 0,\n translateY: 0,\n rotateX: 0,\n rotateY: 0,\n rotateZ: 0,\n originX: 0,\n originY: 0,\n };\n\n var styles = function styles(_ref) {\n var mixinConfig = _ref.mixinConfig,\n viewProps = _ref.viewProps,\n viewInternalAPI = _ref.viewInternalAPI,\n viewExternalAPI = _ref.viewExternalAPI,\n view = _ref.view;\n // initial props\n var initialProps = Object.assign({}, viewProps);\n\n // current props\n var currentProps = {};\n\n // we will add those properties to the external API and link them to the viewState\n addGetSet(mixinConfig, [viewInternalAPI, viewExternalAPI], viewProps);\n\n // override rect on internal and external rect getter so it takes in account transforms\n var getOffset = function getOffset() {\n return [viewProps['translateX'] || 0, viewProps['translateY'] || 0];\n };\n\n var getScale = function getScale() {\n return [viewProps['scaleX'] || 0, viewProps['scaleY'] || 0];\n };\n var getRect = function getRect() {\n return view.rect\n ? getViewRect(view.rect, view.childViews, getOffset(), getScale())\n : null;\n };\n viewInternalAPI.rect = { get: getRect };\n viewExternalAPI.rect = { get: getRect };\n\n // apply view props\n mixinConfig.forEach(function(key) {\n viewProps[key] =\n typeof initialProps[key] === 'undefined' ? defaults[key] : initialProps[key];\n });\n\n // expose api\n return {\n write: function write() {\n // see if props have changed\n if (!propsHaveChanged(currentProps, viewProps)) {\n return;\n }\n\n // moves element to correct position on screen\n applyStyles(view.element, viewProps);\n\n // store new transforms\n Object.assign(currentProps, Object.assign({}, viewProps));\n\n // no longer busy\n return true;\n },\n destroy: function destroy() {},\n };\n };\n\n var propsHaveChanged = function propsHaveChanged(currentProps, newProps) {\n // different amount of keys\n if (Object.keys(currentProps).length !== Object.keys(newProps).length) {\n return true;\n }\n\n // lets analyze the individual props\n for (var prop in newProps) {\n if (newProps[prop] !== currentProps[prop]) {\n return true;\n }\n }\n\n return false;\n };\n\n var applyStyles = function applyStyles(element, _ref2) {\n var opacity = _ref2.opacity,\n perspective = _ref2.perspective,\n translateX = _ref2.translateX,\n translateY = _ref2.translateY,\n scaleX = _ref2.scaleX,\n scaleY = _ref2.scaleY,\n rotateX = _ref2.rotateX,\n rotateY = _ref2.rotateY,\n rotateZ = _ref2.rotateZ,\n originX = _ref2.originX,\n originY = _ref2.originY,\n width = _ref2.width,\n height = _ref2.height;\n\n var transforms = '';\n var styles = '';\n\n // handle transform origin\n if (isDefined(originX) || isDefined(originY)) {\n styles += 'transform-origin: ' + (originX || 0) + 'px ' + (originY || 0) + 'px;';\n }\n\n // transform order is relevant\n // 0. perspective\n if (isDefined(perspective)) {\n transforms += 'perspective(' + perspective + 'px) ';\n }\n\n // 1. translate\n if (isDefined(translateX) || isDefined(translateY)) {\n transforms +=\n 'translate3d(' + (translateX || 0) + 'px, ' + (translateY || 0) + 'px, 0) ';\n }\n\n // 2. scale\n if (isDefined(scaleX) || isDefined(scaleY)) {\n transforms +=\n 'scale3d(' +\n (isDefined(scaleX) ? scaleX : 1) +\n ', ' +\n (isDefined(scaleY) ? scaleY : 1) +\n ', 1) ';\n }\n\n // 3. rotate\n if (isDefined(rotateZ)) {\n transforms += 'rotateZ(' + rotateZ + 'rad) ';\n }\n\n if (isDefined(rotateX)) {\n transforms += 'rotateX(' + rotateX + 'rad) ';\n }\n\n if (isDefined(rotateY)) {\n transforms += 'rotateY(' + rotateY + 'rad) ';\n }\n\n // add transforms\n if (transforms.length) {\n styles += 'transform:' + transforms + ';';\n }\n\n // add opacity\n if (isDefined(opacity)) {\n styles += 'opacity:' + opacity + ';';\n\n // if we reach zero, we make the element inaccessible\n if (opacity === 0) {\n styles += 'visibility:hidden;';\n }\n\n // if we're below 100% opacity this element can't be clicked\n if (opacity < 1) {\n styles += 'pointer-events:none;';\n }\n }\n\n // add height\n if (isDefined(height)) {\n styles += 'height:' + height + 'px;';\n }\n\n // add width\n if (isDefined(width)) {\n styles += 'width:' + width + 'px;';\n }\n\n // apply styles\n var elementCurrentStyle = element.elementCurrentStyle || '';\n\n // if new styles does not match current styles, lets update!\n if (styles.length !== elementCurrentStyle.length || styles !== elementCurrentStyle) {\n element.style.cssText = styles;\n // store current styles so we can compare them to new styles later on\n // _not_ getting the style value is faster\n element.elementCurrentStyle = styles;\n }\n };\n\n var Mixins = {\n styles: styles,\n listeners: listeners,\n animations: animations,\n apis: apis,\n };\n\n var updateRect = function updateRect() {\n var rect = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (!element.layoutCalculated) {\n rect.paddingTop = parseInt(style.paddingTop, 10) || 0;\n rect.marginTop = parseInt(style.marginTop, 10) || 0;\n rect.marginRight = parseInt(style.marginRight, 10) || 0;\n rect.marginBottom = parseInt(style.marginBottom, 10) || 0;\n rect.marginLeft = parseInt(style.marginLeft, 10) || 0;\n element.layoutCalculated = true;\n }\n\n rect.left = element.offsetLeft || 0;\n rect.top = element.offsetTop || 0;\n rect.width = element.offsetWidth || 0;\n rect.height = element.offsetHeight || 0;\n\n rect.right = rect.left + rect.width;\n rect.bottom = rect.top + rect.height;\n\n rect.scrollTop = element.scrollTop;\n\n rect.hidden = element.offsetParent === null;\n\n return rect;\n };\n\n var createView =\n // default view definition\n function createView() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$tag = _ref.tag,\n tag = _ref$tag === void 0 ? 'div' : _ref$tag,\n _ref$name = _ref.name,\n name = _ref$name === void 0 ? null : _ref$name,\n _ref$attributes = _ref.attributes,\n attributes = _ref$attributes === void 0 ? {} : _ref$attributes,\n _ref$read = _ref.read,\n read = _ref$read === void 0 ? function() {} : _ref$read,\n _ref$write = _ref.write,\n write = _ref$write === void 0 ? function() {} : _ref$write,\n _ref$create = _ref.create,\n create = _ref$create === void 0 ? function() {} : _ref$create,\n _ref$destroy = _ref.destroy,\n destroy = _ref$destroy === void 0 ? function() {} : _ref$destroy,\n _ref$filterFrameActio = _ref.filterFrameActionsForChild,\n filterFrameActionsForChild =\n _ref$filterFrameActio === void 0\n ? function(child, actions) {\n return actions;\n }\n : _ref$filterFrameActio,\n _ref$didCreateView = _ref.didCreateView,\n didCreateView = _ref$didCreateView === void 0 ? function() {} : _ref$didCreateView,\n _ref$didWriteView = _ref.didWriteView,\n didWriteView = _ref$didWriteView === void 0 ? function() {} : _ref$didWriteView,\n _ref$ignoreRect = _ref.ignoreRect,\n ignoreRect = _ref$ignoreRect === void 0 ? false : _ref$ignoreRect,\n _ref$ignoreRectUpdate = _ref.ignoreRectUpdate,\n ignoreRectUpdate = _ref$ignoreRectUpdate === void 0 ? false : _ref$ignoreRectUpdate,\n _ref$mixins = _ref.mixins,\n mixins = _ref$mixins === void 0 ? [] : _ref$mixins;\n return function(\n // each view requires reference to store\n store\n ) {\n var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n // root element should not be changed\n var element = createElement(tag, 'filepond--' + name, attributes);\n\n // style reference should also not be changed\n var style = window.getComputedStyle(element, null);\n\n // element rectangle\n var rect = updateRect();\n var frameRect = null;\n\n // rest state\n var isResting = false;\n\n // pretty self explanatory\n var childViews = [];\n\n // loaded mixins\n var activeMixins = [];\n\n // references to created children\n var ref = {};\n\n // state used for each instance\n var state = {};\n\n // list of writers that will be called to update this view\n var writers = [\n write, // default writer\n ];\n\n var readers = [\n read, // default reader\n ];\n\n var destroyers = [\n destroy, // default destroy\n ];\n\n // core view methods\n var getElement = function getElement() {\n return element;\n };\n var getChildViews = function getChildViews() {\n return childViews.concat();\n };\n var getReference = function getReference() {\n return ref;\n };\n var createChildView = function createChildView(store) {\n return function(view, props) {\n return view(store, props);\n };\n };\n var getRect = function getRect() {\n if (frameRect) {\n return frameRect;\n }\n frameRect = getViewRect(rect, childViews, [0, 0], [1, 1]);\n return frameRect;\n };\n var getStyle = function getStyle() {\n return style;\n };\n\n /**\n * Read data from DOM\n * @private\n */\n var _read = function _read() {\n frameRect = null;\n\n // read child views\n childViews.forEach(function(child) {\n return child._read();\n });\n\n var shouldUpdate = !(ignoreRectUpdate && rect.width && rect.height);\n if (shouldUpdate) {\n updateRect(rect, element, style);\n }\n\n // readers\n var api = { root: internalAPI, props: props, rect: rect };\n readers.forEach(function(reader) {\n return reader(api);\n });\n };\n\n /**\n * Write data to DOM\n * @private\n */\n var _write = function _write(ts, frameActions, shouldOptimize) {\n // if no actions, we assume that the view is resting\n var resting = frameActions.length === 0;\n\n // writers\n writers.forEach(function(writer) {\n var writerResting = writer({\n props: props,\n root: internalAPI,\n actions: frameActions,\n timestamp: ts,\n shouldOptimize: shouldOptimize,\n });\n\n if (writerResting === false) {\n resting = false;\n }\n });\n\n // run mixins\n activeMixins.forEach(function(mixin) {\n // if one of the mixins is still busy after write operation, we are not resting\n var mixinResting = mixin.write(ts);\n if (mixinResting === false) {\n resting = false;\n }\n });\n\n // updates child views that are currently attached to the DOM\n childViews\n .filter(function(child) {\n return !!child.element.parentNode;\n })\n .forEach(function(child) {\n // if a child view is not resting, we are not resting\n var childResting = child._write(\n ts,\n filterFrameActionsForChild(child, frameActions),\n shouldOptimize\n );\n\n if (!childResting) {\n resting = false;\n }\n });\n\n // append new elements to DOM and update those\n childViews\n //.filter(child => !child.element.parentNode)\n .forEach(function(child, index) {\n // skip\n if (child.element.parentNode) {\n return;\n }\n\n // append to DOM\n internalAPI.appendChild(child.element, index);\n\n // call read (need to know the size of these elements)\n child._read();\n\n // re-call write\n child._write(\n ts,\n filterFrameActionsForChild(child, frameActions),\n shouldOptimize\n );\n\n // we just added somthing to the dom, no rest\n resting = false;\n });\n\n // update resting state\n isResting = resting;\n\n didWriteView({\n props: props,\n root: internalAPI,\n actions: frameActions,\n timestamp: ts,\n });\n\n // let parent know if we are resting\n return resting;\n };\n\n var _destroy = function _destroy() {\n activeMixins.forEach(function(mixin) {\n return mixin.destroy();\n });\n destroyers.forEach(function(destroyer) {\n destroyer({ root: internalAPI, props: props });\n });\n childViews.forEach(function(child) {\n return child._destroy();\n });\n };\n\n // sharedAPI\n var sharedAPIDefinition = {\n element: {\n get: getElement,\n },\n\n style: {\n get: getStyle,\n },\n\n childViews: {\n get: getChildViews,\n },\n };\n\n // private API definition\n var internalAPIDefinition = Object.assign({}, sharedAPIDefinition, {\n rect: {\n get: getRect,\n },\n\n // access to custom children references\n ref: {\n get: getReference,\n },\n\n // dom modifiers\n is: function is(needle) {\n return name === needle;\n },\n appendChild: appendChild(element),\n createChildView: createChildView(store),\n linkView: function linkView(view) {\n childViews.push(view);\n return view;\n },\n unlinkView: function unlinkView(view) {\n childViews.splice(childViews.indexOf(view), 1);\n },\n appendChildView: appendChildView(element, childViews),\n removeChildView: removeChildView(element, childViews),\n registerWriter: function registerWriter(writer) {\n return writers.push(writer);\n },\n registerReader: function registerReader(reader) {\n return readers.push(reader);\n },\n registerDestroyer: function registerDestroyer(destroyer) {\n return destroyers.push(destroyer);\n },\n invalidateLayout: function invalidateLayout() {\n return (element.layoutCalculated = false);\n },\n\n // access to data store\n dispatch: store.dispatch,\n query: store.query,\n });\n\n // public view API methods\n var externalAPIDefinition = {\n element: {\n get: getElement,\n },\n\n childViews: {\n get: getChildViews,\n },\n\n rect: {\n get: getRect,\n },\n\n resting: {\n get: function get() {\n return isResting;\n },\n },\n\n isRectIgnored: function isRectIgnored() {\n return ignoreRect;\n },\n _read: _read,\n _write: _write,\n _destroy: _destroy,\n };\n\n // mixin API methods\n var mixinAPIDefinition = Object.assign({}, sharedAPIDefinition, {\n rect: {\n get: function get() {\n return rect;\n },\n },\n });\n\n // add mixin functionality\n Object.keys(mixins)\n .sort(function(a, b) {\n // move styles to the back of the mixin list (so adjustments of other mixins are applied to the props correctly)\n if (a === 'styles') {\n return 1;\n } else if (b === 'styles') {\n return -1;\n }\n return 0;\n })\n .forEach(function(key) {\n var mixinAPI = Mixins[key]({\n mixinConfig: mixins[key],\n viewProps: props,\n viewState: state,\n viewInternalAPI: internalAPIDefinition,\n viewExternalAPI: externalAPIDefinition,\n view: createObject(mixinAPIDefinition),\n });\n\n if (mixinAPI) {\n activeMixins.push(mixinAPI);\n }\n });\n\n // construct private api\n var internalAPI = createObject(internalAPIDefinition);\n\n // create the view\n create({\n root: internalAPI,\n props: props,\n });\n\n // append created child views to root node\n var childCount = getChildCount(element); // need to know the current child count so appending happens in correct order\n childViews.forEach(function(child, index) {\n internalAPI.appendChild(child.element, childCount + index);\n });\n\n // call did create\n didCreateView(internalAPI);\n\n // expose public api\n return createObject(externalAPIDefinition);\n };\n };\n\n var createPainter = function createPainter(read, write) {\n var fps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 60;\n\n var name = '__framePainter';\n\n // set global painter\n if (window[name]) {\n window[name].readers.push(read);\n window[name].writers.push(write);\n return;\n }\n\n window[name] = {\n readers: [read],\n writers: [write],\n };\n\n var painter = window[name];\n\n var interval = 1000 / fps;\n var last = null;\n var id = null;\n var requestTick = null;\n var cancelTick = null;\n\n var setTimerType = function setTimerType() {\n if (document.hidden) {\n requestTick = function requestTick() {\n return window.setTimeout(function() {\n return tick(performance.now());\n }, interval);\n };\n cancelTick = function cancelTick() {\n return window.clearTimeout(id);\n };\n } else {\n requestTick = function requestTick() {\n return window.requestAnimationFrame(tick);\n };\n cancelTick = function cancelTick() {\n return window.cancelAnimationFrame(id);\n };\n }\n };\n\n document.addEventListener('visibilitychange', function() {\n if (cancelTick) cancelTick();\n setTimerType();\n tick(performance.now());\n });\n\n var tick = function tick(ts) {\n // queue next tick\n id = requestTick(tick);\n\n // limit fps\n if (!last) {\n last = ts;\n }\n\n var delta = ts - last;\n\n if (delta <= interval) {\n // skip frame\n return;\n }\n\n // align next frame\n last = ts - (delta % interval);\n\n // update view\n painter.readers.forEach(function(read) {\n return read();\n });\n painter.writers.forEach(function(write) {\n return write(ts);\n });\n };\n\n setTimerType();\n tick(performance.now());\n\n return {\n pause: function pause() {\n cancelTick(id);\n },\n };\n };\n\n var createRoute = function createRoute(routes, fn) {\n return function(_ref) {\n var root = _ref.root,\n props = _ref.props,\n _ref$actions = _ref.actions,\n actions = _ref$actions === void 0 ? [] : _ref$actions,\n timestamp = _ref.timestamp,\n shouldOptimize = _ref.shouldOptimize;\n actions\n .filter(function(action) {\n return routes[action.type];\n })\n .forEach(function(action) {\n return routes[action.type]({\n root: root,\n props: props,\n action: action.data,\n timestamp: timestamp,\n shouldOptimize: shouldOptimize,\n });\n });\n\n if (fn) {\n fn({\n root: root,\n props: props,\n actions: actions,\n timestamp: timestamp,\n shouldOptimize: shouldOptimize,\n });\n }\n };\n };\n\n var insertBefore = function insertBefore(newNode, referenceNode) {\n return referenceNode.parentNode.insertBefore(newNode, referenceNode);\n };\n\n var insertAfter = function insertAfter(newNode, referenceNode) {\n return referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n };\n\n var isArray = function isArray(value) {\n return Array.isArray(value);\n };\n\n var isEmpty = function isEmpty(value) {\n return value == null;\n };\n\n var trim = function trim(str) {\n return str.trim();\n };\n\n var toString = function toString(value) {\n return '' + value;\n };\n\n var toArray = function toArray(value) {\n var splitter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ',';\n if (isEmpty(value)) {\n return [];\n }\n if (isArray(value)) {\n return value;\n }\n return toString(value)\n .split(splitter)\n .map(trim)\n .filter(function(str) {\n return str.length;\n });\n };\n\n var isBoolean = function isBoolean(value) {\n return typeof value === 'boolean';\n };\n\n var toBoolean = function toBoolean(value) {\n return isBoolean(value) ? value : value === 'true';\n };\n\n var isString = function isString(value) {\n return typeof value === 'string';\n };\n\n var toNumber = function toNumber(value) {\n return isNumber(value)\n ? value\n : isString(value)\n ? toString(value).replace(/[a-z]+/gi, '')\n : 0;\n };\n\n var toInt = function toInt(value) {\n return parseInt(toNumber(value), 10);\n };\n\n var toFloat = function toFloat(value) {\n return parseFloat(toNumber(value));\n };\n\n var isInt = function isInt(value) {\n return isNumber(value) && isFinite(value) && Math.floor(value) === value;\n };\n\n var toBytes = function toBytes(value) {\n var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n // is in bytes\n if (isInt(value)) {\n return value;\n }\n\n // is natural file size\n var naturalFileSize = toString(value).trim();\n\n // if is value in megabytes\n if (/MB$/i.test(naturalFileSize)) {\n naturalFileSize = naturalFileSize.replace(/MB$i/, '').trim();\n return toInt(naturalFileSize) * base * base;\n }\n\n // if is value in kilobytes\n if (/KB/i.test(naturalFileSize)) {\n naturalFileSize = naturalFileSize.replace(/KB$i/, '').trim();\n return toInt(naturalFileSize) * base;\n }\n\n return toInt(naturalFileSize);\n };\n\n var isFunction = function isFunction(value) {\n return typeof value === 'function';\n };\n\n var toFunctionReference = function toFunctionReference(string) {\n var ref = self;\n var levels = string.split('.');\n var level = null;\n while ((level = levels.shift())) {\n ref = ref[level];\n if (!ref) {\n return null;\n }\n }\n return ref;\n };\n\n var methods = {\n process: 'POST',\n patch: 'PATCH',\n revert: 'DELETE',\n fetch: 'GET',\n restore: 'GET',\n load: 'GET',\n };\n\n var createServerAPI = function createServerAPI(outline) {\n var api = {};\n\n api.url = isString(outline) ? outline : outline.url || '';\n api.timeout = outline.timeout ? parseInt(outline.timeout, 10) : 0;\n api.headers = outline.headers ? outline.headers : {};\n\n forin(methods, function(key) {\n api[key] = createAction(key, outline[key], methods[key], api.timeout, api.headers);\n });\n\n // remove process if no url or process on outline\n api.process = outline.process || isString(outline) || outline.url ? api.process : null;\n\n // special treatment for remove\n api.remove = outline.remove || null;\n\n // remove generic headers from api object\n delete api.headers;\n\n return api;\n };\n\n var createAction = function createAction(name, outline, method, timeout, headers) {\n // is explicitely set to null so disable\n if (outline === null) {\n return null;\n }\n\n // if is custom function, done! Dev handles everything.\n if (typeof outline === 'function') {\n return outline;\n }\n\n // build action object\n var action = {\n url: method === 'GET' || method === 'PATCH' ? '?' + name + '=' : '',\n method: method,\n headers: headers,\n withCredentials: false,\n timeout: timeout,\n onload: null,\n ondata: null,\n onerror: null,\n };\n\n // is a single url\n if (isString(outline)) {\n action.url = outline;\n return action;\n }\n\n // overwrite\n Object.assign(action, outline);\n\n // see if should reformat headers;\n if (isString(action.headers)) {\n var parts = action.headers.split(/:(.+)/);\n action.headers = {\n header: parts[0],\n value: parts[1],\n };\n }\n\n // if is bool withCredentials\n action.withCredentials = toBoolean(action.withCredentials);\n\n return action;\n };\n\n var toServerAPI = function toServerAPI(value) {\n return createServerAPI(value);\n };\n\n var isNull = function isNull(value) {\n return value === null;\n };\n\n var isObject = function isObject(value) {\n return typeof value === 'object' && value !== null;\n };\n\n var isAPI = function isAPI(value) {\n return (\n isObject(value) &&\n isString(value.url) &&\n isObject(value.process) &&\n isObject(value.revert) &&\n isObject(value.restore) &&\n isObject(value.fetch)\n );\n };\n\n var getType = function getType(value) {\n if (isArray(value)) {\n return 'array';\n }\n\n if (isNull(value)) {\n return 'null';\n }\n\n if (isInt(value)) {\n return 'int';\n }\n\n if (/^[0-9]+ ?(?:GB|MB|KB)$/gi.test(value)) {\n return 'bytes';\n }\n\n if (isAPI(value)) {\n return 'api';\n }\n\n return typeof value;\n };\n\n var replaceSingleQuotes = function replaceSingleQuotes(str) {\n return str\n .replace(/{\\s*'/g, '{\"')\n .replace(/'\\s*}/g, '\"}')\n .replace(/'\\s*:/g, '\":')\n .replace(/:\\s*'/g, ':\"')\n .replace(/,\\s*'/g, ',\"')\n .replace(/'\\s*,/g, '\",');\n };\n\n var conversionTable = {\n array: toArray,\n boolean: toBoolean,\n int: function int(value) {\n return getType(value) === 'bytes' ? toBytes(value) : toInt(value);\n },\n number: toFloat,\n float: toFloat,\n bytes: toBytes,\n string: function string(value) {\n return isFunction(value) ? value : toString(value);\n },\n function: function _function(value) {\n return toFunctionReference(value);\n },\n serverapi: toServerAPI,\n object: function object(value) {\n try {\n return JSON.parse(replaceSingleQuotes(value));\n } catch (e) {\n return null;\n }\n },\n };\n\n var convertTo = function convertTo(value, type) {\n return conversionTable[type](value);\n };\n\n var getValueByType = function getValueByType(newValue, defaultValue, valueType) {\n // can always assign default value\n if (newValue === defaultValue) {\n return newValue;\n }\n\n // get the type of the new value\n var newValueType = getType(newValue);\n\n // is valid type?\n if (newValueType !== valueType) {\n // is string input, let's attempt to convert\n var convertedValue = convertTo(newValue, valueType);\n\n // what is the type now\n newValueType = getType(convertedValue);\n\n // no valid conversions found\n if (convertedValue === null) {\n throw 'Trying to assign value with incorrect type to \"' +\n option +\n '\", allowed type: \"' +\n valueType +\n '\"';\n } else {\n newValue = convertedValue;\n }\n }\n\n // assign new value\n return newValue;\n };\n\n var createOption = function createOption(defaultValue, valueType) {\n var currentValue = defaultValue;\n return {\n enumerable: true,\n get: function get() {\n return currentValue;\n },\n set: function set(newValue) {\n currentValue = getValueByType(newValue, defaultValue, valueType);\n },\n };\n };\n\n var createOptions = function createOptions(options) {\n var obj = {};\n forin(options, function(prop) {\n var optionDefinition = options[prop];\n obj[prop] = createOption(optionDefinition[0], optionDefinition[1]);\n });\n return createObject(obj);\n };\n\n var createInitialState = function createInitialState(options) {\n return {\n // model\n items: [],\n\n // timeout used for calling update items\n listUpdateTimeout: null,\n\n // timeout used for stacking metadata updates\n itemUpdateTimeout: null,\n\n // queue of items waiting to be processed\n processingQueue: [],\n\n // options\n options: createOptions(options),\n };\n };\n\n var fromCamels = function fromCamels(string) {\n var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '-';\n return string\n .split(/(?=[A-Z])/)\n .map(function(part) {\n return part.toLowerCase();\n })\n .join(separator);\n };\n\n var createOptionAPI = function createOptionAPI(store, options) {\n var obj = {};\n forin(options, function(key) {\n obj[key] = {\n get: function get() {\n return store.getState().options[key];\n },\n set: function set(value) {\n store.dispatch('SET_' + fromCamels(key, '_').toUpperCase(), {\n value: value,\n });\n },\n };\n });\n return obj;\n };\n\n var createOptionActions = function createOptionActions(options) {\n return function(dispatch, query, state) {\n var obj = {};\n forin(options, function(key) {\n var name = fromCamels(key, '_').toUpperCase();\n\n obj['SET_' + name] = function(action) {\n try {\n state.options[key] = action.value;\n } catch (e) {} // nope, failed\n\n // we successfully set the value of this option\n dispatch('DID_SET_' + name, { value: state.options[key] });\n };\n });\n return obj;\n };\n };\n\n var createOptionQueries = function createOptionQueries(options) {\n return function(state) {\n var obj = {};\n forin(options, function(key) {\n obj['GET_' + fromCamels(key, '_').toUpperCase()] = function(action) {\n return state.options[key];\n };\n });\n return obj;\n };\n };\n\n var InteractionMethod = {\n API: 1,\n DROP: 2,\n BROWSE: 3,\n PASTE: 4,\n NONE: 5,\n };\n\n var getUniqueId = function getUniqueId() {\n return Math.random()\n .toString(36)\n .substring(2, 11);\n };\n\n function _typeof(obj) {\n if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {\n _typeof = function(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function(obj) {\n return obj &&\n typeof Symbol === 'function' &&\n obj.constructor === Symbol &&\n obj !== Symbol.prototype\n ? 'symbol'\n : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n var REACT_ELEMENT_TYPE;\n\n function _jsx(type, props, key, children) {\n if (!REACT_ELEMENT_TYPE) {\n REACT_ELEMENT_TYPE =\n (typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element')) ||\n 0xeac7;\n }\n\n var defaultProps = type && type.defaultProps;\n var childrenLength = arguments.length - 3;\n\n if (!props && childrenLength !== 0) {\n props = {\n children: void 0,\n };\n }\n\n if (props && defaultProps) {\n for (var propName in defaultProps) {\n if (props[propName] === void 0) {\n props[propName] = defaultProps[propName];\n }\n }\n } else if (!props) {\n props = defaultProps || {};\n }\n\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = new Array(childrenLength);\n\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 3];\n }\n\n props.children = childArray;\n }\n\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key === undefined ? null : '' + key,\n ref: null,\n props: props,\n _owner: null,\n };\n }\n\n function _asyncIterator(iterable) {\n var method;\n\n if (typeof Symbol !== 'undefined') {\n if (Symbol.asyncIterator) {\n method = iterable[Symbol.asyncIterator];\n if (method != null) return method.call(iterable);\n }\n\n if (Symbol.iterator) {\n method = iterable[Symbol.iterator];\n if (method != null) return method.call(iterable);\n }\n }\n\n throw new TypeError('Object is not async iterable');\n }\n\n function _AwaitValue(value) {\n this.wrapped = value;\n }\n\n function _AsyncGenerator(gen) {\n var front, back;\n\n function send(key, arg) {\n return new Promise(function(resolve, reject) {\n var request = {\n key: key,\n arg: arg,\n resolve: resolve,\n reject: reject,\n next: null,\n };\n\n if (back) {\n back = back.next = request;\n } else {\n front = back = request;\n resume(key, arg);\n }\n });\n }\n\n function resume(key, arg) {\n try {\n var result = gen[key](arg);\n var value = result.value;\n var wrappedAwait = value instanceof _AwaitValue;\n Promise.resolve(wrappedAwait ? value.wrapped : value).then(\n function(arg) {\n if (wrappedAwait) {\n resume('next', arg);\n return;\n }\n\n settle(result.done ? 'return' : 'normal', arg);\n },\n function(err) {\n resume('throw', err);\n }\n );\n } catch (err) {\n settle('throw', err);\n }\n }\n\n function settle(type, value) {\n switch (type) {\n case 'return':\n front.resolve({\n value: value,\n done: true,\n });\n break;\n\n case 'throw':\n front.reject(value);\n break;\n\n default:\n front.resolve({\n value: value,\n done: false,\n });\n break;\n }\n\n front = front.next;\n\n if (front) {\n resume(front.key, front.arg);\n } else {\n back = null;\n }\n }\n\n this._invoke = send;\n\n if (typeof gen.return !== 'function') {\n this.return = undefined;\n }\n }\n\n if (typeof Symbol === 'function' && Symbol.asyncIterator) {\n _AsyncGenerator.prototype[Symbol.asyncIterator] = function() {\n return this;\n };\n }\n\n _AsyncGenerator.prototype.next = function(arg) {\n return this._invoke('next', arg);\n };\n\n _AsyncGenerator.prototype.throw = function(arg) {\n return this._invoke('throw', arg);\n };\n\n _AsyncGenerator.prototype.return = function(arg) {\n return this._invoke('return', arg);\n };\n\n function _wrapAsyncGenerator(fn) {\n return function() {\n return new _AsyncGenerator(fn.apply(this, arguments));\n };\n }\n\n function _awaitAsyncGenerator(value) {\n return new _AwaitValue(value);\n }\n\n function _asyncGeneratorDelegate(inner, awaitWrap) {\n var iter = {},\n waiting = false;\n\n function pump(key, value) {\n waiting = true;\n value = new Promise(function(resolve) {\n resolve(inner[key](value));\n });\n return {\n done: false,\n value: awaitWrap(value),\n };\n }\n\n if (typeof Symbol === 'function' && Symbol.iterator) {\n iter[Symbol.iterator] = function() {\n return this;\n };\n }\n\n iter.next = function(value) {\n if (waiting) {\n waiting = false;\n return value;\n }\n\n return pump('next', value);\n };\n\n if (typeof inner.throw === 'function') {\n iter.throw = function(value) {\n if (waiting) {\n waiting = false;\n throw value;\n }\n\n return pump('throw', value);\n };\n }\n\n if (typeof inner.return === 'function') {\n iter.return = function(value) {\n return pump('return', value);\n };\n }\n\n return iter;\n }\n\n function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n }\n\n function _asyncToGenerator(fn) {\n return function() {\n var self = this,\n args = arguments;\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'next', value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'throw', err);\n }\n\n _next(undefined);\n });\n };\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n }\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineEnumerableProperties(obj, descs) {\n for (var key in descs) {\n var desc = descs[key];\n desc.configurable = desc.enumerable = true;\n if ('value' in desc) desc.writable = true;\n Object.defineProperty(obj, key, desc);\n }\n\n if (Object.getOwnPropertySymbols) {\n var objectSymbols = Object.getOwnPropertySymbols(descs);\n\n for (var i = 0; i < objectSymbols.length; i++) {\n var sym = objectSymbols[i];\n var desc = descs[sym];\n desc.configurable = desc.enumerable = true;\n if ('value' in desc) desc.writable = true;\n Object.defineProperty(obj, sym, desc);\n }\n }\n\n return obj;\n }\n\n function _defaults(obj, defaults) {\n var keys = Object.getOwnPropertyNames(defaults);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = Object.getOwnPropertyDescriptor(defaults, key);\n\n if (value && value.configurable && obj[key] === undefined) {\n Object.defineProperty(obj, key, value);\n }\n }\n\n return obj;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _extends() {\n _extends =\n Object.assign ||\n function(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n }\n\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(\n Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n })\n );\n }\n\n ownKeys.forEach(function(key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n }\n\n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly)\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n }\n\n function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function(key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function(key) {\n Object.defineProperty(\n target,\n key,\n Object.getOwnPropertyDescriptor(source, key)\n );\n });\n }\n }\n\n return target;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== 'function' && superClass !== null) {\n throw new TypeError('Super expression must either be null or a function');\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true,\n },\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n }\n\n function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n }\n\n function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf\n ? Object.getPrototypeOf\n : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n }\n\n function _setPrototypeOf(o, p) {\n _setPrototypeOf =\n Object.setPrototypeOf ||\n function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n }\n\n function isNativeReflectConstruct() {\n if (typeof Reflect === 'undefined' || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === 'function') return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));\n return true;\n } catch (e) {\n return false;\n }\n }\n\n function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n }\n\n function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf('[native code]') !== -1;\n }\n\n function _wrapNativeSuper(Class) {\n var _cache = typeof Map === 'function' ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !_isNativeFunction(Class)) return Class;\n\n if (typeof Class !== 'function') {\n throw new TypeError('Super expression must either be null or a function');\n }\n\n if (typeof _cache !== 'undefined') {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true,\n },\n });\n return _setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n }\n\n function _instanceof(left, right) {\n if (right != null && typeof Symbol !== 'undefined' && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n }\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule\n ? obj\n : {\n default: obj,\n };\n }\n\n function _interopRequireWildcard(obj) {\n if (obj && obj.__esModule) {\n return obj;\n } else {\n var newObj = {};\n\n if (obj != null) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc =\n Object.defineProperty && Object.getOwnPropertyDescriptor\n ? Object.getOwnPropertyDescriptor(obj, key)\n : {};\n\n if (desc.get || desc.set) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n }\n\n newObj.default = obj;\n return newObj;\n }\n }\n\n function _newArrowCheck(innerThis, boundThis) {\n if (innerThis !== boundThis) {\n throw new TypeError('Cannot instantiate an arrow function');\n }\n }\n\n function _objectDestructuringEmpty(obj) {\n if (obj == null) throw new TypeError('Cannot destructure undefined');\n }\n\n function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n }\n\n function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n }\n\n function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n }\n\n function _possibleConstructorReturn(self, call) {\n if (call && (typeof call === 'object' || typeof call === 'function')) {\n return call;\n }\n\n return _assertThisInitialized(self);\n }\n\n function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = _getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n }\n\n function _get(target, property, receiver) {\n if (typeof Reflect !== 'undefined' && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = _superPropBase(target, property);\n\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get(target, property, receiver || target);\n }\n\n function set(target, property, value, receiver) {\n if (typeof Reflect !== 'undefined' && Reflect.set) {\n set = Reflect.set;\n } else {\n set = function set(target, property, value, receiver) {\n var base = _superPropBase(target, property);\n\n var desc;\n\n if (base) {\n desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.set) {\n desc.set.call(receiver, value);\n return true;\n } else if (!desc.writable) {\n return false;\n }\n }\n\n desc = Object.getOwnPropertyDescriptor(receiver, property);\n\n if (desc) {\n if (!desc.writable) {\n return false;\n }\n\n desc.value = value;\n Object.defineProperty(receiver, property, desc);\n } else {\n _defineProperty(receiver, property, value);\n }\n\n return true;\n };\n }\n\n return set(target, property, value, receiver);\n }\n\n function _set(target, property, value, receiver, isStrict) {\n var s = set(target, property, value, receiver || target);\n\n if (!s && isStrict) {\n throw new Error('failed to set property');\n }\n\n return value;\n }\n\n function _taggedTemplateLiteral(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n\n return Object.freeze(\n Object.defineProperties(strings, {\n raw: {\n value: Object.freeze(raw),\n },\n })\n );\n }\n\n function _taggedTemplateLiteralLoose(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n\n strings.raw = raw;\n return strings;\n }\n\n function _temporalRef(val, name) {\n if (val === _temporalUndefined) {\n throw new ReferenceError(name + ' is not defined - temporal dead zone');\n } else {\n return val;\n }\n }\n\n function _readOnlyError(name) {\n throw new Error('\"' + name + '\" is read-only');\n }\n\n function _classNameTDZError(name) {\n throw new Error('Class \"' + name + '\" cannot be referenced in computed property keys.');\n }\n\n var _temporalUndefined = {};\n\n function _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n }\n\n function _slicedToArrayLoose(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimitLoose(arr, i) || _nonIterableRest();\n }\n\n function _toArray(arr) {\n return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest();\n }\n\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n }\n\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n }\n\n function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n }\n\n function _iterableToArray(iter) {\n if (\n Symbol.iterator in Object(iter) ||\n Object.prototype.toString.call(iter) === '[object Arguments]'\n )\n return Array.from(iter);\n }\n\n function _iterableToArrayLimit(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i['return'] != null) _i['return']();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n function _iterableToArrayLimitLoose(arr, i) {\n var _arr = [];\n\n for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done; ) {\n _arr.push(_step.value);\n\n if (i && _arr.length === i) break;\n }\n\n return _arr;\n }\n\n function _nonIterableSpread() {\n throw new TypeError('Invalid attempt to spread non-iterable instance');\n }\n\n function _nonIterableRest() {\n throw new TypeError('Invalid attempt to destructure non-iterable instance');\n }\n\n function _skipFirstGeneratorNext(fn) {\n return function() {\n var it = fn.apply(this, arguments);\n it.next();\n return it;\n };\n }\n\n function _toPrimitive(input, hint) {\n if (typeof input !== 'object' || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n\n if (prim !== undefined) {\n var res = prim.call(input, hint || 'default');\n if (typeof res !== 'object') return res;\n throw new TypeError('@@toPrimitive must return a primitive value.');\n }\n\n return (hint === 'string' ? String : Number)(input);\n }\n\n function _toPropertyKey(arg) {\n var key = _toPrimitive(arg, 'string');\n\n return typeof key === 'symbol' ? key : String(key);\n }\n\n function _initializerWarningHelper(descriptor, context) {\n throw new Error(\n 'Decorating class property failed. Please ensure that ' +\n 'proposal-class-properties is enabled and set to use loose mode. ' +\n 'To use proposal-class-properties in spec mode with decorators, wait for ' +\n 'the next major version of decorators in stage 2.'\n );\n }\n\n function _initializerDefineProperty(target, property, descriptor, context) {\n if (!descriptor) return;\n Object.defineProperty(target, property, {\n enumerable: descriptor.enumerable,\n configurable: descriptor.configurable,\n writable: descriptor.writable,\n value: descriptor.initializer ? descriptor.initializer.call(context) : void 0,\n });\n }\n\n function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object.keys(descriptor).forEach(function(key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators\n .slice()\n .reverse()\n .reduce(function(desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object.defineProperty(target, property, desc);\n desc = null;\n }\n\n return desc;\n }\n\n var id = 0;\n\n function _classPrivateFieldLooseKey(name) {\n return '__private_' + id++ + '_' + name;\n }\n\n function _classPrivateFieldLooseBase(receiver, privateKey) {\n if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {\n throw new TypeError('attempted to use private field on non-instance');\n }\n\n return receiver;\n }\n\n function _classPrivateFieldGet(receiver, privateMap) {\n var descriptor = privateMap.get(receiver);\n\n if (!descriptor) {\n throw new TypeError('attempted to get private field on non-instance');\n }\n\n if (descriptor.get) {\n return descriptor.get.call(receiver);\n }\n\n return descriptor.value;\n }\n\n function _classPrivateFieldSet(receiver, privateMap, value) {\n var descriptor = privateMap.get(receiver);\n\n if (!descriptor) {\n throw new TypeError('attempted to set private field on non-instance');\n }\n\n if (descriptor.set) {\n descriptor.set.call(receiver, value);\n } else {\n if (!descriptor.writable) {\n throw new TypeError('attempted to set read only private field');\n }\n\n descriptor.value = value;\n }\n\n return value;\n }\n\n function _classPrivateFieldDestructureSet(receiver, privateMap) {\n if (!privateMap.has(receiver)) {\n throw new TypeError('attempted to set private field on non-instance');\n }\n\n var descriptor = privateMap.get(receiver);\n\n if (descriptor.set) {\n if (!('__destrObj' in descriptor)) {\n descriptor.__destrObj = {\n set value(v) {\n descriptor.set.call(receiver, v);\n },\n };\n }\n\n return descriptor.__destrObj;\n } else {\n if (!descriptor.writable) {\n throw new TypeError('attempted to set read only private field');\n }\n\n return descriptor;\n }\n }\n\n function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) {\n if (receiver !== classConstructor) {\n throw new TypeError('Private static access of wrong provenance');\n }\n\n return descriptor.value;\n }\n\n function _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) {\n if (receiver !== classConstructor) {\n throw new TypeError('Private static access of wrong provenance');\n }\n\n if (!descriptor.writable) {\n throw new TypeError('attempted to set read only private field');\n }\n\n descriptor.value = value;\n return value;\n }\n\n function _classStaticPrivateMethodGet(receiver, classConstructor, method) {\n if (receiver !== classConstructor) {\n throw new TypeError('Private static access of wrong provenance');\n }\n\n return method;\n }\n\n function _classStaticPrivateMethodSet() {\n throw new TypeError('attempted to set read only static private field');\n }\n\n function _decorate(decorators, factory, superClass, mixins) {\n var api = _getDecoratorsApi();\n\n if (mixins) {\n for (var i = 0; i < mixins.length; i++) {\n api = mixins[i](api);\n }\n }\n\n var r = factory(function initialize(O) {\n api.initializeInstanceElements(O, decorated.elements);\n }, superClass);\n var decorated = api.decorateClass(\n _coalesceClassElements(r.d.map(_createElementDescriptor)),\n decorators\n );\n api.initializeClassElements(r.F, decorated.elements);\n return api.runClassFinishers(r.F, decorated.finishers);\n }\n\n function _getDecoratorsApi() {\n _getDecoratorsApi = function() {\n return api;\n };\n\n var api = {\n elementsDefinitionOrder: [['method'], ['field']],\n initializeInstanceElements: function(O, elements) {\n ['method', 'field'].forEach(function(kind) {\n elements.forEach(function(element) {\n if (element.kind === kind && element.placement === 'own') {\n this.defineClassElement(O, element);\n }\n }, this);\n }, this);\n },\n initializeClassElements: function(F, elements) {\n var proto = F.prototype;\n ['method', 'field'].forEach(function(kind) {\n elements.forEach(function(element) {\n var placement = element.placement;\n\n if (\n element.kind === kind &&\n (placement === 'static' || placement === 'prototype')\n ) {\n var receiver = placement === 'static' ? F : proto;\n this.defineClassElement(receiver, element);\n }\n }, this);\n }, this);\n },\n defineClassElement: function(receiver, element) {\n var descriptor = element.descriptor;\n\n if (element.kind === 'field') {\n var initializer = element.initializer;\n descriptor = {\n enumerable: descriptor.enumerable,\n writable: descriptor.writable,\n configurable: descriptor.configurable,\n value: initializer === void 0 ? void 0 : initializer.call(receiver),\n };\n }\n\n Object.defineProperty(receiver, element.key, descriptor);\n },\n decorateClass: function(elements, decorators) {\n var newElements = [];\n var finishers = [];\n var placements = {\n static: [],\n prototype: [],\n own: [],\n };\n elements.forEach(function(element) {\n this.addElementPlacement(element, placements);\n }, this);\n elements.forEach(function(element) {\n if (!_hasDecorators(element)) return newElements.push(element);\n var elementFinishersExtras = this.decorateElement(element, placements);\n newElements.push(elementFinishersExtras.element);\n newElements.push.apply(newElements, elementFinishersExtras.extras);\n finishers.push.apply(finishers, elementFinishersExtras.finishers);\n }, this);\n\n if (!decorators) {\n return {\n elements: newElements,\n finishers: finishers,\n };\n }\n\n var result = this.decorateConstructor(newElements, decorators);\n finishers.push.apply(finishers, result.finishers);\n result.finishers = finishers;\n return result;\n },\n addElementPlacement: function(element, placements, silent) {\n var keys = placements[element.placement];\n\n if (!silent && keys.indexOf(element.key) !== -1) {\n throw new TypeError('Duplicated element (' + element.key + ')');\n }\n\n keys.push(element.key);\n },\n decorateElement: function(element, placements) {\n var extras = [];\n var finishers = [];\n\n for (var decorators = element.decorators, i = decorators.length - 1; i >= 0; i--) {\n var keys = placements[element.placement];\n keys.splice(keys.indexOf(element.key), 1);\n var elementObject = this.fromElementDescriptor(element);\n var elementFinisherExtras = this.toElementFinisherExtras(\n (0, decorators[i])(elementObject) || elementObject\n );\n element = elementFinisherExtras.element;\n this.addElementPlacement(element, placements);\n\n if (elementFinisherExtras.finisher) {\n finishers.push(elementFinisherExtras.finisher);\n }\n\n var newExtras = elementFinisherExtras.extras;\n\n if (newExtras) {\n for (var j = 0; j < newExtras.length; j++) {\n this.addElementPlacement(newExtras[j], placements);\n }\n\n extras.push.apply(extras, newExtras);\n }\n }\n\n return {\n element: element,\n finishers: finishers,\n extras: extras,\n };\n },\n decorateConstructor: function(elements, decorators) {\n var finishers = [];\n\n for (var i = decorators.length - 1; i >= 0; i--) {\n var obj = this.fromClassDescriptor(elements);\n var elementsAndFinisher = this.toClassDescriptor(\n (0, decorators[i])(obj) || obj\n );\n\n if (elementsAndFinisher.finisher !== undefined) {\n finishers.push(elementsAndFinisher.finisher);\n }\n\n if (elementsAndFinisher.elements !== undefined) {\n elements = elementsAndFinisher.elements;\n\n for (var j = 0; j < elements.length - 1; j++) {\n for (var k = j + 1; k < elements.length; k++) {\n if (\n elements[j].key === elements[k].key &&\n elements[j].placement === elements[k].placement\n ) {\n throw new TypeError(\n 'Duplicated element (' + elements[j].key + ')'\n );\n }\n }\n }\n }\n }\n\n return {\n elements: elements,\n finishers: finishers,\n };\n },\n fromElementDescriptor: function(element) {\n var obj = {\n kind: element.kind,\n key: element.key,\n placement: element.placement,\n descriptor: element.descriptor,\n };\n var desc = {\n value: 'Descriptor',\n configurable: true,\n };\n Object.defineProperty(obj, Symbol.toStringTag, desc);\n if (element.kind === 'field') obj.initializer = element.initializer;\n return obj;\n },\n toElementDescriptors: function(elementObjects) {\n if (elementObjects === undefined) return;\n return _toArray(elementObjects).map(function(elementObject) {\n var element = this.toElementDescriptor(elementObject);\n this.disallowProperty(elementObject, 'finisher', 'An element descriptor');\n this.disallowProperty(elementObject, 'extras', 'An element descriptor');\n return element;\n }, this);\n },\n toElementDescriptor: function(elementObject) {\n var kind = String(elementObject.kind);\n\n if (kind !== 'method' && kind !== 'field') {\n throw new TypeError(\n 'An element descriptor\\'s .kind property must be either \"method\" or' +\n ' \"field\", but a decorator created an element descriptor with' +\n ' .kind \"' +\n kind +\n '\"'\n );\n }\n\n var key = _toPropertyKey(elementObject.key);\n\n var placement = String(elementObject.placement);\n\n if (placement !== 'static' && placement !== 'prototype' && placement !== 'own') {\n throw new TypeError(\n 'An element descriptor\\'s .placement property must be one of \"static\",' +\n ' \"prototype\" or \"own\", but a decorator created an element descriptor' +\n ' with .placement \"' +\n placement +\n '\"'\n );\n }\n\n var descriptor = elementObject.descriptor;\n this.disallowProperty(elementObject, 'elements', 'An element descriptor');\n var element = {\n kind: kind,\n key: key,\n placement: placement,\n descriptor: Object.assign({}, descriptor),\n };\n\n if (kind !== 'field') {\n this.disallowProperty(elementObject, 'initializer', 'A method descriptor');\n } else {\n this.disallowProperty(\n descriptor,\n 'get',\n 'The property descriptor of a field descriptor'\n );\n this.disallowProperty(\n descriptor,\n 'set',\n 'The property descriptor of a field descriptor'\n );\n this.disallowProperty(\n descriptor,\n 'value',\n 'The property descriptor of a field descriptor'\n );\n element.initializer = elementObject.initializer;\n }\n\n return element;\n },\n toElementFinisherExtras: function(elementObject) {\n var element = this.toElementDescriptor(elementObject);\n\n var finisher = _optionalCallableProperty(elementObject, 'finisher');\n\n var extras = this.toElementDescriptors(elementObject.extras);\n return {\n element: element,\n finisher: finisher,\n extras: extras,\n };\n },\n fromClassDescriptor: function(elements) {\n var obj = {\n kind: 'class',\n elements: elements.map(this.fromElementDescriptor, this),\n };\n var desc = {\n value: 'Descriptor',\n configurable: true,\n };\n Object.defineProperty(obj, Symbol.toStringTag, desc);\n return obj;\n },\n toClassDescriptor: function(obj) {\n var kind = String(obj.kind);\n\n if (kind !== 'class') {\n throw new TypeError(\n 'A class descriptor\\'s .kind property must be \"class\", but a decorator' +\n ' created a class descriptor with .kind \"' +\n kind +\n '\"'\n );\n }\n\n this.disallowProperty(obj, 'key', 'A class descriptor');\n this.disallowProperty(obj, 'placement', 'A class descriptor');\n this.disallowProperty(obj, 'descriptor', 'A class descriptor');\n this.disallowProperty(obj, 'initializer', 'A class descriptor');\n this.disallowProperty(obj, 'extras', 'A class descriptor');\n\n var finisher = _optionalCallableProperty(obj, 'finisher');\n\n var elements = this.toElementDescriptors(obj.elements);\n return {\n elements: elements,\n finisher: finisher,\n };\n },\n runClassFinishers: function(constructor, finishers) {\n for (var i = 0; i < finishers.length; i++) {\n var newConstructor = (0, finishers[i])(constructor);\n\n if (newConstructor !== undefined) {\n if (typeof newConstructor !== 'function') {\n throw new TypeError('Finishers must return a constructor.');\n }\n\n constructor = newConstructor;\n }\n }\n\n return constructor;\n },\n disallowProperty: function(obj, name, objectType) {\n if (obj[name] !== undefined) {\n throw new TypeError(objectType + \" can't have a .\" + name + ' property.');\n }\n },\n };\n return api;\n }\n\n function _createElementDescriptor(def) {\n var key = _toPropertyKey(def.key);\n\n var descriptor;\n\n if (def.kind === 'method') {\n descriptor = {\n value: def.value,\n writable: true,\n configurable: true,\n enumerable: false,\n };\n } else if (def.kind === 'get') {\n descriptor = {\n get: def.value,\n configurable: true,\n enumerable: false,\n };\n } else if (def.kind === 'set') {\n descriptor = {\n set: def.value,\n configurable: true,\n enumerable: false,\n };\n } else if (def.kind === 'field') {\n descriptor = {\n configurable: true,\n writable: true,\n enumerable: true,\n };\n }\n\n var element = {\n kind: def.kind === 'field' ? 'field' : 'method',\n key: key,\n placement: def.static ? 'static' : def.kind === 'field' ? 'own' : 'prototype',\n descriptor: descriptor,\n };\n if (def.decorators) element.decorators = def.decorators;\n if (def.kind === 'field') element.initializer = def.value;\n return element;\n }\n\n function _coalesceGetterSetter(element, other) {\n if (element.descriptor.get !== undefined) {\n other.descriptor.get = element.descriptor.get;\n } else {\n other.descriptor.set = element.descriptor.set;\n }\n }\n\n function _coalesceClassElements(elements) {\n var newElements = [];\n\n var isSameElement = function(other) {\n return (\n other.kind === 'method' &&\n other.key === element.key &&\n other.placement === element.placement\n );\n };\n\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n var other;\n\n if (element.kind === 'method' && (other = newElements.find(isSameElement))) {\n if (_isDataDescriptor(element.descriptor) || _isDataDescriptor(other.descriptor)) {\n if (_hasDecorators(element) || _hasDecorators(other)) {\n throw new ReferenceError(\n 'Duplicated methods (' + element.key + \") can't be decorated.\"\n );\n }\n\n other.descriptor = element.descriptor;\n } else {\n if (_hasDecorators(element)) {\n if (_hasDecorators(other)) {\n throw new ReferenceError(\n \"Decorators can't be placed on different accessors with for \" +\n 'the same property (' +\n element.key +\n ').'\n );\n }\n\n other.decorators = element.decorators;\n }\n\n _coalesceGetterSetter(element, other);\n }\n } else {\n newElements.push(element);\n }\n }\n\n return newElements;\n }\n\n function _hasDecorators(element) {\n return element.decorators && element.decorators.length;\n }\n\n function _isDataDescriptor(desc) {\n return desc !== undefined && !(desc.value === undefined && desc.writable === undefined);\n }\n\n function _optionalCallableProperty(obj, name) {\n var value = obj[name];\n\n if (value !== undefined && typeof value !== 'function') {\n throw new TypeError(\"Expected '\" + name + \"' to be a function\");\n }\n\n return value;\n }\n\n function _classPrivateMethodGet(receiver, privateSet, fn) {\n if (!privateSet.has(receiver)) {\n throw new TypeError('attempted to get private field on non-instance');\n }\n\n return fn;\n }\n\n function _classPrivateMethodSet() {\n throw new TypeError('attempted to reassign private method');\n }\n\n function _wrapRegExp(re, groups) {\n _wrapRegExp = function(re, groups) {\n return new BabelRegExp(re, groups);\n };\n\n var _RegExp = _wrapNativeSuper(RegExp);\n\n var _super = RegExp.prototype;\n\n var _groups = new WeakMap();\n\n function BabelRegExp(re, groups) {\n var _this = _RegExp.call(this, re);\n\n _groups.set(_this, groups);\n\n return _this;\n }\n\n _inherits(BabelRegExp, _RegExp);\n\n BabelRegExp.prototype.exec = function(str) {\n var result = _super.exec.call(this, str);\n\n if (result) result.groups = buildGroups(result, this);\n return result;\n };\n\n BabelRegExp.prototype[Symbol.replace] = function(str, substitution) {\n if (typeof substitution === 'string') {\n var groups = _groups.get(this);\n\n return _super[Symbol.replace].call(\n this,\n str,\n substitution.replace(/\\$<([^>]+)>/g, function(_, name) {\n return '$' + groups[name];\n })\n );\n } else if (typeof substitution === 'function') {\n var _this = this;\n\n return _super[Symbol.replace].call(this, str, function() {\n var args = [];\n args.push.apply(args, arguments);\n\n if (typeof args[args.length - 1] !== 'object') {\n args.push(buildGroups(args, _this));\n }\n\n return substitution.apply(this, args);\n });\n } else {\n return _super[Symbol.replace].call(this, str, substitution);\n }\n };\n\n function buildGroups(result, re) {\n var g = _groups.get(re);\n\n return Object.keys(g).reduce(function(groups, name) {\n groups[name] = result[g[name]];\n return groups;\n }, Object.create(null));\n }\n\n return _wrapRegExp.apply(this, arguments);\n }\n\n var arrayRemove = function arrayRemove(arr, index) {\n return arr.splice(index, 1);\n };\n\n var run = function run(cb, sync) {\n if (sync) {\n cb();\n } else if (document.hidden) {\n Promise.resolve(1).then(cb);\n } else {\n setTimeout(cb, 0);\n }\n };\n\n var on = function on() {\n var listeners = [];\n var off = function off(event, cb) {\n arrayRemove(\n listeners,\n listeners.findIndex(function(listener) {\n return listener.event === event && (listener.cb === cb || !cb);\n })\n );\n };\n var _fire = function fire(event, args, sync) {\n listeners\n .filter(function(listener) {\n return listener.event === event;\n })\n .map(function(listener) {\n return listener.cb;\n })\n .forEach(function(cb) {\n return run(function() {\n return cb.apply(void 0, _toConsumableArray(args));\n }, sync);\n });\n };\n return {\n fireSync: function fireSync(event) {\n for (\n var _len = arguments.length,\n args = new Array(_len > 1 ? _len - 1 : 0),\n _key = 1;\n _key < _len;\n _key++\n ) {\n args[_key - 1] = arguments[_key];\n }\n _fire(event, args, true);\n },\n fire: function fire(event) {\n for (\n var _len2 = arguments.length,\n args = new Array(_len2 > 1 ? _len2 - 1 : 0),\n _key2 = 1;\n _key2 < _len2;\n _key2++\n ) {\n args[_key2 - 1] = arguments[_key2];\n }\n _fire(event, args, false);\n },\n on: function on(event, cb) {\n listeners.push({ event: event, cb: cb });\n },\n onOnce: function onOnce(event, _cb) {\n listeners.push({\n event: event,\n cb: function cb() {\n off(event, _cb);\n _cb.apply(void 0, arguments);\n },\n });\n },\n off: off,\n };\n };\n\n var copyObjectPropertiesToObject = function copyObjectPropertiesToObject(\n src,\n target,\n excluded\n ) {\n Object.getOwnPropertyNames(src)\n .filter(function(property) {\n return !excluded.includes(property);\n })\n .forEach(function(key) {\n return Object.defineProperty(\n target,\n key,\n Object.getOwnPropertyDescriptor(src, key)\n );\n });\n };\n\n var PRIVATE = [\n 'fire',\n 'process',\n 'revert',\n 'load',\n 'on',\n 'off',\n 'onOnce',\n 'retryLoad',\n 'extend',\n 'archive',\n 'archived',\n 'release',\n 'released',\n 'requestProcessing',\n 'freeze',\n ];\n\n var createItemAPI = function createItemAPI(item) {\n var api = {};\n copyObjectPropertiesToObject(item, api, PRIVATE);\n return api;\n };\n\n var removeReleasedItems = function removeReleasedItems(items) {\n items.forEach(function(item, index) {\n if (item.released) {\n arrayRemove(items, index);\n }\n });\n };\n\n var ItemStatus = {\n INIT: 1,\n IDLE: 2,\n PROCESSING_QUEUED: 9,\n PROCESSING: 3,\n PROCESSING_COMPLETE: 5,\n PROCESSING_ERROR: 6,\n PROCESSING_REVERT_ERROR: 10,\n LOADING: 7,\n LOAD_ERROR: 8,\n };\n\n var FileOrigin = {\n INPUT: 1,\n LIMBO: 2,\n LOCAL: 3,\n };\n\n var getNonNumeric = function getNonNumeric(str) {\n return /[^0-9]+/.exec(str);\n };\n\n var getDecimalSeparator = function getDecimalSeparator() {\n return getNonNumeric((1.1).toLocaleString())[0];\n };\n\n var getThousandsSeparator = function getThousandsSeparator() {\n // Added for browsers that do not return the thousands separator (happend on native browser Android 4.4.4)\n // We check against the normal toString output and if they're the same return a comma when decimal separator is a dot\n var decimalSeparator = getDecimalSeparator();\n var thousandsStringWithSeparator = (1000.0).toLocaleString();\n var thousandsStringWithoutSeparator = (1000.0).toString();\n if (thousandsStringWithSeparator !== thousandsStringWithoutSeparator) {\n return getNonNumeric(thousandsStringWithSeparator)[0];\n }\n return decimalSeparator === '.' ? ',' : '.';\n };\n\n var Type = {\n BOOLEAN: 'boolean',\n INT: 'int',\n NUMBER: 'number',\n STRING: 'string',\n ARRAY: 'array',\n OBJECT: 'object',\n FUNCTION: 'function',\n ACTION: 'action',\n SERVER_API: 'serverapi',\n REGEX: 'regex',\n };\n\n // all registered filters\n var filters = [];\n\n // loops over matching filters and passes options to each filter, returning the mapped results\n var applyFilterChain = function applyFilterChain(key, value, utils) {\n return new Promise(function(resolve, reject) {\n // find matching filters for this key\n var matchingFilters = filters\n .filter(function(f) {\n return f.key === key;\n })\n .map(function(f) {\n return f.cb;\n });\n\n // resolve now\n if (matchingFilters.length === 0) {\n resolve(value);\n return;\n }\n\n // first filter to kick things of\n var initialFilter = matchingFilters.shift();\n\n // chain filters\n matchingFilters\n .reduce(\n // loop over promises passing value to next promise\n function(current, next) {\n return current.then(function(value) {\n return next(value, utils);\n });\n },\n\n // call initial filter, will return a promise\n initialFilter(value, utils)\n\n // all executed\n )\n .then(function(value) {\n return resolve(value);\n })\n .catch(function(error) {\n return reject(error);\n });\n });\n };\n\n var applyFilters = function applyFilters(key, value, utils) {\n return filters\n .filter(function(f) {\n return f.key === key;\n })\n .map(function(f) {\n return f.cb(value, utils);\n });\n };\n\n // adds a new filter to the list\n var addFilter = function addFilter(key, cb) {\n return filters.push({ key: key, cb: cb });\n };\n\n var extendDefaultOptions = function extendDefaultOptions(additionalOptions) {\n return Object.assign(defaultOptions, additionalOptions);\n };\n\n var getOptions = function getOptions() {\n return Object.assign({}, defaultOptions);\n };\n\n var setOptions = function setOptions(opts) {\n forin(opts, function(key, value) {\n // key does not exist, so this option cannot be set\n if (!defaultOptions[key]) {\n return;\n }\n defaultOptions[key][0] = getValueByType(\n value,\n defaultOptions[key][0],\n defaultOptions[key][1]\n );\n });\n };\n\n // default options on app\n var defaultOptions = {\n // the id to add to the root element\n id: [null, Type.STRING],\n\n // input field name to use\n name: ['filepond', Type.STRING],\n\n // disable the field\n disabled: [false, Type.BOOLEAN],\n\n // classname to put on wrapper\n className: [null, Type.STRING],\n\n // is the field required\n required: [false, Type.BOOLEAN],\n\n // Allow media capture when value is set\n captureMethod: [null, Type.STRING],\n // - \"camera\", \"microphone\" or \"camcorder\",\n // - Does not work with multiple on apple devices\n // - If set, acceptedFileTypes must be made to match with media wildcard \"image/*\", \"audio/*\" or \"video/*\"\n\n // sync `acceptedFileTypes` property with `accept` attribute\n allowSyncAcceptAttribute: [true, Type.BOOLEAN],\n\n // Feature toggles\n allowDrop: [true, Type.BOOLEAN], // Allow dropping of files\n allowBrowse: [true, Type.BOOLEAN], // Allow browsing the file system\n allowPaste: [true, Type.BOOLEAN], // Allow pasting files\n allowMultiple: [false, Type.BOOLEAN], // Allow multiple files (disabled by default, as multiple attribute is also required on input to allow multiple)\n allowReplace: [true, Type.BOOLEAN], // Allow dropping a file on other file to replace it (only works when multiple is set to false)\n allowRevert: [true, Type.BOOLEAN], // Allows user to revert file upload\n allowRemove: [true, Type.BOOLEAN], // Allow user to remove a file\n allowProcess: [true, Type.BOOLEAN], // Allows user to process a file, when set to false, this removes the file upload button\n allowReorder: [false, Type.BOOLEAN], // Allow reordering of files\n allowDirectoriesOnly: [false, Type.BOOLEAN], // Allow only selecting directories with browse (no support for filtering dnd at this point)\n\n // Try store file if `server` not set\n storeAsFile: [false, Type.BOOLEAN],\n\n // Revert mode\n forceRevert: [false, Type.BOOLEAN], // Set to 'force' to require the file to be reverted before removal\n\n // Input requirements\n maxFiles: [null, Type.INT], // Max number of files\n checkValidity: [false, Type.BOOLEAN], // Enables custom validity messages\n\n // Where to put file\n itemInsertLocationFreedom: [true, Type.BOOLEAN], // Set to false to always add items to begin or end of list\n itemInsertLocation: ['before', Type.STRING], // Default index in list to add items that have been dropped at the top of the list\n itemInsertInterval: [75, Type.INT],\n\n // Drag 'n Drop related\n dropOnPage: [false, Type.BOOLEAN], // Allow dropping of files anywhere on page (prevents browser from opening file if dropped outside of Up)\n dropOnElement: [true, Type.BOOLEAN], // Drop needs to happen on element (set to false to also load drops outside of Up)\n dropValidation: [false, Type.BOOLEAN], // Enable or disable validating files on drop\n ignoredFiles: [['.ds_store', 'thumbs.db', 'desktop.ini'], Type.ARRAY],\n\n // Upload related\n instantUpload: [true, Type.BOOLEAN], // Should upload files immediately on drop\n maxParallelUploads: [2, Type.INT], // Maximum files to upload in parallel\n allowMinimumUploadDuration: [true, Type.BOOLEAN], // if true uploads take at least 750 ms, this ensures the user sees the upload progress giving trust the upload actually happened\n\n // Chunks\n chunkUploads: [false, Type.BOOLEAN], // Enable chunked uploads\n chunkForce: [false, Type.BOOLEAN], // Force use of chunk uploads even for files smaller than chunk size\n chunkSize: [5000000, Type.INT], // Size of chunks (5MB default)\n chunkRetryDelays: [[500, 1000, 3000], Type.ARRAY], // Amount of times to retry upload of a chunk when it fails\n\n // The server api end points to use for uploading (see docs)\n server: [null, Type.SERVER_API],\n\n // File size calculations, can set to 1024, this is only used for display, properties use file size base 1000\n fileSizeBase: [1000, Type.INT],\n\n // Labels and status messages\n labelFileSizeBytes: ['bytes', Type.STRING],\n labelFileSizeKilobytes: ['KB', Type.STRING],\n labelFileSizeMegabytes: ['MB', Type.STRING],\n labelFileSizeGigabytes: ['GB', Type.STRING],\n\n labelDecimalSeparator: [getDecimalSeparator(), Type.STRING], // Default is locale separator\n labelThousandsSeparator: [getThousandsSeparator(), Type.STRING], // Default is locale separator\n\n labelIdle: [\n 'Drag & Drop your files or Browse',\n Type.STRING,\n ],\n\n labelInvalidField: ['Field contains invalid files', Type.STRING],\n labelFileWaitingForSize: ['Waiting for size', Type.STRING],\n labelFileSizeNotAvailable: ['Size not available', Type.STRING],\n labelFileCountSingular: ['file in list', Type.STRING],\n labelFileCountPlural: ['files in list', Type.STRING],\n labelFileLoading: ['Loading', Type.STRING],\n labelFileAdded: ['Added', Type.STRING], // assistive only\n labelFileLoadError: ['Error during load', Type.STRING],\n labelFileRemoved: ['Removed', Type.STRING], // assistive only\n labelFileRemoveError: ['Error during remove', Type.STRING],\n labelFileProcessing: ['Uploading', Type.STRING],\n labelFileProcessingComplete: ['Upload complete', Type.STRING],\n labelFileProcessingAborted: ['Upload cancelled', Type.STRING],\n labelFileProcessingError: ['Error during upload', Type.STRING],\n labelFileProcessingRevertError: ['Error during revert', Type.STRING],\n\n labelTapToCancel: ['tap to cancel', Type.STRING],\n labelTapToRetry: ['tap to retry', Type.STRING],\n labelTapToUndo: ['tap to undo', Type.STRING],\n\n labelButtonRemoveItem: ['Remove', Type.STRING],\n labelButtonAbortItemLoad: ['Abort', Type.STRING],\n labelButtonRetryItemLoad: ['Retry', Type.STRING],\n labelButtonAbortItemProcessing: ['Cancel', Type.STRING],\n labelButtonUndoItemProcessing: ['Undo', Type.STRING],\n labelButtonRetryItemProcessing: ['Retry', Type.STRING],\n labelButtonProcessItem: ['Upload', Type.STRING],\n\n // make sure width and height plus viewpox are even numbers so icons are nicely centered\n iconRemove: [\n '',\n Type.STRING,\n ],\n\n iconProcess: [\n '',\n Type.STRING,\n ],\n\n iconRetry: [\n '',\n Type.STRING,\n ],\n\n iconUndo: [\n '',\n Type.STRING,\n ],\n\n iconDone: [\n '',\n Type.STRING,\n ],\n\n // event handlers\n oninit: [null, Type.FUNCTION],\n onwarning: [null, Type.FUNCTION],\n onerror: [null, Type.FUNCTION],\n onactivatefile: [null, Type.FUNCTION],\n oninitfile: [null, Type.FUNCTION],\n onaddfilestart: [null, Type.FUNCTION],\n onaddfileprogress: [null, Type.FUNCTION],\n onaddfile: [null, Type.FUNCTION],\n onprocessfilestart: [null, Type.FUNCTION],\n onprocessfileprogress: [null, Type.FUNCTION],\n onprocessfileabort: [null, Type.FUNCTION],\n onprocessfilerevert: [null, Type.FUNCTION],\n onprocessfile: [null, Type.FUNCTION],\n onprocessfiles: [null, Type.FUNCTION],\n onremovefile: [null, Type.FUNCTION],\n onpreparefile: [null, Type.FUNCTION],\n onupdatefiles: [null, Type.FUNCTION],\n onreorderfiles: [null, Type.FUNCTION],\n\n // hooks\n beforeDropFile: [null, Type.FUNCTION],\n beforeAddFile: [null, Type.FUNCTION],\n beforeRemoveFile: [null, Type.FUNCTION],\n beforePrepareFile: [null, Type.FUNCTION],\n\n // styles\n stylePanelLayout: [null, Type.STRING], // null 'integrated', 'compact', 'circle'\n stylePanelAspectRatio: [null, Type.STRING], // null or '3:2' or 1\n styleItemPanelAspectRatio: [null, Type.STRING],\n styleButtonRemoveItemPosition: ['left', Type.STRING],\n styleButtonProcessItemPosition: ['right', Type.STRING],\n styleLoadIndicatorPosition: ['right', Type.STRING],\n styleProgressIndicatorPosition: ['right', Type.STRING],\n styleButtonRemoveItemAlign: [false, Type.BOOLEAN],\n\n // custom initial files array\n files: [[], Type.ARRAY],\n\n // show support by displaying credits\n credits: [['https://pqina.nl/', 'Powered by PQINA'], Type.ARRAY],\n };\n\n var getItemByQuery = function getItemByQuery(items, query) {\n // just return first index\n if (isEmpty(query)) {\n return items[0] || null;\n }\n\n // query is index\n if (isInt(query)) {\n return items[query] || null;\n }\n\n // if query is item, get the id\n if (typeof query === 'object') {\n query = query.id;\n }\n\n // assume query is a string and return item by id\n return (\n items.find(function(item) {\n return item.id === query;\n }) || null\n );\n };\n\n var getNumericAspectRatioFromString = function getNumericAspectRatioFromString(aspectRatio) {\n if (isEmpty(aspectRatio)) {\n return aspectRatio;\n }\n if (/:/.test(aspectRatio)) {\n var parts = aspectRatio.split(':');\n return parts[1] / parts[0];\n }\n return parseFloat(aspectRatio);\n };\n\n var getActiveItems = function getActiveItems(items) {\n return items.filter(function(item) {\n return !item.archived;\n });\n };\n\n var Status = {\n EMPTY: 0,\n IDLE: 1, // waiting\n ERROR: 2, // a file is in error state\n BUSY: 3, // busy processing or loading\n READY: 4, // all files uploaded\n };\n\n var res = null;\n var canUpdateFileInput = function canUpdateFileInput() {\n if (res === null) {\n try {\n var dataTransfer = new DataTransfer();\n dataTransfer.items.add(new File(['hello world'], 'This_Works.txt'));\n var el = document.createElement('input');\n el.setAttribute('type', 'file');\n el.files = dataTransfer.files;\n res = el.files.length === 1;\n } catch (err) {\n res = false;\n }\n }\n return res;\n };\n\n var ITEM_ERROR = [\n ItemStatus.LOAD_ERROR,\n ItemStatus.PROCESSING_ERROR,\n ItemStatus.PROCESSING_REVERT_ERROR,\n ];\n\n var ITEM_BUSY = [\n ItemStatus.LOADING,\n ItemStatus.PROCESSING,\n ItemStatus.PROCESSING_QUEUED,\n ItemStatus.INIT,\n ];\n\n var ITEM_READY = [ItemStatus.PROCESSING_COMPLETE];\n\n var isItemInErrorState = function isItemInErrorState(item) {\n return ITEM_ERROR.includes(item.status);\n };\n var isItemInBusyState = function isItemInBusyState(item) {\n return ITEM_BUSY.includes(item.status);\n };\n var isItemInReadyState = function isItemInReadyState(item) {\n return ITEM_READY.includes(item.status);\n };\n\n var isAsync = function isAsync(state) {\n return (\n isObject(state.options.server) &&\n (isObject(state.options.server.process) || isFunction(state.options.server.process))\n );\n };\n\n var queries = function queries(state) {\n return {\n GET_STATUS: function GET_STATUS() {\n var items = getActiveItems(state.items);\n var EMPTY = Status.EMPTY,\n ERROR = Status.ERROR,\n BUSY = Status.BUSY,\n IDLE = Status.IDLE,\n READY = Status.READY;\n\n if (items.length === 0) return EMPTY;\n\n if (items.some(isItemInErrorState)) return ERROR;\n\n if (items.some(isItemInBusyState)) return BUSY;\n\n if (items.some(isItemInReadyState)) return READY;\n\n return IDLE;\n },\n\n GET_ITEM: function GET_ITEM(query) {\n return getItemByQuery(state.items, query);\n },\n\n GET_ACTIVE_ITEM: function GET_ACTIVE_ITEM(query) {\n return getItemByQuery(getActiveItems(state.items), query);\n },\n\n GET_ACTIVE_ITEMS: function GET_ACTIVE_ITEMS() {\n return getActiveItems(state.items);\n },\n\n GET_ITEMS: function GET_ITEMS() {\n return state.items;\n },\n\n GET_ITEM_NAME: function GET_ITEM_NAME(query) {\n var item = getItemByQuery(state.items, query);\n return item ? item.filename : null;\n },\n\n GET_ITEM_SIZE: function GET_ITEM_SIZE(query) {\n var item = getItemByQuery(state.items, query);\n return item ? item.fileSize : null;\n },\n\n GET_STYLES: function GET_STYLES() {\n return Object.keys(state.options)\n .filter(function(key) {\n return /^style/.test(key);\n })\n .map(function(option) {\n return {\n name: option,\n value: state.options[option],\n };\n });\n },\n\n GET_PANEL_ASPECT_RATIO: function GET_PANEL_ASPECT_RATIO() {\n var isShapeCircle = /circle/.test(state.options.stylePanelLayout);\n var aspectRatio = isShapeCircle\n ? 1\n : getNumericAspectRatioFromString(state.options.stylePanelAspectRatio);\n return aspectRatio;\n },\n\n GET_ITEM_PANEL_ASPECT_RATIO: function GET_ITEM_PANEL_ASPECT_RATIO() {\n return state.options.styleItemPanelAspectRatio;\n },\n\n GET_ITEMS_BY_STATUS: function GET_ITEMS_BY_STATUS(status) {\n return getActiveItems(state.items).filter(function(item) {\n return item.status === status;\n });\n },\n\n GET_TOTAL_ITEMS: function GET_TOTAL_ITEMS() {\n return getActiveItems(state.items).length;\n },\n\n SHOULD_UPDATE_FILE_INPUT: function SHOULD_UPDATE_FILE_INPUT() {\n return state.options.storeAsFile && canUpdateFileInput() && !isAsync(state);\n },\n\n IS_ASYNC: function IS_ASYNC() {\n return isAsync(state);\n },\n\n GET_FILE_SIZE_LABELS: function GET_FILE_SIZE_LABELS(query) {\n return {\n labelBytes: query('GET_LABEL_FILE_SIZE_BYTES') || undefined,\n labelKilobytes: query('GET_LABEL_FILE_SIZE_KILOBYTES') || undefined,\n labelMegabytes: query('GET_LABEL_FILE_SIZE_MEGABYTES') || undefined,\n labelGigabytes: query('GET_LABEL_FILE_SIZE_GIGABYTES') || undefined,\n };\n },\n };\n };\n\n var hasRoomForItem = function hasRoomForItem(state) {\n var count = getActiveItems(state.items).length;\n\n // if cannot have multiple items, to add one item it should currently not contain items\n if (!state.options.allowMultiple) {\n return count === 0;\n }\n\n // if allows multiple items, we check if a max item count has been set, if not, there's no limit\n var maxFileCount = state.options.maxFiles;\n if (maxFileCount === null) {\n return true;\n }\n\n // we check if the current count is smaller than the max count, if so, another file can still be added\n if (count < maxFileCount) {\n return true;\n }\n\n // no more room for another file\n return false;\n };\n\n var limit = function limit(value, min, max) {\n return Math.max(Math.min(max, value), min);\n };\n\n var arrayInsert = function arrayInsert(arr, index, item) {\n return arr.splice(index, 0, item);\n };\n\n var insertItem = function insertItem(items, item, index) {\n if (isEmpty(item)) {\n return null;\n }\n\n // if index is undefined, append\n if (typeof index === 'undefined') {\n items.push(item);\n return item;\n }\n\n // limit the index to the size of the items array\n index = limit(index, 0, items.length);\n\n // add item to array\n arrayInsert(items, index, item);\n\n // expose\n return item;\n };\n\n var isBase64DataURI = function isBase64DataURI(str) {\n return /^\\s*data:([a-z]+\\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\\-._~:@\\/?%\\s]*)\\s*$/i.test(\n str\n );\n };\n\n var getFilenameFromURL = function getFilenameFromURL(url) {\n return url\n .split('/')\n .pop()\n .split('?')\n .shift();\n };\n\n var getExtensionFromFilename = function getExtensionFromFilename(name) {\n return name.split('.').pop();\n };\n\n var guesstimateExtension = function guesstimateExtension(type) {\n // if no extension supplied, exit here\n if (typeof type !== 'string') {\n return '';\n }\n\n // get subtype\n var subtype = type.split('/').pop();\n\n // is svg subtype\n if (/svg/.test(subtype)) {\n return 'svg';\n }\n\n if (/zip|compressed/.test(subtype)) {\n return 'zip';\n }\n\n if (/plain/.test(subtype)) {\n return 'txt';\n }\n\n if (/msword/.test(subtype)) {\n return 'doc';\n }\n\n // if is valid subtype\n if (/[a-z]+/.test(subtype)) {\n // always use jpg extension\n if (subtype === 'jpeg') {\n return 'jpg';\n }\n\n // return subtype\n return subtype;\n }\n\n return '';\n };\n\n var leftPad = function leftPad(value) {\n var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n return (padding + value).slice(-padding.length);\n };\n\n var getDateString = function getDateString() {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n return (\n date.getFullYear() +\n '-' +\n leftPad(date.getMonth() + 1, '00') +\n '-' +\n leftPad(date.getDate(), '00') +\n '_' +\n leftPad(date.getHours(), '00') +\n '-' +\n leftPad(date.getMinutes(), '00') +\n '-' +\n leftPad(date.getSeconds(), '00')\n );\n };\n\n var getFileFromBlob = function getFileFromBlob(blob, filename) {\n var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var extension = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var file =\n typeof type === 'string'\n ? blob.slice(0, blob.size, type)\n : blob.slice(0, blob.size, blob.type);\n file.lastModifiedDate = new Date();\n\n // copy relative path\n if (blob._relativePath) file._relativePath = blob._relativePath;\n\n // if blob has name property, use as filename if no filename supplied\n if (!isString(filename)) {\n filename = getDateString();\n }\n\n // if filename supplied but no extension and filename has extension\n if (filename && extension === null && getExtensionFromFilename(filename)) {\n file.name = filename;\n } else {\n extension = extension || guesstimateExtension(file.type);\n file.name = filename + (extension ? '.' + extension : '');\n }\n\n return file;\n };\n\n var getBlobBuilder = function getBlobBuilder() {\n return (window.BlobBuilder =\n window.BlobBuilder ||\n window.WebKitBlobBuilder ||\n window.MozBlobBuilder ||\n window.MSBlobBuilder);\n };\n\n var createBlob = function createBlob(arrayBuffer, mimeType) {\n var BB = getBlobBuilder();\n\n if (BB) {\n var bb = new BB();\n bb.append(arrayBuffer);\n return bb.getBlob(mimeType);\n }\n\n return new Blob([arrayBuffer], {\n type: mimeType,\n });\n };\n\n var getBlobFromByteStringWithMimeType = function getBlobFromByteStringWithMimeType(\n byteString,\n mimeType\n ) {\n var ab = new ArrayBuffer(byteString.length);\n var ia = new Uint8Array(ab);\n\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n\n return createBlob(ab, mimeType);\n };\n\n var getMimeTypeFromBase64DataURI = function getMimeTypeFromBase64DataURI(dataURI) {\n return (/^data:(.+);/.exec(dataURI) || [])[1] || null;\n };\n\n var getBase64DataFromBase64DataURI = function getBase64DataFromBase64DataURI(dataURI) {\n // get data part of string (remove data:image/jpeg...,)\n var data = dataURI.split(',')[1];\n\n // remove any whitespace as that causes InvalidCharacterError in IE\n return data.replace(/\\s/g, '');\n };\n\n var getByteStringFromBase64DataURI = function getByteStringFromBase64DataURI(dataURI) {\n return atob(getBase64DataFromBase64DataURI(dataURI));\n };\n\n var getBlobFromBase64DataURI = function getBlobFromBase64DataURI(dataURI) {\n var mimeType = getMimeTypeFromBase64DataURI(dataURI);\n var byteString = getByteStringFromBase64DataURI(dataURI);\n\n return getBlobFromByteStringWithMimeType(byteString, mimeType);\n };\n\n var getFileFromBase64DataURI = function getFileFromBase64DataURI(dataURI, filename, extension) {\n return getFileFromBlob(getBlobFromBase64DataURI(dataURI), filename, null, extension);\n };\n\n var getFileNameFromHeader = function getFileNameFromHeader(header) {\n // test if is content disposition header, if not exit\n if (!/^content-disposition:/i.test(header)) return null;\n\n // get filename parts\n var matches = header\n .split(/filename=|filename\\*=.+''/)\n .splice(1)\n .map(function(name) {\n return name.trim().replace(/^[\"']|[;\"']{0,2}$/g, '');\n })\n .filter(function(name) {\n return name.length;\n });\n\n return matches.length ? decodeURI(matches[matches.length - 1]) : null;\n };\n\n var getFileSizeFromHeader = function getFileSizeFromHeader(header) {\n if (/content-length:/i.test(header)) {\n var size = header.match(/[0-9]+/)[0];\n return size ? parseInt(size, 10) : null;\n }\n return null;\n };\n\n var getTranfserIdFromHeader = function getTranfserIdFromHeader(header) {\n if (/x-content-transfer-id:/i.test(header)) {\n var id = (header.split(':')[1] || '').trim();\n return id || null;\n }\n return null;\n };\n\n var getFileInfoFromHeaders = function getFileInfoFromHeaders(headers) {\n var info = {\n source: null,\n name: null,\n size: null,\n };\n\n var rows = headers.split('\\n');\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n try {\n for (\n var _iterator = rows[Symbol.iterator](), _step;\n !(_iteratorNormalCompletion = (_step = _iterator.next()).done);\n _iteratorNormalCompletion = true\n ) {\n var header = _step.value;\n\n var name = getFileNameFromHeader(header);\n if (name) {\n info.name = name;\n continue;\n }\n\n var size = getFileSizeFromHeader(header);\n if (size) {\n info.size = size;\n continue;\n }\n\n var source = getTranfserIdFromHeader(header);\n if (source) {\n info.source = source;\n continue;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return info;\n };\n\n var createFileLoader = function createFileLoader(fetchFn) {\n var state = {\n source: null,\n complete: false,\n progress: 0,\n size: null,\n timestamp: null,\n duration: 0,\n request: null,\n };\n\n var getProgress = function getProgress() {\n return state.progress;\n };\n var abort = function abort() {\n if (state.request && state.request.abort) {\n state.request.abort();\n }\n };\n\n // load source\n var load = function load() {\n // get quick reference\n var source = state.source;\n\n api.fire('init', source);\n\n // Load Files\n if (source instanceof File) {\n api.fire('load', source);\n } else if (source instanceof Blob) {\n // Load blobs, set default name to current date\n api.fire('load', getFileFromBlob(source, source.name));\n } else if (isBase64DataURI(source)) {\n // Load base 64, set default name to current date\n api.fire('load', getFileFromBase64DataURI(source));\n } else {\n // Deal as if is external URL, let's load it!\n loadURL(source);\n }\n };\n\n // loads a url\n var loadURL = function loadURL(url) {\n // is remote url and no fetch method supplied\n if (!fetchFn) {\n api.fire('error', {\n type: 'error',\n body: \"Can't load URL\",\n code: 400,\n });\n\n return;\n }\n\n // set request start\n state.timestamp = Date.now();\n\n // load file\n state.request = fetchFn(\n url,\n function(response) {\n // update duration\n state.duration = Date.now() - state.timestamp;\n\n // done!\n state.complete = true;\n\n // turn blob response into a file\n if (response instanceof Blob) {\n response = getFileFromBlob(\n response,\n response.name || getFilenameFromURL(url)\n );\n }\n\n api.fire(\n 'load',\n // if has received blob, we go with blob, if no response, we return null\n response instanceof Blob ? response : response ? response.body : null\n );\n },\n function(error) {\n api.fire(\n 'error',\n typeof error === 'string'\n ? {\n type: 'error',\n code: 0,\n body: error,\n }\n : error\n );\n },\n function(computable, current, total) {\n // collected some meta data already\n if (total) {\n state.size = total;\n }\n\n // update duration\n state.duration = Date.now() - state.timestamp;\n\n // if we can't compute progress, we're not going to fire progress events\n if (!computable) {\n state.progress = null;\n return;\n }\n\n // update progress percentage\n state.progress = current / total;\n\n // expose\n api.fire('progress', state.progress);\n },\n function() {\n api.fire('abort');\n },\n function(response) {\n var fileinfo = getFileInfoFromHeaders(\n typeof response === 'string' ? response : response.headers\n );\n api.fire('meta', {\n size: state.size || fileinfo.size,\n filename: fileinfo.name,\n source: fileinfo.source,\n });\n }\n );\n };\n\n var api = Object.assign({}, on(), {\n setSource: function setSource(source) {\n return (state.source = source);\n },\n getProgress: getProgress, // file load progress\n abort: abort, // abort file load\n load: load, // start load\n });\n\n return api;\n };\n\n var isGet = function isGet(method) {\n return /GET|HEAD/.test(method);\n };\n\n var sendRequest = function sendRequest(data, url, options) {\n var api = {\n onheaders: function onheaders() {},\n onprogress: function onprogress() {},\n onload: function onload() {},\n ontimeout: function ontimeout() {},\n onerror: function onerror() {},\n onabort: function onabort() {},\n abort: function abort() {\n aborted = true;\n xhr.abort();\n },\n };\n\n // timeout identifier, only used when timeout is defined\n var aborted = false;\n var headersReceived = false;\n\n // set default options\n options = Object.assign(\n {\n method: 'POST',\n headers: {},\n withCredentials: false,\n },\n options\n );\n\n // encode url\n url = encodeURI(url);\n\n // if method is GET, add any received data to url\n\n if (isGet(options.method) && data) {\n url =\n '' +\n url +\n encodeURIComponent(typeof data === 'string' ? data : JSON.stringify(data));\n }\n\n // create request\n var xhr = new XMLHttpRequest();\n\n // progress of load\n var process = isGet(options.method) ? xhr : xhr.upload;\n process.onprogress = function(e) {\n // no progress event when aborted ( onprogress is called once after abort() )\n if (aborted) {\n return;\n }\n\n api.onprogress(e.lengthComputable, e.loaded, e.total);\n };\n\n // tries to get header info to the app as fast as possible\n xhr.onreadystatechange = function() {\n // not interesting in these states ('unsent' and 'openend' as they don't give us any additional info)\n if (xhr.readyState < 2) {\n return;\n }\n\n // no server response\n if (xhr.readyState === 4 && xhr.status === 0) {\n return;\n }\n\n if (headersReceived) {\n return;\n }\n\n headersReceived = true;\n\n // we've probably received some useful data in response headers\n api.onheaders(xhr);\n };\n\n // load successful\n xhr.onload = function() {\n // is classified as valid response\n if (xhr.status >= 200 && xhr.status < 300) {\n api.onload(xhr);\n } else {\n api.onerror(xhr);\n }\n };\n\n // error during load\n xhr.onerror = function() {\n return api.onerror(xhr);\n };\n\n // request aborted\n xhr.onabort = function() {\n aborted = true;\n api.onabort();\n };\n\n // request timeout\n xhr.ontimeout = function() {\n return api.ontimeout(xhr);\n };\n\n // open up open up!\n xhr.open(options.method, url, true);\n\n // set timeout if defined (do it after open so IE11 plays ball)\n if (isInt(options.timeout)) {\n xhr.timeout = options.timeout;\n }\n\n // add headers\n Object.keys(options.headers).forEach(function(key) {\n var value = unescape(encodeURIComponent(options.headers[key]));\n xhr.setRequestHeader(key, value);\n });\n\n // set type of response\n if (options.responseType) {\n xhr.responseType = options.responseType;\n }\n\n // set credentials\n if (options.withCredentials) {\n xhr.withCredentials = true;\n }\n\n // let's send our data\n xhr.send(data);\n\n return api;\n };\n\n var createResponse = function createResponse(type, code, body, headers) {\n return {\n type: type,\n code: code,\n body: body,\n headers: headers,\n };\n };\n\n var createTimeoutResponse = function createTimeoutResponse(cb) {\n return function(xhr) {\n cb(createResponse('error', 0, 'Timeout', xhr.getAllResponseHeaders()));\n };\n };\n\n var hasQS = function hasQS(str) {\n return /\\?/.test(str);\n };\n var buildURL = function buildURL() {\n var url = '';\n for (var _len = arguments.length, parts = new Array(_len), _key = 0; _key < _len; _key++) {\n parts[_key] = arguments[_key];\n }\n parts.forEach(function(part) {\n url += hasQS(url) && hasQS(part) ? part.replace(/\\?/, '&') : part;\n });\n return url;\n };\n\n var createFetchFunction = function createFetchFunction() {\n var apiUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var action = arguments.length > 1 ? arguments[1] : undefined;\n // custom handler (should also handle file, load, error, progress and abort)\n if (typeof action === 'function') {\n return action;\n }\n\n // no action supplied\n if (!action || !isString(action.url)) {\n return null;\n }\n\n // set onload hanlder\n var onload =\n action.onload ||\n function(res) {\n return res;\n };\n var onerror =\n action.onerror ||\n function(res) {\n return null;\n };\n\n // internal handler\n return function(url, load, error, progress, abort, headers) {\n // do local or remote request based on if the url is external\n var request = sendRequest(\n url,\n buildURL(apiUrl, action.url),\n Object.assign({}, action, {\n responseType: 'blob',\n })\n );\n\n request.onload = function(xhr) {\n // get headers\n var headers = xhr.getAllResponseHeaders();\n\n // get filename\n var filename = getFileInfoFromHeaders(headers).name || getFilenameFromURL(url);\n\n // create response\n load(\n createResponse(\n 'load',\n xhr.status,\n action.method === 'HEAD'\n ? null\n : getFileFromBlob(onload(xhr.response), filename),\n headers\n )\n );\n };\n\n request.onerror = function(xhr) {\n error(\n createResponse(\n 'error',\n xhr.status,\n onerror(xhr.response) || xhr.statusText,\n xhr.getAllResponseHeaders()\n )\n );\n };\n\n request.onheaders = function(xhr) {\n headers(createResponse('headers', xhr.status, null, xhr.getAllResponseHeaders()));\n };\n\n request.ontimeout = createTimeoutResponse(error);\n request.onprogress = progress;\n request.onabort = abort;\n\n // should return request\n return request;\n };\n };\n\n var ChunkStatus = {\n QUEUED: 0,\n COMPLETE: 1,\n PROCESSING: 2,\n ERROR: 3,\n WAITING: 4,\n };\n\n /*\n function signature:\n (file, metadata, load, error, progress, abort, transfer, options) => {\n return {\n abort:() => {}\n }\n }\n */\n\n // apiUrl, action, name, file, metadata, load, error, progress, abort, transfer, options\n var processFileChunked = function processFileChunked(\n apiUrl,\n action,\n name,\n file,\n metadata,\n load,\n error,\n progress,\n abort,\n transfer,\n options\n ) {\n // all chunks\n var chunks = [];\n var chunkTransferId = options.chunkTransferId,\n chunkServer = options.chunkServer,\n chunkSize = options.chunkSize,\n chunkRetryDelays = options.chunkRetryDelays;\n\n // default state\n var state = {\n serverId: chunkTransferId,\n aborted: false,\n };\n\n // set onload handlers\n var ondata =\n action.ondata ||\n function(fd) {\n return fd;\n };\n var onload =\n action.onload ||\n function(xhr, method) {\n return method === 'HEAD' ? xhr.getResponseHeader('Upload-Offset') : xhr.response;\n };\n var onerror =\n action.onerror ||\n function(res) {\n return null;\n };\n\n // create server hook\n var requestTransferId = function requestTransferId(cb) {\n var formData = new FormData();\n\n // add metadata under same name\n if (isObject(metadata)) formData.append(name, JSON.stringify(metadata));\n\n var headers =\n typeof action.headers === 'function'\n ? action.headers(file, metadata)\n : Object.assign({}, action.headers, {\n 'Upload-Length': file.size,\n });\n\n var requestParams = Object.assign({}, action, {\n headers: headers,\n });\n\n // send request object\n var request = sendRequest(\n ondata(formData),\n buildURL(apiUrl, action.url),\n requestParams\n );\n\n request.onload = function(xhr) {\n return cb(onload(xhr, requestParams.method));\n };\n\n request.onerror = function(xhr) {\n return error(\n createResponse(\n 'error',\n xhr.status,\n onerror(xhr.response) || xhr.statusText,\n xhr.getAllResponseHeaders()\n )\n );\n };\n\n request.ontimeout = createTimeoutResponse(error);\n };\n\n var requestTransferOffset = function requestTransferOffset(cb) {\n var requestUrl = buildURL(apiUrl, chunkServer.url, state.serverId);\n\n var headers =\n typeof action.headers === 'function'\n ? action.headers(state.serverId)\n : Object.assign({}, action.headers);\n\n var requestParams = {\n headers: headers,\n method: 'HEAD',\n };\n\n var request = sendRequest(null, requestUrl, requestParams);\n\n request.onload = function(xhr) {\n return cb(onload(xhr, requestParams.method));\n };\n\n request.onerror = function(xhr) {\n return error(\n createResponse(\n 'error',\n xhr.status,\n onerror(xhr.response) || xhr.statusText,\n xhr.getAllResponseHeaders()\n )\n );\n };\n\n request.ontimeout = createTimeoutResponse(error);\n };\n\n // create chunks\n var lastChunkIndex = Math.floor(file.size / chunkSize);\n for (var i = 0; i <= lastChunkIndex; i++) {\n var offset = i * chunkSize;\n var data = file.slice(offset, offset + chunkSize, 'application/offset+octet-stream');\n chunks[i] = {\n index: i,\n size: data.size,\n offset: offset,\n data: data,\n file: file,\n progress: 0,\n retries: _toConsumableArray(chunkRetryDelays),\n status: ChunkStatus.QUEUED,\n error: null,\n request: null,\n timeout: null,\n };\n }\n\n var completeProcessingChunks = function completeProcessingChunks() {\n return load(state.serverId);\n };\n\n var canProcessChunk = function canProcessChunk(chunk) {\n return chunk.status === ChunkStatus.QUEUED || chunk.status === ChunkStatus.ERROR;\n };\n\n var processChunk = function processChunk(chunk) {\n // processing is paused, wait here\n if (state.aborted) return;\n\n // get next chunk to process\n chunk = chunk || chunks.find(canProcessChunk);\n\n // no more chunks to process\n if (!chunk) {\n // all done?\n if (\n chunks.every(function(chunk) {\n return chunk.status === ChunkStatus.COMPLETE;\n })\n ) {\n completeProcessingChunks();\n }\n\n // no chunk to handle\n return;\n }\n\n // now processing this chunk\n chunk.status = ChunkStatus.PROCESSING;\n chunk.progress = null;\n\n // allow parsing of formdata\n var ondata =\n chunkServer.ondata ||\n function(fd) {\n return fd;\n };\n var onerror =\n chunkServer.onerror ||\n function(res) {\n return null;\n };\n\n // send request object\n var requestUrl = buildURL(apiUrl, chunkServer.url, state.serverId);\n\n var headers =\n typeof chunkServer.headers === 'function'\n ? chunkServer.headers(chunk)\n : Object.assign({}, chunkServer.headers, {\n 'Content-Type': 'application/offset+octet-stream',\n 'Upload-Offset': chunk.offset,\n 'Upload-Length': file.size,\n 'Upload-Name': file.name,\n });\n\n var request = (chunk.request = sendRequest(\n ondata(chunk.data),\n requestUrl,\n Object.assign({}, chunkServer, {\n headers: headers,\n })\n ));\n\n request.onload = function() {\n // done!\n chunk.status = ChunkStatus.COMPLETE;\n\n // remove request reference\n chunk.request = null;\n\n // start processing more chunks\n processChunks();\n };\n\n request.onprogress = function(lengthComputable, loaded, total) {\n chunk.progress = lengthComputable ? loaded : null;\n updateTotalProgress();\n };\n\n request.onerror = function(xhr) {\n chunk.status = ChunkStatus.ERROR;\n chunk.request = null;\n chunk.error = onerror(xhr.response) || xhr.statusText;\n if (!retryProcessChunk(chunk)) {\n error(\n createResponse(\n 'error',\n xhr.status,\n onerror(xhr.response) || xhr.statusText,\n xhr.getAllResponseHeaders()\n )\n );\n }\n };\n\n request.ontimeout = function(xhr) {\n chunk.status = ChunkStatus.ERROR;\n chunk.request = null;\n if (!retryProcessChunk(chunk)) {\n createTimeoutResponse(error)(xhr);\n }\n };\n\n request.onabort = function() {\n chunk.status = ChunkStatus.QUEUED;\n chunk.request = null;\n abort();\n };\n };\n\n var retryProcessChunk = function retryProcessChunk(chunk) {\n // no more retries left\n if (chunk.retries.length === 0) return false;\n\n // new retry\n chunk.status = ChunkStatus.WAITING;\n clearTimeout(chunk.timeout);\n chunk.timeout = setTimeout(function() {\n processChunk(chunk);\n }, chunk.retries.shift());\n\n // we're going to retry\n return true;\n };\n\n var updateTotalProgress = function updateTotalProgress() {\n // calculate total progress fraction\n var totalBytesTransfered = chunks.reduce(function(p, chunk) {\n if (p === null || chunk.progress === null) return null;\n return p + chunk.progress;\n }, 0);\n\n // can't compute progress\n if (totalBytesTransfered === null) return progress(false, 0, 0);\n\n // calculate progress values\n var totalSize = chunks.reduce(function(total, chunk) {\n return total + chunk.size;\n }, 0);\n\n // can update progress indicator\n progress(true, totalBytesTransfered, totalSize);\n };\n\n // process new chunks\n var processChunks = function processChunks() {\n var totalProcessing = chunks.filter(function(chunk) {\n return chunk.status === ChunkStatus.PROCESSING;\n }).length;\n if (totalProcessing >= 1) return;\n processChunk();\n };\n\n var abortChunks = function abortChunks() {\n chunks.forEach(function(chunk) {\n clearTimeout(chunk.timeout);\n if (chunk.request) {\n chunk.request.abort();\n }\n });\n };\n\n // let's go!\n if (!state.serverId) {\n requestTransferId(function(serverId) {\n // stop here if aborted, might have happened in between request and callback\n if (state.aborted) return;\n\n // pass back to item so we can use it if something goes wrong\n transfer(serverId);\n\n // store internally\n state.serverId = serverId;\n processChunks();\n });\n } else {\n requestTransferOffset(function(offset) {\n // stop here if aborted, might have happened in between request and callback\n if (state.aborted) return;\n\n // mark chunks with lower offset as complete\n chunks\n .filter(function(chunk) {\n return chunk.offset < offset;\n })\n .forEach(function(chunk) {\n chunk.status = ChunkStatus.COMPLETE;\n chunk.progress = chunk.size;\n });\n\n // continue processing\n processChunks();\n });\n }\n\n return {\n abort: function abort() {\n state.aborted = true;\n abortChunks();\n },\n };\n };\n\n /*\n function signature:\n (file, metadata, load, error, progress, abort) => {\n return {\n abort:() => {}\n }\n }\n */\n var createFileProcessorFunction = function createFileProcessorFunction(\n apiUrl,\n action,\n name,\n options\n ) {\n return function(file, metadata, load, error, progress, abort, transfer) {\n // no file received\n if (!file) return;\n\n // if was passed a file, and we can chunk it, exit here\n var canChunkUpload = options.chunkUploads;\n var shouldChunkUpload = canChunkUpload && file.size > options.chunkSize;\n var willChunkUpload = canChunkUpload && (shouldChunkUpload || options.chunkForce);\n if (file instanceof Blob && willChunkUpload)\n return processFileChunked(\n apiUrl,\n action,\n name,\n file,\n metadata,\n load,\n error,\n progress,\n abort,\n transfer,\n options\n );\n\n // set handlers\n var ondata =\n action.ondata ||\n function(fd) {\n return fd;\n };\n var onload =\n action.onload ||\n function(res) {\n return res;\n };\n var onerror =\n action.onerror ||\n function(res) {\n return null;\n };\n\n var headers =\n typeof action.headers === 'function'\n ? action.headers(file, metadata) || {}\n : Object.assign(\n {},\n\n action.headers\n );\n\n var requestParams = Object.assign({}, action, {\n headers: headers,\n });\n\n // create formdata object\n var formData = new FormData();\n\n // add metadata under same name\n if (isObject(metadata)) {\n formData.append(name, JSON.stringify(metadata));\n }\n\n // Turn into an array of objects so no matter what the input, we can handle it the same way\n (file instanceof Blob ? [{ name: null, file: file }] : file).forEach(function(item) {\n formData.append(\n name,\n item.file,\n item.name === null ? item.file.name : '' + item.name + item.file.name\n );\n });\n\n // send request object\n var request = sendRequest(\n ondata(formData),\n buildURL(apiUrl, action.url),\n requestParams\n );\n request.onload = function(xhr) {\n load(\n createResponse(\n 'load',\n xhr.status,\n onload(xhr.response),\n xhr.getAllResponseHeaders()\n )\n );\n };\n\n request.onerror = function(xhr) {\n error(\n createResponse(\n 'error',\n xhr.status,\n onerror(xhr.response) || xhr.statusText,\n xhr.getAllResponseHeaders()\n )\n );\n };\n\n request.ontimeout = createTimeoutResponse(error);\n request.onprogress = progress;\n request.onabort = abort;\n\n // should return request\n return request;\n };\n };\n\n var createProcessorFunction = function createProcessorFunction() {\n var apiUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var name = arguments.length > 2 ? arguments[2] : undefined;\n var options = arguments.length > 3 ? arguments[3] : undefined;\n\n // custom handler (should also handle file, load, error, progress and abort)\n if (typeof action === 'function')\n return function() {\n for (\n var _len = arguments.length, params = new Array(_len), _key = 0;\n _key < _len;\n _key++\n ) {\n params[_key] = arguments[_key];\n }\n return action.apply(void 0, [name].concat(params, [options]));\n };\n\n // no action supplied\n if (!action || !isString(action.url)) return null;\n\n // internal handler\n return createFileProcessorFunction(apiUrl, action, name, options);\n };\n\n /*\n function signature:\n (uniqueFileId, load, error) => { }\n */\n var createRevertFunction = function createRevertFunction() {\n var apiUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var action = arguments.length > 1 ? arguments[1] : undefined;\n // is custom implementation\n if (typeof action === 'function') {\n return action;\n }\n\n // no action supplied, return stub function, interface will work, but file won't be removed\n if (!action || !isString(action.url)) {\n return function(uniqueFileId, load) {\n return load();\n };\n }\n\n // set onload hanlder\n var onload =\n action.onload ||\n function(res) {\n return res;\n };\n var onerror =\n action.onerror ||\n function(res) {\n return null;\n };\n\n // internal implementation\n return function(uniqueFileId, load, error) {\n var request = sendRequest(\n uniqueFileId,\n apiUrl + action.url,\n action // contains method, headers and withCredentials properties\n );\n request.onload = function(xhr) {\n load(\n createResponse(\n 'load',\n xhr.status,\n onload(xhr.response),\n xhr.getAllResponseHeaders()\n )\n );\n };\n\n request.onerror = function(xhr) {\n error(\n createResponse(\n 'error',\n xhr.status,\n onerror(xhr.response) || xhr.statusText,\n xhr.getAllResponseHeaders()\n )\n );\n };\n\n request.ontimeout = createTimeoutResponse(error);\n\n return request;\n };\n };\n\n var getRandomNumber = function getRandomNumber() {\n var min = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n return min + Math.random() * (max - min);\n };\n\n var createPerceivedPerformanceUpdater = function createPerceivedPerformanceUpdater(cb) {\n var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var tickMin = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 25;\n var tickMax = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 250;\n var timeout = null;\n var start = Date.now();\n\n var tick = function tick() {\n var runtime = Date.now() - start;\n var delay = getRandomNumber(tickMin, tickMax);\n\n if (runtime + delay > duration) {\n delay = runtime + delay - duration;\n }\n\n var progress = runtime / duration;\n if (progress >= 1 || document.hidden) {\n cb(1);\n return;\n }\n\n cb(progress);\n\n timeout = setTimeout(tick, delay);\n };\n\n if (duration > 0) tick();\n\n return {\n clear: function clear() {\n clearTimeout(timeout);\n },\n };\n };\n\n var createFileProcessor = function createFileProcessor(processFn, options) {\n var state = {\n complete: false,\n perceivedProgress: 0,\n perceivedPerformanceUpdater: null,\n progress: null,\n timestamp: null,\n perceivedDuration: 0,\n duration: 0,\n request: null,\n response: null,\n };\n var allowMinimumUploadDuration = options.allowMinimumUploadDuration;\n\n var process = function process(file, metadata) {\n var progressFn = function progressFn() {\n // we've not yet started the real download, stop here\n // the request might not go through, for instance, there might be some server trouble\n // if state.progress is null, the server does not allow computing progress and we show the spinner instead\n if (state.duration === 0 || state.progress === null) return;\n\n // as we're now processing, fire the progress event\n api.fire('progress', api.getProgress());\n };\n\n var completeFn = function completeFn() {\n state.complete = true;\n api.fire('load-perceived', state.response.body);\n };\n\n // let's start processing\n api.fire('start');\n\n // set request start\n state.timestamp = Date.now();\n\n // create perceived performance progress indicator\n state.perceivedPerformanceUpdater = createPerceivedPerformanceUpdater(\n function(progress) {\n state.perceivedProgress = progress;\n state.perceivedDuration = Date.now() - state.timestamp;\n\n progressFn();\n\n // if fake progress is done, and a response has been received,\n // and we've not yet called the complete method\n if (state.response && state.perceivedProgress === 1 && !state.complete) {\n // we done!\n completeFn();\n }\n },\n // random delay as in a list of files you start noticing\n // files uploading at the exact same speed\n allowMinimumUploadDuration ? getRandomNumber(750, 1500) : 0\n );\n\n // remember request so we can abort it later\n state.request = processFn(\n // the file to process\n file,\n\n // the metadata to send along\n metadata,\n\n // callbacks (load, error, progress, abort, transfer)\n // load expects the body to be a server id if\n // you want to make use of revert\n function(response) {\n // we put the response in state so we can access\n // it outside of this method\n state.response = isObject(response)\n ? response\n : {\n type: 'load',\n code: 200,\n body: '' + response,\n headers: {},\n };\n\n // update duration\n state.duration = Date.now() - state.timestamp;\n\n // force progress to 1 as we're now done\n state.progress = 1;\n\n // actual load is done let's share results\n api.fire('load', state.response.body);\n\n // we are really done\n // if perceived progress is 1 ( wait for perceived progress to complete )\n // or if server does not support progress ( null )\n if (\n !allowMinimumUploadDuration ||\n (allowMinimumUploadDuration && state.perceivedProgress === 1)\n ) {\n completeFn();\n }\n },\n\n // error is expected to be an object with type, code, body\n function(error) {\n // cancel updater\n state.perceivedPerformanceUpdater.clear();\n\n // update others about this error\n api.fire(\n 'error',\n isObject(error)\n ? error\n : {\n type: 'error',\n code: 0,\n body: '' + error,\n }\n );\n },\n\n // actual processing progress\n function(computable, current, total) {\n // update actual duration\n state.duration = Date.now() - state.timestamp;\n\n // update actual progress\n state.progress = computable ? current / total : null;\n\n progressFn();\n },\n\n // abort does not expect a value\n function() {\n // stop updater\n state.perceivedPerformanceUpdater.clear();\n\n // fire the abort event so we can switch visuals\n api.fire('abort', state.response ? state.response.body : null);\n },\n\n // register the id for this transfer\n function(transferId) {\n api.fire('transfer', transferId);\n }\n );\n };\n\n var abort = function abort() {\n // no request running, can't abort\n if (!state.request) return;\n\n // stop updater\n state.perceivedPerformanceUpdater.clear();\n\n // abort actual request\n if (state.request.abort) state.request.abort();\n\n // if has response object, we've completed the request\n state.complete = true;\n };\n\n var reset = function reset() {\n abort();\n state.complete = false;\n state.perceivedProgress = 0;\n state.progress = 0;\n state.timestamp = null;\n state.perceivedDuration = 0;\n state.duration = 0;\n state.request = null;\n state.response = null;\n };\n\n var getProgress = allowMinimumUploadDuration\n ? function() {\n return state.progress ? Math.min(state.progress, state.perceivedProgress) : null;\n }\n : function() {\n return state.progress || null;\n };\n\n var getDuration = allowMinimumUploadDuration\n ? function() {\n return Math.min(state.duration, state.perceivedDuration);\n }\n : function() {\n return state.duration;\n };\n\n var api = Object.assign({}, on(), {\n process: process, // start processing file\n abort: abort, // abort active process request\n getProgress: getProgress,\n getDuration: getDuration,\n reset: reset,\n });\n\n return api;\n };\n\n var getFilenameWithoutExtension = function getFilenameWithoutExtension(name) {\n return name.substring(0, name.lastIndexOf('.')) || name;\n };\n\n var createFileStub = function createFileStub(source) {\n var data = [source.name, source.size, source.type];\n\n // is blob or base64, then we need to set the name\n if (source instanceof Blob || isBase64DataURI(source)) {\n data[0] = source.name || getDateString();\n } else if (isBase64DataURI(source)) {\n // if is base64 data uri we need to determine the average size and type\n data[1] = source.length;\n data[2] = getMimeTypeFromBase64DataURI(source);\n } else if (isString(source)) {\n // url\n data[0] = getFilenameFromURL(source);\n data[1] = 0;\n data[2] = 'application/octet-stream';\n }\n\n return {\n name: data[0],\n size: data[1],\n type: data[2],\n };\n };\n\n var isFile = function isFile(value) {\n return !!(value instanceof File || (value instanceof Blob && value.name));\n };\n\n var deepCloneObject = function deepCloneObject(src) {\n if (!isObject(src)) return src;\n var target = isArray(src) ? [] : {};\n for (var key in src) {\n if (!src.hasOwnProperty(key)) continue;\n var v = src[key];\n target[key] = v && isObject(v) ? deepCloneObject(v) : v;\n }\n return target;\n };\n\n var createItem = function createItem() {\n var origin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var serverFileReference =\n arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var file = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n // unique id for this item, is used to identify the item across views\n var id = getUniqueId();\n\n /**\n * Internal item state\n */\n var state = {\n // is archived\n archived: false,\n\n // if is frozen, no longer fires events\n frozen: false,\n\n // removed from view\n released: false,\n\n // original source\n source: null,\n\n // file model reference\n file: file,\n\n // id of file on server\n serverFileReference: serverFileReference,\n\n // id of file transfer on server\n transferId: null,\n\n // is aborted\n processingAborted: false,\n\n // current item status\n status: serverFileReference ? ItemStatus.PROCESSING_COMPLETE : ItemStatus.INIT,\n\n // active processes\n activeLoader: null,\n activeProcessor: null,\n };\n\n // callback used when abort processing is called to link back to the resolve method\n var abortProcessingRequestComplete = null;\n\n /**\n * Externally added item metadata\n */\n var metadata = {};\n\n // item data\n var setStatus = function setStatus(status) {\n return (state.status = status);\n };\n\n // fire event unless the item has been archived\n var fire = function fire(event) {\n if (state.released || state.frozen) return;\n for (\n var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1;\n _key < _len;\n _key++\n ) {\n params[_key - 1] = arguments[_key];\n }\n api.fire.apply(api, [event].concat(params));\n };\n\n // file data\n var getFileExtension = function getFileExtension() {\n return getExtensionFromFilename(state.file.name);\n };\n var getFileType = function getFileType() {\n return state.file.type;\n };\n var getFileSize = function getFileSize() {\n return state.file.size;\n };\n var getFile = function getFile() {\n return state.file;\n };\n\n //\n // logic to load a file\n //\n var load = function load(source, loader, onload) {\n // remember the original item source\n state.source = source;\n\n // source is known\n api.fireSync('init');\n\n // file stub is already there\n if (state.file) {\n api.fireSync('load-skip');\n return;\n }\n\n // set a stub file object while loading the actual data\n state.file = createFileStub(source);\n\n // starts loading\n loader.on('init', function() {\n fire('load-init');\n });\n\n // we'eve received a size indication, let's update the stub\n loader.on('meta', function(meta) {\n // set size of file stub\n state.file.size = meta.size;\n\n // set name of file stub\n state.file.filename = meta.filename;\n\n // if has received source, we done\n if (meta.source) {\n origin = FileOrigin.LIMBO;\n state.serverFileReference = meta.source;\n state.status = ItemStatus.PROCESSING_COMPLETE;\n }\n\n // size has been updated\n fire('load-meta');\n });\n\n // the file is now loading we need to update the progress indicators\n loader.on('progress', function(progress) {\n setStatus(ItemStatus.LOADING);\n\n fire('load-progress', progress);\n });\n\n // an error was thrown while loading the file, we need to switch to error state\n loader.on('error', function(error) {\n setStatus(ItemStatus.LOAD_ERROR);\n\n fire('load-request-error', error);\n });\n\n // user or another process aborted the file load (cannot retry)\n loader.on('abort', function() {\n setStatus(ItemStatus.INIT);\n fire('load-abort');\n });\n\n // done loading\n loader.on('load', function(file) {\n // as we've now loaded the file the loader is no longer required\n state.activeLoader = null;\n\n // called when file has loaded succesfully\n var success = function success(result) {\n // set (possibly) transformed file\n state.file = isFile(result) ? result : state.file;\n\n // file received\n if (origin === FileOrigin.LIMBO && state.serverFileReference) {\n setStatus(ItemStatus.PROCESSING_COMPLETE);\n } else {\n setStatus(ItemStatus.IDLE);\n }\n\n fire('load');\n };\n\n var error = function error(result) {\n // set original file\n state.file = file;\n fire('load-meta');\n\n setStatus(ItemStatus.LOAD_ERROR);\n fire('load-file-error', result);\n };\n\n // if we already have a server file reference, we don't need to call the onload method\n if (state.serverFileReference) {\n success(file);\n return;\n }\n\n // no server id, let's give this file the full treatment\n onload(file, success, error);\n });\n\n // set loader source data\n loader.setSource(source);\n\n // set as active loader\n state.activeLoader = loader;\n\n // load the source data\n loader.load();\n };\n\n var retryLoad = function retryLoad() {\n if (!state.activeLoader) {\n return;\n }\n state.activeLoader.load();\n };\n\n var abortLoad = function abortLoad() {\n if (state.activeLoader) {\n state.activeLoader.abort();\n return;\n }\n setStatus(ItemStatus.INIT);\n fire('load-abort');\n };\n\n //\n // logic to process a file\n //\n var process = function process(processor, onprocess) {\n // processing was aborted\n if (state.processingAborted) {\n state.processingAborted = false;\n return;\n }\n\n // now processing\n setStatus(ItemStatus.PROCESSING);\n\n // reset abort callback\n abortProcessingRequestComplete = null;\n\n // if no file loaded we'll wait for the load event\n if (!(state.file instanceof Blob)) {\n api.on('load', function() {\n process(processor, onprocess);\n });\n return;\n }\n\n // setup processor\n processor.on('load', function(serverFileReference) {\n // need this id to be able to revert the upload\n state.transferId = null;\n state.serverFileReference = serverFileReference;\n });\n\n // register transfer id\n processor.on('transfer', function(transferId) {\n // need this id to be able to revert the upload\n state.transferId = transferId;\n });\n\n processor.on('load-perceived', function(serverFileReference) {\n // no longer required\n state.activeProcessor = null;\n\n // need this id to be able to rever the upload\n state.transferId = null;\n state.serverFileReference = serverFileReference;\n\n setStatus(ItemStatus.PROCESSING_COMPLETE);\n fire('process-complete', serverFileReference);\n });\n\n processor.on('start', function() {\n fire('process-start');\n });\n\n processor.on('error', function(error) {\n state.activeProcessor = null;\n setStatus(ItemStatus.PROCESSING_ERROR);\n fire('process-error', error);\n });\n\n processor.on('abort', function(serverFileReference) {\n state.activeProcessor = null;\n\n // if file was uploaded but processing was cancelled during perceived processor time store file reference\n state.serverFileReference = serverFileReference;\n\n setStatus(ItemStatus.IDLE);\n fire('process-abort');\n\n // has timeout so doesn't interfere with remove action\n if (abortProcessingRequestComplete) {\n abortProcessingRequestComplete();\n }\n });\n\n processor.on('progress', function(progress) {\n fire('process-progress', progress);\n });\n\n // when successfully transformed\n var success = function success(file) {\n // if was archived in the mean time, don't process\n if (state.archived) return;\n\n // process file!\n processor.process(file, Object.assign({}, metadata));\n };\n\n // something went wrong during transform phase\n var error = console.error;\n\n // start processing the file\n onprocess(state.file, success, error);\n\n // set as active processor\n state.activeProcessor = processor;\n };\n\n var requestProcessing = function requestProcessing() {\n state.processingAborted = false;\n setStatus(ItemStatus.PROCESSING_QUEUED);\n };\n\n var abortProcessing = function abortProcessing() {\n return new Promise(function(resolve) {\n if (!state.activeProcessor) {\n state.processingAborted = true;\n\n setStatus(ItemStatus.IDLE);\n fire('process-abort');\n\n resolve();\n return;\n }\n\n abortProcessingRequestComplete = function abortProcessingRequestComplete() {\n resolve();\n };\n\n state.activeProcessor.abort();\n });\n };\n\n //\n // logic to revert a processed file\n //\n var revert = function revert(revertFileUpload, forceRevert) {\n return new Promise(function(resolve, reject) {\n // a completed upload will have a serverFileReference, a failed chunked upload where\n // getting a serverId succeeded but >=0 chunks have been uploaded will have transferId set\n var serverTransferId =\n state.serverFileReference !== null\n ? state.serverFileReference\n : state.transferId;\n\n // cannot revert without a server id for this process\n if (serverTransferId === null) {\n resolve();\n return;\n }\n\n // revert the upload (fire and forget)\n revertFileUpload(\n serverTransferId,\n function() {\n // reset file server id and transfer id as now it's not available on the server\n state.serverFileReference = null;\n state.transferId = null;\n resolve();\n },\n function(error) {\n // don't set error state when reverting is optional, it will always resolve\n if (!forceRevert) {\n resolve();\n return;\n }\n\n // oh no errors\n setStatus(ItemStatus.PROCESSING_REVERT_ERROR);\n fire('process-revert-error');\n reject(error);\n }\n );\n\n // fire event\n setStatus(ItemStatus.IDLE);\n fire('process-revert');\n });\n };\n\n // exposed methods\n var _setMetadata = function setMetadata(key, value, silent) {\n var keys = key.split('.');\n var root = keys[0];\n var last = keys.pop();\n var data = metadata;\n keys.forEach(function(key) {\n return (data = data[key]);\n });\n\n // compare old value against new value, if they're the same, we're not updating\n if (JSON.stringify(data[last]) === JSON.stringify(value)) return;\n\n // update value\n data[last] = value;\n\n // fire update\n fire('metadata-update', {\n key: root,\n value: metadata[root],\n silent: silent,\n });\n };\n\n var getMetadata = function getMetadata(key) {\n return deepCloneObject(key ? metadata[key] : metadata);\n };\n\n var api = Object.assign(\n {\n id: {\n get: function get() {\n return id;\n },\n },\n origin: {\n get: function get() {\n return origin;\n },\n set: function set(value) {\n return (origin = value);\n },\n },\n serverId: {\n get: function get() {\n return state.serverFileReference;\n },\n },\n transferId: {\n get: function get() {\n return state.transferId;\n },\n },\n status: {\n get: function get() {\n return state.status;\n },\n },\n filename: {\n get: function get() {\n return state.file.name;\n },\n },\n filenameWithoutExtension: {\n get: function get() {\n return getFilenameWithoutExtension(state.file.name);\n },\n },\n fileExtension: { get: getFileExtension },\n fileType: { get: getFileType },\n fileSize: { get: getFileSize },\n file: { get: getFile },\n relativePath: {\n get: function get() {\n return state.file._relativePath;\n },\n },\n\n source: {\n get: function get() {\n return state.source;\n },\n },\n\n getMetadata: getMetadata,\n setMetadata: function setMetadata(key, value, silent) {\n if (isObject(key)) {\n var data = key;\n Object.keys(data).forEach(function(key) {\n _setMetadata(key, data[key], value);\n });\n return key;\n }\n _setMetadata(key, value, silent);\n return value;\n },\n\n extend: function extend(name, handler) {\n return (itemAPI[name] = handler);\n },\n\n abortLoad: abortLoad,\n retryLoad: retryLoad,\n requestProcessing: requestProcessing,\n abortProcessing: abortProcessing,\n\n load: load,\n process: process,\n revert: revert,\n },\n\n on(),\n {\n freeze: function freeze() {\n return (state.frozen = true);\n },\n\n release: function release() {\n return (state.released = true);\n },\n released: {\n get: function get() {\n return state.released;\n },\n },\n\n archive: function archive() {\n return (state.archived = true);\n },\n archived: {\n get: function get() {\n return state.archived;\n },\n },\n }\n );\n\n // create it here instead of returning it instantly so we can extend it later\n var itemAPI = createObject(api);\n\n return itemAPI;\n };\n\n var getItemIndexByQuery = function getItemIndexByQuery(items, query) {\n // just return first index\n if (isEmpty(query)) {\n return 0;\n }\n\n // invalid queries\n if (!isString(query)) {\n return -1;\n }\n\n // return item by id (or -1 if not found)\n return items.findIndex(function(item) {\n return item.id === query;\n });\n };\n\n var getItemById = function getItemById(items, itemId) {\n var index = getItemIndexByQuery(items, itemId);\n if (index < 0) {\n return;\n }\n return items[index] || null;\n };\n\n var fetchBlob = function fetchBlob(url, load, error, progress, abort, headers) {\n var request = sendRequest(null, url, {\n method: 'GET',\n responseType: 'blob',\n });\n\n request.onload = function(xhr) {\n // get headers\n var headers = xhr.getAllResponseHeaders();\n\n // get filename\n var filename = getFileInfoFromHeaders(headers).name || getFilenameFromURL(url);\n\n // create response\n load(\n createResponse('load', xhr.status, getFileFromBlob(xhr.response, filename), headers)\n );\n };\n\n request.onerror = function(xhr) {\n error(createResponse('error', xhr.status, xhr.statusText, xhr.getAllResponseHeaders()));\n };\n\n request.onheaders = function(xhr) {\n headers(createResponse('headers', xhr.status, null, xhr.getAllResponseHeaders()));\n };\n\n request.ontimeout = createTimeoutResponse(error);\n request.onprogress = progress;\n request.onabort = abort;\n\n // should return request\n return request;\n };\n\n var getDomainFromURL = function getDomainFromURL(url) {\n if (url.indexOf('//') === 0) {\n url = location.protocol + url;\n }\n return url\n .toLowerCase()\n .replace('blob:', '')\n .replace(/([a-z])?:\\/\\//, '$1')\n .split('/')[0];\n };\n\n var isExternalURL = function isExternalURL(url) {\n return (\n (url.indexOf(':') > -1 || url.indexOf('//') > -1) &&\n getDomainFromURL(location.href) !== getDomainFromURL(url)\n );\n };\n\n var dynamicLabel = function dynamicLabel(label) {\n return function() {\n return isFunction(label) ? label.apply(void 0, arguments) : label;\n };\n };\n\n var isMockItem = function isMockItem(item) {\n return !isFile(item.file);\n };\n\n var listUpdated = function listUpdated(dispatch, state) {\n clearTimeout(state.listUpdateTimeout);\n state.listUpdateTimeout = setTimeout(function() {\n dispatch('DID_UPDATE_ITEMS', { items: getActiveItems(state.items) });\n }, 0);\n };\n\n var optionalPromise = function optionalPromise(fn) {\n for (\n var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1;\n _key < _len;\n _key++\n ) {\n params[_key - 1] = arguments[_key];\n }\n return new Promise(function(resolve) {\n if (!fn) {\n return resolve(true);\n }\n\n var result = fn.apply(void 0, params);\n\n if (result == null) {\n return resolve(true);\n }\n\n if (typeof result === 'boolean') {\n return resolve(result);\n }\n\n if (typeof result.then === 'function') {\n result.then(resolve);\n }\n });\n };\n\n var sortItems = function sortItems(state, compare) {\n state.items.sort(function(a, b) {\n return compare(createItemAPI(a), createItemAPI(b));\n });\n };\n\n // returns item based on state\n var getItemByQueryFromState = function getItemByQueryFromState(state, itemHandler) {\n return function() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var query = _ref.query,\n _ref$success = _ref.success,\n success = _ref$success === void 0 ? function() {} : _ref$success,\n _ref$failure = _ref.failure,\n failure = _ref$failure === void 0 ? function() {} : _ref$failure,\n options = _objectWithoutProperties(_ref, ['query', 'success', 'failure']);\n var item = getItemByQuery(state.items, query);\n if (!item) {\n failure({\n error: createResponse('error', 0, 'Item not found'),\n file: null,\n });\n\n return;\n }\n itemHandler(item, success, failure, options || {});\n };\n };\n\n var actions = function actions(dispatch, query, state) {\n return {\n /**\n * Aborts all ongoing processes\n */\n ABORT_ALL: function ABORT_ALL() {\n getActiveItems(state.items).forEach(function(item) {\n item.freeze();\n item.abortLoad();\n item.abortProcessing();\n });\n },\n\n /**\n * Sets initial files\n */\n DID_SET_FILES: function DID_SET_FILES(_ref2) {\n var _ref2$value = _ref2.value,\n value = _ref2$value === void 0 ? [] : _ref2$value;\n // map values to file objects\n var files = value.map(function(file) {\n return {\n source: file.source ? file.source : file,\n options: file.options,\n };\n });\n\n // loop over files, if file is in list, leave it be, if not, remove\n // test if items should be moved\n var activeItems = getActiveItems(state.items);\n\n activeItems.forEach(function(item) {\n // if item not is in new value, remove\n if (\n !files.find(function(file) {\n return file.source === item.source || file.source === item.file;\n })\n ) {\n dispatch('REMOVE_ITEM', { query: item, remove: false });\n }\n });\n\n // add new files\n activeItems = getActiveItems(state.items);\n files.forEach(function(file, index) {\n // if file is already in list\n if (\n activeItems.find(function(item) {\n return item.source === file.source || item.file === file.source;\n })\n )\n return;\n\n // not in list, add\n dispatch(\n 'ADD_ITEM',\n Object.assign({}, file, {\n interactionMethod: InteractionMethod.NONE,\n index: index,\n })\n );\n });\n },\n\n DID_UPDATE_ITEM_METADATA: function DID_UPDATE_ITEM_METADATA(_ref3) {\n var id = _ref3.id,\n action = _ref3.action,\n change = _ref3.change;\n // don't do anything\n if (change.silent) return;\n\n // if is called multiple times in close succession we combined all calls together to save resources\n clearTimeout(state.itemUpdateTimeout);\n state.itemUpdateTimeout = setTimeout(function() {\n var item = getItemById(state.items, id);\n\n // only revert and attempt to upload when we're uploading to a server\n if (!query('IS_ASYNC')) {\n // should we update the output data\n applyFilterChain('SHOULD_PREPARE_OUTPUT', false, {\n item: item,\n query: query,\n action: action,\n change: change,\n }).then(function(shouldPrepareOutput) {\n // plugins determined the output data should be prepared (or not), can be adjusted with beforePrepareOutput hook\n var beforePrepareFile = query('GET_BEFORE_PREPARE_FILE');\n if (beforePrepareFile)\n shouldPrepareOutput = beforePrepareFile(item, shouldPrepareOutput);\n\n if (!shouldPrepareOutput) return;\n\n dispatch(\n 'REQUEST_PREPARE_OUTPUT',\n {\n query: id,\n item: item,\n success: function success(file) {\n dispatch('DID_PREPARE_OUTPUT', { id: id, file: file });\n },\n },\n\n true\n );\n });\n\n return;\n }\n\n // if is local item we need to enable upload button so change can be propagated to server\n if (item.origin === FileOrigin.LOCAL) {\n dispatch('DID_LOAD_ITEM', {\n id: item.id,\n error: null,\n serverFileReference: item.source,\n });\n }\n\n // for async scenarios\n var upload = function upload() {\n // we push this forward a bit so the interface is updated correctly\n setTimeout(function() {\n dispatch('REQUEST_ITEM_PROCESSING', { query: id });\n }, 32);\n };\n\n var revert = function revert(doUpload) {\n item.revert(\n createRevertFunction(\n state.options.server.url,\n state.options.server.revert\n ),\n query('GET_FORCE_REVERT')\n )\n .then(doUpload ? upload : function() {})\n .catch(function() {});\n };\n\n var abort = function abort(doUpload) {\n item.abortProcessing().then(doUpload ? upload : function() {});\n };\n\n // if we should re-upload the file immediately\n if (item.status === ItemStatus.PROCESSING_COMPLETE) {\n return revert(state.options.instantUpload);\n }\n\n // if currently uploading, cancel upload\n if (item.status === ItemStatus.PROCESSING) {\n return abort(state.options.instantUpload);\n }\n\n if (state.options.instantUpload) {\n upload();\n }\n }, 0);\n },\n\n MOVE_ITEM: function MOVE_ITEM(_ref4) {\n var query = _ref4.query,\n index = _ref4.index;\n var item = getItemByQuery(state.items, query);\n if (!item) return;\n var currentIndex = state.items.indexOf(item);\n index = limit(index, 0, state.items.length - 1);\n if (currentIndex === index) return;\n state.items.splice(index, 0, state.items.splice(currentIndex, 1)[0]);\n },\n\n SORT: function SORT(_ref5) {\n var compare = _ref5.compare;\n sortItems(state, compare);\n dispatch('DID_SORT_ITEMS', {\n items: query('GET_ACTIVE_ITEMS'),\n });\n },\n\n ADD_ITEMS: function ADD_ITEMS(_ref6) {\n var items = _ref6.items,\n index = _ref6.index,\n interactionMethod = _ref6.interactionMethod,\n _ref6$success = _ref6.success,\n success = _ref6$success === void 0 ? function() {} : _ref6$success,\n _ref6$failure = _ref6.failure,\n failure = _ref6$failure === void 0 ? function() {} : _ref6$failure;\n var currentIndex = index;\n\n if (index === -1 || typeof index === 'undefined') {\n var insertLocation = query('GET_ITEM_INSERT_LOCATION');\n var totalItems = query('GET_TOTAL_ITEMS');\n currentIndex = insertLocation === 'before' ? 0 : totalItems;\n }\n\n var ignoredFiles = query('GET_IGNORED_FILES');\n var isValidFile = function isValidFile(source) {\n return isFile(source)\n ? !ignoredFiles.includes(source.name.toLowerCase())\n : !isEmpty(source);\n };\n var validItems = items.filter(isValidFile);\n\n var promises = validItems.map(function(source) {\n return new Promise(function(resolve, reject) {\n dispatch('ADD_ITEM', {\n interactionMethod: interactionMethod,\n source: source.source || source,\n success: resolve,\n failure: reject,\n index: currentIndex++,\n options: source.options || {},\n });\n });\n });\n\n Promise.all(promises)\n .then(success)\n .catch(failure);\n },\n\n /**\n * @param source\n * @param index\n * @param interactionMethod\n */\n ADD_ITEM: function ADD_ITEM(_ref7) {\n var source = _ref7.source,\n _ref7$index = _ref7.index,\n index = _ref7$index === void 0 ? -1 : _ref7$index,\n interactionMethod = _ref7.interactionMethod,\n _ref7$success = _ref7.success,\n success = _ref7$success === void 0 ? function() {} : _ref7$success,\n _ref7$failure = _ref7.failure,\n failure = _ref7$failure === void 0 ? function() {} : _ref7$failure,\n _ref7$options = _ref7.options,\n options = _ref7$options === void 0 ? {} : _ref7$options;\n // if no source supplied\n if (isEmpty(source)) {\n failure({\n error: createResponse('error', 0, 'No source'),\n file: null,\n });\n\n return;\n }\n\n // filter out invalid file items, used to filter dropped directory contents\n if (\n isFile(source) &&\n state.options.ignoredFiles.includes(source.name.toLowerCase())\n ) {\n // fail silently\n return;\n }\n\n // test if there's still room in the list of files\n if (!hasRoomForItem(state)) {\n // if multiple allowed, we can't replace\n // or if only a single item is allowed but we're not allowed to replace it we exit\n if (\n state.options.allowMultiple ||\n (!state.options.allowMultiple && !state.options.allowReplace)\n ) {\n var error = createResponse('warning', 0, 'Max files');\n\n dispatch('DID_THROW_MAX_FILES', {\n source: source,\n error: error,\n });\n\n failure({ error: error, file: null });\n\n return;\n }\n\n // let's replace the item\n // id of first item we're about to remove\n var _item = getActiveItems(state.items)[0];\n\n // if has been processed remove it from the server as well\n if (\n _item.status === ItemStatus.PROCESSING_COMPLETE ||\n _item.status === ItemStatus.PROCESSING_REVERT_ERROR\n ) {\n var forceRevert = query('GET_FORCE_REVERT');\n _item\n .revert(\n createRevertFunction(\n state.options.server.url,\n state.options.server.revert\n ),\n forceRevert\n )\n .then(function() {\n if (!forceRevert) return;\n\n // try to add now\n dispatch('ADD_ITEM', {\n source: source,\n index: index,\n interactionMethod: interactionMethod,\n success: success,\n failure: failure,\n options: options,\n });\n })\n .catch(function() {}); // no need to handle this catch state for now\n\n if (forceRevert) return;\n }\n\n // remove first item as it will be replaced by this item\n dispatch('REMOVE_ITEM', { query: _item.id });\n }\n\n // where did the file originate\n var origin =\n options.type === 'local'\n ? FileOrigin.LOCAL\n : options.type === 'limbo'\n ? FileOrigin.LIMBO\n : FileOrigin.INPUT;\n\n // create a new blank item\n var item = createItem(\n // where did this file come from\n origin,\n\n // an input file never has a server file reference\n origin === FileOrigin.INPUT ? null : source,\n\n // file mock data, if defined\n options.file\n );\n\n // set initial meta data\n Object.keys(options.metadata || {}).forEach(function(key) {\n item.setMetadata(key, options.metadata[key]);\n });\n\n // created the item, let plugins add methods\n applyFilters('DID_CREATE_ITEM', item, { query: query, dispatch: dispatch });\n\n // where to insert new items\n var itemInsertLocation = query('GET_ITEM_INSERT_LOCATION');\n\n // adjust index if is not allowed to pick location\n if (!state.options.itemInsertLocationFreedom) {\n index = itemInsertLocation === 'before' ? -1 : state.items.length;\n }\n\n // add item to list\n insertItem(state.items, item, index);\n\n // sort items in list\n if (isFunction(itemInsertLocation) && source) {\n sortItems(state, itemInsertLocation);\n }\n\n // get a quick reference to the item id\n var id = item.id;\n\n // observe item events\n item.on('init', function() {\n dispatch('DID_INIT_ITEM', { id: id });\n });\n\n item.on('load-init', function() {\n dispatch('DID_START_ITEM_LOAD', { id: id });\n });\n\n item.on('load-meta', function() {\n dispatch('DID_UPDATE_ITEM_META', { id: id });\n });\n\n item.on('load-progress', function(progress) {\n dispatch('DID_UPDATE_ITEM_LOAD_PROGRESS', { id: id, progress: progress });\n });\n\n item.on('load-request-error', function(error) {\n var mainStatus = dynamicLabel(state.options.labelFileLoadError)(error);\n\n // is client error, no way to recover\n if (error.code >= 400 && error.code < 500) {\n dispatch('DID_THROW_ITEM_INVALID', {\n id: id,\n error: error,\n status: {\n main: mainStatus,\n sub: error.code + ' (' + error.body + ')',\n },\n });\n\n // reject the file so can be dealt with through API\n failure({ error: error, file: createItemAPI(item) });\n return;\n }\n\n // is possible server error, so might be possible to retry\n dispatch('DID_THROW_ITEM_LOAD_ERROR', {\n id: id,\n error: error,\n status: {\n main: mainStatus,\n sub: state.options.labelTapToRetry,\n },\n });\n });\n\n item.on('load-file-error', function(error) {\n dispatch('DID_THROW_ITEM_INVALID', {\n id: id,\n error: error.status,\n status: error.status,\n });\n\n failure({ error: error.status, file: createItemAPI(item) });\n });\n\n item.on('load-abort', function() {\n dispatch('REMOVE_ITEM', { query: id });\n });\n\n item.on('load-skip', function() {\n dispatch('COMPLETE_LOAD_ITEM', {\n query: id,\n item: item,\n data: {\n source: source,\n success: success,\n },\n });\n });\n\n item.on('load', function() {\n var handleAdd = function handleAdd(shouldAdd) {\n // no should not add this file\n if (!shouldAdd) {\n dispatch('REMOVE_ITEM', {\n query: id,\n });\n\n return;\n }\n\n // now interested in metadata updates\n item.on('metadata-update', function(change) {\n dispatch('DID_UPDATE_ITEM_METADATA', { id: id, change: change });\n });\n\n // let plugins decide if the output data should be prepared at this point\n // means we'll do this and wait for idle state\n applyFilterChain('SHOULD_PREPARE_OUTPUT', false, {\n item: item,\n query: query,\n }).then(function(shouldPrepareOutput) {\n // plugins determined the output data should be prepared (or not), can be adjusted with beforePrepareOutput hook\n var beforePrepareFile = query('GET_BEFORE_PREPARE_FILE');\n if (beforePrepareFile)\n shouldPrepareOutput = beforePrepareFile(item, shouldPrepareOutput);\n\n var loadComplete = function loadComplete() {\n dispatch('COMPLETE_LOAD_ITEM', {\n query: id,\n item: item,\n data: {\n source: source,\n success: success,\n },\n });\n\n listUpdated(dispatch, state);\n };\n\n // exit\n if (shouldPrepareOutput) {\n // wait for idle state and then run PREPARE_OUTPUT\n dispatch(\n 'REQUEST_PREPARE_OUTPUT',\n {\n query: id,\n item: item,\n success: function success(file) {\n dispatch('DID_PREPARE_OUTPUT', { id: id, file: file });\n loadComplete();\n },\n },\n\n true\n );\n\n return;\n }\n\n loadComplete();\n });\n };\n\n // item loaded, allow plugins to\n // - read data (quickly)\n // - add metadata\n applyFilterChain('DID_LOAD_ITEM', item, { query: query, dispatch: dispatch })\n .then(function() {\n optionalPromise(query('GET_BEFORE_ADD_FILE'), createItemAPI(item)).then(\n handleAdd\n );\n })\n .catch(function(e) {\n if (!e || !e.error || !e.status) return handleAdd(false);\n dispatch('DID_THROW_ITEM_INVALID', {\n id: id,\n error: e.error,\n status: e.status,\n });\n });\n });\n\n item.on('process-start', function() {\n dispatch('DID_START_ITEM_PROCESSING', { id: id });\n });\n\n item.on('process-progress', function(progress) {\n dispatch('DID_UPDATE_ITEM_PROCESS_PROGRESS', { id: id, progress: progress });\n });\n\n item.on('process-error', function(error) {\n dispatch('DID_THROW_ITEM_PROCESSING_ERROR', {\n id: id,\n error: error,\n status: {\n main: dynamicLabel(state.options.labelFileProcessingError)(error),\n sub: state.options.labelTapToRetry,\n },\n });\n });\n\n item.on('process-revert-error', function(error) {\n dispatch('DID_THROW_ITEM_PROCESSING_REVERT_ERROR', {\n id: id,\n error: error,\n status: {\n main: dynamicLabel(state.options.labelFileProcessingRevertError)(error),\n sub: state.options.labelTapToRetry,\n },\n });\n });\n\n item.on('process-complete', function(serverFileReference) {\n dispatch('DID_COMPLETE_ITEM_PROCESSING', {\n id: id,\n error: null,\n serverFileReference: serverFileReference,\n });\n\n dispatch('DID_DEFINE_VALUE', { id: id, value: serverFileReference });\n });\n\n item.on('process-abort', function() {\n dispatch('DID_ABORT_ITEM_PROCESSING', { id: id });\n });\n\n item.on('process-revert', function() {\n dispatch('DID_REVERT_ITEM_PROCESSING', { id: id });\n dispatch('DID_DEFINE_VALUE', { id: id, value: null });\n });\n\n // let view know the item has been inserted\n dispatch('DID_ADD_ITEM', {\n id: id,\n index: index,\n interactionMethod: interactionMethod,\n });\n\n listUpdated(dispatch, state);\n\n // start loading the source\n var _ref8 = state.options.server || {},\n url = _ref8.url,\n load = _ref8.load,\n restore = _ref8.restore,\n fetch = _ref8.fetch;\n\n item.load(\n source,\n\n // this creates a function that loads the file based on the type of file (string, base64, blob, file) and location of file (local, remote, limbo)\n createFileLoader(\n origin === FileOrigin.INPUT\n ? // input, if is remote, see if should use custom fetch, else use default fetchBlob\n isString(source) && isExternalURL(source)\n ? fetch\n ? createFetchFunction(url, fetch)\n : fetchBlob // remote url\n : fetchBlob // try to fetch url\n : // limbo or local\n origin === FileOrigin.LIMBO\n ? createFetchFunction(url, restore) // limbo\n : createFetchFunction(url, load) // local\n ),\n\n // called when the file is loaded so it can be piped through the filters\n function(file, success, error) {\n // let's process the file\n applyFilterChain('LOAD_FILE', file, { query: query })\n .then(success)\n .catch(error);\n }\n );\n },\n\n REQUEST_PREPARE_OUTPUT: function REQUEST_PREPARE_OUTPUT(_ref9) {\n var item = _ref9.item,\n success = _ref9.success,\n _ref9$failure = _ref9.failure,\n failure = _ref9$failure === void 0 ? function() {} : _ref9$failure;\n // error response if item archived\n var err = {\n error: createResponse('error', 0, 'Item not found'),\n file: null,\n };\n\n // don't handle archived items, an item could have been archived (load aborted) while waiting to be prepared\n if (item.archived) return failure(err);\n\n // allow plugins to alter the file data\n applyFilterChain('PREPARE_OUTPUT', item.file, { query: query, item: item }).then(\n function(result) {\n applyFilterChain('COMPLETE_PREPARE_OUTPUT', result, {\n query: query,\n item: item,\n }).then(function(result) {\n // don't handle archived items, an item could have been archived (load aborted) while being prepared\n if (item.archived) return failure(err);\n\n // we done!\n success(result);\n });\n }\n );\n },\n\n COMPLETE_LOAD_ITEM: function COMPLETE_LOAD_ITEM(_ref10) {\n var item = _ref10.item,\n data = _ref10.data;\n var success = data.success,\n source = data.source;\n\n // sort items in list\n var itemInsertLocation = query('GET_ITEM_INSERT_LOCATION');\n if (isFunction(itemInsertLocation) && source) {\n sortItems(state, itemInsertLocation);\n }\n\n // let interface know the item has loaded\n dispatch('DID_LOAD_ITEM', {\n id: item.id,\n error: null,\n serverFileReference: item.origin === FileOrigin.INPUT ? null : source,\n });\n\n // item has been successfully loaded and added to the\n // list of items so can now be safely returned for use\n success(createItemAPI(item));\n\n // if this is a local server file we need to show a different state\n if (item.origin === FileOrigin.LOCAL) {\n dispatch('DID_LOAD_LOCAL_ITEM', { id: item.id });\n return;\n }\n\n // if is a temp server file we prevent async upload call here (as the file is already on the server)\n if (item.origin === FileOrigin.LIMBO) {\n dispatch('DID_COMPLETE_ITEM_PROCESSING', {\n id: item.id,\n error: null,\n serverFileReference: source,\n });\n\n dispatch('DID_DEFINE_VALUE', {\n id: item.id,\n value: item.serverId || source,\n });\n\n return;\n }\n\n // id we are allowed to upload the file immediately, lets do it\n if (query('IS_ASYNC') && state.options.instantUpload) {\n dispatch('REQUEST_ITEM_PROCESSING', { query: item.id });\n }\n },\n\n RETRY_ITEM_LOAD: getItemByQueryFromState(state, function(item) {\n // try loading the source one more time\n item.retryLoad();\n }),\n\n REQUEST_ITEM_PREPARE: getItemByQueryFromState(state, function(item, _success, failure) {\n dispatch(\n 'REQUEST_PREPARE_OUTPUT',\n {\n query: item.id,\n item: item,\n success: function success(file) {\n dispatch('DID_PREPARE_OUTPUT', { id: item.id, file: file });\n _success({\n file: item,\n output: file,\n });\n },\n failure: failure,\n },\n\n true\n );\n }),\n\n REQUEST_ITEM_PROCESSING: getItemByQueryFromState(state, function(\n item,\n success,\n failure\n ) {\n // cannot be queued (or is already queued)\n var itemCanBeQueuedForProcessing =\n // waiting for something\n item.status === ItemStatus.IDLE ||\n // processing went wrong earlier\n item.status === ItemStatus.PROCESSING_ERROR;\n\n // not ready to be processed\n if (!itemCanBeQueuedForProcessing) {\n var processNow = function processNow() {\n return dispatch('REQUEST_ITEM_PROCESSING', {\n query: item,\n success: success,\n failure: failure,\n });\n };\n\n var process = function process() {\n return document.hidden ? processNow() : setTimeout(processNow, 32);\n };\n\n // if already done processing or tried to revert but didn't work, try again\n if (\n item.status === ItemStatus.PROCESSING_COMPLETE ||\n item.status === ItemStatus.PROCESSING_REVERT_ERROR\n ) {\n item.revert(\n createRevertFunction(\n state.options.server.url,\n state.options.server.revert\n ),\n query('GET_FORCE_REVERT')\n )\n .then(process)\n .catch(function() {}); // don't continue with processing if something went wrong\n } else if (item.status === ItemStatus.PROCESSING) {\n item.abortProcessing().then(process);\n }\n\n return;\n }\n\n // already queued for processing\n if (item.status === ItemStatus.PROCESSING_QUEUED) return;\n\n item.requestProcessing();\n\n dispatch('DID_REQUEST_ITEM_PROCESSING', { id: item.id });\n\n dispatch('PROCESS_ITEM', { query: item, success: success, failure: failure }, true);\n }),\n\n PROCESS_ITEM: getItemByQueryFromState(state, function(item, success, failure) {\n var maxParallelUploads = query('GET_MAX_PARALLEL_UPLOADS');\n var totalCurrentUploads = query('GET_ITEMS_BY_STATUS', ItemStatus.PROCESSING)\n .length;\n\n // queue and wait till queue is freed up\n if (totalCurrentUploads === maxParallelUploads) {\n // queue for later processing\n state.processingQueue.push({\n id: item.id,\n success: success,\n failure: failure,\n });\n\n // stop it!\n return;\n }\n\n // if was not queued or is already processing exit here\n if (item.status === ItemStatus.PROCESSING) return;\n\n var processNext = function processNext() {\n // process queueud items\n var queueEntry = state.processingQueue.shift();\n\n // no items left\n if (!queueEntry) return;\n\n // get item reference\n var id = queueEntry.id,\n success = queueEntry.success,\n failure = queueEntry.failure;\n var itemReference = getItemByQuery(state.items, id);\n\n // if item was archived while in queue, jump to next\n if (!itemReference || itemReference.archived) {\n processNext();\n return;\n }\n\n // process queued item\n dispatch(\n 'PROCESS_ITEM',\n { query: id, success: success, failure: failure },\n true\n );\n };\n\n // we done function\n item.onOnce('process-complete', function() {\n success(createItemAPI(item));\n processNext();\n\n // if origin is local, and we're instant uploading, trigger remove of original\n // as revert will remove file from list\n var server = state.options.server;\n var instantUpload = state.options.instantUpload;\n if (\n instantUpload &&\n item.origin === FileOrigin.LOCAL &&\n isFunction(server.remove)\n ) {\n var noop = function noop() {};\n item.origin = FileOrigin.LIMBO;\n state.options.server.remove(item.source, noop, noop);\n }\n\n // All items processed? No errors?\n var allItemsProcessed =\n query('GET_ITEMS_BY_STATUS', ItemStatus.PROCESSING_COMPLETE).length ===\n state.items.length;\n if (allItemsProcessed) {\n dispatch('DID_COMPLETE_ITEM_PROCESSING_ALL');\n }\n });\n\n // we error function\n item.onOnce('process-error', function(error) {\n failure({ error: error, file: createItemAPI(item) });\n processNext();\n });\n\n // start file processing\n var options = state.options;\n item.process(\n createFileProcessor(\n createProcessorFunction(\n options.server.url,\n options.server.process,\n options.name,\n {\n chunkTransferId: item.transferId,\n chunkServer: options.server.patch,\n chunkUploads: options.chunkUploads,\n chunkForce: options.chunkForce,\n chunkSize: options.chunkSize,\n chunkRetryDelays: options.chunkRetryDelays,\n }\n ),\n\n {\n allowMinimumUploadDuration: query('GET_ALLOW_MINIMUM_UPLOAD_DURATION'),\n }\n ),\n\n // called when the file is about to be processed so it can be piped through the transform filters\n function(file, success, error) {\n // allow plugins to alter the file data\n applyFilterChain('PREPARE_OUTPUT', file, { query: query, item: item })\n .then(function(file) {\n dispatch('DID_PREPARE_OUTPUT', { id: item.id, file: file });\n\n success(file);\n })\n .catch(error);\n }\n );\n }),\n\n RETRY_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {\n dispatch('REQUEST_ITEM_PROCESSING', { query: item });\n }),\n\n REQUEST_REMOVE_ITEM: getItemByQueryFromState(state, function(item) {\n optionalPromise(query('GET_BEFORE_REMOVE_FILE'), createItemAPI(item)).then(function(\n shouldRemove\n ) {\n if (!shouldRemove) {\n return;\n }\n dispatch('REMOVE_ITEM', { query: item });\n });\n }),\n\n RELEASE_ITEM: getItemByQueryFromState(state, function(item) {\n item.release();\n }),\n\n REMOVE_ITEM: getItemByQueryFromState(state, function(item, success, failure, options) {\n var removeFromView = function removeFromView() {\n // get id reference\n var id = item.id;\n\n // archive the item, this does not remove it from the list\n getItemById(state.items, id).archive();\n\n // tell the view the item has been removed\n dispatch('DID_REMOVE_ITEM', { error: null, id: id, item: item });\n\n // now the list has been modified\n listUpdated(dispatch, state);\n\n // correctly removed\n success(createItemAPI(item));\n };\n\n // if this is a local file and the `server.remove` function has been configured,\n // send source there so dev can remove file from server\n var server = state.options.server;\n if (\n item.origin === FileOrigin.LOCAL &&\n server &&\n isFunction(server.remove) &&\n options.remove !== false\n ) {\n dispatch('DID_START_ITEM_REMOVE', { id: item.id });\n\n server.remove(\n item.source,\n function() {\n return removeFromView();\n },\n function(status) {\n dispatch('DID_THROW_ITEM_REMOVE_ERROR', {\n id: item.id,\n error: createResponse('error', 0, status, null),\n status: {\n main: dynamicLabel(state.options.labelFileRemoveError)(status),\n sub: state.options.labelTapToRetry,\n },\n });\n }\n );\n } else {\n // if is requesting revert and can revert need to call revert handler (not calling request_ because that would also trigger beforeRemoveHook)\n if (\n (options.revert &&\n item.origin !== FileOrigin.LOCAL &&\n item.serverId !== null) ||\n // if chunked uploads are enabled and we're uploading in chunks for this specific file\n // or if the file isn't big enough for chunked uploads but chunkForce is set then call\n // revert before removing from the view...\n (state.options.chunkUploads && item.file.size > state.options.chunkSize) ||\n (state.options.chunkUploads && state.options.chunkForce)\n ) {\n item.revert(\n createRevertFunction(\n state.options.server.url,\n state.options.server.revert\n ),\n query('GET_FORCE_REVERT')\n );\n }\n\n // can now safely remove from view\n removeFromView();\n }\n }),\n\n ABORT_ITEM_LOAD: getItemByQueryFromState(state, function(item) {\n item.abortLoad();\n }),\n\n ABORT_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {\n // test if is already processed\n if (item.serverId) {\n dispatch('REVERT_ITEM_PROCESSING', { id: item.id });\n return;\n }\n\n // abort\n item.abortProcessing().then(function() {\n var shouldRemove = state.options.instantUpload;\n if (shouldRemove) {\n dispatch('REMOVE_ITEM', { query: item.id });\n }\n });\n }),\n\n REQUEST_REVERT_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {\n // not instant uploading, revert immediately\n if (!state.options.instantUpload) {\n dispatch('REVERT_ITEM_PROCESSING', { query: item });\n return;\n }\n\n // if we're instant uploading the file will also be removed if we revert,\n // so if a before remove file hook is defined we need to run it now\n var handleRevert = function handleRevert(shouldRevert) {\n if (!shouldRevert) return;\n dispatch('REVERT_ITEM_PROCESSING', { query: item });\n };\n\n var fn = query('GET_BEFORE_REMOVE_FILE');\n if (!fn) {\n return handleRevert(true);\n }\n\n var requestRemoveResult = fn(createItemAPI(item));\n if (requestRemoveResult == null) {\n // undefined or null\n return handleRevert(true);\n }\n\n if (typeof requestRemoveResult === 'boolean') {\n return handleRevert(requestRemoveResult);\n }\n\n if (typeof requestRemoveResult.then === 'function') {\n requestRemoveResult.then(handleRevert);\n }\n }),\n\n REVERT_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {\n item.revert(\n createRevertFunction(state.options.server.url, state.options.server.revert),\n query('GET_FORCE_REVERT')\n )\n .then(function() {\n var shouldRemove = state.options.instantUpload || isMockItem(item);\n if (shouldRemove) {\n dispatch('REMOVE_ITEM', { query: item.id });\n }\n })\n .catch(function() {});\n }),\n\n SET_OPTIONS: function SET_OPTIONS(_ref11) {\n var options = _ref11.options;\n // get all keys passed\n var optionKeys = Object.keys(options);\n\n // get prioritized keyed to include (remove once not in options object)\n var prioritizedOptionKeys = PrioritizedOptions.filter(function(key) {\n return optionKeys.includes(key);\n });\n\n // order the keys, prioritized first, then rest\n var orderedOptionKeys = [].concat(\n _toConsumableArray(prioritizedOptionKeys),\n _toConsumableArray(\n Object.keys(options).filter(function(key) {\n return !prioritizedOptionKeys.includes(key);\n })\n )\n );\n\n // dispatch set event for each option\n orderedOptionKeys.forEach(function(key) {\n dispatch('SET_' + fromCamels(key, '_').toUpperCase(), {\n value: options[key],\n });\n });\n },\n };\n };\n\n var PrioritizedOptions = ['server'];\n\n var formatFilename = function formatFilename(name) {\n return name;\n };\n\n var createElement$1 = function createElement(tagName) {\n return document.createElement(tagName);\n };\n\n var text = function text(node, value) {\n var textNode = node.childNodes[0];\n if (!textNode) {\n textNode = document.createTextNode(value);\n node.appendChild(textNode);\n } else if (value !== textNode.nodeValue) {\n textNode.nodeValue = value;\n }\n };\n\n var polarToCartesian = function polarToCartesian(centerX, centerY, radius, angleInDegrees) {\n var angleInRadians = (((angleInDegrees % 360) - 90) * Math.PI) / 180.0;\n return {\n x: centerX + radius * Math.cos(angleInRadians),\n y: centerY + radius * Math.sin(angleInRadians),\n };\n };\n\n var describeArc = function describeArc(x, y, radius, startAngle, endAngle, arcSweep) {\n var start = polarToCartesian(x, y, radius, endAngle);\n var end = polarToCartesian(x, y, radius, startAngle);\n return ['M', start.x, start.y, 'A', radius, radius, 0, arcSweep, 0, end.x, end.y].join(' ');\n };\n\n var percentageArc = function percentageArc(x, y, radius, from, to) {\n var arcSweep = 1;\n if (to > from && to - from <= 0.5) {\n arcSweep = 0;\n }\n if (from > to && from - to >= 0.5) {\n arcSweep = 0;\n }\n return describeArc(\n x,\n y,\n radius,\n Math.min(0.9999, from) * 360,\n Math.min(0.9999, to) * 360,\n arcSweep\n );\n };\n\n var create = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n // start at 0\n props.spin = false;\n props.progress = 0;\n props.opacity = 0;\n\n // svg\n var svg = createElement('svg');\n root.ref.path = createElement('path', {\n 'stroke-width': 2,\n 'stroke-linecap': 'round',\n });\n\n svg.appendChild(root.ref.path);\n\n root.ref.svg = svg;\n\n root.appendChild(svg);\n };\n\n var write = function write(_ref2) {\n var root = _ref2.root,\n props = _ref2.props;\n if (props.opacity === 0) {\n return;\n }\n\n if (props.align) {\n root.element.dataset.align = props.align;\n }\n\n // get width of stroke\n var ringStrokeWidth = parseInt(attr(root.ref.path, 'stroke-width'), 10);\n\n // calculate size of ring\n var size = root.rect.element.width * 0.5;\n\n // ring state\n var ringFrom = 0;\n var ringTo = 0;\n\n // now in busy mode\n if (props.spin) {\n ringFrom = 0;\n ringTo = 0.5;\n } else {\n ringFrom = 0;\n ringTo = props.progress;\n }\n\n // get arc path\n var coordinates = percentageArc(size, size, size - ringStrokeWidth, ringFrom, ringTo);\n\n // update progress bar\n attr(root.ref.path, 'd', coordinates);\n\n // hide while contains 0 value\n attr(root.ref.path, 'stroke-opacity', props.spin || props.progress > 0 ? 1 : 0);\n };\n\n var progressIndicator = createView({\n tag: 'div',\n name: 'progress-indicator',\n ignoreRectUpdate: true,\n ignoreRect: true,\n create: create,\n write: write,\n mixins: {\n apis: ['progress', 'spin', 'align'],\n styles: ['opacity'],\n animations: {\n opacity: { type: 'tween', duration: 500 },\n progress: {\n type: 'spring',\n stiffness: 0.95,\n damping: 0.65,\n mass: 10,\n },\n },\n },\n });\n\n var create$1 = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n root.element.innerHTML = (props.icon || '') + ('' + props.label + '');\n\n props.isDisabled = false;\n };\n\n var write$1 = function write(_ref2) {\n var root = _ref2.root,\n props = _ref2.props;\n var isDisabled = props.isDisabled;\n var shouldDisable = root.query('GET_DISABLED') || props.opacity === 0;\n\n if (shouldDisable && !isDisabled) {\n props.isDisabled = true;\n attr(root.element, 'disabled', 'disabled');\n } else if (!shouldDisable && isDisabled) {\n props.isDisabled = false;\n root.element.removeAttribute('disabled');\n }\n };\n\n var fileActionButton = createView({\n tag: 'button',\n attributes: {\n type: 'button',\n },\n\n ignoreRect: true,\n ignoreRectUpdate: true,\n name: 'file-action-button',\n mixins: {\n apis: ['label'],\n styles: ['translateX', 'translateY', 'scaleX', 'scaleY', 'opacity'],\n animations: {\n scaleX: 'spring',\n scaleY: 'spring',\n translateX: 'spring',\n translateY: 'spring',\n opacity: { type: 'tween', duration: 250 },\n },\n\n listeners: true,\n },\n\n create: create$1,\n write: write$1,\n });\n\n var toNaturalFileSize = function toNaturalFileSize(bytes) {\n var decimalSeparator =\n arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '.';\n var base = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1000;\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _options$labelBytes = options.labelBytes,\n labelBytes = _options$labelBytes === void 0 ? 'bytes' : _options$labelBytes,\n _options$labelKilobyt = options.labelKilobytes,\n labelKilobytes = _options$labelKilobyt === void 0 ? 'KB' : _options$labelKilobyt,\n _options$labelMegabyt = options.labelMegabytes,\n labelMegabytes = _options$labelMegabyt === void 0 ? 'MB' : _options$labelMegabyt,\n _options$labelGigabyt = options.labelGigabytes,\n labelGigabytes = _options$labelGigabyt === void 0 ? 'GB' : _options$labelGigabyt;\n\n // no negative byte sizes\n bytes = Math.round(Math.abs(bytes));\n\n var KB = base;\n var MB = base * base;\n var GB = base * base * base;\n\n // just bytes\n if (bytes < KB) {\n return bytes + ' ' + labelBytes;\n }\n\n // kilobytes\n if (bytes < MB) {\n return Math.floor(bytes / KB) + ' ' + labelKilobytes;\n }\n\n // megabytes\n if (bytes < GB) {\n return removeDecimalsWhenZero(bytes / MB, 1, decimalSeparator) + ' ' + labelMegabytes;\n }\n\n // gigabytes\n return removeDecimalsWhenZero(bytes / GB, 2, decimalSeparator) + ' ' + labelGigabytes;\n };\n\n var removeDecimalsWhenZero = function removeDecimalsWhenZero(value, decimalCount, separator) {\n return value\n .toFixed(decimalCount)\n .split('.')\n .filter(function(part) {\n return part !== '0';\n })\n .join(separator);\n };\n\n var create$2 = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n // filename\n var fileName = createElement$1('span');\n fileName.className = 'filepond--file-info-main';\n // hide for screenreaders\n // the file is contained in a fieldset with legend that contains the filename\n // no need to read it twice\n attr(fileName, 'aria-hidden', 'true');\n root.appendChild(fileName);\n root.ref.fileName = fileName;\n\n // filesize\n var fileSize = createElement$1('span');\n fileSize.className = 'filepond--file-info-sub';\n root.appendChild(fileSize);\n root.ref.fileSize = fileSize;\n\n // set initial values\n text(fileSize, root.query('GET_LABEL_FILE_WAITING_FOR_SIZE'));\n text(fileName, formatFilename(root.query('GET_ITEM_NAME', props.id)));\n };\n\n var updateFile = function updateFile(_ref2) {\n var root = _ref2.root,\n props = _ref2.props;\n text(\n root.ref.fileSize,\n toNaturalFileSize(\n root.query('GET_ITEM_SIZE', props.id),\n '.',\n root.query('GET_FILE_SIZE_BASE'),\n root.query('GET_FILE_SIZE_LABELS', root.query)\n )\n );\n\n text(root.ref.fileName, formatFilename(root.query('GET_ITEM_NAME', props.id)));\n };\n\n var updateFileSizeOnError = function updateFileSizeOnError(_ref3) {\n var root = _ref3.root,\n props = _ref3.props;\n // if size is available don't fallback to unknown size message\n if (isInt(root.query('GET_ITEM_SIZE', props.id))) {\n updateFile({ root: root, props: props });\n return;\n }\n\n text(root.ref.fileSize, root.query('GET_LABEL_FILE_SIZE_NOT_AVAILABLE'));\n };\n\n var fileInfo = createView({\n name: 'file-info',\n ignoreRect: true,\n ignoreRectUpdate: true,\n write: createRoute({\n DID_LOAD_ITEM: updateFile,\n DID_UPDATE_ITEM_META: updateFile,\n DID_THROW_ITEM_LOAD_ERROR: updateFileSizeOnError,\n DID_THROW_ITEM_INVALID: updateFileSizeOnError,\n }),\n\n didCreateView: function didCreateView(root) {\n applyFilters('CREATE_VIEW', Object.assign({}, root, { view: root }));\n },\n create: create$2,\n mixins: {\n styles: ['translateX', 'translateY'],\n animations: {\n translateX: 'spring',\n translateY: 'spring',\n },\n },\n });\n\n var toPercentage = function toPercentage(value) {\n return Math.round(value * 100);\n };\n\n var create$3 = function create(_ref) {\n var root = _ref.root;\n\n // main status\n var main = createElement$1('span');\n main.className = 'filepond--file-status-main';\n root.appendChild(main);\n root.ref.main = main;\n\n // sub status\n var sub = createElement$1('span');\n sub.className = 'filepond--file-status-sub';\n root.appendChild(sub);\n root.ref.sub = sub;\n\n didSetItemLoadProgress({ root: root, action: { progress: null } });\n };\n\n var didSetItemLoadProgress = function didSetItemLoadProgress(_ref2) {\n var root = _ref2.root,\n action = _ref2.action;\n var title =\n action.progress === null\n ? root.query('GET_LABEL_FILE_LOADING')\n : root.query('GET_LABEL_FILE_LOADING') + ' ' + toPercentage(action.progress) + '%';\n\n text(root.ref.main, title);\n text(root.ref.sub, root.query('GET_LABEL_TAP_TO_CANCEL'));\n };\n\n var didSetItemProcessProgress = function didSetItemProcessProgress(_ref3) {\n var root = _ref3.root,\n action = _ref3.action;\n var title =\n action.progress === null\n ? root.query('GET_LABEL_FILE_PROCESSING')\n : root.query('GET_LABEL_FILE_PROCESSING') +\n ' ' +\n toPercentage(action.progress) +\n '%';\n\n text(root.ref.main, title);\n text(root.ref.sub, root.query('GET_LABEL_TAP_TO_CANCEL'));\n };\n\n var didRequestItemProcessing = function didRequestItemProcessing(_ref4) {\n var root = _ref4.root;\n text(root.ref.main, root.query('GET_LABEL_FILE_PROCESSING'));\n text(root.ref.sub, root.query('GET_LABEL_TAP_TO_CANCEL'));\n };\n\n var didAbortItemProcessing = function didAbortItemProcessing(_ref5) {\n var root = _ref5.root;\n text(root.ref.main, root.query('GET_LABEL_FILE_PROCESSING_ABORTED'));\n text(root.ref.sub, root.query('GET_LABEL_TAP_TO_RETRY'));\n };\n\n var didCompleteItemProcessing = function didCompleteItemProcessing(_ref6) {\n var root = _ref6.root;\n text(root.ref.main, root.query('GET_LABEL_FILE_PROCESSING_COMPLETE'));\n text(root.ref.sub, root.query('GET_LABEL_TAP_TO_UNDO'));\n };\n\n var clear = function clear(_ref7) {\n var root = _ref7.root;\n text(root.ref.main, '');\n text(root.ref.sub, '');\n };\n\n var error = function error(_ref8) {\n var root = _ref8.root,\n action = _ref8.action;\n text(root.ref.main, action.status.main);\n text(root.ref.sub, action.status.sub);\n };\n\n var fileStatus = createView({\n name: 'file-status',\n ignoreRect: true,\n ignoreRectUpdate: true,\n write: createRoute({\n DID_LOAD_ITEM: clear,\n DID_REVERT_ITEM_PROCESSING: clear,\n DID_REQUEST_ITEM_PROCESSING: didRequestItemProcessing,\n DID_ABORT_ITEM_PROCESSING: didAbortItemProcessing,\n DID_COMPLETE_ITEM_PROCESSING: didCompleteItemProcessing,\n DID_UPDATE_ITEM_PROCESS_PROGRESS: didSetItemProcessProgress,\n DID_UPDATE_ITEM_LOAD_PROGRESS: didSetItemLoadProgress,\n DID_THROW_ITEM_LOAD_ERROR: error,\n DID_THROW_ITEM_INVALID: error,\n DID_THROW_ITEM_PROCESSING_ERROR: error,\n DID_THROW_ITEM_PROCESSING_REVERT_ERROR: error,\n DID_THROW_ITEM_REMOVE_ERROR: error,\n }),\n\n didCreateView: function didCreateView(root) {\n applyFilters('CREATE_VIEW', Object.assign({}, root, { view: root }));\n },\n create: create$3,\n mixins: {\n styles: ['translateX', 'translateY', 'opacity'],\n animations: {\n opacity: { type: 'tween', duration: 250 },\n translateX: 'spring',\n translateY: 'spring',\n },\n },\n });\n\n /**\n * Button definitions for the file view\n */\n\n var Buttons = {\n AbortItemLoad: {\n label: 'GET_LABEL_BUTTON_ABORT_ITEM_LOAD',\n action: 'ABORT_ITEM_LOAD',\n className: 'filepond--action-abort-item-load',\n align: 'LOAD_INDICATOR_POSITION', // right\n },\n RetryItemLoad: {\n label: 'GET_LABEL_BUTTON_RETRY_ITEM_LOAD',\n action: 'RETRY_ITEM_LOAD',\n icon: 'GET_ICON_RETRY',\n className: 'filepond--action-retry-item-load',\n align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n },\n RemoveItem: {\n label: 'GET_LABEL_BUTTON_REMOVE_ITEM',\n action: 'REQUEST_REMOVE_ITEM',\n icon: 'GET_ICON_REMOVE',\n className: 'filepond--action-remove-item',\n align: 'BUTTON_REMOVE_ITEM_POSITION', // left\n },\n ProcessItem: {\n label: 'GET_LABEL_BUTTON_PROCESS_ITEM',\n action: 'REQUEST_ITEM_PROCESSING',\n icon: 'GET_ICON_PROCESS',\n className: 'filepond--action-process-item',\n align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n },\n AbortItemProcessing: {\n label: 'GET_LABEL_BUTTON_ABORT_ITEM_PROCESSING',\n action: 'ABORT_ITEM_PROCESSING',\n className: 'filepond--action-abort-item-processing',\n align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n },\n RetryItemProcessing: {\n label: 'GET_LABEL_BUTTON_RETRY_ITEM_PROCESSING',\n action: 'RETRY_ITEM_PROCESSING',\n icon: 'GET_ICON_RETRY',\n className: 'filepond--action-retry-item-processing',\n align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n },\n RevertItemProcessing: {\n label: 'GET_LABEL_BUTTON_UNDO_ITEM_PROCESSING',\n action: 'REQUEST_REVERT_ITEM_PROCESSING',\n icon: 'GET_ICON_UNDO',\n className: 'filepond--action-revert-item-processing',\n align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n },\n };\n\n // make a list of buttons, we can then remove buttons from this list if they're disabled\n var ButtonKeys = [];\n forin(Buttons, function(key) {\n ButtonKeys.push(key);\n });\n\n var calculateFileInfoOffset = function calculateFileInfoOffset(root) {\n if (getRemoveIndicatorAligment(root) === 'right') return 0;\n var buttonRect = root.ref.buttonRemoveItem.rect.element;\n return buttonRect.hidden ? null : buttonRect.width + buttonRect.left;\n };\n\n var calculateButtonWidth = function calculateButtonWidth(root) {\n var buttonRect = root.ref.buttonAbortItemLoad.rect.element;\n return buttonRect.width;\n };\n\n // Force on full pixels so text stays crips\n var calculateFileVerticalCenterOffset = function calculateFileVerticalCenterOffset(root) {\n return Math.floor(root.ref.buttonRemoveItem.rect.element.height / 4);\n };\n var calculateFileHorizontalCenterOffset = function calculateFileHorizontalCenterOffset(root) {\n return Math.floor(root.ref.buttonRemoveItem.rect.element.left / 2);\n };\n\n var getLoadIndicatorAlignment = function getLoadIndicatorAlignment(root) {\n return root.query('GET_STYLE_LOAD_INDICATOR_POSITION');\n };\n var getProcessIndicatorAlignment = function getProcessIndicatorAlignment(root) {\n return root.query('GET_STYLE_PROGRESS_INDICATOR_POSITION');\n };\n var getRemoveIndicatorAligment = function getRemoveIndicatorAligment(root) {\n return root.query('GET_STYLE_BUTTON_REMOVE_ITEM_POSITION');\n };\n\n var DefaultStyle = {\n buttonAbortItemLoad: { opacity: 0 },\n buttonRetryItemLoad: { opacity: 0 },\n buttonRemoveItem: { opacity: 0 },\n buttonProcessItem: { opacity: 0 },\n buttonAbortItemProcessing: { opacity: 0 },\n buttonRetryItemProcessing: { opacity: 0 },\n buttonRevertItemProcessing: { opacity: 0 },\n loadProgressIndicator: { opacity: 0, align: getLoadIndicatorAlignment },\n processProgressIndicator: { opacity: 0, align: getProcessIndicatorAlignment },\n processingCompleteIndicator: { opacity: 0, scaleX: 0.75, scaleY: 0.75 },\n info: { translateX: 0, translateY: 0, opacity: 0 },\n status: { translateX: 0, translateY: 0, opacity: 0 },\n };\n\n var IdleStyle = {\n buttonRemoveItem: { opacity: 1 },\n buttonProcessItem: { opacity: 1 },\n info: { translateX: calculateFileInfoOffset },\n status: { translateX: calculateFileInfoOffset },\n };\n\n var ProcessingStyle = {\n buttonAbortItemProcessing: { opacity: 1 },\n processProgressIndicator: { opacity: 1 },\n status: { opacity: 1 },\n };\n\n var StyleMap = {\n DID_THROW_ITEM_INVALID: {\n buttonRemoveItem: { opacity: 1 },\n info: { translateX: calculateFileInfoOffset },\n status: { translateX: calculateFileInfoOffset, opacity: 1 },\n },\n\n DID_START_ITEM_LOAD: {\n buttonAbortItemLoad: { opacity: 1 },\n loadProgressIndicator: { opacity: 1 },\n status: { opacity: 1 },\n },\n\n DID_THROW_ITEM_LOAD_ERROR: {\n buttonRetryItemLoad: { opacity: 1 },\n buttonRemoveItem: { opacity: 1 },\n info: { translateX: calculateFileInfoOffset },\n status: { opacity: 1 },\n },\n\n DID_START_ITEM_REMOVE: {\n processProgressIndicator: { opacity: 1, align: getRemoveIndicatorAligment },\n info: { translateX: calculateFileInfoOffset },\n status: { opacity: 0 },\n },\n\n DID_THROW_ITEM_REMOVE_ERROR: {\n processProgressIndicator: { opacity: 0, align: getRemoveIndicatorAligment },\n buttonRemoveItem: { opacity: 1 },\n info: { translateX: calculateFileInfoOffset },\n status: { opacity: 1, translateX: calculateFileInfoOffset },\n },\n\n DID_LOAD_ITEM: IdleStyle,\n DID_LOAD_LOCAL_ITEM: {\n buttonRemoveItem: { opacity: 1 },\n info: { translateX: calculateFileInfoOffset },\n status: { translateX: calculateFileInfoOffset },\n },\n\n DID_START_ITEM_PROCESSING: ProcessingStyle,\n DID_REQUEST_ITEM_PROCESSING: ProcessingStyle,\n DID_UPDATE_ITEM_PROCESS_PROGRESS: ProcessingStyle,\n DID_COMPLETE_ITEM_PROCESSING: {\n buttonRevertItemProcessing: { opacity: 1 },\n info: { opacity: 1 },\n status: { opacity: 1 },\n },\n\n DID_THROW_ITEM_PROCESSING_ERROR: {\n buttonRemoveItem: { opacity: 1 },\n buttonRetryItemProcessing: { opacity: 1 },\n status: { opacity: 1 },\n info: { translateX: calculateFileInfoOffset },\n },\n\n DID_THROW_ITEM_PROCESSING_REVERT_ERROR: {\n buttonRevertItemProcessing: { opacity: 1 },\n status: { opacity: 1 },\n info: { opacity: 1 },\n },\n\n DID_ABORT_ITEM_PROCESSING: {\n buttonRemoveItem: { opacity: 1 },\n buttonProcessItem: { opacity: 1 },\n info: { translateX: calculateFileInfoOffset },\n status: { opacity: 1 },\n },\n\n DID_REVERT_ITEM_PROCESSING: IdleStyle,\n };\n\n // complete indicator view\n var processingCompleteIndicatorView = createView({\n create: function create(_ref) {\n var root = _ref.root;\n root.element.innerHTML = root.query('GET_ICON_DONE');\n },\n name: 'processing-complete-indicator',\n ignoreRect: true,\n mixins: {\n styles: ['scaleX', 'scaleY', 'opacity'],\n animations: {\n scaleX: 'spring',\n scaleY: 'spring',\n opacity: { type: 'tween', duration: 250 },\n },\n },\n });\n\n /**\n * Creates the file view\n */\n var create$4 = function create(_ref2) {\n var root = _ref2.root,\n props = _ref2.props;\n // copy Buttons object\n var LocalButtons = Object.keys(Buttons).reduce(function(prev, curr) {\n prev[curr] = Object.assign({}, Buttons[curr]);\n return prev;\n }, {});\n var id = props.id;\n\n // allow reverting upload\n var allowRevert = root.query('GET_ALLOW_REVERT');\n\n // allow remove file\n var allowRemove = root.query('GET_ALLOW_REMOVE');\n\n // allow processing upload\n var allowProcess = root.query('GET_ALLOW_PROCESS');\n\n // is instant uploading, need this to determine the icon of the undo button\n var instantUpload = root.query('GET_INSTANT_UPLOAD');\n\n // is async set up\n var isAsync = root.query('IS_ASYNC');\n\n // should align remove item buttons\n var alignRemoveItemButton = root.query('GET_STYLE_BUTTON_REMOVE_ITEM_ALIGN');\n\n // enabled buttons array\n var buttonFilter;\n if (isAsync) {\n if (allowProcess && !allowRevert) {\n // only remove revert button\n buttonFilter = function buttonFilter(key) {\n return !/RevertItemProcessing/.test(key);\n };\n } else if (!allowProcess && allowRevert) {\n // only remove process button\n buttonFilter = function buttonFilter(key) {\n return !/ProcessItem|RetryItemProcessing|AbortItemProcessing/.test(key);\n };\n } else if (!allowProcess && !allowRevert) {\n // remove all process buttons\n buttonFilter = function buttonFilter(key) {\n return !/Process/.test(key);\n };\n }\n } else {\n // no process controls available\n buttonFilter = function buttonFilter(key) {\n return !/Process/.test(key);\n };\n }\n\n var enabledButtons = buttonFilter ? ButtonKeys.filter(buttonFilter) : ButtonKeys.concat();\n\n // update icon and label for revert button when instant uploading\n if (instantUpload && allowRevert) {\n LocalButtons['RevertItemProcessing'].label = 'GET_LABEL_BUTTON_REMOVE_ITEM';\n LocalButtons['RevertItemProcessing'].icon = 'GET_ICON_REMOVE';\n }\n\n // remove last button (revert) if not allowed\n if (isAsync && !allowRevert) {\n var map = StyleMap['DID_COMPLETE_ITEM_PROCESSING'];\n map.info.translateX = calculateFileHorizontalCenterOffset;\n map.info.translateY = calculateFileVerticalCenterOffset;\n map.status.translateY = calculateFileVerticalCenterOffset;\n map.processingCompleteIndicator = { opacity: 1, scaleX: 1, scaleY: 1 };\n }\n\n // should align center\n if (isAsync && !allowProcess) {\n [\n 'DID_START_ITEM_PROCESSING',\n 'DID_REQUEST_ITEM_PROCESSING',\n 'DID_UPDATE_ITEM_PROCESS_PROGRESS',\n 'DID_THROW_ITEM_PROCESSING_ERROR',\n ].forEach(function(key) {\n StyleMap[key].status.translateY = calculateFileVerticalCenterOffset;\n });\n StyleMap['DID_THROW_ITEM_PROCESSING_ERROR'].status.translateX = calculateButtonWidth;\n }\n\n // move remove button to right\n if (alignRemoveItemButton && allowRevert) {\n LocalButtons['RevertItemProcessing'].align = 'BUTTON_REMOVE_ITEM_POSITION';\n var _map = StyleMap['DID_COMPLETE_ITEM_PROCESSING'];\n _map.info.translateX = calculateFileInfoOffset;\n _map.status.translateY = calculateFileVerticalCenterOffset;\n _map.processingCompleteIndicator = { opacity: 1, scaleX: 1, scaleY: 1 };\n }\n\n // show/hide RemoveItem button\n if (!allowRemove) {\n LocalButtons['RemoveItem'].disabled = true;\n }\n\n // create the button views\n forin(LocalButtons, function(key, definition) {\n // create button\n var buttonView = root.createChildView(fileActionButton, {\n label: root.query(definition.label),\n icon: root.query(definition.icon),\n opacity: 0,\n });\n\n // should be appended?\n if (enabledButtons.includes(key)) {\n root.appendChildView(buttonView);\n }\n\n // toggle\n if (definition.disabled) {\n buttonView.element.setAttribute('disabled', 'disabled');\n buttonView.element.setAttribute('hidden', 'hidden');\n }\n\n // add position attribute\n buttonView.element.dataset.align = root.query('GET_STYLE_' + definition.align);\n\n // add class\n buttonView.element.classList.add(definition.className);\n\n // handle interactions\n buttonView.on('click', function(e) {\n e.stopPropagation();\n if (definition.disabled) return;\n root.dispatch(definition.action, { query: id });\n });\n\n // set reference\n root.ref['button' + key] = buttonView;\n });\n\n // checkmark\n root.ref.processingCompleteIndicator = root.appendChildView(\n root.createChildView(processingCompleteIndicatorView)\n );\n\n root.ref.processingCompleteIndicator.element.dataset.align = root.query(\n 'GET_STYLE_BUTTON_PROCESS_ITEM_POSITION'\n );\n\n // create file info view\n root.ref.info = root.appendChildView(root.createChildView(fileInfo, { id: id }));\n\n // create file status view\n root.ref.status = root.appendChildView(root.createChildView(fileStatus, { id: id }));\n\n // add progress indicators\n var loadIndicatorView = root.appendChildView(\n root.createChildView(progressIndicator, {\n opacity: 0,\n align: root.query('GET_STYLE_LOAD_INDICATOR_POSITION'),\n })\n );\n\n loadIndicatorView.element.classList.add('filepond--load-indicator');\n root.ref.loadProgressIndicator = loadIndicatorView;\n\n var progressIndicatorView = root.appendChildView(\n root.createChildView(progressIndicator, {\n opacity: 0,\n align: root.query('GET_STYLE_PROGRESS_INDICATOR_POSITION'),\n })\n );\n\n progressIndicatorView.element.classList.add('filepond--process-indicator');\n root.ref.processProgressIndicator = progressIndicatorView;\n\n // current active styles\n root.ref.activeStyles = [];\n };\n\n var write$2 = function write(_ref3) {\n var root = _ref3.root,\n actions = _ref3.actions,\n props = _ref3.props;\n // route actions\n route({ root: root, actions: actions, props: props });\n\n // select last state change action\n var action = actions\n .concat()\n .filter(function(action) {\n return /^DID_/.test(action.type);\n })\n .reverse()\n .find(function(action) {\n return StyleMap[action.type];\n });\n\n // a new action happened, let's get the matching styles\n if (action) {\n // define new active styles\n root.ref.activeStyles = [];\n\n var stylesToApply = StyleMap[action.type];\n forin(DefaultStyle, function(name, defaultStyles) {\n // get reference to control\n var control = root.ref[name];\n\n // loop over all styles for this control\n forin(defaultStyles, function(key, defaultValue) {\n var value =\n stylesToApply[name] && typeof stylesToApply[name][key] !== 'undefined'\n ? stylesToApply[name][key]\n : defaultValue;\n root.ref.activeStyles.push({ control: control, key: key, value: value });\n });\n });\n }\n\n // apply active styles to element\n root.ref.activeStyles.forEach(function(_ref4) {\n var control = _ref4.control,\n key = _ref4.key,\n value = _ref4.value;\n control[key] = typeof value === 'function' ? value(root) : value;\n });\n };\n\n var route = createRoute({\n DID_SET_LABEL_BUTTON_ABORT_ITEM_PROCESSING: function DID_SET_LABEL_BUTTON_ABORT_ITEM_PROCESSING(\n _ref5\n ) {\n var root = _ref5.root,\n action = _ref5.action;\n root.ref.buttonAbortItemProcessing.label = action.value;\n },\n DID_SET_LABEL_BUTTON_ABORT_ITEM_LOAD: function DID_SET_LABEL_BUTTON_ABORT_ITEM_LOAD(_ref6) {\n var root = _ref6.root,\n action = _ref6.action;\n root.ref.buttonAbortItemLoad.label = action.value;\n },\n DID_SET_LABEL_BUTTON_ABORT_ITEM_REMOVAL: function DID_SET_LABEL_BUTTON_ABORT_ITEM_REMOVAL(\n _ref7\n ) {\n var root = _ref7.root,\n action = _ref7.action;\n root.ref.buttonAbortItemRemoval.label = action.value;\n },\n DID_REQUEST_ITEM_PROCESSING: function DID_REQUEST_ITEM_PROCESSING(_ref8) {\n var root = _ref8.root;\n root.ref.processProgressIndicator.spin = true;\n root.ref.processProgressIndicator.progress = 0;\n },\n DID_START_ITEM_LOAD: function DID_START_ITEM_LOAD(_ref9) {\n var root = _ref9.root;\n root.ref.loadProgressIndicator.spin = true;\n root.ref.loadProgressIndicator.progress = 0;\n },\n DID_START_ITEM_REMOVE: function DID_START_ITEM_REMOVE(_ref10) {\n var root = _ref10.root;\n root.ref.processProgressIndicator.spin = true;\n root.ref.processProgressIndicator.progress = 0;\n },\n DID_UPDATE_ITEM_LOAD_PROGRESS: function DID_UPDATE_ITEM_LOAD_PROGRESS(_ref11) {\n var root = _ref11.root,\n action = _ref11.action;\n root.ref.loadProgressIndicator.spin = false;\n root.ref.loadProgressIndicator.progress = action.progress;\n },\n DID_UPDATE_ITEM_PROCESS_PROGRESS: function DID_UPDATE_ITEM_PROCESS_PROGRESS(_ref12) {\n var root = _ref12.root,\n action = _ref12.action;\n root.ref.processProgressIndicator.spin = false;\n root.ref.processProgressIndicator.progress = action.progress;\n },\n });\n\n var file = createView({\n create: create$4,\n write: write$2,\n didCreateView: function didCreateView(root) {\n applyFilters('CREATE_VIEW', Object.assign({}, root, { view: root }));\n },\n name: 'file',\n });\n\n /**\n * Creates the file view\n */\n var create$5 = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n\n // filename\n root.ref.fileName = createElement$1('legend');\n root.appendChild(root.ref.fileName);\n\n // file appended\n root.ref.file = root.appendChildView(root.createChildView(file, { id: props.id }));\n\n // data has moved to data.js\n root.ref.data = false;\n };\n\n /**\n * Data storage\n */\n var didLoadItem = function didLoadItem(_ref2) {\n var root = _ref2.root,\n props = _ref2.props;\n // updates the legend of the fieldset so screenreaders can better group buttons\n text(root.ref.fileName, formatFilename(root.query('GET_ITEM_NAME', props.id)));\n };\n\n var fileWrapper = createView({\n create: create$5,\n ignoreRect: true,\n write: createRoute({\n DID_LOAD_ITEM: didLoadItem,\n }),\n\n didCreateView: function didCreateView(root) {\n applyFilters('CREATE_VIEW', Object.assign({}, root, { view: root }));\n },\n tag: 'fieldset',\n name: 'file-wrapper',\n });\n\n var PANEL_SPRING_PROPS = { type: 'spring', damping: 0.6, mass: 7 };\n\n var create$6 = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n [\n {\n name: 'top',\n },\n\n {\n name: 'center',\n props: {\n translateY: null,\n scaleY: null,\n },\n\n mixins: {\n animations: {\n scaleY: PANEL_SPRING_PROPS,\n },\n\n styles: ['translateY', 'scaleY'],\n },\n },\n\n {\n name: 'bottom',\n props: {\n translateY: null,\n },\n\n mixins: {\n animations: {\n translateY: PANEL_SPRING_PROPS,\n },\n\n styles: ['translateY'],\n },\n },\n ].forEach(function(section) {\n createSection(root, section, props.name);\n });\n\n root.element.classList.add('filepond--' + props.name);\n\n root.ref.scalable = null;\n };\n\n var createSection = function createSection(root, section, className) {\n var viewConstructor = createView({\n name: 'panel-' + section.name + ' filepond--' + className,\n mixins: section.mixins,\n ignoreRectUpdate: true,\n });\n\n var view = root.createChildView(viewConstructor, section.props);\n\n root.ref[section.name] = root.appendChildView(view);\n };\n\n var write$3 = function write(_ref2) {\n var root = _ref2.root,\n props = _ref2.props;\n\n // update scalable state\n if (root.ref.scalable === null || props.scalable !== root.ref.scalable) {\n root.ref.scalable = isBoolean(props.scalable) ? props.scalable : true;\n root.element.dataset.scalable = root.ref.scalable;\n }\n\n // no height, can't set\n if (!props.height) return;\n\n // get child rects\n var topRect = root.ref.top.rect.element;\n var bottomRect = root.ref.bottom.rect.element;\n\n // make sure height never is smaller than bottom and top seciton heights combined (will probably never happen, but who knows)\n var height = Math.max(topRect.height + bottomRect.height, props.height);\n\n // offset center part\n root.ref.center.translateY = topRect.height;\n\n // scale center part\n // use math ceil to prevent transparent lines because of rounding errors\n root.ref.center.scaleY = (height - topRect.height - bottomRect.height) / 100;\n\n // offset bottom part\n root.ref.bottom.translateY = height - bottomRect.height;\n };\n\n var panel = createView({\n name: 'panel',\n read: function read(_ref3) {\n var root = _ref3.root,\n props = _ref3.props;\n return (props.heightCurrent = root.ref.bottom.translateY);\n },\n write: write$3,\n create: create$6,\n ignoreRect: true,\n mixins: {\n apis: ['height', 'heightCurrent', 'scalable'],\n },\n });\n\n var createDragHelper = function createDragHelper(items) {\n var itemIds = items.map(function(item) {\n return item.id;\n });\n var prevIndex = undefined;\n return {\n setIndex: function setIndex(index) {\n prevIndex = index;\n },\n getIndex: function getIndex() {\n return prevIndex;\n },\n getItemIndex: function getItemIndex(item) {\n return itemIds.indexOf(item.id);\n },\n };\n };\n\n var ITEM_TRANSLATE_SPRING = {\n type: 'spring',\n stiffness: 0.75,\n damping: 0.45,\n mass: 10,\n };\n\n var ITEM_SCALE_SPRING = 'spring';\n\n var StateMap = {\n DID_START_ITEM_LOAD: 'busy',\n DID_UPDATE_ITEM_LOAD_PROGRESS: 'loading',\n DID_THROW_ITEM_INVALID: 'load-invalid',\n DID_THROW_ITEM_LOAD_ERROR: 'load-error',\n DID_LOAD_ITEM: 'idle',\n DID_THROW_ITEM_REMOVE_ERROR: 'remove-error',\n DID_START_ITEM_REMOVE: 'busy',\n DID_START_ITEM_PROCESSING: 'busy processing',\n DID_REQUEST_ITEM_PROCESSING: 'busy processing',\n DID_UPDATE_ITEM_PROCESS_PROGRESS: 'processing',\n DID_COMPLETE_ITEM_PROCESSING: 'processing-complete',\n DID_THROW_ITEM_PROCESSING_ERROR: 'processing-error',\n DID_THROW_ITEM_PROCESSING_REVERT_ERROR: 'processing-revert-error',\n DID_ABORT_ITEM_PROCESSING: 'cancelled',\n DID_REVERT_ITEM_PROCESSING: 'idle',\n };\n\n /**\n * Creates the file view\n */\n var create$7 = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n\n // select\n root.ref.handleClick = function(e) {\n return root.dispatch('DID_ACTIVATE_ITEM', { id: props.id });\n };\n\n // set id\n root.element.id = 'filepond--item-' + props.id;\n root.element.addEventListener('click', root.ref.handleClick);\n\n // file view\n root.ref.container = root.appendChildView(\n root.createChildView(fileWrapper, { id: props.id })\n );\n\n // file panel\n root.ref.panel = root.appendChildView(root.createChildView(panel, { name: 'item-panel' }));\n\n // default start height\n root.ref.panel.height = null;\n\n // by default not marked for removal\n props.markedForRemoval = false;\n\n // if not allowed to reorder file items, exit here\n if (!root.query('GET_ALLOW_REORDER')) return;\n\n // set to idle so shows grab cursor\n root.element.dataset.dragState = 'idle';\n\n var grab = function grab(e) {\n if (!e.isPrimary) return;\n\n var removedActivateListener = false;\n\n var origin = {\n x: e.pageX,\n y: e.pageY,\n };\n\n props.dragOrigin = {\n x: root.translateX,\n y: root.translateY,\n };\n\n props.dragCenter = {\n x: e.offsetX,\n y: e.offsetY,\n };\n\n var dragState = createDragHelper(root.query('GET_ACTIVE_ITEMS'));\n\n root.dispatch('DID_GRAB_ITEM', { id: props.id, dragState: dragState });\n\n var drag = function drag(e) {\n if (!e.isPrimary) return;\n\n e.stopPropagation();\n e.preventDefault();\n\n props.dragOffset = {\n x: e.pageX - origin.x,\n y: e.pageY - origin.y,\n };\n\n // if dragged stop listening to clicks, will re-add when done dragging\n var dist =\n props.dragOffset.x * props.dragOffset.x +\n props.dragOffset.y * props.dragOffset.y;\n if (dist > 16 && !removedActivateListener) {\n removedActivateListener = true;\n root.element.removeEventListener('click', root.ref.handleClick);\n }\n\n root.dispatch('DID_DRAG_ITEM', { id: props.id, dragState: dragState });\n };\n\n var drop = function drop(e) {\n if (!e.isPrimary) return;\n\n document.removeEventListener('pointermove', drag);\n document.removeEventListener('pointerup', drop);\n\n props.dragOffset = {\n x: e.pageX - origin.x,\n y: e.pageY - origin.y,\n };\n\n root.dispatch('DID_DROP_ITEM', { id: props.id, dragState: dragState });\n\n // start listening to clicks again\n if (removedActivateListener) {\n setTimeout(function() {\n return root.element.addEventListener('click', root.ref.handleClick);\n }, 0);\n }\n };\n\n document.addEventListener('pointermove', drag);\n document.addEventListener('pointerup', drop);\n };\n\n root.element.addEventListener('pointerdown', grab);\n };\n\n var route$1 = createRoute({\n DID_UPDATE_PANEL_HEIGHT: function DID_UPDATE_PANEL_HEIGHT(_ref2) {\n var root = _ref2.root,\n action = _ref2.action;\n root.height = action.height;\n },\n });\n\n var write$4 = createRoute(\n {\n DID_GRAB_ITEM: function DID_GRAB_ITEM(_ref3) {\n var root = _ref3.root,\n props = _ref3.props;\n props.dragOrigin = {\n x: root.translateX,\n y: root.translateY,\n };\n },\n DID_DRAG_ITEM: function DID_DRAG_ITEM(_ref4) {\n var root = _ref4.root;\n root.element.dataset.dragState = 'drag';\n },\n DID_DROP_ITEM: function DID_DROP_ITEM(_ref5) {\n var root = _ref5.root,\n props = _ref5.props;\n props.dragOffset = null;\n props.dragOrigin = null;\n root.element.dataset.dragState = 'drop';\n },\n },\n function(_ref6) {\n var root = _ref6.root,\n actions = _ref6.actions,\n props = _ref6.props,\n shouldOptimize = _ref6.shouldOptimize;\n\n if (root.element.dataset.dragState === 'drop') {\n if (root.scaleX <= 1) {\n root.element.dataset.dragState = 'idle';\n }\n }\n\n // select last state change action\n var action = actions\n .concat()\n .filter(function(action) {\n return /^DID_/.test(action.type);\n })\n .reverse()\n .find(function(action) {\n return StateMap[action.type];\n });\n\n // no need to set same state twice\n if (action && action.type !== props.currentState) {\n // set current state\n props.currentState = action.type;\n\n // set state\n root.element.dataset.filepondItemState = StateMap[props.currentState] || '';\n }\n\n // route actions\n var aspectRatio =\n root.query('GET_ITEM_PANEL_ASPECT_RATIO') || root.query('GET_PANEL_ASPECT_RATIO');\n if (!aspectRatio) {\n route$1({ root: root, actions: actions, props: props });\n if (!root.height && root.ref.container.rect.element.height > 0) {\n root.height = root.ref.container.rect.element.height;\n }\n } else if (!shouldOptimize) {\n root.height = root.rect.element.width * aspectRatio;\n }\n\n // sync panel height with item height\n if (shouldOptimize) {\n root.ref.panel.height = null;\n }\n\n root.ref.panel.height = root.height;\n }\n );\n\n var item = createView({\n create: create$7,\n write: write$4,\n destroy: function destroy(_ref7) {\n var root = _ref7.root,\n props = _ref7.props;\n root.element.removeEventListener('click', root.ref.handleClick);\n root.dispatch('RELEASE_ITEM', { query: props.id });\n },\n tag: 'li',\n name: 'item',\n mixins: {\n apis: [\n 'id',\n 'interactionMethod',\n 'markedForRemoval',\n 'spawnDate',\n 'dragCenter',\n 'dragOrigin',\n 'dragOffset',\n ],\n styles: ['translateX', 'translateY', 'scaleX', 'scaleY', 'opacity', 'height'],\n\n animations: {\n scaleX: ITEM_SCALE_SPRING,\n scaleY: ITEM_SCALE_SPRING,\n translateX: ITEM_TRANSLATE_SPRING,\n translateY: ITEM_TRANSLATE_SPRING,\n opacity: { type: 'tween', duration: 150 },\n },\n },\n });\n\n var getItemsPerRow = function(horizontalSpace, itemWidth) {\n // add one pixel leeway, when using percentages for item width total items can be 1.99 per row\n\n return Math.max(1, Math.floor((horizontalSpace + 1) / itemWidth));\n };\n\n var getItemIndexByPosition = function getItemIndexByPosition(view, children, positionInView) {\n if (!positionInView) return;\n\n var horizontalSpace = view.rect.element.width;\n // const children = view.childViews;\n var l = children.length;\n var last = null;\n\n // -1, don't move items to accomodate (either add to top or bottom)\n if (l === 0 || positionInView.top < children[0].rect.element.top) return -1;\n\n // let's get the item width\n var item = children[0];\n var itemRect = item.rect.element;\n var itemHorizontalMargin = itemRect.marginLeft + itemRect.marginRight;\n var itemWidth = itemRect.width + itemHorizontalMargin;\n var itemsPerRow = getItemsPerRow(horizontalSpace, itemWidth);\n\n // stack\n if (itemsPerRow === 1) {\n for (var index = 0; index < l; index++) {\n var child = children[index];\n var childMid = child.rect.outer.top + child.rect.element.height * 0.5;\n if (positionInView.top < childMid) {\n return index;\n }\n }\n return l;\n }\n\n // grid\n var itemVerticalMargin = itemRect.marginTop + itemRect.marginBottom;\n var itemHeight = itemRect.height + itemVerticalMargin;\n for (var _index = 0; _index < l; _index++) {\n var indexX = _index % itemsPerRow;\n var indexY = Math.floor(_index / itemsPerRow);\n\n var offsetX = indexX * itemWidth;\n var offsetY = indexY * itemHeight;\n\n var itemTop = offsetY - itemRect.marginTop;\n var itemRight = offsetX + itemWidth;\n var itemBottom = offsetY + itemHeight + itemRect.marginBottom;\n\n if (positionInView.top < itemBottom && positionInView.top > itemTop) {\n if (positionInView.left < itemRight) {\n return _index;\n } else if (_index !== l - 1) {\n last = _index;\n } else {\n last = null;\n }\n }\n }\n\n if (last !== null) {\n return last;\n }\n\n return l;\n };\n\n var dropAreaDimensions = {\n height: 0,\n width: 0,\n get getHeight() {\n return this.height;\n },\n set setHeight(val) {\n if (this.height === 0 || val === 0) this.height = val;\n },\n get getWidth() {\n return this.width;\n },\n set setWidth(val) {\n if (this.width === 0 || val === 0) this.width = val;\n },\n setDimensions: function setDimensions(height, width) {\n if (this.height === 0 || height === 0) this.height = height;\n if (this.width === 0 || width === 0) this.width = width;\n },\n };\n\n var create$8 = function create(_ref) {\n var root = _ref.root;\n // need to set role to list as otherwise it won't be read as a list by VoiceOver\n attr(root.element, 'role', 'list');\n\n root.ref.lastItemSpanwDate = Date.now();\n };\n\n /**\n * Inserts a new item\n * @param root\n * @param action\n */\n var addItemView = function addItemView(_ref2) {\n var root = _ref2.root,\n action = _ref2.action;\n var id = action.id,\n index = action.index,\n interactionMethod = action.interactionMethod;\n\n root.ref.addIndex = index;\n\n var now = Date.now();\n var spawnDate = now;\n var opacity = 1;\n\n if (interactionMethod !== InteractionMethod.NONE) {\n opacity = 0;\n var cooldown = root.query('GET_ITEM_INSERT_INTERVAL');\n var dist = now - root.ref.lastItemSpanwDate;\n spawnDate = dist < cooldown ? now + (cooldown - dist) : now;\n }\n\n root.ref.lastItemSpanwDate = spawnDate;\n\n root.appendChildView(\n root.createChildView(\n // view type\n item,\n\n // props\n {\n spawnDate: spawnDate,\n id: id,\n opacity: opacity,\n interactionMethod: interactionMethod,\n }\n ),\n\n index\n );\n };\n\n var moveItem = function moveItem(item, x, y) {\n var vx = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var vy = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;\n // set to null to remove animation while dragging\n if (item.dragOffset) {\n item.translateX = null;\n item.translateY = null;\n item.translateX = item.dragOrigin.x + item.dragOffset.x;\n item.translateY = item.dragOrigin.y + item.dragOffset.y;\n item.scaleX = 1.025;\n item.scaleY = 1.025;\n } else {\n item.translateX = x;\n item.translateY = y;\n\n if (Date.now() > item.spawnDate) {\n // reveal element\n if (item.opacity === 0) {\n introItemView(item, x, y, vx, vy);\n }\n\n // make sure is default scale every frame\n item.scaleX = 1;\n item.scaleY = 1;\n item.opacity = 1;\n }\n }\n };\n\n var introItemView = function introItemView(item, x, y, vx, vy) {\n if (item.interactionMethod === InteractionMethod.NONE) {\n item.translateX = null;\n item.translateX = x;\n item.translateY = null;\n item.translateY = y;\n } else if (item.interactionMethod === InteractionMethod.DROP) {\n item.translateX = null;\n item.translateX = x - vx * 20;\n\n item.translateY = null;\n item.translateY = y - vy * 10;\n\n item.scaleX = 0.8;\n item.scaleY = 0.8;\n } else if (item.interactionMethod === InteractionMethod.BROWSE) {\n item.translateY = null;\n item.translateY = y - 30;\n } else if (item.interactionMethod === InteractionMethod.API) {\n item.translateX = null;\n item.translateX = x - 30;\n item.translateY = null;\n }\n };\n\n /**\n * Removes an existing item\n * @param root\n * @param action\n */\n var removeItemView = function removeItemView(_ref3) {\n var root = _ref3.root,\n action = _ref3.action;\n var id = action.id;\n\n // get the view matching the given id\n var view = root.childViews.find(function(child) {\n return child.id === id;\n });\n\n // if no view found, exit\n if (!view) {\n return;\n }\n\n // animate view out of view\n view.scaleX = 0.9;\n view.scaleY = 0.9;\n view.opacity = 0;\n\n // mark for removal\n view.markedForRemoval = true;\n };\n\n var getItemHeight = function getItemHeight(child) {\n return (\n child.rect.element.height +\n child.rect.element.marginBottom * 0.5 +\n child.rect.element.marginTop * 0.5\n );\n };\n var getItemWidth = function getItemWidth(child) {\n return (\n child.rect.element.width +\n child.rect.element.marginLeft * 0.5 +\n child.rect.element.marginRight * 0.5\n );\n };\n\n var dragItem = function dragItem(_ref4) {\n var root = _ref4.root,\n action = _ref4.action;\n var id = action.id,\n dragState = action.dragState;\n\n // reference to item\n var item = root.query('GET_ITEM', { id: id });\n\n // get the view matching the given id\n var view = root.childViews.find(function(child) {\n return child.id === id;\n });\n\n var numItems = root.childViews.length;\n var oldIndex = dragState.getItemIndex(item);\n\n // if no view found, exit\n if (!view) return;\n\n var dragPosition = {\n x: view.dragOrigin.x + view.dragOffset.x + view.dragCenter.x,\n y: view.dragOrigin.y + view.dragOffset.y + view.dragCenter.y,\n };\n\n // get drag area dimensions\n var dragHeight = getItemHeight(view);\n var dragWidth = getItemWidth(view);\n\n // get rows and columns (There will always be at least one row and one column if a file is present)\n var cols = Math.floor(root.rect.outer.width / dragWidth);\n if (cols > numItems) cols = numItems;\n\n // rows are used to find when we have left the preview area bounding box\n var rows = Math.floor(numItems / cols + 1);\n\n dropAreaDimensions.setHeight = dragHeight * rows;\n dropAreaDimensions.setWidth = dragWidth * cols;\n\n // get new index of dragged item\n var location = {\n y: Math.floor(dragPosition.y / dragHeight),\n x: Math.floor(dragPosition.x / dragWidth),\n getGridIndex: function getGridIndex() {\n if (\n dragPosition.y > dropAreaDimensions.getHeight ||\n dragPosition.y < 0 ||\n dragPosition.x > dropAreaDimensions.getWidth ||\n dragPosition.x < 0\n )\n return oldIndex;\n return this.y * cols + this.x;\n },\n getColIndex: function getColIndex() {\n var items = root.query('GET_ACTIVE_ITEMS');\n var visibleChildren = root.childViews.filter(function(child) {\n return child.rect.element.height;\n });\n var children = items.map(function(item) {\n return visibleChildren.find(function(childView) {\n return childView.id === item.id;\n });\n });\n\n var currentIndex = children.findIndex(function(child) {\n return child === view;\n });\n var dragHeight = getItemHeight(view);\n var l = children.length;\n var idx = l;\n var childHeight = 0;\n var childBottom = 0;\n var childTop = 0;\n for (var i = 0; i < l; i++) {\n childHeight = getItemHeight(children[i]);\n childTop = childBottom;\n childBottom = childTop + childHeight;\n if (dragPosition.y < childBottom) {\n if (currentIndex > i) {\n if (dragPosition.y < childTop + dragHeight) {\n idx = i;\n break;\n }\n continue;\n }\n idx = i;\n break;\n }\n }\n return idx;\n },\n };\n\n // get new index\n var index = cols > 1 ? location.getGridIndex() : location.getColIndex();\n root.dispatch('MOVE_ITEM', { query: view, index: index });\n\n // if the index of the item changed, dispatch reorder action\n var currentIndex = dragState.getIndex();\n\n if (currentIndex === undefined || currentIndex !== index) {\n dragState.setIndex(index);\n\n if (currentIndex === undefined) return;\n\n root.dispatch('DID_REORDER_ITEMS', {\n items: root.query('GET_ACTIVE_ITEMS'),\n origin: oldIndex,\n target: index,\n });\n }\n };\n\n /**\n * Setup action routes\n */\n var route$2 = createRoute({\n DID_ADD_ITEM: addItemView,\n DID_REMOVE_ITEM: removeItemView,\n DID_DRAG_ITEM: dragItem,\n });\n\n /**\n * Write to view\n * @param root\n * @param actions\n * @param props\n */\n var write$5 = function write(_ref5) {\n var root = _ref5.root,\n props = _ref5.props,\n actions = _ref5.actions,\n shouldOptimize = _ref5.shouldOptimize;\n // route actions\n route$2({ root: root, props: props, actions: actions });\n var dragCoordinates = props.dragCoordinates;\n\n // available space on horizontal axis\n var horizontalSpace = root.rect.element.width;\n\n // only draw children that have dimensions\n var visibleChildren = root.childViews.filter(function(child) {\n return child.rect.element.height;\n });\n\n // sort based on current active items\n var children = root\n .query('GET_ACTIVE_ITEMS')\n .map(function(item) {\n return visibleChildren.find(function(child) {\n return child.id === item.id;\n });\n })\n .filter(function(item) {\n return item;\n });\n\n // get index\n var dragIndex = dragCoordinates\n ? getItemIndexByPosition(root, children, dragCoordinates)\n : null;\n\n // add index is used to reserve the dropped/added item index till the actual item is rendered\n var addIndex = root.ref.addIndex || null;\n\n // add index no longer needed till possibly next draw\n root.ref.addIndex = null;\n\n var dragIndexOffset = 0;\n var removeIndexOffset = 0;\n var addIndexOffset = 0;\n\n if (children.length === 0) return;\n\n var childRect = children[0].rect.element;\n var itemVerticalMargin = childRect.marginTop + childRect.marginBottom;\n var itemHorizontalMargin = childRect.marginLeft + childRect.marginRight;\n var itemWidth = childRect.width + itemHorizontalMargin;\n var itemHeight = childRect.height + itemVerticalMargin;\n var itemsPerRow = getItemsPerRow(horizontalSpace, itemWidth);\n\n // stack\n if (itemsPerRow === 1) {\n var offsetY = 0;\n var dragOffset = 0;\n\n children.forEach(function(child, index) {\n if (dragIndex) {\n var dist = index - dragIndex;\n if (dist === -2) {\n dragOffset = -itemVerticalMargin * 0.25;\n } else if (dist === -1) {\n dragOffset = -itemVerticalMargin * 0.75;\n } else if (dist === 0) {\n dragOffset = itemVerticalMargin * 0.75;\n } else if (dist === 1) {\n dragOffset = itemVerticalMargin * 0.25;\n } else {\n dragOffset = 0;\n }\n }\n\n if (shouldOptimize) {\n child.translateX = null;\n child.translateY = null;\n }\n\n if (!child.markedForRemoval) {\n moveItem(child, 0, offsetY + dragOffset);\n }\n\n var itemHeight = child.rect.element.height + itemVerticalMargin;\n\n var visualHeight = itemHeight * (child.markedForRemoval ? child.opacity : 1);\n\n offsetY += visualHeight;\n });\n }\n // grid\n else {\n var prevX = 0;\n var prevY = 0;\n\n children.forEach(function(child, index) {\n if (index === dragIndex) {\n dragIndexOffset = 1;\n }\n\n if (index === addIndex) {\n addIndexOffset += 1;\n }\n\n if (child.markedForRemoval && child.opacity < 0.5) {\n removeIndexOffset -= 1;\n }\n\n var visualIndex = index + addIndexOffset + dragIndexOffset + removeIndexOffset;\n\n var indexX = visualIndex % itemsPerRow;\n var indexY = Math.floor(visualIndex / itemsPerRow);\n\n var offsetX = indexX * itemWidth;\n var offsetY = indexY * itemHeight;\n\n var vectorX = Math.sign(offsetX - prevX);\n var vectorY = Math.sign(offsetY - prevY);\n\n prevX = offsetX;\n prevY = offsetY;\n\n if (child.markedForRemoval) return;\n\n if (shouldOptimize) {\n child.translateX = null;\n child.translateY = null;\n }\n\n moveItem(child, offsetX, offsetY, vectorX, vectorY);\n });\n }\n };\n\n /**\n * Filters actions that are meant specifically for a certain child of the list\n * @param child\n * @param actions\n */\n var filterSetItemActions = function filterSetItemActions(child, actions) {\n return actions.filter(function(action) {\n // if action has an id, filter out actions that don't have this child id\n if (action.data && action.data.id) {\n return child.id === action.data.id;\n }\n\n // allow all other actions\n return true;\n });\n };\n\n var list = createView({\n create: create$8,\n write: write$5,\n tag: 'ul',\n name: 'list',\n didWriteView: function didWriteView(_ref6) {\n var root = _ref6.root;\n root.childViews\n .filter(function(view) {\n return view.markedForRemoval && view.opacity === 0 && view.resting;\n })\n .forEach(function(view) {\n view._destroy();\n root.removeChildView(view);\n });\n },\n filterFrameActionsForChild: filterSetItemActions,\n mixins: {\n apis: ['dragCoordinates'],\n },\n });\n\n var create$9 = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n root.ref.list = root.appendChildView(root.createChildView(list));\n props.dragCoordinates = null;\n props.overflowing = false;\n };\n\n var storeDragCoordinates = function storeDragCoordinates(_ref2) {\n var root = _ref2.root,\n props = _ref2.props,\n action = _ref2.action;\n if (!root.query('GET_ITEM_INSERT_LOCATION_FREEDOM')) return;\n props.dragCoordinates = {\n left: action.position.scopeLeft - root.ref.list.rect.element.left,\n top:\n action.position.scopeTop -\n (root.rect.outer.top + root.rect.element.marginTop + root.rect.element.scrollTop),\n };\n };\n\n var clearDragCoordinates = function clearDragCoordinates(_ref3) {\n var props = _ref3.props;\n props.dragCoordinates = null;\n };\n\n var route$3 = createRoute({\n DID_DRAG: storeDragCoordinates,\n DID_END_DRAG: clearDragCoordinates,\n });\n\n var write$6 = function write(_ref4) {\n var root = _ref4.root,\n props = _ref4.props,\n actions = _ref4.actions;\n\n // route actions\n route$3({ root: root, props: props, actions: actions });\n\n // current drag position\n root.ref.list.dragCoordinates = props.dragCoordinates;\n\n // if currently overflowing but no longer received overflow\n if (props.overflowing && !props.overflow) {\n props.overflowing = false;\n\n // reset overflow state\n root.element.dataset.state = '';\n root.height = null;\n }\n\n // if is not overflowing currently but does receive overflow value\n if (props.overflow) {\n var newHeight = Math.round(props.overflow);\n if (newHeight !== root.height) {\n props.overflowing = true;\n root.element.dataset.state = 'overflow';\n root.height = newHeight;\n }\n }\n };\n\n var listScroller = createView({\n create: create$9,\n write: write$6,\n name: 'list-scroller',\n mixins: {\n apis: ['overflow', 'dragCoordinates'],\n styles: ['height', 'translateY'],\n animations: {\n translateY: 'spring',\n },\n },\n });\n\n var attrToggle = function attrToggle(element, name, state) {\n var enabledValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n if (state) {\n attr(element, name, enabledValue);\n } else {\n element.removeAttribute(name);\n }\n };\n\n var resetFileInput = function resetFileInput(input) {\n // no value, no need to reset\n if (!input || input.value === '') {\n return;\n }\n\n try {\n // for modern browsers\n input.value = '';\n } catch (err) {}\n\n // for IE10\n if (input.value) {\n // quickly append input to temp form and reset form\n var form = createElement$1('form');\n var parentNode = input.parentNode;\n var ref = input.nextSibling;\n form.appendChild(input);\n form.reset();\n\n // re-inject input where it originally was\n if (ref) {\n parentNode.insertBefore(input, ref);\n } else {\n parentNode.appendChild(input);\n }\n }\n };\n\n var create$a = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n\n // set id so can be referenced from outside labels\n root.element.id = 'filepond--browser-' + props.id;\n\n // set name of element (is removed when a value is set)\n attr(root.element, 'name', root.query('GET_NAME'));\n\n // we have to link this element to the status element\n attr(root.element, 'aria-controls', 'filepond--assistant-' + props.id);\n\n // set label, we use labelled by as otherwise the screenreader does not read the \"browse\" text in the label (as it has tabindex: 0)\n attr(root.element, 'aria-labelledby', 'filepond--drop-label-' + props.id);\n\n // set configurable props\n setAcceptedFileTypes({\n root: root,\n action: { value: root.query('GET_ACCEPTED_FILE_TYPES') },\n });\n toggleAllowMultiple({ root: root, action: { value: root.query('GET_ALLOW_MULTIPLE') } });\n toggleDirectoryFilter({\n root: root,\n action: { value: root.query('GET_ALLOW_DIRECTORIES_ONLY') },\n });\n toggleDisabled({ root: root });\n toggleRequired({ root: root, action: { value: root.query('GET_REQUIRED') } });\n setCaptureMethod({ root: root, action: { value: root.query('GET_CAPTURE_METHOD') } });\n\n // handle changes to the input field\n root.ref.handleChange = function(e) {\n if (!root.element.value) {\n return;\n }\n\n // extract files and move value of webkitRelativePath path to _relativePath\n var files = Array.from(root.element.files).map(function(file) {\n file._relativePath = file.webkitRelativePath;\n return file;\n });\n\n // we add a little delay so the OS file select window can move out of the way before we add our file\n setTimeout(function() {\n // load files\n props.onload(files);\n\n // reset input, it's just for exposing a method to drop files, should not retain any state\n resetFileInput(root.element);\n }, 250);\n };\n\n root.element.addEventListener('change', root.ref.handleChange);\n };\n\n var setAcceptedFileTypes = function setAcceptedFileTypes(_ref2) {\n var root = _ref2.root,\n action = _ref2.action;\n if (!root.query('GET_ALLOW_SYNC_ACCEPT_ATTRIBUTE')) return;\n attrToggle(\n root.element,\n 'accept',\n !!action.value,\n action.value ? action.value.join(',') : ''\n );\n };\n\n var toggleAllowMultiple = function toggleAllowMultiple(_ref3) {\n var root = _ref3.root,\n action = _ref3.action;\n attrToggle(root.element, 'multiple', action.value);\n };\n\n var toggleDirectoryFilter = function toggleDirectoryFilter(_ref4) {\n var root = _ref4.root,\n action = _ref4.action;\n attrToggle(root.element, 'webkitdirectory', action.value);\n };\n\n var toggleDisabled = function toggleDisabled(_ref5) {\n var root = _ref5.root;\n var isDisabled = root.query('GET_DISABLED');\n var doesAllowBrowse = root.query('GET_ALLOW_BROWSE');\n var disableField = isDisabled || !doesAllowBrowse;\n attrToggle(root.element, 'disabled', disableField);\n };\n\n var toggleRequired = function toggleRequired(_ref6) {\n var root = _ref6.root,\n action = _ref6.action;\n // want to remove required, always possible\n if (!action.value) {\n attrToggle(root.element, 'required', false);\n }\n // if want to make required, only possible when zero items\n else if (root.query('GET_TOTAL_ITEMS') === 0) {\n attrToggle(root.element, 'required', true);\n }\n };\n\n var setCaptureMethod = function setCaptureMethod(_ref7) {\n var root = _ref7.root,\n action = _ref7.action;\n attrToggle(\n root.element,\n 'capture',\n !!action.value,\n action.value === true ? '' : action.value\n );\n };\n\n var updateRequiredStatus = function updateRequiredStatus(_ref8) {\n var root = _ref8.root;\n var element = root.element;\n // always remove the required attribute when more than zero items\n if (root.query('GET_TOTAL_ITEMS') > 0) {\n attrToggle(element, 'required', false);\n attrToggle(element, 'name', false);\n } else {\n // add name attribute\n attrToggle(element, 'name', true, root.query('GET_NAME'));\n\n // remove any validation messages\n var shouldCheckValidity = root.query('GET_CHECK_VALIDITY');\n if (shouldCheckValidity) {\n element.setCustomValidity('');\n }\n\n // we only add required if the field has been deemed required\n if (root.query('GET_REQUIRED')) {\n attrToggle(element, 'required', true);\n }\n }\n };\n\n var updateFieldValidityStatus = function updateFieldValidityStatus(_ref9) {\n var root = _ref9.root;\n var shouldCheckValidity = root.query('GET_CHECK_VALIDITY');\n if (!shouldCheckValidity) return;\n root.element.setCustomValidity(root.query('GET_LABEL_INVALID_FIELD'));\n };\n\n var browser = createView({\n tag: 'input',\n name: 'browser',\n ignoreRect: true,\n ignoreRectUpdate: true,\n attributes: {\n type: 'file',\n },\n\n create: create$a,\n destroy: function destroy(_ref10) {\n var root = _ref10.root;\n root.element.removeEventListener('change', root.ref.handleChange);\n },\n write: createRoute({\n DID_LOAD_ITEM: updateRequiredStatus,\n DID_REMOVE_ITEM: updateRequiredStatus,\n DID_THROW_ITEM_INVALID: updateFieldValidityStatus,\n\n DID_SET_DISABLED: toggleDisabled,\n DID_SET_ALLOW_BROWSE: toggleDisabled,\n DID_SET_ALLOW_DIRECTORIES_ONLY: toggleDirectoryFilter,\n DID_SET_ALLOW_MULTIPLE: toggleAllowMultiple,\n DID_SET_ACCEPTED_FILE_TYPES: setAcceptedFileTypes,\n DID_SET_CAPTURE_METHOD: setCaptureMethod,\n DID_SET_REQUIRED: toggleRequired,\n }),\n });\n\n var Key = {\n ENTER: 13,\n SPACE: 32,\n };\n\n var create$b = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n\n // create the label and link it to the file browser\n var label = createElement$1('label');\n attr(label, 'for', 'filepond--browser-' + props.id);\n\n // use for labeling file input (aria-labelledby on file input)\n attr(label, 'id', 'filepond--drop-label-' + props.id);\n\n // hide the label for screenreaders, the input element will read the contents of the label when it's focussed. If we don't set aria-hidden the screenreader will also navigate the contents of the label separately from the input.\n attr(label, 'aria-hidden', 'true');\n\n // handle keys\n root.ref.handleKeyDown = function(e) {\n var isActivationKey = e.keyCode === Key.ENTER || e.keyCode === Key.SPACE;\n if (!isActivationKey) return;\n // stops from triggering the element a second time\n e.preventDefault();\n\n // click link (will then in turn activate file input)\n root.ref.label.click();\n };\n\n root.ref.handleClick = function(e) {\n var isLabelClick = e.target === label || label.contains(e.target);\n\n // don't want to click twice\n if (isLabelClick) return;\n\n // click link (will then in turn activate file input)\n root.ref.label.click();\n };\n\n // attach events\n label.addEventListener('keydown', root.ref.handleKeyDown);\n root.element.addEventListener('click', root.ref.handleClick);\n\n // update\n updateLabelValue(label, props.caption);\n\n // add!\n root.appendChild(label);\n root.ref.label = label;\n };\n\n var updateLabelValue = function updateLabelValue(label, value) {\n label.innerHTML = value;\n var clickable = label.querySelector('.filepond--label-action');\n if (clickable) {\n attr(clickable, 'tabindex', '0');\n }\n return value;\n };\n\n var dropLabel = createView({\n name: 'drop-label',\n ignoreRect: true,\n create: create$b,\n destroy: function destroy(_ref2) {\n var root = _ref2.root;\n root.ref.label.addEventListener('keydown', root.ref.handleKeyDown);\n root.element.removeEventListener('click', root.ref.handleClick);\n },\n write: createRoute({\n DID_SET_LABEL_IDLE: function DID_SET_LABEL_IDLE(_ref3) {\n var root = _ref3.root,\n action = _ref3.action;\n updateLabelValue(root.ref.label, action.value);\n },\n }),\n\n mixins: {\n styles: ['opacity', 'translateX', 'translateY'],\n animations: {\n opacity: { type: 'tween', duration: 150 },\n translateX: 'spring',\n translateY: 'spring',\n },\n },\n });\n\n var blob = createView({\n name: 'drip-blob',\n ignoreRect: true,\n mixins: {\n styles: ['translateX', 'translateY', 'scaleX', 'scaleY', 'opacity'],\n animations: {\n scaleX: 'spring',\n scaleY: 'spring',\n translateX: 'spring',\n translateY: 'spring',\n opacity: { type: 'tween', duration: 250 },\n },\n },\n });\n\n var addBlob = function addBlob(_ref) {\n var root = _ref.root;\n var centerX = root.rect.element.width * 0.5;\n var centerY = root.rect.element.height * 0.5;\n\n root.ref.blob = root.appendChildView(\n root.createChildView(blob, {\n opacity: 0,\n scaleX: 2.5,\n scaleY: 2.5,\n translateX: centerX,\n translateY: centerY,\n })\n );\n };\n\n var moveBlob = function moveBlob(_ref2) {\n var root = _ref2.root,\n action = _ref2.action;\n if (!root.ref.blob) {\n addBlob({ root: root });\n return;\n }\n\n root.ref.blob.translateX = action.position.scopeLeft;\n root.ref.blob.translateY = action.position.scopeTop;\n root.ref.blob.scaleX = 1;\n root.ref.blob.scaleY = 1;\n root.ref.blob.opacity = 1;\n };\n\n var hideBlob = function hideBlob(_ref3) {\n var root = _ref3.root;\n if (!root.ref.blob) {\n return;\n }\n root.ref.blob.opacity = 0;\n };\n\n var explodeBlob = function explodeBlob(_ref4) {\n var root = _ref4.root;\n if (!root.ref.blob) {\n return;\n }\n root.ref.blob.scaleX = 2.5;\n root.ref.blob.scaleY = 2.5;\n root.ref.blob.opacity = 0;\n };\n\n var write$7 = function write(_ref5) {\n var root = _ref5.root,\n props = _ref5.props,\n actions = _ref5.actions;\n route$4({ root: root, props: props, actions: actions });\n var blob = root.ref.blob;\n\n if (actions.length === 0 && blob && blob.opacity === 0) {\n root.removeChildView(blob);\n root.ref.blob = null;\n }\n };\n\n var route$4 = createRoute({\n DID_DRAG: moveBlob,\n DID_DROP: explodeBlob,\n DID_END_DRAG: hideBlob,\n });\n\n var drip = createView({\n ignoreRect: true,\n ignoreRectUpdate: true,\n name: 'drip',\n write: write$7,\n });\n\n var setInputFiles = function setInputFiles(element, files) {\n try {\n // Create a DataTransfer instance and add a newly created file\n var dataTransfer = new DataTransfer();\n files.forEach(function(file) {\n if (file instanceof File) {\n dataTransfer.items.add(file);\n } else {\n dataTransfer.items.add(\n new File([file], file.name, {\n type: file.type,\n })\n );\n }\n });\n\n // Assign the DataTransfer files list to the file input\n element.files = dataTransfer.files;\n } catch (err) {\n return false;\n }\n return true;\n };\n\n var create$c = function create(_ref) {\n var root = _ref.root;\n return (root.ref.fields = {});\n };\n\n var getField = function getField(root, id) {\n return root.ref.fields[id];\n };\n\n var syncFieldPositionsWithItems = function syncFieldPositionsWithItems(root) {\n root.query('GET_ACTIVE_ITEMS').forEach(function(item) {\n if (!root.ref.fields[item.id]) return;\n root.element.appendChild(root.ref.fields[item.id]);\n });\n };\n\n var didReorderItems = function didReorderItems(_ref2) {\n var root = _ref2.root;\n return syncFieldPositionsWithItems(root);\n };\n\n var didAddItem = function didAddItem(_ref3) {\n var root = _ref3.root,\n action = _ref3.action;\n var fileItem = root.query('GET_ITEM', action.id);\n var isLocalFile = fileItem.origin === FileOrigin.LOCAL;\n var shouldUseFileInput = !isLocalFile && root.query('SHOULD_UPDATE_FILE_INPUT');\n var dataContainer = createElement$1('input');\n dataContainer.type = shouldUseFileInput ? 'file' : 'hidden';\n dataContainer.name = root.query('GET_NAME');\n dataContainer.disabled = root.query('GET_DISABLED');\n root.ref.fields[action.id] = dataContainer;\n syncFieldPositionsWithItems(root);\n };\n\n var didLoadItem$1 = function didLoadItem(_ref4) {\n var root = _ref4.root,\n action = _ref4.action;\n var field = getField(root, action.id);\n if (!field) return;\n\n // store server ref in hidden input\n if (action.serverFileReference !== null) field.value = action.serverFileReference;\n\n // store file item in file input\n if (!root.query('SHOULD_UPDATE_FILE_INPUT')) return;\n\n var fileItem = root.query('GET_ITEM', action.id);\n setInputFiles(field, [fileItem.file]);\n };\n\n var didPrepareOutput = function didPrepareOutput(_ref5) {\n var root = _ref5.root,\n action = _ref5.action;\n // this timeout pushes the handler after 'load'\n if (!root.query('SHOULD_UPDATE_FILE_INPUT')) return;\n setTimeout(function() {\n var field = getField(root, action.id);\n if (!field) return;\n setInputFiles(field, [action.file]);\n }, 0);\n };\n\n var didSetDisabled = function didSetDisabled(_ref6) {\n var root = _ref6.root;\n root.element.disabled = root.query('GET_DISABLED');\n };\n\n var didRemoveItem = function didRemoveItem(_ref7) {\n var root = _ref7.root,\n action = _ref7.action;\n var field = getField(root, action.id);\n if (!field) return;\n if (field.parentNode) field.parentNode.removeChild(field);\n delete root.ref.fields[action.id];\n };\n\n // only runs for server files (so doesn't deal with file input)\n var didDefineValue = function didDefineValue(_ref8) {\n var root = _ref8.root,\n action = _ref8.action;\n var field = getField(root, action.id);\n if (!field) return;\n if (action.value === null) {\n // clear field value\n field.removeAttribute('value');\n } else {\n // set field value\n field.value = action.value;\n }\n syncFieldPositionsWithItems(root);\n };\n\n var write$8 = createRoute({\n DID_SET_DISABLED: didSetDisabled,\n DID_ADD_ITEM: didAddItem,\n DID_LOAD_ITEM: didLoadItem$1,\n DID_REMOVE_ITEM: didRemoveItem,\n DID_DEFINE_VALUE: didDefineValue,\n DID_PREPARE_OUTPUT: didPrepareOutput,\n DID_REORDER_ITEMS: didReorderItems,\n DID_SORT_ITEMS: didReorderItems,\n });\n\n var data = createView({\n tag: 'fieldset',\n name: 'data',\n create: create$c,\n write: write$8,\n ignoreRect: true,\n });\n\n var getRootNode = function getRootNode(element) {\n return 'getRootNode' in element ? element.getRootNode() : document;\n };\n\n var images = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'tiff'];\n var text$1 = ['css', 'csv', 'html', 'txt'];\n var map = {\n zip: 'zip|compressed',\n epub: 'application/epub+zip',\n };\n\n var guesstimateMimeType = function guesstimateMimeType() {\n var extension = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n extension = extension.toLowerCase();\n if (images.includes(extension)) {\n return (\n 'image/' +\n (extension === 'jpg' ? 'jpeg' : extension === 'svg' ? 'svg+xml' : extension)\n );\n }\n if (text$1.includes(extension)) {\n return 'text/' + extension;\n }\n\n return map[extension] || '';\n };\n\n var requestDataTransferItems = function requestDataTransferItems(dataTransfer) {\n return new Promise(function(resolve, reject) {\n // try to get links from transfer, if found we'll exit immediately (unless a file is in the dataTransfer as well, this is because Firefox could represent the file as a URL and a file object at the same time)\n var links = getLinks(dataTransfer);\n if (links.length && !hasFiles(dataTransfer)) {\n return resolve(links);\n }\n // try to get files from the transfer\n getFiles(dataTransfer).then(resolve);\n });\n };\n\n /**\n * Test if datatransfer has files\n */\n var hasFiles = function hasFiles(dataTransfer) {\n if (dataTransfer.files) return dataTransfer.files.length > 0;\n return false;\n };\n\n /**\n * Extracts files from a DataTransfer object\n */\n var getFiles = function getFiles(dataTransfer) {\n return new Promise(function(resolve, reject) {\n // get the transfer items as promises\n var promisedFiles = (dataTransfer.items ? Array.from(dataTransfer.items) : [])\n // only keep file system items (files and directories)\n .filter(function(item) {\n return isFileSystemItem(item);\n })\n\n // map each item to promise\n .map(function(item) {\n return getFilesFromItem(item);\n });\n\n // if is empty, see if we can extract some info from the files property as a fallback\n if (!promisedFiles.length) {\n // TODO: test for directories (should not be allowed)\n // Use FileReader, problem is that the files property gets lost in the process\n resolve(dataTransfer.files ? Array.from(dataTransfer.files) : []);\n return;\n }\n\n // done!\n Promise.all(promisedFiles)\n .then(function(returnedFileGroups) {\n // flatten groups\n var files = [];\n returnedFileGroups.forEach(function(group) {\n files.push.apply(files, group);\n });\n\n // done (filter out empty files)!\n resolve(\n files\n .filter(function(file) {\n return file;\n })\n .map(function(file) {\n if (!file._relativePath)\n file._relativePath = file.webkitRelativePath;\n return file;\n })\n );\n })\n .catch(console.error);\n });\n };\n\n var isFileSystemItem = function isFileSystemItem(item) {\n if (isEntry(item)) {\n var entry = getAsEntry(item);\n if (entry) {\n return entry.isFile || entry.isDirectory;\n }\n }\n return item.kind === 'file';\n };\n\n var getFilesFromItem = function getFilesFromItem(item) {\n return new Promise(function(resolve, reject) {\n if (isDirectoryEntry(item)) {\n getFilesInDirectory(getAsEntry(item))\n .then(resolve)\n .catch(reject);\n return;\n }\n\n resolve([item.getAsFile()]);\n });\n };\n\n var getFilesInDirectory = function getFilesInDirectory(entry) {\n return new Promise(function(resolve, reject) {\n var files = [];\n\n // the total entries to read\n var dirCounter = 0;\n var fileCounter = 0;\n\n var resolveIfDone = function resolveIfDone() {\n if (fileCounter === 0 && dirCounter === 0) {\n resolve(files);\n }\n };\n\n // the recursive function\n var readEntries = function readEntries(dirEntry) {\n dirCounter++;\n\n var directoryReader = dirEntry.createReader();\n\n // directories are returned in batches, we need to process all batches before we're done\n var readBatch = function readBatch() {\n directoryReader.readEntries(function(entries) {\n if (entries.length === 0) {\n dirCounter--;\n resolveIfDone();\n return;\n }\n\n entries.forEach(function(entry) {\n // recursively read more directories\n if (entry.isDirectory) {\n readEntries(entry);\n } else {\n // read as file\n fileCounter++;\n\n entry.file(function(file) {\n var correctedFile = correctMissingFileType(file);\n if (entry.fullPath)\n correctedFile._relativePath = entry.fullPath;\n files.push(correctedFile);\n fileCounter--;\n resolveIfDone();\n });\n }\n });\n\n // try to get next batch of files\n readBatch();\n }, reject);\n };\n\n // read first batch of files\n readBatch();\n };\n\n // go!\n readEntries(entry);\n });\n };\n\n var correctMissingFileType = function correctMissingFileType(file) {\n if (file.type.length) return file;\n var date = file.lastModifiedDate;\n var name = file.name;\n var type = guesstimateMimeType(getExtensionFromFilename(file.name));\n if (!type.length) return file;\n file = file.slice(0, file.size, type);\n file.name = name;\n file.lastModifiedDate = date;\n return file;\n };\n\n var isDirectoryEntry = function isDirectoryEntry(item) {\n return isEntry(item) && (getAsEntry(item) || {}).isDirectory;\n };\n\n var isEntry = function isEntry(item) {\n return 'webkitGetAsEntry' in item;\n };\n\n var getAsEntry = function getAsEntry(item) {\n return item.webkitGetAsEntry();\n };\n\n /**\n * Extracts links from a DataTransfer object\n */\n var getLinks = function getLinks(dataTransfer) {\n var links = [];\n try {\n // look in meta data property\n links = getLinksFromTransferMetaData(dataTransfer);\n if (links.length) {\n return links;\n }\n links = getLinksFromTransferURLData(dataTransfer);\n } catch (e) {\n // nope nope nope (probably IE trouble)\n }\n return links;\n };\n\n var getLinksFromTransferURLData = function getLinksFromTransferURLData(dataTransfer) {\n var data = dataTransfer.getData('url');\n if (typeof data === 'string' && data.length) {\n return [data];\n }\n return [];\n };\n\n var getLinksFromTransferMetaData = function getLinksFromTransferMetaData(dataTransfer) {\n var data = dataTransfer.getData('text/html');\n if (typeof data === 'string' && data.length) {\n var matches = data.match(/src\\s*=\\s*\"(.+?)\"/);\n if (matches) {\n return [matches[1]];\n }\n }\n return [];\n };\n\n var dragNDropObservers = [];\n\n var eventPosition = function eventPosition(e) {\n return {\n pageLeft: e.pageX,\n pageTop: e.pageY,\n scopeLeft: e.offsetX || e.layerX,\n scopeTop: e.offsetY || e.layerY,\n };\n };\n\n var createDragNDropClient = function createDragNDropClient(\n element,\n scopeToObserve,\n filterElement\n ) {\n var observer = getDragNDropObserver(scopeToObserve);\n\n var client = {\n element: element,\n filterElement: filterElement,\n state: null,\n ondrop: function ondrop() {},\n onenter: function onenter() {},\n ondrag: function ondrag() {},\n onexit: function onexit() {},\n onload: function onload() {},\n allowdrop: function allowdrop() {},\n };\n\n client.destroy = observer.addListener(client);\n\n return client;\n };\n\n var getDragNDropObserver = function getDragNDropObserver(element) {\n // see if already exists, if so, return\n var observer = dragNDropObservers.find(function(item) {\n return item.element === element;\n });\n if (observer) {\n return observer;\n }\n\n // create new observer, does not yet exist for this element\n var newObserver = createDragNDropObserver(element);\n dragNDropObservers.push(newObserver);\n return newObserver;\n };\n\n var createDragNDropObserver = function createDragNDropObserver(element) {\n var clients = [];\n\n var routes = {\n dragenter: dragenter,\n dragover: dragover,\n dragleave: dragleave,\n drop: drop,\n };\n\n var handlers = {};\n\n forin(routes, function(event, createHandler) {\n handlers[event] = createHandler(element, clients);\n element.addEventListener(event, handlers[event], false);\n });\n\n var observer = {\n element: element,\n addListener: function addListener(client) {\n // add as client\n clients.push(client);\n\n // return removeListener function\n return function() {\n // remove client\n clients.splice(clients.indexOf(client), 1);\n\n // if no more clients, clean up observer\n if (clients.length === 0) {\n dragNDropObservers.splice(dragNDropObservers.indexOf(observer), 1);\n\n forin(routes, function(event) {\n element.removeEventListener(event, handlers[event], false);\n });\n }\n };\n },\n };\n\n return observer;\n };\n\n var elementFromPoint = function elementFromPoint(root, point) {\n if (!('elementFromPoint' in root)) {\n root = document;\n }\n return root.elementFromPoint(point.x, point.y);\n };\n\n var isEventTarget = function isEventTarget(e, target) {\n // get root\n var root = getRootNode(target);\n\n // get element at position\n // if root is not actual shadow DOM and does not have elementFromPoint method, use the one on document\n var elementAtPosition = elementFromPoint(root, {\n x: e.pageX - window.pageXOffset,\n y: e.pageY - window.pageYOffset,\n });\n\n // test if target is the element or if one of its children is\n return elementAtPosition === target || target.contains(elementAtPosition);\n };\n\n var initialTarget = null;\n\n var setDropEffect = function setDropEffect(dataTransfer, effect) {\n // is in try catch as IE11 will throw error if not\n try {\n dataTransfer.dropEffect = effect;\n } catch (e) {}\n };\n\n var dragenter = function dragenter(root, clients) {\n return function(e) {\n e.preventDefault();\n\n initialTarget = e.target;\n\n clients.forEach(function(client) {\n var element = client.element,\n onenter = client.onenter;\n\n if (isEventTarget(e, element)) {\n client.state = 'enter';\n\n // fire enter event\n onenter(eventPosition(e));\n }\n });\n };\n };\n\n var dragover = function dragover(root, clients) {\n return function(e) {\n e.preventDefault();\n\n var dataTransfer = e.dataTransfer;\n\n requestDataTransferItems(dataTransfer).then(function(items) {\n var overDropTarget = false;\n\n clients.some(function(client) {\n var filterElement = client.filterElement,\n element = client.element,\n onenter = client.onenter,\n onexit = client.onexit,\n ondrag = client.ondrag,\n allowdrop = client.allowdrop;\n\n // by default we can drop\n setDropEffect(dataTransfer, 'copy');\n\n // allow transfer of these items\n var allowsTransfer = allowdrop(items);\n\n // only used when can be dropped on page\n if (!allowsTransfer) {\n setDropEffect(dataTransfer, 'none');\n return;\n }\n\n // targetting this client\n if (isEventTarget(e, element)) {\n overDropTarget = true;\n\n // had no previous state, means we are entering this client\n if (client.state === null) {\n client.state = 'enter';\n onenter(eventPosition(e));\n return;\n }\n\n // now over element (no matter if it allows the drop or not)\n client.state = 'over';\n\n // needs to allow transfer\n if (filterElement && !allowsTransfer) {\n setDropEffect(dataTransfer, 'none');\n return;\n }\n\n // dragging\n ondrag(eventPosition(e));\n } else {\n // should be over an element to drop\n if (filterElement && !overDropTarget) {\n setDropEffect(dataTransfer, 'none');\n }\n\n // might have just left this client?\n if (client.state) {\n client.state = null;\n onexit(eventPosition(e));\n }\n }\n });\n });\n };\n };\n\n var drop = function drop(root, clients) {\n return function(e) {\n e.preventDefault();\n\n var dataTransfer = e.dataTransfer;\n\n requestDataTransferItems(dataTransfer).then(function(items) {\n clients.forEach(function(client) {\n var filterElement = client.filterElement,\n element = client.element,\n ondrop = client.ondrop,\n onexit = client.onexit,\n allowdrop = client.allowdrop;\n\n client.state = null;\n\n // if we're filtering on element we need to be over the element to drop\n if (filterElement && !isEventTarget(e, element)) return;\n\n // no transfer for this client\n if (!allowdrop(items)) return onexit(eventPosition(e));\n\n // we can drop these items on this client\n ondrop(eventPosition(e), items);\n });\n });\n };\n };\n\n var dragleave = function dragleave(root, clients) {\n return function(e) {\n if (initialTarget !== e.target) {\n return;\n }\n\n clients.forEach(function(client) {\n var onexit = client.onexit;\n\n client.state = null;\n\n onexit(eventPosition(e));\n });\n };\n };\n\n var createHopper = function createHopper(scope, validateItems, options) {\n // is now hopper scope\n scope.classList.add('filepond--hopper');\n\n // shortcuts\n var catchesDropsOnPage = options.catchesDropsOnPage,\n requiresDropOnElement = options.requiresDropOnElement,\n _options$filterItems = options.filterItems,\n filterItems =\n _options$filterItems === void 0\n ? function(items) {\n return items;\n }\n : _options$filterItems;\n\n // create a dnd client\n var client = createDragNDropClient(\n scope,\n catchesDropsOnPage ? document.documentElement : scope,\n requiresDropOnElement\n );\n\n // current client state\n var lastState = '';\n var currentState = '';\n\n // determines if a file may be dropped\n client.allowdrop = function(items) {\n // TODO: if we can, throw error to indicate the items cannot by dropped\n\n return validateItems(filterItems(items));\n };\n\n client.ondrop = function(position, items) {\n var filteredItems = filterItems(items);\n\n if (!validateItems(filteredItems)) {\n api.ondragend(position);\n return;\n }\n\n currentState = 'drag-drop';\n\n api.onload(filteredItems, position);\n };\n\n client.ondrag = function(position) {\n api.ondrag(position);\n };\n\n client.onenter = function(position) {\n currentState = 'drag-over';\n\n api.ondragstart(position);\n };\n\n client.onexit = function(position) {\n currentState = 'drag-exit';\n\n api.ondragend(position);\n };\n\n var api = {\n updateHopperState: function updateHopperState() {\n if (lastState !== currentState) {\n scope.dataset.hopperState = currentState;\n lastState = currentState;\n }\n },\n onload: function onload() {},\n ondragstart: function ondragstart() {},\n ondrag: function ondrag() {},\n ondragend: function ondragend() {},\n destroy: function destroy() {\n // destroy client\n client.destroy();\n },\n };\n\n return api;\n };\n\n var listening = false;\n var listeners$1 = [];\n\n var handlePaste = function handlePaste(e) {\n // if is pasting in input or textarea and the target is outside of a filepond scope, ignore\n var activeEl = document.activeElement;\n if (activeEl && /textarea|input/i.test(activeEl.nodeName)) {\n // test textarea or input is contained in filepond root\n var inScope = false;\n var element = activeEl;\n while (element !== document.body) {\n if (element.classList.contains('filepond--root')) {\n inScope = true;\n break;\n }\n element = element.parentNode;\n }\n\n if (!inScope) return;\n }\n\n requestDataTransferItems(e.clipboardData).then(function(files) {\n // no files received\n if (!files.length) {\n return;\n }\n\n // notify listeners of received files\n listeners$1.forEach(function(listener) {\n return listener(files);\n });\n });\n };\n\n var listen = function listen(cb) {\n // can't add twice\n if (listeners$1.includes(cb)) {\n return;\n }\n\n // add initial listener\n listeners$1.push(cb);\n\n // setup paste listener for entire page\n if (listening) {\n return;\n }\n\n listening = true;\n document.addEventListener('paste', handlePaste);\n };\n\n var unlisten = function unlisten(listener) {\n arrayRemove(listeners$1, listeners$1.indexOf(listener));\n\n // clean up\n if (listeners$1.length === 0) {\n document.removeEventListener('paste', handlePaste);\n listening = false;\n }\n };\n\n var createPaster = function createPaster() {\n var cb = function cb(files) {\n api.onload(files);\n };\n\n var api = {\n destroy: function destroy() {\n unlisten(cb);\n },\n onload: function onload() {},\n };\n\n listen(cb);\n\n return api;\n };\n\n /**\n * Creates the file view\n */\n var create$d = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n root.element.id = 'filepond--assistant-' + props.id;\n attr(root.element, 'role', 'status');\n attr(root.element, 'aria-live', 'polite');\n attr(root.element, 'aria-relevant', 'additions');\n };\n\n var addFilesNotificationTimeout = null;\n var notificationClearTimeout = null;\n\n var filenames = [];\n\n var assist = function assist(root, message) {\n root.element.textContent = message;\n };\n\n var clear$1 = function clear(root) {\n root.element.textContent = '';\n };\n\n var listModified = function listModified(root, filename, label) {\n var total = root.query('GET_TOTAL_ITEMS');\n assist(\n root,\n label +\n ' ' +\n filename +\n ', ' +\n total +\n ' ' +\n (total === 1\n ? root.query('GET_LABEL_FILE_COUNT_SINGULAR')\n : root.query('GET_LABEL_FILE_COUNT_PLURAL'))\n );\n\n // clear group after set amount of time so the status is not read twice\n clearTimeout(notificationClearTimeout);\n notificationClearTimeout = setTimeout(function() {\n clear$1(root);\n }, 1500);\n };\n\n var isUsingFilePond = function isUsingFilePond(root) {\n return root.element.parentNode.contains(document.activeElement);\n };\n\n var itemAdded = function itemAdded(_ref2) {\n var root = _ref2.root,\n action = _ref2.action;\n if (!isUsingFilePond(root)) {\n return;\n }\n\n root.element.textContent = '';\n var item = root.query('GET_ITEM', action.id);\n filenames.push(item.filename);\n\n clearTimeout(addFilesNotificationTimeout);\n addFilesNotificationTimeout = setTimeout(function() {\n listModified(root, filenames.join(', '), root.query('GET_LABEL_FILE_ADDED'));\n\n filenames.length = 0;\n }, 750);\n };\n\n var itemRemoved = function itemRemoved(_ref3) {\n var root = _ref3.root,\n action = _ref3.action;\n if (!isUsingFilePond(root)) {\n return;\n }\n\n var item = action.item;\n listModified(root, item.filename, root.query('GET_LABEL_FILE_REMOVED'));\n };\n\n var itemProcessed = function itemProcessed(_ref4) {\n var root = _ref4.root,\n action = _ref4.action;\n // will also notify the user when FilePond is not being used, as the user might be occupied with other activities while uploading a file\n\n var item = root.query('GET_ITEM', action.id);\n var filename = item.filename;\n var label = root.query('GET_LABEL_FILE_PROCESSING_COMPLETE');\n\n assist(root, filename + ' ' + label);\n };\n\n var itemProcessedUndo = function itemProcessedUndo(_ref5) {\n var root = _ref5.root,\n action = _ref5.action;\n var item = root.query('GET_ITEM', action.id);\n var filename = item.filename;\n var label = root.query('GET_LABEL_FILE_PROCESSING_ABORTED');\n\n assist(root, filename + ' ' + label);\n };\n\n var itemError = function itemError(_ref6) {\n var root = _ref6.root,\n action = _ref6.action;\n var item = root.query('GET_ITEM', action.id);\n var filename = item.filename;\n\n // will also notify the user when FilePond is not being used, as the user might be occupied with other activities while uploading a file\n\n assist(root, action.status.main + ' ' + filename + ' ' + action.status.sub);\n };\n\n var assistant = createView({\n create: create$d,\n ignoreRect: true,\n ignoreRectUpdate: true,\n write: createRoute({\n DID_LOAD_ITEM: itemAdded,\n DID_REMOVE_ITEM: itemRemoved,\n DID_COMPLETE_ITEM_PROCESSING: itemProcessed,\n\n DID_ABORT_ITEM_PROCESSING: itemProcessedUndo,\n DID_REVERT_ITEM_PROCESSING: itemProcessedUndo,\n\n DID_THROW_ITEM_REMOVE_ERROR: itemError,\n DID_THROW_ITEM_LOAD_ERROR: itemError,\n DID_THROW_ITEM_INVALID: itemError,\n DID_THROW_ITEM_PROCESSING_ERROR: itemError,\n }),\n\n tag: 'span',\n name: 'assistant',\n });\n\n var toCamels = function toCamels(string) {\n var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '-';\n return string.replace(new RegExp(separator + '.', 'g'), function(sub) {\n return sub.charAt(1).toUpperCase();\n });\n };\n\n var debounce = function debounce(func) {\n var interval = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 16;\n var immidiateOnly =\n arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var last = Date.now();\n var timeout = null;\n\n return function() {\n for (\n var _len = arguments.length, args = new Array(_len), _key = 0;\n _key < _len;\n _key++\n ) {\n args[_key] = arguments[_key];\n }\n clearTimeout(timeout);\n\n var dist = Date.now() - last;\n\n var fn = function fn() {\n last = Date.now();\n func.apply(void 0, args);\n };\n\n if (dist < interval) {\n // we need to delay by the difference between interval and dist\n // for example: if distance is 10 ms and interval is 16 ms,\n // we need to wait an additional 6ms before calling the function)\n if (!immidiateOnly) {\n timeout = setTimeout(fn, interval - dist);\n }\n } else {\n // go!\n fn();\n }\n };\n };\n\n var MAX_FILES_LIMIT = 1000000;\n\n var prevent = function prevent(e) {\n return e.preventDefault();\n };\n\n var create$e = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n // Add id\n var id = root.query('GET_ID');\n if (id) {\n root.element.id = id;\n }\n\n // Add className\n var className = root.query('GET_CLASS_NAME');\n if (className) {\n className\n .split(' ')\n .filter(function(name) {\n return name.length;\n })\n .forEach(function(name) {\n root.element.classList.add(name);\n });\n }\n\n // Field label\n root.ref.label = root.appendChildView(\n root.createChildView(\n dropLabel,\n Object.assign({}, props, {\n translateY: null,\n caption: root.query('GET_LABEL_IDLE'),\n })\n )\n );\n\n // List of items\n root.ref.list = root.appendChildView(\n root.createChildView(listScroller, { translateY: null })\n );\n\n // Background panel\n root.ref.panel = root.appendChildView(root.createChildView(panel, { name: 'panel-root' }));\n\n // Assistant notifies assistive tech when content changes\n root.ref.assistant = root.appendChildView(\n root.createChildView(assistant, Object.assign({}, props))\n );\n\n // Data\n root.ref.data = root.appendChildView(root.createChildView(data, Object.assign({}, props)));\n\n // Measure (tests if fixed height was set)\n // DOCTYPE needs to be set for this to work\n root.ref.measure = createElement$1('div');\n root.ref.measure.style.height = '100%';\n root.element.appendChild(root.ref.measure);\n\n // information on the root height or fixed height status\n root.ref.bounds = null;\n\n // apply initial style properties\n root.query('GET_STYLES')\n .filter(function(style) {\n return !isEmpty(style.value);\n })\n .map(function(_ref2) {\n var name = _ref2.name,\n value = _ref2.value;\n root.element.dataset[name] = value;\n });\n\n // determine if width changed\n root.ref.widthPrevious = null;\n root.ref.widthUpdated = debounce(function() {\n root.ref.updateHistory = [];\n root.dispatch('DID_RESIZE_ROOT');\n }, 250);\n\n // history of updates\n root.ref.previousAspectRatio = null;\n root.ref.updateHistory = [];\n\n // prevent scrolling and zooming on iOS (only if supports pointer events, for then we can enable reorder)\n var canHover = window.matchMedia('(pointer: fine) and (hover: hover)').matches;\n var hasPointerEvents = 'PointerEvent' in window;\n if (root.query('GET_ALLOW_REORDER') && hasPointerEvents && !canHover) {\n root.element.addEventListener('touchmove', prevent, { passive: false });\n root.element.addEventListener('gesturestart', prevent);\n }\n\n // add credits\n var credits = root.query('GET_CREDITS');\n var hasCredits = credits.length === 2;\n if (hasCredits) {\n var frag = document.createElement('a');\n frag.className = 'filepond--credits';\n frag.setAttribute('aria-hidden', 'true');\n frag.href = credits[0];\n frag.tabindex = -1;\n frag.target = '_blank';\n frag.rel = 'noopener noreferrer';\n frag.textContent = credits[1];\n root.element.appendChild(frag);\n root.ref.credits = frag;\n }\n };\n\n var write$9 = function write(_ref3) {\n var root = _ref3.root,\n props = _ref3.props,\n actions = _ref3.actions;\n // route actions\n route$5({ root: root, props: props, actions: actions });\n\n // apply style properties\n actions\n .filter(function(action) {\n return /^DID_SET_STYLE_/.test(action.type);\n })\n .filter(function(action) {\n return !isEmpty(action.data.value);\n })\n .map(function(_ref4) {\n var type = _ref4.type,\n data = _ref4.data;\n var name = toCamels(type.substring(8).toLowerCase(), '_');\n root.element.dataset[name] = data.value;\n root.invalidateLayout();\n });\n\n if (root.rect.element.hidden) return;\n\n if (root.rect.element.width !== root.ref.widthPrevious) {\n root.ref.widthPrevious = root.rect.element.width;\n root.ref.widthUpdated();\n }\n\n // get box bounds, we do this only once\n var bounds = root.ref.bounds;\n if (!bounds) {\n bounds = root.ref.bounds = calculateRootBoundingBoxHeight(root);\n\n // destroy measure element\n root.element.removeChild(root.ref.measure);\n root.ref.measure = null;\n }\n\n // get quick references to various high level parts of the upload tool\n var _root$ref = root.ref,\n hopper = _root$ref.hopper,\n label = _root$ref.label,\n list = _root$ref.list,\n panel = _root$ref.panel;\n\n // sets correct state to hopper scope\n if (hopper) {\n hopper.updateHopperState();\n }\n\n // bool to indicate if we're full or not\n var aspectRatio = root.query('GET_PANEL_ASPECT_RATIO');\n var isMultiItem = root.query('GET_ALLOW_MULTIPLE');\n var totalItems = root.query('GET_TOTAL_ITEMS');\n var maxItems = isMultiItem ? root.query('GET_MAX_FILES') || MAX_FILES_LIMIT : 1;\n var atMaxCapacity = totalItems === maxItems;\n\n // action used to add item\n var addAction = actions.find(function(action) {\n return action.type === 'DID_ADD_ITEM';\n });\n\n // if reached max capacity and we've just reached it\n if (atMaxCapacity && addAction) {\n // get interaction type\n var interactionMethod = addAction.data.interactionMethod;\n\n // hide label\n label.opacity = 0;\n\n if (isMultiItem) {\n label.translateY = -40;\n } else {\n if (interactionMethod === InteractionMethod.API) {\n label.translateX = 40;\n } else if (interactionMethod === InteractionMethod.BROWSE) {\n label.translateY = 40;\n } else {\n label.translateY = 30;\n }\n }\n } else if (!atMaxCapacity) {\n label.opacity = 1;\n label.translateX = 0;\n label.translateY = 0;\n }\n\n var listItemMargin = calculateListItemMargin(root);\n\n var listHeight = calculateListHeight(root);\n\n var labelHeight = label.rect.element.height;\n var currentLabelHeight = !isMultiItem || atMaxCapacity ? 0 : labelHeight;\n\n var listMarginTop = atMaxCapacity ? list.rect.element.marginTop : 0;\n var listMarginBottom = totalItems === 0 ? 0 : list.rect.element.marginBottom;\n\n var visualHeight =\n currentLabelHeight + listMarginTop + listHeight.visual + listMarginBottom;\n var boundsHeight =\n currentLabelHeight + listMarginTop + listHeight.bounds + listMarginBottom;\n\n // link list to label bottom position\n list.translateY =\n Math.max(0, currentLabelHeight - list.rect.element.marginTop) - listItemMargin.top;\n\n if (aspectRatio) {\n // fixed aspect ratio\n\n // calculate height based on width\n var width = root.rect.element.width;\n var height = width * aspectRatio;\n\n // clear history if aspect ratio has changed\n if (aspectRatio !== root.ref.previousAspectRatio) {\n root.ref.previousAspectRatio = aspectRatio;\n root.ref.updateHistory = [];\n }\n\n // remember this width\n var history = root.ref.updateHistory;\n history.push(width);\n\n var MAX_BOUNCES = 2;\n if (history.length > MAX_BOUNCES * 2) {\n var l = history.length;\n var bottom = l - 10;\n var bounces = 0;\n for (var i = l; i >= bottom; i--) {\n if (history[i] === history[i - 2]) {\n bounces++;\n }\n\n if (bounces >= MAX_BOUNCES) {\n // dont adjust height\n return;\n }\n }\n }\n\n // fix height of panel so it adheres to aspect ratio\n panel.scalable = false;\n panel.height = height;\n\n // available height for list\n var listAvailableHeight =\n // the height of the panel minus the label height\n height -\n currentLabelHeight -\n // the room we leave open between the end of the list and the panel bottom\n (listMarginBottom - listItemMargin.bottom) -\n // if we're full we need to leave some room between the top of the panel and the list\n (atMaxCapacity ? listMarginTop : 0);\n\n if (listHeight.visual > listAvailableHeight) {\n list.overflow = listAvailableHeight;\n } else {\n list.overflow = null;\n }\n\n // set container bounds (so pushes siblings downwards)\n root.height = height;\n } else if (bounds.fixedHeight) {\n // fixed height\n\n // fix height of panel\n panel.scalable = false;\n\n // available height for list\n var _listAvailableHeight =\n // the height of the panel minus the label height\n bounds.fixedHeight -\n currentLabelHeight -\n // the room we leave open between the end of the list and the panel bottom\n (listMarginBottom - listItemMargin.bottom) -\n // if we're full we need to leave some room between the top of the panel and the list\n (atMaxCapacity ? listMarginTop : 0);\n\n // set list height\n if (listHeight.visual > _listAvailableHeight) {\n list.overflow = _listAvailableHeight;\n } else {\n list.overflow = null;\n }\n\n // no need to set container bounds as these are handles by CSS fixed height\n } else if (bounds.cappedHeight) {\n // max-height\n\n // not a fixed height panel\n var isCappedHeight = visualHeight >= bounds.cappedHeight;\n var panelHeight = Math.min(bounds.cappedHeight, visualHeight);\n panel.scalable = true;\n panel.height = isCappedHeight\n ? panelHeight\n : panelHeight - listItemMargin.top - listItemMargin.bottom;\n\n // available height for list\n var _listAvailableHeight2 =\n // the height of the panel minus the label height\n panelHeight -\n currentLabelHeight -\n // the room we leave open between the end of the list and the panel bottom\n (listMarginBottom - listItemMargin.bottom) -\n // if we're full we need to leave some room between the top of the panel and the list\n (atMaxCapacity ? listMarginTop : 0);\n\n // set list height (if is overflowing)\n if (visualHeight > bounds.cappedHeight && listHeight.visual > _listAvailableHeight2) {\n list.overflow = _listAvailableHeight2;\n } else {\n list.overflow = null;\n }\n\n // set container bounds (so pushes siblings downwards)\n root.height = Math.min(\n bounds.cappedHeight,\n boundsHeight - listItemMargin.top - listItemMargin.bottom\n );\n } else {\n // flexible height\n\n // not a fixed height panel\n var itemMargin = totalItems > 0 ? listItemMargin.top + listItemMargin.bottom : 0;\n panel.scalable = true;\n panel.height = Math.max(labelHeight, visualHeight - itemMargin);\n\n // set container bounds (so pushes siblings downwards)\n root.height = Math.max(labelHeight, boundsHeight - itemMargin);\n }\n\n // move credits to bottom\n if (root.ref.credits && panel.heightCurrent)\n root.ref.credits.style.transform = 'translateY(' + panel.heightCurrent + 'px)';\n };\n\n var calculateListItemMargin = function calculateListItemMargin(root) {\n var item = root.ref.list.childViews[0].childViews[0];\n return item\n ? {\n top: item.rect.element.marginTop,\n bottom: item.rect.element.marginBottom,\n }\n : {\n top: 0,\n bottom: 0,\n };\n };\n\n var calculateListHeight = function calculateListHeight(root) {\n var visual = 0;\n var bounds = 0;\n\n // get file list reference\n var scrollList = root.ref.list;\n var itemList = scrollList.childViews[0];\n var visibleChildren = itemList.childViews.filter(function(child) {\n return child.rect.element.height;\n });\n var children = root\n .query('GET_ACTIVE_ITEMS')\n .map(function(item) {\n return visibleChildren.find(function(child) {\n return child.id === item.id;\n });\n })\n .filter(function(item) {\n return item;\n });\n\n // no children, done!\n if (children.length === 0) return { visual: visual, bounds: bounds };\n\n var horizontalSpace = itemList.rect.element.width;\n var dragIndex = getItemIndexByPosition(itemList, children, scrollList.dragCoordinates);\n\n var childRect = children[0].rect.element;\n\n var itemVerticalMargin = childRect.marginTop + childRect.marginBottom;\n var itemHorizontalMargin = childRect.marginLeft + childRect.marginRight;\n\n var itemWidth = childRect.width + itemHorizontalMargin;\n var itemHeight = childRect.height + itemVerticalMargin;\n\n var newItem = typeof dragIndex !== 'undefined' && dragIndex >= 0 ? 1 : 0;\n var removedItem = children.find(function(child) {\n return child.markedForRemoval && child.opacity < 0.45;\n })\n ? -1\n : 0;\n var verticalItemCount = children.length + newItem + removedItem;\n var itemsPerRow = getItemsPerRow(horizontalSpace, itemWidth);\n\n // stack\n if (itemsPerRow === 1) {\n children.forEach(function(item) {\n var height = item.rect.element.height + itemVerticalMargin;\n bounds += height;\n visual += height * item.opacity;\n });\n }\n // grid\n else {\n bounds = Math.ceil(verticalItemCount / itemsPerRow) * itemHeight;\n visual = bounds;\n }\n\n return { visual: visual, bounds: bounds };\n };\n\n var calculateRootBoundingBoxHeight = function calculateRootBoundingBoxHeight(root) {\n var height = root.ref.measureHeight || null;\n var cappedHeight = parseInt(root.style.maxHeight, 10) || null;\n var fixedHeight = height === 0 ? null : height;\n\n return {\n cappedHeight: cappedHeight,\n fixedHeight: fixedHeight,\n };\n };\n\n var exceedsMaxFiles = function exceedsMaxFiles(root, items) {\n var allowReplace = root.query('GET_ALLOW_REPLACE');\n var allowMultiple = root.query('GET_ALLOW_MULTIPLE');\n var totalItems = root.query('GET_TOTAL_ITEMS');\n var maxItems = root.query('GET_MAX_FILES');\n\n // total amount of items being dragged\n var totalBrowseItems = items.length;\n\n // if does not allow multiple items and dragging more than one item\n if (!allowMultiple && totalBrowseItems > 1) {\n root.dispatch('DID_THROW_MAX_FILES', {\n source: items,\n error: createResponse('warning', 0, 'Max files'),\n });\n\n return true;\n }\n\n // limit max items to one if not allowed to drop multiple items\n maxItems = allowMultiple ? maxItems : 1;\n\n if (!allowMultiple && allowReplace) {\n // There is only one item, so there is room to replace or add an item\n return false;\n }\n\n // no more room?\n var hasMaxItems = isInt(maxItems);\n if (hasMaxItems && totalItems + totalBrowseItems > maxItems) {\n root.dispatch('DID_THROW_MAX_FILES', {\n source: items,\n error: createResponse('warning', 0, 'Max files'),\n });\n\n return true;\n }\n\n return false;\n };\n\n var getDragIndex = function getDragIndex(list, children, position) {\n var itemList = list.childViews[0];\n return getItemIndexByPosition(itemList, children, {\n left: position.scopeLeft - itemList.rect.element.left,\n top:\n position.scopeTop -\n (list.rect.outer.top + list.rect.element.marginTop + list.rect.element.scrollTop),\n });\n };\n\n /**\n * Enable or disable file drop functionality\n */\n var toggleDrop = function toggleDrop(root) {\n var isAllowed = root.query('GET_ALLOW_DROP');\n var isDisabled = root.query('GET_DISABLED');\n var enabled = isAllowed && !isDisabled;\n if (enabled && !root.ref.hopper) {\n var hopper = createHopper(\n root.element,\n function(items) {\n // allow quick validation of dropped items\n var beforeDropFile =\n root.query('GET_BEFORE_DROP_FILE') ||\n function() {\n return true;\n };\n\n // all items should be validated by all filters as valid\n var dropValidation = root.query('GET_DROP_VALIDATION');\n return dropValidation\n ? items.every(function(item) {\n return (\n applyFilters('ALLOW_HOPPER_ITEM', item, {\n query: root.query,\n }).every(function(result) {\n return result === true;\n }) && beforeDropFile(item)\n );\n })\n : true;\n },\n {\n filterItems: function filterItems(items) {\n var ignoredFiles = root.query('GET_IGNORED_FILES');\n return items.filter(function(item) {\n if (isFile(item)) {\n return !ignoredFiles.includes(item.name.toLowerCase());\n }\n return true;\n });\n },\n catchesDropsOnPage: root.query('GET_DROP_ON_PAGE'),\n requiresDropOnElement: root.query('GET_DROP_ON_ELEMENT'),\n }\n );\n\n hopper.onload = function(items, position) {\n // get item children elements and sort based on list sort\n var list = root.ref.list.childViews[0];\n var visibleChildren = list.childViews.filter(function(child) {\n return child.rect.element.height;\n });\n var children = root\n .query('GET_ACTIVE_ITEMS')\n .map(function(item) {\n return visibleChildren.find(function(child) {\n return child.id === item.id;\n });\n })\n .filter(function(item) {\n return item;\n });\n\n applyFilterChain('ADD_ITEMS', items, { dispatch: root.dispatch }).then(function(\n queue\n ) {\n // these files don't fit so stop here\n if (exceedsMaxFiles(root, queue)) return false;\n\n // go\n root.dispatch('ADD_ITEMS', {\n items: queue,\n index: getDragIndex(root.ref.list, children, position),\n interactionMethod: InteractionMethod.DROP,\n });\n });\n\n root.dispatch('DID_DROP', { position: position });\n\n root.dispatch('DID_END_DRAG', { position: position });\n };\n\n hopper.ondragstart = function(position) {\n root.dispatch('DID_START_DRAG', { position: position });\n };\n\n hopper.ondrag = debounce(function(position) {\n root.dispatch('DID_DRAG', { position: position });\n });\n\n hopper.ondragend = function(position) {\n root.dispatch('DID_END_DRAG', { position: position });\n };\n\n root.ref.hopper = hopper;\n\n root.ref.drip = root.appendChildView(root.createChildView(drip));\n } else if (!enabled && root.ref.hopper) {\n root.ref.hopper.destroy();\n root.ref.hopper = null;\n root.removeChildView(root.ref.drip);\n }\n };\n\n /**\n * Enable or disable browse functionality\n */\n var toggleBrowse = function toggleBrowse(root, props) {\n var isAllowed = root.query('GET_ALLOW_BROWSE');\n var isDisabled = root.query('GET_DISABLED');\n var enabled = isAllowed && !isDisabled;\n if (enabled && !root.ref.browser) {\n root.ref.browser = root.appendChildView(\n root.createChildView(\n browser,\n Object.assign({}, props, {\n onload: function onload(items) {\n applyFilterChain('ADD_ITEMS', items, {\n dispatch: root.dispatch,\n }).then(function(queue) {\n // these files don't fit so stop here\n if (exceedsMaxFiles(root, queue)) return false;\n\n // add items!\n root.dispatch('ADD_ITEMS', {\n items: queue,\n index: -1,\n interactionMethod: InteractionMethod.BROWSE,\n });\n });\n },\n })\n ),\n\n 0\n );\n } else if (!enabled && root.ref.browser) {\n root.removeChildView(root.ref.browser);\n root.ref.browser = null;\n }\n };\n\n /**\n * Enable or disable paste functionality\n */\n var togglePaste = function togglePaste(root) {\n var isAllowed = root.query('GET_ALLOW_PASTE');\n var isDisabled = root.query('GET_DISABLED');\n var enabled = isAllowed && !isDisabled;\n if (enabled && !root.ref.paster) {\n root.ref.paster = createPaster();\n root.ref.paster.onload = function(items) {\n applyFilterChain('ADD_ITEMS', items, { dispatch: root.dispatch }).then(function(\n queue\n ) {\n // these files don't fit so stop here\n if (exceedsMaxFiles(root, queue)) return false;\n\n // add items!\n root.dispatch('ADD_ITEMS', {\n items: queue,\n index: -1,\n interactionMethod: InteractionMethod.PASTE,\n });\n });\n };\n } else if (!enabled && root.ref.paster) {\n root.ref.paster.destroy();\n root.ref.paster = null;\n }\n };\n\n /**\n * Route actions\n */\n var route$5 = createRoute({\n DID_SET_ALLOW_BROWSE: function DID_SET_ALLOW_BROWSE(_ref5) {\n var root = _ref5.root,\n props = _ref5.props;\n toggleBrowse(root, props);\n },\n DID_SET_ALLOW_DROP: function DID_SET_ALLOW_DROP(_ref6) {\n var root = _ref6.root;\n toggleDrop(root);\n },\n DID_SET_ALLOW_PASTE: function DID_SET_ALLOW_PASTE(_ref7) {\n var root = _ref7.root;\n togglePaste(root);\n },\n DID_SET_DISABLED: function DID_SET_DISABLED(_ref8) {\n var root = _ref8.root,\n props = _ref8.props;\n toggleDrop(root);\n togglePaste(root);\n toggleBrowse(root, props);\n var isDisabled = root.query('GET_DISABLED');\n if (isDisabled) {\n root.element.dataset.disabled = 'disabled';\n } else {\n // delete root.element.dataset.disabled; <= this does not work on iOS 10\n root.element.removeAttribute('data-disabled');\n }\n },\n });\n\n var root = createView({\n name: 'root',\n read: function read(_ref9) {\n var root = _ref9.root;\n if (root.ref.measure) {\n root.ref.measureHeight = root.ref.measure.offsetHeight;\n }\n },\n create: create$e,\n write: write$9,\n destroy: function destroy(_ref10) {\n var root = _ref10.root;\n if (root.ref.paster) {\n root.ref.paster.destroy();\n }\n if (root.ref.hopper) {\n root.ref.hopper.destroy();\n }\n root.element.removeEventListener('touchmove', prevent);\n root.element.removeEventListener('gesturestart', prevent);\n },\n mixins: {\n styles: ['height'],\n },\n });\n\n // creates the app\n var createApp = function createApp() {\n var initialOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // let element\n var originalElement = null;\n\n // get default options\n var defaultOptions = getOptions();\n\n // create the data store, this will contain all our app info\n var store = createStore(\n // initial state (should be serializable)\n createInitialState(defaultOptions),\n\n // queries\n [queries, createOptionQueries(defaultOptions)],\n\n // action handlers\n [actions, createOptionActions(defaultOptions)]\n );\n\n // set initial options\n store.dispatch('SET_OPTIONS', { options: initialOptions });\n\n // kick thread if visibility changes\n var visibilityHandler = function visibilityHandler() {\n if (document.hidden) return;\n store.dispatch('KICK');\n };\n document.addEventListener('visibilitychange', visibilityHandler);\n\n // re-render on window resize start and finish\n var resizeDoneTimer = null;\n var isResizing = false;\n var isResizingHorizontally = false;\n var initialWindowWidth = null;\n var currentWindowWidth = null;\n var resizeHandler = function resizeHandler() {\n if (!isResizing) {\n isResizing = true;\n }\n clearTimeout(resizeDoneTimer);\n resizeDoneTimer = setTimeout(function() {\n isResizing = false;\n initialWindowWidth = null;\n currentWindowWidth = null;\n if (isResizingHorizontally) {\n isResizingHorizontally = false;\n store.dispatch('DID_STOP_RESIZE');\n }\n }, 500);\n };\n window.addEventListener('resize', resizeHandler);\n\n // render initial view\n var view = root(store, { id: getUniqueId() });\n\n //\n // PRIVATE API -------------------------------------------------------------------------------------\n //\n var isResting = false;\n var isHidden = false;\n\n var readWriteApi = {\n // necessary for update loop\n\n /**\n * Reads from dom (never call manually)\n * @private\n */\n _read: function _read() {\n // test if we're resizing horizontally\n // TODO: see if we can optimize this by measuring root rect\n if (isResizing) {\n currentWindowWidth = window.innerWidth;\n if (!initialWindowWidth) {\n initialWindowWidth = currentWindowWidth;\n }\n\n if (!isResizingHorizontally && currentWindowWidth !== initialWindowWidth) {\n store.dispatch('DID_START_RESIZE');\n isResizingHorizontally = true;\n }\n }\n\n if (isHidden && isResting) {\n // test if is no longer hidden\n isResting = view.element.offsetParent === null;\n }\n\n // if resting, no need to read as numbers will still all be correct\n if (isResting) return;\n\n // read view data\n view._read();\n\n // if is hidden we need to know so we exit rest mode when revealed\n isHidden = view.rect.element.hidden;\n },\n\n /**\n * Writes to dom (never call manually)\n * @private\n */\n _write: function _write(ts) {\n // get all actions from store\n var actions = store\n .processActionQueue()\n\n // filter out set actions (these will automatically trigger DID_SET)\n .filter(function(action) {\n return !/^SET_/.test(action.type);\n });\n\n // if was idling and no actions stop here\n if (isResting && !actions.length) return;\n\n // some actions might trigger events\n routeActionsToEvents(actions);\n\n // update the view\n isResting = view._write(ts, actions, isResizingHorizontally);\n\n // will clean up all archived items\n removeReleasedItems(store.query('GET_ITEMS'));\n\n // now idling\n if (isResting) {\n store.processDispatchQueue();\n }\n },\n };\n\n //\n // EXPOSE EVENTS -------------------------------------------------------------------------------------\n //\n var createEvent = function createEvent(name) {\n return function(data) {\n // create default event\n var event = {\n type: name,\n };\n\n // no data to add\n if (!data) {\n return event;\n }\n\n // copy relevant props\n if (data.hasOwnProperty('error')) {\n event.error = data.error ? Object.assign({}, data.error) : null;\n }\n\n if (data.status) {\n event.status = Object.assign({}, data.status);\n }\n\n if (data.file) {\n event.output = data.file;\n }\n\n // only source is available, else add item if possible\n if (data.source) {\n event.file = data.source;\n } else if (data.item || data.id) {\n var item = data.item ? data.item : store.query('GET_ITEM', data.id);\n event.file = item ? createItemAPI(item) : null;\n }\n\n // map all items in a possible items array\n if (data.items) {\n event.items = data.items.map(createItemAPI);\n }\n\n // if this is a progress event add the progress amount\n if (/progress/.test(name)) {\n event.progress = data.progress;\n }\n\n // copy relevant props\n if (data.hasOwnProperty('origin') && data.hasOwnProperty('target')) {\n event.origin = data.origin;\n event.target = data.target;\n }\n\n return event;\n };\n };\n\n var eventRoutes = {\n DID_DESTROY: createEvent('destroy'),\n\n DID_INIT: createEvent('init'),\n\n DID_THROW_MAX_FILES: createEvent('warning'),\n\n DID_INIT_ITEM: createEvent('initfile'),\n DID_START_ITEM_LOAD: createEvent('addfilestart'),\n DID_UPDATE_ITEM_LOAD_PROGRESS: createEvent('addfileprogress'),\n DID_LOAD_ITEM: createEvent('addfile'),\n\n DID_THROW_ITEM_INVALID: [createEvent('error'), createEvent('addfile')],\n\n DID_THROW_ITEM_LOAD_ERROR: [createEvent('error'), createEvent('addfile')],\n\n DID_THROW_ITEM_REMOVE_ERROR: [createEvent('error'), createEvent('removefile')],\n\n DID_PREPARE_OUTPUT: createEvent('preparefile'),\n\n DID_START_ITEM_PROCESSING: createEvent('processfilestart'),\n DID_UPDATE_ITEM_PROCESS_PROGRESS: createEvent('processfileprogress'),\n DID_ABORT_ITEM_PROCESSING: createEvent('processfileabort'),\n DID_COMPLETE_ITEM_PROCESSING: createEvent('processfile'),\n DID_COMPLETE_ITEM_PROCESSING_ALL: createEvent('processfiles'),\n DID_REVERT_ITEM_PROCESSING: createEvent('processfilerevert'),\n\n DID_THROW_ITEM_PROCESSING_ERROR: [createEvent('error'), createEvent('processfile')],\n\n DID_REMOVE_ITEM: createEvent('removefile'),\n\n DID_UPDATE_ITEMS: createEvent('updatefiles'),\n\n DID_ACTIVATE_ITEM: createEvent('activatefile'),\n\n DID_REORDER_ITEMS: createEvent('reorderfiles'),\n };\n\n var exposeEvent = function exposeEvent(event) {\n // create event object to be dispatched\n var detail = Object.assign({ pond: exports }, event);\n delete detail.type;\n view.element.dispatchEvent(\n new CustomEvent('FilePond:' + event.type, {\n // event info\n detail: detail,\n\n // event behaviour\n bubbles: true,\n cancelable: true,\n composed: true, // triggers listeners outside of shadow root\n })\n );\n\n // event object to params used for `on()` event handlers and callbacks `oninit()`\n var params = [];\n\n // if is possible error event, make it the first param\n if (event.hasOwnProperty('error')) {\n params.push(event.error);\n }\n\n // file is always section\n if (event.hasOwnProperty('file')) {\n params.push(event.file);\n }\n\n // append other props\n var filtered = ['type', 'error', 'file'];\n Object.keys(event)\n .filter(function(key) {\n return !filtered.includes(key);\n })\n .forEach(function(key) {\n return params.push(event[key]);\n });\n\n // on(type, () => { })\n exports.fire.apply(exports, [event.type].concat(params));\n\n // oninit = () => {}\n var handler = store.query('GET_ON' + event.type.toUpperCase());\n if (handler) {\n handler.apply(void 0, params);\n }\n };\n\n var routeActionsToEvents = function routeActionsToEvents(actions) {\n if (!actions.length) return;\n actions\n .filter(function(action) {\n return eventRoutes[action.type];\n })\n .forEach(function(action) {\n var routes = eventRoutes[action.type];\n (Array.isArray(routes) ? routes : [routes]).forEach(function(route) {\n // this isn't fantastic, but because of the stacking of settimeouts plugins can handle the did_load before the did_init\n if (action.type === 'DID_INIT_ITEM') {\n exposeEvent(route(action.data));\n } else {\n setTimeout(function() {\n exposeEvent(route(action.data));\n }, 0);\n }\n });\n });\n };\n\n //\n // PUBLIC API -------------------------------------------------------------------------------------\n //\n var setOptions = function setOptions(options) {\n return store.dispatch('SET_OPTIONS', { options: options });\n };\n\n var getFile = function getFile(query) {\n return store.query('GET_ACTIVE_ITEM', query);\n };\n\n var prepareFile = function prepareFile(query) {\n return new Promise(function(resolve, reject) {\n store.dispatch('REQUEST_ITEM_PREPARE', {\n query: query,\n success: function success(item) {\n resolve(item);\n },\n failure: function failure(error) {\n reject(error);\n },\n });\n });\n };\n\n var addFile = function addFile(source) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return new Promise(function(resolve, reject) {\n addFiles([{ source: source, options: options }], { index: options.index })\n .then(function(items) {\n return resolve(items && items[0]);\n })\n .catch(reject);\n });\n };\n\n var isFilePondFile = function isFilePondFile(obj) {\n return obj.file && obj.id;\n };\n\n var removeFile = function removeFile(query, options) {\n // if only passed options\n if (typeof query === 'object' && !isFilePondFile(query) && !options) {\n options = query;\n query = undefined;\n }\n\n // request item removal\n store.dispatch('REMOVE_ITEM', Object.assign({}, options, { query: query }));\n\n // see if item has been removed\n return store.query('GET_ACTIVE_ITEM', query) === null;\n };\n\n var addFiles = function addFiles() {\n for (\n var _len = arguments.length, args = new Array(_len), _key = 0;\n _key < _len;\n _key++\n ) {\n args[_key] = arguments[_key];\n }\n return new Promise(function(resolve, reject) {\n var sources = [];\n var options = {};\n\n // user passed a sources array\n if (isArray(args[0])) {\n sources.push.apply(sources, args[0]);\n Object.assign(options, args[1] || {});\n } else {\n // user passed sources as arguments, last one might be options object\n var lastArgument = args[args.length - 1];\n if (typeof lastArgument === 'object' && !(lastArgument instanceof Blob)) {\n Object.assign(options, args.pop());\n }\n\n // add rest to sources\n sources.push.apply(sources, args);\n }\n\n store.dispatch('ADD_ITEMS', {\n items: sources,\n index: options.index,\n interactionMethod: InteractionMethod.API,\n success: resolve,\n failure: reject,\n });\n });\n };\n\n var getFiles = function getFiles() {\n return store.query('GET_ACTIVE_ITEMS');\n };\n\n var processFile = function processFile(query) {\n return new Promise(function(resolve, reject) {\n store.dispatch('REQUEST_ITEM_PROCESSING', {\n query: query,\n success: function success(item) {\n resolve(item);\n },\n failure: function failure(error) {\n reject(error);\n },\n });\n });\n };\n\n var prepareFiles = function prepareFiles() {\n for (\n var _len2 = arguments.length, args = new Array(_len2), _key2 = 0;\n _key2 < _len2;\n _key2++\n ) {\n args[_key2] = arguments[_key2];\n }\n var queries = Array.isArray(args[0]) ? args[0] : args;\n var items = queries.length ? queries : getFiles();\n return Promise.all(items.map(prepareFile));\n };\n\n var processFiles = function processFiles() {\n for (\n var _len3 = arguments.length, args = new Array(_len3), _key3 = 0;\n _key3 < _len3;\n _key3++\n ) {\n args[_key3] = arguments[_key3];\n }\n var queries = Array.isArray(args[0]) ? args[0] : args;\n if (!queries.length) {\n var files = getFiles().filter(function(item) {\n return (\n !(item.status === ItemStatus.IDLE && item.origin === FileOrigin.LOCAL) &&\n item.status !== ItemStatus.PROCESSING &&\n item.status !== ItemStatus.PROCESSING_COMPLETE &&\n item.status !== ItemStatus.PROCESSING_REVERT_ERROR\n );\n });\n\n return Promise.all(files.map(processFile));\n }\n return Promise.all(queries.map(processFile));\n };\n\n var removeFiles = function removeFiles() {\n for (\n var _len4 = arguments.length, args = new Array(_len4), _key4 = 0;\n _key4 < _len4;\n _key4++\n ) {\n args[_key4] = arguments[_key4];\n }\n\n var queries = Array.isArray(args[0]) ? args[0] : args;\n\n var options;\n if (typeof queries[queries.length - 1] === 'object') {\n options = queries.pop();\n } else if (Array.isArray(args[0])) {\n options = args[1];\n }\n\n var files = getFiles();\n\n if (!queries.length)\n return Promise.all(\n files.map(function(file) {\n return removeFile(file, options);\n })\n );\n\n // when removing by index the indexes shift after each file removal so we need to convert indexes to ids\n var mappedQueries = queries\n .map(function(query) {\n return isNumber(query) ? (files[query] ? files[query].id : null) : query;\n })\n .filter(function(query) {\n return query;\n });\n\n return mappedQueries.map(function(q) {\n return removeFile(q, options);\n });\n };\n\n var exports = Object.assign(\n {},\n\n on(),\n {},\n\n readWriteApi,\n {},\n\n createOptionAPI(store, defaultOptions),\n {\n /**\n * Override options defined in options object\n * @param options\n */\n setOptions: setOptions,\n\n /**\n * Load the given file\n * @param source - the source of the file (either a File, base64 data uri or url)\n * @param options - object, { index: 0 }\n */\n addFile: addFile,\n\n /**\n * Load the given files\n * @param sources - the sources of the files to load\n * @param options - object, { index: 0 }\n */\n addFiles: addFiles,\n\n /**\n * Returns the file objects matching the given query\n * @param query { string, number, null }\n */\n getFile: getFile,\n\n /**\n * Upload file with given name\n * @param query { string, number, null }\n */\n processFile: processFile,\n\n /**\n * Request prepare output for file with given name\n * @param query { string, number, null }\n */\n prepareFile: prepareFile,\n\n /**\n * Removes a file by its name\n * @param query { string, number, null }\n */\n removeFile: removeFile,\n\n /**\n * Moves a file to a new location in the files list\n */\n moveFile: function moveFile(query, index) {\n return store.dispatch('MOVE_ITEM', { query: query, index: index });\n },\n\n /**\n * Returns all files (wrapped in public api)\n */\n getFiles: getFiles,\n\n /**\n * Starts uploading all files\n */\n processFiles: processFiles,\n\n /**\n * Clears all files from the files list\n */\n removeFiles: removeFiles,\n\n /**\n * Starts preparing output of all files\n */\n prepareFiles: prepareFiles,\n\n /**\n * Sort list of files\n */\n sort: function sort(compare) {\n return store.dispatch('SORT', { compare: compare });\n },\n\n /**\n * Browse the file system for a file\n */\n browse: function browse() {\n // needs to be trigger directly as user action needs to be traceable (is not traceable in requestAnimationFrame)\n var input = view.element.querySelector('input[type=file]');\n if (input) {\n input.click();\n }\n },\n\n /**\n * Destroys the app\n */\n destroy: function destroy() {\n // request destruction\n exports.fire('destroy', view.element);\n\n // stop active processes (file uploads, fetches, stuff like that)\n // loop over items and depending on states call abort for ongoing processes\n store.dispatch('ABORT_ALL');\n\n // destroy view\n view._destroy();\n\n // stop listening to resize\n window.removeEventListener('resize', resizeHandler);\n\n // stop listening to the visiblitychange event\n document.removeEventListener('visibilitychange', visibilityHandler);\n\n // dispatch destroy\n store.dispatch('DID_DESTROY');\n },\n\n /**\n * Inserts the plugin before the target element\n */\n insertBefore: function insertBefore$1(element) {\n return insertBefore(view.element, element);\n },\n\n /**\n * Inserts the plugin after the target element\n */\n insertAfter: function insertAfter$1(element) {\n return insertAfter(view.element, element);\n },\n\n /**\n * Appends the plugin to the target element\n */\n appendTo: function appendTo(element) {\n return element.appendChild(view.element);\n },\n\n /**\n * Replaces an element with the app\n */\n replaceElement: function replaceElement(element) {\n // insert the app before the element\n insertBefore(view.element, element);\n\n // remove the original element\n element.parentNode.removeChild(element);\n\n // remember original element\n originalElement = element;\n },\n\n /**\n * Restores the original element\n */\n restoreElement: function restoreElement() {\n if (!originalElement) {\n return; // no element to restore\n }\n\n // restore original element\n insertAfter(originalElement, view.element);\n\n // remove our element\n view.element.parentNode.removeChild(view.element);\n\n // remove reference\n originalElement = null;\n },\n\n /**\n * Returns true if the app root is attached to given element\n * @param element\n */\n isAttachedTo: function isAttachedTo(element) {\n return view.element === element || originalElement === element;\n },\n\n /**\n * Returns the root element\n */\n element: {\n get: function get() {\n return view.element;\n },\n },\n\n /**\n * Returns the current pond status\n */\n status: {\n get: function get() {\n return store.query('GET_STATUS');\n },\n },\n }\n );\n\n // Done!\n store.dispatch('DID_INIT');\n\n // create actual api object\n return createObject(exports);\n };\n\n var createAppObject = function createAppObject() {\n var customOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // default options\n var defaultOptions = {};\n forin(getOptions(), function(key, value) {\n defaultOptions[key] = value[0];\n });\n\n // set app options\n var app = createApp(\n Object.assign(\n {},\n\n defaultOptions,\n {},\n\n customOptions\n )\n );\n\n // return the plugin instance\n return app;\n };\n\n var lowerCaseFirstLetter = function lowerCaseFirstLetter(string) {\n return string.charAt(0).toLowerCase() + string.slice(1);\n };\n\n var attributeNameToPropertyName = function attributeNameToPropertyName(attributeName) {\n return toCamels(attributeName.replace(/^data-/, ''));\n };\n\n var mapObject = function mapObject(object, propertyMap) {\n // remove unwanted\n forin(propertyMap, function(selector, mapping) {\n forin(object, function(property, value) {\n // create regexp shortcut\n var selectorRegExp = new RegExp(selector);\n\n // tests if\n var matches = selectorRegExp.test(property);\n\n // no match, skip\n if (!matches) {\n return;\n }\n\n // if there's a mapping, the original property is always removed\n delete object[property];\n\n // should only remove, we done!\n if (mapping === false) {\n return;\n }\n\n // move value to new property\n if (isString(mapping)) {\n object[mapping] = value;\n return;\n }\n\n // move to group\n var group = mapping.group;\n if (isObject(mapping) && !object[group]) {\n object[group] = {};\n }\n\n object[group][lowerCaseFirstLetter(property.replace(selectorRegExp, ''))] = value;\n });\n\n // do submapping\n if (mapping.mapping) {\n mapObject(object[mapping.group], mapping.mapping);\n }\n });\n };\n\n var getAttributesAsObject = function getAttributesAsObject(node) {\n var attributeMapping =\n arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n // turn attributes into object\n var attributes = [];\n forin(node.attributes, function(index) {\n attributes.push(node.attributes[index]);\n });\n\n var output = attributes\n .filter(function(attribute) {\n return attribute.name;\n })\n .reduce(function(obj, attribute) {\n var value = attr(node, attribute.name);\n\n obj[attributeNameToPropertyName(attribute.name)] =\n value === attribute.name ? true : value;\n return obj;\n }, {});\n\n // do mapping of object properties\n mapObject(output, attributeMapping);\n\n return output;\n };\n\n var createAppAtElement = function createAppAtElement(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n // how attributes of the input element are mapped to the options for the plugin\n var attributeMapping = {\n // translate to other name\n '^class$': 'className',\n '^multiple$': 'allowMultiple',\n '^capture$': 'captureMethod',\n '^webkitdirectory$': 'allowDirectoriesOnly',\n\n // group under single property\n '^server': {\n group: 'server',\n mapping: {\n '^process': {\n group: 'process',\n },\n\n '^revert': {\n group: 'revert',\n },\n\n '^fetch': {\n group: 'fetch',\n },\n\n '^restore': {\n group: 'restore',\n },\n\n '^load': {\n group: 'load',\n },\n },\n },\n\n // don't include in object\n '^type$': false,\n '^files$': false,\n };\n\n // add additional option translators\n applyFilters('SET_ATTRIBUTE_TO_OPTION_MAP', attributeMapping);\n\n // create final options object by setting options object and then overriding options supplied on element\n var mergedOptions = Object.assign({}, options);\n\n var attributeOptions = getAttributesAsObject(\n element.nodeName === 'FIELDSET' ? element.querySelector('input[type=file]') : element,\n attributeMapping\n );\n\n // merge with options object\n Object.keys(attributeOptions).forEach(function(key) {\n if (isObject(attributeOptions[key])) {\n if (!isObject(mergedOptions[key])) {\n mergedOptions[key] = {};\n }\n Object.assign(mergedOptions[key], attributeOptions[key]);\n } else {\n mergedOptions[key] = attributeOptions[key];\n }\n });\n\n // if parent is a fieldset, get files from parent by selecting all input fields that are not file upload fields\n // these will then be automatically set to the initial files\n mergedOptions.files = (options.files || []).concat(\n Array.from(element.querySelectorAll('input:not([type=file])')).map(function(input) {\n return {\n source: input.value,\n options: {\n type: input.dataset.type,\n },\n };\n })\n );\n\n // build plugin\n var app = createAppObject(mergedOptions);\n\n // add already selected files\n if (element.files) {\n Array.from(element.files).forEach(function(file) {\n app.addFile(file);\n });\n }\n\n // replace the target element\n app.replaceElement(element);\n\n // expose\n return app;\n };\n\n // if an element is passed, we create the instance at that element, if not, we just create an up object\n var createApp$1 = function createApp() {\n return isNode(arguments.length <= 0 ? undefined : arguments[0])\n ? createAppAtElement.apply(void 0, arguments)\n : createAppObject.apply(void 0, arguments);\n };\n\n var PRIVATE_METHODS = ['fire', '_read', '_write'];\n\n var createAppAPI = function createAppAPI(app) {\n var api = {};\n\n copyObjectPropertiesToObject(app, api, PRIVATE_METHODS);\n\n return api;\n };\n\n /**\n * Replaces placeholders in given string with replacements\n * @param string - \"Foo {bar}\"\"\n * @param replacements - { \"bar\": 10 }\n */\n var replaceInString = function replaceInString(string, replacements) {\n return string.replace(/(?:{([a-zA-Z]+)})/g, function(match, group) {\n return replacements[group];\n });\n };\n\n var createWorker = function createWorker(fn) {\n var workerBlob = new Blob(['(', fn.toString(), ')()'], {\n type: 'application/javascript',\n });\n\n var workerURL = URL.createObjectURL(workerBlob);\n var worker = new Worker(workerURL);\n\n return {\n transfer: function transfer(message, cb) {},\n post: function post(message, cb, transferList) {\n var id = getUniqueId();\n\n worker.onmessage = function(e) {\n if (e.data.id === id) {\n cb(e.data.message);\n }\n };\n\n worker.postMessage(\n {\n id: id,\n message: message,\n },\n\n transferList\n );\n },\n terminate: function terminate() {\n worker.terminate();\n URL.revokeObjectURL(workerURL);\n },\n };\n };\n\n var loadImage = function loadImage(url) {\n return new Promise(function(resolve, reject) {\n var img = new Image();\n img.onload = function() {\n resolve(img);\n };\n img.onerror = function(e) {\n reject(e);\n };\n img.src = url;\n });\n };\n\n var renameFile = function renameFile(file, name) {\n var renamedFile = file.slice(0, file.size, file.type);\n renamedFile.lastModifiedDate = file.lastModifiedDate;\n renamedFile.name = name;\n return renamedFile;\n };\n\n var copyFile = function copyFile(file) {\n return renameFile(file, file.name);\n };\n\n // already registered plugins (can't register twice)\n var registeredPlugins = [];\n\n // pass utils to plugin\n var createAppPlugin = function createAppPlugin(plugin) {\n // already registered\n if (registeredPlugins.includes(plugin)) {\n return;\n }\n\n // remember this plugin\n registeredPlugins.push(plugin);\n\n // setup!\n var pluginOutline = plugin({\n addFilter: addFilter,\n utils: {\n Type: Type,\n forin: forin,\n isString: isString,\n isFile: isFile,\n toNaturalFileSize: toNaturalFileSize,\n replaceInString: replaceInString,\n getExtensionFromFilename: getExtensionFromFilename,\n getFilenameWithoutExtension: getFilenameWithoutExtension,\n guesstimateMimeType: guesstimateMimeType,\n getFileFromBlob: getFileFromBlob,\n getFilenameFromURL: getFilenameFromURL,\n createRoute: createRoute,\n createWorker: createWorker,\n createView: createView,\n createItemAPI: createItemAPI,\n loadImage: loadImage,\n copyFile: copyFile,\n renameFile: renameFile,\n createBlob: createBlob,\n applyFilterChain: applyFilterChain,\n text: text,\n getNumericAspectRatioFromString: getNumericAspectRatioFromString,\n },\n\n views: {\n fileActionButton: fileActionButton,\n },\n });\n\n // add plugin options to default options\n extendDefaultOptions(pluginOutline.options);\n };\n\n // feature detection used by supported() method\n var isOperaMini = function isOperaMini() {\n return Object.prototype.toString.call(window.operamini) === '[object OperaMini]';\n };\n var hasPromises = function hasPromises() {\n return 'Promise' in window;\n };\n var hasBlobSlice = function hasBlobSlice() {\n return 'slice' in Blob.prototype;\n };\n var hasCreateObjectURL = function hasCreateObjectURL() {\n return 'URL' in window && 'createObjectURL' in window.URL;\n };\n var hasVisibility = function hasVisibility() {\n return 'visibilityState' in document;\n };\n var hasTiming = function hasTiming() {\n return 'performance' in window;\n }; // iOS 8.x\n var hasCSSSupports = function hasCSSSupports() {\n return 'supports' in (window.CSS || {});\n }; // use to detect Safari 9+\n var isIE11 = function isIE11() {\n return /MSIE|Trident/.test(window.navigator.userAgent);\n };\n\n var supported = (function() {\n // Runs immediately and then remembers result for subsequent calls\n var isSupported =\n // Has to be a browser\n isBrowser() &&\n // Can't run on Opera Mini due to lack of everything\n !isOperaMini() &&\n // Require these APIs to feature detect a modern browser\n hasVisibility() &&\n hasPromises() &&\n hasBlobSlice() &&\n hasCreateObjectURL() &&\n hasTiming() &&\n // doesn't need CSSSupports but is a good way to detect Safari 9+ (we do want to support IE11 though)\n (hasCSSSupports() || isIE11());\n\n return function() {\n return isSupported;\n };\n })();\n\n /**\n * Plugin internal state (over all instances)\n */\n var state = {\n // active app instances, used to redraw the apps and to find the later\n apps: [],\n };\n\n // plugin name\n var name = 'filepond';\n\n /**\n * Public Plugin methods\n */\n var fn = function fn() {};\n exports.Status = {};\n exports.FileStatus = {};\n exports.FileOrigin = {};\n exports.OptionTypes = {};\n exports.create = fn;\n exports.destroy = fn;\n exports.parse = fn;\n exports.find = fn;\n exports.registerPlugin = fn;\n exports.getOptions = fn;\n exports.setOptions = fn;\n\n // if not supported, no API\n if (supported()) {\n // start painter and fire load event\n createPainter(\n function() {\n state.apps.forEach(function(app) {\n return app._read();\n });\n },\n function(ts) {\n state.apps.forEach(function(app) {\n return app._write(ts);\n });\n }\n );\n\n // fire loaded event so we know when FilePond is available\n var dispatch = function dispatch() {\n // let others know we have area ready\n document.dispatchEvent(\n new CustomEvent('FilePond:loaded', {\n detail: {\n supported: supported,\n create: exports.create,\n destroy: exports.destroy,\n parse: exports.parse,\n find: exports.find,\n registerPlugin: exports.registerPlugin,\n setOptions: exports.setOptions,\n },\n })\n );\n\n // clean up event\n document.removeEventListener('DOMContentLoaded', dispatch);\n };\n\n if (document.readyState !== 'loading') {\n // move to back of execution queue, FilePond should have been exported by then\n setTimeout(function() {\n return dispatch();\n }, 0);\n } else {\n document.addEventListener('DOMContentLoaded', dispatch);\n }\n\n // updates the OptionTypes object based on the current options\n var updateOptionTypes = function updateOptionTypes() {\n return forin(getOptions(), function(key, value) {\n exports.OptionTypes[key] = value[1];\n });\n };\n\n exports.Status = Object.assign({}, Status);\n exports.FileOrigin = Object.assign({}, FileOrigin);\n exports.FileStatus = Object.assign({}, ItemStatus);\n\n exports.OptionTypes = {};\n updateOptionTypes();\n\n // create method, creates apps and adds them to the app array\n exports.create = function create() {\n var app = createApp$1.apply(void 0, arguments);\n app.on('destroy', exports.destroy);\n state.apps.push(app);\n return createAppAPI(app);\n };\n\n // destroys apps and removes them from the app array\n exports.destroy = function destroy(hook) {\n // returns true if the app was destroyed successfully\n var indexToRemove = state.apps.findIndex(function(app) {\n return app.isAttachedTo(hook);\n });\n if (indexToRemove >= 0) {\n // remove from apps\n var app = state.apps.splice(indexToRemove, 1)[0];\n\n // restore original dom element\n app.restoreElement();\n\n return true;\n }\n\n return false;\n };\n\n // parses the given context for plugins (does not include the context element itself)\n exports.parse = function parse(context) {\n // get all possible hooks\n var matchedHooks = Array.from(context.querySelectorAll('.' + name));\n\n // filter out already active hooks\n var newHooks = matchedHooks.filter(function(newHook) {\n return !state.apps.find(function(app) {\n return app.isAttachedTo(newHook);\n });\n });\n\n // create new instance for each hook\n return newHooks.map(function(hook) {\n return exports.create(hook);\n });\n };\n\n // returns an app based on the given element hook\n exports.find = function find(hook) {\n var app = state.apps.find(function(app) {\n return app.isAttachedTo(hook);\n });\n if (!app) {\n return null;\n }\n return createAppAPI(app);\n };\n\n // adds a plugin extension\n exports.registerPlugin = function registerPlugin() {\n for (\n var _len = arguments.length, plugins = new Array(_len), _key = 0;\n _key < _len;\n _key++\n ) {\n plugins[_key] = arguments[_key];\n }\n\n // register plugins\n plugins.forEach(createAppPlugin);\n\n // update OptionTypes, each plugin might have extended the default options\n updateOptionTypes();\n };\n\n exports.getOptions = function getOptions$1() {\n var opts = {};\n forin(getOptions(), function(key, value) {\n opts[key] = value[0];\n });\n return opts;\n };\n\n exports.setOptions = function setOptions$1(opts) {\n if (isObject(opts)) {\n // update existing plugins\n state.apps.forEach(function(app) {\n app.setOptions(opts);\n });\n\n // override defaults\n setOptions(opts);\n }\n\n // return new options\n return exports.getOptions();\n };\n }\n\n exports.supported = supported;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n});\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = (0, _common.regex)('decimal', /^[-]?\\d*(\\.\\d+)?$/);\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = (0, _common.withParams)({\n type: 'ipAddress'\n}, function (value) {\n if (!(0, _common.req)(value)) {\n return true;\n }\n\n if (typeof value !== 'string') {\n return false;\n }\n\n var nibbles = value.split('.');\n return nibbles.length === 4 && nibbles.every(nibbleValid);\n});\n\nexports.default = _default;\n\nvar nibbleValid = function nibbleValid(nibble) {\n if (nibble.length > 3 || nibble.length === 0) {\n return false;\n }\n\n if (nibble[0] === '0' && nibble !== '0') {\n return false;\n }\n\n if (!nibble.match(/^\\d+$/)) {\n return false;\n }\n\n var numeric = +nibble | 0;\n return numeric >= 0 && numeric <= 255;\n};","'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar fails = require('../internals/fails');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// FF99+ bug\nvar BROKEN_ON_SPARSE = fails(function () {\n return !Array(1).includes();\n});\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true, forced: BROKEN_ON_SPARSE }, {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.withParams = void 0;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar root = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {};\n\nvar fakeWithParams = function fakeWithParams(paramsOrClosure, maybeValidator) {\n if (_typeof(paramsOrClosure) === 'object' && maybeValidator !== undefined) {\n return maybeValidator;\n }\n\n return paramsOrClosure(function () {});\n};\n\nvar withParams = root.vuelidate ? root.vuelidate.withParams : fakeWithParams;\nexports.withParams = withParams;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default() {\n for (var _len = arguments.length, validators = new Array(_len), _key = 0; _key < _len; _key++) {\n validators[_key] = arguments[_key];\n }\n\n return (0, _common.withParams)({\n type: 'or'\n }, function () {\n var _this = this;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return validators.length > 0 && validators.reduce(function (valid, fn) {\n return valid || fn.apply(_this, args);\n }, false);\n });\n};\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = (0, _common.withParams)({\n type: 'required'\n}, function (value) {\n if (typeof value === 'string') {\n return (0, _common.req)(value.trim());\n }\n\n return (0, _common.req)(value);\n});\n\nexports.default = _default;","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default(prop) {\n return (0, _common.withParams)({\n type: 'requiredUnless',\n prop: prop\n }, function (value, parentVm) {\n return !(0, _common.ref)(prop, this, parentVm) ? (0, _common.req)(value) : true;\n });\n};\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default(min) {\n return (0, _common.withParams)({\n type: 'minValue',\n min: min\n }, function (value) {\n return !(0, _common.req)(value) || (!/\\s/.test(value) || value instanceof Date) && +value >= +min;\n });\n};\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _common = require(\"./common\");\n\nvar _default = function _default(min, max) {\n return (0, _common.withParams)({\n type: 'between',\n min: min,\n max: max\n }, function (value) {\n return !(0, _common.req)(value) || (!/\\s/.test(value) || value instanceof Date) && +min <= +value && +max >= +value;\n });\n};\n\nexports.default = _default;","/*!\n * FilePondPluginImageEdit 1.6.3\n * Licensed under MIT, https://opensource.org/licenses/MIT/\n * Please visit https://pqina.nl/filepond/ for details.\n */\n\n/* eslint-disable */\n\n(function(global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n ? (module.exports = factory())\n : typeof define === 'function' && define.amd\n ? define(factory)\n : ((global = global || self), (global.FilePondPluginImageEdit = factory()));\n})(this, function() {\n 'use strict';\n\n var isPreviewableImage = function isPreviewableImage(file) {\n return /^image/.test(file.type);\n };\n\n /**\n * Image Edit Proxy Plugin\n */\n var plugin = function plugin(_) {\n var addFilter = _.addFilter,\n utils = _.utils,\n views = _.views;\n var Type = utils.Type,\n createRoute = utils.createRoute,\n _utils$createItemAPI = utils.createItemAPI,\n createItemAPI =\n _utils$createItemAPI === void 0\n ? function(item) {\n return item;\n }\n : _utils$createItemAPI;\n var fileActionButton = views.fileActionButton;\n\n addFilter('SHOULD_REMOVE_ON_REVERT', function(shouldRemove, _ref) {\n var item = _ref.item,\n query = _ref.query;\n return new Promise(function(resolve) {\n var file = item.file;\n\n // if this file is editable it shouldn't be removed immidiately even when instant uploading\n var canEdit =\n query('GET_ALLOW_IMAGE_EDIT') &&\n query('GET_IMAGE_EDIT_ALLOW_EDIT') &&\n isPreviewableImage(file);\n\n // if the file cannot be edited it should be removed on revert\n resolve(!canEdit);\n });\n });\n\n // open editor when loading a new item\n addFilter('DID_LOAD_ITEM', function(item, _ref2) {\n var query = _ref2.query,\n dispatch = _ref2.dispatch;\n return new Promise(function(resolve, reject) {\n // if is temp or local file\n if (item.origin > 1) {\n resolve(item);\n return;\n }\n\n // get file reference\n var file = item.file;\n if (\n !query('GET_ALLOW_IMAGE_EDIT') ||\n !query('GET_IMAGE_EDIT_INSTANT_EDIT')\n ) {\n resolve(item);\n return;\n }\n\n // exit if this is not an image\n if (!isPreviewableImage(file)) {\n resolve(item);\n return;\n }\n\n var createEditorResponseHandler = function createEditorResponseHandler(\n item,\n resolve,\n reject\n ) {\n return function(userDidConfirm) {\n // remove item\n editRequestQueue.shift();\n\n // handle item\n if (userDidConfirm) {\n resolve(item);\n } else {\n reject(item);\n }\n\n // TODO: Fix, should not be needed to kick the internal loop in case no processes are running\n dispatch('KICK');\n\n // handle next item!\n requestEdit();\n };\n };\n\n var requestEdit = function requestEdit() {\n if (!editRequestQueue.length) return;\n var _editRequestQueue$ = editRequestQueue[0],\n item = _editRequestQueue$.item,\n resolve = _editRequestQueue$.resolve,\n reject = _editRequestQueue$.reject;\n\n dispatch('EDIT_ITEM', {\n id: item.id,\n handleEditorResponse: createEditorResponseHandler(\n item,\n resolve,\n reject\n )\n });\n };\n\n queueEditRequest({ item: item, resolve: resolve, reject: reject });\n\n if (editRequestQueue.length === 1) {\n requestEdit();\n }\n });\n });\n\n // extend item methods\n addFilter('DID_CREATE_ITEM', function(item, _ref3) {\n var query = _ref3.query,\n dispatch = _ref3.dispatch;\n item.extend('edit', function() {\n dispatch('EDIT_ITEM', { id: item.id });\n });\n });\n\n var editRequestQueue = [];\n var queueEditRequest = function queueEditRequest(editRequest) {\n editRequestQueue.push(editRequest);\n return editRequest;\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 if (!query('GET_ALLOW_IMAGE_EDIT')) return;\n\n var canShowImagePreview = query('GET_ALLOW_IMAGE_PREVIEW');\n\n // only run for either the file or the file info panel\n var shouldExtendView =\n (is('file-info') && !canShowImagePreview) ||\n (is('file') && canShowImagePreview);\n\n if (!shouldExtendView) return;\n\n // no editor defined, then exit\n var editor = query('GET_IMAGE_EDIT_EDITOR');\n if (!editor) return;\n\n // set default FilePond options and add bridge once\n if (!editor.filepondCallbackBridge) {\n editor.outputData = true;\n editor.outputFile = false;\n editor.filepondCallbackBridge = {\n onconfirm: editor.onconfirm || function() {},\n oncancel: editor.oncancel || function() {}\n };\n }\n\n // opens the editor, if it does not already exist, it creates the editor\n var openEditor = function openEditor(_ref4) {\n var root = _ref4.root,\n props = _ref4.props,\n action = _ref4.action;\n var id = props.id;\n var handleEditorResponse = action.handleEditorResponse;\n\n // update editor props that could have changed\n editor.cropAspectRatio =\n root.query('GET_IMAGE_CROP_ASPECT_RATIO') || editor.cropAspectRatio;\n editor.outputCanvasBackgroundColor =\n root.query('GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR') ||\n editor.outputCanvasBackgroundColor;\n\n // get item\n var item = root.query('GET_ITEM', id);\n if (!item) return;\n\n // file to open\n var file = item.file;\n\n // crop data to pass to editor\n var crop = item.getMetadata('crop');\n var cropDefault = {\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 // size data to pass to editor\n var resize = item.getMetadata('resize');\n\n // filter and color data to pass to editor\n var filter = item.getMetadata('filter') || null;\n var filters = item.getMetadata('filters') || null;\n var colors = item.getMetadata('colors') || null;\n var markup = item.getMetadata('markup') || null;\n\n // build parameters object\n var imageParameters = {\n crop: crop || cropDefault,\n size: resize\n ? {\n upscale: resize.upscale,\n mode: resize.mode,\n width: resize.size.width,\n height: resize.size.height\n }\n : null,\n filter: filters\n ? filters.id || filters.matrix\n : root.query('GET_ALLOW_IMAGE_FILTER') &&\n root.query('GET_IMAGE_FILTER_COLOR_MATRIX') &&\n !colors\n ? filter\n : null,\n color: colors,\n markup: markup\n };\n\n editor.onconfirm = function(_ref5) {\n var data = _ref5.data;\n var crop = data.crop,\n size = data.size,\n filter = data.filter,\n color = data.color,\n colorMatrix = data.colorMatrix,\n markup = data.markup;\n\n // create new metadata object\n var metadata = {};\n\n // append crop data\n if (crop) {\n metadata.crop = crop;\n }\n\n // append size data\n if (size) {\n var initialSize = (item.getMetadata('resize') || {}).size;\n var targetSize = {\n width: size.width,\n height: size.height\n };\n\n if (!(targetSize.width && targetSize.height) && initialSize) {\n targetSize.width = initialSize.width;\n targetSize.height = initialSize.height;\n }\n\n if (targetSize.width || targetSize.height) {\n metadata.resize = {\n upscale: size.upscale,\n mode: size.mode,\n size: targetSize\n };\n }\n }\n\n if (markup) {\n metadata.markup = markup;\n }\n\n // set filters and colors so we can restore them when re-editing the image\n metadata.colors = color;\n metadata.filters = filter;\n\n // set merged color matrix to use in preview plugin\n metadata.filter = colorMatrix;\n\n // update crop metadata\n item.setMetadata(metadata);\n\n // call\n editor.filepondCallbackBridge.onconfirm(data, createItemAPI(item));\n\n // used in instant edit mode\n if (!handleEditorResponse) return;\n editor.onclose = function() {\n handleEditorResponse(true);\n editor.onclose = null;\n };\n };\n\n editor.oncancel = function() {\n // call\n editor.filepondCallbackBridge.oncancel(createItemAPI(item));\n\n // used in instant edit mode\n if (!handleEditorResponse) return;\n editor.onclose = function() {\n handleEditorResponse(false);\n editor.onclose = null;\n };\n };\n\n editor.open(file, imageParameters);\n };\n\n /**\n * Image Preview related\n */\n\n // create the image edit plugin, but only do so if the item is an image\n var didLoadItem = function didLoadItem(_ref6) {\n var root = _ref6.root,\n props = _ref6.props;\n\n if (!query('GET_IMAGE_EDIT_ALLOW_EDIT')) return;\n var id = props.id;\n\n // try to access item\n var item = query('GET_ITEM', id);\n if (!item) 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 // handle interactions\n root.ref.handleEdit = function(e) {\n e.stopPropagation();\n root.dispatch('EDIT_ITEM', { id: id });\n };\n\n if (canShowImagePreview) {\n // add edit button to preview\n var buttonView = view.createChildView(fileActionButton, {\n label: 'edit',\n icon: query('GET_IMAGE_EDIT_ICON_EDIT'),\n opacity: 0\n });\n\n // edit item classname\n buttonView.element.classList.add('filepond--action-edit-item');\n buttonView.element.dataset.align = query(\n 'GET_STYLE_IMAGE_EDIT_BUTTON_EDIT_ITEM_POSITION'\n );\n buttonView.on('click', root.ref.handleEdit);\n\n root.ref.buttonEditItem = view.appendChildView(buttonView);\n } else {\n // view is file info\n var filenameElement = view.element.querySelector(\n '.filepond--file-info-main'\n );\n var editButton = document.createElement('button');\n editButton.className = 'filepond--action-edit-item-alt';\n editButton.innerHTML =\n query('GET_IMAGE_EDIT_ICON_EDIT') + 'edit';\n editButton.addEventListener('click', root.ref.handleEdit);\n filenameElement.appendChild(editButton);\n\n root.ref.editButton = editButton;\n }\n };\n\n view.registerDestroyer(function(_ref7) {\n var root = _ref7.root;\n if (root.ref.buttonEditItem) {\n root.ref.buttonEditItem.off('click', root.ref.handleEdit);\n }\n if (root.ref.editButton) {\n root.ref.editButton.removeEventListener('click', root.ref.handleEdit);\n }\n });\n\n var routes = {\n EDIT_ITEM: openEditor,\n DID_LOAD_ITEM: didLoadItem\n };\n\n if (canShowImagePreview) {\n // view is file\n var didPreviewUpdate = function didPreviewUpdate(_ref8) {\n var root = _ref8.root;\n if (!root.ref.buttonEditItem) return;\n root.ref.buttonEditItem.opacity = 1;\n };\n\n routes.DID_IMAGE_PREVIEW_SHOW = didPreviewUpdate;\n } else {\n }\n\n // start writing\n view.registerWriter(createRoute(routes));\n });\n\n // Expose plugin options\n return {\n options: {\n // enable or disable image editing\n allowImageEdit: [true, Type.BOOLEAN],\n\n // location of processing button\n styleImageEditButtonEditItemPosition: ['bottom center', Type.STRING],\n\n // open editor when image is dropped\n imageEditInstantEdit: [false, Type.BOOLEAN],\n\n // allow editing\n imageEditAllowEdit: [true, Type.BOOLEAN],\n\n // the icon to use for the edit button\n imageEditIconEdit: [\n '',\n Type.STRING\n ],\n\n // editor object\n imageEditEditor: [null, Type.OBJECT]\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"],"sourceRoot":""}