{"version":3,"sources":["webpack:///./src/components/footer.vue?0722","webpack:///src/components/footer.vue","webpack:///./src/components/footer.vue?be4f","webpack:///./src/components/footer.vue?73a4","webpack:///./node_modules/vue-filepond/dist/vue-filepond.js","webpack:///./src/views/servicers-onboarding.vue?b996","webpack:///./src/js/constants.js","webpack:///./node_modules/uuid/dist/esm-browser/rng.js","webpack:///./node_modules/uuid/dist/esm-browser/regex.js","webpack:///./node_modules/uuid/dist/esm-browser/validate.js","webpack:///./node_modules/uuid/dist/esm-browser/stringify.js","webpack:///./node_modules/uuid/dist/esm-browser/v4.js","webpack:///./node_modules/filepond-plugin-file-validate-type/dist/filepond-plugin-file-validate-type.esm.js","webpack:///./node_modules/filepond-plugin-image-preview/dist/filepond-plugin-image-preview.esm.js","webpack:///src/views/servicers-onboarding.vue","webpack:///./src/views/servicers-onboarding.vue?4bfe","webpack:///./src/views/servicers-onboarding.vue?0f05","webpack:///./src/assets/logos/Homeplan logo (new modern April 2022 - NO .com).svg","webpack:///./node_modules/filepond-plugin-image-crop/dist/filepond-plugin-image-crop.js","webpack:///./node_modules/filepond/dist/filepond.js","webpack:///./src/views/servicers-onboarding.vue?8d61","webpack:///./src/components/footer.vue?9c2a"],"names":["render","_vm","this","_h","$createElement","_c","_self","staticClass","on","$event","goTo","_v","attrs","staticRenderFns","methods","link","$router","push","window","scrollTo","component","global","factory","globalThis","self","_exports","_vue","_filepond","_interopRequireDefault","obj","__esModule","default","Object","defineProperty","value","setOptions","filteredComponentMethods","isSupported","supported","getNativeConstructorFromType","type","string","String","boolean","Boolean","array","Array","function","Function","int","Number","serverapi","object","props","events","watch","instances","globalOptions","options","assign","forEach","instance","_default","registerPlugin","apply","arguments","length","_loop","prop","test","OptionTypes","_pond","name","h","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","staticStyle","_l","state","step","preventDefault","completeStepOne","_m","directives","rawName","form","details","expression","domProps","target","composing","$set","ref","logos","_e","availability","_s","class","timesAvailable","toggleArrayElement","option","employees","insurance","hasLicense","hasGeneralLiability","hasWorkersComp","completeStepFour","reviews","bbb","google","yelp","category","categories","toggleCategory","completeStepSix","contractLink","serviceCategories","getRandomValues","rnds8","Uint8Array","rng","crypto","bind","msCrypto","Error","validate","uuid","byteToHex","toString","stringify","arr","offset","undefined","toLowerCase","TypeError","v4","buf","rnds","random","i","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","query","validationResult","handleRejection","acceptedFileTypesMapped","label","status","main","sub","allTypes","join","allButLastType","lastType","allowFileTypeValidation","BOOLEAN","ARRAY","labelFileTypeNotAllowed","STRING","fileValidateTypeLabelExpectedTypes","fileValidateTypeLabelExpectedTypesMap","OBJECT","fileValidateTypeDetectType","FUNCTION","isBrowser","dispatchEvent","CustomEvent","detail","isPreviewableImage","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","prev","curr","zIndex","sortMarkupByZIndex","createMarkupView","_","createView","ignoreRect","mixins","apis","write","root","dirty","crop","resize","viewWidth","viewHeight","cropWidth","cropHeight","outputWidth","outputHeight","outputFit","mode","outputUpscale","upscale","shouldUpscale","scalarWidth","scalarHeight","max","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","bitmap","appendChildView","createChildView","flip","horizontal","vertical","createClipView","duration","didWriteView","background","createMarkup","destroyMarkup","removeChildView","transparencyIndicator","dataset","shouldOptimize","translation","PI","cropAspectRatio","imageView","createImageView","clip","hidden","containerWidth","inner","containerHeight","fixedPreviewHeight","minPreviewHeight","maxPreviewHeight","panelAspectRatio","clipHeight","clipWidth","SVG_MASK","SVGMaskUniqueId","createImageOverlayView","fpAPI","mask","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","canCreateImageBitmap","userAgent","navigator","isFirefox","match","firefoxVersion","parseInt","didCreatePreviewContainer","fileURL","URL","createObjectURL","drawPreview","loadPreviewFallback","previewImageLoaded","revokeObjectURL","exif","pixelDensityFactor","devicePixelRatio","zoomFactor","scaleFactor","previewImageRatio","previewContainerWidth","previewContainerHeight","previewImage","done","setMetadata","close","overlayShadow","imageBitmap","didDrawPreview","restoreOverlay","overlayError","overlaySuccess","didThrowError","didCompleteProcessing","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","viewsToRemove","isFile","imagePreviewView","viewAPI","is","view","didLoadItem","archived","supportsCreateImageBitmap","maxPreviewFileSize","imagePreview","queue","rescaleItem","itemPanelAspectRatio","fixedHeight","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","FilePond","vueFilePond","FilePondPluginFileValidateType","FilePondPluginImagePreview","FilePondPluginImageCrop","axios","require","components","Footer","isLoading","files","yourName","yourRole","mobilePhone","email","website","areas","states","bbbLink","googleLink","yelpLink","created","uuidv4","logoFilePond","$refs","licenseFilePond","generalLiabilityFilePond","workersCompFilePond","all","submitForm","getContract","submit_toast","$toast","info","formData","FormData","append","JSON","filesToInclude","fileName","api","success","error","dismiss","body","mobile","company","console","log","module","exports","isImage","plugin","_ref","getNumericAspectRatioFromString","allowCrop","isObject","isNumber","updateCrop","_ref2","extend","newAspectRatio","currentCrop","newCrop","_ref3","humanAspectRatio","allowImageCrop","imageCropAspectRatio","isNode","HTMLElement","createStore","initialState","queries","actions","actionQueue","dispatchQueue","getState","processActionQueue","processDispatchQueue","isBlocking","actionHandlers","str","_queryHandles","queryHandles","property","definition","forin","hasOwnProperty","createObject","getAttribute","hasAttribute","svgElements","isSVGElement","attributes","parent","child","children","insertBefore","parentNode","removeChild","IS_BROWSER","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","get","easeInOutQuad","tween","p","_ref$duration","_ref$easing","easing","_ref$delay","delay","start","reverse","animator","createAnimator","def","addGetSet","overwrite","isArray","o","getter","setter","mixinConfig","viewProps","viewInternalAPI","viewExternalAPI","initialProps","animation","addEvent","fn","addEventListener","removeEvent","removeEventListener","listeners","viewState","remove","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","reader","_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","split","isBoolean","toBoolean","toNumber","toInt","toFloat","isInt","isFinite","toBytes","base","naturalFileSize","isFunction","toFunctionReference","levels","level","process","patch","revert","fetch","restore","load","createServerAPI","outline","timeout","headers","createAction","method","withCredentials","ondata","parts","header","toServerAPI","isNull","isAPI","getType","replaceSingleQuotes","conversionTable","number","float","bytes","parse","convertTo","getValueByType","newValue","defaultValue","valueType","newValueType","convertedValue","createOption","currentValue","enumerable","createOptions","optionDefinition","createInitialState","items","listUpdateTimeout","itemUpdateTimeout","processingQueue","fromCamels","separator","part","createOptionAPI","toUpperCase","createOptionActions","createOptionQueries","InteractionMethod","API","DROP","BROWSE","PASTE","NONE","getUniqueId","_AwaitValue","wrapped","_AsyncGenerator","gen","front","back","send","arg","request","next","resume","result","wrappedAwait","settle","err","_invoke","return","_objectWithoutPropertiesLoose","source","excluded","sourceKeys","_objectWithoutProperties","getOwnPropertySymbols","sourceSymbolKeys","prototype","propertyIsEnumerable","Symbol","asyncIterator","throw","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","arr2","iter","iterator","from","arrayRemove","run","sync","listener","_fire","fireSync","fire","_len2","_key2","onOnce","_cb","copyObjectPropertiesToObject","getOwnPropertyNames","getOwnPropertyDescriptor","PRIVATE","createItemAPI","removeReleasedItems","released","ItemStatus","INIT","IDLE","PROCESSING_QUEUED","PROCESSING","PROCESSING_COMPLETE","PROCESSING_ERROR","PROCESSING_REVERT_ERROR","LOADING","LOAD_ERROR","FileOrigin","INPUT","LIMBO","LOCAL","getNonNumeric","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","fileSize","GET_STYLES","GET_PANEL_ASPECT_RATIO","isShapeCircle","GET_ITEM_PANEL_ASPECT_RATIO","GET_ITEMS_BY_STATUS","GET_TOTAL_ITEMS","SHOULD_UPDATE_FILE_INPUT","IS_ASYNC","GET_FILE_SIZE_LABELS","labelBytes","labelKilobytes","labelMegabytes","labelGigabytes","hasRoomForItem","count","maxFileCount","limit","arrayInsert","insertItem","isBase64DataURI","guesstimateExtension","subtype","leftPad","padding","getDateString","date","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","charCodeAt","getMimeTypeFromBase64DataURI","dataURI","getBase64DataFromBase64DataURI","getByteStringFromBase64DataURI","atob","getBlobFromBase64DataURI","getFileFromBase64DataURI","getFileNameFromHeader","matches","decodeURI","getFileSizeFromHeader","getTranfserIdFromHeader","getFileInfoFromHeaders","rows","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","createFileLoader","fetchFn","complete","progress","getProgress","abort","loadURL","code","computable","total","fileinfo","setSource","isGet","sendRequest","onheaders","onprogress","ontimeout","onabort","aborted","xhr","headersReceived","encodeURI","encodeURIComponent","XMLHttpRequest","upload","lengthComputable","loaded","onreadystatechange","readyState","open","unescape","setRequestHeader","responseType","createResponse","createTimeoutResponse","getAllResponseHeaders","hasQS","buildURL","createFetchFunction","apiUrl","statusText","ChunkStatus","QUEUED","COMPLETE","WAITING","processFileChunked","metadata","transfer","chunks","chunkTransferId","chunkServer","serverId","fd","getResponseHeader","requestTransferId","requestParams","requestTransferOffset","requestUrl","lastChunkIndex","retries","completeProcessingChunks","canProcessChunk","chunk","processChunk","processChunks","updateTotalProgress","retryProcessChunk","every","totalBytesTransfered","totalSize","totalProcessing","abortChunks","createFileProcessorFunction","canChunkUpload","shouldChunkUpload","willChunkUpload","createProcessorFunction","params","createRevertFunction","uniqueFileId","getRandomNumber","createPerceivedPerformanceUpdater","tickMin","tickMax","runtime","clear","createFileProcessor","processFn","perceivedProgress","perceivedPerformanceUpdater","perceivedDuration","progressFn","completeFn","transferId","reset","getDuration","getFilenameWithoutExtension","lastIndexOf","createFileStub","deepCloneObject","createItem","serverFileReference","frozen","processingAborted","activeLoader","activeProcessor","abortProcessingRequestComplete","setStatus","getFileExtension","getFileType","getFileSize","getFile","loader","meta","retryLoad","abortLoad","processor","onprocess","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","_ref4","currentIndex","SORT","_ref5","ADD_ITEMS","_ref6","_ref6$success","_ref6$failure","insertLocation","totalItems","isValidFile","validItems","promises","ADD_ITEM","_ref7","_ref7$index","_ref7$success","_ref7$failure","_ref7$options","_item","mainStatus","handleAdd","shouldAdd","loadComplete","_ref8","REQUEST_PREPARE_OUTPUT","_ref9","_ref9$failure","COMPLETE_LOAD_ITEM","_ref10","RETRY_ITEM_LOAD","REQUEST_ITEM_PREPARE","_success","output","REQUEST_ITEM_PROCESSING","itemCanBeQueuedForProcessing","processNow","PROCESS_ITEM","totalCurrentUploads","processNext","queueEntry","itemReference","noop","allItemsProcessed","RETRY_ITEM_PROCESSING","REQUEST_REMOVE_ITEM","shouldRemove","RELEASE_ITEM","REMOVE_ITEM","removeFromView","ABORT_ITEM_LOAD","ABORT_ITEM_PROCESSING","REQUEST_REVERT_ITEM_PROCESSING","handleRevert","shouldRevert","requestRemoveResult","REVERT_ITEM_PROCESSING","SET_OPTIONS","_ref11","optionKeys","prioritizedOptionKeys","PrioritizedOptions","orderedOptionKeys","formatFilename","createElement$1","tagName","textNode","nodeValue","createTextNode","polarToCartesian","centerX","centerY","radius","angleInDegrees","angleInRadians","describeArc","startAngle","endAngle","arcSweep","percentageArc","to","spin","align","ringStrokeWidth","ringFrom","ringTo","coordinates","progressIndicator","create$1","icon","isDisabled","write$1","shouldDisable","removeAttribute","fileActionButton","toNaturalFileSize","_options$labelBytes","_options$labelKilobyt","_options$labelMegabyt","_options$labelGigabyt","KB","MB","GB","removeDecimalsWhenZero","decimalCount","toFixed","create$2","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","_ref12","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","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","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","filenames","assist","clear$1","listModified","isUsingFilePond","itemAdded","itemRemoved","itemProcessed","itemProcessedUndo","itemError","assistant","toCamels","RegExp","charAt","debounce","func","immidiateOnly","MAX_FILES_LIMIT","prevent","create$e","measure","bounds","widthPrevious","widthUpdated","updateHistory","previousAspectRatio","canHover","matchMedia","hasPointerEvents","passive","hasCredits","frag","tabindex","rel","write$9","route$5","calculateRootBoundingBoxHeight","_root$ref","hopper","isMultiItem","maxItems","atMaxCapacity","addAction","listItemMargin","calculateListItemMargin","listHeight","calculateListHeight","labelHeight","currentLabelHeight","listMarginTop","listMarginBottom","visual","boundsHeight","history","MAX_BOUNCES","bounces","listAvailableHeight","_listAvailableHeight","cappedHeight","isCappedHeight","panelHeight","_listAvailableHeight2","itemMargin","scrollList","itemList","newItem","removedItem","verticalItemCount","measureHeight","maxHeight","exceedsMaxFiles","totalBrowseItems","hasMaxItems","getDragIndex","toggleDrop","isAllowed","enabled","toggleBrowse","togglePaste","paster","DID_SET_ALLOW_DROP","DID_SET_ALLOW_PASTE","createApp","initialOptions","originalElement","visibilityHandler","resizeDoneTimer","isResizing","isResizingHorizontally","initialWindowWidth","currentWindowWidth","resizeHandler","isHidden","readWriteApi","innerWidth","routeActionsToEvents","createEvent","eventRoutes","DID_DESTROY","DID_INIT","DID_THROW_MAX_FILES","DID_INIT_ITEM","DID_COMPLETE_ITEM_PROCESSING_ALL","DID_UPDATE_ITEMS","DID_ACTIVATE_ITEM","exposeEvent","pond","bubbles","cancelable","composed","filtered","prepareFile","addFile","addFiles","isFilePondFile","removeFile","sources","lastArgument","processFile","prepareFiles","processFiles","_len3","_key3","removeFiles","_len4","_key4","mappedQueries","q","moveFile","browse","appendTo","replaceElement","restoreElement","isAttachedTo","createAppObject","customOptions","app","lowerCaseFirstLetter","attributeNameToPropertyName","attributeName","mapObject","propertyMap","selector","mapping","selectorRegExp","getAttributesAsObject","attributeMapping","attribute","createAppAtElement","mergedOptions","attributeOptions","querySelectorAll","createApp$1","PRIVATE_METHODS","createAppAPI","replacements","workerBlob","workerURL","Worker","transferList","renameFile","renamedFile","copyFile","registeredPlugins","createAppPlugin","pluginOutline","views","isOperaMini","operamini","hasPromises","hasBlobSlice","hasCreateObjectURL","hasVisibility","hasTiming","hasCSSSupports","CSS","isIE11","apps","FileStatus","updateOptionTypes","hook","indexToRemove","context","matchedHooks","newHooks","newHook","plugins"],"mappings":"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","file":"js/chunk-6c116192.6913614f.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"flex flex-wrap space-x-4 w-full justify-center pb-2 px-4 text-center text-gray-500 dark:text-white\"},[_c('a',{on:{\"click\":function($event){return _vm.goTo('/terms')}}},[_vm._v(\"Terms\")]),_c('a',{on:{\"click\":function($event){return _vm.goTo('/privacy')}}},[_vm._v(\"Privacy\")]),_c('a',{on:{\"click\":function($event){return _vm.goTo('/data-retention')}}},[_vm._v(\"Data Retention\")]),_c('a',{on:{\"click\":function($event){return _vm.goTo('/do-not-sell')}}},[_vm._v(\"Do Not Sell My Personal Information\")]),_c('a',{on:{\"click\":function($event){return _vm.goTo('/cookies')}}},[_vm._v(\"Cookies\")]),_c('a',{on:{\"click\":function($event){return _vm.goTo('/fair-chance')}}},[_vm._v(\"Fair Chance\")]),_c('a',{attrs:{\"href\":\"mailto:hello@joinhomeplan.com\"}},[_vm._v(\"Contact Us\")]),_c('span',[_vm._v(\" © 2021-2023 Homeplan.com, Inc \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./footer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./footer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./footer.vue?vue&type=template&id=049c422e&scoped=true&\"\nimport script from \"./footer.vue?vue&type=script&lang=js&\"\nexport * from \"./footer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./footer.vue?vue&type=style&index=0&id=049c422e&scoped=true&lang=css&\"\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 \"049c422e\",\n null\n \n)\n\nexport default component.exports","/*!\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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"min-h-screen py-12 bg-hp-gray\",staticStyle:{\"min-height\":\"100vh\"}},[_c('div',{staticClass:\"max-w-5xl px-4 mx-auto\"},[_c('div',{staticClass:\"flex justify-between items-center mb-8\"},[_c('router-link',{attrs:{\"to\":\"/\"}},[_c('img',{staticStyle:{\"height\":\"2.1rem\"},attrs:{\"src\":require(\"@/assets/logos/Homeplan logo (new modern April 2022 - NO .com).svg\"),\"alt\":\"Homeplan logo\"}})]),_c('div',{staticClass:\"flex justify-center gap-4\"},_vm._l(([1,2,3,4,5,6,7]),function(index){return _c('div',{key:index},[(index <= _vm.state.step)?_c('div',{staticClass:\"bg-blue-900 rounded-full h-5 w-5 flex items-center justify-center text-white font-bold border-2 border-blue-900 text-xs text-bold\"}):_c('div',{staticClass:\"bg-gray-200 rounded-full h-5 w-5 flex items-center justify-center text-white font-bold border-2 border-gray-200 text-xs text-bold\"})])}),0)],1),_c('div',{staticClass:\"vertical-center pb-16\"},[(_vm.state.step == 1)?_c('form',{staticClass:\"w-full\",on:{\"submit\":function($event){$event.preventDefault();return _vm.completeStepOne.apply(null, arguments)}}},[_c('div',{staticClass:\"text-center font-bold mb-2\"},[_vm._v(\"STEP 1\")]),_vm._m(0),_c('div',{staticClass:\"grid grid-cols-2 gap-6 mb-20\"},[_c('div',{staticClass:\"cursor-text relative\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.form.details.name),expression:\"form.details.name\"}],staticClass:\"floating-input\",attrs:{\"required\":\"\",\"id\":\"business-name\",\"placeholder\":\"Placeholder\",\"type\":\"text\"},domProps:{\"value\":(_vm.form.details.name)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.form.details, \"name\", $event.target.value)}}}),_c('label',{attrs:{\"for\":\"business-name\"}},[_vm._v(\"Business name\")])]),_c('div',{staticClass:\"cursor-text relative\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.form.details.yourName),expression:\"form.details.yourName\"}],staticClass:\"floating-input\",attrs:{\"required\":\"\",\"id\":\"your-name\",\"placeholder\":\"Placeholder\",\"type\":\"text\"},domProps:{\"value\":(_vm.form.details.yourName)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.form.details, \"yourName\", $event.target.value)}}}),_c('label',{attrs:{\"for\":\"your-name\"}},[_vm._v(\"Your name\")])]),_c('div',{staticClass:\"cursor-text relative\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.form.details.yourRole),expression:\"form.details.yourRole\"}],staticClass:\"floating-input\",attrs:{\"required\":\"\",\"id\":\"your-role\",\"placeholder\":\"Placeholder\",\"type\":\"text\"},domProps:{\"value\":(_vm.form.details.yourRole)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.form.details, \"yourRole\", $event.target.value)}}}),_c('label',{attrs:{\"for\":\"your-role\"}},[_vm._v(\"Your role\")])]),_c('div',{staticClass:\"cursor-text relative\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.form.details.email),expression:\"form.details.email\"}],staticClass:\"floating-input\",attrs:{\"required\":\"\",\"id\":\"your-email\",\"placeholder\":\"Placeholder\",\"type\":\"email\"},domProps:{\"value\":(_vm.form.details.email)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.form.details, \"email\", $event.target.value)}}}),_c('label',{attrs:{\"for\":\"your-email\"}},[_vm._v(\"Your email address\")])]),_c('div',{staticClass:\"cursor-text relative\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.form.details.mobilePhone),expression:\"form.details.mobilePhone\"}],staticClass:\"floating-input\",attrs:{\"required\":\"\",\"id\":\"phone-no\",\"placeholder\":\"Placeholder\",\"type\":\"tel\"},domProps:{\"value\":(_vm.form.details.mobilePhone)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.form.details, \"mobilePhone\", $event.target.value)}}}),_c('label',{attrs:{\"for\":\"phone-no\"}},[_vm._v(\"Phone number\")])]),_c('div',{staticClass:\"cursor-text relative\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.form.details.website),expression:\"form.details.website\"}],staticClass:\"floating-input\",attrs:{\"required\":\"\",\"id\":\"website\",\"placeholder\":\"Placeholder\",\"type\":\"text\"},domProps:{\"value\":(_vm.form.details.website)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.form.details, \"website\", $event.target.value)}}}),_c('label',{attrs:{\"for\":\"website\"}},[_vm._v(\"Company website\")])]),_c('div',{staticClass:\"col-span-2\"},[_c('label',{staticClass:\"text-sm font-medium text-gray-700\"},[_vm._v(\"Upload your company logo\")]),_c('file-pond',{ref:\"logo-pond\",attrs:{\"class-name\":\"my-pond\",\"name\":\"logo\",\"label-idle\":\"Drag and drop your logo or Browse.\",\"allow-multiple\":false,\"accepted-file-types\":\"image/jpeg, image/png\",\"files\":_vm.logos,\"allowRevert\":false,\"labelTapToUndo\":\"\",\"allow-file-type-validation\":\"true\",\"allowImagePreview\":true,\"allowImageCrop\":true}})],1)]),_c('div',{staticClass:\"flex justify-center gap-2\"},[_c('router-link',{staticClass:\"bg-gray-100 hover:bg-gray-200 duration-100 ease-linear rounded shadow-md text-xl py-3 px-4 text-gray-400\",attrs:{\"to\":\"/\"}},[_vm._v(\" Exit form \")]),_c('button',{staticClass:\"text-2xl py-3 px-8 bg-blue-900 hover:bg-blue-700 text-white transition ease-in duration-200 text-center text-base font-semibold shadow-md focus:outline-none rounded-lg\",attrs:{\"type\":\"submit\"}},[_vm._v(\" Next \")])],1)]):_vm._e(),(_vm.state.step == 2)?_c('form',{staticClass:\"w-full\",on:{\"submit\":function($event){$event.preventDefault();_vm.state.step++}}},[_c('div',{staticClass:\"text-center font-bold mb-2\"},[_vm._v(\"STEP 2\")]),_vm._m(1),_c('div',{staticClass:\"mb-20 max-w-3xl w-full mx-auto\"},[_c('div',{staticClass:\"font-medium text-2xl text-center mb-4\"},[_vm._v(\"What states does your business operate in?\")]),_c('div',{staticClass:\"relative\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.form.availability.states),expression:\"form.availability.states\"}],staticClass:\"floating-input-lg\",attrs:{\"required\":\"\",\"id\":\"states-input\",\"placeholder\":\" \",\"type\":\"text\"},domProps:{\"value\":(_vm.form.availability.states)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.form.availability, \"states\", $event.target.value)}}}),_c('label',{attrs:{\"for\":\"states-input\"}},[_vm._v(\"List states (separate with commas)...\")])])]),_c('div',{staticClass:\"mb-20 max-w-3xl w-full mx-auto\"},[_c('div',{staticClass:\"font-medium text-2xl text-center mb-4\"},[_vm._v(\"What ZIP codes does \"+_vm._s(_vm.form.details.name)+\" service?\")]),_c('div',{staticClass:\"relative\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.form.availability.areas),expression:\"form.availability.areas\"}],staticClass:\"floating-input-lg\",attrs:{\"required\":\"\",\"id\":\"zips-input\",\"placeholder\":\" \",\"type\":\"text\"},domProps:{\"value\":(_vm.form.availability.areas)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.form.availability, \"areas\", $event.target.value)}}}),_c('label',{attrs:{\"for\":\"zips-input\"}},[_vm._v(\"List ZIP codes (separate with commas)...\")])])]),_c('div',{staticClass:\"mb-20 max-w-3xl w-full mx-auto\"},[_c('div',{staticClass:\"font-medium text-2xl text-center mb-4\"},[_vm._v(\"When are you available?\")]),_c('div',{staticClass:\"flex justify-center gap-4\"},[_c('div',{staticClass:\"shadow-md flex gap-2 items-center cursor-pointer transition duration-150 ease-in-out font-medium rounded px-4 py-3 text-lg\",class:{ 'bg-blue-900 hover:bg-blue-800 text-white': _vm.form.availability.timesAvailable.includes('Weekdays'), 'bg-gray-200 hover:bg-gray-300': !_vm.form.availability.timesAvailable.includes('Weekdays') },on:{\"click\":function($event){_vm.form.availability.timesAvailable = _vm.toggleArrayElement(_vm.form.availability.timesAvailable, 'Weekdays')}}},[(_vm.form.availability.timesAvailable.includes('Weekdays'))?_c('img',{staticClass:\"h-6\",attrs:{\"src\":\"https://img.icons8.com/ios-glyphs/30/ffffff/checked-checkbox.png\"}}):_c('img',{staticClass:\"h-6\",attrs:{\"src\":\"https://img.icons8.com/ios-filled/50/000000/unchecked-checkbox.png\"}}),_vm._v(\" Weekdays \")]),_c('div',{staticClass:\"shadow-md flex gap-2 items-center cursor-pointer transition duration-150 ease-in-out font-medium rounded px-4 py-3 text-lg\",class:{ 'bg-blue-900 hover:bg-blue-800 text-white': _vm.form.availability.timesAvailable.includes('Weekends'), 'bg-gray-200 hover:bg-gray-300': !_vm.form.availability.timesAvailable.includes('Weekends') },on:{\"click\":function($event){_vm.form.availability.timesAvailable = _vm.toggleArrayElement(_vm.form.availability.timesAvailable, 'Weekends')}}},[(_vm.form.availability.timesAvailable.includes('Weekends'))?_c('img',{staticClass:\"h-6\",attrs:{\"src\":\"https://img.icons8.com/ios-glyphs/30/ffffff/checked-checkbox.png\"}}):_c('img',{staticClass:\"h-6\",attrs:{\"src\":\"https://img.icons8.com/ios-filled/50/000000/unchecked-checkbox.png\"}}),_vm._v(\" Weekends \")]),_c('div',{staticClass:\"shadow-md flex gap-2 items-center cursor-pointer transition duration-150 ease-in-out font-medium rounded px-4 py-3 text-lg\",class:{ 'bg-blue-900 hover:bg-blue-800 text-white': _vm.form.availability.timesAvailable.includes('Nights'), 'bg-gray-200 hover:bg-gray-300': !_vm.form.availability.timesAvailable.includes('Nights') },on:{\"click\":function($event){_vm.form.availability.timesAvailable = _vm.toggleArrayElement(_vm.form.availability.timesAvailable, 'Nights')}}},[(_vm.form.availability.timesAvailable.includes('Nights'))?_c('img',{staticClass:\"h-6\",attrs:{\"src\":\"https://img.icons8.com/ios-glyphs/30/ffffff/checked-checkbox.png\"}}):_c('img',{staticClass:\"h-6\",attrs:{\"src\":\"https://img.icons8.com/ios-filled/50/000000/unchecked-checkbox.png\"}}),_vm._v(\" Nights \")])])]),_c('div',{staticClass:\"max-w-3xl w-full mx-auto mb-24\"},[_c('div',{staticClass:\"font-medium text-2xl text-center mb-4\"},[_vm._v(\"How many employees does \"+_vm._s(_vm.form.details.name)+\" have?\")]),_c('div',{staticClass:\"flex flex-wrap justify-center gap-4\"},_vm._l((['None', '1', '2 - 5', '5 - 10', '11 - 25', '25+']),function(option){return _c('div',{key:option,staticClass:\"shadow-md flex gap-2 items-center cursor-pointer transition duration-150 ease-in-out font-medium rounded px-4 py-3 text-lg\",class:{ 'bg-blue-900 hover:bg-blue-800 text-white': _vm.form.availability.employees == option, 'bg-gray-200 hover:bg-gray-300': !(_vm.form.availability.employees == option) },on:{\"click\":function($event){_vm.form.availability.employees = option}}},[_vm._v(\" \"+_vm._s(option)+\" \")])}),0)]),_c('div',{staticClass:\"flex justify-center gap-2\"},[_c('button',{staticClass:\"text-2xl py-3 px-8 bg-black hover:bg-gray-900 text-white transition ease-in duration-200 text-center text-base font-semibold shadow-md focus:outline-none rounded-lg\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){_vm.state.step--}}},[_vm._v(\" Back \")]),_c('button',{staticClass:\"text-2xl py-3 px-8 bg-blue-900 hover:bg-blue-700 text-white transition ease-in duration-200 text-center text-base font-semibold shadow-md focus:outline-none rounded-lg\",attrs:{\"type\":\"submit\"}},[_vm._v(\" Next \")])])]):_vm._e(),(_vm.state.step == 3)?_c('div',{staticClass:\"w-full\"},[_c('div',{staticClass:\"text-center font-bold mb-2\"},[_vm._v(\"STEP 3\")]),_c('div',{staticClass:\"text-center text-4xl font-bold mb-24\"},[_vm._v(\"Business License & Insurance\")]),_c('div',{staticClass:\"max-w-3xl w-full mx-auto mb-20\"},[_c('div',{staticClass:\"font-medium text-2xl text-center mb-4\"},[_vm._v(\"Do your business have and/or need a license to operate?\")]),_c('div',{staticClass:\"flex flex-wrap justify-center gap-4\"},[_c('div',{staticClass:\"shadow-md flex gap-2 items-center cursor-pointer transition duration-150 ease-in-out font-medium rounded px-4 py-3 text-lg\",class:{ 'bg-blue-900 hover:bg-blue-800 text-white': _vm.form.insurance.hasLicense, 'bg-gray-200 hover:bg-gray-300': !(_vm.form.insurance.hasLicense) },on:{\"click\":function($event){_vm.form.insurance.hasLicense = true}}},[_vm._v(\" Yes \")]),_c('div',{staticClass:\"shadow-md flex gap-2 items-center cursor-pointer transition duration-150 ease-in-out font-medium rounded px-4 py-3 text-lg\",class:{ 'bg-blue-900 hover:bg-blue-800 text-white': !_vm.form.insurance.hasLicense, 'bg-gray-200 hover:bg-gray-300': (_vm.form.insurance.hasLicense) },on:{\"click\":function($event){_vm.form.insurance.hasLicense = false}}},[_vm._v(\" No \")])])]),_c('div',{staticClass:\"max-w-3xl w-full mx-auto mb-20\"},[_c('div',{staticClass:\"font-medium text-2xl text-center mb-4\"},[_vm._v(\"Do you have General Liability insurance?\")]),_c('div',{staticClass:\"flex flex-wrap justify-center gap-4\"},[_c('div',{staticClass:\"shadow-md flex gap-2 items-center cursor-pointer transition duration-150 ease-in-out font-medium rounded px-4 py-3 text-lg\",class:{ 'bg-blue-900 hover:bg-blue-800 text-white': _vm.form.insurance.hasGeneralLiability, 'bg-gray-200 hover:bg-gray-300': !(_vm.form.insurance.hasGeneralLiability) },on:{\"click\":function($event){_vm.form.insurance.hasGeneralLiability = true}}},[_vm._v(\" Yes \")]),_c('div',{staticClass:\"shadow-md flex gap-2 items-center cursor-pointer transition duration-150 ease-in-out font-medium rounded px-4 py-3 text-lg\",class:{ 'bg-blue-900 hover:bg-blue-800 text-white': !_vm.form.insurance.hasGeneralLiability, 'bg-gray-200 hover:bg-gray-300': (_vm.form.insurance.hasGeneralLiability) },on:{\"click\":function($event){_vm.form.insurance.hasGeneralLiability = false}}},[_vm._v(\" No \")])])]),_c('div',{staticClass:\"max-w-3xl w-full mx-auto mb-28\"},[_c('div',{staticClass:\"font-medium text-2xl text-center mb-4\"},[_vm._v(\"Do you have Workers Comp insurance?\")]),_c('div',{staticClass:\"flex flex-wrap justify-center gap-4\"},[_c('div',{staticClass:\"shadow-md flex gap-2 items-center cursor-pointer transition duration-150 ease-in-out font-medium rounded px-4 py-3 text-lg\",class:{ 'bg-blue-900 hover:bg-blue-800 text-white': _vm.form.insurance.hasWorkersComp, 'bg-gray-200 hover:bg-gray-300': !(_vm.form.insurance.hasWorkersComp) },on:{\"click\":function($event){_vm.form.insurance.hasWorkersComp = true}}},[_vm._v(\" Yes \")]),_c('div',{staticClass:\"shadow-md flex gap-2 items-center cursor-pointer transition duration-150 ease-in-out font-medium rounded px-4 py-3 text-lg\",class:{ 'bg-blue-900 hover:bg-blue-800 text-white': !_vm.form.insurance.hasWorkersComp, 'bg-gray-200 hover:bg-gray-300': (_vm.form.insurance.hasWorkersComp) },on:{\"click\":function($event){_vm.form.insurance.hasWorkersComp = false}}},[_vm._v(\" No \")])])]),_c('div',{staticClass:\"flex justify-center gap-2\"},[_c('button',{staticClass:\"text-2xl py-3 px-8 bg-black hover:bg-gray-900 text-white transition ease-in duration-200 text-center text-base font-semibold shadow-md focus:outline-none rounded-lg\",on:{\"click\":function($event){_vm.state.step--}}},[_vm._v(\" Back \")]),_c('button',{staticClass:\"text-2xl py-3 px-8 bg-blue-900 hover:bg-blue-700 text-white transition ease-in duration-200 text-center text-base font-semibold shadow-md focus:outline-none rounded-lg\",on:{\"click\":function($event){_vm.state.step++}}},[_vm._v(\" Next \")])])]):_vm._e(),(_vm.state.step == 4)?_c('div',{staticClass:\"w-full\"},[_c('div',{staticClass:\"text-center font-bold mb-2\"},[_vm._v(\"STEP 4\")]),_c('div',{staticClass:\"text-center text-4xl font-bold mb-24\"},[_vm._v(\"Upload License & Insurance\")]),((!_vm.form.insurance.hasGeneralLiability && !_vm.form.insurance.hasWorkersComp && !_vm.form.insurance.hasLicense))?_c('div',[_c('div',{staticClass:\"text-xl text-center mb-6\"},[_vm._v(\" In order to process your request we require servicers to have and maintain General Liability Insurance and Workers Comp insurance. \")]),_c('div',{staticClass:\"text-xl text-center mb-24\"},[_vm._v(\" You may continue to proceed with your request. Please note a Homeplan representative will ask for you to provide this information. \")])]):_vm._e(),(_vm.form.insurance.hasLicense)?_c('div',{staticClass:\"max-w-3xl w-full mx-auto mb-20\"},[_c('div',{staticClass:\"font-medium text-2xl text-center mb-4\"},[_vm._v(\"Upload your license\")]),_c('file-pond',{ref:\"license-pond\",attrs:{\"class-name\":\"my-pond\",\"name\":\"logo\",\"label-idle\":\"Drag and drop your document or Browse.\",\"allow-multiple\":false,\"accepted-file-types\":\"application/pdf, text/plain, image/png, image/jpeg, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\"files\":_vm.logos,\"allowRevert\":false,\"labelTapToUndo\":\"\",\"allow-file-type-validation\":\"true\",\"allowImagePreview\":true,\"allowImageCrop\":true}})],1):_vm._e(),(_vm.form.insurance.hasGeneralLiability)?_c('div',{staticClass:\"max-w-3xl w-full mx-auto mb-20\"},[_c('div',{staticClass:\"font-medium text-2xl text-center mb-4\"},[_vm._v(\"Upload your General Liability insurance\")]),_c('file-pond',{ref:\"general-liability-pond\",attrs:{\"class-name\":\"my-pond\",\"name\":\"logo\",\"label-idle\":\"Drag and drop your document or Browse.\",\"allow-multiple\":false,\"accepted-file-types\":\"application/pdf, text/plain, image/png, image/jpeg, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\"files\":_vm.logos,\"allowRevert\":false,\"labelTapToUndo\":\"\",\"allow-file-type-validation\":\"true\",\"allowImagePreview\":true,\"allowImageCrop\":true}})],1):_vm._e(),(_vm.form.insurance.hasWorkersComp)?_c('div',{staticClass:\"max-w-3xl w-full mx-auto mb-28\"},[_c('div',{staticClass:\"font-medium text-2xl text-center mb-4\"},[_vm._v(\"Upload your Workers Comp insurance\")]),_c('file-pond',{ref:\"workers-pond\",attrs:{\"class-name\":\"my-pond\",\"name\":\"logo\",\"label-idle\":\"Drag and drop your document or Browse.\",\"allow-multiple\":false,\"accepted-file-types\":\"application/pdf, text/plain, image/png, image/jpeg, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\"files\":_vm.logos,\"allowRevert\":false,\"labelTapToUndo\":\"\",\"allow-file-type-validation\":\"true\",\"allowImagePreview\":true,\"allowImageCrop\":true}})],1):_vm._e(),_c('div',{staticClass:\"flex justify-center gap-2\"},[_c('button',{staticClass:\"text-2xl py-3 px-8 bg-black hover:bg-gray-900 text-white transition ease-in duration-200 text-center text-base font-semibold shadow-md focus:outline-none rounded-lg\",on:{\"click\":function($event){_vm.state.step--}}},[_vm._v(\" Back \")]),_c('button',{staticClass:\"text-2xl py-3 px-8 bg-blue-900 hover:bg-blue-700 text-white transition ease-in duration-200 text-center text-base font-semibold shadow-md focus:outline-none rounded-lg\",on:{\"click\":_vm.completeStepFour}},[_vm._v(\" Next \")])])]):_vm._e(),(_vm.state.step == 5)?_c('div',{staticClass:\"w-full\"},[_c('div',{staticClass:\"text-center font-bold mb-2\"},[_vm._v(\"STEP 5\")]),_c('div',{staticClass:\"text-center text-4xl font-bold mb-24\"},[_vm._v(\"BBB and Online Reviews\")]),_c('div',{staticClass:\"max-w-3xl w-full mx-auto mb-20\"},[_c('div',{staticClass:\"font-medium text-2xl text-center mb-4\"},[_vm._v(\"Does your business have a Better Business Bureau (BBB) account?\")]),_c('div',{staticClass:\"flex flex-wrap justify-center gap-4\"},[_c('div',{staticClass:\"shadow-md flex gap-2 items-center cursor-pointer transition duration-150 ease-in-out font-medium rounded px-4 py-3 text-lg\",class:{ 'bg-blue-900 hover:bg-blue-800 text-white': _vm.form.reviews.bbb, 'bg-gray-200 hover:bg-gray-300': !(_vm.form.reviews.bbb) },on:{\"click\":function($event){_vm.form.reviews.bbb = true}}},[_vm._v(\" Yes \")]),_c('div',{staticClass:\"shadow-md flex gap-2 items-center cursor-pointer transition duration-150 ease-in-out font-medium rounded px-4 py-3 text-lg\",class:{ 'bg-blue-900 hover:bg-blue-800 text-white': !_vm.form.reviews.bbb, 'bg-gray-200 hover:bg-gray-300': (_vm.form.reviews.bbb) },on:{\"click\":function($event){_vm.form.reviews.bbb = false}}},[_vm._v(\" No \")])])]),(_vm.form.reviews.bbb)?_c('div',{staticClass:\"mb-20 max-w-3xl w-full mx-auto\"},[_c('div',{staticClass:\"font-medium text-2xl text-center mb-4\"},[_vm._v(\"Please enter your Better Business Bureau (BBB) page URL\")]),_c('div',{staticClass:\"relative\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.form.reviews.bbbLink),expression:\"form.reviews.bbbLink\"}],staticClass:\"floating-input-lg\",attrs:{\"required\":\"\",\"id\":\"bbb-input\",\"placeholder\":\" \",\"type\":\"address\"},domProps:{\"value\":(_vm.form.reviews.bbbLink)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.form.reviews, \"bbbLink\", $event.target.value)}}}),_c('label',{attrs:{\"for\":\"bbb-input\"}},[_vm._v(\"Enter Better Business Bureau (BBB) page URL...\")])])]):_vm._e(),_c('div',{staticClass:\"max-w-3xl w-full mx-auto mb-20\"},[_c('div',{staticClass:\"font-medium text-2xl text-center mb-4\"},[_vm._v(\"Does your business have Google reviews?\")]),_c('div',{staticClass:\"flex flex-wrap justify-center gap-4\"},[_c('div',{staticClass:\"shadow-md flex gap-2 items-center cursor-pointer transition duration-150 ease-in-out font-medium rounded px-4 py-3 text-lg\",class:{ 'bg-blue-900 hover:bg-blue-800 text-white': _vm.form.reviews.google, 'bg-gray-200 hover:bg-gray-300': !(_vm.form.reviews.google) },on:{\"click\":function($event){_vm.form.reviews.google = true}}},[_vm._v(\" Yes \")]),_c('div',{staticClass:\"shadow-md flex gap-2 items-center cursor-pointer transition duration-150 ease-in-out font-medium rounded px-4 py-3 text-lg\",class:{ 'bg-blue-900 hover:bg-blue-800 text-white': !_vm.form.reviews.google, 'bg-gray-200 hover:bg-gray-300': (_vm.form.reviews.google) },on:{\"click\":function($event){_vm.form.reviews.google = false}}},[_vm._v(\" No \")])])]),(_vm.form.reviews.google)?_c('div',{staticClass:\"mb-20 max-w-3xl w-full mx-auto\"},[_c('div',{staticClass:\"font-medium text-2xl text-center mb-4\"},[_vm._v(\"Please enter your Google reviews page URL\")]),_c('div',{staticClass:\"relative\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.form.reviews.googleLink),expression:\"form.reviews.googleLink\"}],staticClass:\"floating-input-lg\",attrs:{\"required\":\"\",\"id\":\"google-input\",\"placeholder\":\" \",\"type\":\"address\"},domProps:{\"value\":(_vm.form.reviews.googleLink)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.form.reviews, \"googleLink\", $event.target.value)}}}),_c('label',{attrs:{\"for\":\"google-input\"}},[_vm._v(\"Enter Google reviews page URL...\")])])]):_vm._e(),_c('div',{staticClass:\"max-w-3xl w-full mx-auto mb-20\"},[_c('div',{staticClass:\"font-medium text-2xl text-center mb-4\"},[_vm._v(\"Does your business have Yelp reviews?\")]),_c('div',{staticClass:\"flex flex-wrap justify-center gap-4\"},[_c('div',{staticClass:\"shadow-md flex gap-2 items-center cursor-pointer transition duration-150 ease-in-out font-medium rounded px-4 py-3 text-lg\",class:{ 'bg-blue-900 hover:bg-blue-800 text-white': _vm.form.reviews.yelp, 'bg-gray-200 hover:bg-gray-300': !(_vm.form.reviews.yelp) },on:{\"click\":function($event){_vm.form.reviews.yelp = true}}},[_vm._v(\" Yes \")]),_c('div',{staticClass:\"shadow-md flex gap-2 items-center cursor-pointer transition duration-150 ease-in-out font-medium rounded px-4 py-3 text-lg\",class:{ 'bg-blue-900 hover:bg-blue-800 text-white': !_vm.form.reviews.yelp, 'bg-gray-200 hover:bg-gray-300': (_vm.form.reviews.yelp) },on:{\"click\":function($event){_vm.form.reviews.yelp = false}}},[_vm._v(\" No \")])])]),(_vm.form.reviews.yelp)?_c('div',{staticClass:\"mb-20 max-w-3xl w-full mx-auto\"},[_c('div',{staticClass:\"font-medium text-2xl text-center mb-4\"},[_vm._v(\"Please enter your Yelp reviews page URL\")]),_c('div',{staticClass:\"relative\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.form.reviews.yelpLink),expression:\"form.reviews.yelpLink\"}],staticClass:\"floating-input-lg\",attrs:{\"required\":\"\",\"id\":\"yelp-input\",\"placeholder\":\" \",\"type\":\"address\"},domProps:{\"value\":(_vm.form.reviews.yelpLink)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.form.reviews, \"yelpLink\", $event.target.value)}}}),_c('label',{attrs:{\"for\":\"yelp-input\"}},[_vm._v(\"Enter Yelp reviews page URL...\")])])]):_vm._e(),_c('div',{staticClass:\"flex justify-center gap-2\"},[_c('button',{staticClass:\"text-2xl py-3 px-8 bg-black hover:bg-gray-900 text-white transition ease-in duration-200 text-center text-base font-semibold shadow-md focus:outline-none rounded-lg\",on:{\"click\":function($event){_vm.state.step--}}},[_vm._v(\" Back \")]),_c('button',{staticClass:\"text-2xl py-3 px-8 bg-blue-900 hover:bg-blue-700 text-white transition ease-in duration-200 text-center text-base font-semibold shadow-md focus:outline-none rounded-lg\",on:{\"click\":function($event){_vm.state.step++}}},[_vm._v(\" Next \")])])]):_vm._e(),(_vm.state.step == 6)?_c('div',{staticClass:\"w-full\"},[_c('div',{staticClass:\"text-center font-bold mb-2\"},[_vm._v(\"STEP 6\")]),_vm._m(2),_c('div',{staticClass:\"font-medium text-center text-2xl mb-4\"},[_vm._v(\"Select the categories that your business provides services in.\")]),_c('div',{staticClass:\"grid grid-cols-4 gap-4 mb-20\"},_vm._l((_vm.serviceCategories),function(category){return _c('div',{key:category,staticClass:\"cursor-pointer hover:bg-gray-100 hover:text-gray-800 transition duration-200 ease-in-out flex items-center text-xl font-semibold justify-center border-2 border-gray-200 shadow-sm p-4 rounded-lg h-24\",class:{ 'text-hp-white bg-blue-900 hover:bg-blue-700 hover:text-hp-white': _vm.form.categories.includes(category), 'bg-hp-white': !_vm.form.categories.includes(category) },on:{\"click\":function($event){return _vm.toggleCategory(category)}}},[_vm._v(\" \"+_vm._s(category)+\" \")])}),0),_c('div',{staticClass:\"flex justify-center gap-2\"},[_c('button',{staticClass:\"text-2xl py-3 px-8 bg-black hover:bg-gray-900 text-white transition ease-in duration-200 text-center text-base font-semibold shadow-md focus:outline-none rounded-lg\",on:{\"click\":function($event){_vm.state.step--}}},[_vm._v(\" Back \")]),_c('button',{staticClass:\"text-2xl py-3 px-8 bg-blue-900 hover:bg-blue-700 text-white transition ease-in duration-200 text-center text-base font-semibold shadow-md focus:outline-none rounded-lg\",on:{\"click\":_vm.completeStepSix}},[_vm._v(\" Next \")])])]):_vm._e(),(_vm.state.step == 7)?_c('div',{staticClass:\"w-full\"},[_c('div',{staticClass:\"text-center font-bold mb-2\"},[_vm._v(\"STEP 7\")]),_c('div',{staticClass:\"text-center text-4xl font-bold mb-4\"},[_vm._v(\"Servicer agreement\")]),(_vm.state.isLoading)?_c('div',{staticClass:\"py-56 flex flex-col gap-8 items-center justify-center\"},[_c('img',{staticClass:\"animate-spin h-10 w-10\",attrs:{\"src\":\"https://img.icons8.com/ios/50/000000/iphone-spinner--v1.png\"}}),_c('div',{staticClass:\"font-medium text-center text-xl text-center\"},[_vm._v(\"Loading servicer agreement\")])]):_c('div',[_c('div',{staticClass:\"font-medium text-center text-2xl mb-4\"},[_vm._v(\" Please carefully read through and sign our servicer agreement. A six-digit code has been sent to your email. Please enter this code at the end of the document. \")]),_c('iframe',{staticClass:\"my-12 border-1 border-gray-300 shadow-md\",staticStyle:{\"width\":\"1px\",\"min-width\":\"100%\",\"height\":\"50vh\"},attrs:{\"src\":_vm.contractLink,\"id\":\"eSignaturesIOIframe\",\"onload\":\"iFrameResize({heightCalculationMethod: 'bodyScroll'}, '#eSignaturesIOIframe')\"}}),_c('div',{staticClass:\"flex justify-center gap-2\"},[_c('button',{staticClass:\"text-2xl py-3 px-8 bg-black hover:bg-gray-900 text-white transition ease-in duration-200 text-center text-base font-semibold shadow-md focus:outline-none rounded-lg\",on:{\"click\":function($event){_vm.state.step--}}},[_vm._v(\" Back \")]),_c('button',{staticClass:\"text-2xl py-3 px-8 bg-blue-900 hover:bg-blue-700 text-white transition ease-in duration-200 text-center text-base font-semibold shadow-md focus:outline-none rounded-lg\",on:{\"click\":function($event){_vm.state.step++}}},[_vm._v(\" Continue \")])])])]):_vm._e(),(_vm.state.step == 8)?_c('div',{staticClass:\"w-full flex flex-col justify-center\"},[_c('div',{staticClass:\"text-center text-4xl font-bold mb-8\"},[_vm._v(\"Onboarding complete!\")]),_c('div',{staticClass:\"text-xl text-center mb-12\"},[_vm._v(\" Thank you for your interest in joining Homeplan. We'll email you with the next steps after reviewing your information. \")]),_c('router-link',{staticClass:\"text-2xl py-3 px-8 bg-blue-900 hover:bg-gray-900 text-white transition ease-in duration-200 text-center text-base font-semibold shadow-md focus:outline-none rounded-lg\",attrs:{\"to\":\"/\"}},[_vm._v(\" Return to home \")])],1):_vm._e()])]),_c('Footer')],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"text-center text-4xl font-bold mb-24\"},[_vm._v(\"Tell us about \"),_c('span',{staticClass:\"text-blue-900\"},[_vm._v(\"your business\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"text-center text-4xl font-bold mb-24\"},[_vm._v(\"What is your \"),_c('span',{staticClass:\"text-blue-900\"},[_vm._v(\"availability?\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"text-center text-4xl font-bold mb-20\"},[_vm._v(\"What \"),_c('span',{staticClass:\"text-blue-900\"},[_vm._v(\"services\")]),_vm._v(\" do you offer?\")])}]\n\nexport { render, staticRenderFns }","export const serviceCategories = [\n \"Architect\", \"Construction\", \"Deck and Porch\", \"Designer\", \"Doors\", \"Driveway\", \"Drywall\", \"Electrical\", \"Foundation\", \"Furnishing\", \"Garage\", \"HVAC\", \"Inspection\", \"Masonry\", \"Mold\", \"Painting\", \"Pest Control\", \"Plumbing\", \"Roof\", \"Sewer\", \"Trash\", \"Windows\"\n];","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","/*!\n * FilePondPluginFileValidateType 1.2.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\nconst plugin = ({ addFilter, utils }) => {\n // get quick reference to Type utils\n const {\n Type,\n isString,\n replaceInString,\n guesstimateMimeType,\n getExtensionFromFilename,\n getFilenameFromURL\n } = utils;\n\n const mimeTypeMatchesWildCard = (mimeType, wildcard) => {\n const mimeTypeGroup = (/^[^/]+/.exec(mimeType) || []).pop(); // image/png -> image\n const wildcardGroup = wildcard.slice(0, -2); // image/* -> image\n return mimeTypeGroup === wildcardGroup;\n };\n\n const isValidMimeType = (acceptedTypes, userInputType) =>\n acceptedTypes.some(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 const getItemType = item => {\n // if the item is a url we guess the mime type by the extension\n let type = '';\n if (isString(item)) {\n const filename = getFilenameFromURL(item);\n const 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 const validateFile = (item, acceptedFileTypes, typeDetector) => {\n // no types defined, everything is allowed \\o/\n if (acceptedFileTypes.length === 0) {\n return true;\n }\n\n // gets the item type\n const 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((resolve, reject) => {\n typeDetector(item, type)\n .then(detectedType => {\n if (isValidMimeType(acceptedFileTypes, detectedType)) {\n resolve();\n } else {\n reject();\n }\n })\n .catch(reject);\n });\n };\n\n const applyMimeTypeMap = map => acceptedFileType =>\n map[acceptedFileType] === null\n ? false\n : map[acceptedFileType] || acceptedFileType;\n\n // setup attribute mapping for accept\n addFilter('SET_ATTRIBUTE_TO_OPTION_MAP', map =>\n Object.assign(map, {\n accept: 'acceptedFileTypes'\n })\n );\n\n // filtering if an item is allowed in hopper\n addFilter('ALLOW_HOPPER_ITEM', (file, { 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(\n 'LOAD_FILE',\n (file, { query }) =>\n new Promise((resolve, reject) => {\n if (!query('GET_ALLOW_FILE_TYPE_VALIDATION')) {\n resolve(file);\n return;\n }\n\n const acceptedFileTypes = query('GET_ACCEPTED_FILE_TYPES');\n\n // custom type detector method\n const typeDetector = query('GET_FILE_VALIDATE_TYPE_DETECT_TYPE');\n\n // if invalid, exit here\n const validationResult = validateFile(\n file,\n acceptedFileTypes,\n typeDetector\n );\n\n const handleRejection = () => {\n const acceptedFileTypesMapped = acceptedFileTypes\n .map(\n applyMimeTypeMap(\n query('GET_FILE_VALIDATE_TYPE_LABEL_EXPECTED_TYPES_MAP')\n )\n )\n .filter(label => label !== false);\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.join(', '),\n allButLastType: acceptedFileTypesMapped\n .slice(0, -1)\n .join(', '),\n lastType:\n acceptedFileTypesMapped[acceptedFileTypesMapped.length - 1]\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(() => {\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\nconst isBrowser =\n typeof window !== 'undefined' && typeof window.document !== 'undefined';\nif (isBrowser) {\n document.dispatchEvent(\n new CustomEvent('FilePond:pluginloaded', { detail: plugin })\n );\n}\n\nexport default plugin;\n","/*!\n * FilePondPluginImagePreview 4.6.10\n * Licensed under MIT, https://opensource.org/licenses/MIT/\n * Please visit https://pqina.nl/filepond/ for details.\n */\n\n/* eslint-disable */\n\n// test if file is of type image and can be viewed in canvas\nconst isPreviewableImage = file => /^image/.test(file.type);\n\nconst vectorMultiply = (v, amount) => createVector(v.x * amount, v.y * amount);\n\nconst vectorAdd = (a, b) => createVector(a.x + b.x, a.y + b.y);\n\nconst vectorNormalize = v => {\n const 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\nconst vectorRotate = (v, radians, origin) => {\n const cos = Math.cos(radians);\n const sin = Math.sin(radians);\n const 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\nconst createVector = (x = 0, y = 0) => ({ x, y });\n\nconst getMarkupValue = (value, size, scalar = 1, axis) => {\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\nconst getMarkupStyles = (markup, size, scale) => {\n const lineStyle = markup.borderStyle || markup.lineStyle || 'solid';\n const fill = markup.backgroundColor || markup.fontColor || 'transparent';\n const stroke = markup.borderColor || markup.lineColor || 'transparent';\n const strokeWidth = getMarkupValue(\n markup.borderWidth || markup.lineWidth,\n size,\n scale\n );\n const lineCap = markup.lineCap || 'round';\n const lineJoin = markup.lineJoin || 'round';\n const dashes =\n typeof lineStyle === 'string'\n ? ''\n : lineStyle.map(v => getMarkupValue(v, size, scale)).join(',');\n const 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,\n fill,\n opacity\n };\n};\n\nconst isDefined = value => value != null;\n\nconst getMarkupRect = (rect, size, scalar = 1) => {\n let left =\n getMarkupValue(rect.x, size, scalar, 'width') ||\n getMarkupValue(rect.left, size, scalar, 'width');\n let top =\n getMarkupValue(rect.y, size, scalar, 'height') ||\n getMarkupValue(rect.top, size, scalar, 'height');\n let width = getMarkupValue(rect.width, size, scalar, 'width');\n let height = getMarkupValue(rect.height, size, scalar, 'height');\n let right = getMarkupValue(rect.right, size, scalar, 'width');\n let 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\nconst pointsToPathShape = points =>\n points\n .map((point, index) => `${index === 0 ? 'M' : 'L'} ${point.x} ${point.y}`)\n .join(' ');\n\nconst setAttributes = (element, attr) =>\n Object.keys(attr).forEach(key => element.setAttribute(key, attr[key]));\n\nconst ns = 'http://www.w3.org/2000/svg';\nconst svg = (tag, attr) => {\n const element = document.createElementNS(ns, tag);\n if (attr) {\n setAttributes(element, attr);\n }\n return element;\n};\n\nconst updateRect = element =>\n setAttributes(element, {\n ...element.rect,\n ...element.styles\n });\n\nconst updateEllipse = element => {\n const cx = element.rect.x + element.rect.width * 0.5;\n const cy = element.rect.y + element.rect.height * 0.5;\n const rx = element.rect.width * 0.5;\n const ry = element.rect.height * 0.5;\n return setAttributes(element, {\n cx,\n cy,\n rx,\n ry,\n ...element.styles\n });\n};\n\nconst IMAGE_FIT_STYLE = {\n contain: 'xMidYMid meet',\n cover: 'xMidYMid slice'\n};\n\nconst updateImage = (element, markup) => {\n setAttributes(element, {\n ...element.rect,\n ...element.styles,\n preserveAspectRatio: IMAGE_FIT_STYLE[markup.fit] || 'none'\n });\n};\n\nconst TEXT_ANCHOR = {\n left: 'start',\n center: 'middle',\n right: 'end'\n};\n\nconst updateText = (element, markup, size, scale) => {\n const fontSize = getMarkupValue(markup.fontSize, size, scale);\n const fontFamily = markup.fontFamily || 'sans-serif';\n const fontWeight = markup.fontWeight || 'normal';\n const textAlign = TEXT_ANCHOR[markup.textAlign] || 'start';\n\n setAttributes(element, {\n ...element.rect,\n ...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 // update text\n if (element.text !== markup.text) {\n element.text = markup.text;\n element.textContent = markup.text.length ? markup.text : ' ';\n }\n};\n\nconst updateLine = (element, markup, size, scale) => {\n setAttributes(element, {\n ...element.rect,\n ...element.styles,\n fill: 'none'\n });\n\n const line = element.childNodes[0];\n const begin = element.childNodes[1];\n const end = element.childNodes[2];\n\n const origin = element.rect;\n\n const 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 const v = vectorNormalize({\n x: target.x - origin.x,\n y: target.y - origin.y\n });\n\n const l = getMarkupValue(0.05, size, scale);\n\n if (markup.lineDecoration.indexOf('arrow-begin') !== -1) {\n const arrowBeginRotationPoint = vectorMultiply(v, l);\n const arrowBeginCenter = vectorAdd(origin, arrowBeginRotationPoint);\n const arrowBeginA = vectorRotate(origin, 2, arrowBeginCenter);\n const arrowBeginB = vectorRotate(origin, -2, arrowBeginCenter);\n\n setAttributes(begin, {\n style: 'display:block;',\n d: `M${arrowBeginA.x},${arrowBeginA.y} L${origin.x},${origin.y} L${\n arrowBeginB.x\n },${arrowBeginB.y}`\n });\n }\n\n if (markup.lineDecoration.indexOf('arrow-end') !== -1) {\n const arrowEndRotationPoint = vectorMultiply(v, -l);\n const arrowEndCenter = vectorAdd(target, arrowEndRotationPoint);\n const arrowEndA = vectorRotate(target, 2, arrowEndCenter);\n const arrowEndB = vectorRotate(target, -2, arrowEndCenter);\n\n setAttributes(end, {\n style: 'display:block;',\n d: `M${arrowEndA.x},${arrowEndA.y} L${target.x},${target.y} L${\n arrowEndB.x\n },${arrowEndB.y}`\n });\n }\n};\n\nconst updatePath = (element, markup, size, scale) => {\n setAttributes(element, {\n ...element.styles,\n fill: 'none',\n d: pointsToPathShape(\n markup.points.map(point => ({\n x: getMarkupValue(point.x, size, scale, 'width'),\n y: getMarkupValue(point.y, size, scale, 'height')\n }))\n )\n });\n};\n\nconst createShape = node => markup => svg(node, { id: markup.id });\n\nconst createImage = markup => {\n const shape = svg('image', {\n id: markup.id,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n opacity: '0'\n });\n shape.onload = () => {\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\nconst createLine = markup => {\n const shape = svg('g', {\n id: markup.id,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round'\n });\n\n const line = svg('line');\n shape.appendChild(line);\n\n const begin = svg('path');\n shape.appendChild(begin);\n\n const end = svg('path');\n shape.appendChild(end);\n\n return shape;\n};\n\nconst 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\nconst UPDATE_TYPE_ROUTES = {\n rect: updateRect,\n ellipse: updateEllipse,\n image: updateImage,\n text: updateText,\n path: updatePath,\n line: updateLine\n};\n\nconst createMarkupByType = (type, markup) => CREATE_TYPE_ROUTES[type](markup);\n\nconst updateMarkupByType = (element, type, markup, size, scale) => {\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\nconst MARKUP_RECT = [\n 'x',\n 'y',\n 'left',\n 'top',\n 'right',\n 'bottom',\n 'width',\n 'height'\n];\n\nconst toOptionalFraction = value =>\n typeof value === 'string' && /%/.test(value)\n ? parseFloat(value) / 100\n : value;\n\n// adds default markup properties, clones markup\nconst prepareMarkup = markup => {\n const [type, props] = markup;\n\n const rect = props.points\n ? {}\n : MARKUP_RECT.reduce((prev, curr) => {\n prev[curr] = toOptionalFraction(props[curr]);\n return prev;\n }, {});\n\n return [\n type,\n {\n zIndex: 0,\n ...props,\n ...rect\n }\n ];\n};\n\nconst 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\nconst createMarkupView = _ =>\n _.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 write: ({ root, props }) => {\n if (!props.dirty) return;\n\n const { crop, resize, markup } = props;\n\n const viewWidth = props.width;\n const viewHeight = props.height;\n\n let cropWidth = crop.width;\n let cropHeight = crop.height;\n\n if (resize) {\n const { size } = resize;\n\n let outputWidth = size && size.width;\n let outputHeight = size && size.height;\n const outputFit = resize.mode;\n const outputUpscale = resize.upscale;\n\n if (outputWidth && !outputHeight) outputHeight = outputWidth;\n if (outputHeight && !outputWidth) outputWidth = outputHeight;\n\n const shouldUpscale =\n cropWidth < outputWidth && cropHeight < outputHeight;\n\n if (!shouldUpscale || (shouldUpscale && outputUpscale)) {\n let scalarWidth = outputWidth / cropWidth;\n let scalarHeight = outputHeight / cropHeight;\n\n if (outputFit === 'force') {\n cropWidth = outputWidth;\n cropHeight = outputHeight;\n } else {\n let 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 const 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 const scale = Math.min(viewWidth / cropWidth, viewHeight / cropHeight);\n\n // clear\n root.element.innerHTML = '';\n\n // get filter\n const 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(markup => {\n const [type, settings] = markup;\n\n // create\n const 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\nconst createVector$1 = (x, y) => ({ x, y });\n\nconst vectorDot = (a, b) => a.x * b.x + a.y * b.y;\n\nconst vectorSubtract = (a, b) => createVector$1(a.x - b.x, a.y - b.y);\n\nconst vectorDistanceSquared = (a, b) =>\n vectorDot(vectorSubtract(a, b), vectorSubtract(a, b));\n\nconst vectorDistance = (a, b) => Math.sqrt(vectorDistanceSquared(a, b));\n\nconst getOffsetPointOnEdge = (length, rotation) => {\n const a = length;\n\n const A = 1.5707963267948966;\n const B = rotation;\n const C = 1.5707963267948966 - rotation;\n\n const sinA = Math.sin(A);\n const sinB = Math.sin(B);\n const sinC = Math.sin(C);\n const cosC = Math.cos(C);\n const ratio = a / sinA;\n const b = ratio * sinB;\n const c = ratio * sinC;\n\n return createVector$1(cosC * b, cosC * c);\n};\n\nconst getRotatedRectSize = (rect, rotation) => {\n const w = rect.width;\n const h = rect.height;\n\n const hor = getOffsetPointOnEdge(w, rotation);\n const ver = getOffsetPointOnEdge(h, rotation);\n\n const tl = createVector$1(rect.x + Math.abs(hor.x), rect.y - Math.abs(hor.y));\n\n const tr = createVector$1(\n rect.x + rect.width + Math.abs(ver.y),\n rect.y + Math.abs(ver.x)\n );\n\n const 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\nconst calculateCanvasSize = (image, canvasAspectRatio, zoom = 1) => {\n const imageAspectRatio = image.height / image.width;\n\n // determine actual pixels on x and y axis\n let canvasWidth = 1;\n let canvasHeight = canvasAspectRatio;\n let imgWidth = 1;\n let imgHeight = imageAspectRatio;\n if (imgHeight > canvasHeight) {\n imgHeight = canvasHeight;\n imgWidth = imgHeight / imageAspectRatio;\n }\n\n const scalar = Math.max(canvasWidth / imgWidth, canvasHeight / imgHeight);\n const width = image.width / (zoom * scalar * imgWidth);\n const height = width * canvasAspectRatio;\n\n return {\n width: width,\n height: height\n };\n};\n\nconst getImageRectZoomFactor = (imageRect, cropRect, rotation, center) => {\n // calculate available space round image center position\n const cx = center.x > 0.5 ? 1 - center.x : center.x;\n const cy = center.y > 0.5 ? 1 - center.y : center.y;\n const imageWidth = cx * 2 * imageRect.width;\n const imageHeight = cy * 2 * imageRect.height;\n\n // calculate rotated crop rectangle size\n const 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\nconst getCenteredCropRect = (container, aspectRatio) => {\n let width = container.width;\n let height = width * aspectRatio;\n if (height > container.height) {\n height = container.height;\n width = height / aspectRatio;\n }\n const x = (container.width - width) * 0.5;\n const y = (container.height - height) * 0.5;\n\n return {\n x,\n y,\n width,\n height\n };\n};\n\nconst getCurrentCropSize = (imageSize, crop = {}) => {\n let { zoom, rotation, center, aspectRatio } = crop;\n\n if (!aspectRatio) aspectRatio = imageSize.height / imageSize.width;\n\n const canvasSize = calculateCanvasSize(imageSize, aspectRatio, zoom);\n\n const canvasCenter = {\n x: canvasSize.width * 0.5,\n y: canvasSize.height * 0.5\n };\n\n const stage = {\n x: 0,\n y: 0,\n width: canvasSize.width,\n height: canvasSize.height,\n center: canvasCenter\n };\n\n const shouldLimit = typeof crop.scaleToFit === 'undefined' || crop.scaleToFit;\n\n const stageZoomFactor = getImageRectZoomFactor(\n imageSize,\n getCenteredCropRect(stage, aspectRatio),\n rotation,\n shouldLimit ? center : { x: 0.5, y: 0.5 }\n );\n\n const 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\nconst 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\nconst createBitmapView = _ =>\n _.utils.createView({\n name: 'image-bitmap',\n ignoreRect: true,\n mixins: { styles: ['scaleX', 'scaleY'] },\n create: ({ root, props }) => {\n root.appendChild(props.image);\n }\n });\n\n// shifts and rotates image\nconst createImageCanvasWrapper = _ =>\n _.utils.createView({\n name: 'image-canvas-wrapper',\n tag: 'div',\n ignoreRect: true,\n mixins: {\n apis: ['crop', 'width', 'height'],\n styles: [\n 'originX',\n 'originY',\n 'translateX',\n 'translateY',\n 'scaleX',\n 'scaleY',\n 'rotateZ'\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 create: ({ root, 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: ({ root, props }) => {\n const { flip } = props.crop;\n const { bitmap } = root.ref;\n bitmap.scaleX = flip.horizontal ? -1 : 1;\n bitmap.scaleY = flip.vertical ? -1 : 1;\n }\n });\n\n// clips canvas to correct aspect ratio\nconst createClipView = _ =>\n _.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 styles: ['width', 'height', 'opacity'],\n animations: {\n opacity: { type: 'tween', duration: 250 }\n }\n },\n didWriteView: function({ root, props }) {\n if (!props.background) return;\n root.element.style.backgroundColor = props.background;\n },\n create: ({ root, props }) => {\n root.ref.image = root.appendChildView(\n root.createChildView(\n createImageCanvasWrapper(_),\n Object.assign({}, props)\n )\n );\n\n root.ref.createMarkup = () => {\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 = () => {\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 const 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: ({ root, props, shouldOptimize }) => {\n const { crop, markup, resize, dirty, width, height } = props;\n\n root.ref.image.crop = crop;\n\n const stage = {\n x: 0,\n y: 0,\n width,\n height,\n center: {\n x: width * 0.5,\n y: height * 0.5\n }\n };\n\n const image = {\n width: root.ref.image.width,\n height: root.ref.image.height\n };\n\n const origin = {\n x: crop.center.x * image.width,\n y: crop.center.y * image.height\n };\n\n const translation = {\n x: stage.center.x - image.width * crop.center.x,\n y: stage.center.y - image.height * crop.center.y\n };\n\n const rotation = Math.PI * 2 + (crop.rotation % (Math.PI * 2));\n\n const cropAspectRatio = crop.aspectRatio || image.height / image.width;\n\n const shouldLimit =\n typeof crop.scaleToFit === 'undefined' || crop.scaleToFit;\n\n const stageZoomFactor = getImageRectZoomFactor(\n image,\n getCenteredCropRect(stage, cropAspectRatio),\n rotation,\n shouldLimit ? crop.center : { x: 0.5, y: 0.5 }\n );\n\n const 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 const 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\nconst createImageView = _ =>\n _.utils.createView({\n name: 'image-preview',\n tag: 'div',\n ignoreRect: true,\n mixins: {\n apis: ['image', 'crop', 'markup', 'resize', 'dirty', 'background'],\n styles: ['translateY', 'scaleX', 'scaleY', 'opacity'],\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 create: ({ root, 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: ({ root, props, shouldOptimize }) => {\n const { clip } = root.ref;\n\n const { image, crop, markup, resize, dirty } = props;\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 const imageAspectRatio = image.height / image.width;\n let aspectRatio = crop.aspectRatio || imageAspectRatio;\n\n // calculate container size\n const containerWidth = root.rect.inner.width;\n const containerHeight = root.rect.inner.height;\n\n let fixedPreviewHeight = root.query('GET_IMAGE_PREVIEW_HEIGHT');\n const minPreviewHeight = root.query('GET_IMAGE_PREVIEW_MIN_HEIGHT');\n const maxPreviewHeight = root.query('GET_IMAGE_PREVIEW_MAX_HEIGHT');\n\n const panelAspectRatio = root.query('GET_PANEL_ASPECT_RATIO');\n const 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 let clipHeight =\n fixedPreviewHeight !== null\n ? fixedPreviewHeight\n : Math.max(\n minPreviewHeight,\n Math.min(containerWidth * aspectRatio, maxPreviewHeight)\n );\n\n let 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\nlet SVG_MASK = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n`;\n\nlet SVGMaskUniqueId = 0;\n\nconst createImageOverlayView = fpAPI =>\n fpAPI.utils.createView({\n name: 'image-preview-overlay',\n tag: 'div',\n ignoreRect: true,\n create: ({ root, props }) => {\n let mask = SVG_MASK;\n if (document.querySelector('base')) {\n const url = window.location.href.replace(window.location.hash, '');\n mask = mask.replace(/url\\(\\#/g, 'url(' + url + '#');\n }\n\n SVGMaskUniqueId++;\n root.element.classList.add(\n `filepond--image-preview-overlay-${props.status}`\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 * Bitmap Worker\n */\nconst BitmapWorker = function() {\n self.onmessage = e => {\n createImageBitmap(e.data.message.file).then(bitmap => {\n self.postMessage({ id: e.data.id, message: bitmap }, [bitmap]);\n });\n };\n};\n\n/**\n * ColorMatrix Worker\n */\nconst ColorMatrixWorker = function() {\n self.onmessage = e => {\n const imageData = e.data.message.imageData;\n const matrix = e.data.message.colorMatrix;\n\n const data = imageData.data;\n const l = data.length;\n\n const m11 = matrix[0];\n const m12 = matrix[1];\n const m13 = matrix[2];\n const m14 = matrix[3];\n const m15 = matrix[4];\n\n const m21 = matrix[5];\n const m22 = matrix[6];\n const m23 = matrix[7];\n const m24 = matrix[8];\n const m25 = matrix[9];\n\n const m31 = matrix[10];\n const m32 = matrix[11];\n const m33 = matrix[12];\n const m34 = matrix[13];\n const m35 = matrix[14];\n\n const m41 = matrix[15];\n const m42 = matrix[16];\n const m43 = matrix[17];\n const m44 = matrix[18];\n const m45 = matrix[19];\n\n let 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\nconst getImageSize = (url, cb) => {\n let image = new Image();\n image.onload = () => {\n const width = image.naturalWidth;\n const height = image.naturalHeight;\n image = null;\n cb(width, height);\n };\n image.src = url;\n};\n\nconst transforms = {\n 1: () => [1, 0, 0, 1, 0, 0],\n 2: width => [-1, 0, 0, 1, width, 0],\n 3: (width, height) => [-1, 0, 0, -1, width, height],\n 4: (width, height) => [1, 0, 0, -1, 0, height],\n 5: () => [0, 1, 1, 0, 0, 0],\n 6: (width, height) => [0, 1, -1, 0, height, 0],\n 7: (width, height) => [0, -1, -1, 0, height, width],\n 8: width => [0, -1, 1, 0, 0, width]\n};\n\nconst fixImageOrientation = (ctx, width, height, orientation) => {\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\nconst createPreviewImage = (data, width, height, orientation) => {\n // can't draw on half pixels\n width = Math.round(width);\n height = Math.round(height);\n\n // draw image\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d');\n\n // if is rotated incorrectly swap width and height\n if (orientation >= 5 && orientation <= 8) {\n [width, height] = [height, width];\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\nconst isBitmap = file => /^image/.test(file.type) && !/svg/.test(file.type);\n\nconst MAX_WIDTH = 10;\nconst MAX_HEIGHT = 10;\n\nconst calculateAverageColor = image => {\n const scalar = Math.min(MAX_WIDTH / image.width, MAX_HEIGHT / image.height);\n\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const width = (canvas.width = Math.ceil(image.width * scalar));\n const height = (canvas.height = Math.ceil(image.height * scalar));\n ctx.drawImage(image, 0, 0, width, height);\n let data = null;\n try {\n data = ctx.getImageData(0, 0, width, height).data;\n } catch (e) {\n return null;\n }\n const l = data.length;\n\n let r = 0;\n let g = 0;\n let b = 0;\n let 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, g, b };\n};\n\nconst averageColor = (c, l) => Math.floor(Math.sqrt(c / (l / 4)));\n\nconst cloneCanvas = (origin, target) => {\n target = target || document.createElement('canvas');\n target.width = origin.width;\n target.height = origin.height;\n const ctx = target.getContext('2d');\n ctx.drawImage(origin, 0, 0);\n return target;\n};\n\nconst cloneImageData = imageData => {\n let id;\n try {\n id = new ImageData(imageData.width, imageData.height);\n } catch (e) {\n const canvas = document.createElement('canvas');\n const 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\nconst loadImage = url =>\n new Promise((resolve, reject) => {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onload = () => {\n resolve(img);\n };\n img.onerror = e => {\n reject(e);\n };\n img.src = url;\n });\n\nconst createImageWrapperView = _ => {\n // create overlay view\n const OverlayView = createImageOverlayView(_);\n\n const ImageView = createImageView(_);\n\n const { createWorker } = _.utils;\n\n const applyFilter = (root, filter, target) =>\n new Promise(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 const 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 const worker = createWorker(ColorMatrixWorker);\n worker.post(\n {\n imageData,\n colorMatrix: filter\n },\n 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 const 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 const shiftImage = ({ root }) => {\n const 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 const pushImage = ({ root, props, image }) => {\n const id = props.id;\n const item = root.query('GET_ITEM', { id });\n if (!item) return;\n\n const crop = item.getMetadata('crop') || {\n center: {\n x: 0.5,\n y: 0.5\n },\n flip: {\n horizontal: false,\n vertical: false\n },\n zoom: 1,\n rotation: 0,\n aspectRatio: null\n };\n\n const background = root.query(\n 'GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR'\n );\n\n let markup;\n let resize;\n let 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 const imageView = root.appendChildView(\n root.createChildView(ImageView, {\n id,\n image,\n crop,\n resize,\n markup,\n dirty,\n background,\n opacity: 0,\n scaleX: 1.15,\n scaleY: 1.15,\n translateY: 15\n }),\n root.childViews.length\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(() => {\n root.dispatch('DID_IMAGE_PREVIEW_SHOW', { id });\n }, 250);\n };\n\n const updateImage = ({ root, props }) => {\n const item = root.query('GET_ITEM', { id: props.id });\n if (!item) return;\n const imageView = root.ref.images[root.ref.images.length - 1];\n imageView.crop = item.getMetadata('crop');\n imageView.background = root.query(\n 'GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR'\n );\n if (root.query('GET_IMAGE_PREVIEW_MARKUP_SHOW')) {\n imageView.dirty = true;\n imageView.resize = item.getMetadata('resize');\n imageView.markup = item.getMetadata('markup');\n }\n };\n\n // replace image preview\n const didUpdateItemMetadata = ({ root, props, 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 const 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 const 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 const crop = item.getMetadata('crop');\n const 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 const imageView = shiftImage({ root });\n pushImage({ root, props, image: cloneCanvas(imageView.image) });\n }\n // if not, we can update the current image\n else {\n updateImage({ root, props });\n }\n }\n };\n\n const 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 const userAgent = window.navigator.userAgent;\n const isFirefox = userAgent.match(/Firefox\\/([0-9]+)\\./);\n const 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 const didCreatePreviewContainer = ({ root, props }) => {\n const { id } = props;\n\n // we need to get the file data to determine the eventual image size\n const 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 const fileURL = URL.createObjectURL(item.file);\n\n // determine image size of this item\n getImageSize(fileURL, (width, height) => {\n // we can now scale the panel to the final size\n root.dispatch('DID_IMAGE_PREVIEW_CALCULATE_SIZE', {\n id,\n width,\n height\n });\n });\n };\n\n const drawPreview = ({ root, props }) => {\n const { id } = props;\n\n // we need to get the file data to determine the eventual image size\n const 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 const fileURL = URL.createObjectURL(item.file);\n\n // fallback\n const loadPreviewFallback = () => {\n // let's scale the image in the main thread :(\n loadImage(fileURL).then(previewImageLoaded);\n };\n\n // image is now ready\n const 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 const exif = item.getMetadata('exif') || {};\n const orientation = exif.orientation || -1;\n\n // get width and height from action, and swap if orientation is incorrect\n let { width, height } = imageData;\n\n // if no width or height, just return early.\n if (!width || !height) return;\n\n if (orientation >= 5 && orientation <= 8) {\n [width, height] = [height, width];\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 const 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 const zoomFactor = root.query('GET_IMAGE_PREVIEW_ZOOM_FACTOR');\n\n // imaeg scale factor\n const scaleFactor = zoomFactor * pixelDensityFactor;\n\n // calculate scaled preview image size\n const previewImageRatio = height / width;\n\n // calculate image preview height and width\n const previewContainerWidth = root.rect.element.width;\n const previewContainerHeight = root.rect.element.height;\n\n let imageWidth = previewContainerWidth;\n let 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 const previewImage = createPreviewImage(\n imageData,\n imageWidth,\n imageHeight,\n orientation\n );\n\n // done\n const done = () => {\n // calculate average image color, disabled for now\n const 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, props, image: previewImage });\n };\n\n // apply filter\n const 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 const worker = createWorker(BitmapWorker);\n\n worker.post(\n {\n file: item.file\n },\n 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 const didDrawPreview = ({ root }) => {\n // get last added image\n const 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 const restoreOverlay = ({ root }) => {\n root.ref.overlayShadow.opacity = 1;\n root.ref.overlayError.opacity = 0;\n root.ref.overlaySuccess.opacity = 0;\n };\n\n const didThrowError = ({ root }) => {\n root.ref.overlayShadow.opacity = 0.25;\n root.ref.overlayError.opacity = 1;\n };\n\n const didCompleteProcessing = ({ root }) => {\n root.ref.overlayShadow.opacity = 0.25;\n root.ref.overlaySuccess.opacity = 1;\n };\n\n /**\n * Constructor\n */\n const create = ({ 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,\n styles: ['height'],\n apis: ['height'],\n destroy: ({ root }) => {\n // we resize the image so memory on iOS 12 is released more quickly (it seems)\n root.ref.images.forEach(imageView => {\n imageView.image.width = 1;\n imageView.image.height = 1;\n });\n },\n didWriteView: ({ root }) => {\n root.ref.images.forEach(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 ({ root }) => {\n // views on death row\n const viewsToRemove = root.ref.imageViewBin.filter(\n imageView => imageView.opacity === 0\n );\n\n // views to retain\n root.ref.imageViewBin = root.ref.imageViewBin.filter(\n imageView => imageView.opacity > 0\n );\n\n // remove these views\n viewsToRemove.forEach(imageView => removeImageView(root, imageView));\n viewsToRemove.length = 0;\n }\n )\n });\n};\n\n/**\n * Image Preview Plugin\n */\nconst plugin = fpAPI => {\n const { addFilter, utils } = fpAPI;\n const { Type, createRoute, isFile } = utils;\n\n // imagePreviewView\n const imagePreviewView = createImageWrapperView(fpAPI);\n\n // called for each view that is created right after the 'create' method\n addFilter('CREATE_VIEW', viewAPI => {\n // get reference to created view\n const { is, view, query } = viewAPI;\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 const didLoadItem = ({ root, props }) => {\n const { id } = props;\n const 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 const 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 const supportsCreateImageBitmap = 'createImageBitmap' in (window || {});\n const maxPreviewFileSize = query('GET_IMAGE_PREVIEW_MAX_FILE_SIZE');\n if (\n !supportsCreateImageBitmap &&\n (maxPreviewFileSize && file.size > maxPreviewFileSize)\n )\n return;\n\n // set preview view\n root.ref.imagePreview = view.appendChildView(\n view.createChildView(imagePreviewView, { id })\n );\n\n // update height if is fixed\n const 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 const queue =\n !supportsCreateImageBitmap &&\n file.size > query('GET_IMAGE_PREVIEW_MAX_INSTANT_PREVIEW_FILE_SIZE');\n root.dispatch('DID_IMAGE_PREVIEW_CONTAINER_CREATE', { id }, queue);\n };\n\n const rescaleItem = (root, props) => {\n if (!root.ref.imagePreview) return;\n\n let { id } = props;\n\n // get item\n const item = root.query('GET_ITEM', { id });\n if (!item) return;\n\n // if is fixed height or panel has aspect ratio, exit here, height has already been defined\n const panelAspectRatio = root.query('GET_PANEL_ASPECT_RATIO');\n const itemPanelAspectRatio = root.query('GET_ITEM_PANEL_ASPECT_RATIO');\n const fixedHeight = root.query('GET_IMAGE_PREVIEW_HEIGHT');\n if (panelAspectRatio || itemPanelAspectRatio || fixedHeight) return;\n\n // no data!\n let { imageWidth, imageHeight } = root.ref;\n if (!imageWidth || !imageHeight) return;\n\n // get height min and max\n const minPreviewHeight = root.query('GET_IMAGE_PREVIEW_MIN_HEIGHT');\n const maxPreviewHeight = root.query('GET_IMAGE_PREVIEW_MAX_HEIGHT');\n\n // orientation info\n const exif = item.getMetadata('exif') || {};\n const 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 [imageWidth, imageHeight] = [imageHeight, imageWidth];\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 const scalar = 2048 / imageWidth;\n imageWidth *= scalar;\n imageHeight *= scalar;\n }\n\n // image aspect ratio\n const imageAspectRatio = imageHeight / imageWidth;\n\n // we need the item to get to the crop size\n const previewAspectRatio =\n (item.getMetadata('crop') || {}).aspectRatio || imageAspectRatio;\n\n // preview height range\n let previewHeightMax = Math.max(\n minPreviewHeight,\n Math.min(imageHeight, maxPreviewHeight)\n );\n const itemWidth = root.rect.element.width;\n const 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 const didResizeView = ({ root }) => {\n // actions in next write operation\n root.ref.shouldRescale = true;\n };\n\n const didUpdateItemMetadata = ({ root, action }) => {\n if (action.change.key !== 'crop') return;\n\n // actions in next write operation\n root.ref.shouldRescale = true;\n };\n\n const didCalculatePreviewSize = ({ root, 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 ({ root, 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(() => {\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(() => {\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: [() => true, Type.FUNCTION],\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: [() => true, Type.FUNCTION]\n }\n };\n};\n\n// fire pluginloaded event if running in browser, this allows registering the plugin when using async script tags\nconst isBrowser =\n typeof window !== 'undefined' && typeof window.document !== 'undefined';\nif (isBrowser) {\n document.dispatchEvent(\n new CustomEvent('FilePond:pluginloaded', { detail: plugin })\n );\n}\n\nexport default plugin;\n","\n\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./servicers-onboarding.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./servicers-onboarding.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./servicers-onboarding.vue?vue&type=template&id=42b17c0e&scoped=true&\"\nimport script from \"./servicers-onboarding.vue?vue&type=script&lang=js&\"\nexport * from \"./servicers-onboarding.vue?vue&type=script&lang=js&\"\nimport style0 from \"./servicers-onboarding.vue?vue&type=style&index=0&id=42b17c0e&scoped=true&lang=css&\"\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 \"42b17c0e\",\n null\n \n)\n\nexport default component.exports","module.exports = __webpack_public_path__ + \"img/Homeplan logo (new modern April 2022 - NO .com).4a6108f5.svg\";","/*!\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","/*!\n * FilePond 4.30.3\n * Licensed under MIT, https://opensource.org/licenses/MIT/\n * Please visit https://pqina.nl/filepond/ for details.\n */\n\n/* eslint-disable */\n\n(function(global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n ? factory(exports)\n : typeof define === 'function' && define.amd\n ? define(['exports'], factory)\n : ((global = global || self), factory((global.FilePond = {})));\n})(this, function(exports) {\n 'use strict';\n\n var isNode = function isNode(value) {\n return value instanceof HTMLElement;\n };\n\n var createStore = function createStore(initialState) {\n var queries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var actions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n // internal state\n var state = Object.assign({}, initialState);\n\n // contains all actions for next frame, is clear when actions are requested\n var actionQueue = [];\n var dispatchQueue = [];\n\n // returns a duplicate of the current state\n var getState = function getState() {\n return Object.assign({}, state);\n };\n\n // returns a duplicate of the actions array and clears the actions array\n var processActionQueue = function processActionQueue() {\n // create copy of actions queue\n var queue = [].concat(actionQueue);\n\n // clear actions queue (we don't want no double actions)\n actionQueue.length = 0;\n\n return queue;\n };\n\n // processes actions that might block the main UI thread\n var processDispatchQueue = function processDispatchQueue() {\n // create copy of actions queue\n var queue = [].concat(dispatchQueue);\n\n // clear actions queue (we don't want no double actions)\n dispatchQueue.length = 0;\n\n // now dispatch these actions\n queue.forEach(function(_ref) {\n var type = _ref.type,\n data = _ref.data;\n dispatch(type, data);\n });\n };\n\n // adds a new action, calls its handler and\n var dispatch = function dispatch(type, data, isBlocking) {\n // is blocking action (should never block if document is hidden)\n if (isBlocking && !document.hidden) {\n dispatchQueue.push({ type: type, data: data });\n return;\n }\n\n // if this action has a handler, handle the action\n if (actionHandlers[type]) {\n actionHandlers[type](data);\n }\n\n // now add action\n actionQueue.push({\n type: type,\n data: data,\n });\n };\n\n var query = function query(str) {\n var _queryHandles;\n for (\n var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1;\n _key < _len;\n _key++\n ) {\n args[_key - 1] = arguments[_key];\n }\n return queryHandles[str]\n ? (_queryHandles = queryHandles)[str].apply(_queryHandles, args)\n : null;\n };\n\n var api = {\n getState: getState,\n processActionQueue: processActionQueue,\n processDispatchQueue: processDispatchQueue,\n dispatch: dispatch,\n query: query,\n };\n\n var queryHandles = {};\n queries.forEach(function(query) {\n queryHandles = Object.assign({}, query(state), {}, queryHandles);\n });\n\n var actionHandlers = {};\n actions.forEach(function(action) {\n actionHandlers = Object.assign({}, action(dispatch, query, state), {}, actionHandlers);\n });\n\n return api;\n };\n\n var defineProperty = function defineProperty(obj, property, definition) {\n if (typeof definition === 'function') {\n obj[property] = definition;\n return;\n }\n Object.defineProperty(obj, property, Object.assign({}, definition));\n };\n\n var forin = function forin(obj, cb) {\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) {\n continue;\n }\n\n cb(key, obj[key]);\n }\n };\n\n var createObject = function createObject(definition) {\n var obj = {};\n forin(definition, function(property) {\n defineProperty(obj, property, definition[property]);\n });\n return obj;\n };\n\n var attr = function attr(node, name) {\n var value = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n if (value === null) {\n return node.getAttribute(name) || node.hasAttribute(name);\n }\n node.setAttribute(name, value);\n };\n\n var ns = 'http://www.w3.org/2000/svg';\n var svgElements = ['svg', 'path']; // only svg elements used\n\n var isSVGElement = function isSVGElement(tag) {\n return svgElements.includes(tag);\n };\n\n var createElement = function createElement(tag, className) {\n var attributes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n if (typeof className === 'object') {\n attributes = className;\n className = null;\n }\n var element = isSVGElement(tag)\n ? document.createElementNS(ns, tag)\n : document.createElement(tag);\n if (className) {\n if (isSVGElement(tag)) {\n attr(element, 'class', className);\n } else {\n element.className = className;\n }\n }\n forin(attributes, function(name, value) {\n attr(element, name, value);\n });\n return element;\n };\n\n var appendChild = function appendChild(parent) {\n return function(child, index) {\n if (typeof index !== 'undefined' && parent.children[index]) {\n parent.insertBefore(child, parent.children[index]);\n } else {\n parent.appendChild(child);\n }\n };\n };\n\n var appendChildView = function appendChildView(parent, childViews) {\n return function(view, index) {\n if (typeof index !== 'undefined') {\n childViews.splice(index, 0, view);\n } else {\n childViews.push(view);\n }\n\n return view;\n };\n };\n\n var removeChildView = function removeChildView(parent, childViews) {\n return function(view) {\n // remove from child views\n childViews.splice(childViews.indexOf(view), 1);\n\n // remove the element\n if (view.element.parentNode) {\n parent.removeChild(view.element);\n }\n\n return view;\n };\n };\n\n var IS_BROWSER = (function() {\n return typeof window !== 'undefined' && typeof window.document !== 'undefined';\n })();\n var isBrowser = function isBrowser() {\n return IS_BROWSER;\n };\n\n var testElement = isBrowser() ? createElement('svg') : {};\n var getChildCount =\n 'children' in testElement\n ? function(el) {\n return el.children.length;\n }\n : function(el) {\n return el.childNodes.length;\n };\n\n var getViewRect = function getViewRect(elementRect, childViews, offset, scale) {\n var left = offset[0] || elementRect.left;\n var top = offset[1] || elementRect.top;\n var right = left + elementRect.width;\n var bottom = top + elementRect.height * (scale[1] || 1);\n\n var rect = {\n // the rectangle of the element itself\n element: Object.assign({}, elementRect),\n\n // the rectangle of the element expanded to contain its children, does not include any margins\n inner: {\n left: elementRect.left,\n top: elementRect.top,\n right: elementRect.right,\n bottom: elementRect.bottom,\n },\n\n // the rectangle of the element expanded to contain its children including own margin and child margins\n // margins will be added after we've recalculated the size\n outer: {\n left: left,\n top: top,\n right: right,\n bottom: bottom,\n },\n };\n\n // expand rect to fit all child rectangles\n childViews\n .filter(function(childView) {\n return !childView.isRectIgnored();\n })\n .map(function(childView) {\n return childView.rect;\n })\n .forEach(function(childViewRect) {\n expandRect(rect.inner, Object.assign({}, childViewRect.inner));\n expandRect(rect.outer, Object.assign({}, childViewRect.outer));\n });\n\n // calculate inner width and height\n calculateRectSize(rect.inner);\n\n // append additional margin (top and left margins are included in top and left automatically)\n rect.outer.bottom += rect.element.marginBottom;\n rect.outer.right += rect.element.marginRight;\n\n // calculate outer width and height\n calculateRectSize(rect.outer);\n\n return rect;\n };\n\n var expandRect = function expandRect(parent, child) {\n // adjust for parent offset\n child.top += parent.top;\n child.right += parent.left;\n child.bottom += parent.top;\n child.left += parent.left;\n\n if (child.bottom > parent.bottom) {\n parent.bottom = child.bottom;\n }\n\n if (child.right > parent.right) {\n parent.right = child.right;\n }\n };\n\n var calculateRectSize = function calculateRectSize(rect) {\n rect.width = rect.right - rect.left;\n rect.height = rect.bottom - rect.top;\n };\n\n var isNumber = function isNumber(value) {\n return typeof value === 'number';\n };\n\n /**\n * Determines if position is at destination\n * @param position\n * @param destination\n * @param velocity\n * @param errorMargin\n * @returns {boolean}\n */\n var thereYet = function thereYet(position, destination, velocity) {\n var errorMargin = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.001;\n return Math.abs(position - destination) < errorMargin && Math.abs(velocity) < errorMargin;\n };\n\n /**\n * Spring animation\n */\n var spring =\n // default options\n function spring() // method definition\n {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$stiffness = _ref.stiffness,\n stiffness = _ref$stiffness === void 0 ? 0.5 : _ref$stiffness,\n _ref$damping = _ref.damping,\n damping = _ref$damping === void 0 ? 0.75 : _ref$damping,\n _ref$mass = _ref.mass,\n mass = _ref$mass === void 0 ? 10 : _ref$mass;\n var target = null;\n var position = null;\n var velocity = 0;\n var resting = false;\n\n // updates spring state\n var interpolate = function interpolate(ts, skipToEndState) {\n // in rest, don't animate\n if (resting) return;\n\n // need at least a target or position to do springy things\n if (!(isNumber(target) && isNumber(position))) {\n resting = true;\n velocity = 0;\n return;\n }\n\n // calculate spring force\n var f = -(position - target) * stiffness;\n\n // update velocity by adding force based on mass\n velocity += f / mass;\n\n // update position by adding velocity\n position += velocity;\n\n // slow down based on amount of damping\n velocity *= damping;\n\n // we've arrived if we're near target and our velocity is near zero\n if (thereYet(position, target, velocity) || skipToEndState) {\n position = target;\n velocity = 0;\n resting = true;\n\n // we done\n api.onupdate(position);\n api.oncomplete(position);\n } else {\n // progress update\n api.onupdate(position);\n }\n };\n\n /**\n * Set new target value\n * @param value\n */\n var setTarget = function setTarget(value) {\n // if currently has no position, set target and position to this value\n if (isNumber(value) && !isNumber(position)) {\n position = value;\n }\n\n // next target value will not be animated to\n if (target === null) {\n target = value;\n position = value;\n }\n\n // let start moving to target\n target = value;\n\n // already at target\n if (position === target || typeof target === 'undefined') {\n // now resting as target is current position, stop moving\n resting = true;\n velocity = 0;\n\n // done!\n api.onupdate(position);\n api.oncomplete(position);\n\n return;\n }\n\n resting = false;\n };\n\n // need 'api' to call onupdate callback\n var api = createObject({\n interpolate: interpolate,\n target: {\n set: setTarget,\n get: function get() {\n return target;\n },\n },\n\n resting: {\n get: function get() {\n return resting;\n },\n },\n\n onupdate: function onupdate(value) {},\n oncomplete: function oncomplete(value) {},\n });\n\n return api;\n };\n\n var easeLinear = function easeLinear(t) {\n return t;\n };\n var easeInOutQuad = function easeInOutQuad(t) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n };\n\n var tween =\n // default values\n function tween() // method definition\n {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$duration = _ref.duration,\n duration = _ref$duration === void 0 ? 500 : _ref$duration,\n _ref$easing = _ref.easing,\n easing = _ref$easing === void 0 ? easeInOutQuad : _ref$easing,\n _ref$delay = _ref.delay,\n delay = _ref$delay === void 0 ? 0 : _ref$delay;\n var start = null;\n var t;\n var p;\n var resting = true;\n var reverse = false;\n var target = null;\n\n var interpolate = function interpolate(ts, skipToEndState) {\n if (resting || target === null) return;\n\n if (start === null) {\n start = ts;\n }\n\n if (ts - start < delay) return;\n\n t = ts - start - delay;\n\n if (t >= duration || skipToEndState) {\n t = 1;\n p = reverse ? 0 : 1;\n api.onupdate(p * target);\n api.oncomplete(p * target);\n resting = true;\n } else {\n p = t / duration;\n api.onupdate((t >= 0 ? easing(reverse ? 1 - p : p) : 0) * target);\n }\n };\n\n // need 'api' to call onupdate callback\n var api = createObject({\n interpolate: interpolate,\n target: {\n get: function get() {\n return reverse ? 0 : target;\n },\n set: function set(value) {\n // is initial value\n if (target === null) {\n target = value;\n api.onupdate(value);\n api.oncomplete(value);\n return;\n }\n\n // want to tween to a smaller value and have a current value\n if (value < target) {\n target = 1;\n reverse = true;\n } else {\n // not tweening to a smaller value\n reverse = false;\n target = value;\n }\n\n // let's go!\n resting = false;\n start = null;\n },\n },\n\n resting: {\n get: function get() {\n return resting;\n },\n },\n\n onupdate: function onupdate(value) {},\n oncomplete: function oncomplete(value) {},\n });\n\n return api;\n };\n\n var animator = {\n spring: spring,\n tween: tween,\n };\n\n /*\n { type: 'spring', stiffness: .5, damping: .75, mass: 10 };\n { translation: { type: 'spring', ... }, ... }\n { translation: { x: { type: 'spring', ... } } }\n */\n var createAnimator = function createAnimator(definition, category, property) {\n // default is single definition\n // we check if transform is set, if so, we check if property is set\n var def =\n definition[category] && typeof definition[category][property] === 'object'\n ? definition[category][property]\n : definition[category] || definition;\n\n var type = typeof def === 'string' ? def : def.type;\n var props = typeof def === 'object' ? Object.assign({}, def) : {};\n\n return animator[type] ? animator[type](props) : null;\n };\n\n var addGetSet = function addGetSet(keys, obj, props) {\n var overwrite = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n obj = Array.isArray(obj) ? obj : [obj];\n obj.forEach(function(o) {\n keys.forEach(function(key) {\n var name = key;\n var getter = function getter() {\n return props[key];\n };\n var setter = function setter(value) {\n return (props[key] = value);\n };\n\n if (typeof key === 'object') {\n name = key.key;\n getter = key.getter || getter;\n setter = key.setter || setter;\n }\n\n if (o[name] && !overwrite) {\n return;\n }\n\n o[name] = {\n get: getter,\n set: setter,\n };\n });\n });\n };\n\n // add to state,\n // add getters and setters to internal and external api (if not set)\n // setup animators\n\n var animations = function animations(_ref) {\n var mixinConfig = _ref.mixinConfig,\n viewProps = _ref.viewProps,\n viewInternalAPI = _ref.viewInternalAPI,\n viewExternalAPI = _ref.viewExternalAPI;\n // initial properties\n var initialProps = Object.assign({}, viewProps);\n\n // list of all active animations\n var animations = [];\n\n // setup animators\n forin(mixinConfig, function(property, animation) {\n var animator = createAnimator(animation);\n if (!animator) {\n return;\n }\n\n // when the animator updates, update the view state value\n animator.onupdate = function(value) {\n viewProps[property] = value;\n };\n\n // set animator target\n animator.target = initialProps[property];\n\n // when value is set, set the animator target value\n var prop = {\n key: property,\n setter: function setter(value) {\n // if already at target, we done!\n if (animator.target === value) {\n return;\n }\n\n animator.target = value;\n },\n getter: function getter() {\n return viewProps[property];\n },\n };\n\n // add getters and setters\n addGetSet([prop], [viewInternalAPI, viewExternalAPI], viewProps, true);\n\n // add it to the list for easy updating from the _write method\n animations.push(animator);\n });\n\n // expose internal write api\n return {\n write: function write(ts) {\n var skipToEndState = document.hidden;\n var resting = true;\n animations.forEach(function(animation) {\n if (!animation.resting) resting = false;\n animation.interpolate(ts, skipToEndState);\n });\n return resting;\n },\n destroy: function destroy() {},\n };\n };\n\n var addEvent = function addEvent(element) {\n return function(type, fn) {\n element.addEventListener(type, fn);\n };\n };\n\n var removeEvent = function removeEvent(element) {\n return function(type, fn) {\n element.removeEventListener(type, fn);\n };\n };\n\n // mixin\n var listeners = function listeners(_ref) {\n var mixinConfig = _ref.mixinConfig,\n viewProps = _ref.viewProps,\n viewInternalAPI = _ref.viewInternalAPI,\n viewExternalAPI = _ref.viewExternalAPI,\n viewState = _ref.viewState,\n view = _ref.view;\n var events = [];\n\n var add = addEvent(view.element);\n var remove = removeEvent(view.element);\n\n viewExternalAPI.on = function(type, fn) {\n events.push({\n type: type,\n fn: fn,\n });\n\n add(type, fn);\n };\n\n viewExternalAPI.off = function(type, fn) {\n events.splice(\n events.findIndex(function(event) {\n return event.type === type && event.fn === fn;\n }),\n 1\n );\n\n remove(type, fn);\n };\n\n return {\n write: function write() {\n // not busy\n return true;\n },\n destroy: function destroy() {\n events.forEach(function(event) {\n remove(event.type, event.fn);\n });\n },\n };\n };\n\n // add to external api and link to props\n\n var apis = function apis(_ref) {\n var mixinConfig = _ref.mixinConfig,\n viewProps = _ref.viewProps,\n viewExternalAPI = _ref.viewExternalAPI;\n addGetSet(mixinConfig, viewExternalAPI, viewProps);\n };\n\n var isDefined = function isDefined(value) {\n return value != null;\n };\n\n // add to state,\n // add getters and setters to internal and external api (if not set)\n // set initial state based on props in viewProps\n // apply as transforms each frame\n\n var defaults = {\n opacity: 1,\n scaleX: 1,\n scaleY: 1,\n translateX: 0,\n translateY: 0,\n rotateX: 0,\n rotateY: 0,\n rotateZ: 0,\n originX: 0,\n originY: 0,\n };\n\n var styles = function styles(_ref) {\n var mixinConfig = _ref.mixinConfig,\n viewProps = _ref.viewProps,\n viewInternalAPI = _ref.viewInternalAPI,\n viewExternalAPI = _ref.viewExternalAPI,\n view = _ref.view;\n // initial props\n var initialProps = Object.assign({}, viewProps);\n\n // current props\n var currentProps = {};\n\n // we will add those properties to the external API and link them to the viewState\n addGetSet(mixinConfig, [viewInternalAPI, viewExternalAPI], viewProps);\n\n // override rect on internal and external rect getter so it takes in account transforms\n var getOffset = function getOffset() {\n return [viewProps['translateX'] || 0, viewProps['translateY'] || 0];\n };\n\n var getScale = function getScale() {\n return [viewProps['scaleX'] || 0, viewProps['scaleY'] || 0];\n };\n var getRect = function getRect() {\n return view.rect\n ? getViewRect(view.rect, view.childViews, getOffset(), getScale())\n : null;\n };\n viewInternalAPI.rect = { get: getRect };\n viewExternalAPI.rect = { get: getRect };\n\n // apply view props\n mixinConfig.forEach(function(key) {\n viewProps[key] =\n typeof initialProps[key] === 'undefined' ? defaults[key] : initialProps[key];\n });\n\n // expose api\n return {\n write: function write() {\n // see if props have changed\n if (!propsHaveChanged(currentProps, viewProps)) {\n return;\n }\n\n // moves element to correct position on screen\n applyStyles(view.element, viewProps);\n\n // store new transforms\n Object.assign(currentProps, Object.assign({}, viewProps));\n\n // no longer busy\n return true;\n },\n destroy: function destroy() {},\n };\n };\n\n var propsHaveChanged = function propsHaveChanged(currentProps, newProps) {\n // different amount of keys\n if (Object.keys(currentProps).length !== Object.keys(newProps).length) {\n return true;\n }\n\n // lets analyze the individual props\n for (var prop in newProps) {\n if (newProps[prop] !== currentProps[prop]) {\n return true;\n }\n }\n\n return false;\n };\n\n var applyStyles = function applyStyles(element, _ref2) {\n var opacity = _ref2.opacity,\n perspective = _ref2.perspective,\n translateX = _ref2.translateX,\n translateY = _ref2.translateY,\n scaleX = _ref2.scaleX,\n scaleY = _ref2.scaleY,\n rotateX = _ref2.rotateX,\n rotateY = _ref2.rotateY,\n rotateZ = _ref2.rotateZ,\n originX = _ref2.originX,\n originY = _ref2.originY,\n width = _ref2.width,\n height = _ref2.height;\n\n var transforms = '';\n var styles = '';\n\n // handle transform origin\n if (isDefined(originX) || isDefined(originY)) {\n styles += 'transform-origin: ' + (originX || 0) + 'px ' + (originY || 0) + 'px;';\n }\n\n // transform order is relevant\n // 0. perspective\n if (isDefined(perspective)) {\n transforms += 'perspective(' + perspective + 'px) ';\n }\n\n // 1. translate\n if (isDefined(translateX) || isDefined(translateY)) {\n transforms +=\n 'translate3d(' + (translateX || 0) + 'px, ' + (translateY || 0) + 'px, 0) ';\n }\n\n // 2. scale\n if (isDefined(scaleX) || isDefined(scaleY)) {\n transforms +=\n 'scale3d(' +\n (isDefined(scaleX) ? scaleX : 1) +\n ', ' +\n (isDefined(scaleY) ? scaleY : 1) +\n ', 1) ';\n }\n\n // 3. rotate\n if (isDefined(rotateZ)) {\n transforms += 'rotateZ(' + rotateZ + 'rad) ';\n }\n\n if (isDefined(rotateX)) {\n transforms += 'rotateX(' + rotateX + 'rad) ';\n }\n\n if (isDefined(rotateY)) {\n transforms += 'rotateY(' + rotateY + 'rad) ';\n }\n\n // add transforms\n if (transforms.length) {\n styles += 'transform:' + transforms + ';';\n }\n\n // add opacity\n if (isDefined(opacity)) {\n styles += 'opacity:' + opacity + ';';\n\n // if we reach zero, we make the element inaccessible\n if (opacity === 0) {\n styles += 'visibility:hidden;';\n }\n\n // if we're below 100% opacity this element can't be clicked\n if (opacity < 1) {\n styles += 'pointer-events:none;';\n }\n }\n\n // add height\n if (isDefined(height)) {\n styles += 'height:' + height + 'px;';\n }\n\n // add width\n if (isDefined(width)) {\n styles += 'width:' + width + 'px;';\n }\n\n // apply styles\n var elementCurrentStyle = element.elementCurrentStyle || '';\n\n // if new styles does not match current styles, lets update!\n if (styles.length !== elementCurrentStyle.length || styles !== elementCurrentStyle) {\n element.style.cssText = styles;\n // store current styles so we can compare them to new styles later on\n // _not_ getting the style value is faster\n element.elementCurrentStyle = styles;\n }\n };\n\n var Mixins = {\n styles: styles,\n listeners: listeners,\n animations: animations,\n apis: apis,\n };\n\n var updateRect = function updateRect() {\n var rect = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (!element.layoutCalculated) {\n rect.paddingTop = parseInt(style.paddingTop, 10) || 0;\n rect.marginTop = parseInt(style.marginTop, 10) || 0;\n rect.marginRight = parseInt(style.marginRight, 10) || 0;\n rect.marginBottom = parseInt(style.marginBottom, 10) || 0;\n rect.marginLeft = parseInt(style.marginLeft, 10) || 0;\n element.layoutCalculated = true;\n }\n\n rect.left = element.offsetLeft || 0;\n rect.top = element.offsetTop || 0;\n rect.width = element.offsetWidth || 0;\n rect.height = element.offsetHeight || 0;\n\n rect.right = rect.left + rect.width;\n rect.bottom = rect.top + rect.height;\n\n rect.scrollTop = element.scrollTop;\n\n rect.hidden = element.offsetParent === null;\n\n return rect;\n };\n\n var createView =\n // default view definition\n function createView() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$tag = _ref.tag,\n tag = _ref$tag === void 0 ? 'div' : _ref$tag,\n _ref$name = _ref.name,\n name = _ref$name === void 0 ? null : _ref$name,\n _ref$attributes = _ref.attributes,\n attributes = _ref$attributes === void 0 ? {} : _ref$attributes,\n _ref$read = _ref.read,\n read = _ref$read === void 0 ? function() {} : _ref$read,\n _ref$write = _ref.write,\n write = _ref$write === void 0 ? function() {} : _ref$write,\n _ref$create = _ref.create,\n create = _ref$create === void 0 ? function() {} : _ref$create,\n _ref$destroy = _ref.destroy,\n destroy = _ref$destroy === void 0 ? function() {} : _ref$destroy,\n _ref$filterFrameActio = _ref.filterFrameActionsForChild,\n filterFrameActionsForChild =\n _ref$filterFrameActio === void 0\n ? function(child, actions) {\n return actions;\n }\n : _ref$filterFrameActio,\n _ref$didCreateView = _ref.didCreateView,\n didCreateView = _ref$didCreateView === void 0 ? function() {} : _ref$didCreateView,\n _ref$didWriteView = _ref.didWriteView,\n didWriteView = _ref$didWriteView === void 0 ? function() {} : _ref$didWriteView,\n _ref$ignoreRect = _ref.ignoreRect,\n ignoreRect = _ref$ignoreRect === void 0 ? false : _ref$ignoreRect,\n _ref$ignoreRectUpdate = _ref.ignoreRectUpdate,\n ignoreRectUpdate = _ref$ignoreRectUpdate === void 0 ? false : _ref$ignoreRectUpdate,\n _ref$mixins = _ref.mixins,\n mixins = _ref$mixins === void 0 ? [] : _ref$mixins;\n return function(\n // each view requires reference to store\n store\n ) {\n var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n // root element should not be changed\n var element = createElement(tag, 'filepond--' + name, attributes);\n\n // style reference should also not be changed\n var style = window.getComputedStyle(element, null);\n\n // element rectangle\n var rect = updateRect();\n var frameRect = null;\n\n // rest state\n var isResting = false;\n\n // pretty self explanatory\n var childViews = [];\n\n // loaded mixins\n var activeMixins = [];\n\n // references to created children\n var ref = {};\n\n // state used for each instance\n var state = {};\n\n // list of writers that will be called to update this view\n var writers = [\n write, // default writer\n ];\n\n var readers = [\n read, // default reader\n ];\n\n var destroyers = [\n destroy, // default destroy\n ];\n\n // core view methods\n var getElement = function getElement() {\n return element;\n };\n var getChildViews = function getChildViews() {\n return childViews.concat();\n };\n var getReference = function getReference() {\n return ref;\n };\n var createChildView = function createChildView(store) {\n return function(view, props) {\n return view(store, props);\n };\n };\n var getRect = function getRect() {\n if (frameRect) {\n return frameRect;\n }\n frameRect = getViewRect(rect, childViews, [0, 0], [1, 1]);\n return frameRect;\n };\n var getStyle = function getStyle() {\n return style;\n };\n\n /**\n * Read data from DOM\n * @private\n */\n var _read = function _read() {\n frameRect = null;\n\n // read child views\n childViews.forEach(function(child) {\n return child._read();\n });\n\n var shouldUpdate = !(ignoreRectUpdate && rect.width && rect.height);\n if (shouldUpdate) {\n updateRect(rect, element, style);\n }\n\n // readers\n var api = { root: internalAPI, props: props, rect: rect };\n readers.forEach(function(reader) {\n return reader(api);\n });\n };\n\n /**\n * Write data to DOM\n * @private\n */\n var _write = function _write(ts, frameActions, shouldOptimize) {\n // if no actions, we assume that the view is resting\n var resting = frameActions.length === 0;\n\n // writers\n writers.forEach(function(writer) {\n var writerResting = writer({\n props: props,\n root: internalAPI,\n actions: frameActions,\n timestamp: ts,\n shouldOptimize: shouldOptimize,\n });\n\n if (writerResting === false) {\n resting = false;\n }\n });\n\n // run mixins\n activeMixins.forEach(function(mixin) {\n // if one of the mixins is still busy after write operation, we are not resting\n var mixinResting = mixin.write(ts);\n if (mixinResting === false) {\n resting = false;\n }\n });\n\n // updates child views that are currently attached to the DOM\n childViews\n .filter(function(child) {\n return !!child.element.parentNode;\n })\n .forEach(function(child) {\n // if a child view is not resting, we are not resting\n var childResting = child._write(\n ts,\n filterFrameActionsForChild(child, frameActions),\n shouldOptimize\n );\n\n if (!childResting) {\n resting = false;\n }\n });\n\n // append new elements to DOM and update those\n childViews\n //.filter(child => !child.element.parentNode)\n .forEach(function(child, index) {\n // skip\n if (child.element.parentNode) {\n return;\n }\n\n // append to DOM\n internalAPI.appendChild(child.element, index);\n\n // call read (need to know the size of these elements)\n child._read();\n\n // re-call write\n child._write(\n ts,\n filterFrameActionsForChild(child, frameActions),\n shouldOptimize\n );\n\n // we just added somthing to the dom, no rest\n resting = false;\n });\n\n // update resting state\n isResting = resting;\n\n didWriteView({\n props: props,\n root: internalAPI,\n actions: frameActions,\n timestamp: ts,\n });\n\n // let parent know if we are resting\n return resting;\n };\n\n var _destroy = function _destroy() {\n activeMixins.forEach(function(mixin) {\n return mixin.destroy();\n });\n destroyers.forEach(function(destroyer) {\n destroyer({ root: internalAPI, props: props });\n });\n childViews.forEach(function(child) {\n return child._destroy();\n });\n };\n\n // sharedAPI\n var sharedAPIDefinition = {\n element: {\n get: getElement,\n },\n\n style: {\n get: getStyle,\n },\n\n childViews: {\n get: getChildViews,\n },\n };\n\n // private API definition\n var internalAPIDefinition = Object.assign({}, sharedAPIDefinition, {\n rect: {\n get: getRect,\n },\n\n // access to custom children references\n ref: {\n get: getReference,\n },\n\n // dom modifiers\n is: function is(needle) {\n return name === needle;\n },\n appendChild: appendChild(element),\n createChildView: createChildView(store),\n linkView: function linkView(view) {\n childViews.push(view);\n return view;\n },\n unlinkView: function unlinkView(view) {\n childViews.splice(childViews.indexOf(view), 1);\n },\n appendChildView: appendChildView(element, childViews),\n removeChildView: removeChildView(element, childViews),\n registerWriter: function registerWriter(writer) {\n return writers.push(writer);\n },\n registerReader: function registerReader(reader) {\n return readers.push(reader);\n },\n registerDestroyer: function registerDestroyer(destroyer) {\n return destroyers.push(destroyer);\n },\n invalidateLayout: function invalidateLayout() {\n return (element.layoutCalculated = false);\n },\n\n // access to data store\n dispatch: store.dispatch,\n query: store.query,\n });\n\n // public view API methods\n var externalAPIDefinition = {\n element: {\n get: getElement,\n },\n\n childViews: {\n get: getChildViews,\n },\n\n rect: {\n get: getRect,\n },\n\n resting: {\n get: function get() {\n return isResting;\n },\n },\n\n isRectIgnored: function isRectIgnored() {\n return ignoreRect;\n },\n _read: _read,\n _write: _write,\n _destroy: _destroy,\n };\n\n // mixin API methods\n var mixinAPIDefinition = Object.assign({}, sharedAPIDefinition, {\n rect: {\n get: function get() {\n return rect;\n },\n },\n });\n\n // add mixin functionality\n Object.keys(mixins)\n .sort(function(a, b) {\n // move styles to the back of the mixin list (so adjustments of other mixins are applied to the props correctly)\n if (a === 'styles') {\n return 1;\n } else if (b === 'styles') {\n return -1;\n }\n return 0;\n })\n .forEach(function(key) {\n var mixinAPI = Mixins[key]({\n mixinConfig: mixins[key],\n viewProps: props,\n viewState: state,\n viewInternalAPI: internalAPIDefinition,\n viewExternalAPI: externalAPIDefinition,\n view: createObject(mixinAPIDefinition),\n });\n\n if (mixinAPI) {\n activeMixins.push(mixinAPI);\n }\n });\n\n // construct private api\n var internalAPI = createObject(internalAPIDefinition);\n\n // create the view\n create({\n root: internalAPI,\n props: props,\n });\n\n // append created child views to root node\n var childCount = getChildCount(element); // need to know the current child count so appending happens in correct order\n childViews.forEach(function(child, index) {\n internalAPI.appendChild(child.element, childCount + index);\n });\n\n // call did create\n didCreateView(internalAPI);\n\n // expose public api\n return createObject(externalAPIDefinition);\n };\n };\n\n var createPainter = function createPainter(read, write) {\n var fps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 60;\n\n var name = '__framePainter';\n\n // set global painter\n if (window[name]) {\n window[name].readers.push(read);\n window[name].writers.push(write);\n return;\n }\n\n window[name] = {\n readers: [read],\n writers: [write],\n };\n\n var painter = window[name];\n\n var interval = 1000 / fps;\n var last = null;\n var id = null;\n var requestTick = null;\n var cancelTick = null;\n\n var setTimerType = function setTimerType() {\n if (document.hidden) {\n requestTick = function requestTick() {\n return window.setTimeout(function() {\n return tick(performance.now());\n }, interval);\n };\n cancelTick = function cancelTick() {\n return window.clearTimeout(id);\n };\n } else {\n requestTick = function requestTick() {\n return window.requestAnimationFrame(tick);\n };\n cancelTick = function cancelTick() {\n return window.cancelAnimationFrame(id);\n };\n }\n };\n\n document.addEventListener('visibilitychange', function() {\n if (cancelTick) cancelTick();\n setTimerType();\n tick(performance.now());\n });\n\n var tick = function tick(ts) {\n // queue next tick\n id = requestTick(tick);\n\n // limit fps\n if (!last) {\n last = ts;\n }\n\n var delta = ts - last;\n\n if (delta <= interval) {\n // skip frame\n return;\n }\n\n // align next frame\n last = ts - (delta % interval);\n\n // update view\n painter.readers.forEach(function(read) {\n return read();\n });\n painter.writers.forEach(function(write) {\n return write(ts);\n });\n };\n\n setTimerType();\n tick(performance.now());\n\n return {\n pause: function pause() {\n cancelTick(id);\n },\n };\n };\n\n var createRoute = function createRoute(routes, fn) {\n return function(_ref) {\n var root = _ref.root,\n props = _ref.props,\n _ref$actions = _ref.actions,\n actions = _ref$actions === void 0 ? [] : _ref$actions,\n timestamp = _ref.timestamp,\n shouldOptimize = _ref.shouldOptimize;\n actions\n .filter(function(action) {\n return routes[action.type];\n })\n .forEach(function(action) {\n return routes[action.type]({\n root: root,\n props: props,\n action: action.data,\n timestamp: timestamp,\n shouldOptimize: shouldOptimize,\n });\n });\n\n if (fn) {\n fn({\n root: root,\n props: props,\n actions: actions,\n timestamp: timestamp,\n shouldOptimize: shouldOptimize,\n });\n }\n };\n };\n\n var insertBefore = function insertBefore(newNode, referenceNode) {\n return referenceNode.parentNode.insertBefore(newNode, referenceNode);\n };\n\n var insertAfter = function insertAfter(newNode, referenceNode) {\n return referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n };\n\n var isArray = function isArray(value) {\n return Array.isArray(value);\n };\n\n var isEmpty = function isEmpty(value) {\n return value == null;\n };\n\n var trim = function trim(str) {\n return str.trim();\n };\n\n var toString = function toString(value) {\n return '' + value;\n };\n\n var toArray = function toArray(value) {\n var splitter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ',';\n if (isEmpty(value)) {\n return [];\n }\n if (isArray(value)) {\n return value;\n }\n return toString(value)\n .split(splitter)\n .map(trim)\n .filter(function(str) {\n return str.length;\n });\n };\n\n var isBoolean = function isBoolean(value) {\n return typeof value === 'boolean';\n };\n\n var toBoolean = function toBoolean(value) {\n return isBoolean(value) ? value : value === 'true';\n };\n\n var isString = function isString(value) {\n return typeof value === 'string';\n };\n\n var toNumber = function toNumber(value) {\n return isNumber(value)\n ? value\n : isString(value)\n ? toString(value).replace(/[a-z]+/gi, '')\n : 0;\n };\n\n var toInt = function toInt(value) {\n return parseInt(toNumber(value), 10);\n };\n\n var toFloat = function toFloat(value) {\n return parseFloat(toNumber(value));\n };\n\n var isInt = function isInt(value) {\n return isNumber(value) && isFinite(value) && Math.floor(value) === value;\n };\n\n var toBytes = function toBytes(value) {\n var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n // is in bytes\n if (isInt(value)) {\n return value;\n }\n\n // is natural file size\n var naturalFileSize = toString(value).trim();\n\n // if is value in megabytes\n if (/MB$/i.test(naturalFileSize)) {\n naturalFileSize = naturalFileSize.replace(/MB$i/, '').trim();\n return toInt(naturalFileSize) * base * base;\n }\n\n // if is value in kilobytes\n if (/KB/i.test(naturalFileSize)) {\n naturalFileSize = naturalFileSize.replace(/KB$i/, '').trim();\n return toInt(naturalFileSize) * base;\n }\n\n return toInt(naturalFileSize);\n };\n\n var isFunction = function isFunction(value) {\n return typeof value === 'function';\n };\n\n var toFunctionReference = function toFunctionReference(string) {\n var ref = self;\n var levels = string.split('.');\n var level = null;\n while ((level = levels.shift())) {\n ref = ref[level];\n if (!ref) {\n return null;\n }\n }\n return ref;\n };\n\n var methods = {\n process: 'POST',\n patch: 'PATCH',\n revert: 'DELETE',\n fetch: 'GET',\n restore: 'GET',\n load: 'GET',\n };\n\n var createServerAPI = function createServerAPI(outline) {\n var api = {};\n\n api.url = isString(outline) ? outline : outline.url || '';\n api.timeout = outline.timeout ? parseInt(outline.timeout, 10) : 0;\n api.headers = outline.headers ? outline.headers : {};\n\n forin(methods, function(key) {\n api[key] = createAction(key, outline[key], methods[key], api.timeout, api.headers);\n });\n\n // remove process if no url or process on outline\n api.process = outline.process || isString(outline) || outline.url ? api.process : null;\n\n // special treatment for remove\n api.remove = outline.remove || null;\n\n // remove generic headers from api object\n delete api.headers;\n\n return api;\n };\n\n var createAction = function createAction(name, outline, method, timeout, headers) {\n // is explicitely set to null so disable\n if (outline === null) {\n return null;\n }\n\n // if is custom function, done! Dev handles everything.\n if (typeof outline === 'function') {\n return outline;\n }\n\n // build action object\n var action = {\n url: method === 'GET' || method === 'PATCH' ? '?' + name + '=' : '',\n method: method,\n headers: headers,\n withCredentials: false,\n timeout: timeout,\n onload: null,\n ondata: null,\n onerror: null,\n };\n\n // is a single url\n if (isString(outline)) {\n action.url = outline;\n return action;\n }\n\n // overwrite\n Object.assign(action, outline);\n\n // see if should reformat headers;\n if (isString(action.headers)) {\n var parts = action.headers.split(/:(.+)/);\n action.headers = {\n header: parts[0],\n value: parts[1],\n };\n }\n\n // if is bool withCredentials\n action.withCredentials = toBoolean(action.withCredentials);\n\n return action;\n };\n\n var toServerAPI = function toServerAPI(value) {\n return createServerAPI(value);\n };\n\n var isNull = function isNull(value) {\n return value === null;\n };\n\n var isObject = function isObject(value) {\n return typeof value === 'object' && value !== null;\n };\n\n var isAPI = function isAPI(value) {\n return (\n isObject(value) &&\n isString(value.url) &&\n isObject(value.process) &&\n isObject(value.revert) &&\n isObject(value.restore) &&\n isObject(value.fetch)\n );\n };\n\n var getType = function getType(value) {\n if (isArray(value)) {\n return 'array';\n }\n\n if (isNull(value)) {\n return 'null';\n }\n\n if (isInt(value)) {\n return 'int';\n }\n\n if (/^[0-9]+ ?(?:GB|MB|KB)$/gi.test(value)) {\n return 'bytes';\n }\n\n if (isAPI(value)) {\n return 'api';\n }\n\n return typeof value;\n };\n\n var replaceSingleQuotes = function replaceSingleQuotes(str) {\n return str\n .replace(/{\\s*'/g, '{\"')\n .replace(/'\\s*}/g, '\"}')\n .replace(/'\\s*:/g, '\":')\n .replace(/:\\s*'/g, ':\"')\n .replace(/,\\s*'/g, ',\"')\n .replace(/'\\s*,/g, '\",');\n };\n\n var conversionTable = {\n array: toArray,\n boolean: toBoolean,\n int: function int(value) {\n return getType(value) === 'bytes' ? toBytes(value) : toInt(value);\n },\n number: toFloat,\n float: toFloat,\n bytes: toBytes,\n string: function string(value) {\n return isFunction(value) ? value : toString(value);\n },\n function: function _function(value) {\n return toFunctionReference(value);\n },\n serverapi: toServerAPI,\n object: function object(value) {\n try {\n return JSON.parse(replaceSingleQuotes(value));\n } catch (e) {\n return null;\n }\n },\n };\n\n var convertTo = function convertTo(value, type) {\n return conversionTable[type](value);\n };\n\n var getValueByType = function getValueByType(newValue, defaultValue, valueType) {\n // can always assign default value\n if (newValue === defaultValue) {\n return newValue;\n }\n\n // get the type of the new value\n var newValueType = getType(newValue);\n\n // is valid type?\n if (newValueType !== valueType) {\n // is string input, let's attempt to convert\n var convertedValue = convertTo(newValue, valueType);\n\n // what is the type now\n newValueType = getType(convertedValue);\n\n // no valid conversions found\n if (convertedValue === null) {\n throw 'Trying to assign value with incorrect type to \"' +\n option +\n '\", allowed type: \"' +\n valueType +\n '\"';\n } else {\n newValue = convertedValue;\n }\n }\n\n // assign new value\n return newValue;\n };\n\n var createOption = function createOption(defaultValue, valueType) {\n var currentValue = defaultValue;\n return {\n enumerable: true,\n get: function get() {\n return currentValue;\n },\n set: function set(newValue) {\n currentValue = getValueByType(newValue, defaultValue, valueType);\n },\n };\n };\n\n var createOptions = function createOptions(options) {\n var obj = {};\n forin(options, function(prop) {\n var optionDefinition = options[prop];\n obj[prop] = createOption(optionDefinition[0], optionDefinition[1]);\n });\n return createObject(obj);\n };\n\n var createInitialState = function createInitialState(options) {\n return {\n // model\n items: [],\n\n // timeout used for calling update items\n listUpdateTimeout: null,\n\n // timeout used for stacking metadata updates\n itemUpdateTimeout: null,\n\n // queue of items waiting to be processed\n processingQueue: [],\n\n // options\n options: createOptions(options),\n };\n };\n\n var fromCamels = function fromCamels(string) {\n var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '-';\n return string\n .split(/(?=[A-Z])/)\n .map(function(part) {\n return part.toLowerCase();\n })\n .join(separator);\n };\n\n var createOptionAPI = function createOptionAPI(store, options) {\n var obj = {};\n forin(options, function(key) {\n obj[key] = {\n get: function get() {\n return store.getState().options[key];\n },\n set: function set(value) {\n store.dispatch('SET_' + fromCamels(key, '_').toUpperCase(), {\n value: value,\n });\n },\n };\n });\n return obj;\n };\n\n var createOptionActions = function createOptionActions(options) {\n return function(dispatch, query, state) {\n var obj = {};\n forin(options, function(key) {\n var name = fromCamels(key, '_').toUpperCase();\n\n obj['SET_' + name] = function(action) {\n try {\n state.options[key] = action.value;\n } catch (e) {} // nope, failed\n\n // we successfully set the value of this option\n dispatch('DID_SET_' + name, { value: state.options[key] });\n };\n });\n return obj;\n };\n };\n\n var createOptionQueries = function createOptionQueries(options) {\n return function(state) {\n var obj = {};\n forin(options, function(key) {\n obj['GET_' + fromCamels(key, '_').toUpperCase()] = function(action) {\n return state.options[key];\n };\n });\n return obj;\n };\n };\n\n var InteractionMethod = {\n API: 1,\n DROP: 2,\n BROWSE: 3,\n PASTE: 4,\n NONE: 5,\n };\n\n var getUniqueId = function getUniqueId() {\n return Math.random()\n .toString(36)\n .substr(2, 9);\n };\n\n function _typeof(obj) {\n if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {\n _typeof = function(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function(obj) {\n return obj &&\n typeof Symbol === 'function' &&\n obj.constructor === Symbol &&\n obj !== Symbol.prototype\n ? 'symbol'\n : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n var REACT_ELEMENT_TYPE;\n\n function _jsx(type, props, key, children) {\n if (!REACT_ELEMENT_TYPE) {\n REACT_ELEMENT_TYPE =\n (typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element')) ||\n 0xeac7;\n }\n\n var defaultProps = type && type.defaultProps;\n var childrenLength = arguments.length - 3;\n\n if (!props && childrenLength !== 0) {\n props = {\n children: void 0,\n };\n }\n\n if (props && defaultProps) {\n for (var propName in defaultProps) {\n if (props[propName] === void 0) {\n props[propName] = defaultProps[propName];\n }\n }\n } else if (!props) {\n props = defaultProps || {};\n }\n\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = new Array(childrenLength);\n\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 3];\n }\n\n props.children = childArray;\n }\n\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key === undefined ? null : '' + key,\n ref: null,\n props: props,\n _owner: null,\n };\n }\n\n function _asyncIterator(iterable) {\n var method;\n\n if (typeof Symbol !== 'undefined') {\n if (Symbol.asyncIterator) {\n method = iterable[Symbol.asyncIterator];\n if (method != null) return method.call(iterable);\n }\n\n if (Symbol.iterator) {\n method = iterable[Symbol.iterator];\n if (method != null) return method.call(iterable);\n }\n }\n\n throw new TypeError('Object is not async iterable');\n }\n\n function _AwaitValue(value) {\n this.wrapped = value;\n }\n\n function _AsyncGenerator(gen) {\n var front, back;\n\n function send(key, arg) {\n return new Promise(function(resolve, reject) {\n var request = {\n key: key,\n arg: arg,\n resolve: resolve,\n reject: reject,\n next: null,\n };\n\n if (back) {\n back = back.next = request;\n } else {\n front = back = request;\n resume(key, arg);\n }\n });\n }\n\n function resume(key, arg) {\n try {\n var result = gen[key](arg);\n var value = result.value;\n var wrappedAwait = value instanceof _AwaitValue;\n Promise.resolve(wrappedAwait ? value.wrapped : value).then(\n function(arg) {\n if (wrappedAwait) {\n resume('next', arg);\n return;\n }\n\n settle(result.done ? 'return' : 'normal', arg);\n },\n function(err) {\n resume('throw', err);\n }\n );\n } catch (err) {\n settle('throw', err);\n }\n }\n\n function settle(type, value) {\n switch (type) {\n case 'return':\n front.resolve({\n value: value,\n done: true,\n });\n break;\n\n case 'throw':\n front.reject(value);\n break;\n\n default:\n front.resolve({\n value: value,\n done: false,\n });\n break;\n }\n\n front = front.next;\n\n if (front) {\n resume(front.key, front.arg);\n } else {\n back = null;\n }\n }\n\n this._invoke = send;\n\n if (typeof gen.return !== 'function') {\n this.return = undefined;\n }\n }\n\n if (typeof Symbol === 'function' && Symbol.asyncIterator) {\n _AsyncGenerator.prototype[Symbol.asyncIterator] = function() {\n return this;\n };\n }\n\n _AsyncGenerator.prototype.next = function(arg) {\n return this._invoke('next', arg);\n };\n\n _AsyncGenerator.prototype.throw = function(arg) {\n return this._invoke('throw', arg);\n };\n\n _AsyncGenerator.prototype.return = function(arg) {\n return this._invoke('return', arg);\n };\n\n function _wrapAsyncGenerator(fn) {\n return function() {\n return new _AsyncGenerator(fn.apply(this, arguments));\n };\n }\n\n function _awaitAsyncGenerator(value) {\n return new _AwaitValue(value);\n }\n\n function _asyncGeneratorDelegate(inner, awaitWrap) {\n var iter = {},\n waiting = false;\n\n function pump(key, value) {\n waiting = true;\n value = new Promise(function(resolve) {\n resolve(inner[key](value));\n });\n return {\n done: false,\n value: awaitWrap(value),\n };\n }\n\n if (typeof Symbol === 'function' && Symbol.iterator) {\n iter[Symbol.iterator] = function() {\n return this;\n };\n }\n\n iter.next = function(value) {\n if (waiting) {\n waiting = false;\n return value;\n }\n\n return pump('next', value);\n };\n\n if (typeof inner.throw === 'function') {\n iter.throw = function(value) {\n if (waiting) {\n waiting = false;\n throw value;\n }\n\n return pump('throw', value);\n };\n }\n\n if (typeof inner.return === 'function') {\n iter.return = function(value) {\n return pump('return', value);\n };\n }\n\n return iter;\n }\n\n function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n }\n\n function _asyncToGenerator(fn) {\n return function() {\n var self = this,\n args = arguments;\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'next', value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'throw', err);\n }\n\n _next(undefined);\n });\n };\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n }\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineEnumerableProperties(obj, descs) {\n for (var key in descs) {\n var desc = descs[key];\n desc.configurable = desc.enumerable = true;\n if ('value' in desc) desc.writable = true;\n Object.defineProperty(obj, key, desc);\n }\n\n if (Object.getOwnPropertySymbols) {\n var objectSymbols = Object.getOwnPropertySymbols(descs);\n\n for (var i = 0; i < objectSymbols.length; i++) {\n var sym = objectSymbols[i];\n var desc = descs[sym];\n desc.configurable = desc.enumerable = true;\n if ('value' in desc) desc.writable = true;\n Object.defineProperty(obj, sym, desc);\n }\n }\n\n return obj;\n }\n\n function _defaults(obj, defaults) {\n var keys = Object.getOwnPropertyNames(defaults);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = Object.getOwnPropertyDescriptor(defaults, key);\n\n if (value && value.configurable && obj[key] === undefined) {\n Object.defineProperty(obj, key, value);\n }\n }\n\n return obj;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _extends() {\n _extends =\n Object.assign ||\n function(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n }\n\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(\n Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n })\n );\n }\n\n ownKeys.forEach(function(key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n }\n\n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly)\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n }\n\n function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function(key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function(key) {\n Object.defineProperty(\n target,\n key,\n Object.getOwnPropertyDescriptor(source, key)\n );\n });\n }\n }\n\n return target;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== 'function' && superClass !== null) {\n throw new TypeError('Super expression must either be null or a function');\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true,\n },\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n }\n\n function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n }\n\n function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf\n ? Object.getPrototypeOf\n : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n }\n\n function _setPrototypeOf(o, p) {\n _setPrototypeOf =\n Object.setPrototypeOf ||\n function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n }\n\n function isNativeReflectConstruct() {\n if (typeof Reflect === 'undefined' || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === 'function') return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));\n return true;\n } catch (e) {\n return false;\n }\n }\n\n function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n }\n\n function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf('[native code]') !== -1;\n }\n\n function _wrapNativeSuper(Class) {\n var _cache = typeof Map === 'function' ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !_isNativeFunction(Class)) return Class;\n\n if (typeof Class !== 'function') {\n throw new TypeError('Super expression must either be null or a function');\n }\n\n if (typeof _cache !== 'undefined') {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true,\n },\n });\n return _setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n }\n\n function _instanceof(left, right) {\n if (right != null && typeof Symbol !== 'undefined' && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n }\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule\n ? obj\n : {\n default: obj,\n };\n }\n\n function _interopRequireWildcard(obj) {\n if (obj && obj.__esModule) {\n return obj;\n } else {\n var newObj = {};\n\n if (obj != null) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc =\n Object.defineProperty && Object.getOwnPropertyDescriptor\n ? Object.getOwnPropertyDescriptor(obj, key)\n : {};\n\n if (desc.get || desc.set) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n }\n\n newObj.default = obj;\n return newObj;\n }\n }\n\n function _newArrowCheck(innerThis, boundThis) {\n if (innerThis !== boundThis) {\n throw new TypeError('Cannot instantiate an arrow function');\n }\n }\n\n function _objectDestructuringEmpty(obj) {\n if (obj == null) throw new TypeError('Cannot destructure undefined');\n }\n\n function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n }\n\n function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n }\n\n function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n }\n\n function _possibleConstructorReturn(self, call) {\n if (call && (typeof call === 'object' || typeof call === 'function')) {\n return call;\n }\n\n return _assertThisInitialized(self);\n }\n\n function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = _getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n }\n\n function _get(target, property, receiver) {\n if (typeof Reflect !== 'undefined' && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = _superPropBase(target, property);\n\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get(target, property, receiver || target);\n }\n\n function set(target, property, value, receiver) {\n if (typeof Reflect !== 'undefined' && Reflect.set) {\n set = Reflect.set;\n } else {\n set = function set(target, property, value, receiver) {\n var base = _superPropBase(target, property);\n\n var desc;\n\n if (base) {\n desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.set) {\n desc.set.call(receiver, value);\n return true;\n } else if (!desc.writable) {\n return false;\n }\n }\n\n desc = Object.getOwnPropertyDescriptor(receiver, property);\n\n if (desc) {\n if (!desc.writable) {\n return false;\n }\n\n desc.value = value;\n Object.defineProperty(receiver, property, desc);\n } else {\n _defineProperty(receiver, property, value);\n }\n\n return true;\n };\n }\n\n return set(target, property, value, receiver);\n }\n\n function _set(target, property, value, receiver, isStrict) {\n var s = set(target, property, value, receiver || target);\n\n if (!s && isStrict) {\n throw new Error('failed to set property');\n }\n\n return value;\n }\n\n function _taggedTemplateLiteral(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n\n return Object.freeze(\n Object.defineProperties(strings, {\n raw: {\n value: Object.freeze(raw),\n },\n })\n );\n }\n\n function _taggedTemplateLiteralLoose(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n\n strings.raw = raw;\n return strings;\n }\n\n function _temporalRef(val, name) {\n if (val === _temporalUndefined) {\n throw new ReferenceError(name + ' is not defined - temporal dead zone');\n } else {\n return val;\n }\n }\n\n function _readOnlyError(name) {\n throw new Error('\"' + name + '\" is read-only');\n }\n\n function _classNameTDZError(name) {\n throw new Error('Class \"' + name + '\" cannot be referenced in computed property keys.');\n }\n\n var _temporalUndefined = {};\n\n function _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n }\n\n function _slicedToArrayLoose(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimitLoose(arr, i) || _nonIterableRest();\n }\n\n function _toArray(arr) {\n return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest();\n }\n\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n }\n\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n }\n\n function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n }\n\n function _iterableToArray(iter) {\n if (\n Symbol.iterator in Object(iter) ||\n Object.prototype.toString.call(iter) === '[object Arguments]'\n )\n return Array.from(iter);\n }\n\n function _iterableToArrayLimit(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i['return'] != null) _i['return']();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n function _iterableToArrayLimitLoose(arr, i) {\n var _arr = [];\n\n for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done; ) {\n _arr.push(_step.value);\n\n if (i && _arr.length === i) break;\n }\n\n return _arr;\n }\n\n function _nonIterableSpread() {\n throw new TypeError('Invalid attempt to spread non-iterable instance');\n }\n\n function _nonIterableRest() {\n throw new TypeError('Invalid attempt to destructure non-iterable instance');\n }\n\n function _skipFirstGeneratorNext(fn) {\n return function() {\n var it = fn.apply(this, arguments);\n it.next();\n return it;\n };\n }\n\n function _toPrimitive(input, hint) {\n if (typeof input !== 'object' || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n\n if (prim !== undefined) {\n var res = prim.call(input, hint || 'default');\n if (typeof res !== 'object') return res;\n throw new TypeError('@@toPrimitive must return a primitive value.');\n }\n\n return (hint === 'string' ? String : Number)(input);\n }\n\n function _toPropertyKey(arg) {\n var key = _toPrimitive(arg, 'string');\n\n return typeof key === 'symbol' ? key : String(key);\n }\n\n function _initializerWarningHelper(descriptor, context) {\n throw new Error(\n 'Decorating class property failed. Please ensure that ' +\n 'proposal-class-properties is enabled and set to use loose mode. ' +\n 'To use proposal-class-properties in spec mode with decorators, wait for ' +\n 'the next major version of decorators in stage 2.'\n );\n }\n\n function _initializerDefineProperty(target, property, descriptor, context) {\n if (!descriptor) return;\n Object.defineProperty(target, property, {\n enumerable: descriptor.enumerable,\n configurable: descriptor.configurable,\n writable: descriptor.writable,\n value: descriptor.initializer ? descriptor.initializer.call(context) : void 0,\n });\n }\n\n function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object.keys(descriptor).forEach(function(key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators\n .slice()\n .reverse()\n .reduce(function(desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object.defineProperty(target, property, desc);\n desc = null;\n }\n\n return desc;\n }\n\n var id = 0;\n\n function _classPrivateFieldLooseKey(name) {\n return '__private_' + id++ + '_' + name;\n }\n\n function _classPrivateFieldLooseBase(receiver, privateKey) {\n if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {\n throw new TypeError('attempted to use private field on non-instance');\n }\n\n return receiver;\n }\n\n function _classPrivateFieldGet(receiver, privateMap) {\n var descriptor = privateMap.get(receiver);\n\n if (!descriptor) {\n throw new TypeError('attempted to get private field on non-instance');\n }\n\n if (descriptor.get) {\n return descriptor.get.call(receiver);\n }\n\n return descriptor.value;\n }\n\n function _classPrivateFieldSet(receiver, privateMap, value) {\n var descriptor = privateMap.get(receiver);\n\n if (!descriptor) {\n throw new TypeError('attempted to set private field on non-instance');\n }\n\n if (descriptor.set) {\n descriptor.set.call(receiver, value);\n } else {\n if (!descriptor.writable) {\n throw new TypeError('attempted to set read only private field');\n }\n\n descriptor.value = value;\n }\n\n return value;\n }\n\n function _classPrivateFieldDestructureSet(receiver, privateMap) {\n if (!privateMap.has(receiver)) {\n throw new TypeError('attempted to set private field on non-instance');\n }\n\n var descriptor = privateMap.get(receiver);\n\n if (descriptor.set) {\n if (!('__destrObj' in descriptor)) {\n descriptor.__destrObj = {\n set value(v) {\n descriptor.set.call(receiver, v);\n },\n };\n }\n\n return descriptor.__destrObj;\n } else {\n if (!descriptor.writable) {\n throw new TypeError('attempted to set read only private field');\n }\n\n return descriptor;\n }\n }\n\n function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) {\n if (receiver !== classConstructor) {\n throw new TypeError('Private static access of wrong provenance');\n }\n\n return descriptor.value;\n }\n\n function _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) {\n if (receiver !== classConstructor) {\n throw new TypeError('Private static access of wrong provenance');\n }\n\n if (!descriptor.writable) {\n throw new TypeError('attempted to set read only private field');\n }\n\n descriptor.value = value;\n return value;\n }\n\n function _classStaticPrivateMethodGet(receiver, classConstructor, method) {\n if (receiver !== classConstructor) {\n throw new TypeError('Private static access of wrong provenance');\n }\n\n return method;\n }\n\n function _classStaticPrivateMethodSet() {\n throw new TypeError('attempted to set read only static private field');\n }\n\n function _decorate(decorators, factory, superClass, mixins) {\n var api = _getDecoratorsApi();\n\n if (mixins) {\n for (var i = 0; i < mixins.length; i++) {\n api = mixins[i](api);\n }\n }\n\n var r = factory(function initialize(O) {\n api.initializeInstanceElements(O, decorated.elements);\n }, superClass);\n var decorated = api.decorateClass(\n _coalesceClassElements(r.d.map(_createElementDescriptor)),\n decorators\n );\n api.initializeClassElements(r.F, decorated.elements);\n return api.runClassFinishers(r.F, decorated.finishers);\n }\n\n function _getDecoratorsApi() {\n _getDecoratorsApi = function() {\n return api;\n };\n\n var api = {\n elementsDefinitionOrder: [['method'], ['field']],\n initializeInstanceElements: function(O, elements) {\n ['method', 'field'].forEach(function(kind) {\n elements.forEach(function(element) {\n if (element.kind === kind && element.placement === 'own') {\n this.defineClassElement(O, element);\n }\n }, this);\n }, this);\n },\n initializeClassElements: function(F, elements) {\n var proto = F.prototype;\n ['method', 'field'].forEach(function(kind) {\n elements.forEach(function(element) {\n var placement = element.placement;\n\n if (\n element.kind === kind &&\n (placement === 'static' || placement === 'prototype')\n ) {\n var receiver = placement === 'static' ? F : proto;\n this.defineClassElement(receiver, element);\n }\n }, this);\n }, this);\n },\n defineClassElement: function(receiver, element) {\n var descriptor = element.descriptor;\n\n if (element.kind === 'field') {\n var initializer = element.initializer;\n descriptor = {\n enumerable: descriptor.enumerable,\n writable: descriptor.writable,\n configurable: descriptor.configurable,\n value: initializer === void 0 ? void 0 : initializer.call(receiver),\n };\n }\n\n Object.defineProperty(receiver, element.key, descriptor);\n },\n decorateClass: function(elements, decorators) {\n var newElements = [];\n var finishers = [];\n var placements = {\n static: [],\n prototype: [],\n own: [],\n };\n elements.forEach(function(element) {\n this.addElementPlacement(element, placements);\n }, this);\n elements.forEach(function(element) {\n if (!_hasDecorators(element)) return newElements.push(element);\n var elementFinishersExtras = this.decorateElement(element, placements);\n newElements.push(elementFinishersExtras.element);\n newElements.push.apply(newElements, elementFinishersExtras.extras);\n finishers.push.apply(finishers, elementFinishersExtras.finishers);\n }, this);\n\n if (!decorators) {\n return {\n elements: newElements,\n finishers: finishers,\n };\n }\n\n var result = this.decorateConstructor(newElements, decorators);\n finishers.push.apply(finishers, result.finishers);\n result.finishers = finishers;\n return result;\n },\n addElementPlacement: function(element, placements, silent) {\n var keys = placements[element.placement];\n\n if (!silent && keys.indexOf(element.key) !== -1) {\n throw new TypeError('Duplicated element (' + element.key + ')');\n }\n\n keys.push(element.key);\n },\n decorateElement: function(element, placements) {\n var extras = [];\n var finishers = [];\n\n for (var decorators = element.decorators, i = decorators.length - 1; i >= 0; i--) {\n var keys = placements[element.placement];\n keys.splice(keys.indexOf(element.key), 1);\n var elementObject = this.fromElementDescriptor(element);\n var elementFinisherExtras = this.toElementFinisherExtras(\n (0, decorators[i])(elementObject) || elementObject\n );\n element = elementFinisherExtras.element;\n this.addElementPlacement(element, placements);\n\n if (elementFinisherExtras.finisher) {\n finishers.push(elementFinisherExtras.finisher);\n }\n\n var newExtras = elementFinisherExtras.extras;\n\n if (newExtras) {\n for (var j = 0; j < newExtras.length; j++) {\n this.addElementPlacement(newExtras[j], placements);\n }\n\n extras.push.apply(extras, newExtras);\n }\n }\n\n return {\n element: element,\n finishers: finishers,\n extras: extras,\n };\n },\n decorateConstructor: function(elements, decorators) {\n var finishers = [];\n\n for (var i = decorators.length - 1; i >= 0; i--) {\n var obj = this.fromClassDescriptor(elements);\n var elementsAndFinisher = this.toClassDescriptor(\n (0, decorators[i])(obj) || obj\n );\n\n if (elementsAndFinisher.finisher !== undefined) {\n finishers.push(elementsAndFinisher.finisher);\n }\n\n if (elementsAndFinisher.elements !== undefined) {\n elements = elementsAndFinisher.elements;\n\n for (var j = 0; j < elements.length - 1; j++) {\n for (var k = j + 1; k < elements.length; k++) {\n if (\n elements[j].key === elements[k].key &&\n elements[j].placement === elements[k].placement\n ) {\n throw new TypeError(\n 'Duplicated element (' + elements[j].key + ')'\n );\n }\n }\n }\n }\n }\n\n return {\n elements: elements,\n finishers: finishers,\n };\n },\n fromElementDescriptor: function(element) {\n var obj = {\n kind: element.kind,\n key: element.key,\n placement: element.placement,\n descriptor: element.descriptor,\n };\n var desc = {\n value: 'Descriptor',\n configurable: true,\n };\n Object.defineProperty(obj, Symbol.toStringTag, desc);\n if (element.kind === 'field') obj.initializer = element.initializer;\n return obj;\n },\n toElementDescriptors: function(elementObjects) {\n if (elementObjects === undefined) return;\n return _toArray(elementObjects).map(function(elementObject) {\n var element = this.toElementDescriptor(elementObject);\n this.disallowProperty(elementObject, 'finisher', 'An element descriptor');\n this.disallowProperty(elementObject, 'extras', 'An element descriptor');\n return element;\n }, this);\n },\n toElementDescriptor: function(elementObject) {\n var kind = String(elementObject.kind);\n\n if (kind !== 'method' && kind !== 'field') {\n throw new TypeError(\n 'An element descriptor\\'s .kind property must be either \"method\" or' +\n ' \"field\", but a decorator created an element descriptor with' +\n ' .kind \"' +\n kind +\n '\"'\n );\n }\n\n var key = _toPropertyKey(elementObject.key);\n\n var placement = String(elementObject.placement);\n\n if (placement !== 'static' && placement !== 'prototype' && placement !== 'own') {\n throw new TypeError(\n 'An element descriptor\\'s .placement property must be one of \"static\",' +\n ' \"prototype\" or \"own\", but a decorator created an element descriptor' +\n ' with .placement \"' +\n placement +\n '\"'\n );\n }\n\n var descriptor = elementObject.descriptor;\n this.disallowProperty(elementObject, 'elements', 'An element descriptor');\n var element = {\n kind: kind,\n key: key,\n placement: placement,\n descriptor: Object.assign({}, descriptor),\n };\n\n if (kind !== 'field') {\n this.disallowProperty(elementObject, 'initializer', 'A method descriptor');\n } else {\n this.disallowProperty(\n descriptor,\n 'get',\n 'The property descriptor of a field descriptor'\n );\n this.disallowProperty(\n descriptor,\n 'set',\n 'The property descriptor of a field descriptor'\n );\n this.disallowProperty(\n descriptor,\n 'value',\n 'The property descriptor of a field descriptor'\n );\n element.initializer = elementObject.initializer;\n }\n\n return element;\n },\n toElementFinisherExtras: function(elementObject) {\n var element = this.toElementDescriptor(elementObject);\n\n var finisher = _optionalCallableProperty(elementObject, 'finisher');\n\n var extras = this.toElementDescriptors(elementObject.extras);\n return {\n element: element,\n finisher: finisher,\n extras: extras,\n };\n },\n fromClassDescriptor: function(elements) {\n var obj = {\n kind: 'class',\n elements: elements.map(this.fromElementDescriptor, this),\n };\n var desc = {\n value: 'Descriptor',\n configurable: true,\n };\n Object.defineProperty(obj, Symbol.toStringTag, desc);\n return obj;\n },\n toClassDescriptor: function(obj) {\n var kind = String(obj.kind);\n\n if (kind !== 'class') {\n throw new TypeError(\n 'A class descriptor\\'s .kind property must be \"class\", but a decorator' +\n ' created a class descriptor with .kind \"' +\n kind +\n '\"'\n );\n }\n\n this.disallowProperty(obj, 'key', 'A class descriptor');\n this.disallowProperty(obj, 'placement', 'A class descriptor');\n this.disallowProperty(obj, 'descriptor', 'A class descriptor');\n this.disallowProperty(obj, 'initializer', 'A class descriptor');\n this.disallowProperty(obj, 'extras', 'A class descriptor');\n\n var finisher = _optionalCallableProperty(obj, 'finisher');\n\n var elements = this.toElementDescriptors(obj.elements);\n return {\n elements: elements,\n finisher: finisher,\n };\n },\n runClassFinishers: function(constructor, finishers) {\n for (var i = 0; i < finishers.length; i++) {\n var newConstructor = (0, finishers[i])(constructor);\n\n if (newConstructor !== undefined) {\n if (typeof newConstructor !== 'function') {\n throw new TypeError('Finishers must return a constructor.');\n }\n\n constructor = newConstructor;\n }\n }\n\n return constructor;\n },\n disallowProperty: function(obj, name, objectType) {\n if (obj[name] !== undefined) {\n throw new TypeError(objectType + \" can't have a .\" + name + ' property.');\n }\n },\n };\n return api;\n }\n\n function _createElementDescriptor(def) {\n var key = _toPropertyKey(def.key);\n\n var descriptor;\n\n if (def.kind === 'method') {\n descriptor = {\n value: def.value,\n writable: true,\n configurable: true,\n enumerable: false,\n };\n } else if (def.kind === 'get') {\n descriptor = {\n get: def.value,\n configurable: true,\n enumerable: false,\n };\n } else if (def.kind === 'set') {\n descriptor = {\n set: def.value,\n configurable: true,\n enumerable: false,\n };\n } else if (def.kind === 'field') {\n descriptor = {\n configurable: true,\n writable: true,\n enumerable: true,\n };\n }\n\n var element = {\n kind: def.kind === 'field' ? 'field' : 'method',\n key: key,\n placement: def.static ? 'static' : def.kind === 'field' ? 'own' : 'prototype',\n descriptor: descriptor,\n };\n if (def.decorators) element.decorators = def.decorators;\n if (def.kind === 'field') element.initializer = def.value;\n return element;\n }\n\n function _coalesceGetterSetter(element, other) {\n if (element.descriptor.get !== undefined) {\n other.descriptor.get = element.descriptor.get;\n } else {\n other.descriptor.set = element.descriptor.set;\n }\n }\n\n function _coalesceClassElements(elements) {\n var newElements = [];\n\n var isSameElement = function(other) {\n return (\n other.kind === 'method' &&\n other.key === element.key &&\n other.placement === element.placement\n );\n };\n\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n var other;\n\n if (element.kind === 'method' && (other = newElements.find(isSameElement))) {\n if (_isDataDescriptor(element.descriptor) || _isDataDescriptor(other.descriptor)) {\n if (_hasDecorators(element) || _hasDecorators(other)) {\n throw new ReferenceError(\n 'Duplicated methods (' + element.key + \") can't be decorated.\"\n );\n }\n\n other.descriptor = element.descriptor;\n } else {\n if (_hasDecorators(element)) {\n if (_hasDecorators(other)) {\n throw new ReferenceError(\n \"Decorators can't be placed on different accessors with for \" +\n 'the same property (' +\n element.key +\n ').'\n );\n }\n\n other.decorators = element.decorators;\n }\n\n _coalesceGetterSetter(element, other);\n }\n } else {\n newElements.push(element);\n }\n }\n\n return newElements;\n }\n\n function _hasDecorators(element) {\n return element.decorators && element.decorators.length;\n }\n\n function _isDataDescriptor(desc) {\n return desc !== undefined && !(desc.value === undefined && desc.writable === undefined);\n }\n\n function _optionalCallableProperty(obj, name) {\n var value = obj[name];\n\n if (value !== undefined && typeof value !== 'function') {\n throw new TypeError(\"Expected '\" + name + \"' to be a function\");\n }\n\n return value;\n }\n\n function _classPrivateMethodGet(receiver, privateSet, fn) {\n if (!privateSet.has(receiver)) {\n throw new TypeError('attempted to get private field on non-instance');\n }\n\n return fn;\n }\n\n function _classPrivateMethodSet() {\n throw new TypeError('attempted to reassign private method');\n }\n\n function _wrapRegExp(re, groups) {\n _wrapRegExp = function(re, groups) {\n return new BabelRegExp(re, groups);\n };\n\n var _RegExp = _wrapNativeSuper(RegExp);\n\n var _super = RegExp.prototype;\n\n var _groups = new WeakMap();\n\n function BabelRegExp(re, groups) {\n var _this = _RegExp.call(this, re);\n\n _groups.set(_this, groups);\n\n return _this;\n }\n\n _inherits(BabelRegExp, _RegExp);\n\n BabelRegExp.prototype.exec = function(str) {\n var result = _super.exec.call(this, str);\n\n if (result) result.groups = buildGroups(result, this);\n return result;\n };\n\n BabelRegExp.prototype[Symbol.replace] = function(str, substitution) {\n if (typeof substitution === 'string') {\n var groups = _groups.get(this);\n\n return _super[Symbol.replace].call(\n this,\n str,\n substitution.replace(/\\$<([^>]+)>/g, function(_, name) {\n return '$' + groups[name];\n })\n );\n } else if (typeof substitution === 'function') {\n var _this = this;\n\n return _super[Symbol.replace].call(this, str, function() {\n var args = [];\n args.push.apply(args, arguments);\n\n if (typeof args[args.length - 1] !== 'object') {\n args.push(buildGroups(args, _this));\n }\n\n return substitution.apply(this, args);\n });\n } else {\n return _super[Symbol.replace].call(this, str, substitution);\n }\n };\n\n function buildGroups(result, re) {\n var g = _groups.get(re);\n\n return Object.keys(g).reduce(function(groups, name) {\n groups[name] = result[g[name]];\n return groups;\n }, Object.create(null));\n }\n\n return _wrapRegExp.apply(this, arguments);\n }\n\n var arrayRemove = function arrayRemove(arr, index) {\n return arr.splice(index, 1);\n };\n\n var run = function run(cb, sync) {\n if (sync) {\n cb();\n } else if (document.hidden) {\n Promise.resolve(1).then(cb);\n } else {\n setTimeout(cb, 0);\n }\n };\n\n var on = function on() {\n var listeners = [];\n var off = function off(event, cb) {\n arrayRemove(\n listeners,\n listeners.findIndex(function(listener) {\n return listener.event === event && (listener.cb === cb || !cb);\n })\n );\n };\n var _fire = function fire(event, args, sync) {\n listeners\n .filter(function(listener) {\n return listener.event === event;\n })\n .map(function(listener) {\n return listener.cb;\n })\n .forEach(function(cb) {\n return run(function() {\n return cb.apply(void 0, _toConsumableArray(args));\n }, sync);\n });\n };\n return {\n fireSync: function fireSync(event) {\n for (\n var _len = arguments.length,\n args = new Array(_len > 1 ? _len - 1 : 0),\n _key = 1;\n _key < _len;\n _key++\n ) {\n args[_key - 1] = arguments[_key];\n }\n _fire(event, args, true);\n },\n fire: function fire(event) {\n for (\n var _len2 = arguments.length,\n args = new Array(_len2 > 1 ? _len2 - 1 : 0),\n _key2 = 1;\n _key2 < _len2;\n _key2++\n ) {\n args[_key2 - 1] = arguments[_key2];\n }\n _fire(event, args, false);\n },\n on: function on(event, cb) {\n listeners.push({ event: event, cb: cb });\n },\n onOnce: function onOnce(event, _cb) {\n listeners.push({\n event: event,\n cb: function cb() {\n off(event, _cb);\n _cb.apply(void 0, arguments);\n },\n });\n },\n off: off,\n };\n };\n\n var copyObjectPropertiesToObject = function copyObjectPropertiesToObject(\n src,\n target,\n excluded\n ) {\n Object.getOwnPropertyNames(src)\n .filter(function(property) {\n return !excluded.includes(property);\n })\n .forEach(function(key) {\n return Object.defineProperty(\n target,\n key,\n Object.getOwnPropertyDescriptor(src, key)\n );\n });\n };\n\n var PRIVATE = [\n 'fire',\n 'process',\n 'revert',\n 'load',\n 'on',\n 'off',\n 'onOnce',\n 'retryLoad',\n 'extend',\n 'archive',\n 'archived',\n 'release',\n 'released',\n 'requestProcessing',\n 'freeze',\n ];\n\n var createItemAPI = function createItemAPI(item) {\n var api = {};\n copyObjectPropertiesToObject(item, api, PRIVATE);\n return api;\n };\n\n var removeReleasedItems = function removeReleasedItems(items) {\n items.forEach(function(item, index) {\n if (item.released) {\n arrayRemove(items, index);\n }\n });\n };\n\n var ItemStatus = {\n INIT: 1,\n IDLE: 2,\n PROCESSING_QUEUED: 9,\n PROCESSING: 3,\n PROCESSING_COMPLETE: 5,\n PROCESSING_ERROR: 6,\n PROCESSING_REVERT_ERROR: 10,\n LOADING: 7,\n LOAD_ERROR: 8,\n };\n\n var FileOrigin = {\n INPUT: 1,\n LIMBO: 2,\n LOCAL: 3,\n };\n\n var getNonNumeric = function getNonNumeric(str) {\n return /[^0-9]+/.exec(str);\n };\n\n var getDecimalSeparator = function getDecimalSeparator() {\n return getNonNumeric((1.1).toLocaleString())[0];\n };\n\n var getThousandsSeparator = function getThousandsSeparator() {\n // Added for browsers that do not return the thousands separator (happend on native browser Android 4.4.4)\n // We check against the normal toString output and if they're the same return a comma when decimal separator is a dot\n var decimalSeparator = getDecimalSeparator();\n var thousandsStringWithSeparator = (1000.0).toLocaleString();\n var thousandsStringWithoutSeparator = (1000.0).toString();\n if (thousandsStringWithSeparator !== thousandsStringWithoutSeparator) {\n return getNonNumeric(thousandsStringWithSeparator)[0];\n }\n return decimalSeparator === '.' ? ',' : '.';\n };\n\n var Type = {\n BOOLEAN: 'boolean',\n INT: 'int',\n NUMBER: 'number',\n STRING: 'string',\n ARRAY: 'array',\n OBJECT: 'object',\n FUNCTION: 'function',\n ACTION: 'action',\n SERVER_API: 'serverapi',\n REGEX: 'regex',\n };\n\n // all registered filters\n var filters = [];\n\n // loops over matching filters and passes options to each filter, returning the mapped results\n var applyFilterChain = function applyFilterChain(key, value, utils) {\n return new Promise(function(resolve, reject) {\n // find matching filters for this key\n var matchingFilters = filters\n .filter(function(f) {\n return f.key === key;\n })\n .map(function(f) {\n return f.cb;\n });\n\n // resolve now\n if (matchingFilters.length === 0) {\n resolve(value);\n return;\n }\n\n // first filter to kick things of\n var initialFilter = matchingFilters.shift();\n\n // chain filters\n matchingFilters\n .reduce(\n // loop over promises passing value to next promise\n function(current, next) {\n return current.then(function(value) {\n return next(value, utils);\n });\n },\n\n // call initial filter, will return a promise\n initialFilter(value, utils)\n\n // all executed\n )\n .then(function(value) {\n return resolve(value);\n })\n .catch(function(error) {\n return reject(error);\n });\n });\n };\n\n var applyFilters = function applyFilters(key, value, utils) {\n return filters\n .filter(function(f) {\n return f.key === key;\n })\n .map(function(f) {\n return f.cb(value, utils);\n });\n };\n\n // adds a new filter to the list\n var addFilter = function addFilter(key, cb) {\n return filters.push({ key: key, cb: cb });\n };\n\n var extendDefaultOptions = function extendDefaultOptions(additionalOptions) {\n return Object.assign(defaultOptions, additionalOptions);\n };\n\n var getOptions = function getOptions() {\n return Object.assign({}, defaultOptions);\n };\n\n var setOptions = function setOptions(opts) {\n forin(opts, function(key, value) {\n // key does not exist, so this option cannot be set\n if (!defaultOptions[key]) {\n return;\n }\n defaultOptions[key][0] = getValueByType(\n value,\n defaultOptions[key][0],\n defaultOptions[key][1]\n );\n });\n };\n\n // default options on app\n var defaultOptions = {\n // the id to add to the root element\n id: [null, Type.STRING],\n\n // input field name to use\n name: ['filepond', Type.STRING],\n\n // disable the field\n disabled: [false, Type.BOOLEAN],\n\n // classname to put on wrapper\n className: [null, Type.STRING],\n\n // is the field required\n required: [false, Type.BOOLEAN],\n\n // Allow media capture when value is set\n captureMethod: [null, Type.STRING],\n // - \"camera\", \"microphone\" or \"camcorder\",\n // - Does not work with multiple on apple devices\n // - If set, acceptedFileTypes must be made to match with media wildcard \"image/*\", \"audio/*\" or \"video/*\"\n\n // sync `acceptedFileTypes` property with `accept` attribute\n allowSyncAcceptAttribute: [true, Type.BOOLEAN],\n\n // Feature toggles\n allowDrop: [true, Type.BOOLEAN], // Allow dropping of files\n allowBrowse: [true, Type.BOOLEAN], // Allow browsing the file system\n allowPaste: [true, Type.BOOLEAN], // Allow pasting files\n allowMultiple: [false, Type.BOOLEAN], // Allow multiple files (disabled by default, as multiple attribute is also required on input to allow multiple)\n allowReplace: [true, Type.BOOLEAN], // Allow dropping a file on other file to replace it (only works when multiple is set to false)\n allowRevert: [true, Type.BOOLEAN], // Allows user to revert file upload\n allowRemove: [true, Type.BOOLEAN], // Allow user to remove a file\n allowProcess: [true, Type.BOOLEAN], // Allows user to process a file, when set to false, this removes the file upload button\n allowReorder: [false, Type.BOOLEAN], // Allow reordering of files\n allowDirectoriesOnly: [false, Type.BOOLEAN], // Allow only selecting directories with browse (no support for filtering dnd at this point)\n\n // Try store file if `server` not set\n storeAsFile: [false, Type.BOOLEAN],\n\n // Revert mode\n forceRevert: [false, Type.BOOLEAN], // Set to 'force' to require the file to be reverted before removal\n\n // Input requirements\n maxFiles: [null, Type.INT], // Max number of files\n checkValidity: [false, Type.BOOLEAN], // Enables custom validity messages\n\n // Where to put file\n itemInsertLocationFreedom: [true, Type.BOOLEAN], // Set to false to always add items to begin or end of list\n itemInsertLocation: ['before', Type.STRING], // Default index in list to add items that have been dropped at the top of the list\n itemInsertInterval: [75, Type.INT],\n\n // Drag 'n Drop related\n dropOnPage: [false, Type.BOOLEAN], // Allow dropping of files anywhere on page (prevents browser from opening file if dropped outside of Up)\n dropOnElement: [true, Type.BOOLEAN], // Drop needs to happen on element (set to false to also load drops outside of Up)\n dropValidation: [false, Type.BOOLEAN], // Enable or disable validating files on drop\n ignoredFiles: [['.ds_store', 'thumbs.db', 'desktop.ini'], Type.ARRAY],\n\n // Upload related\n instantUpload: [true, Type.BOOLEAN], // Should upload files immediately on drop\n maxParallelUploads: [2, Type.INT], // Maximum files to upload in parallel\n allowMinimumUploadDuration: [true, Type.BOOLEAN], // if true uploads take at least 750 ms, this ensures the user sees the upload progress giving trust the upload actually happened\n\n // Chunks\n chunkUploads: [false, Type.BOOLEAN], // Enable chunked uploads\n chunkForce: [false, Type.BOOLEAN], // Force use of chunk uploads even for files smaller than chunk size\n chunkSize: [5000000, Type.INT], // Size of chunks (5MB default)\n chunkRetryDelays: [[500, 1000, 3000], Type.ARRAY], // Amount of times to retry upload of a chunk when it fails\n\n // The server api end points to use for uploading (see docs)\n server: [null, Type.SERVER_API],\n\n // File size calculations, can set to 1024, this is only used for display, properties use file size base 1000\n fileSizeBase: [1000, Type.INT],\n\n // Labels and status messages\n labelFileSizeBytes: ['bytes', Type.STRING],\n labelFileSizeKilobytes: ['KB', Type.STRING],\n labelFileSizeMegabytes: ['MB', Type.STRING],\n labelFileSizeGigabytes: ['GB', Type.STRING],\n\n labelDecimalSeparator: [getDecimalSeparator(), Type.STRING], // Default is locale separator\n labelThousandsSeparator: [getThousandsSeparator(), Type.STRING], // Default is locale separator\n\n labelIdle: [\n 'Drag & Drop your files or Browse',\n Type.STRING,\n ],\n\n labelInvalidField: ['Field contains invalid files', Type.STRING],\n labelFileWaitingForSize: ['Waiting for size', Type.STRING],\n labelFileSizeNotAvailable: ['Size not available', Type.STRING],\n labelFileCountSingular: ['file in list', Type.STRING],\n labelFileCountPlural: ['files in list', Type.STRING],\n labelFileLoading: ['Loading', Type.STRING],\n labelFileAdded: ['Added', Type.STRING], // assistive only\n labelFileLoadError: ['Error during load', Type.STRING],\n labelFileRemoved: ['Removed', Type.STRING], // assistive only\n labelFileRemoveError: ['Error during remove', Type.STRING],\n labelFileProcessing: ['Uploading', Type.STRING],\n labelFileProcessingComplete: ['Upload complete', Type.STRING],\n labelFileProcessingAborted: ['Upload cancelled', Type.STRING],\n labelFileProcessingError: ['Error during upload', Type.STRING],\n labelFileProcessingRevertError: ['Error during revert', Type.STRING],\n\n labelTapToCancel: ['tap to cancel', Type.STRING],\n labelTapToRetry: ['tap to retry', Type.STRING],\n labelTapToUndo: ['tap to undo', Type.STRING],\n\n labelButtonRemoveItem: ['Remove', Type.STRING],\n labelButtonAbortItemLoad: ['Abort', Type.STRING],\n labelButtonRetryItemLoad: ['Retry', Type.STRING],\n labelButtonAbortItemProcessing: ['Cancel', Type.STRING],\n labelButtonUndoItemProcessing: ['Undo', Type.STRING],\n labelButtonRetryItemProcessing: ['Retry', Type.STRING],\n labelButtonProcessItem: ['Upload', Type.STRING],\n\n // make sure width and height plus viewpox are even numbers so icons are nicely centered\n iconRemove: [\n '',\n Type.STRING,\n ],\n\n iconProcess: [\n '',\n Type.STRING,\n ],\n\n iconRetry: [\n '',\n Type.STRING,\n ],\n\n iconUndo: [\n '',\n Type.STRING,\n ],\n\n iconDone: [\n '',\n Type.STRING,\n ],\n\n // event handlers\n oninit: [null, Type.FUNCTION],\n onwarning: [null, Type.FUNCTION],\n onerror: [null, Type.FUNCTION],\n onactivatefile: [null, Type.FUNCTION],\n oninitfile: [null, Type.FUNCTION],\n onaddfilestart: [null, Type.FUNCTION],\n onaddfileprogress: [null, Type.FUNCTION],\n onaddfile: [null, Type.FUNCTION],\n onprocessfilestart: [null, Type.FUNCTION],\n onprocessfileprogress: [null, Type.FUNCTION],\n onprocessfileabort: [null, Type.FUNCTION],\n onprocessfilerevert: [null, Type.FUNCTION],\n onprocessfile: [null, Type.FUNCTION],\n onprocessfiles: [null, Type.FUNCTION],\n onremovefile: [null, Type.FUNCTION],\n onpreparefile: [null, Type.FUNCTION],\n onupdatefiles: [null, Type.FUNCTION],\n onreorderfiles: [null, Type.FUNCTION],\n\n // hooks\n beforeDropFile: [null, Type.FUNCTION],\n beforeAddFile: [null, Type.FUNCTION],\n beforeRemoveFile: [null, Type.FUNCTION],\n beforePrepareFile: [null, Type.FUNCTION],\n\n // styles\n stylePanelLayout: [null, Type.STRING], // null 'integrated', 'compact', 'circle'\n stylePanelAspectRatio: [null, Type.STRING], // null or '3:2' or 1\n styleItemPanelAspectRatio: [null, Type.STRING],\n styleButtonRemoveItemPosition: ['left', Type.STRING],\n styleButtonProcessItemPosition: ['right', Type.STRING],\n styleLoadIndicatorPosition: ['right', Type.STRING],\n styleProgressIndicatorPosition: ['right', Type.STRING],\n styleButtonRemoveItemAlign: [false, Type.BOOLEAN],\n\n // custom initial files array\n files: [[], Type.ARRAY],\n\n // show support by displaying credits\n credits: [['https://pqina.nl/', 'Powered by PQINA'], Type.ARRAY],\n };\n\n var getItemByQuery = function getItemByQuery(items, query) {\n // just return first index\n if (isEmpty(query)) {\n return items[0] || null;\n }\n\n // query is index\n if (isInt(query)) {\n return items[query] || null;\n }\n\n // if query is item, get the id\n if (typeof query === 'object') {\n query = query.id;\n }\n\n // assume query is a string and return item by id\n return (\n items.find(function(item) {\n return item.id === query;\n }) || null\n );\n };\n\n var getNumericAspectRatioFromString = function getNumericAspectRatioFromString(aspectRatio) {\n if (isEmpty(aspectRatio)) {\n return aspectRatio;\n }\n if (/:/.test(aspectRatio)) {\n var parts = aspectRatio.split(':');\n return parts[1] / parts[0];\n }\n return parseFloat(aspectRatio);\n };\n\n var getActiveItems = function getActiveItems(items) {\n return items.filter(function(item) {\n return !item.archived;\n });\n };\n\n var Status = {\n EMPTY: 0,\n IDLE: 1, // waiting\n ERROR: 2, // a file is in error state\n BUSY: 3, // busy processing or loading\n READY: 4, // all files uploaded\n };\n\n var res = null;\n var canUpdateFileInput = function canUpdateFileInput() {\n if (res === null) {\n try {\n var dataTransfer = new DataTransfer();\n dataTransfer.items.add(new File(['hello world'], 'This_Works.txt'));\n var el = document.createElement('input');\n el.setAttribute('type', 'file');\n el.files = dataTransfer.files;\n res = el.files.length === 1;\n } catch (err) {\n res = false;\n }\n }\n return res;\n };\n\n var ITEM_ERROR = [\n ItemStatus.LOAD_ERROR,\n ItemStatus.PROCESSING_ERROR,\n ItemStatus.PROCESSING_REVERT_ERROR,\n ];\n\n var ITEM_BUSY = [\n ItemStatus.LOADING,\n ItemStatus.PROCESSING,\n ItemStatus.PROCESSING_QUEUED,\n ItemStatus.INIT,\n ];\n\n var ITEM_READY = [ItemStatus.PROCESSING_COMPLETE];\n\n var isItemInErrorState = function isItemInErrorState(item) {\n return ITEM_ERROR.includes(item.status);\n };\n var isItemInBusyState = function isItemInBusyState(item) {\n return ITEM_BUSY.includes(item.status);\n };\n var isItemInReadyState = function isItemInReadyState(item) {\n return ITEM_READY.includes(item.status);\n };\n\n var isAsync = function isAsync(state) {\n return (\n isObject(state.options.server) &&\n (isObject(state.options.server.process) || isFunction(state.options.server.process))\n );\n };\n\n var queries = function queries(state) {\n return {\n GET_STATUS: function GET_STATUS() {\n var items = getActiveItems(state.items);\n var EMPTY = Status.EMPTY,\n ERROR = Status.ERROR,\n BUSY = Status.BUSY,\n IDLE = Status.IDLE,\n READY = Status.READY;\n\n if (items.length === 0) return EMPTY;\n\n if (items.some(isItemInErrorState)) return ERROR;\n\n if (items.some(isItemInBusyState)) return BUSY;\n\n if (items.some(isItemInReadyState)) return READY;\n\n return IDLE;\n },\n\n GET_ITEM: function GET_ITEM(query) {\n return getItemByQuery(state.items, query);\n },\n\n GET_ACTIVE_ITEM: function GET_ACTIVE_ITEM(query) {\n return getItemByQuery(getActiveItems(state.items), query);\n },\n\n GET_ACTIVE_ITEMS: function GET_ACTIVE_ITEMS() {\n return getActiveItems(state.items);\n },\n\n GET_ITEMS: function GET_ITEMS() {\n return state.items;\n },\n\n GET_ITEM_NAME: function GET_ITEM_NAME(query) {\n var item = getItemByQuery(state.items, query);\n return item ? item.filename : null;\n },\n\n GET_ITEM_SIZE: function GET_ITEM_SIZE(query) {\n var item = getItemByQuery(state.items, query);\n return item ? item.fileSize : null;\n },\n\n GET_STYLES: function GET_STYLES() {\n return Object.keys(state.options)\n .filter(function(key) {\n return /^style/.test(key);\n })\n .map(function(option) {\n return {\n name: option,\n value: state.options[option],\n };\n });\n },\n\n GET_PANEL_ASPECT_RATIO: function GET_PANEL_ASPECT_RATIO() {\n var isShapeCircle = /circle/.test(state.options.stylePanelLayout);\n var aspectRatio = isShapeCircle\n ? 1\n : getNumericAspectRatioFromString(state.options.stylePanelAspectRatio);\n return aspectRatio;\n },\n\n GET_ITEM_PANEL_ASPECT_RATIO: function GET_ITEM_PANEL_ASPECT_RATIO() {\n return state.options.styleItemPanelAspectRatio;\n },\n\n GET_ITEMS_BY_STATUS: function GET_ITEMS_BY_STATUS(status) {\n return getActiveItems(state.items).filter(function(item) {\n return item.status === status;\n });\n },\n\n GET_TOTAL_ITEMS: function GET_TOTAL_ITEMS() {\n return getActiveItems(state.items).length;\n },\n\n SHOULD_UPDATE_FILE_INPUT: function SHOULD_UPDATE_FILE_INPUT() {\n return state.options.storeAsFile && canUpdateFileInput() && !isAsync(state);\n },\n\n IS_ASYNC: function IS_ASYNC() {\n return isAsync(state);\n },\n\n GET_FILE_SIZE_LABELS: function GET_FILE_SIZE_LABELS(query) {\n return {\n labelBytes: query('GET_LABEL_FILE_SIZE_BYTES') || undefined,\n labelKilobytes: query('GET_LABEL_FILE_SIZE_KILOBYTES') || undefined,\n labelMegabytes: query('GET_LABEL_FILE_SIZE_MEGABYTES') || undefined,\n labelGigabytes: query('GET_LABEL_FILE_SIZE_GIGABYTES') || undefined,\n };\n },\n };\n };\n\n var hasRoomForItem = function hasRoomForItem(state) {\n var count = getActiveItems(state.items).length;\n\n // if cannot have multiple items, to add one item it should currently not contain items\n if (!state.options.allowMultiple) {\n return count === 0;\n }\n\n // if allows multiple items, we check if a max item count has been set, if not, there's no limit\n var maxFileCount = state.options.maxFiles;\n if (maxFileCount === null) {\n return true;\n }\n\n // we check if the current count is smaller than the max count, if so, another file can still be added\n if (count < maxFileCount) {\n return true;\n }\n\n // no more room for another file\n return false;\n };\n\n var limit = function limit(value, min, max) {\n return Math.max(Math.min(max, value), min);\n };\n\n var arrayInsert = function arrayInsert(arr, index, item) {\n return arr.splice(index, 0, item);\n };\n\n var insertItem = function insertItem(items, item, index) {\n if (isEmpty(item)) {\n return null;\n }\n\n // if index is undefined, append\n if (typeof index === 'undefined') {\n items.push(item);\n return item;\n }\n\n // limit the index to the size of the items array\n index = limit(index, 0, items.length);\n\n // add item to array\n arrayInsert(items, index, item);\n\n // expose\n return item;\n };\n\n var isBase64DataURI = function isBase64DataURI(str) {\n return /^\\s*data:([a-z]+\\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\\-._~:@\\/?%\\s]*)\\s*$/i.test(\n str\n );\n };\n\n var getFilenameFromURL = function getFilenameFromURL(url) {\n return url\n .split('/')\n .pop()\n .split('?')\n .shift();\n };\n\n var getExtensionFromFilename = function getExtensionFromFilename(name) {\n return name.split('.').pop();\n };\n\n var guesstimateExtension = function guesstimateExtension(type) {\n // if no extension supplied, exit here\n if (typeof type !== 'string') {\n return '';\n }\n\n // get subtype\n var subtype = type.split('/').pop();\n\n // is svg subtype\n if (/svg/.test(subtype)) {\n return 'svg';\n }\n\n if (/zip|compressed/.test(subtype)) {\n return 'zip';\n }\n\n if (/plain/.test(subtype)) {\n return 'txt';\n }\n\n if (/msword/.test(subtype)) {\n return 'doc';\n }\n\n // if is valid subtype\n if (/[a-z]+/.test(subtype)) {\n // always use jpg extension\n if (subtype === 'jpeg') {\n return 'jpg';\n }\n\n // return subtype\n return subtype;\n }\n\n return '';\n };\n\n var leftPad = function leftPad(value) {\n var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n return (padding + value).slice(-padding.length);\n };\n\n var getDateString = function getDateString() {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n return (\n date.getFullYear() +\n '-' +\n leftPad(date.getMonth() + 1, '00') +\n '-' +\n leftPad(date.getDate(), '00') +\n '_' +\n leftPad(date.getHours(), '00') +\n '-' +\n leftPad(date.getMinutes(), '00') +\n '-' +\n leftPad(date.getSeconds(), '00')\n );\n };\n\n var getFileFromBlob = function getFileFromBlob(blob, filename) {\n var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var extension = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var file =\n typeof type === 'string'\n ? blob.slice(0, blob.size, type)\n : blob.slice(0, blob.size, blob.type);\n file.lastModifiedDate = new Date();\n\n // copy relative path\n if (blob._relativePath) file._relativePath = blob._relativePath;\n\n // if blob has name property, use as filename if no filename supplied\n if (!isString(filename)) {\n filename = getDateString();\n }\n\n // if filename supplied but no extension and filename has extension\n if (filename && extension === null && getExtensionFromFilename(filename)) {\n file.name = filename;\n } else {\n extension = extension || guesstimateExtension(file.type);\n file.name = filename + (extension ? '.' + extension : '');\n }\n\n return file;\n };\n\n var getBlobBuilder = function getBlobBuilder() {\n return (window.BlobBuilder =\n window.BlobBuilder ||\n window.WebKitBlobBuilder ||\n window.MozBlobBuilder ||\n window.MSBlobBuilder);\n };\n\n var createBlob = function createBlob(arrayBuffer, mimeType) {\n var BB = getBlobBuilder();\n\n if (BB) {\n var bb = new BB();\n bb.append(arrayBuffer);\n return bb.getBlob(mimeType);\n }\n\n return new Blob([arrayBuffer], {\n type: mimeType,\n });\n };\n\n var getBlobFromByteStringWithMimeType = function getBlobFromByteStringWithMimeType(\n byteString,\n mimeType\n ) {\n var ab = new ArrayBuffer(byteString.length);\n var ia = new Uint8Array(ab);\n\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n\n return createBlob(ab, mimeType);\n };\n\n var getMimeTypeFromBase64DataURI = function getMimeTypeFromBase64DataURI(dataURI) {\n return (/^data:(.+);/.exec(dataURI) || [])[1] || null;\n };\n\n var getBase64DataFromBase64DataURI = function getBase64DataFromBase64DataURI(dataURI) {\n // get data part of string (remove data:image/jpeg...,)\n var data = dataURI.split(',')[1];\n\n // remove any whitespace as that causes InvalidCharacterError in IE\n return data.replace(/\\s/g, '');\n };\n\n var getByteStringFromBase64DataURI = function getByteStringFromBase64DataURI(dataURI) {\n return atob(getBase64DataFromBase64DataURI(dataURI));\n };\n\n var getBlobFromBase64DataURI = function getBlobFromBase64DataURI(dataURI) {\n var mimeType = getMimeTypeFromBase64DataURI(dataURI);\n var byteString = getByteStringFromBase64DataURI(dataURI);\n\n return getBlobFromByteStringWithMimeType(byteString, mimeType);\n };\n\n var getFileFromBase64DataURI = function getFileFromBase64DataURI(dataURI, filename, extension) {\n return getFileFromBlob(getBlobFromBase64DataURI(dataURI), filename, null, extension);\n };\n\n var getFileNameFromHeader = function getFileNameFromHeader(header) {\n // test if is content disposition header, if not exit\n if (!/^content-disposition:/i.test(header)) return null;\n\n // get filename parts\n var matches = header\n .split(/filename=|filename\\*=.+''/)\n .splice(1)\n .map(function(name) {\n return name.trim().replace(/^[\"']|[;\"']{0,2}$/g, '');\n })\n .filter(function(name) {\n return name.length;\n });\n\n return matches.length ? decodeURI(matches[matches.length - 1]) : null;\n };\n\n var getFileSizeFromHeader = function getFileSizeFromHeader(header) {\n if (/content-length:/i.test(header)) {\n var size = header.match(/[0-9]+/)[0];\n return size ? parseInt(size, 10) : null;\n }\n return null;\n };\n\n var getTranfserIdFromHeader = function getTranfserIdFromHeader(header) {\n if (/x-content-transfer-id:/i.test(header)) {\n var id = (header.split(':')[1] || '').trim();\n return id || null;\n }\n return null;\n };\n\n var getFileInfoFromHeaders = function getFileInfoFromHeaders(headers) {\n var info = {\n source: null,\n name: null,\n size: null,\n };\n\n var rows = headers.split('\\n');\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n try {\n for (\n var _iterator = rows[Symbol.iterator](), _step;\n !(_iteratorNormalCompletion = (_step = _iterator.next()).done);\n _iteratorNormalCompletion = true\n ) {\n var header = _step.value;\n\n var name = getFileNameFromHeader(header);\n if (name) {\n info.name = name;\n continue;\n }\n\n var size = getFileSizeFromHeader(header);\n if (size) {\n info.size = size;\n continue;\n }\n\n var source = getTranfserIdFromHeader(header);\n if (source) {\n info.source = source;\n continue;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return info;\n };\n\n var createFileLoader = function createFileLoader(fetchFn) {\n var state = {\n source: null,\n complete: false,\n progress: 0,\n size: null,\n timestamp: null,\n duration: 0,\n request: null,\n };\n\n var getProgress = function getProgress() {\n return state.progress;\n };\n var abort = function abort() {\n if (state.request && state.request.abort) {\n state.request.abort();\n }\n };\n\n // load source\n var load = function load() {\n // get quick reference\n var source = state.source;\n\n api.fire('init', source);\n\n // Load Files\n if (source instanceof File) {\n api.fire('load', source);\n } else if (source instanceof Blob) {\n // Load blobs, set default name to current date\n api.fire('load', getFileFromBlob(source, source.name));\n } else if (isBase64DataURI(source)) {\n // Load base 64, set default name to current date\n api.fire('load', getFileFromBase64DataURI(source));\n } else {\n // Deal as if is external URL, let's load it!\n loadURL(source);\n }\n };\n\n // loads a url\n var loadURL = function loadURL(url) {\n // is remote url and no fetch method supplied\n if (!fetchFn) {\n api.fire('error', {\n type: 'error',\n body: \"Can't load URL\",\n code: 400,\n });\n\n return;\n }\n\n // set request start\n state.timestamp = Date.now();\n\n // load file\n state.request = fetchFn(\n url,\n function(response) {\n // update duration\n state.duration = Date.now() - state.timestamp;\n\n // done!\n state.complete = true;\n\n // turn blob response into a file\n if (response instanceof Blob) {\n response = getFileFromBlob(\n response,\n response.name || getFilenameFromURL(url)\n );\n }\n\n api.fire(\n 'load',\n // if has received blob, we go with blob, if no response, we return null\n response instanceof Blob ? response : response ? response.body : null\n );\n },\n function(error) {\n api.fire(\n 'error',\n typeof error === 'string'\n ? {\n type: 'error',\n code: 0,\n body: error,\n }\n : error\n );\n },\n function(computable, current, total) {\n // collected some meta data already\n if (total) {\n state.size = total;\n }\n\n // update duration\n state.duration = Date.now() - state.timestamp;\n\n // if we can't compute progress, we're not going to fire progress events\n if (!computable) {\n state.progress = null;\n return;\n }\n\n // update progress percentage\n state.progress = current / total;\n\n // expose\n api.fire('progress', state.progress);\n },\n function() {\n api.fire('abort');\n },\n function(response) {\n var fileinfo = getFileInfoFromHeaders(\n typeof response === 'string' ? response : response.headers\n );\n api.fire('meta', {\n size: state.size || fileinfo.size,\n filename: fileinfo.name,\n source: fileinfo.source,\n });\n }\n );\n };\n\n var api = Object.assign({}, on(), {\n setSource: function setSource(source) {\n return (state.source = source);\n },\n getProgress: getProgress, // file load progress\n abort: abort, // abort file load\n load: load, // start load\n });\n\n return api;\n };\n\n var isGet = function isGet(method) {\n return /GET|HEAD/.test(method);\n };\n\n var sendRequest = function sendRequest(data, url, options) {\n var api = {\n onheaders: function onheaders() {},\n onprogress: function onprogress() {},\n onload: function onload() {},\n ontimeout: function ontimeout() {},\n onerror: function onerror() {},\n onabort: function onabort() {},\n abort: function abort() {\n aborted = true;\n xhr.abort();\n },\n };\n\n // timeout identifier, only used when timeout is defined\n var aborted = false;\n var headersReceived = false;\n\n // set default options\n options = Object.assign(\n {\n method: 'POST',\n headers: {},\n withCredentials: false,\n },\n options\n );\n\n // encode url\n url = encodeURI(url);\n\n // if method is GET, add any received data to url\n\n if (isGet(options.method) && data) {\n url =\n '' +\n url +\n encodeURIComponent(typeof data === 'string' ? data : JSON.stringify(data));\n }\n\n // create request\n var xhr = new XMLHttpRequest();\n\n // progress of load\n var process = isGet(options.method) ? xhr : xhr.upload;\n process.onprogress = function(e) {\n // no progress event when aborted ( onprogress is called once after abort() )\n if (aborted) {\n return;\n }\n\n api.onprogress(e.lengthComputable, e.loaded, e.total);\n };\n\n // tries to get header info to the app as fast as possible\n xhr.onreadystatechange = function() {\n // not interesting in these states ('unsent' and 'openend' as they don't give us any additional info)\n if (xhr.readyState < 2) {\n return;\n }\n\n // no server response\n if (xhr.readyState === 4 && xhr.status === 0) {\n return;\n }\n\n if (headersReceived) {\n return;\n }\n\n headersReceived = true;\n\n // we've probably received some useful data in response headers\n api.onheaders(xhr);\n };\n\n // load successful\n xhr.onload = function() {\n // is classified as valid response\n if (xhr.status >= 200 && xhr.status < 300) {\n api.onload(xhr);\n } else {\n api.onerror(xhr);\n }\n };\n\n // error during load\n xhr.onerror = function() {\n return api.onerror(xhr);\n };\n\n // request aborted\n xhr.onabort = function() {\n aborted = true;\n api.onabort();\n };\n\n // request timeout\n xhr.ontimeout = function() {\n return api.ontimeout(xhr);\n };\n\n // open up open up!\n xhr.open(options.method, url, true);\n\n // set timeout if defined (do it after open so IE11 plays ball)\n if (isInt(options.timeout)) {\n xhr.timeout = options.timeout;\n }\n\n // add headers\n Object.keys(options.headers).forEach(function(key) {\n var value = unescape(encodeURIComponent(options.headers[key]));\n xhr.setRequestHeader(key, value);\n });\n\n // set type of response\n if (options.responseType) {\n xhr.responseType = options.responseType;\n }\n\n // set credentials\n if (options.withCredentials) {\n xhr.withCredentials = true;\n }\n\n // let's send our data\n xhr.send(data);\n\n return api;\n };\n\n var createResponse = function createResponse(type, code, body, headers) {\n return {\n type: type,\n code: code,\n body: body,\n headers: headers,\n };\n };\n\n var createTimeoutResponse = function createTimeoutResponse(cb) {\n return function(xhr) {\n cb(createResponse('error', 0, 'Timeout', xhr.getAllResponseHeaders()));\n };\n };\n\n var hasQS = function hasQS(str) {\n return /\\?/.test(str);\n };\n var buildURL = function buildURL() {\n var url = '';\n for (var _len = arguments.length, parts = new Array(_len), _key = 0; _key < _len; _key++) {\n parts[_key] = arguments[_key];\n }\n parts.forEach(function(part) {\n url += hasQS(url) && hasQS(part) ? part.replace(/\\?/, '&') : part;\n });\n return url;\n };\n\n var createFetchFunction = function createFetchFunction() {\n var apiUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var action = arguments.length > 1 ? arguments[1] : undefined;\n // custom handler (should also handle file, load, error, progress and abort)\n if (typeof action === 'function') {\n return action;\n }\n\n // no action supplied\n if (!action || !isString(action.url)) {\n return null;\n }\n\n // set onload hanlder\n var onload =\n action.onload ||\n function(res) {\n return res;\n };\n var onerror =\n action.onerror ||\n function(res) {\n return null;\n };\n\n // internal handler\n return function(url, load, error, progress, abort, headers) {\n // do local or remote request based on if the url is external\n var request = sendRequest(\n url,\n buildURL(apiUrl, action.url),\n Object.assign({}, action, {\n responseType: 'blob',\n })\n );\n\n request.onload = function(xhr) {\n // get headers\n var headers = xhr.getAllResponseHeaders();\n\n // get filename\n var filename = getFileInfoFromHeaders(headers).name || getFilenameFromURL(url);\n\n // create response\n load(\n createResponse(\n 'load',\n xhr.status,\n action.method === 'HEAD'\n ? null\n : getFileFromBlob(onload(xhr.response), filename),\n headers\n )\n );\n };\n\n request.onerror = function(xhr) {\n error(\n createResponse(\n 'error',\n xhr.status,\n onerror(xhr.response) || xhr.statusText,\n xhr.getAllResponseHeaders()\n )\n );\n };\n\n request.onheaders = function(xhr) {\n headers(createResponse('headers', xhr.status, null, xhr.getAllResponseHeaders()));\n };\n\n request.ontimeout = createTimeoutResponse(error);\n request.onprogress = progress;\n request.onabort = abort;\n\n // should return request\n return request;\n };\n };\n\n var ChunkStatus = {\n QUEUED: 0,\n COMPLETE: 1,\n PROCESSING: 2,\n ERROR: 3,\n WAITING: 4,\n };\n\n /*\n function signature:\n (file, metadata, load, error, progress, abort, transfer, options) => {\n return {\n abort:() => {}\n }\n }\n */\n\n // apiUrl, action, name, file, metadata, load, error, progress, abort, transfer, options\n var processFileChunked = function processFileChunked(\n apiUrl,\n action,\n name,\n file,\n metadata,\n load,\n error,\n progress,\n abort,\n transfer,\n options\n ) {\n // all chunks\n var chunks = [];\n var chunkTransferId = options.chunkTransferId,\n chunkServer = options.chunkServer,\n chunkSize = options.chunkSize,\n chunkRetryDelays = options.chunkRetryDelays;\n\n // default state\n var state = {\n serverId: chunkTransferId,\n aborted: false,\n };\n\n // set onload handlers\n var ondata =\n action.ondata ||\n function(fd) {\n return fd;\n };\n var onload =\n action.onload ||\n function(xhr, method) {\n return method === 'HEAD' ? xhr.getResponseHeader('Upload-Offset') : xhr.response;\n };\n var onerror =\n action.onerror ||\n function(res) {\n return null;\n };\n\n // create server hook\n var requestTransferId = function requestTransferId(cb) {\n var formData = new FormData();\n\n // add metadata under same name\n if (isObject(metadata)) formData.append(name, JSON.stringify(metadata));\n\n var headers =\n typeof action.headers === 'function'\n ? action.headers(file, metadata)\n : Object.assign({}, action.headers, {\n 'Upload-Length': file.size,\n });\n\n var requestParams = Object.assign({}, action, {\n headers: headers,\n });\n\n // send request object\n var request = sendRequest(\n ondata(formData),\n buildURL(apiUrl, action.url),\n requestParams\n );\n\n request.onload = function(xhr) {\n return cb(onload(xhr, requestParams.method));\n };\n\n request.onerror = function(xhr) {\n return error(\n createResponse(\n 'error',\n xhr.status,\n onerror(xhr.response) || xhr.statusText,\n xhr.getAllResponseHeaders()\n )\n );\n };\n\n request.ontimeout = createTimeoutResponse(error);\n };\n\n var requestTransferOffset = function requestTransferOffset(cb) {\n var requestUrl = buildURL(apiUrl, chunkServer.url, state.serverId);\n\n var headers =\n typeof action.headers === 'function'\n ? action.headers(state.serverId)\n : Object.assign({}, action.headers);\n\n var requestParams = {\n headers: headers,\n method: 'HEAD',\n };\n\n var request = sendRequest(null, requestUrl, requestParams);\n\n request.onload = function(xhr) {\n return cb(onload(xhr, requestParams.method));\n };\n\n request.onerror = function(xhr) {\n return error(\n createResponse(\n 'error',\n xhr.status,\n onerror(xhr.response) || xhr.statusText,\n xhr.getAllResponseHeaders()\n )\n );\n };\n\n request.ontimeout = createTimeoutResponse(error);\n };\n\n // create chunks\n var lastChunkIndex = Math.floor(file.size / chunkSize);\n for (var i = 0; i <= lastChunkIndex; i++) {\n var offset = i * chunkSize;\n var data = file.slice(offset, offset + chunkSize, 'application/offset+octet-stream');\n chunks[i] = {\n index: i,\n size: data.size,\n offset: offset,\n data: data,\n file: file,\n progress: 0,\n retries: _toConsumableArray(chunkRetryDelays),\n status: ChunkStatus.QUEUED,\n error: null,\n request: null,\n timeout: null,\n };\n }\n\n var completeProcessingChunks = function completeProcessingChunks() {\n return load(state.serverId);\n };\n\n var canProcessChunk = function canProcessChunk(chunk) {\n return chunk.status === ChunkStatus.QUEUED || chunk.status === ChunkStatus.ERROR;\n };\n\n var processChunk = function processChunk(chunk) {\n // processing is paused, wait here\n if (state.aborted) return;\n\n // get next chunk to process\n chunk = chunk || chunks.find(canProcessChunk);\n\n // no more chunks to process\n if (!chunk) {\n // all done?\n if (\n chunks.every(function(chunk) {\n return chunk.status === ChunkStatus.COMPLETE;\n })\n ) {\n completeProcessingChunks();\n }\n\n // no chunk to handle\n return;\n }\n\n // now processing this chunk\n chunk.status = ChunkStatus.PROCESSING;\n chunk.progress = null;\n\n // allow parsing of formdata\n var ondata =\n chunkServer.ondata ||\n function(fd) {\n return fd;\n };\n var onerror =\n chunkServer.onerror ||\n function(res) {\n return null;\n };\n\n // send request object\n var requestUrl = buildURL(apiUrl, chunkServer.url, state.serverId);\n\n var headers =\n typeof chunkServer.headers === 'function'\n ? chunkServer.headers(chunk)\n : Object.assign({}, chunkServer.headers, {\n 'Content-Type': 'application/offset+octet-stream',\n 'Upload-Offset': chunk.offset,\n 'Upload-Length': file.size,\n 'Upload-Name': file.name,\n });\n\n var request = (chunk.request = sendRequest(\n ondata(chunk.data),\n requestUrl,\n Object.assign({}, chunkServer, {\n headers: headers,\n })\n ));\n\n request.onload = function() {\n // done!\n chunk.status = ChunkStatus.COMPLETE;\n\n // remove request reference\n chunk.request = null;\n\n // start processing more chunks\n processChunks();\n };\n\n request.onprogress = function(lengthComputable, loaded, total) {\n chunk.progress = lengthComputable ? loaded : null;\n updateTotalProgress();\n };\n\n request.onerror = function(xhr) {\n chunk.status = ChunkStatus.ERROR;\n chunk.request = null;\n chunk.error = onerror(xhr.response) || xhr.statusText;\n if (!retryProcessChunk(chunk)) {\n error(\n createResponse(\n 'error',\n xhr.status,\n onerror(xhr.response) || xhr.statusText,\n xhr.getAllResponseHeaders()\n )\n );\n }\n };\n\n request.ontimeout = function(xhr) {\n chunk.status = ChunkStatus.ERROR;\n chunk.request = null;\n if (!retryProcessChunk(chunk)) {\n createTimeoutResponse(error)(xhr);\n }\n };\n\n request.onabort = function() {\n chunk.status = ChunkStatus.QUEUED;\n chunk.request = null;\n abort();\n };\n };\n\n var retryProcessChunk = function retryProcessChunk(chunk) {\n // no more retries left\n if (chunk.retries.length === 0) return false;\n\n // new retry\n chunk.status = ChunkStatus.WAITING;\n clearTimeout(chunk.timeout);\n chunk.timeout = setTimeout(function() {\n processChunk(chunk);\n }, chunk.retries.shift());\n\n // we're going to retry\n return true;\n };\n\n var updateTotalProgress = function updateTotalProgress() {\n // calculate total progress fraction\n var totalBytesTransfered = chunks.reduce(function(p, chunk) {\n if (p === null || chunk.progress === null) return null;\n return p + chunk.progress;\n }, 0);\n\n // can't compute progress\n if (totalBytesTransfered === null) return progress(false, 0, 0);\n\n // calculate progress values\n var totalSize = chunks.reduce(function(total, chunk) {\n return total + chunk.size;\n }, 0);\n\n // can update progress indicator\n progress(true, totalBytesTransfered, totalSize);\n };\n\n // process new chunks\n var processChunks = function processChunks() {\n var totalProcessing = chunks.filter(function(chunk) {\n return chunk.status === ChunkStatus.PROCESSING;\n }).length;\n if (totalProcessing >= 1) return;\n processChunk();\n };\n\n var abortChunks = function abortChunks() {\n chunks.forEach(function(chunk) {\n clearTimeout(chunk.timeout);\n if (chunk.request) {\n chunk.request.abort();\n }\n });\n };\n\n // let's go!\n if (!state.serverId) {\n requestTransferId(function(serverId) {\n // stop here if aborted, might have happened in between request and callback\n if (state.aborted) return;\n\n // pass back to item so we can use it if something goes wrong\n transfer(serverId);\n\n // store internally\n state.serverId = serverId;\n processChunks();\n });\n } else {\n requestTransferOffset(function(offset) {\n // stop here if aborted, might have happened in between request and callback\n if (state.aborted) return;\n\n // mark chunks with lower offset as complete\n chunks\n .filter(function(chunk) {\n return chunk.offset < offset;\n })\n .forEach(function(chunk) {\n chunk.status = ChunkStatus.COMPLETE;\n chunk.progress = chunk.size;\n });\n\n // continue processing\n processChunks();\n });\n }\n\n return {\n abort: function abort() {\n state.aborted = true;\n abortChunks();\n },\n };\n };\n\n /*\n function signature:\n (file, metadata, load, error, progress, abort) => {\n return {\n abort:() => {}\n }\n }\n */\n var createFileProcessorFunction = function createFileProcessorFunction(\n apiUrl,\n action,\n name,\n options\n ) {\n return function(file, metadata, load, error, progress, abort, transfer) {\n // no file received\n if (!file) return;\n\n // if was passed a file, and we can chunk it, exit here\n var canChunkUpload = options.chunkUploads;\n var shouldChunkUpload = canChunkUpload && file.size > options.chunkSize;\n var willChunkUpload = canChunkUpload && (shouldChunkUpload || options.chunkForce);\n if (file instanceof Blob && willChunkUpload)\n return processFileChunked(\n apiUrl,\n action,\n name,\n file,\n metadata,\n load,\n error,\n progress,\n abort,\n transfer,\n options\n );\n\n // set handlers\n var ondata =\n action.ondata ||\n function(fd) {\n return fd;\n };\n var onload =\n action.onload ||\n function(res) {\n return res;\n };\n var onerror =\n action.onerror ||\n function(res) {\n return null;\n };\n\n var headers =\n typeof action.headers === 'function'\n ? action.headers(file, metadata) || {}\n : Object.assign(\n {},\n\n action.headers\n );\n\n var requestParams = Object.assign({}, action, {\n headers: headers,\n });\n\n // create formdata object\n var formData = new FormData();\n\n // add metadata under same name\n if (isObject(metadata)) {\n formData.append(name, JSON.stringify(metadata));\n }\n\n // Turn into an array of objects so no matter what the input, we can handle it the same way\n (file instanceof Blob ? [{ name: null, file: file }] : file).forEach(function(item) {\n formData.append(\n name,\n item.file,\n item.name === null ? item.file.name : '' + item.name + item.file.name\n );\n });\n\n // send request object\n var request = sendRequest(\n ondata(formData),\n buildURL(apiUrl, action.url),\n requestParams\n );\n request.onload = function(xhr) {\n load(\n createResponse(\n 'load',\n xhr.status,\n onload(xhr.response),\n xhr.getAllResponseHeaders()\n )\n );\n };\n\n request.onerror = function(xhr) {\n error(\n createResponse(\n 'error',\n xhr.status,\n onerror(xhr.response) || xhr.statusText,\n xhr.getAllResponseHeaders()\n )\n );\n };\n\n request.ontimeout = createTimeoutResponse(error);\n request.onprogress = progress;\n request.onabort = abort;\n\n // should return request\n return request;\n };\n };\n\n var createProcessorFunction = function createProcessorFunction() {\n var apiUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var name = arguments.length > 2 ? arguments[2] : undefined;\n var options = arguments.length > 3 ? arguments[3] : undefined;\n\n // custom handler (should also handle file, load, error, progress and abort)\n if (typeof action === 'function')\n return function() {\n for (\n var _len = arguments.length, params = new Array(_len), _key = 0;\n _key < _len;\n _key++\n ) {\n params[_key] = arguments[_key];\n }\n return action.apply(void 0, [name].concat(params, [options]));\n };\n\n // no action supplied\n if (!action || !isString(action.url)) return null;\n\n // internal handler\n return createFileProcessorFunction(apiUrl, action, name, options);\n };\n\n /*\n function signature:\n (uniqueFileId, load, error) => { }\n */\n var createRevertFunction = function createRevertFunction() {\n var apiUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var action = arguments.length > 1 ? arguments[1] : undefined;\n // is custom implementation\n if (typeof action === 'function') {\n return action;\n }\n\n // no action supplied, return stub function, interface will work, but file won't be removed\n if (!action || !isString(action.url)) {\n return function(uniqueFileId, load) {\n return load();\n };\n }\n\n // set onload hanlder\n var onload =\n action.onload ||\n function(res) {\n return res;\n };\n var onerror =\n action.onerror ||\n function(res) {\n return null;\n };\n\n // internal implementation\n return function(uniqueFileId, load, error) {\n var request = sendRequest(\n uniqueFileId,\n apiUrl + action.url,\n action // contains method, headers and withCredentials properties\n );\n request.onload = function(xhr) {\n load(\n createResponse(\n 'load',\n xhr.status,\n onload(xhr.response),\n xhr.getAllResponseHeaders()\n )\n );\n };\n\n request.onerror = function(xhr) {\n error(\n createResponse(\n 'error',\n xhr.status,\n onerror(xhr.response) || xhr.statusText,\n xhr.getAllResponseHeaders()\n )\n );\n };\n\n request.ontimeout = createTimeoutResponse(error);\n\n return request;\n };\n };\n\n var getRandomNumber = function getRandomNumber() {\n var min = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n return min + Math.random() * (max - min);\n };\n\n var createPerceivedPerformanceUpdater = function createPerceivedPerformanceUpdater(cb) {\n var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var tickMin = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 25;\n var tickMax = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 250;\n var timeout = null;\n var start = Date.now();\n\n var tick = function tick() {\n var runtime = Date.now() - start;\n var delay = getRandomNumber(tickMin, tickMax);\n\n if (runtime + delay > duration) {\n delay = runtime + delay - duration;\n }\n\n var progress = runtime / duration;\n if (progress >= 1 || document.hidden) {\n cb(1);\n return;\n }\n\n cb(progress);\n\n timeout = setTimeout(tick, delay);\n };\n\n if (duration > 0) tick();\n\n return {\n clear: function clear() {\n clearTimeout(timeout);\n },\n };\n };\n\n var createFileProcessor = function createFileProcessor(processFn, options) {\n var state = {\n complete: false,\n perceivedProgress: 0,\n perceivedPerformanceUpdater: null,\n progress: null,\n timestamp: null,\n perceivedDuration: 0,\n duration: 0,\n request: null,\n response: null,\n };\n var allowMinimumUploadDuration = options.allowMinimumUploadDuration;\n\n var process = function process(file, metadata) {\n var progressFn = function progressFn() {\n // we've not yet started the real download, stop here\n // the request might not go through, for instance, there might be some server trouble\n // if state.progress is null, the server does not allow computing progress and we show the spinner instead\n if (state.duration === 0 || state.progress === null) return;\n\n // as we're now processing, fire the progress event\n api.fire('progress', api.getProgress());\n };\n\n var completeFn = function completeFn() {\n state.complete = true;\n api.fire('load-perceived', state.response.body);\n };\n\n // let's start processing\n api.fire('start');\n\n // set request start\n state.timestamp = Date.now();\n\n // create perceived performance progress indicator\n state.perceivedPerformanceUpdater = createPerceivedPerformanceUpdater(\n function(progress) {\n state.perceivedProgress = progress;\n state.perceivedDuration = Date.now() - state.timestamp;\n\n progressFn();\n\n // if fake progress is done, and a response has been received,\n // and we've not yet called the complete method\n if (state.response && state.perceivedProgress === 1 && !state.complete) {\n // we done!\n completeFn();\n }\n },\n // random delay as in a list of files you start noticing\n // files uploading at the exact same speed\n allowMinimumUploadDuration ? getRandomNumber(750, 1500) : 0\n );\n\n // remember request so we can abort it later\n state.request = processFn(\n // the file to process\n file,\n\n // the metadata to send along\n metadata,\n\n // callbacks (load, error, progress, abort, transfer)\n // load expects the body to be a server id if\n // you want to make use of revert\n function(response) {\n // we put the response in state so we can access\n // it outside of this method\n state.response = isObject(response)\n ? response\n : {\n type: 'load',\n code: 200,\n body: '' + response,\n headers: {},\n };\n\n // update duration\n state.duration = Date.now() - state.timestamp;\n\n // force progress to 1 as we're now done\n state.progress = 1;\n\n // actual load is done let's share results\n api.fire('load', state.response.body);\n\n // we are really done\n // if perceived progress is 1 ( wait for perceived progress to complete )\n // or if server does not support progress ( null )\n if (\n !allowMinimumUploadDuration ||\n (allowMinimumUploadDuration && state.perceivedProgress === 1)\n ) {\n completeFn();\n }\n },\n\n // error is expected to be an object with type, code, body\n function(error) {\n // cancel updater\n state.perceivedPerformanceUpdater.clear();\n\n // update others about this error\n api.fire(\n 'error',\n isObject(error)\n ? error\n : {\n type: 'error',\n code: 0,\n body: '' + error,\n }\n );\n },\n\n // actual processing progress\n function(computable, current, total) {\n // update actual duration\n state.duration = Date.now() - state.timestamp;\n\n // update actual progress\n state.progress = computable ? current / total : null;\n\n progressFn();\n },\n\n // abort does not expect a value\n function() {\n // stop updater\n state.perceivedPerformanceUpdater.clear();\n\n // fire the abort event so we can switch visuals\n api.fire('abort', state.response ? state.response.body : null);\n },\n\n // register the id for this transfer\n function(transferId) {\n api.fire('transfer', transferId);\n }\n );\n };\n\n var abort = function abort() {\n // no request running, can't abort\n if (!state.request) return;\n\n // stop updater\n state.perceivedPerformanceUpdater.clear();\n\n // abort actual request\n if (state.request.abort) state.request.abort();\n\n // if has response object, we've completed the request\n state.complete = true;\n };\n\n var reset = function reset() {\n abort();\n state.complete = false;\n state.perceivedProgress = 0;\n state.progress = 0;\n state.timestamp = null;\n state.perceivedDuration = 0;\n state.duration = 0;\n state.request = null;\n state.response = null;\n };\n\n var getProgress = allowMinimumUploadDuration\n ? function() {\n return state.progress ? Math.min(state.progress, state.perceivedProgress) : null;\n }\n : function() {\n return state.progress || null;\n };\n\n var getDuration = allowMinimumUploadDuration\n ? function() {\n return Math.min(state.duration, state.perceivedDuration);\n }\n : function() {\n return state.duration;\n };\n\n var api = Object.assign({}, on(), {\n process: process, // start processing file\n abort: abort, // abort active process request\n getProgress: getProgress,\n getDuration: getDuration,\n reset: reset,\n });\n\n return api;\n };\n\n var getFilenameWithoutExtension = function getFilenameWithoutExtension(name) {\n return name.substr(0, name.lastIndexOf('.')) || name;\n };\n\n var createFileStub = function createFileStub(source) {\n var data = [source.name, source.size, source.type];\n\n // is blob or base64, then we need to set the name\n if (source instanceof Blob || isBase64DataURI(source)) {\n data[0] = source.name || getDateString();\n } else if (isBase64DataURI(source)) {\n // if is base64 data uri we need to determine the average size and type\n data[1] = source.length;\n data[2] = getMimeTypeFromBase64DataURI(source);\n } else if (isString(source)) {\n // url\n data[0] = getFilenameFromURL(source);\n data[1] = 0;\n data[2] = 'application/octet-stream';\n }\n\n return {\n name: data[0],\n size: data[1],\n type: data[2],\n };\n };\n\n var isFile = function isFile(value) {\n return !!(value instanceof File || (value instanceof Blob && value.name));\n };\n\n var deepCloneObject = function deepCloneObject(src) {\n if (!isObject(src)) return src;\n var target = isArray(src) ? [] : {};\n for (var key in src) {\n if (!src.hasOwnProperty(key)) continue;\n var v = src[key];\n target[key] = v && isObject(v) ? deepCloneObject(v) : v;\n }\n return target;\n };\n\n var createItem = function createItem() {\n var origin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var serverFileReference =\n arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var file = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n // unique id for this item, is used to identify the item across views\n var id = getUniqueId();\n\n /**\n * Internal item state\n */\n var state = {\n // is archived\n archived: false,\n\n // if is frozen, no longer fires events\n frozen: false,\n\n // removed from view\n released: false,\n\n // original source\n source: null,\n\n // file model reference\n file: file,\n\n // id of file on server\n serverFileReference: serverFileReference,\n\n // id of file transfer on server\n transferId: null,\n\n // is aborted\n processingAborted: false,\n\n // current item status\n status: serverFileReference ? ItemStatus.PROCESSING_COMPLETE : ItemStatus.INIT,\n\n // active processes\n activeLoader: null,\n activeProcessor: null,\n };\n\n // callback used when abort processing is called to link back to the resolve method\n var abortProcessingRequestComplete = null;\n\n /**\n * Externally added item metadata\n */\n var metadata = {};\n\n // item data\n var setStatus = function setStatus(status) {\n return (state.status = status);\n };\n\n // fire event unless the item has been archived\n var fire = function fire(event) {\n if (state.released || state.frozen) return;\n for (\n var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1;\n _key < _len;\n _key++\n ) {\n params[_key - 1] = arguments[_key];\n }\n api.fire.apply(api, [event].concat(params));\n };\n\n // file data\n var getFileExtension = function getFileExtension() {\n return getExtensionFromFilename(state.file.name);\n };\n var getFileType = function getFileType() {\n return state.file.type;\n };\n var getFileSize = function getFileSize() {\n return state.file.size;\n };\n var getFile = function getFile() {\n return state.file;\n };\n\n //\n // logic to load a file\n //\n var load = function load(source, loader, onload) {\n // remember the original item source\n state.source = source;\n\n // source is known\n api.fireSync('init');\n\n // file stub is already there\n if (state.file) {\n api.fireSync('load-skip');\n return;\n }\n\n // set a stub file object while loading the actual data\n state.file = createFileStub(source);\n\n // starts loading\n loader.on('init', function() {\n fire('load-init');\n });\n\n // we'eve received a size indication, let's update the stub\n loader.on('meta', function(meta) {\n // set size of file stub\n state.file.size = meta.size;\n\n // set name of file stub\n state.file.filename = meta.filename;\n\n // if has received source, we done\n if (meta.source) {\n origin = FileOrigin.LIMBO;\n state.serverFileReference = meta.source;\n state.status = ItemStatus.PROCESSING_COMPLETE;\n }\n\n // size has been updated\n fire('load-meta');\n });\n\n // the file is now loading we need to update the progress indicators\n loader.on('progress', function(progress) {\n setStatus(ItemStatus.LOADING);\n\n fire('load-progress', progress);\n });\n\n // an error was thrown while loading the file, we need to switch to error state\n loader.on('error', function(error) {\n setStatus(ItemStatus.LOAD_ERROR);\n\n fire('load-request-error', error);\n });\n\n // user or another process aborted the file load (cannot retry)\n loader.on('abort', function() {\n setStatus(ItemStatus.INIT);\n fire('load-abort');\n });\n\n // done loading\n loader.on('load', function(file) {\n // as we've now loaded the file the loader is no longer required\n state.activeLoader = null;\n\n // called when file has loaded succesfully\n var success = function success(result) {\n // set (possibly) transformed file\n state.file = isFile(result) ? result : state.file;\n\n // file received\n if (origin === FileOrigin.LIMBO && state.serverFileReference) {\n setStatus(ItemStatus.PROCESSING_COMPLETE);\n } else {\n setStatus(ItemStatus.IDLE);\n }\n\n fire('load');\n };\n\n var error = function error(result) {\n // set original file\n state.file = file;\n fire('load-meta');\n\n setStatus(ItemStatus.LOAD_ERROR);\n fire('load-file-error', result);\n };\n\n // if we already have a server file reference, we don't need to call the onload method\n if (state.serverFileReference) {\n success(file);\n return;\n }\n\n // no server id, let's give this file the full treatment\n onload(file, success, error);\n });\n\n // set loader source data\n loader.setSource(source);\n\n // set as active loader\n state.activeLoader = loader;\n\n // load the source data\n loader.load();\n };\n\n var retryLoad = function retryLoad() {\n if (!state.activeLoader) {\n return;\n }\n state.activeLoader.load();\n };\n\n var abortLoad = function abortLoad() {\n if (state.activeLoader) {\n state.activeLoader.abort();\n return;\n }\n setStatus(ItemStatus.INIT);\n fire('load-abort');\n };\n\n //\n // logic to process a file\n //\n var process = function process(processor, onprocess) {\n // processing was aborted\n if (state.processingAborted) {\n state.processingAborted = false;\n return;\n }\n\n // now processing\n setStatus(ItemStatus.PROCESSING);\n\n // reset abort callback\n abortProcessingRequestComplete = null;\n\n // if no file loaded we'll wait for the load event\n if (!(state.file instanceof Blob)) {\n api.on('load', function() {\n process(processor, onprocess);\n });\n return;\n }\n\n // setup processor\n processor.on('load', function(serverFileReference) {\n // need this id to be able to revert the upload\n state.transferId = null;\n state.serverFileReference = serverFileReference;\n });\n\n // register transfer id\n processor.on('transfer', function(transferId) {\n // need this id to be able to revert the upload\n state.transferId = transferId;\n });\n\n processor.on('load-perceived', function(serverFileReference) {\n // no longer required\n state.activeProcessor = null;\n\n // need this id to be able to rever the upload\n state.transferId = null;\n state.serverFileReference = serverFileReference;\n\n setStatus(ItemStatus.PROCESSING_COMPLETE);\n fire('process-complete', serverFileReference);\n });\n\n processor.on('start', function() {\n fire('process-start');\n });\n\n processor.on('error', function(error) {\n state.activeProcessor = null;\n setStatus(ItemStatus.PROCESSING_ERROR);\n fire('process-error', error);\n });\n\n processor.on('abort', function(serverFileReference) {\n state.activeProcessor = null;\n\n // if file was uploaded but processing was cancelled during perceived processor time store file reference\n state.serverFileReference = serverFileReference;\n\n setStatus(ItemStatus.IDLE);\n fire('process-abort');\n\n // has timeout so doesn't interfere with remove action\n if (abortProcessingRequestComplete) {\n abortProcessingRequestComplete();\n }\n });\n\n processor.on('progress', function(progress) {\n fire('process-progress', progress);\n });\n\n // when successfully transformed\n var success = function success(file) {\n // if was archived in the mean time, don't process\n if (state.archived) return;\n\n // process file!\n processor.process(file, Object.assign({}, metadata));\n };\n\n // something went wrong during transform phase\n var error = console.error;\n\n // start processing the file\n onprocess(state.file, success, error);\n\n // set as active processor\n state.activeProcessor = processor;\n };\n\n var requestProcessing = function requestProcessing() {\n state.processingAborted = false;\n setStatus(ItemStatus.PROCESSING_QUEUED);\n };\n\n var abortProcessing = function abortProcessing() {\n return new Promise(function(resolve) {\n if (!state.activeProcessor) {\n state.processingAborted = true;\n\n setStatus(ItemStatus.IDLE);\n fire('process-abort');\n\n resolve();\n return;\n }\n\n abortProcessingRequestComplete = function abortProcessingRequestComplete() {\n resolve();\n };\n\n state.activeProcessor.abort();\n });\n };\n\n //\n // logic to revert a processed file\n //\n var revert = function revert(revertFileUpload, forceRevert) {\n return new Promise(function(resolve, reject) {\n // a completed upload will have a serverFileReference, a failed chunked upload where\n // getting a serverId succeeded but >=0 chunks have been uploaded will have transferId set\n var serverTransferId =\n state.serverFileReference !== null\n ? state.serverFileReference\n : state.transferId;\n\n // cannot revert without a server id for this process\n if (serverTransferId === null) {\n resolve();\n return;\n }\n\n // revert the upload (fire and forget)\n revertFileUpload(\n serverTransferId,\n function() {\n // reset file server id and transfer id as now it's not available on the server\n state.serverFileReference = null;\n state.transferId = null;\n resolve();\n },\n function(error) {\n // don't set error state when reverting is optional, it will always resolve\n if (!forceRevert) {\n resolve();\n return;\n }\n\n // oh no errors\n setStatus(ItemStatus.PROCESSING_REVERT_ERROR);\n fire('process-revert-error');\n reject(error);\n }\n );\n\n // fire event\n setStatus(ItemStatus.IDLE);\n fire('process-revert');\n });\n };\n\n // exposed methods\n var _setMetadata = function setMetadata(key, value, silent) {\n var keys = key.split('.');\n var root = keys[0];\n var last = keys.pop();\n var data = metadata;\n keys.forEach(function(key) {\n return (data = data[key]);\n });\n\n // compare old value against new value, if they're the same, we're not updating\n if (JSON.stringify(data[last]) === JSON.stringify(value)) return;\n\n // update value\n data[last] = value;\n\n // fire update\n fire('metadata-update', {\n key: root,\n value: metadata[root],\n silent: silent,\n });\n };\n\n var getMetadata = function getMetadata(key) {\n return deepCloneObject(key ? metadata[key] : metadata);\n };\n\n var api = Object.assign(\n {\n id: {\n get: function get() {\n return id;\n },\n },\n origin: {\n get: function get() {\n return origin;\n },\n set: function set(value) {\n return (origin = value);\n },\n },\n serverId: {\n get: function get() {\n return state.serverFileReference;\n },\n },\n transferId: {\n get: function get() {\n return state.transferId;\n },\n },\n status: {\n get: function get() {\n return state.status;\n },\n },\n filename: {\n get: function get() {\n return state.file.name;\n },\n },\n filenameWithoutExtension: {\n get: function get() {\n return getFilenameWithoutExtension(state.file.name);\n },\n },\n fileExtension: { get: getFileExtension },\n fileType: { get: getFileType },\n fileSize: { get: getFileSize },\n file: { get: getFile },\n relativePath: {\n get: function get() {\n return state.file._relativePath;\n },\n },\n\n source: {\n get: function get() {\n return state.source;\n },\n },\n\n getMetadata: getMetadata,\n setMetadata: function setMetadata(key, value, silent) {\n if (isObject(key)) {\n var data = key;\n Object.keys(data).forEach(function(key) {\n _setMetadata(key, data[key], value);\n });\n return key;\n }\n _setMetadata(key, value, silent);\n return value;\n },\n\n extend: function extend(name, handler) {\n return (itemAPI[name] = handler);\n },\n\n abortLoad: abortLoad,\n retryLoad: retryLoad,\n requestProcessing: requestProcessing,\n abortProcessing: abortProcessing,\n\n load: load,\n process: process,\n revert: revert,\n },\n\n on(),\n {\n freeze: function freeze() {\n return (state.frozen = true);\n },\n\n release: function release() {\n return (state.released = true);\n },\n released: {\n get: function get() {\n return state.released;\n },\n },\n\n archive: function archive() {\n return (state.archived = true);\n },\n archived: {\n get: function get() {\n return state.archived;\n },\n },\n }\n );\n\n // create it here instead of returning it instantly so we can extend it later\n var itemAPI = createObject(api);\n\n return itemAPI;\n };\n\n var getItemIndexByQuery = function getItemIndexByQuery(items, query) {\n // just return first index\n if (isEmpty(query)) {\n return 0;\n }\n\n // invalid queries\n if (!isString(query)) {\n return -1;\n }\n\n // return item by id (or -1 if not found)\n return items.findIndex(function(item) {\n return item.id === query;\n });\n };\n\n var getItemById = function getItemById(items, itemId) {\n var index = getItemIndexByQuery(items, itemId);\n if (index < 0) {\n return;\n }\n return items[index] || null;\n };\n\n var fetchBlob = function fetchBlob(url, load, error, progress, abort, headers) {\n var request = sendRequest(null, url, {\n method: 'GET',\n responseType: 'blob',\n });\n\n request.onload = function(xhr) {\n // get headers\n var headers = xhr.getAllResponseHeaders();\n\n // get filename\n var filename = getFileInfoFromHeaders(headers).name || getFilenameFromURL(url);\n\n // create response\n load(\n createResponse('load', xhr.status, getFileFromBlob(xhr.response, filename), headers)\n );\n };\n\n request.onerror = function(xhr) {\n error(createResponse('error', xhr.status, xhr.statusText, xhr.getAllResponseHeaders()));\n };\n\n request.onheaders = function(xhr) {\n headers(createResponse('headers', xhr.status, null, xhr.getAllResponseHeaders()));\n };\n\n request.ontimeout = createTimeoutResponse(error);\n request.onprogress = progress;\n request.onabort = abort;\n\n // should return request\n return request;\n };\n\n var getDomainFromURL = function getDomainFromURL(url) {\n if (url.indexOf('//') === 0) {\n url = location.protocol + url;\n }\n return url\n .toLowerCase()\n .replace('blob:', '')\n .replace(/([a-z])?:\\/\\//, '$1')\n .split('/')[0];\n };\n\n var isExternalURL = function isExternalURL(url) {\n return (\n (url.indexOf(':') > -1 || url.indexOf('//') > -1) &&\n getDomainFromURL(location.href) !== getDomainFromURL(url)\n );\n };\n\n var dynamicLabel = function dynamicLabel(label) {\n return function() {\n return isFunction(label) ? label.apply(void 0, arguments) : label;\n };\n };\n\n var isMockItem = function isMockItem(item) {\n return !isFile(item.file);\n };\n\n var listUpdated = function listUpdated(dispatch, state) {\n clearTimeout(state.listUpdateTimeout);\n state.listUpdateTimeout = setTimeout(function() {\n dispatch('DID_UPDATE_ITEMS', { items: getActiveItems(state.items) });\n }, 0);\n };\n\n var optionalPromise = function optionalPromise(fn) {\n for (\n var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1;\n _key < _len;\n _key++\n ) {\n params[_key - 1] = arguments[_key];\n }\n return new Promise(function(resolve) {\n if (!fn) {\n return resolve(true);\n }\n\n var result = fn.apply(void 0, params);\n\n if (result == null) {\n return resolve(true);\n }\n\n if (typeof result === 'boolean') {\n return resolve(result);\n }\n\n if (typeof result.then === 'function') {\n result.then(resolve);\n }\n });\n };\n\n var sortItems = function sortItems(state, compare) {\n state.items.sort(function(a, b) {\n return compare(createItemAPI(a), createItemAPI(b));\n });\n };\n\n // returns item based on state\n var getItemByQueryFromState = function getItemByQueryFromState(state, itemHandler) {\n return function() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var query = _ref.query,\n _ref$success = _ref.success,\n success = _ref$success === void 0 ? function() {} : _ref$success,\n _ref$failure = _ref.failure,\n failure = _ref$failure === void 0 ? function() {} : _ref$failure,\n options = _objectWithoutProperties(_ref, ['query', 'success', 'failure']);\n var item = getItemByQuery(state.items, query);\n if (!item) {\n failure({\n error: createResponse('error', 0, 'Item not found'),\n file: null,\n });\n\n return;\n }\n itemHandler(item, success, failure, options || {});\n };\n };\n\n var actions = function actions(dispatch, query, state) {\n return {\n /**\n * Aborts all ongoing processes\n */\n ABORT_ALL: function ABORT_ALL() {\n getActiveItems(state.items).forEach(function(item) {\n item.freeze();\n item.abortLoad();\n item.abortProcessing();\n });\n },\n\n /**\n * Sets initial files\n */\n DID_SET_FILES: function DID_SET_FILES(_ref2) {\n var _ref2$value = _ref2.value,\n value = _ref2$value === void 0 ? [] : _ref2$value;\n // map values to file objects\n var files = value.map(function(file) {\n return {\n source: file.source ? file.source : file,\n options: file.options,\n };\n });\n\n // loop over files, if file is in list, leave it be, if not, remove\n // test if items should be moved\n var activeItems = getActiveItems(state.items);\n\n activeItems.forEach(function(item) {\n // if item not is in new value, remove\n if (\n !files.find(function(file) {\n return file.source === item.source || file.source === item.file;\n })\n ) {\n dispatch('REMOVE_ITEM', { query: item, remove: false });\n }\n });\n\n // add new files\n activeItems = getActiveItems(state.items);\n files.forEach(function(file, index) {\n // if file is already in list\n if (\n activeItems.find(function(item) {\n return item.source === file.source || item.file === file.source;\n })\n )\n return;\n\n // not in list, add\n dispatch(\n 'ADD_ITEM',\n Object.assign({}, file, {\n interactionMethod: InteractionMethod.NONE,\n index: index,\n })\n );\n });\n },\n\n DID_UPDATE_ITEM_METADATA: function DID_UPDATE_ITEM_METADATA(_ref3) {\n var id = _ref3.id,\n action = _ref3.action,\n change = _ref3.change;\n // don't do anything\n if (change.silent) return;\n\n // if is called multiple times in close succession we combined all calls together to save resources\n clearTimeout(state.itemUpdateTimeout);\n state.itemUpdateTimeout = setTimeout(function() {\n var item = getItemById(state.items, id);\n\n // only revert and attempt to upload when we're uploading to a server\n if (!query('IS_ASYNC')) {\n // should we update the output data\n applyFilterChain('SHOULD_PREPARE_OUTPUT', false, {\n item: item,\n query: query,\n action: action,\n change: change,\n }).then(function(shouldPrepareOutput) {\n // plugins determined the output data should be prepared (or not), can be adjusted with beforePrepareOutput hook\n var beforePrepareFile = query('GET_BEFORE_PREPARE_FILE');\n if (beforePrepareFile)\n shouldPrepareOutput = beforePrepareFile(item, shouldPrepareOutput);\n\n if (!shouldPrepareOutput) return;\n\n dispatch(\n 'REQUEST_PREPARE_OUTPUT',\n {\n query: id,\n item: item,\n success: function success(file) {\n dispatch('DID_PREPARE_OUTPUT', { id: id, file: file });\n },\n },\n\n true\n );\n });\n\n return;\n }\n\n // if is local item we need to enable upload button so change can be propagated to server\n if (item.origin === FileOrigin.LOCAL) {\n dispatch('DID_LOAD_ITEM', {\n id: item.id,\n error: null,\n serverFileReference: item.source,\n });\n }\n\n // for async scenarios\n var upload = function upload() {\n // we push this forward a bit so the interface is updated correctly\n setTimeout(function() {\n dispatch('REQUEST_ITEM_PROCESSING', { query: id });\n }, 32);\n };\n\n var revert = function revert(doUpload) {\n item.revert(\n createRevertFunction(\n state.options.server.url,\n state.options.server.revert\n ),\n query('GET_FORCE_REVERT')\n )\n .then(doUpload ? upload : function() {})\n .catch(function() {});\n };\n\n var abort = function abort(doUpload) {\n item.abortProcessing().then(doUpload ? upload : function() {});\n };\n\n // if we should re-upload the file immediately\n if (item.status === ItemStatus.PROCESSING_COMPLETE) {\n return revert(state.options.instantUpload);\n }\n\n // if currently uploading, cancel upload\n if (item.status === ItemStatus.PROCESSING) {\n return abort(state.options.instantUpload);\n }\n\n if (state.options.instantUpload) {\n upload();\n }\n }, 0);\n },\n\n MOVE_ITEM: function MOVE_ITEM(_ref4) {\n var query = _ref4.query,\n index = _ref4.index;\n var item = getItemByQuery(state.items, query);\n if (!item) return;\n var currentIndex = state.items.indexOf(item);\n index = limit(index, 0, state.items.length - 1);\n if (currentIndex === index) return;\n state.items.splice(index, 0, state.items.splice(currentIndex, 1)[0]);\n },\n\n SORT: function SORT(_ref5) {\n var compare = _ref5.compare;\n sortItems(state, compare);\n dispatch('DID_SORT_ITEMS', {\n items: query('GET_ACTIVE_ITEMS'),\n });\n },\n\n ADD_ITEMS: function ADD_ITEMS(_ref6) {\n var items = _ref6.items,\n index = _ref6.index,\n interactionMethod = _ref6.interactionMethod,\n _ref6$success = _ref6.success,\n success = _ref6$success === void 0 ? function() {} : _ref6$success,\n _ref6$failure = _ref6.failure,\n failure = _ref6$failure === void 0 ? function() {} : _ref6$failure;\n var currentIndex = index;\n\n if (index === -1 || typeof index === 'undefined') {\n var insertLocation = query('GET_ITEM_INSERT_LOCATION');\n var totalItems = query('GET_TOTAL_ITEMS');\n currentIndex = insertLocation === 'before' ? 0 : totalItems;\n }\n\n var ignoredFiles = query('GET_IGNORED_FILES');\n var isValidFile = function isValidFile(source) {\n return isFile(source)\n ? !ignoredFiles.includes(source.name.toLowerCase())\n : !isEmpty(source);\n };\n var validItems = items.filter(isValidFile);\n\n var promises = validItems.map(function(source) {\n return new Promise(function(resolve, reject) {\n dispatch('ADD_ITEM', {\n interactionMethod: interactionMethod,\n source: source.source || source,\n success: resolve,\n failure: reject,\n index: currentIndex++,\n options: source.options || {},\n });\n });\n });\n\n Promise.all(promises)\n .then(success)\n .catch(failure);\n },\n\n /**\n * @param source\n * @param index\n * @param interactionMethod\n */\n ADD_ITEM: function ADD_ITEM(_ref7) {\n var source = _ref7.source,\n _ref7$index = _ref7.index,\n index = _ref7$index === void 0 ? -1 : _ref7$index,\n interactionMethod = _ref7.interactionMethod,\n _ref7$success = _ref7.success,\n success = _ref7$success === void 0 ? function() {} : _ref7$success,\n _ref7$failure = _ref7.failure,\n failure = _ref7$failure === void 0 ? function() {} : _ref7$failure,\n _ref7$options = _ref7.options,\n options = _ref7$options === void 0 ? {} : _ref7$options;\n // if no source supplied\n if (isEmpty(source)) {\n failure({\n error: createResponse('error', 0, 'No source'),\n file: null,\n });\n\n return;\n }\n\n // filter out invalid file items, used to filter dropped directory contents\n if (\n isFile(source) &&\n state.options.ignoredFiles.includes(source.name.toLowerCase())\n ) {\n // fail silently\n return;\n }\n\n // test if there's still room in the list of files\n if (!hasRoomForItem(state)) {\n // if multiple allowed, we can't replace\n // or if only a single item is allowed but we're not allowed to replace it we exit\n if (\n state.options.allowMultiple ||\n (!state.options.allowMultiple && !state.options.allowReplace)\n ) {\n var error = createResponse('warning', 0, 'Max files');\n\n dispatch('DID_THROW_MAX_FILES', {\n source: source,\n error: error,\n });\n\n failure({ error: error, file: null });\n\n return;\n }\n\n // let's replace the item\n // id of first item we're about to remove\n var _item = getActiveItems(state.items)[0];\n\n // if has been processed remove it from the server as well\n if (\n _item.status === ItemStatus.PROCESSING_COMPLETE ||\n _item.status === ItemStatus.PROCESSING_REVERT_ERROR\n ) {\n var forceRevert = query('GET_FORCE_REVERT');\n _item\n .revert(\n createRevertFunction(\n state.options.server.url,\n state.options.server.revert\n ),\n forceRevert\n )\n .then(function() {\n if (!forceRevert) return;\n\n // try to add now\n dispatch('ADD_ITEM', {\n source: source,\n index: index,\n interactionMethod: interactionMethod,\n success: success,\n failure: failure,\n options: options,\n });\n })\n .catch(function() {}); // no need to handle this catch state for now\n\n if (forceRevert) return;\n }\n\n // remove first item as it will be replaced by this item\n dispatch('REMOVE_ITEM', { query: _item.id });\n }\n\n // where did the file originate\n var origin =\n options.type === 'local'\n ? FileOrigin.LOCAL\n : options.type === 'limbo'\n ? FileOrigin.LIMBO\n : FileOrigin.INPUT;\n\n // create a new blank item\n var item = createItem(\n // where did this file come from\n origin,\n\n // an input file never has a server file reference\n origin === FileOrigin.INPUT ? null : source,\n\n // file mock data, if defined\n options.file\n );\n\n // set initial meta data\n Object.keys(options.metadata || {}).forEach(function(key) {\n item.setMetadata(key, options.metadata[key]);\n });\n\n // created the item, let plugins add methods\n applyFilters('DID_CREATE_ITEM', item, { query: query, dispatch: dispatch });\n\n // where to insert new items\n var itemInsertLocation = query('GET_ITEM_INSERT_LOCATION');\n\n // adjust index if is not allowed to pick location\n if (!state.options.itemInsertLocationFreedom) {\n index = itemInsertLocation === 'before' ? -1 : state.items.length;\n }\n\n // add item to list\n insertItem(state.items, item, index);\n\n // sort items in list\n if (isFunction(itemInsertLocation) && source) {\n sortItems(state, itemInsertLocation);\n }\n\n // get a quick reference to the item id\n var id = item.id;\n\n // observe item events\n item.on('init', function() {\n dispatch('DID_INIT_ITEM', { id: id });\n });\n\n item.on('load-init', function() {\n dispatch('DID_START_ITEM_LOAD', { id: id });\n });\n\n item.on('load-meta', function() {\n dispatch('DID_UPDATE_ITEM_META', { id: id });\n });\n\n item.on('load-progress', function(progress) {\n dispatch('DID_UPDATE_ITEM_LOAD_PROGRESS', { id: id, progress: progress });\n });\n\n item.on('load-request-error', function(error) {\n var mainStatus = dynamicLabel(state.options.labelFileLoadError)(error);\n\n // is client error, no way to recover\n if (error.code >= 400 && error.code < 500) {\n dispatch('DID_THROW_ITEM_INVALID', {\n id: id,\n error: error,\n status: {\n main: mainStatus,\n sub: error.code + ' (' + error.body + ')',\n },\n });\n\n // reject the file so can be dealt with through API\n failure({ error: error, file: createItemAPI(item) });\n return;\n }\n\n // is possible server error, so might be possible to retry\n dispatch('DID_THROW_ITEM_LOAD_ERROR', {\n id: id,\n error: error,\n status: {\n main: mainStatus,\n sub: state.options.labelTapToRetry,\n },\n });\n });\n\n item.on('load-file-error', function(error) {\n dispatch('DID_THROW_ITEM_INVALID', {\n id: id,\n error: error.status,\n status: error.status,\n });\n\n failure({ error: error.status, file: createItemAPI(item) });\n });\n\n item.on('load-abort', function() {\n dispatch('REMOVE_ITEM', { query: id });\n });\n\n item.on('load-skip', function() {\n dispatch('COMPLETE_LOAD_ITEM', {\n query: id,\n item: item,\n data: {\n source: source,\n success: success,\n },\n });\n });\n\n item.on('load', function() {\n var handleAdd = function handleAdd(shouldAdd) {\n // no should not add this file\n if (!shouldAdd) {\n dispatch('REMOVE_ITEM', {\n query: id,\n });\n\n return;\n }\n\n // now interested in metadata updates\n item.on('metadata-update', function(change) {\n dispatch('DID_UPDATE_ITEM_METADATA', { id: id, change: change });\n });\n\n // let plugins decide if the output data should be prepared at this point\n // means we'll do this and wait for idle state\n applyFilterChain('SHOULD_PREPARE_OUTPUT', false, {\n item: item,\n query: query,\n }).then(function(shouldPrepareOutput) {\n // plugins determined the output data should be prepared (or not), can be adjusted with beforePrepareOutput hook\n var beforePrepareFile = query('GET_BEFORE_PREPARE_FILE');\n if (beforePrepareFile)\n shouldPrepareOutput = beforePrepareFile(item, shouldPrepareOutput);\n\n var loadComplete = function loadComplete() {\n dispatch('COMPLETE_LOAD_ITEM', {\n query: id,\n item: item,\n data: {\n source: source,\n success: success,\n },\n });\n\n listUpdated(dispatch, state);\n };\n\n // exit\n if (shouldPrepareOutput) {\n // wait for idle state and then run PREPARE_OUTPUT\n dispatch(\n 'REQUEST_PREPARE_OUTPUT',\n {\n query: id,\n item: item,\n success: function success(file) {\n dispatch('DID_PREPARE_OUTPUT', { id: id, file: file });\n loadComplete();\n },\n },\n\n true\n );\n\n return;\n }\n\n loadComplete();\n });\n };\n\n // item loaded, allow plugins to\n // - read data (quickly)\n // - add metadata\n applyFilterChain('DID_LOAD_ITEM', item, { query: query, dispatch: dispatch })\n .then(function() {\n optionalPromise(query('GET_BEFORE_ADD_FILE'), createItemAPI(item)).then(\n handleAdd\n );\n })\n .catch(function(e) {\n if (!e || !e.error || !e.status) return handleAdd(false);\n dispatch('DID_THROW_ITEM_INVALID', {\n id: id,\n error: e.error,\n status: e.status,\n });\n });\n });\n\n item.on('process-start', function() {\n dispatch('DID_START_ITEM_PROCESSING', { id: id });\n });\n\n item.on('process-progress', function(progress) {\n dispatch('DID_UPDATE_ITEM_PROCESS_PROGRESS', { id: id, progress: progress });\n });\n\n item.on('process-error', function(error) {\n dispatch('DID_THROW_ITEM_PROCESSING_ERROR', {\n id: id,\n error: error,\n status: {\n main: dynamicLabel(state.options.labelFileProcessingError)(error),\n sub: state.options.labelTapToRetry,\n },\n });\n });\n\n item.on('process-revert-error', function(error) {\n dispatch('DID_THROW_ITEM_PROCESSING_REVERT_ERROR', {\n id: id,\n error: error,\n status: {\n main: dynamicLabel(state.options.labelFileProcessingRevertError)(error),\n sub: state.options.labelTapToRetry,\n },\n });\n });\n\n item.on('process-complete', function(serverFileReference) {\n dispatch('DID_COMPLETE_ITEM_PROCESSING', {\n id: id,\n error: null,\n serverFileReference: serverFileReference,\n });\n\n dispatch('DID_DEFINE_VALUE', { id: id, value: serverFileReference });\n });\n\n item.on('process-abort', function() {\n dispatch('DID_ABORT_ITEM_PROCESSING', { id: id });\n });\n\n item.on('process-revert', function() {\n dispatch('DID_REVERT_ITEM_PROCESSING', { id: id });\n dispatch('DID_DEFINE_VALUE', { id: id, value: null });\n });\n\n // let view know the item has been inserted\n dispatch('DID_ADD_ITEM', {\n id: id,\n index: index,\n interactionMethod: interactionMethod,\n });\n\n listUpdated(dispatch, state);\n\n // start loading the source\n var _ref8 = state.options.server || {},\n url = _ref8.url,\n load = _ref8.load,\n restore = _ref8.restore,\n fetch = _ref8.fetch;\n\n item.load(\n source,\n\n // this creates a function that loads the file based on the type of file (string, base64, blob, file) and location of file (local, remote, limbo)\n createFileLoader(\n origin === FileOrigin.INPUT\n ? // input, if is remote, see if should use custom fetch, else use default fetchBlob\n isString(source) && isExternalURL(source)\n ? fetch\n ? createFetchFunction(url, fetch)\n : fetchBlob // remote url\n : fetchBlob // try to fetch url\n : // limbo or local\n origin === FileOrigin.LIMBO\n ? createFetchFunction(url, restore) // limbo\n : createFetchFunction(url, load) // local\n ),\n\n // called when the file is loaded so it can be piped through the filters\n function(file, success, error) {\n // let's process the file\n applyFilterChain('LOAD_FILE', file, { query: query })\n .then(success)\n .catch(error);\n }\n );\n },\n\n REQUEST_PREPARE_OUTPUT: function REQUEST_PREPARE_OUTPUT(_ref9) {\n var item = _ref9.item,\n success = _ref9.success,\n _ref9$failure = _ref9.failure,\n failure = _ref9$failure === void 0 ? function() {} : _ref9$failure;\n // error response if item archived\n var err = {\n error: createResponse('error', 0, 'Item not found'),\n file: null,\n };\n\n // don't handle archived items, an item could have been archived (load aborted) while waiting to be prepared\n if (item.archived) return failure(err);\n\n // allow plugins to alter the file data\n applyFilterChain('PREPARE_OUTPUT', item.file, { query: query, item: item }).then(\n function(result) {\n applyFilterChain('COMPLETE_PREPARE_OUTPUT', result, {\n query: query,\n item: item,\n }).then(function(result) {\n // don't handle archived items, an item could have been archived (load aborted) while being prepared\n if (item.archived) return failure(err);\n\n // we done!\n success(result);\n });\n }\n );\n },\n\n COMPLETE_LOAD_ITEM: function COMPLETE_LOAD_ITEM(_ref10) {\n var item = _ref10.item,\n data = _ref10.data;\n var success = data.success,\n source = data.source;\n\n // sort items in list\n var itemInsertLocation = query('GET_ITEM_INSERT_LOCATION');\n if (isFunction(itemInsertLocation) && source) {\n sortItems(state, itemInsertLocation);\n }\n\n // let interface know the item has loaded\n dispatch('DID_LOAD_ITEM', {\n id: item.id,\n error: null,\n serverFileReference: item.origin === FileOrigin.INPUT ? null : source,\n });\n\n // item has been successfully loaded and added to the\n // list of items so can now be safely returned for use\n success(createItemAPI(item));\n\n // if this is a local server file we need to show a different state\n if (item.origin === FileOrigin.LOCAL) {\n dispatch('DID_LOAD_LOCAL_ITEM', { id: item.id });\n return;\n }\n\n // if is a temp server file we prevent async upload call here (as the file is already on the server)\n if (item.origin === FileOrigin.LIMBO) {\n dispatch('DID_COMPLETE_ITEM_PROCESSING', {\n id: item.id,\n error: null,\n serverFileReference: source,\n });\n\n dispatch('DID_DEFINE_VALUE', {\n id: item.id,\n value: item.serverId || source,\n });\n\n return;\n }\n\n // id we are allowed to upload the file immediately, lets do it\n if (query('IS_ASYNC') && state.options.instantUpload) {\n dispatch('REQUEST_ITEM_PROCESSING', { query: item.id });\n }\n },\n\n RETRY_ITEM_LOAD: getItemByQueryFromState(state, function(item) {\n // try loading the source one more time\n item.retryLoad();\n }),\n\n REQUEST_ITEM_PREPARE: getItemByQueryFromState(state, function(item, _success, failure) {\n dispatch(\n 'REQUEST_PREPARE_OUTPUT',\n {\n query: item.id,\n item: item,\n success: function success(file) {\n dispatch('DID_PREPARE_OUTPUT', { id: item.id, file: file });\n _success({\n file: item,\n output: file,\n });\n },\n failure: failure,\n },\n\n true\n );\n }),\n\n REQUEST_ITEM_PROCESSING: getItemByQueryFromState(state, function(\n item,\n success,\n failure\n ) {\n // cannot be queued (or is already queued)\n var itemCanBeQueuedForProcessing =\n // waiting for something\n item.status === ItemStatus.IDLE ||\n // processing went wrong earlier\n item.status === ItemStatus.PROCESSING_ERROR;\n\n // not ready to be processed\n if (!itemCanBeQueuedForProcessing) {\n var processNow = function processNow() {\n return dispatch('REQUEST_ITEM_PROCESSING', {\n query: item,\n success: success,\n failure: failure,\n });\n };\n\n var process = function process() {\n return document.hidden ? processNow() : setTimeout(processNow, 32);\n };\n\n // if already done processing or tried to revert but didn't work, try again\n if (\n item.status === ItemStatus.PROCESSING_COMPLETE ||\n item.status === ItemStatus.PROCESSING_REVERT_ERROR\n ) {\n item.revert(\n createRevertFunction(\n state.options.server.url,\n state.options.server.revert\n ),\n query('GET_FORCE_REVERT')\n )\n .then(process)\n .catch(function() {}); // don't continue with processing if something went wrong\n } else if (item.status === ItemStatus.PROCESSING) {\n item.abortProcessing().then(process);\n }\n\n return;\n }\n\n // already queued for processing\n if (item.status === ItemStatus.PROCESSING_QUEUED) return;\n\n item.requestProcessing();\n\n dispatch('DID_REQUEST_ITEM_PROCESSING', { id: item.id });\n\n dispatch('PROCESS_ITEM', { query: item, success: success, failure: failure }, true);\n }),\n\n PROCESS_ITEM: getItemByQueryFromState(state, function(item, success, failure) {\n var maxParallelUploads = query('GET_MAX_PARALLEL_UPLOADS');\n var totalCurrentUploads = query('GET_ITEMS_BY_STATUS', ItemStatus.PROCESSING)\n .length;\n\n // queue and wait till queue is freed up\n if (totalCurrentUploads === maxParallelUploads) {\n // queue for later processing\n state.processingQueue.push({\n id: item.id,\n success: success,\n failure: failure,\n });\n\n // stop it!\n return;\n }\n\n // if was not queued or is already processing exit here\n if (item.status === ItemStatus.PROCESSING) return;\n\n var processNext = function processNext() {\n // process queueud items\n var queueEntry = state.processingQueue.shift();\n\n // no items left\n if (!queueEntry) return;\n\n // get item reference\n var id = queueEntry.id,\n success = queueEntry.success,\n failure = queueEntry.failure;\n var itemReference = getItemByQuery(state.items, id);\n\n // if item was archived while in queue, jump to next\n if (!itemReference || itemReference.archived) {\n processNext();\n return;\n }\n\n // process queued item\n dispatch(\n 'PROCESS_ITEM',\n { query: id, success: success, failure: failure },\n true\n );\n };\n\n // we done function\n item.onOnce('process-complete', function() {\n success(createItemAPI(item));\n processNext();\n\n // if origin is local, and we're instant uploading, trigger remove of original\n // as revert will remove file from list\n var server = state.options.server;\n var instantUpload = state.options.instantUpload;\n if (\n instantUpload &&\n item.origin === FileOrigin.LOCAL &&\n isFunction(server.remove)\n ) {\n var noop = function noop() {};\n item.origin = FileOrigin.LIMBO;\n state.options.server.remove(item.source, noop, noop);\n }\n\n // All items processed? No errors?\n var allItemsProcessed =\n query('GET_ITEMS_BY_STATUS', ItemStatus.PROCESSING_COMPLETE).length ===\n state.items.length;\n if (allItemsProcessed) {\n dispatch('DID_COMPLETE_ITEM_PROCESSING_ALL');\n }\n });\n\n // we error function\n item.onOnce('process-error', function(error) {\n failure({ error: error, file: createItemAPI(item) });\n processNext();\n });\n\n // start file processing\n var options = state.options;\n item.process(\n createFileProcessor(\n createProcessorFunction(\n options.server.url,\n options.server.process,\n options.name,\n {\n chunkTransferId: item.transferId,\n chunkServer: options.server.patch,\n chunkUploads: options.chunkUploads,\n chunkForce: options.chunkForce,\n chunkSize: options.chunkSize,\n chunkRetryDelays: options.chunkRetryDelays,\n }\n ),\n\n {\n allowMinimumUploadDuration: query('GET_ALLOW_MINIMUM_UPLOAD_DURATION'),\n }\n ),\n\n // called when the file is about to be processed so it can be piped through the transform filters\n function(file, success, error) {\n // allow plugins to alter the file data\n applyFilterChain('PREPARE_OUTPUT', file, { query: query, item: item })\n .then(function(file) {\n dispatch('DID_PREPARE_OUTPUT', { id: item.id, file: file });\n\n success(file);\n })\n .catch(error);\n }\n );\n }),\n\n RETRY_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {\n dispatch('REQUEST_ITEM_PROCESSING', { query: item });\n }),\n\n REQUEST_REMOVE_ITEM: getItemByQueryFromState(state, function(item) {\n optionalPromise(query('GET_BEFORE_REMOVE_FILE'), createItemAPI(item)).then(function(\n shouldRemove\n ) {\n if (!shouldRemove) {\n return;\n }\n dispatch('REMOVE_ITEM', { query: item });\n });\n }),\n\n RELEASE_ITEM: getItemByQueryFromState(state, function(item) {\n item.release();\n }),\n\n REMOVE_ITEM: getItemByQueryFromState(state, function(item, success, failure, options) {\n var removeFromView = function removeFromView() {\n // get id reference\n var id = item.id;\n\n // archive the item, this does not remove it from the list\n getItemById(state.items, id).archive();\n\n // tell the view the item has been removed\n dispatch('DID_REMOVE_ITEM', { error: null, id: id, item: item });\n\n // now the list has been modified\n listUpdated(dispatch, state);\n\n // correctly removed\n success(createItemAPI(item));\n };\n\n // if this is a local file and the `server.remove` function has been configured,\n // send source there so dev can remove file from server\n var server = state.options.server;\n if (\n item.origin === FileOrigin.LOCAL &&\n server &&\n isFunction(server.remove) &&\n options.remove !== false\n ) {\n dispatch('DID_START_ITEM_REMOVE', { id: item.id });\n\n server.remove(\n item.source,\n function() {\n return removeFromView();\n },\n function(status) {\n dispatch('DID_THROW_ITEM_REMOVE_ERROR', {\n id: item.id,\n error: createResponse('error', 0, status, null),\n status: {\n main: dynamicLabel(state.options.labelFileRemoveError)(status),\n sub: state.options.labelTapToRetry,\n },\n });\n }\n );\n } else {\n // if is requesting revert and can revert need to call revert handler (not calling request_ because that would also trigger beforeRemoveHook)\n if (\n (options.revert &&\n item.origin !== FileOrigin.LOCAL &&\n item.serverId !== null) ||\n // if chunked uploads are enabled and we're uploading in chunks for this specific file\n // or if the file isn't big enough for chunked uploads but chunkForce is set then call\n // revert before removing from the view...\n (state.options.chunkUploads && item.file.size > state.options.chunkSize) ||\n (state.options.chunkUploads && state.options.chunkForce)\n ) {\n item.revert(\n createRevertFunction(\n state.options.server.url,\n state.options.server.revert\n ),\n query('GET_FORCE_REVERT')\n );\n }\n\n // can now safely remove from view\n removeFromView();\n }\n }),\n\n ABORT_ITEM_LOAD: getItemByQueryFromState(state, function(item) {\n item.abortLoad();\n }),\n\n ABORT_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {\n // test if is already processed\n if (item.serverId) {\n dispatch('REVERT_ITEM_PROCESSING', { id: item.id });\n return;\n }\n\n // abort\n item.abortProcessing().then(function() {\n var shouldRemove = state.options.instantUpload;\n if (shouldRemove) {\n dispatch('REMOVE_ITEM', { query: item.id });\n }\n });\n }),\n\n REQUEST_REVERT_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {\n // not instant uploading, revert immediately\n if (!state.options.instantUpload) {\n dispatch('REVERT_ITEM_PROCESSING', { query: item });\n return;\n }\n\n // if we're instant uploading the file will also be removed if we revert,\n // so if a before remove file hook is defined we need to run it now\n var handleRevert = function handleRevert(shouldRevert) {\n if (!shouldRevert) return;\n dispatch('REVERT_ITEM_PROCESSING', { query: item });\n };\n\n var fn = query('GET_BEFORE_REMOVE_FILE');\n if (!fn) {\n return handleRevert(true);\n }\n\n var requestRemoveResult = fn(createItemAPI(item));\n if (requestRemoveResult == null) {\n // undefined or null\n return handleRevert(true);\n }\n\n if (typeof requestRemoveResult === 'boolean') {\n return handleRevert(requestRemoveResult);\n }\n\n if (typeof requestRemoveResult.then === 'function') {\n requestRemoveResult.then(handleRevert);\n }\n }),\n\n REVERT_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {\n item.revert(\n createRevertFunction(state.options.server.url, state.options.server.revert),\n query('GET_FORCE_REVERT')\n )\n .then(function() {\n var shouldRemove = state.options.instantUpload || isMockItem(item);\n if (shouldRemove) {\n dispatch('REMOVE_ITEM', { query: item.id });\n }\n })\n .catch(function() {});\n }),\n\n SET_OPTIONS: function SET_OPTIONS(_ref11) {\n var options = _ref11.options;\n // get all keys passed\n var optionKeys = Object.keys(options);\n\n // get prioritized keyed to include (remove once not in options object)\n var prioritizedOptionKeys = PrioritizedOptions.filter(function(key) {\n return optionKeys.includes(key);\n });\n\n // order the keys, prioritized first, then rest\n var orderedOptionKeys = [].concat(\n _toConsumableArray(prioritizedOptionKeys),\n _toConsumableArray(\n Object.keys(options).filter(function(key) {\n return !prioritizedOptionKeys.includes(key);\n })\n )\n );\n\n // dispatch set event for each option\n orderedOptionKeys.forEach(function(key) {\n dispatch('SET_' + fromCamels(key, '_').toUpperCase(), {\n value: options[key],\n });\n });\n },\n };\n };\n\n var PrioritizedOptions = ['server'];\n\n var formatFilename = function formatFilename(name) {\n return name;\n };\n\n var createElement$1 = function createElement(tagName) {\n return document.createElement(tagName);\n };\n\n var text = function text(node, value) {\n var textNode = node.childNodes[0];\n if (!textNode) {\n textNode = document.createTextNode(value);\n node.appendChild(textNode);\n } else if (value !== textNode.nodeValue) {\n textNode.nodeValue = value;\n }\n };\n\n var polarToCartesian = function polarToCartesian(centerX, centerY, radius, angleInDegrees) {\n var angleInRadians = (((angleInDegrees % 360) - 90) * Math.PI) / 180.0;\n return {\n x: centerX + radius * Math.cos(angleInRadians),\n y: centerY + radius * Math.sin(angleInRadians),\n };\n };\n\n var describeArc = function describeArc(x, y, radius, startAngle, endAngle, arcSweep) {\n var start = polarToCartesian(x, y, radius, endAngle);\n var end = polarToCartesian(x, y, radius, startAngle);\n return ['M', start.x, start.y, 'A', radius, radius, 0, arcSweep, 0, end.x, end.y].join(' ');\n };\n\n var percentageArc = function percentageArc(x, y, radius, from, to) {\n var arcSweep = 1;\n if (to > from && to - from <= 0.5) {\n arcSweep = 0;\n }\n if (from > to && from - to >= 0.5) {\n arcSweep = 0;\n }\n return describeArc(\n x,\n y,\n radius,\n Math.min(0.9999, from) * 360,\n Math.min(0.9999, to) * 360,\n arcSweep\n );\n };\n\n var create = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n // start at 0\n props.spin = false;\n props.progress = 0;\n props.opacity = 0;\n\n // svg\n var svg = createElement('svg');\n root.ref.path = createElement('path', {\n 'stroke-width': 2,\n 'stroke-linecap': 'round',\n });\n\n svg.appendChild(root.ref.path);\n\n root.ref.svg = svg;\n\n root.appendChild(svg);\n };\n\n var write = function write(_ref2) {\n var root = _ref2.root,\n props = _ref2.props;\n if (props.opacity === 0) {\n return;\n }\n\n if (props.align) {\n root.element.dataset.align = props.align;\n }\n\n // get width of stroke\n var ringStrokeWidth = parseInt(attr(root.ref.path, 'stroke-width'), 10);\n\n // calculate size of ring\n var size = root.rect.element.width * 0.5;\n\n // ring state\n var ringFrom = 0;\n var ringTo = 0;\n\n // now in busy mode\n if (props.spin) {\n ringFrom = 0;\n ringTo = 0.5;\n } else {\n ringFrom = 0;\n ringTo = props.progress;\n }\n\n // get arc path\n var coordinates = percentageArc(size, size, size - ringStrokeWidth, ringFrom, ringTo);\n\n // update progress bar\n attr(root.ref.path, 'd', coordinates);\n\n // hide while contains 0 value\n attr(root.ref.path, 'stroke-opacity', props.spin || props.progress > 0 ? 1 : 0);\n };\n\n var progressIndicator = createView({\n tag: 'div',\n name: 'progress-indicator',\n ignoreRectUpdate: true,\n ignoreRect: true,\n create: create,\n write: write,\n mixins: {\n apis: ['progress', 'spin', 'align'],\n styles: ['opacity'],\n animations: {\n opacity: { type: 'tween', duration: 500 },\n progress: {\n type: 'spring',\n stiffness: 0.95,\n damping: 0.65,\n mass: 10,\n },\n },\n },\n });\n\n var create$1 = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n root.element.innerHTML = (props.icon || '') + ('' + props.label + '');\n\n props.isDisabled = false;\n };\n\n var write$1 = function write(_ref2) {\n var root = _ref2.root,\n props = _ref2.props;\n var isDisabled = props.isDisabled;\n var shouldDisable = root.query('GET_DISABLED') || props.opacity === 0;\n\n if (shouldDisable && !isDisabled) {\n props.isDisabled = true;\n attr(root.element, 'disabled', 'disabled');\n } else if (!shouldDisable && isDisabled) {\n props.isDisabled = false;\n root.element.removeAttribute('disabled');\n }\n };\n\n var fileActionButton = createView({\n tag: 'button',\n attributes: {\n type: 'button',\n },\n\n ignoreRect: true,\n ignoreRectUpdate: true,\n name: 'file-action-button',\n mixins: {\n apis: ['label'],\n styles: ['translateX', 'translateY', 'scaleX', 'scaleY', 'opacity'],\n animations: {\n scaleX: 'spring',\n scaleY: 'spring',\n translateX: 'spring',\n translateY: 'spring',\n opacity: { type: 'tween', duration: 250 },\n },\n\n listeners: true,\n },\n\n create: create$1,\n write: write$1,\n });\n\n var toNaturalFileSize = function toNaturalFileSize(bytes) {\n var decimalSeparator =\n arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '.';\n var base = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1000;\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _options$labelBytes = options.labelBytes,\n labelBytes = _options$labelBytes === void 0 ? 'bytes' : _options$labelBytes,\n _options$labelKilobyt = options.labelKilobytes,\n labelKilobytes = _options$labelKilobyt === void 0 ? 'KB' : _options$labelKilobyt,\n _options$labelMegabyt = options.labelMegabytes,\n labelMegabytes = _options$labelMegabyt === void 0 ? 'MB' : _options$labelMegabyt,\n _options$labelGigabyt = options.labelGigabytes,\n labelGigabytes = _options$labelGigabyt === void 0 ? 'GB' : _options$labelGigabyt;\n\n // no negative byte sizes\n bytes = Math.round(Math.abs(bytes));\n\n var KB = base;\n var MB = base * base;\n var GB = base * base * base;\n\n // just bytes\n if (bytes < KB) {\n return bytes + ' ' + labelBytes;\n }\n\n // kilobytes\n if (bytes < MB) {\n return Math.floor(bytes / KB) + ' ' + labelKilobytes;\n }\n\n // megabytes\n if (bytes < GB) {\n return removeDecimalsWhenZero(bytes / MB, 1, decimalSeparator) + ' ' + labelMegabytes;\n }\n\n // gigabytes\n return removeDecimalsWhenZero(bytes / GB, 2, decimalSeparator) + ' ' + labelGigabytes;\n };\n\n var removeDecimalsWhenZero = function removeDecimalsWhenZero(value, decimalCount, separator) {\n return value\n .toFixed(decimalCount)\n .split('.')\n .filter(function(part) {\n return part !== '0';\n })\n .join(separator);\n };\n\n var create$2 = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n // filename\n var fileName = createElement$1('span');\n fileName.className = 'filepond--file-info-main';\n // hide for screenreaders\n // the file is contained in a fieldset with legend that contains the filename\n // no need to read it twice\n attr(fileName, 'aria-hidden', 'true');\n root.appendChild(fileName);\n root.ref.fileName = fileName;\n\n // filesize\n var fileSize = createElement$1('span');\n fileSize.className = 'filepond--file-info-sub';\n root.appendChild(fileSize);\n root.ref.fileSize = fileSize;\n\n // set initial values\n text(fileSize, root.query('GET_LABEL_FILE_WAITING_FOR_SIZE'));\n text(fileName, formatFilename(root.query('GET_ITEM_NAME', props.id)));\n };\n\n var updateFile = function updateFile(_ref2) {\n var root = _ref2.root,\n props = _ref2.props;\n text(\n root.ref.fileSize,\n toNaturalFileSize(\n root.query('GET_ITEM_SIZE', props.id),\n '.',\n root.query('GET_FILE_SIZE_BASE'),\n root.query('GET_FILE_SIZE_LABELS', root.query)\n )\n );\n\n text(root.ref.fileName, formatFilename(root.query('GET_ITEM_NAME', props.id)));\n };\n\n var updateFileSizeOnError = function updateFileSizeOnError(_ref3) {\n var root = _ref3.root,\n props = _ref3.props;\n // if size is available don't fallback to unknown size message\n if (isInt(root.query('GET_ITEM_SIZE', props.id))) {\n updateFile({ root: root, props: props });\n return;\n }\n\n text(root.ref.fileSize, root.query('GET_LABEL_FILE_SIZE_NOT_AVAILABLE'));\n };\n\n var fileInfo = createView({\n name: 'file-info',\n ignoreRect: true,\n ignoreRectUpdate: true,\n write: createRoute({\n DID_LOAD_ITEM: updateFile,\n DID_UPDATE_ITEM_META: updateFile,\n DID_THROW_ITEM_LOAD_ERROR: updateFileSizeOnError,\n DID_THROW_ITEM_INVALID: updateFileSizeOnError,\n }),\n\n didCreateView: function didCreateView(root) {\n applyFilters('CREATE_VIEW', Object.assign({}, root, { view: root }));\n },\n create: create$2,\n mixins: {\n styles: ['translateX', 'translateY'],\n animations: {\n translateX: 'spring',\n translateY: 'spring',\n },\n },\n });\n\n var toPercentage = function toPercentage(value) {\n return Math.round(value * 100);\n };\n\n var create$3 = function create(_ref) {\n var root = _ref.root;\n\n // main status\n var main = createElement$1('span');\n main.className = 'filepond--file-status-main';\n root.appendChild(main);\n root.ref.main = main;\n\n // sub status\n var sub = createElement$1('span');\n sub.className = 'filepond--file-status-sub';\n root.appendChild(sub);\n root.ref.sub = sub;\n\n didSetItemLoadProgress({ root: root, action: { progress: null } });\n };\n\n var didSetItemLoadProgress = function didSetItemLoadProgress(_ref2) {\n var root = _ref2.root,\n action = _ref2.action;\n var title =\n action.progress === null\n ? root.query('GET_LABEL_FILE_LOADING')\n : root.query('GET_LABEL_FILE_LOADING') + ' ' + toPercentage(action.progress) + '%';\n\n text(root.ref.main, title);\n text(root.ref.sub, root.query('GET_LABEL_TAP_TO_CANCEL'));\n };\n\n var didSetItemProcessProgress = function didSetItemProcessProgress(_ref3) {\n var root = _ref3.root,\n action = _ref3.action;\n var title =\n action.progress === null\n ? root.query('GET_LABEL_FILE_PROCESSING')\n : root.query('GET_LABEL_FILE_PROCESSING') +\n ' ' +\n toPercentage(action.progress) +\n '%';\n\n text(root.ref.main, title);\n text(root.ref.sub, root.query('GET_LABEL_TAP_TO_CANCEL'));\n };\n\n var didRequestItemProcessing = function didRequestItemProcessing(_ref4) {\n var root = _ref4.root;\n text(root.ref.main, root.query('GET_LABEL_FILE_PROCESSING'));\n text(root.ref.sub, root.query('GET_LABEL_TAP_TO_CANCEL'));\n };\n\n var didAbortItemProcessing = function didAbortItemProcessing(_ref5) {\n var root = _ref5.root;\n text(root.ref.main, root.query('GET_LABEL_FILE_PROCESSING_ABORTED'));\n text(root.ref.sub, root.query('GET_LABEL_TAP_TO_RETRY'));\n };\n\n var didCompleteItemProcessing = function didCompleteItemProcessing(_ref6) {\n var root = _ref6.root;\n text(root.ref.main, root.query('GET_LABEL_FILE_PROCESSING_COMPLETE'));\n text(root.ref.sub, root.query('GET_LABEL_TAP_TO_UNDO'));\n };\n\n var clear = function clear(_ref7) {\n var root = _ref7.root;\n text(root.ref.main, '');\n text(root.ref.sub, '');\n };\n\n var error = function error(_ref8) {\n var root = _ref8.root,\n action = _ref8.action;\n text(root.ref.main, action.status.main);\n text(root.ref.sub, action.status.sub);\n };\n\n var fileStatus = createView({\n name: 'file-status',\n ignoreRect: true,\n ignoreRectUpdate: true,\n write: createRoute({\n DID_LOAD_ITEM: clear,\n DID_REVERT_ITEM_PROCESSING: clear,\n DID_REQUEST_ITEM_PROCESSING: didRequestItemProcessing,\n DID_ABORT_ITEM_PROCESSING: didAbortItemProcessing,\n DID_COMPLETE_ITEM_PROCESSING: didCompleteItemProcessing,\n DID_UPDATE_ITEM_PROCESS_PROGRESS: didSetItemProcessProgress,\n DID_UPDATE_ITEM_LOAD_PROGRESS: didSetItemLoadProgress,\n DID_THROW_ITEM_LOAD_ERROR: error,\n DID_THROW_ITEM_INVALID: error,\n DID_THROW_ITEM_PROCESSING_ERROR: error,\n DID_THROW_ITEM_PROCESSING_REVERT_ERROR: error,\n DID_THROW_ITEM_REMOVE_ERROR: error,\n }),\n\n didCreateView: function didCreateView(root) {\n applyFilters('CREATE_VIEW', Object.assign({}, root, { view: root }));\n },\n create: create$3,\n mixins: {\n styles: ['translateX', 'translateY', 'opacity'],\n animations: {\n opacity: { type: 'tween', duration: 250 },\n translateX: 'spring',\n translateY: 'spring',\n },\n },\n });\n\n /**\n * Button definitions for the file view\n */\n\n var Buttons = {\n AbortItemLoad: {\n label: 'GET_LABEL_BUTTON_ABORT_ITEM_LOAD',\n action: 'ABORT_ITEM_LOAD',\n className: 'filepond--action-abort-item-load',\n align: 'LOAD_INDICATOR_POSITION', // right\n },\n RetryItemLoad: {\n label: 'GET_LABEL_BUTTON_RETRY_ITEM_LOAD',\n action: 'RETRY_ITEM_LOAD',\n icon: 'GET_ICON_RETRY',\n className: 'filepond--action-retry-item-load',\n align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n },\n RemoveItem: {\n label: 'GET_LABEL_BUTTON_REMOVE_ITEM',\n action: 'REQUEST_REMOVE_ITEM',\n icon: 'GET_ICON_REMOVE',\n className: 'filepond--action-remove-item',\n align: 'BUTTON_REMOVE_ITEM_POSITION', // left\n },\n ProcessItem: {\n label: 'GET_LABEL_BUTTON_PROCESS_ITEM',\n action: 'REQUEST_ITEM_PROCESSING',\n icon: 'GET_ICON_PROCESS',\n className: 'filepond--action-process-item',\n align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n },\n AbortItemProcessing: {\n label: 'GET_LABEL_BUTTON_ABORT_ITEM_PROCESSING',\n action: 'ABORT_ITEM_PROCESSING',\n className: 'filepond--action-abort-item-processing',\n align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n },\n RetryItemProcessing: {\n label: 'GET_LABEL_BUTTON_RETRY_ITEM_PROCESSING',\n action: 'RETRY_ITEM_PROCESSING',\n icon: 'GET_ICON_RETRY',\n className: 'filepond--action-retry-item-processing',\n align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n },\n RevertItemProcessing: {\n label: 'GET_LABEL_BUTTON_UNDO_ITEM_PROCESSING',\n action: 'REQUEST_REVERT_ITEM_PROCESSING',\n icon: 'GET_ICON_UNDO',\n className: 'filepond--action-revert-item-processing',\n align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n },\n };\n\n // make a list of buttons, we can then remove buttons from this list if they're disabled\n var ButtonKeys = [];\n forin(Buttons, function(key) {\n ButtonKeys.push(key);\n });\n\n var calculateFileInfoOffset = function calculateFileInfoOffset(root) {\n if (getRemoveIndicatorAligment(root) === 'right') return 0;\n var buttonRect = root.ref.buttonRemoveItem.rect.element;\n return buttonRect.hidden ? null : buttonRect.width + buttonRect.left;\n };\n\n var calculateButtonWidth = function calculateButtonWidth(root) {\n var buttonRect = root.ref.buttonAbortItemLoad.rect.element;\n return buttonRect.width;\n };\n\n // Force on full pixels so text stays crips\n var calculateFileVerticalCenterOffset = function calculateFileVerticalCenterOffset(root) {\n return Math.floor(root.ref.buttonRemoveItem.rect.element.height / 4);\n };\n var calculateFileHorizontalCenterOffset = function calculateFileHorizontalCenterOffset(root) {\n return Math.floor(root.ref.buttonRemoveItem.rect.element.left / 2);\n };\n\n var getLoadIndicatorAlignment = function getLoadIndicatorAlignment(root) {\n return root.query('GET_STYLE_LOAD_INDICATOR_POSITION');\n };\n var getProcessIndicatorAlignment = function getProcessIndicatorAlignment(root) {\n return root.query('GET_STYLE_PROGRESS_INDICATOR_POSITION');\n };\n var getRemoveIndicatorAligment = function getRemoveIndicatorAligment(root) {\n return root.query('GET_STYLE_BUTTON_REMOVE_ITEM_POSITION');\n };\n\n var DefaultStyle = {\n buttonAbortItemLoad: { opacity: 0 },\n buttonRetryItemLoad: { opacity: 0 },\n buttonRemoveItem: { opacity: 0 },\n buttonProcessItem: { opacity: 0 },\n buttonAbortItemProcessing: { opacity: 0 },\n buttonRetryItemProcessing: { opacity: 0 },\n buttonRevertItemProcessing: { opacity: 0 },\n loadProgressIndicator: { opacity: 0, align: getLoadIndicatorAlignment },\n processProgressIndicator: { opacity: 0, align: getProcessIndicatorAlignment },\n processingCompleteIndicator: { opacity: 0, scaleX: 0.75, scaleY: 0.75 },\n info: { translateX: 0, translateY: 0, opacity: 0 },\n status: { translateX: 0, translateY: 0, opacity: 0 },\n };\n\n var IdleStyle = {\n buttonRemoveItem: { opacity: 1 },\n buttonProcessItem: { opacity: 1 },\n info: { translateX: calculateFileInfoOffset },\n status: { translateX: calculateFileInfoOffset },\n };\n\n var ProcessingStyle = {\n buttonAbortItemProcessing: { opacity: 1 },\n processProgressIndicator: { opacity: 1 },\n status: { opacity: 1 },\n };\n\n var StyleMap = {\n DID_THROW_ITEM_INVALID: {\n buttonRemoveItem: { opacity: 1 },\n info: { translateX: calculateFileInfoOffset },\n status: { translateX: calculateFileInfoOffset, opacity: 1 },\n },\n\n DID_START_ITEM_LOAD: {\n buttonAbortItemLoad: { opacity: 1 },\n loadProgressIndicator: { opacity: 1 },\n status: { opacity: 1 },\n },\n\n DID_THROW_ITEM_LOAD_ERROR: {\n buttonRetryItemLoad: { opacity: 1 },\n buttonRemoveItem: { opacity: 1 },\n info: { translateX: calculateFileInfoOffset },\n status: { opacity: 1 },\n },\n\n DID_START_ITEM_REMOVE: {\n processProgressIndicator: { opacity: 1, align: getRemoveIndicatorAligment },\n info: { translateX: calculateFileInfoOffset },\n status: { opacity: 0 },\n },\n\n DID_THROW_ITEM_REMOVE_ERROR: {\n processProgressIndicator: { opacity: 0, align: getRemoveIndicatorAligment },\n buttonRemoveItem: { opacity: 1 },\n info: { translateX: calculateFileInfoOffset },\n status: { opacity: 1, translateX: calculateFileInfoOffset },\n },\n\n DID_LOAD_ITEM: IdleStyle,\n DID_LOAD_LOCAL_ITEM: {\n buttonRemoveItem: { opacity: 1 },\n info: { translateX: calculateFileInfoOffset },\n status: { translateX: calculateFileInfoOffset },\n },\n\n DID_START_ITEM_PROCESSING: ProcessingStyle,\n DID_REQUEST_ITEM_PROCESSING: ProcessingStyle,\n DID_UPDATE_ITEM_PROCESS_PROGRESS: ProcessingStyle,\n DID_COMPLETE_ITEM_PROCESSING: {\n buttonRevertItemProcessing: { opacity: 1 },\n info: { opacity: 1 },\n status: { opacity: 1 },\n },\n\n DID_THROW_ITEM_PROCESSING_ERROR: {\n buttonRemoveItem: { opacity: 1 },\n buttonRetryItemProcessing: { opacity: 1 },\n status: { opacity: 1 },\n info: { translateX: calculateFileInfoOffset },\n },\n\n DID_THROW_ITEM_PROCESSING_REVERT_ERROR: {\n buttonRevertItemProcessing: { opacity: 1 },\n status: { opacity: 1 },\n info: { opacity: 1 },\n },\n\n DID_ABORT_ITEM_PROCESSING: {\n buttonRemoveItem: { opacity: 1 },\n buttonProcessItem: { opacity: 1 },\n info: { translateX: calculateFileInfoOffset },\n status: { opacity: 1 },\n },\n\n DID_REVERT_ITEM_PROCESSING: IdleStyle,\n };\n\n // complete indicator view\n var processingCompleteIndicatorView = createView({\n create: function create(_ref) {\n var root = _ref.root;\n root.element.innerHTML = root.query('GET_ICON_DONE');\n },\n name: 'processing-complete-indicator',\n ignoreRect: true,\n mixins: {\n styles: ['scaleX', 'scaleY', 'opacity'],\n animations: {\n scaleX: 'spring',\n scaleY: 'spring',\n opacity: { type: 'tween', duration: 250 },\n },\n },\n });\n\n /**\n * Creates the file view\n */\n var create$4 = function create(_ref2) {\n var root = _ref2.root,\n props = _ref2.props;\n // copy Buttons object\n var LocalButtons = Object.keys(Buttons).reduce(function(prev, curr) {\n prev[curr] = Object.assign({}, Buttons[curr]);\n return prev;\n }, {});\n var id = props.id;\n\n // allow reverting upload\n var allowRevert = root.query('GET_ALLOW_REVERT');\n\n // allow remove file\n var allowRemove = root.query('GET_ALLOW_REMOVE');\n\n // allow processing upload\n var allowProcess = root.query('GET_ALLOW_PROCESS');\n\n // is instant uploading, need this to determine the icon of the undo button\n var instantUpload = root.query('GET_INSTANT_UPLOAD');\n\n // is async set up\n var isAsync = root.query('IS_ASYNC');\n\n // should align remove item buttons\n var alignRemoveItemButton = root.query('GET_STYLE_BUTTON_REMOVE_ITEM_ALIGN');\n\n // enabled buttons array\n var buttonFilter;\n if (isAsync) {\n if (allowProcess && !allowRevert) {\n // only remove revert button\n buttonFilter = function buttonFilter(key) {\n return !/RevertItemProcessing/.test(key);\n };\n } else if (!allowProcess && allowRevert) {\n // only remove process button\n buttonFilter = function buttonFilter(key) {\n return !/ProcessItem|RetryItemProcessing|AbortItemProcessing/.test(key);\n };\n } else if (!allowProcess && !allowRevert) {\n // remove all process buttons\n buttonFilter = function buttonFilter(key) {\n return !/Process/.test(key);\n };\n }\n } else {\n // no process controls available\n buttonFilter = function buttonFilter(key) {\n return !/Process/.test(key);\n };\n }\n\n var enabledButtons = buttonFilter ? ButtonKeys.filter(buttonFilter) : ButtonKeys.concat();\n\n // update icon and label for revert button when instant uploading\n if (instantUpload && allowRevert) {\n LocalButtons['RevertItemProcessing'].label = 'GET_LABEL_BUTTON_REMOVE_ITEM';\n LocalButtons['RevertItemProcessing'].icon = 'GET_ICON_REMOVE';\n }\n\n // remove last button (revert) if not allowed\n if (isAsync && !allowRevert) {\n var map = StyleMap['DID_COMPLETE_ITEM_PROCESSING'];\n map.info.translateX = calculateFileHorizontalCenterOffset;\n map.info.translateY = calculateFileVerticalCenterOffset;\n map.status.translateY = calculateFileVerticalCenterOffset;\n map.processingCompleteIndicator = { opacity: 1, scaleX: 1, scaleY: 1 };\n }\n\n // should align center\n if (isAsync && !allowProcess) {\n [\n 'DID_START_ITEM_PROCESSING',\n 'DID_REQUEST_ITEM_PROCESSING',\n 'DID_UPDATE_ITEM_PROCESS_PROGRESS',\n 'DID_THROW_ITEM_PROCESSING_ERROR',\n ].forEach(function(key) {\n StyleMap[key].status.translateY = calculateFileVerticalCenterOffset;\n });\n StyleMap['DID_THROW_ITEM_PROCESSING_ERROR'].status.translateX = calculateButtonWidth;\n }\n\n // move remove button to right\n if (alignRemoveItemButton && allowRevert) {\n LocalButtons['RevertItemProcessing'].align = 'BUTTON_REMOVE_ITEM_POSITION';\n var _map = StyleMap['DID_COMPLETE_ITEM_PROCESSING'];\n _map.info.translateX = calculateFileInfoOffset;\n _map.status.translateY = calculateFileVerticalCenterOffset;\n _map.processingCompleteIndicator = { opacity: 1, scaleX: 1, scaleY: 1 };\n }\n\n // show/hide RemoveItem button\n if (!allowRemove) {\n LocalButtons['RemoveItem'].disabled = true;\n }\n\n // create the button views\n forin(LocalButtons, function(key, definition) {\n // create button\n var buttonView = root.createChildView(fileActionButton, {\n label: root.query(definition.label),\n icon: root.query(definition.icon),\n opacity: 0,\n });\n\n // should be appended?\n if (enabledButtons.includes(key)) {\n root.appendChildView(buttonView);\n }\n\n // toggle\n if (definition.disabled) {\n buttonView.element.setAttribute('disabled', 'disabled');\n buttonView.element.setAttribute('hidden', 'hidden');\n }\n\n // add position attribute\n buttonView.element.dataset.align = root.query('GET_STYLE_' + definition.align);\n\n // add class\n buttonView.element.classList.add(definition.className);\n\n // handle interactions\n buttonView.on('click', function(e) {\n e.stopPropagation();\n if (definition.disabled) return;\n root.dispatch(definition.action, { query: id });\n });\n\n // set reference\n root.ref['button' + key] = buttonView;\n });\n\n // checkmark\n root.ref.processingCompleteIndicator = root.appendChildView(\n root.createChildView(processingCompleteIndicatorView)\n );\n\n root.ref.processingCompleteIndicator.element.dataset.align = root.query(\n 'GET_STYLE_BUTTON_PROCESS_ITEM_POSITION'\n );\n\n // create file info view\n root.ref.info = root.appendChildView(root.createChildView(fileInfo, { id: id }));\n\n // create file status view\n root.ref.status = root.appendChildView(root.createChildView(fileStatus, { id: id }));\n\n // add progress indicators\n var loadIndicatorView = root.appendChildView(\n root.createChildView(progressIndicator, {\n opacity: 0,\n align: root.query('GET_STYLE_LOAD_INDICATOR_POSITION'),\n })\n );\n\n loadIndicatorView.element.classList.add('filepond--load-indicator');\n root.ref.loadProgressIndicator = loadIndicatorView;\n\n var progressIndicatorView = root.appendChildView(\n root.createChildView(progressIndicator, {\n opacity: 0,\n align: root.query('GET_STYLE_PROGRESS_INDICATOR_POSITION'),\n })\n );\n\n progressIndicatorView.element.classList.add('filepond--process-indicator');\n root.ref.processProgressIndicator = progressIndicatorView;\n\n // current active styles\n root.ref.activeStyles = [];\n };\n\n var write$2 = function write(_ref3) {\n var root = _ref3.root,\n actions = _ref3.actions,\n props = _ref3.props;\n // route actions\n route({ root: root, actions: actions, props: props });\n\n // select last state change action\n var action = actions\n .concat()\n .filter(function(action) {\n return /^DID_/.test(action.type);\n })\n .reverse()\n .find(function(action) {\n return StyleMap[action.type];\n });\n\n // a new action happened, let's get the matching styles\n if (action) {\n // define new active styles\n root.ref.activeStyles = [];\n\n var stylesToApply = StyleMap[action.type];\n forin(DefaultStyle, function(name, defaultStyles) {\n // get reference to control\n var control = root.ref[name];\n\n // loop over all styles for this control\n forin(defaultStyles, function(key, defaultValue) {\n var value =\n stylesToApply[name] && typeof stylesToApply[name][key] !== 'undefined'\n ? stylesToApply[name][key]\n : defaultValue;\n root.ref.activeStyles.push({ control: control, key: key, value: value });\n });\n });\n }\n\n // apply active styles to element\n root.ref.activeStyles.forEach(function(_ref4) {\n var control = _ref4.control,\n key = _ref4.key,\n value = _ref4.value;\n control[key] = typeof value === 'function' ? value(root) : value;\n });\n };\n\n var route = createRoute({\n DID_SET_LABEL_BUTTON_ABORT_ITEM_PROCESSING: function DID_SET_LABEL_BUTTON_ABORT_ITEM_PROCESSING(\n _ref5\n ) {\n var root = _ref5.root,\n action = _ref5.action;\n root.ref.buttonAbortItemProcessing.label = action.value;\n },\n DID_SET_LABEL_BUTTON_ABORT_ITEM_LOAD: function DID_SET_LABEL_BUTTON_ABORT_ITEM_LOAD(_ref6) {\n var root = _ref6.root,\n action = _ref6.action;\n root.ref.buttonAbortItemLoad.label = action.value;\n },\n DID_SET_LABEL_BUTTON_ABORT_ITEM_REMOVAL: function DID_SET_LABEL_BUTTON_ABORT_ITEM_REMOVAL(\n _ref7\n ) {\n var root = _ref7.root,\n action = _ref7.action;\n root.ref.buttonAbortItemRemoval.label = action.value;\n },\n DID_REQUEST_ITEM_PROCESSING: function DID_REQUEST_ITEM_PROCESSING(_ref8) {\n var root = _ref8.root;\n root.ref.processProgressIndicator.spin = true;\n root.ref.processProgressIndicator.progress = 0;\n },\n DID_START_ITEM_LOAD: function DID_START_ITEM_LOAD(_ref9) {\n var root = _ref9.root;\n root.ref.loadProgressIndicator.spin = true;\n root.ref.loadProgressIndicator.progress = 0;\n },\n DID_START_ITEM_REMOVE: function DID_START_ITEM_REMOVE(_ref10) {\n var root = _ref10.root;\n root.ref.processProgressIndicator.spin = true;\n root.ref.processProgressIndicator.progress = 0;\n },\n DID_UPDATE_ITEM_LOAD_PROGRESS: function DID_UPDATE_ITEM_LOAD_PROGRESS(_ref11) {\n var root = _ref11.root,\n action = _ref11.action;\n root.ref.loadProgressIndicator.spin = false;\n root.ref.loadProgressIndicator.progress = action.progress;\n },\n DID_UPDATE_ITEM_PROCESS_PROGRESS: function DID_UPDATE_ITEM_PROCESS_PROGRESS(_ref12) {\n var root = _ref12.root,\n action = _ref12.action;\n root.ref.processProgressIndicator.spin = false;\n root.ref.processProgressIndicator.progress = action.progress;\n },\n });\n\n var file = createView({\n create: create$4,\n write: write$2,\n didCreateView: function didCreateView(root) {\n applyFilters('CREATE_VIEW', Object.assign({}, root, { view: root }));\n },\n name: 'file',\n });\n\n /**\n * Creates the file view\n */\n var create$5 = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n\n // filename\n root.ref.fileName = createElement$1('legend');\n root.appendChild(root.ref.fileName);\n\n // file appended\n root.ref.file = root.appendChildView(root.createChildView(file, { id: props.id }));\n\n // data has moved to data.js\n root.ref.data = false;\n };\n\n /**\n * Data storage\n */\n var didLoadItem = function didLoadItem(_ref2) {\n var root = _ref2.root,\n props = _ref2.props;\n // updates the legend of the fieldset so screenreaders can better group buttons\n text(root.ref.fileName, formatFilename(root.query('GET_ITEM_NAME', props.id)));\n };\n\n var fileWrapper = createView({\n create: create$5,\n ignoreRect: true,\n write: createRoute({\n DID_LOAD_ITEM: didLoadItem,\n }),\n\n didCreateView: function didCreateView(root) {\n applyFilters('CREATE_VIEW', Object.assign({}, root, { view: root }));\n },\n tag: 'fieldset',\n name: 'file-wrapper',\n });\n\n var PANEL_SPRING_PROPS = { type: 'spring', damping: 0.6, mass: 7 };\n\n var create$6 = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n [\n {\n name: 'top',\n },\n\n {\n name: 'center',\n props: {\n translateY: null,\n scaleY: null,\n },\n\n mixins: {\n animations: {\n scaleY: PANEL_SPRING_PROPS,\n },\n\n styles: ['translateY', 'scaleY'],\n },\n },\n\n {\n name: 'bottom',\n props: {\n translateY: null,\n },\n\n mixins: {\n animations: {\n translateY: PANEL_SPRING_PROPS,\n },\n\n styles: ['translateY'],\n },\n },\n ].forEach(function(section) {\n createSection(root, section, props.name);\n });\n\n root.element.classList.add('filepond--' + props.name);\n\n root.ref.scalable = null;\n };\n\n var createSection = function createSection(root, section, className) {\n var viewConstructor = createView({\n name: 'panel-' + section.name + ' filepond--' + className,\n mixins: section.mixins,\n ignoreRectUpdate: true,\n });\n\n var view = root.createChildView(viewConstructor, section.props);\n\n root.ref[section.name] = root.appendChildView(view);\n };\n\n var write$3 = function write(_ref2) {\n var root = _ref2.root,\n props = _ref2.props;\n\n // update scalable state\n if (root.ref.scalable === null || props.scalable !== root.ref.scalable) {\n root.ref.scalable = isBoolean(props.scalable) ? props.scalable : true;\n root.element.dataset.scalable = root.ref.scalable;\n }\n\n // no height, can't set\n if (!props.height) return;\n\n // get child rects\n var topRect = root.ref.top.rect.element;\n var bottomRect = root.ref.bottom.rect.element;\n\n // make sure height never is smaller than bottom and top seciton heights combined (will probably never happen, but who knows)\n var height = Math.max(topRect.height + bottomRect.height, props.height);\n\n // offset center part\n root.ref.center.translateY = topRect.height;\n\n // scale center part\n // use math ceil to prevent transparent lines because of rounding errors\n root.ref.center.scaleY = (height - topRect.height - bottomRect.height) / 100;\n\n // offset bottom part\n root.ref.bottom.translateY = height - bottomRect.height;\n };\n\n var panel = createView({\n name: 'panel',\n read: function read(_ref3) {\n var root = _ref3.root,\n props = _ref3.props;\n return (props.heightCurrent = root.ref.bottom.translateY);\n },\n write: write$3,\n create: create$6,\n ignoreRect: true,\n mixins: {\n apis: ['height', 'heightCurrent', 'scalable'],\n },\n });\n\n var createDragHelper = function createDragHelper(items) {\n var itemIds = items.map(function(item) {\n return item.id;\n });\n var prevIndex = undefined;\n return {\n setIndex: function setIndex(index) {\n prevIndex = index;\n },\n getIndex: function getIndex() {\n return prevIndex;\n },\n getItemIndex: function getItemIndex(item) {\n return itemIds.indexOf(item.id);\n },\n };\n };\n\n var ITEM_TRANSLATE_SPRING = {\n type: 'spring',\n stiffness: 0.75,\n damping: 0.45,\n mass: 10,\n };\n\n var ITEM_SCALE_SPRING = 'spring';\n\n var StateMap = {\n DID_START_ITEM_LOAD: 'busy',\n DID_UPDATE_ITEM_LOAD_PROGRESS: 'loading',\n DID_THROW_ITEM_INVALID: 'load-invalid',\n DID_THROW_ITEM_LOAD_ERROR: 'load-error',\n DID_LOAD_ITEM: 'idle',\n DID_THROW_ITEM_REMOVE_ERROR: 'remove-error',\n DID_START_ITEM_REMOVE: 'busy',\n DID_START_ITEM_PROCESSING: 'busy processing',\n DID_REQUEST_ITEM_PROCESSING: 'busy processing',\n DID_UPDATE_ITEM_PROCESS_PROGRESS: 'processing',\n DID_COMPLETE_ITEM_PROCESSING: 'processing-complete',\n DID_THROW_ITEM_PROCESSING_ERROR: 'processing-error',\n DID_THROW_ITEM_PROCESSING_REVERT_ERROR: 'processing-revert-error',\n DID_ABORT_ITEM_PROCESSING: 'cancelled',\n DID_REVERT_ITEM_PROCESSING: 'idle',\n };\n\n /**\n * Creates the file view\n */\n var create$7 = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n\n // select\n root.ref.handleClick = function(e) {\n return root.dispatch('DID_ACTIVATE_ITEM', { id: props.id });\n };\n\n // set id\n root.element.id = 'filepond--item-' + props.id;\n root.element.addEventListener('click', root.ref.handleClick);\n\n // file view\n root.ref.container = root.appendChildView(\n root.createChildView(fileWrapper, { id: props.id })\n );\n\n // file panel\n root.ref.panel = root.appendChildView(root.createChildView(panel, { name: 'item-panel' }));\n\n // default start height\n root.ref.panel.height = null;\n\n // by default not marked for removal\n props.markedForRemoval = false;\n\n // if not allowed to reorder file items, exit here\n if (!root.query('GET_ALLOW_REORDER')) return;\n\n // set to idle so shows grab cursor\n root.element.dataset.dragState = 'idle';\n\n var grab = function grab(e) {\n if (!e.isPrimary) return;\n\n var removedActivateListener = false;\n\n var origin = {\n x: e.pageX,\n y: e.pageY,\n };\n\n props.dragOrigin = {\n x: root.translateX,\n y: root.translateY,\n };\n\n props.dragCenter = {\n x: e.offsetX,\n y: e.offsetY,\n };\n\n var dragState = createDragHelper(root.query('GET_ACTIVE_ITEMS'));\n\n root.dispatch('DID_GRAB_ITEM', { id: props.id, dragState: dragState });\n\n var drag = function drag(e) {\n if (!e.isPrimary) return;\n\n e.stopPropagation();\n e.preventDefault();\n\n props.dragOffset = {\n x: e.pageX - origin.x,\n y: e.pageY - origin.y,\n };\n\n // if dragged stop listening to clicks, will re-add when done dragging\n var dist =\n props.dragOffset.x * props.dragOffset.x +\n props.dragOffset.y * props.dragOffset.y;\n if (dist > 16 && !removedActivateListener) {\n removedActivateListener = true;\n root.element.removeEventListener('click', root.ref.handleClick);\n }\n\n root.dispatch('DID_DRAG_ITEM', { id: props.id, dragState: dragState });\n };\n\n var drop = function drop(e) {\n if (!e.isPrimary) return;\n\n document.removeEventListener('pointermove', drag);\n document.removeEventListener('pointerup', drop);\n\n props.dragOffset = {\n x: e.pageX - origin.x,\n y: e.pageY - origin.y,\n };\n\n root.dispatch('DID_DROP_ITEM', { id: props.id, dragState: dragState });\n\n // start listening to clicks again\n if (removedActivateListener) {\n setTimeout(function() {\n return root.element.addEventListener('click', root.ref.handleClick);\n }, 0);\n }\n };\n\n document.addEventListener('pointermove', drag);\n document.addEventListener('pointerup', drop);\n };\n\n root.element.addEventListener('pointerdown', grab);\n };\n\n var route$1 = createRoute({\n DID_UPDATE_PANEL_HEIGHT: function DID_UPDATE_PANEL_HEIGHT(_ref2) {\n var root = _ref2.root,\n action = _ref2.action;\n root.height = action.height;\n },\n });\n\n var write$4 = createRoute(\n {\n DID_GRAB_ITEM: function DID_GRAB_ITEM(_ref3) {\n var root = _ref3.root,\n props = _ref3.props;\n props.dragOrigin = {\n x: root.translateX,\n y: root.translateY,\n };\n },\n DID_DRAG_ITEM: function DID_DRAG_ITEM(_ref4) {\n var root = _ref4.root;\n root.element.dataset.dragState = 'drag';\n },\n DID_DROP_ITEM: function DID_DROP_ITEM(_ref5) {\n var root = _ref5.root,\n props = _ref5.props;\n props.dragOffset = null;\n props.dragOrigin = null;\n root.element.dataset.dragState = 'drop';\n },\n },\n function(_ref6) {\n var root = _ref6.root,\n actions = _ref6.actions,\n props = _ref6.props,\n shouldOptimize = _ref6.shouldOptimize;\n\n if (root.element.dataset.dragState === 'drop') {\n if (root.scaleX <= 1) {\n root.element.dataset.dragState = 'idle';\n }\n }\n\n // select last state change action\n var action = actions\n .concat()\n .filter(function(action) {\n return /^DID_/.test(action.type);\n })\n .reverse()\n .find(function(action) {\n return StateMap[action.type];\n });\n\n // no need to set same state twice\n if (action && action.type !== props.currentState) {\n // set current state\n props.currentState = action.type;\n\n // set state\n root.element.dataset.filepondItemState = StateMap[props.currentState] || '';\n }\n\n // route actions\n var aspectRatio =\n root.query('GET_ITEM_PANEL_ASPECT_RATIO') || root.query('GET_PANEL_ASPECT_RATIO');\n if (!aspectRatio) {\n route$1({ root: root, actions: actions, props: props });\n if (!root.height && root.ref.container.rect.element.height > 0) {\n root.height = root.ref.container.rect.element.height;\n }\n } else if (!shouldOptimize) {\n root.height = root.rect.element.width * aspectRatio;\n }\n\n // sync panel height with item height\n if (shouldOptimize) {\n root.ref.panel.height = null;\n }\n\n root.ref.panel.height = root.height;\n }\n );\n\n var item = createView({\n create: create$7,\n write: write$4,\n destroy: function destroy(_ref7) {\n var root = _ref7.root,\n props = _ref7.props;\n root.element.removeEventListener('click', root.ref.handleClick);\n root.dispatch('RELEASE_ITEM', { query: props.id });\n },\n tag: 'li',\n name: 'item',\n mixins: {\n apis: [\n 'id',\n 'interactionMethod',\n 'markedForRemoval',\n 'spawnDate',\n 'dragCenter',\n 'dragOrigin',\n 'dragOffset',\n ],\n styles: ['translateX', 'translateY', 'scaleX', 'scaleY', 'opacity', 'height'],\n\n animations: {\n scaleX: ITEM_SCALE_SPRING,\n scaleY: ITEM_SCALE_SPRING,\n translateX: ITEM_TRANSLATE_SPRING,\n translateY: ITEM_TRANSLATE_SPRING,\n opacity: { type: 'tween', duration: 150 },\n },\n },\n });\n\n var getItemsPerRow = function(horizontalSpace, itemWidth) {\n // add one pixel leeway, when using percentages for item width total items can be 1.99 per row\n\n return Math.max(1, Math.floor((horizontalSpace + 1) / itemWidth));\n };\n\n var getItemIndexByPosition = function getItemIndexByPosition(view, children, positionInView) {\n if (!positionInView) return;\n\n var horizontalSpace = view.rect.element.width;\n // const children = view.childViews;\n var l = children.length;\n var last = null;\n\n // -1, don't move items to accomodate (either add to top or bottom)\n if (l === 0 || positionInView.top < children[0].rect.element.top) return -1;\n\n // let's get the item width\n var item = children[0];\n var itemRect = item.rect.element;\n var itemHorizontalMargin = itemRect.marginLeft + itemRect.marginRight;\n var itemWidth = itemRect.width + itemHorizontalMargin;\n var itemsPerRow = getItemsPerRow(horizontalSpace, itemWidth);\n\n // stack\n if (itemsPerRow === 1) {\n for (var index = 0; index < l; index++) {\n var child = children[index];\n var childMid = child.rect.outer.top + child.rect.element.height * 0.5;\n if (positionInView.top < childMid) {\n return index;\n }\n }\n return l;\n }\n\n // grid\n var itemVerticalMargin = itemRect.marginTop + itemRect.marginBottom;\n var itemHeight = itemRect.height + itemVerticalMargin;\n for (var _index = 0; _index < l; _index++) {\n var indexX = _index % itemsPerRow;\n var indexY = Math.floor(_index / itemsPerRow);\n\n var offsetX = indexX * itemWidth;\n var offsetY = indexY * itemHeight;\n\n var itemTop = offsetY - itemRect.marginTop;\n var itemRight = offsetX + itemWidth;\n var itemBottom = offsetY + itemHeight + itemRect.marginBottom;\n\n if (positionInView.top < itemBottom && positionInView.top > itemTop) {\n if (positionInView.left < itemRight) {\n return _index;\n } else if (_index !== l - 1) {\n last = _index;\n } else {\n last = null;\n }\n }\n }\n\n if (last !== null) {\n return last;\n }\n\n return l;\n };\n\n var dropAreaDimensions = {\n height: 0,\n width: 0,\n get getHeight() {\n return this.height;\n },\n set setHeight(val) {\n if (this.height === 0 || val === 0) this.height = val;\n },\n get getWidth() {\n return this.width;\n },\n set setWidth(val) {\n if (this.width === 0 || val === 0) this.width = val;\n },\n setDimensions: function setDimensions(height, width) {\n if (this.height === 0 || height === 0) this.height = height;\n if (this.width === 0 || width === 0) this.width = width;\n },\n };\n\n var create$8 = function create(_ref) {\n var root = _ref.root;\n // need to set role to list as otherwise it won't be read as a list by VoiceOver\n attr(root.element, 'role', 'list');\n\n root.ref.lastItemSpanwDate = Date.now();\n };\n\n /**\n * Inserts a new item\n * @param root\n * @param action\n */\n var addItemView = function addItemView(_ref2) {\n var root = _ref2.root,\n action = _ref2.action;\n var id = action.id,\n index = action.index,\n interactionMethod = action.interactionMethod;\n\n root.ref.addIndex = index;\n\n var now = Date.now();\n var spawnDate = now;\n var opacity = 1;\n\n if (interactionMethod !== InteractionMethod.NONE) {\n opacity = 0;\n var cooldown = root.query('GET_ITEM_INSERT_INTERVAL');\n var dist = now - root.ref.lastItemSpanwDate;\n spawnDate = dist < cooldown ? now + (cooldown - dist) : now;\n }\n\n root.ref.lastItemSpanwDate = spawnDate;\n\n root.appendChildView(\n root.createChildView(\n // view type\n item,\n\n // props\n {\n spawnDate: spawnDate,\n id: id,\n opacity: opacity,\n interactionMethod: interactionMethod,\n }\n ),\n\n index\n );\n };\n\n var moveItem = function moveItem(item, x, y) {\n var vx = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var vy = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;\n // set to null to remove animation while dragging\n if (item.dragOffset) {\n item.translateX = null;\n item.translateY = null;\n item.translateX = item.dragOrigin.x + item.dragOffset.x;\n item.translateY = item.dragOrigin.y + item.dragOffset.y;\n item.scaleX = 1.025;\n item.scaleY = 1.025;\n } else {\n item.translateX = x;\n item.translateY = y;\n\n if (Date.now() > item.spawnDate) {\n // reveal element\n if (item.opacity === 0) {\n introItemView(item, x, y, vx, vy);\n }\n\n // make sure is default scale every frame\n item.scaleX = 1;\n item.scaleY = 1;\n item.opacity = 1;\n }\n }\n };\n\n var introItemView = function introItemView(item, x, y, vx, vy) {\n if (item.interactionMethod === InteractionMethod.NONE) {\n item.translateX = null;\n item.translateX = x;\n item.translateY = null;\n item.translateY = y;\n } else if (item.interactionMethod === InteractionMethod.DROP) {\n item.translateX = null;\n item.translateX = x - vx * 20;\n\n item.translateY = null;\n item.translateY = y - vy * 10;\n\n item.scaleX = 0.8;\n item.scaleY = 0.8;\n } else if (item.interactionMethod === InteractionMethod.BROWSE) {\n item.translateY = null;\n item.translateY = y - 30;\n } else if (item.interactionMethod === InteractionMethod.API) {\n item.translateX = null;\n item.translateX = x - 30;\n item.translateY = null;\n }\n };\n\n /**\n * Removes an existing item\n * @param root\n * @param action\n */\n var removeItemView = function removeItemView(_ref3) {\n var root = _ref3.root,\n action = _ref3.action;\n var id = action.id;\n\n // get the view matching the given id\n var view = root.childViews.find(function(child) {\n return child.id === id;\n });\n\n // if no view found, exit\n if (!view) {\n return;\n }\n\n // animate view out of view\n view.scaleX = 0.9;\n view.scaleY = 0.9;\n view.opacity = 0;\n\n // mark for removal\n view.markedForRemoval = true;\n };\n\n var getItemHeight = function getItemHeight(child) {\n return (\n child.rect.element.height +\n child.rect.element.marginBottom * 0.5 +\n child.rect.element.marginTop * 0.5\n );\n };\n var getItemWidth = function getItemWidth(child) {\n return (\n child.rect.element.width +\n child.rect.element.marginLeft * 0.5 +\n child.rect.element.marginRight * 0.5\n );\n };\n\n var dragItem = function dragItem(_ref4) {\n var root = _ref4.root,\n action = _ref4.action;\n var id = action.id,\n dragState = action.dragState;\n\n // reference to item\n var item = root.query('GET_ITEM', { id: id });\n\n // get the view matching the given id\n var view = root.childViews.find(function(child) {\n return child.id === id;\n });\n\n var numItems = root.childViews.length;\n var oldIndex = dragState.getItemIndex(item);\n\n // if no view found, exit\n if (!view) return;\n\n var dragPosition = {\n x: view.dragOrigin.x + view.dragOffset.x + view.dragCenter.x,\n y: view.dragOrigin.y + view.dragOffset.y + view.dragCenter.y,\n };\n\n // get drag area dimensions\n var dragHeight = getItemHeight(view);\n var dragWidth = getItemWidth(view);\n\n // get rows and columns (There will always be at least one row and one column if a file is present)\n var cols = Math.floor(root.rect.outer.width / dragWidth);\n if (cols > numItems) cols = numItems;\n\n // rows are used to find when we have left the preview area bounding box\n var rows = Math.floor(numItems / cols + 1);\n\n dropAreaDimensions.setHeight = dragHeight * rows;\n dropAreaDimensions.setWidth = dragWidth * cols;\n\n // get new index of dragged item\n var location = {\n y: Math.floor(dragPosition.y / dragHeight),\n x: Math.floor(dragPosition.x / dragWidth),\n getGridIndex: function getGridIndex() {\n if (\n dragPosition.y > dropAreaDimensions.getHeight ||\n dragPosition.y < 0 ||\n dragPosition.x > dropAreaDimensions.getWidth ||\n dragPosition.x < 0\n )\n return oldIndex;\n return this.y * cols + this.x;\n },\n getColIndex: function getColIndex() {\n var items = root.query('GET_ACTIVE_ITEMS');\n var visibleChildren = root.childViews.filter(function(child) {\n return child.rect.element.height;\n });\n var children = items.map(function(item) {\n return visibleChildren.find(function(childView) {\n return childView.id === item.id;\n });\n });\n\n var currentIndex = children.findIndex(function(child) {\n return child === view;\n });\n var dragHeight = getItemHeight(view);\n var l = children.length;\n var idx = l;\n var childHeight = 0;\n var childBottom = 0;\n var childTop = 0;\n for (var i = 0; i < l; i++) {\n childHeight = getItemHeight(children[i]);\n childTop = childBottom;\n childBottom = childTop + childHeight;\n if (dragPosition.y < childBottom) {\n if (currentIndex > i) {\n if (dragPosition.y < childTop + dragHeight) {\n idx = i;\n break;\n }\n continue;\n }\n idx = i;\n break;\n }\n }\n return idx;\n },\n };\n\n // get new index\n var index = cols > 1 ? location.getGridIndex() : location.getColIndex();\n root.dispatch('MOVE_ITEM', { query: view, index: index });\n\n // if the index of the item changed, dispatch reorder action\n var currentIndex = dragState.getIndex();\n\n if (currentIndex === undefined || currentIndex !== index) {\n dragState.setIndex(index);\n\n if (currentIndex === undefined) return;\n\n root.dispatch('DID_REORDER_ITEMS', {\n items: root.query('GET_ACTIVE_ITEMS'),\n origin: oldIndex,\n target: index,\n });\n }\n };\n\n /**\n * Setup action routes\n */\n var route$2 = createRoute({\n DID_ADD_ITEM: addItemView,\n DID_REMOVE_ITEM: removeItemView,\n DID_DRAG_ITEM: dragItem,\n });\n\n /**\n * Write to view\n * @param root\n * @param actions\n * @param props\n */\n var write$5 = function write(_ref5) {\n var root = _ref5.root,\n props = _ref5.props,\n actions = _ref5.actions,\n shouldOptimize = _ref5.shouldOptimize;\n // route actions\n route$2({ root: root, props: props, actions: actions });\n var dragCoordinates = props.dragCoordinates;\n\n // available space on horizontal axis\n var horizontalSpace = root.rect.element.width;\n\n // only draw children that have dimensions\n var visibleChildren = root.childViews.filter(function(child) {\n return child.rect.element.height;\n });\n\n // sort based on current active items\n var children = root\n .query('GET_ACTIVE_ITEMS')\n .map(function(item) {\n return visibleChildren.find(function(child) {\n return child.id === item.id;\n });\n })\n .filter(function(item) {\n return item;\n });\n\n // get index\n var dragIndex = dragCoordinates\n ? getItemIndexByPosition(root, children, dragCoordinates)\n : null;\n\n // add index is used to reserve the dropped/added item index till the actual item is rendered\n var addIndex = root.ref.addIndex || null;\n\n // add index no longer needed till possibly next draw\n root.ref.addIndex = null;\n\n var dragIndexOffset = 0;\n var removeIndexOffset = 0;\n var addIndexOffset = 0;\n\n if (children.length === 0) return;\n\n var childRect = children[0].rect.element;\n var itemVerticalMargin = childRect.marginTop + childRect.marginBottom;\n var itemHorizontalMargin = childRect.marginLeft + childRect.marginRight;\n var itemWidth = childRect.width + itemHorizontalMargin;\n var itemHeight = childRect.height + itemVerticalMargin;\n var itemsPerRow = getItemsPerRow(horizontalSpace, itemWidth);\n\n // stack\n if (itemsPerRow === 1) {\n var offsetY = 0;\n var dragOffset = 0;\n\n children.forEach(function(child, index) {\n if (dragIndex) {\n var dist = index - dragIndex;\n if (dist === -2) {\n dragOffset = -itemVerticalMargin * 0.25;\n } else if (dist === -1) {\n dragOffset = -itemVerticalMargin * 0.75;\n } else if (dist === 0) {\n dragOffset = itemVerticalMargin * 0.75;\n } else if (dist === 1) {\n dragOffset = itemVerticalMargin * 0.25;\n } else {\n dragOffset = 0;\n }\n }\n\n if (shouldOptimize) {\n child.translateX = null;\n child.translateY = null;\n }\n\n if (!child.markedForRemoval) {\n moveItem(child, 0, offsetY + dragOffset);\n }\n\n var itemHeight = child.rect.element.height + itemVerticalMargin;\n\n var visualHeight = itemHeight * (child.markedForRemoval ? child.opacity : 1);\n\n offsetY += visualHeight;\n });\n }\n // grid\n else {\n var prevX = 0;\n var prevY = 0;\n\n children.forEach(function(child, index) {\n if (index === dragIndex) {\n dragIndexOffset = 1;\n }\n\n if (index === addIndex) {\n addIndexOffset += 1;\n }\n\n if (child.markedForRemoval && child.opacity < 0.5) {\n removeIndexOffset -= 1;\n }\n\n var visualIndex = index + addIndexOffset + dragIndexOffset + removeIndexOffset;\n\n var indexX = visualIndex % itemsPerRow;\n var indexY = Math.floor(visualIndex / itemsPerRow);\n\n var offsetX = indexX * itemWidth;\n var offsetY = indexY * itemHeight;\n\n var vectorX = Math.sign(offsetX - prevX);\n var vectorY = Math.sign(offsetY - prevY);\n\n prevX = offsetX;\n prevY = offsetY;\n\n if (child.markedForRemoval) return;\n\n if (shouldOptimize) {\n child.translateX = null;\n child.translateY = null;\n }\n\n moveItem(child, offsetX, offsetY, vectorX, vectorY);\n });\n }\n };\n\n /**\n * Filters actions that are meant specifically for a certain child of the list\n * @param child\n * @param actions\n */\n var filterSetItemActions = function filterSetItemActions(child, actions) {\n return actions.filter(function(action) {\n // if action has an id, filter out actions that don't have this child id\n if (action.data && action.data.id) {\n return child.id === action.data.id;\n }\n\n // allow all other actions\n return true;\n });\n };\n\n var list = createView({\n create: create$8,\n write: write$5,\n tag: 'ul',\n name: 'list',\n didWriteView: function didWriteView(_ref6) {\n var root = _ref6.root;\n root.childViews\n .filter(function(view) {\n return view.markedForRemoval && view.opacity === 0 && view.resting;\n })\n .forEach(function(view) {\n view._destroy();\n root.removeChildView(view);\n });\n },\n filterFrameActionsForChild: filterSetItemActions,\n mixins: {\n apis: ['dragCoordinates'],\n },\n });\n\n var create$9 = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n root.ref.list = root.appendChildView(root.createChildView(list));\n props.dragCoordinates = null;\n props.overflowing = false;\n };\n\n var storeDragCoordinates = function storeDragCoordinates(_ref2) {\n var root = _ref2.root,\n props = _ref2.props,\n action = _ref2.action;\n if (!root.query('GET_ITEM_INSERT_LOCATION_FREEDOM')) return;\n props.dragCoordinates = {\n left: action.position.scopeLeft - root.ref.list.rect.element.left,\n top:\n action.position.scopeTop -\n (root.rect.outer.top + root.rect.element.marginTop + root.rect.element.scrollTop),\n };\n };\n\n var clearDragCoordinates = function clearDragCoordinates(_ref3) {\n var props = _ref3.props;\n props.dragCoordinates = null;\n };\n\n var route$3 = createRoute({\n DID_DRAG: storeDragCoordinates,\n DID_END_DRAG: clearDragCoordinates,\n });\n\n var write$6 = function write(_ref4) {\n var root = _ref4.root,\n props = _ref4.props,\n actions = _ref4.actions;\n\n // route actions\n route$3({ root: root, props: props, actions: actions });\n\n // current drag position\n root.ref.list.dragCoordinates = props.dragCoordinates;\n\n // if currently overflowing but no longer received overflow\n if (props.overflowing && !props.overflow) {\n props.overflowing = false;\n\n // reset overflow state\n root.element.dataset.state = '';\n root.height = null;\n }\n\n // if is not overflowing currently but does receive overflow value\n if (props.overflow) {\n var newHeight = Math.round(props.overflow);\n if (newHeight !== root.height) {\n props.overflowing = true;\n root.element.dataset.state = 'overflow';\n root.height = newHeight;\n }\n }\n };\n\n var listScroller = createView({\n create: create$9,\n write: write$6,\n name: 'list-scroller',\n mixins: {\n apis: ['overflow', 'dragCoordinates'],\n styles: ['height', 'translateY'],\n animations: {\n translateY: 'spring',\n },\n },\n });\n\n var attrToggle = function attrToggle(element, name, state) {\n var enabledValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n if (state) {\n attr(element, name, enabledValue);\n } else {\n element.removeAttribute(name);\n }\n };\n\n var resetFileInput = function resetFileInput(input) {\n // no value, no need to reset\n if (!input || input.value === '') {\n return;\n }\n\n try {\n // for modern browsers\n input.value = '';\n } catch (err) {}\n\n // for IE10\n if (input.value) {\n // quickly append input to temp form and reset form\n var form = createElement$1('form');\n var parentNode = input.parentNode;\n var ref = input.nextSibling;\n form.appendChild(input);\n form.reset();\n\n // re-inject input where it originally was\n if (ref) {\n parentNode.insertBefore(input, ref);\n } else {\n parentNode.appendChild(input);\n }\n }\n };\n\n var create$a = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n\n // set id so can be referenced from outside labels\n root.element.id = 'filepond--browser-' + props.id;\n\n // set name of element (is removed when a value is set)\n attr(root.element, 'name', root.query('GET_NAME'));\n\n // we have to link this element to the status element\n attr(root.element, 'aria-controls', 'filepond--assistant-' + props.id);\n\n // set label, we use labelled by as otherwise the screenreader does not read the \"browse\" text in the label (as it has tabindex: 0)\n attr(root.element, 'aria-labelledby', 'filepond--drop-label-' + props.id);\n\n // set configurable props\n setAcceptedFileTypes({\n root: root,\n action: { value: root.query('GET_ACCEPTED_FILE_TYPES') },\n });\n toggleAllowMultiple({ root: root, action: { value: root.query('GET_ALLOW_MULTIPLE') } });\n toggleDirectoryFilter({\n root: root,\n action: { value: root.query('GET_ALLOW_DIRECTORIES_ONLY') },\n });\n toggleDisabled({ root: root });\n toggleRequired({ root: root, action: { value: root.query('GET_REQUIRED') } });\n setCaptureMethod({ root: root, action: { value: root.query('GET_CAPTURE_METHOD') } });\n\n // handle changes to the input field\n root.ref.handleChange = function(e) {\n if (!root.element.value) {\n return;\n }\n\n // extract files and move value of webkitRelativePath path to _relativePath\n var files = Array.from(root.element.files).map(function(file) {\n file._relativePath = file.webkitRelativePath;\n return file;\n });\n\n // we add a little delay so the OS file select window can move out of the way before we add our file\n setTimeout(function() {\n // load files\n props.onload(files);\n\n // reset input, it's just for exposing a method to drop files, should not retain any state\n resetFileInput(root.element);\n }, 250);\n };\n\n root.element.addEventListener('change', root.ref.handleChange);\n };\n\n var setAcceptedFileTypes = function setAcceptedFileTypes(_ref2) {\n var root = _ref2.root,\n action = _ref2.action;\n if (!root.query('GET_ALLOW_SYNC_ACCEPT_ATTRIBUTE')) return;\n attrToggle(\n root.element,\n 'accept',\n !!action.value,\n action.value ? action.value.join(',') : ''\n );\n };\n\n var toggleAllowMultiple = function toggleAllowMultiple(_ref3) {\n var root = _ref3.root,\n action = _ref3.action;\n attrToggle(root.element, 'multiple', action.value);\n };\n\n var toggleDirectoryFilter = function toggleDirectoryFilter(_ref4) {\n var root = _ref4.root,\n action = _ref4.action;\n attrToggle(root.element, 'webkitdirectory', action.value);\n };\n\n var toggleDisabled = function toggleDisabled(_ref5) {\n var root = _ref5.root;\n var isDisabled = root.query('GET_DISABLED');\n var doesAllowBrowse = root.query('GET_ALLOW_BROWSE');\n var disableField = isDisabled || !doesAllowBrowse;\n attrToggle(root.element, 'disabled', disableField);\n };\n\n var toggleRequired = function toggleRequired(_ref6) {\n var root = _ref6.root,\n action = _ref6.action;\n // want to remove required, always possible\n if (!action.value) {\n attrToggle(root.element, 'required', false);\n }\n // if want to make required, only possible when zero items\n else if (root.query('GET_TOTAL_ITEMS') === 0) {\n attrToggle(root.element, 'required', true);\n }\n };\n\n var setCaptureMethod = function setCaptureMethod(_ref7) {\n var root = _ref7.root,\n action = _ref7.action;\n attrToggle(\n root.element,\n 'capture',\n !!action.value,\n action.value === true ? '' : action.value\n );\n };\n\n var updateRequiredStatus = function updateRequiredStatus(_ref8) {\n var root = _ref8.root;\n var element = root.element;\n // always remove the required attribute when more than zero items\n if (root.query('GET_TOTAL_ITEMS') > 0) {\n attrToggle(element, 'required', false);\n attrToggle(element, 'name', false);\n } else {\n // add name attribute\n attrToggle(element, 'name', true, root.query('GET_NAME'));\n\n // remove any validation messages\n var shouldCheckValidity = root.query('GET_CHECK_VALIDITY');\n if (shouldCheckValidity) {\n element.setCustomValidity('');\n }\n\n // we only add required if the field has been deemed required\n if (root.query('GET_REQUIRED')) {\n attrToggle(element, 'required', true);\n }\n }\n };\n\n var updateFieldValidityStatus = function updateFieldValidityStatus(_ref9) {\n var root = _ref9.root;\n var shouldCheckValidity = root.query('GET_CHECK_VALIDITY');\n if (!shouldCheckValidity) return;\n root.element.setCustomValidity(root.query('GET_LABEL_INVALID_FIELD'));\n };\n\n var browser = createView({\n tag: 'input',\n name: 'browser',\n ignoreRect: true,\n ignoreRectUpdate: true,\n attributes: {\n type: 'file',\n },\n\n create: create$a,\n destroy: function destroy(_ref10) {\n var root = _ref10.root;\n root.element.removeEventListener('change', root.ref.handleChange);\n },\n write: createRoute({\n DID_LOAD_ITEM: updateRequiredStatus,\n DID_REMOVE_ITEM: updateRequiredStatus,\n DID_THROW_ITEM_INVALID: updateFieldValidityStatus,\n\n DID_SET_DISABLED: toggleDisabled,\n DID_SET_ALLOW_BROWSE: toggleDisabled,\n DID_SET_ALLOW_DIRECTORIES_ONLY: toggleDirectoryFilter,\n DID_SET_ALLOW_MULTIPLE: toggleAllowMultiple,\n DID_SET_ACCEPTED_FILE_TYPES: setAcceptedFileTypes,\n DID_SET_CAPTURE_METHOD: setCaptureMethod,\n DID_SET_REQUIRED: toggleRequired,\n }),\n });\n\n var Key = {\n ENTER: 13,\n SPACE: 32,\n };\n\n var create$b = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n\n // create the label and link it to the file browser\n var label = createElement$1('label');\n attr(label, 'for', 'filepond--browser-' + props.id);\n\n // use for labeling file input (aria-labelledby on file input)\n attr(label, 'id', 'filepond--drop-label-' + props.id);\n\n // hide the label for screenreaders, the input element will read the contents of the label when it's focussed. If we don't set aria-hidden the screenreader will also navigate the contents of the label separately from the input.\n attr(label, 'aria-hidden', 'true');\n\n // handle keys\n root.ref.handleKeyDown = function(e) {\n var isActivationKey = e.keyCode === Key.ENTER || e.keyCode === Key.SPACE;\n if (!isActivationKey) return;\n // stops from triggering the element a second time\n e.preventDefault();\n\n // click link (will then in turn activate file input)\n root.ref.label.click();\n };\n\n root.ref.handleClick = function(e) {\n var isLabelClick = e.target === label || label.contains(e.target);\n\n // don't want to click twice\n if (isLabelClick) return;\n\n // click link (will then in turn activate file input)\n root.ref.label.click();\n };\n\n // attach events\n label.addEventListener('keydown', root.ref.handleKeyDown);\n root.element.addEventListener('click', root.ref.handleClick);\n\n // update\n updateLabelValue(label, props.caption);\n\n // add!\n root.appendChild(label);\n root.ref.label = label;\n };\n\n var updateLabelValue = function updateLabelValue(label, value) {\n label.innerHTML = value;\n var clickable = label.querySelector('.filepond--label-action');\n if (clickable) {\n attr(clickable, 'tabindex', '0');\n }\n return value;\n };\n\n var dropLabel = createView({\n name: 'drop-label',\n ignoreRect: true,\n create: create$b,\n destroy: function destroy(_ref2) {\n var root = _ref2.root;\n root.ref.label.addEventListener('keydown', root.ref.handleKeyDown);\n root.element.removeEventListener('click', root.ref.handleClick);\n },\n write: createRoute({\n DID_SET_LABEL_IDLE: function DID_SET_LABEL_IDLE(_ref3) {\n var root = _ref3.root,\n action = _ref3.action;\n updateLabelValue(root.ref.label, action.value);\n },\n }),\n\n mixins: {\n styles: ['opacity', 'translateX', 'translateY'],\n animations: {\n opacity: { type: 'tween', duration: 150 },\n translateX: 'spring',\n translateY: 'spring',\n },\n },\n });\n\n var blob = createView({\n name: 'drip-blob',\n ignoreRect: true,\n mixins: {\n styles: ['translateX', 'translateY', 'scaleX', 'scaleY', 'opacity'],\n animations: {\n scaleX: 'spring',\n scaleY: 'spring',\n translateX: 'spring',\n translateY: 'spring',\n opacity: { type: 'tween', duration: 250 },\n },\n },\n });\n\n var addBlob = function addBlob(_ref) {\n var root = _ref.root;\n var centerX = root.rect.element.width * 0.5;\n var centerY = root.rect.element.height * 0.5;\n\n root.ref.blob = root.appendChildView(\n root.createChildView(blob, {\n opacity: 0,\n scaleX: 2.5,\n scaleY: 2.5,\n translateX: centerX,\n translateY: centerY,\n })\n );\n };\n\n var moveBlob = function moveBlob(_ref2) {\n var root = _ref2.root,\n action = _ref2.action;\n if (!root.ref.blob) {\n addBlob({ root: root });\n return;\n }\n\n root.ref.blob.translateX = action.position.scopeLeft;\n root.ref.blob.translateY = action.position.scopeTop;\n root.ref.blob.scaleX = 1;\n root.ref.blob.scaleY = 1;\n root.ref.blob.opacity = 1;\n };\n\n var hideBlob = function hideBlob(_ref3) {\n var root = _ref3.root;\n if (!root.ref.blob) {\n return;\n }\n root.ref.blob.opacity = 0;\n };\n\n var explodeBlob = function explodeBlob(_ref4) {\n var root = _ref4.root;\n if (!root.ref.blob) {\n return;\n }\n root.ref.blob.scaleX = 2.5;\n root.ref.blob.scaleY = 2.5;\n root.ref.blob.opacity = 0;\n };\n\n var write$7 = function write(_ref5) {\n var root = _ref5.root,\n props = _ref5.props,\n actions = _ref5.actions;\n route$4({ root: root, props: props, actions: actions });\n var blob = root.ref.blob;\n\n if (actions.length === 0 && blob && blob.opacity === 0) {\n root.removeChildView(blob);\n root.ref.blob = null;\n }\n };\n\n var route$4 = createRoute({\n DID_DRAG: moveBlob,\n DID_DROP: explodeBlob,\n DID_END_DRAG: hideBlob,\n });\n\n var drip = createView({\n ignoreRect: true,\n ignoreRectUpdate: true,\n name: 'drip',\n write: write$7,\n });\n\n var setInputFiles = function setInputFiles(element, files) {\n try {\n // Create a DataTransfer instance and add a newly created file\n var dataTransfer = new DataTransfer();\n files.forEach(function(file) {\n if (file instanceof File) {\n dataTransfer.items.add(file);\n } else {\n dataTransfer.items.add(\n new File([file], file.name, {\n type: file.type,\n })\n );\n }\n });\n\n // Assign the DataTransfer files list to the file input\n element.files = dataTransfer.files;\n } catch (err) {\n return false;\n }\n return true;\n };\n\n var create$c = function create(_ref) {\n var root = _ref.root;\n return (root.ref.fields = {});\n };\n\n var getField = function getField(root, id) {\n return root.ref.fields[id];\n };\n\n var syncFieldPositionsWithItems = function syncFieldPositionsWithItems(root) {\n root.query('GET_ACTIVE_ITEMS').forEach(function(item) {\n if (!root.ref.fields[item.id]) return;\n root.element.appendChild(root.ref.fields[item.id]);\n });\n };\n\n var didReorderItems = function didReorderItems(_ref2) {\n var root = _ref2.root;\n return syncFieldPositionsWithItems(root);\n };\n\n var didAddItem = function didAddItem(_ref3) {\n var root = _ref3.root,\n action = _ref3.action;\n var fileItem = root.query('GET_ITEM', action.id);\n var isLocalFile = fileItem.origin === FileOrigin.LOCAL;\n var shouldUseFileInput = !isLocalFile && root.query('SHOULD_UPDATE_FILE_INPUT');\n var dataContainer = createElement$1('input');\n dataContainer.type = shouldUseFileInput ? 'file' : 'hidden';\n dataContainer.name = root.query('GET_NAME');\n dataContainer.disabled = root.query('GET_DISABLED');\n root.ref.fields[action.id] = dataContainer;\n syncFieldPositionsWithItems(root);\n };\n\n var didLoadItem$1 = function didLoadItem(_ref4) {\n var root = _ref4.root,\n action = _ref4.action;\n var field = getField(root, action.id);\n if (!field) return;\n\n // store server ref in hidden input\n if (action.serverFileReference !== null) field.value = action.serverFileReference;\n\n // store file item in file input\n if (!root.query('SHOULD_UPDATE_FILE_INPUT')) return;\n\n var fileItem = root.query('GET_ITEM', action.id);\n setInputFiles(field, [fileItem.file]);\n };\n\n var didPrepareOutput = function didPrepareOutput(_ref5) {\n var root = _ref5.root,\n action = _ref5.action;\n // this timeout pushes the handler after 'load'\n if (!root.query('SHOULD_UPDATE_FILE_INPUT')) return;\n setTimeout(function() {\n var field = getField(root, action.id);\n if (!field) return;\n setInputFiles(field, [action.file]);\n }, 0);\n };\n\n var didSetDisabled = function didSetDisabled(_ref6) {\n var root = _ref6.root;\n root.element.disabled = root.query('GET_DISABLED');\n };\n\n var didRemoveItem = function didRemoveItem(_ref7) {\n var root = _ref7.root,\n action = _ref7.action;\n var field = getField(root, action.id);\n if (!field) return;\n if (field.parentNode) field.parentNode.removeChild(field);\n delete root.ref.fields[action.id];\n };\n\n // only runs for server files (so doesn't deal with file input)\n var didDefineValue = function didDefineValue(_ref8) {\n var root = _ref8.root,\n action = _ref8.action;\n var field = getField(root, action.id);\n if (!field) return;\n if (action.value === null) {\n // clear field value\n field.removeAttribute('value');\n } else {\n // set field value\n field.value = action.value;\n }\n syncFieldPositionsWithItems(root);\n };\n\n var write$8 = createRoute({\n DID_SET_DISABLED: didSetDisabled,\n DID_ADD_ITEM: didAddItem,\n DID_LOAD_ITEM: didLoadItem$1,\n DID_REMOVE_ITEM: didRemoveItem,\n DID_DEFINE_VALUE: didDefineValue,\n DID_PREPARE_OUTPUT: didPrepareOutput,\n DID_REORDER_ITEMS: didReorderItems,\n DID_SORT_ITEMS: didReorderItems,\n });\n\n var data = createView({\n tag: 'fieldset',\n name: 'data',\n create: create$c,\n write: write$8,\n ignoreRect: true,\n });\n\n var getRootNode = function getRootNode(element) {\n return 'getRootNode' in element ? element.getRootNode() : document;\n };\n\n var images = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'tiff'];\n var text$1 = ['css', 'csv', 'html', 'txt'];\n var map = {\n zip: 'zip|compressed',\n epub: 'application/epub+zip',\n };\n\n var guesstimateMimeType = function guesstimateMimeType() {\n var extension = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n extension = extension.toLowerCase();\n if (images.includes(extension)) {\n return (\n 'image/' +\n (extension === 'jpg' ? 'jpeg' : extension === 'svg' ? 'svg+xml' : extension)\n );\n }\n if (text$1.includes(extension)) {\n return 'text/' + extension;\n }\n\n return map[extension] || '';\n };\n\n var requestDataTransferItems = function requestDataTransferItems(dataTransfer) {\n return new Promise(function(resolve, reject) {\n // try to get links from transfer, if found we'll exit immediately (unless a file is in the dataTransfer as well, this is because Firefox could represent the file as a URL and a file object at the same time)\n var links = getLinks(dataTransfer);\n if (links.length && !hasFiles(dataTransfer)) {\n return resolve(links);\n }\n // try to get files from the transfer\n getFiles(dataTransfer).then(resolve);\n });\n };\n\n /**\n * Test if datatransfer has files\n */\n var hasFiles = function hasFiles(dataTransfer) {\n if (dataTransfer.files) return dataTransfer.files.length > 0;\n return false;\n };\n\n /**\n * Extracts files from a DataTransfer object\n */\n var getFiles = function getFiles(dataTransfer) {\n return new Promise(function(resolve, reject) {\n // get the transfer items as promises\n var promisedFiles = (dataTransfer.items ? Array.from(dataTransfer.items) : [])\n // only keep file system items (files and directories)\n .filter(function(item) {\n return isFileSystemItem(item);\n })\n\n // map each item to promise\n .map(function(item) {\n return getFilesFromItem(item);\n });\n\n // if is empty, see if we can extract some info from the files property as a fallback\n if (!promisedFiles.length) {\n // TODO: test for directories (should not be allowed)\n // Use FileReader, problem is that the files property gets lost in the process\n resolve(dataTransfer.files ? Array.from(dataTransfer.files) : []);\n return;\n }\n\n // done!\n Promise.all(promisedFiles)\n .then(function(returnedFileGroups) {\n // flatten groups\n var files = [];\n returnedFileGroups.forEach(function(group) {\n files.push.apply(files, group);\n });\n\n // done (filter out empty files)!\n resolve(\n files\n .filter(function(file) {\n return file;\n })\n .map(function(file) {\n if (!file._relativePath)\n file._relativePath = file.webkitRelativePath;\n return file;\n })\n );\n })\n .catch(console.error);\n });\n };\n\n var isFileSystemItem = function isFileSystemItem(item) {\n if (isEntry(item)) {\n var entry = getAsEntry(item);\n if (entry) {\n return entry.isFile || entry.isDirectory;\n }\n }\n return item.kind === 'file';\n };\n\n var getFilesFromItem = function getFilesFromItem(item) {\n return new Promise(function(resolve, reject) {\n if (isDirectoryEntry(item)) {\n getFilesInDirectory(getAsEntry(item))\n .then(resolve)\n .catch(reject);\n return;\n }\n\n resolve([item.getAsFile()]);\n });\n };\n\n var getFilesInDirectory = function getFilesInDirectory(entry) {\n return new Promise(function(resolve, reject) {\n var files = [];\n\n // the total entries to read\n var dirCounter = 0;\n var fileCounter = 0;\n\n var resolveIfDone = function resolveIfDone() {\n if (fileCounter === 0 && dirCounter === 0) {\n resolve(files);\n }\n };\n\n // the recursive function\n var readEntries = function readEntries(dirEntry) {\n dirCounter++;\n\n var directoryReader = dirEntry.createReader();\n\n // directories are returned in batches, we need to process all batches before we're done\n var readBatch = function readBatch() {\n directoryReader.readEntries(function(entries) {\n if (entries.length === 0) {\n dirCounter--;\n resolveIfDone();\n return;\n }\n\n entries.forEach(function(entry) {\n // recursively read more directories\n if (entry.isDirectory) {\n readEntries(entry);\n } else {\n // read as file\n fileCounter++;\n\n entry.file(function(file) {\n var correctedFile = correctMissingFileType(file);\n if (entry.fullPath)\n correctedFile._relativePath = entry.fullPath;\n files.push(correctedFile);\n fileCounter--;\n resolveIfDone();\n });\n }\n });\n\n // try to get next batch of files\n readBatch();\n }, reject);\n };\n\n // read first batch of files\n readBatch();\n };\n\n // go!\n readEntries(entry);\n });\n };\n\n var correctMissingFileType = function correctMissingFileType(file) {\n if (file.type.length) return file;\n var date = file.lastModifiedDate;\n var name = file.name;\n var type = guesstimateMimeType(getExtensionFromFilename(file.name));\n if (!type.length) return file;\n file = file.slice(0, file.size, type);\n file.name = name;\n file.lastModifiedDate = date;\n return file;\n };\n\n var isDirectoryEntry = function isDirectoryEntry(item) {\n return isEntry(item) && (getAsEntry(item) || {}).isDirectory;\n };\n\n var isEntry = function isEntry(item) {\n return 'webkitGetAsEntry' in item;\n };\n\n var getAsEntry = function getAsEntry(item) {\n return item.webkitGetAsEntry();\n };\n\n /**\n * Extracts links from a DataTransfer object\n */\n var getLinks = function getLinks(dataTransfer) {\n var links = [];\n try {\n // look in meta data property\n links = getLinksFromTransferMetaData(dataTransfer);\n if (links.length) {\n return links;\n }\n links = getLinksFromTransferURLData(dataTransfer);\n } catch (e) {\n // nope nope nope (probably IE trouble)\n }\n return links;\n };\n\n var getLinksFromTransferURLData = function getLinksFromTransferURLData(dataTransfer) {\n var data = dataTransfer.getData('url');\n if (typeof data === 'string' && data.length) {\n return [data];\n }\n return [];\n };\n\n var getLinksFromTransferMetaData = function getLinksFromTransferMetaData(dataTransfer) {\n var data = dataTransfer.getData('text/html');\n if (typeof data === 'string' && data.length) {\n var matches = data.match(/src\\s*=\\s*\"(.+?)\"/);\n if (matches) {\n return [matches[1]];\n }\n }\n return [];\n };\n\n var dragNDropObservers = [];\n\n var eventPosition = function eventPosition(e) {\n return {\n pageLeft: e.pageX,\n pageTop: e.pageY,\n scopeLeft: e.offsetX || e.layerX,\n scopeTop: e.offsetY || e.layerY,\n };\n };\n\n var createDragNDropClient = function createDragNDropClient(\n element,\n scopeToObserve,\n filterElement\n ) {\n var observer = getDragNDropObserver(scopeToObserve);\n\n var client = {\n element: element,\n filterElement: filterElement,\n state: null,\n ondrop: function ondrop() {},\n onenter: function onenter() {},\n ondrag: function ondrag() {},\n onexit: function onexit() {},\n onload: function onload() {},\n allowdrop: function allowdrop() {},\n };\n\n client.destroy = observer.addListener(client);\n\n return client;\n };\n\n var getDragNDropObserver = function getDragNDropObserver(element) {\n // see if already exists, if so, return\n var observer = dragNDropObservers.find(function(item) {\n return item.element === element;\n });\n if (observer) {\n return observer;\n }\n\n // create new observer, does not yet exist for this element\n var newObserver = createDragNDropObserver(element);\n dragNDropObservers.push(newObserver);\n return newObserver;\n };\n\n var createDragNDropObserver = function createDragNDropObserver(element) {\n var clients = [];\n\n var routes = {\n dragenter: dragenter,\n dragover: dragover,\n dragleave: dragleave,\n drop: drop,\n };\n\n var handlers = {};\n\n forin(routes, function(event, createHandler) {\n handlers[event] = createHandler(element, clients);\n element.addEventListener(event, handlers[event], false);\n });\n\n var observer = {\n element: element,\n addListener: function addListener(client) {\n // add as client\n clients.push(client);\n\n // return removeListener function\n return function() {\n // remove client\n clients.splice(clients.indexOf(client), 1);\n\n // if no more clients, clean up observer\n if (clients.length === 0) {\n dragNDropObservers.splice(dragNDropObservers.indexOf(observer), 1);\n\n forin(routes, function(event) {\n element.removeEventListener(event, handlers[event], false);\n });\n }\n };\n },\n };\n\n return observer;\n };\n\n var elementFromPoint = function elementFromPoint(root, point) {\n if (!('elementFromPoint' in root)) {\n root = document;\n }\n return root.elementFromPoint(point.x, point.y);\n };\n\n var isEventTarget = function isEventTarget(e, target) {\n // get root\n var root = getRootNode(target);\n\n // get element at position\n // if root is not actual shadow DOM and does not have elementFromPoint method, use the one on document\n var elementAtPosition = elementFromPoint(root, {\n x: e.pageX - window.pageXOffset,\n y: e.pageY - window.pageYOffset,\n });\n\n // test if target is the element or if one of its children is\n return elementAtPosition === target || target.contains(elementAtPosition);\n };\n\n var initialTarget = null;\n\n var setDropEffect = function setDropEffect(dataTransfer, effect) {\n // is in try catch as IE11 will throw error if not\n try {\n dataTransfer.dropEffect = effect;\n } catch (e) {}\n };\n\n var dragenter = function dragenter(root, clients) {\n return function(e) {\n e.preventDefault();\n\n initialTarget = e.target;\n\n clients.forEach(function(client) {\n var element = client.element,\n onenter = client.onenter;\n\n if (isEventTarget(e, element)) {\n client.state = 'enter';\n\n // fire enter event\n onenter(eventPosition(e));\n }\n });\n };\n };\n\n var dragover = function dragover(root, clients) {\n return function(e) {\n e.preventDefault();\n\n var dataTransfer = e.dataTransfer;\n\n requestDataTransferItems(dataTransfer).then(function(items) {\n var overDropTarget = false;\n\n clients.some(function(client) {\n var filterElement = client.filterElement,\n element = client.element,\n onenter = client.onenter,\n onexit = client.onexit,\n ondrag = client.ondrag,\n allowdrop = client.allowdrop;\n\n // by default we can drop\n setDropEffect(dataTransfer, 'copy');\n\n // allow transfer of these items\n var allowsTransfer = allowdrop(items);\n\n // only used when can be dropped on page\n if (!allowsTransfer) {\n setDropEffect(dataTransfer, 'none');\n return;\n }\n\n // targetting this client\n if (isEventTarget(e, element)) {\n overDropTarget = true;\n\n // had no previous state, means we are entering this client\n if (client.state === null) {\n client.state = 'enter';\n onenter(eventPosition(e));\n return;\n }\n\n // now over element (no matter if it allows the drop or not)\n client.state = 'over';\n\n // needs to allow transfer\n if (filterElement && !allowsTransfer) {\n setDropEffect(dataTransfer, 'none');\n return;\n }\n\n // dragging\n ondrag(eventPosition(e));\n } else {\n // should be over an element to drop\n if (filterElement && !overDropTarget) {\n setDropEffect(dataTransfer, 'none');\n }\n\n // might have just left this client?\n if (client.state) {\n client.state = null;\n onexit(eventPosition(e));\n }\n }\n });\n });\n };\n };\n\n var drop = function drop(root, clients) {\n return function(e) {\n e.preventDefault();\n\n var dataTransfer = e.dataTransfer;\n\n requestDataTransferItems(dataTransfer).then(function(items) {\n clients.forEach(function(client) {\n var filterElement = client.filterElement,\n element = client.element,\n ondrop = client.ondrop,\n onexit = client.onexit,\n allowdrop = client.allowdrop;\n\n client.state = null;\n\n // if we're filtering on element we need to be over the element to drop\n if (filterElement && !isEventTarget(e, element)) return;\n\n // no transfer for this client\n if (!allowdrop(items)) return onexit(eventPosition(e));\n\n // we can drop these items on this client\n ondrop(eventPosition(e), items);\n });\n });\n };\n };\n\n var dragleave = function dragleave(root, clients) {\n return function(e) {\n if (initialTarget !== e.target) {\n return;\n }\n\n clients.forEach(function(client) {\n var onexit = client.onexit;\n\n client.state = null;\n\n onexit(eventPosition(e));\n });\n };\n };\n\n var createHopper = function createHopper(scope, validateItems, options) {\n // is now hopper scope\n scope.classList.add('filepond--hopper');\n\n // shortcuts\n var catchesDropsOnPage = options.catchesDropsOnPage,\n requiresDropOnElement = options.requiresDropOnElement,\n _options$filterItems = options.filterItems,\n filterItems =\n _options$filterItems === void 0\n ? function(items) {\n return items;\n }\n : _options$filterItems;\n\n // create a dnd client\n var client = createDragNDropClient(\n scope,\n catchesDropsOnPage ? document.documentElement : scope,\n requiresDropOnElement\n );\n\n // current client state\n var lastState = '';\n var currentState = '';\n\n // determines if a file may be dropped\n client.allowdrop = function(items) {\n // TODO: if we can, throw error to indicate the items cannot by dropped\n\n return validateItems(filterItems(items));\n };\n\n client.ondrop = function(position, items) {\n var filteredItems = filterItems(items);\n\n if (!validateItems(filteredItems)) {\n api.ondragend(position);\n return;\n }\n\n currentState = 'drag-drop';\n\n api.onload(filteredItems, position);\n };\n\n client.ondrag = function(position) {\n api.ondrag(position);\n };\n\n client.onenter = function(position) {\n currentState = 'drag-over';\n\n api.ondragstart(position);\n };\n\n client.onexit = function(position) {\n currentState = 'drag-exit';\n\n api.ondragend(position);\n };\n\n var api = {\n updateHopperState: function updateHopperState() {\n if (lastState !== currentState) {\n scope.dataset.hopperState = currentState;\n lastState = currentState;\n }\n },\n onload: function onload() {},\n ondragstart: function ondragstart() {},\n ondrag: function ondrag() {},\n ondragend: function ondragend() {},\n destroy: function destroy() {\n // destroy client\n client.destroy();\n },\n };\n\n return api;\n };\n\n var listening = false;\n var listeners$1 = [];\n\n var handlePaste = function handlePaste(e) {\n // if is pasting in input or textarea and the target is outside of a filepond scope, ignore\n var activeEl = document.activeElement;\n if (activeEl && /textarea|input/i.test(activeEl.nodeName)) {\n // test textarea or input is contained in filepond root\n var inScope = false;\n var element = activeEl;\n while (element !== document.body) {\n if (element.classList.contains('filepond--root')) {\n inScope = true;\n break;\n }\n element = element.parentNode;\n }\n\n if (!inScope) return;\n }\n\n requestDataTransferItems(e.clipboardData).then(function(files) {\n // no files received\n if (!files.length) {\n return;\n }\n\n // notify listeners of received files\n listeners$1.forEach(function(listener) {\n return listener(files);\n });\n });\n };\n\n var listen = function listen(cb) {\n // can't add twice\n if (listeners$1.includes(cb)) {\n return;\n }\n\n // add initial listener\n listeners$1.push(cb);\n\n // setup paste listener for entire page\n if (listening) {\n return;\n }\n\n listening = true;\n document.addEventListener('paste', handlePaste);\n };\n\n var unlisten = function unlisten(listener) {\n arrayRemove(listeners$1, listeners$1.indexOf(listener));\n\n // clean up\n if (listeners$1.length === 0) {\n document.removeEventListener('paste', handlePaste);\n listening = false;\n }\n };\n\n var createPaster = function createPaster() {\n var cb = function cb(files) {\n api.onload(files);\n };\n\n var api = {\n destroy: function destroy() {\n unlisten(cb);\n },\n onload: function onload() {},\n };\n\n listen(cb);\n\n return api;\n };\n\n /**\n * Creates the file view\n */\n var create$d = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n root.element.id = 'filepond--assistant-' + props.id;\n attr(root.element, 'role', 'status');\n attr(root.element, 'aria-live', 'polite');\n attr(root.element, 'aria-relevant', 'additions');\n };\n\n var addFilesNotificationTimeout = null;\n var notificationClearTimeout = null;\n\n var filenames = [];\n\n var assist = function assist(root, message) {\n root.element.textContent = message;\n };\n\n var clear$1 = function clear(root) {\n root.element.textContent = '';\n };\n\n var listModified = function listModified(root, filename, label) {\n var total = root.query('GET_TOTAL_ITEMS');\n assist(\n root,\n label +\n ' ' +\n filename +\n ', ' +\n total +\n ' ' +\n (total === 1\n ? root.query('GET_LABEL_FILE_COUNT_SINGULAR')\n : root.query('GET_LABEL_FILE_COUNT_PLURAL'))\n );\n\n // clear group after set amount of time so the status is not read twice\n clearTimeout(notificationClearTimeout);\n notificationClearTimeout = setTimeout(function() {\n clear$1(root);\n }, 1500);\n };\n\n var isUsingFilePond = function isUsingFilePond(root) {\n return root.element.parentNode.contains(document.activeElement);\n };\n\n var itemAdded = function itemAdded(_ref2) {\n var root = _ref2.root,\n action = _ref2.action;\n if (!isUsingFilePond(root)) {\n return;\n }\n\n root.element.textContent = '';\n var item = root.query('GET_ITEM', action.id);\n filenames.push(item.filename);\n\n clearTimeout(addFilesNotificationTimeout);\n addFilesNotificationTimeout = setTimeout(function() {\n listModified(root, filenames.join(', '), root.query('GET_LABEL_FILE_ADDED'));\n\n filenames.length = 0;\n }, 750);\n };\n\n var itemRemoved = function itemRemoved(_ref3) {\n var root = _ref3.root,\n action = _ref3.action;\n if (!isUsingFilePond(root)) {\n return;\n }\n\n var item = action.item;\n listModified(root, item.filename, root.query('GET_LABEL_FILE_REMOVED'));\n };\n\n var itemProcessed = function itemProcessed(_ref4) {\n var root = _ref4.root,\n action = _ref4.action;\n // will also notify the user when FilePond is not being used, as the user might be occupied with other activities while uploading a file\n\n var item = root.query('GET_ITEM', action.id);\n var filename = item.filename;\n var label = root.query('GET_LABEL_FILE_PROCESSING_COMPLETE');\n\n assist(root, filename + ' ' + label);\n };\n\n var itemProcessedUndo = function itemProcessedUndo(_ref5) {\n var root = _ref5.root,\n action = _ref5.action;\n var item = root.query('GET_ITEM', action.id);\n var filename = item.filename;\n var label = root.query('GET_LABEL_FILE_PROCESSING_ABORTED');\n\n assist(root, filename + ' ' + label);\n };\n\n var itemError = function itemError(_ref6) {\n var root = _ref6.root,\n action = _ref6.action;\n var item = root.query('GET_ITEM', action.id);\n var filename = item.filename;\n\n // will also notify the user when FilePond is not being used, as the user might be occupied with other activities while uploading a file\n\n assist(root, action.status.main + ' ' + filename + ' ' + action.status.sub);\n };\n\n var assistant = createView({\n create: create$d,\n ignoreRect: true,\n ignoreRectUpdate: true,\n write: createRoute({\n DID_LOAD_ITEM: itemAdded,\n DID_REMOVE_ITEM: itemRemoved,\n DID_COMPLETE_ITEM_PROCESSING: itemProcessed,\n\n DID_ABORT_ITEM_PROCESSING: itemProcessedUndo,\n DID_REVERT_ITEM_PROCESSING: itemProcessedUndo,\n\n DID_THROW_ITEM_REMOVE_ERROR: itemError,\n DID_THROW_ITEM_LOAD_ERROR: itemError,\n DID_THROW_ITEM_INVALID: itemError,\n DID_THROW_ITEM_PROCESSING_ERROR: itemError,\n }),\n\n tag: 'span',\n name: 'assistant',\n });\n\n var toCamels = function toCamels(string) {\n var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '-';\n return string.replace(new RegExp(separator + '.', 'g'), function(sub) {\n return sub.charAt(1).toUpperCase();\n });\n };\n\n var debounce = function debounce(func) {\n var interval = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 16;\n var immidiateOnly =\n arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var last = Date.now();\n var timeout = null;\n\n return function() {\n for (\n var _len = arguments.length, args = new Array(_len), _key = 0;\n _key < _len;\n _key++\n ) {\n args[_key] = arguments[_key];\n }\n clearTimeout(timeout);\n\n var dist = Date.now() - last;\n\n var fn = function fn() {\n last = Date.now();\n func.apply(void 0, args);\n };\n\n if (dist < interval) {\n // we need to delay by the difference between interval and dist\n // for example: if distance is 10 ms and interval is 16 ms,\n // we need to wait an additional 6ms before calling the function)\n if (!immidiateOnly) {\n timeout = setTimeout(fn, interval - dist);\n }\n } else {\n // go!\n fn();\n }\n };\n };\n\n var MAX_FILES_LIMIT = 1000000;\n\n var prevent = function prevent(e) {\n return e.preventDefault();\n };\n\n var create$e = function create(_ref) {\n var root = _ref.root,\n props = _ref.props;\n // Add id\n var id = root.query('GET_ID');\n if (id) {\n root.element.id = id;\n }\n\n // Add className\n var className = root.query('GET_CLASS_NAME');\n if (className) {\n className\n .split(' ')\n .filter(function(name) {\n return name.length;\n })\n .forEach(function(name) {\n root.element.classList.add(name);\n });\n }\n\n // Field label\n root.ref.label = root.appendChildView(\n root.createChildView(\n dropLabel,\n Object.assign({}, props, {\n translateY: null,\n caption: root.query('GET_LABEL_IDLE'),\n })\n )\n );\n\n // List of items\n root.ref.list = root.appendChildView(\n root.createChildView(listScroller, { translateY: null })\n );\n\n // Background panel\n root.ref.panel = root.appendChildView(root.createChildView(panel, { name: 'panel-root' }));\n\n // Assistant notifies assistive tech when content changes\n root.ref.assistant = root.appendChildView(\n root.createChildView(assistant, Object.assign({}, props))\n );\n\n // Data\n root.ref.data = root.appendChildView(root.createChildView(data, Object.assign({}, props)));\n\n // Measure (tests if fixed height was set)\n // DOCTYPE needs to be set for this to work\n root.ref.measure = createElement$1('div');\n root.ref.measure.style.height = '100%';\n root.element.appendChild(root.ref.measure);\n\n // information on the root height or fixed height status\n root.ref.bounds = null;\n\n // apply initial style properties\n root.query('GET_STYLES')\n .filter(function(style) {\n return !isEmpty(style.value);\n })\n .map(function(_ref2) {\n var name = _ref2.name,\n value = _ref2.value;\n root.element.dataset[name] = value;\n });\n\n // determine if width changed\n root.ref.widthPrevious = null;\n root.ref.widthUpdated = debounce(function() {\n root.ref.updateHistory = [];\n root.dispatch('DID_RESIZE_ROOT');\n }, 250);\n\n // history of updates\n root.ref.previousAspectRatio = null;\n root.ref.updateHistory = [];\n\n // prevent scrolling and zooming on iOS (only if supports pointer events, for then we can enable reorder)\n var canHover = window.matchMedia('(pointer: fine) and (hover: hover)').matches;\n var hasPointerEvents = 'PointerEvent' in window;\n if (root.query('GET_ALLOW_REORDER') && hasPointerEvents && !canHover) {\n root.element.addEventListener('touchmove', prevent, { passive: false });\n root.element.addEventListener('gesturestart', prevent);\n }\n\n // add credits\n var credits = root.query('GET_CREDITS');\n var hasCredits = credits.length === 2;\n if (hasCredits) {\n var frag = document.createElement('a');\n frag.className = 'filepond--credits';\n frag.setAttribute('aria-hidden', 'true');\n frag.href = credits[0];\n frag.tabindex = -1;\n frag.target = '_blank';\n frag.rel = 'noopener noreferrer';\n frag.textContent = credits[1];\n root.element.appendChild(frag);\n root.ref.credits = frag;\n }\n };\n\n var write$9 = function write(_ref3) {\n var root = _ref3.root,\n props = _ref3.props,\n actions = _ref3.actions;\n // route actions\n route$5({ root: root, props: props, actions: actions });\n\n // apply style properties\n actions\n .filter(function(action) {\n return /^DID_SET_STYLE_/.test(action.type);\n })\n .filter(function(action) {\n return !isEmpty(action.data.value);\n })\n .map(function(_ref4) {\n var type = _ref4.type,\n data = _ref4.data;\n var name = toCamels(type.substr(8).toLowerCase(), '_');\n root.element.dataset[name] = data.value;\n root.invalidateLayout();\n });\n\n if (root.rect.element.hidden) return;\n\n if (root.rect.element.width !== root.ref.widthPrevious) {\n root.ref.widthPrevious = root.rect.element.width;\n root.ref.widthUpdated();\n }\n\n // get box bounds, we do this only once\n var bounds = root.ref.bounds;\n if (!bounds) {\n bounds = root.ref.bounds = calculateRootBoundingBoxHeight(root);\n\n // destroy measure element\n root.element.removeChild(root.ref.measure);\n root.ref.measure = null;\n }\n\n // get quick references to various high level parts of the upload tool\n var _root$ref = root.ref,\n hopper = _root$ref.hopper,\n label = _root$ref.label,\n list = _root$ref.list,\n panel = _root$ref.panel;\n\n // sets correct state to hopper scope\n if (hopper) {\n hopper.updateHopperState();\n }\n\n // bool to indicate if we're full or not\n var aspectRatio = root.query('GET_PANEL_ASPECT_RATIO');\n var isMultiItem = root.query('GET_ALLOW_MULTIPLE');\n var totalItems = root.query('GET_TOTAL_ITEMS');\n var maxItems = isMultiItem ? root.query('GET_MAX_FILES') || MAX_FILES_LIMIT : 1;\n var atMaxCapacity = totalItems === maxItems;\n\n // action used to add item\n var addAction = actions.find(function(action) {\n return action.type === 'DID_ADD_ITEM';\n });\n\n // if reached max capacity and we've just reached it\n if (atMaxCapacity && addAction) {\n // get interaction type\n var interactionMethod = addAction.data.interactionMethod;\n\n // hide label\n label.opacity = 0;\n\n if (isMultiItem) {\n label.translateY = -40;\n } else {\n if (interactionMethod === InteractionMethod.API) {\n label.translateX = 40;\n } else if (interactionMethod === InteractionMethod.BROWSE) {\n label.translateY = 40;\n } else {\n label.translateY = 30;\n }\n }\n } else if (!atMaxCapacity) {\n label.opacity = 1;\n label.translateX = 0;\n label.translateY = 0;\n }\n\n var listItemMargin = calculateListItemMargin(root);\n\n var listHeight = calculateListHeight(root);\n\n var labelHeight = label.rect.element.height;\n var currentLabelHeight = !isMultiItem || atMaxCapacity ? 0 : labelHeight;\n\n var listMarginTop = atMaxCapacity ? list.rect.element.marginTop : 0;\n var listMarginBottom = totalItems === 0 ? 0 : list.rect.element.marginBottom;\n\n var visualHeight =\n currentLabelHeight + listMarginTop + listHeight.visual + listMarginBottom;\n var boundsHeight =\n currentLabelHeight + listMarginTop + listHeight.bounds + listMarginBottom;\n\n // link list to label bottom position\n list.translateY =\n Math.max(0, currentLabelHeight - list.rect.element.marginTop) - listItemMargin.top;\n\n if (aspectRatio) {\n // fixed aspect ratio\n\n // calculate height based on width\n var width = root.rect.element.width;\n var height = width * aspectRatio;\n\n // clear history if aspect ratio has changed\n if (aspectRatio !== root.ref.previousAspectRatio) {\n root.ref.previousAspectRatio = aspectRatio;\n root.ref.updateHistory = [];\n }\n\n // remember this width\n var history = root.ref.updateHistory;\n history.push(width);\n\n var MAX_BOUNCES = 2;\n if (history.length > MAX_BOUNCES * 2) {\n var l = history.length;\n var bottom = l - 10;\n var bounces = 0;\n for (var i = l; i >= bottom; i--) {\n if (history[i] === history[i - 2]) {\n bounces++;\n }\n\n if (bounces >= MAX_BOUNCES) {\n // dont adjust height\n return;\n }\n }\n }\n\n // fix height of panel so it adheres to aspect ratio\n panel.scalable = false;\n panel.height = height;\n\n // available height for list\n var listAvailableHeight =\n // the height of the panel minus the label height\n height -\n currentLabelHeight -\n // the room we leave open between the end of the list and the panel bottom\n (listMarginBottom - listItemMargin.bottom) -\n // if we're full we need to leave some room between the top of the panel and the list\n (atMaxCapacity ? listMarginTop : 0);\n\n if (listHeight.visual > listAvailableHeight) {\n list.overflow = listAvailableHeight;\n } else {\n list.overflow = null;\n }\n\n // set container bounds (so pushes siblings downwards)\n root.height = height;\n } else if (bounds.fixedHeight) {\n // fixed height\n\n // fix height of panel\n panel.scalable = false;\n\n // available height for list\n var _listAvailableHeight =\n // the height of the panel minus the label height\n bounds.fixedHeight -\n currentLabelHeight -\n // the room we leave open between the end of the list and the panel bottom\n (listMarginBottom - listItemMargin.bottom) -\n // if we're full we need to leave some room between the top of the panel and the list\n (atMaxCapacity ? listMarginTop : 0);\n\n // set list height\n if (listHeight.visual > _listAvailableHeight) {\n list.overflow = _listAvailableHeight;\n } else {\n list.overflow = null;\n }\n\n // no need to set container bounds as these are handles by CSS fixed height\n } else if (bounds.cappedHeight) {\n // max-height\n\n // not a fixed height panel\n var isCappedHeight = visualHeight >= bounds.cappedHeight;\n var panelHeight = Math.min(bounds.cappedHeight, visualHeight);\n panel.scalable = true;\n panel.height = isCappedHeight\n ? panelHeight\n : panelHeight - listItemMargin.top - listItemMargin.bottom;\n\n // available height for list\n var _listAvailableHeight2 =\n // the height of the panel minus the label height\n panelHeight -\n currentLabelHeight -\n // the room we leave open between the end of the list and the panel bottom\n (listMarginBottom - listItemMargin.bottom) -\n // if we're full we need to leave some room between the top of the panel and the list\n (atMaxCapacity ? listMarginTop : 0);\n\n // set list height (if is overflowing)\n if (visualHeight > bounds.cappedHeight && listHeight.visual > _listAvailableHeight2) {\n list.overflow = _listAvailableHeight2;\n } else {\n list.overflow = null;\n }\n\n // set container bounds (so pushes siblings downwards)\n root.height = Math.min(\n bounds.cappedHeight,\n boundsHeight - listItemMargin.top - listItemMargin.bottom\n );\n } else {\n // flexible height\n\n // not a fixed height panel\n var itemMargin = totalItems > 0 ? listItemMargin.top + listItemMargin.bottom : 0;\n panel.scalable = true;\n panel.height = Math.max(labelHeight, visualHeight - itemMargin);\n\n // set container bounds (so pushes siblings downwards)\n root.height = Math.max(labelHeight, boundsHeight - itemMargin);\n }\n\n // move credits to bottom\n if (root.ref.credits && panel.heightCurrent)\n root.ref.credits.style.transform = 'translateY(' + panel.heightCurrent + 'px)';\n };\n\n var calculateListItemMargin = function calculateListItemMargin(root) {\n var item = root.ref.list.childViews[0].childViews[0];\n return item\n ? {\n top: item.rect.element.marginTop,\n bottom: item.rect.element.marginBottom,\n }\n : {\n top: 0,\n bottom: 0,\n };\n };\n\n var calculateListHeight = function calculateListHeight(root) {\n var visual = 0;\n var bounds = 0;\n\n // get file list reference\n var scrollList = root.ref.list;\n var itemList = scrollList.childViews[0];\n var visibleChildren = itemList.childViews.filter(function(child) {\n return child.rect.element.height;\n });\n var children = root\n .query('GET_ACTIVE_ITEMS')\n .map(function(item) {\n return visibleChildren.find(function(child) {\n return child.id === item.id;\n });\n })\n .filter(function(item) {\n return item;\n });\n\n // no children, done!\n if (children.length === 0) return { visual: visual, bounds: bounds };\n\n var horizontalSpace = itemList.rect.element.width;\n var dragIndex = getItemIndexByPosition(itemList, children, scrollList.dragCoordinates);\n\n var childRect = children[0].rect.element;\n\n var itemVerticalMargin = childRect.marginTop + childRect.marginBottom;\n var itemHorizontalMargin = childRect.marginLeft + childRect.marginRight;\n\n var itemWidth = childRect.width + itemHorizontalMargin;\n var itemHeight = childRect.height + itemVerticalMargin;\n\n var newItem = typeof dragIndex !== 'undefined' && dragIndex >= 0 ? 1 : 0;\n var removedItem = children.find(function(child) {\n return child.markedForRemoval && child.opacity < 0.45;\n })\n ? -1\n : 0;\n var verticalItemCount = children.length + newItem + removedItem;\n var itemsPerRow = getItemsPerRow(horizontalSpace, itemWidth);\n\n // stack\n if (itemsPerRow === 1) {\n children.forEach(function(item) {\n var height = item.rect.element.height + itemVerticalMargin;\n bounds += height;\n visual += height * item.opacity;\n });\n }\n // grid\n else {\n bounds = Math.ceil(verticalItemCount / itemsPerRow) * itemHeight;\n visual = bounds;\n }\n\n return { visual: visual, bounds: bounds };\n };\n\n var calculateRootBoundingBoxHeight = function calculateRootBoundingBoxHeight(root) {\n var height = root.ref.measureHeight || null;\n var cappedHeight = parseInt(root.style.maxHeight, 10) || null;\n var fixedHeight = height === 0 ? null : height;\n\n return {\n cappedHeight: cappedHeight,\n fixedHeight: fixedHeight,\n };\n };\n\n var exceedsMaxFiles = function exceedsMaxFiles(root, items) {\n var allowReplace = root.query('GET_ALLOW_REPLACE');\n var allowMultiple = root.query('GET_ALLOW_MULTIPLE');\n var totalItems = root.query('GET_TOTAL_ITEMS');\n var maxItems = root.query('GET_MAX_FILES');\n\n // total amount of items being dragged\n var totalBrowseItems = items.length;\n\n // if does not allow multiple items and dragging more than one item\n if (!allowMultiple && totalBrowseItems > 1) {\n return true;\n }\n\n // limit max items to one if not allowed to drop multiple items\n maxItems = allowMultiple ? maxItems : allowReplace ? maxItems : 1;\n\n // no more room?\n var hasMaxItems = isInt(maxItems);\n if (hasMaxItems && totalItems + totalBrowseItems > maxItems) {\n root.dispatch('DID_THROW_MAX_FILES', {\n source: items,\n error: createResponse('warning', 0, 'Max files'),\n });\n\n return true;\n }\n\n return false;\n };\n\n var getDragIndex = function getDragIndex(list, children, position) {\n var itemList = list.childViews[0];\n return getItemIndexByPosition(itemList, children, {\n left: position.scopeLeft - itemList.rect.element.left,\n top:\n position.scopeTop -\n (list.rect.outer.top + list.rect.element.marginTop + list.rect.element.scrollTop),\n });\n };\n\n /**\n * Enable or disable file drop functionality\n */\n var toggleDrop = function toggleDrop(root) {\n var isAllowed = root.query('GET_ALLOW_DROP');\n var isDisabled = root.query('GET_DISABLED');\n var enabled = isAllowed && !isDisabled;\n if (enabled && !root.ref.hopper) {\n var hopper = createHopper(\n root.element,\n function(items) {\n // allow quick validation of dropped items\n var beforeDropFile =\n root.query('GET_BEFORE_DROP_FILE') ||\n function() {\n return true;\n };\n\n // all items should be validated by all filters as valid\n var dropValidation = root.query('GET_DROP_VALIDATION');\n return dropValidation\n ? items.every(function(item) {\n return (\n applyFilters('ALLOW_HOPPER_ITEM', item, {\n query: root.query,\n }).every(function(result) {\n return result === true;\n }) && beforeDropFile(item)\n );\n })\n : true;\n },\n {\n filterItems: function filterItems(items) {\n var ignoredFiles = root.query('GET_IGNORED_FILES');\n return items.filter(function(item) {\n if (isFile(item)) {\n return !ignoredFiles.includes(item.name.toLowerCase());\n }\n return true;\n });\n },\n catchesDropsOnPage: root.query('GET_DROP_ON_PAGE'),\n requiresDropOnElement: root.query('GET_DROP_ON_ELEMENT'),\n }\n );\n\n hopper.onload = function(items, position) {\n // get item children elements and sort based on list sort\n var list = root.ref.list.childViews[0];\n var visibleChildren = list.childViews.filter(function(child) {\n return child.rect.element.height;\n });\n var children = root\n .query('GET_ACTIVE_ITEMS')\n .map(function(item) {\n return visibleChildren.find(function(child) {\n return child.id === item.id;\n });\n })\n .filter(function(item) {\n return item;\n });\n\n applyFilterChain('ADD_ITEMS', items, { dispatch: root.dispatch }).then(function(\n queue\n ) {\n // these files don't fit so stop here\n if (exceedsMaxFiles(root, queue)) return false;\n\n // go\n root.dispatch('ADD_ITEMS', {\n items: queue,\n index: getDragIndex(root.ref.list, children, position),\n interactionMethod: InteractionMethod.DROP,\n });\n });\n\n root.dispatch('DID_DROP', { position: position });\n\n root.dispatch('DID_END_DRAG', { position: position });\n };\n\n hopper.ondragstart = function(position) {\n root.dispatch('DID_START_DRAG', { position: position });\n };\n\n hopper.ondrag = debounce(function(position) {\n root.dispatch('DID_DRAG', { position: position });\n });\n\n hopper.ondragend = function(position) {\n root.dispatch('DID_END_DRAG', { position: position });\n };\n\n root.ref.hopper = hopper;\n\n root.ref.drip = root.appendChildView(root.createChildView(drip));\n } else if (!enabled && root.ref.hopper) {\n root.ref.hopper.destroy();\n root.ref.hopper = null;\n root.removeChildView(root.ref.drip);\n }\n };\n\n /**\n * Enable or disable browse functionality\n */\n var toggleBrowse = function toggleBrowse(root, props) {\n var isAllowed = root.query('GET_ALLOW_BROWSE');\n var isDisabled = root.query('GET_DISABLED');\n var enabled = isAllowed && !isDisabled;\n if (enabled && !root.ref.browser) {\n root.ref.browser = root.appendChildView(\n root.createChildView(\n browser,\n Object.assign({}, props, {\n onload: function onload(items) {\n applyFilterChain('ADD_ITEMS', items, {\n dispatch: root.dispatch,\n }).then(function(queue) {\n // these files don't fit so stop here\n if (exceedsMaxFiles(root, queue)) return false;\n\n // add items!\n root.dispatch('ADD_ITEMS', {\n items: queue,\n index: -1,\n interactionMethod: InteractionMethod.BROWSE,\n });\n });\n },\n })\n ),\n\n 0\n );\n } else if (!enabled && root.ref.browser) {\n root.removeChildView(root.ref.browser);\n root.ref.browser = null;\n }\n };\n\n /**\n * Enable or disable paste functionality\n */\n var togglePaste = function togglePaste(root) {\n var isAllowed = root.query('GET_ALLOW_PASTE');\n var isDisabled = root.query('GET_DISABLED');\n var enabled = isAllowed && !isDisabled;\n if (enabled && !root.ref.paster) {\n root.ref.paster = createPaster();\n root.ref.paster.onload = function(items) {\n applyFilterChain('ADD_ITEMS', items, { dispatch: root.dispatch }).then(function(\n queue\n ) {\n // these files don't fit so stop here\n if (exceedsMaxFiles(root, queue)) return false;\n\n // add items!\n root.dispatch('ADD_ITEMS', {\n items: queue,\n index: -1,\n interactionMethod: InteractionMethod.PASTE,\n });\n });\n };\n } else if (!enabled && root.ref.paster) {\n root.ref.paster.destroy();\n root.ref.paster = null;\n }\n };\n\n /**\n * Route actions\n */\n var route$5 = createRoute({\n DID_SET_ALLOW_BROWSE: function DID_SET_ALLOW_BROWSE(_ref5) {\n var root = _ref5.root,\n props = _ref5.props;\n toggleBrowse(root, props);\n },\n DID_SET_ALLOW_DROP: function DID_SET_ALLOW_DROP(_ref6) {\n var root = _ref6.root;\n toggleDrop(root);\n },\n DID_SET_ALLOW_PASTE: function DID_SET_ALLOW_PASTE(_ref7) {\n var root = _ref7.root;\n togglePaste(root);\n },\n DID_SET_DISABLED: function DID_SET_DISABLED(_ref8) {\n var root = _ref8.root,\n props = _ref8.props;\n toggleDrop(root);\n togglePaste(root);\n toggleBrowse(root, props);\n var isDisabled = root.query('GET_DISABLED');\n if (isDisabled) {\n root.element.dataset.disabled = 'disabled';\n } else {\n // delete root.element.dataset.disabled; <= this does not work on iOS 10\n root.element.removeAttribute('data-disabled');\n }\n },\n });\n\n var root = createView({\n name: 'root',\n read: function read(_ref9) {\n var root = _ref9.root;\n if (root.ref.measure) {\n root.ref.measureHeight = root.ref.measure.offsetHeight;\n }\n },\n create: create$e,\n write: write$9,\n destroy: function destroy(_ref10) {\n var root = _ref10.root;\n if (root.ref.paster) {\n root.ref.paster.destroy();\n }\n if (root.ref.hopper) {\n root.ref.hopper.destroy();\n }\n root.element.removeEventListener('touchmove', prevent);\n root.element.removeEventListener('gesturestart', prevent);\n },\n mixins: {\n styles: ['height'],\n },\n });\n\n // creates the app\n var createApp = function createApp() {\n var initialOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // let element\n var originalElement = null;\n\n // get default options\n var defaultOptions = getOptions();\n\n // create the data store, this will contain all our app info\n var store = createStore(\n // initial state (should be serializable)\n createInitialState(defaultOptions),\n\n // queries\n [queries, createOptionQueries(defaultOptions)],\n\n // action handlers\n [actions, createOptionActions(defaultOptions)]\n );\n\n // set initial options\n store.dispatch('SET_OPTIONS', { options: initialOptions });\n\n // kick thread if visibility changes\n var visibilityHandler = function visibilityHandler() {\n if (document.hidden) return;\n store.dispatch('KICK');\n };\n document.addEventListener('visibilitychange', visibilityHandler);\n\n // re-render on window resize start and finish\n var resizeDoneTimer = null;\n var isResizing = false;\n var isResizingHorizontally = false;\n var initialWindowWidth = null;\n var currentWindowWidth = null;\n var resizeHandler = function resizeHandler() {\n if (!isResizing) {\n isResizing = true;\n }\n clearTimeout(resizeDoneTimer);\n resizeDoneTimer = setTimeout(function() {\n isResizing = false;\n initialWindowWidth = null;\n currentWindowWidth = null;\n if (isResizingHorizontally) {\n isResizingHorizontally = false;\n store.dispatch('DID_STOP_RESIZE');\n }\n }, 500);\n };\n window.addEventListener('resize', resizeHandler);\n\n // render initial view\n var view = root(store, { id: getUniqueId() });\n\n //\n // PRIVATE API -------------------------------------------------------------------------------------\n //\n var isResting = false;\n var isHidden = false;\n\n var readWriteApi = {\n // necessary for update loop\n\n /**\n * Reads from dom (never call manually)\n * @private\n */\n _read: function _read() {\n // test if we're resizing horizontally\n // TODO: see if we can optimize this by measuring root rect\n if (isResizing) {\n currentWindowWidth = window.innerWidth;\n if (!initialWindowWidth) {\n initialWindowWidth = currentWindowWidth;\n }\n\n if (!isResizingHorizontally && currentWindowWidth !== initialWindowWidth) {\n store.dispatch('DID_START_RESIZE');\n isResizingHorizontally = true;\n }\n }\n\n if (isHidden && isResting) {\n // test if is no longer hidden\n isResting = view.element.offsetParent === null;\n }\n\n // if resting, no need to read as numbers will still all be correct\n if (isResting) return;\n\n // read view data\n view._read();\n\n // if is hidden we need to know so we exit rest mode when revealed\n isHidden = view.rect.element.hidden;\n },\n\n /**\n * Writes to dom (never call manually)\n * @private\n */\n _write: function _write(ts) {\n // get all actions from store\n var actions = store\n .processActionQueue()\n\n // filter out set actions (these will automatically trigger DID_SET)\n .filter(function(action) {\n return !/^SET_/.test(action.type);\n });\n\n // if was idling and no actions stop here\n if (isResting && !actions.length) return;\n\n // some actions might trigger events\n routeActionsToEvents(actions);\n\n // update the view\n isResting = view._write(ts, actions, isResizingHorizontally);\n\n // will clean up all archived items\n removeReleasedItems(store.query('GET_ITEMS'));\n\n // now idling\n if (isResting) {\n store.processDispatchQueue();\n }\n },\n };\n\n //\n // EXPOSE EVENTS -------------------------------------------------------------------------------------\n //\n var createEvent = function createEvent(name) {\n return function(data) {\n // create default event\n var event = {\n type: name,\n };\n\n // no data to add\n if (!data) {\n return event;\n }\n\n // copy relevant props\n if (data.hasOwnProperty('error')) {\n event.error = data.error ? Object.assign({}, data.error) : null;\n }\n\n if (data.status) {\n event.status = Object.assign({}, data.status);\n }\n\n if (data.file) {\n event.output = data.file;\n }\n\n // only source is available, else add item if possible\n if (data.source) {\n event.file = data.source;\n } else if (data.item || data.id) {\n var item = data.item ? data.item : store.query('GET_ITEM', data.id);\n event.file = item ? createItemAPI(item) : null;\n }\n\n // map all items in a possible items array\n if (data.items) {\n event.items = data.items.map(createItemAPI);\n }\n\n // if this is a progress event add the progress amount\n if (/progress/.test(name)) {\n event.progress = data.progress;\n }\n\n // copy relevant props\n if (data.hasOwnProperty('origin') && data.hasOwnProperty('target')) {\n event.origin = data.origin;\n event.target = data.target;\n }\n\n return event;\n };\n };\n\n var eventRoutes = {\n DID_DESTROY: createEvent('destroy'),\n\n DID_INIT: createEvent('init'),\n\n DID_THROW_MAX_FILES: createEvent('warning'),\n\n DID_INIT_ITEM: createEvent('initfile'),\n DID_START_ITEM_LOAD: createEvent('addfilestart'),\n DID_UPDATE_ITEM_LOAD_PROGRESS: createEvent('addfileprogress'),\n DID_LOAD_ITEM: createEvent('addfile'),\n\n DID_THROW_ITEM_INVALID: [createEvent('error'), createEvent('addfile')],\n\n DID_THROW_ITEM_LOAD_ERROR: [createEvent('error'), createEvent('addfile')],\n\n DID_THROW_ITEM_REMOVE_ERROR: [createEvent('error'), createEvent('removefile')],\n\n DID_PREPARE_OUTPUT: createEvent('preparefile'),\n\n DID_START_ITEM_PROCESSING: createEvent('processfilestart'),\n DID_UPDATE_ITEM_PROCESS_PROGRESS: createEvent('processfileprogress'),\n DID_ABORT_ITEM_PROCESSING: createEvent('processfileabort'),\n DID_COMPLETE_ITEM_PROCESSING: createEvent('processfile'),\n DID_COMPLETE_ITEM_PROCESSING_ALL: createEvent('processfiles'),\n DID_REVERT_ITEM_PROCESSING: createEvent('processfilerevert'),\n\n DID_THROW_ITEM_PROCESSING_ERROR: [createEvent('error'), createEvent('processfile')],\n\n DID_REMOVE_ITEM: createEvent('removefile'),\n\n DID_UPDATE_ITEMS: createEvent('updatefiles'),\n\n DID_ACTIVATE_ITEM: createEvent('activatefile'),\n\n DID_REORDER_ITEMS: createEvent('reorderfiles'),\n };\n\n var exposeEvent = function exposeEvent(event) {\n // create event object to be dispatched\n var detail = Object.assign({ pond: exports }, event);\n delete detail.type;\n view.element.dispatchEvent(\n new CustomEvent('FilePond:' + event.type, {\n // event info\n detail: detail,\n\n // event behaviour\n bubbles: true,\n cancelable: true,\n composed: true, // triggers listeners outside of shadow root\n })\n );\n\n // event object to params used for `on()` event handlers and callbacks `oninit()`\n var params = [];\n\n // if is possible error event, make it the first param\n if (event.hasOwnProperty('error')) {\n params.push(event.error);\n }\n\n // file is always section\n if (event.hasOwnProperty('file')) {\n params.push(event.file);\n }\n\n // append other props\n var filtered = ['type', 'error', 'file'];\n Object.keys(event)\n .filter(function(key) {\n return !filtered.includes(key);\n })\n .forEach(function(key) {\n return params.push(event[key]);\n });\n\n // on(type, () => { })\n exports.fire.apply(exports, [event.type].concat(params));\n\n // oninit = () => {}\n var handler = store.query('GET_ON' + event.type.toUpperCase());\n if (handler) {\n handler.apply(void 0, params);\n }\n };\n\n var routeActionsToEvents = function routeActionsToEvents(actions) {\n if (!actions.length) return;\n actions\n .filter(function(action) {\n return eventRoutes[action.type];\n })\n .forEach(function(action) {\n var routes = eventRoutes[action.type];\n (Array.isArray(routes) ? routes : [routes]).forEach(function(route) {\n // this isn't fantastic, but because of the stacking of settimeouts plugins can handle the did_load before the did_init\n if (action.type === 'DID_INIT_ITEM') {\n exposeEvent(route(action.data));\n } else {\n setTimeout(function() {\n exposeEvent(route(action.data));\n }, 0);\n }\n });\n });\n };\n\n //\n // PUBLIC API -------------------------------------------------------------------------------------\n //\n var setOptions = function setOptions(options) {\n return store.dispatch('SET_OPTIONS', { options: options });\n };\n\n var getFile = function getFile(query) {\n return store.query('GET_ACTIVE_ITEM', query);\n };\n\n var prepareFile = function prepareFile(query) {\n return new Promise(function(resolve, reject) {\n store.dispatch('REQUEST_ITEM_PREPARE', {\n query: query,\n success: function success(item) {\n resolve(item);\n },\n failure: function failure(error) {\n reject(error);\n },\n });\n });\n };\n\n var addFile = function addFile(source) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return new Promise(function(resolve, reject) {\n addFiles([{ source: source, options: options }], { index: options.index })\n .then(function(items) {\n return resolve(items && items[0]);\n })\n .catch(reject);\n });\n };\n\n var isFilePondFile = function isFilePondFile(obj) {\n return obj.file && obj.id;\n };\n\n var removeFile = function removeFile(query, options) {\n // if only passed options\n if (typeof query === 'object' && !isFilePondFile(query) && !options) {\n options = query;\n query = undefined;\n }\n\n // request item removal\n store.dispatch('REMOVE_ITEM', Object.assign({}, options, { query: query }));\n\n // see if item has been removed\n return store.query('GET_ACTIVE_ITEM', query) === null;\n };\n\n var addFiles = function addFiles() {\n for (\n var _len = arguments.length, args = new Array(_len), _key = 0;\n _key < _len;\n _key++\n ) {\n args[_key] = arguments[_key];\n }\n return new Promise(function(resolve, reject) {\n var sources = [];\n var options = {};\n\n // user passed a sources array\n if (isArray(args[0])) {\n sources.push.apply(sources, args[0]);\n Object.assign(options, args[1] || {});\n } else {\n // user passed sources as arguments, last one might be options object\n var lastArgument = args[args.length - 1];\n if (typeof lastArgument === 'object' && !(lastArgument instanceof Blob)) {\n Object.assign(options, args.pop());\n }\n\n // add rest to sources\n sources.push.apply(sources, args);\n }\n\n store.dispatch('ADD_ITEMS', {\n items: sources,\n index: options.index,\n interactionMethod: InteractionMethod.API,\n success: resolve,\n failure: reject,\n });\n });\n };\n\n var getFiles = function getFiles() {\n return store.query('GET_ACTIVE_ITEMS');\n };\n\n var processFile = function processFile(query) {\n return new Promise(function(resolve, reject) {\n store.dispatch('REQUEST_ITEM_PROCESSING', {\n query: query,\n success: function success(item) {\n resolve(item);\n },\n failure: function failure(error) {\n reject(error);\n },\n });\n });\n };\n\n var prepareFiles = function prepareFiles() {\n for (\n var _len2 = arguments.length, args = new Array(_len2), _key2 = 0;\n _key2 < _len2;\n _key2++\n ) {\n args[_key2] = arguments[_key2];\n }\n var queries = Array.isArray(args[0]) ? args[0] : args;\n var items = queries.length ? queries : getFiles();\n return Promise.all(items.map(prepareFile));\n };\n\n var processFiles = function processFiles() {\n for (\n var _len3 = arguments.length, args = new Array(_len3), _key3 = 0;\n _key3 < _len3;\n _key3++\n ) {\n args[_key3] = arguments[_key3];\n }\n var queries = Array.isArray(args[0]) ? args[0] : args;\n if (!queries.length) {\n var files = getFiles().filter(function(item) {\n return (\n !(item.status === ItemStatus.IDLE && item.origin === FileOrigin.LOCAL) &&\n item.status !== ItemStatus.PROCESSING &&\n item.status !== ItemStatus.PROCESSING_COMPLETE &&\n item.status !== ItemStatus.PROCESSING_REVERT_ERROR\n );\n });\n\n return Promise.all(files.map(processFile));\n }\n return Promise.all(queries.map(processFile));\n };\n\n var removeFiles = function removeFiles() {\n for (\n var _len4 = arguments.length, args = new Array(_len4), _key4 = 0;\n _key4 < _len4;\n _key4++\n ) {\n args[_key4] = arguments[_key4];\n }\n\n var queries = Array.isArray(args[0]) ? args[0] : args;\n\n var options;\n if (typeof queries[queries.length - 1] === 'object') {\n options = queries.pop();\n } else if (Array.isArray(args[0])) {\n options = args[1];\n }\n\n var files = getFiles();\n\n if (!queries.length)\n return Promise.all(\n files.map(function(file) {\n return removeFile(file, options);\n })\n );\n\n // when removing by index the indexes shift after each file removal so we need to convert indexes to ids\n var mappedQueries = queries\n .map(function(query) {\n return isNumber(query) ? (files[query] ? files[query].id : null) : query;\n })\n .filter(function(query) {\n return query;\n });\n\n return mappedQueries.map(function(q) {\n return removeFile(q, options);\n });\n };\n\n var exports = Object.assign(\n {},\n\n on(),\n {},\n\n readWriteApi,\n {},\n\n createOptionAPI(store, defaultOptions),\n {\n /**\n * Override options defined in options object\n * @param options\n */\n setOptions: setOptions,\n\n /**\n * Load the given file\n * @param source - the source of the file (either a File, base64 data uri or url)\n * @param options - object, { index: 0 }\n */\n addFile: addFile,\n\n /**\n * Load the given files\n * @param sources - the sources of the files to load\n * @param options - object, { index: 0 }\n */\n addFiles: addFiles,\n\n /**\n * Returns the file objects matching the given query\n * @param query { string, number, null }\n */\n getFile: getFile,\n\n /**\n * Upload file with given name\n * @param query { string, number, null }\n */\n processFile: processFile,\n\n /**\n * Request prepare output for file with given name\n * @param query { string, number, null }\n */\n prepareFile: prepareFile,\n\n /**\n * Removes a file by its name\n * @param query { string, number, null }\n */\n removeFile: removeFile,\n\n /**\n * Moves a file to a new location in the files list\n */\n moveFile: function moveFile(query, index) {\n return store.dispatch('MOVE_ITEM', { query: query, index: index });\n },\n\n /**\n * Returns all files (wrapped in public api)\n */\n getFiles: getFiles,\n\n /**\n * Starts uploading all files\n */\n processFiles: processFiles,\n\n /**\n * Clears all files from the files list\n */\n removeFiles: removeFiles,\n\n /**\n * Starts preparing output of all files\n */\n prepareFiles: prepareFiles,\n\n /**\n * Sort list of files\n */\n sort: function sort(compare) {\n return store.dispatch('SORT', { compare: compare });\n },\n\n /**\n * Browse the file system for a file\n */\n browse: function browse() {\n // needs to be trigger directly as user action needs to be traceable (is not traceable in requestAnimationFrame)\n var input = view.element.querySelector('input[type=file]');\n if (input) {\n input.click();\n }\n },\n\n /**\n * Destroys the app\n */\n destroy: function destroy() {\n // request destruction\n exports.fire('destroy', view.element);\n\n // stop active processes (file uploads, fetches, stuff like that)\n // loop over items and depending on states call abort for ongoing processes\n store.dispatch('ABORT_ALL');\n\n // destroy view\n view._destroy();\n\n // stop listening to resize\n window.removeEventListener('resize', resizeHandler);\n\n // stop listening to the visiblitychange event\n document.removeEventListener('visibilitychange', visibilityHandler);\n\n // dispatch destroy\n store.dispatch('DID_DESTROY');\n },\n\n /**\n * Inserts the plugin before the target element\n */\n insertBefore: function insertBefore$1(element) {\n return insertBefore(view.element, element);\n },\n\n /**\n * Inserts the plugin after the target element\n */\n insertAfter: function insertAfter$1(element) {\n return insertAfter(view.element, element);\n },\n\n /**\n * Appends the plugin to the target element\n */\n appendTo: function appendTo(element) {\n return element.appendChild(view.element);\n },\n\n /**\n * Replaces an element with the app\n */\n replaceElement: function replaceElement(element) {\n // insert the app before the element\n insertBefore(view.element, element);\n\n // remove the original element\n element.parentNode.removeChild(element);\n\n // remember original element\n originalElement = element;\n },\n\n /**\n * Restores the original element\n */\n restoreElement: function restoreElement() {\n if (!originalElement) {\n return; // no element to restore\n }\n\n // restore original element\n insertAfter(originalElement, view.element);\n\n // remove our element\n view.element.parentNode.removeChild(view.element);\n\n // remove reference\n originalElement = null;\n },\n\n /**\n * Returns true if the app root is attached to given element\n * @param element\n */\n isAttachedTo: function isAttachedTo(element) {\n return view.element === element || originalElement === element;\n },\n\n /**\n * Returns the root element\n */\n element: {\n get: function get() {\n return view.element;\n },\n },\n\n /**\n * Returns the current pond status\n */\n status: {\n get: function get() {\n return store.query('GET_STATUS');\n },\n },\n }\n );\n\n // Done!\n store.dispatch('DID_INIT');\n\n // create actual api object\n return createObject(exports);\n };\n\n var createAppObject = function createAppObject() {\n var customOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // default options\n var defaultOptions = {};\n forin(getOptions(), function(key, value) {\n defaultOptions[key] = value[0];\n });\n\n // set app options\n var app = createApp(\n Object.assign(\n {},\n\n defaultOptions,\n {},\n\n customOptions\n )\n );\n\n // return the plugin instance\n return app;\n };\n\n var lowerCaseFirstLetter = function lowerCaseFirstLetter(string) {\n return string.charAt(0).toLowerCase() + string.slice(1);\n };\n\n var attributeNameToPropertyName = function attributeNameToPropertyName(attributeName) {\n return toCamels(attributeName.replace(/^data-/, ''));\n };\n\n var mapObject = function mapObject(object, propertyMap) {\n // remove unwanted\n forin(propertyMap, function(selector, mapping) {\n forin(object, function(property, value) {\n // create regexp shortcut\n var selectorRegExp = new RegExp(selector);\n\n // tests if\n var matches = selectorRegExp.test(property);\n\n // no match, skip\n if (!matches) {\n return;\n }\n\n // if there's a mapping, the original property is always removed\n delete object[property];\n\n // should only remove, we done!\n if (mapping === false) {\n return;\n }\n\n // move value to new property\n if (isString(mapping)) {\n object[mapping] = value;\n return;\n }\n\n // move to group\n var group = mapping.group;\n if (isObject(mapping) && !object[group]) {\n object[group] = {};\n }\n\n object[group][lowerCaseFirstLetter(property.replace(selectorRegExp, ''))] = value;\n });\n\n // do submapping\n if (mapping.mapping) {\n mapObject(object[mapping.group], mapping.mapping);\n }\n });\n };\n\n var getAttributesAsObject = function getAttributesAsObject(node) {\n var attributeMapping =\n arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n // turn attributes into object\n var attributes = [];\n forin(node.attributes, function(index) {\n attributes.push(node.attributes[index]);\n });\n\n var output = attributes\n .filter(function(attribute) {\n return attribute.name;\n })\n .reduce(function(obj, attribute) {\n var value = attr(node, attribute.name);\n\n obj[attributeNameToPropertyName(attribute.name)] =\n value === attribute.name ? true : value;\n return obj;\n }, {});\n\n // do mapping of object properties\n mapObject(output, attributeMapping);\n\n return output;\n };\n\n var createAppAtElement = function createAppAtElement(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n // how attributes of the input element are mapped to the options for the plugin\n var attributeMapping = {\n // translate to other name\n '^class$': 'className',\n '^multiple$': 'allowMultiple',\n '^capture$': 'captureMethod',\n '^webkitdirectory$': 'allowDirectoriesOnly',\n\n // group under single property\n '^server': {\n group: 'server',\n mapping: {\n '^process': {\n group: 'process',\n },\n\n '^revert': {\n group: 'revert',\n },\n\n '^fetch': {\n group: 'fetch',\n },\n\n '^restore': {\n group: 'restore',\n },\n\n '^load': {\n group: 'load',\n },\n },\n },\n\n // don't include in object\n '^type$': false,\n '^files$': false,\n };\n\n // add additional option translators\n applyFilters('SET_ATTRIBUTE_TO_OPTION_MAP', attributeMapping);\n\n // create final options object by setting options object and then overriding options supplied on element\n var mergedOptions = Object.assign({}, options);\n\n var attributeOptions = getAttributesAsObject(\n element.nodeName === 'FIELDSET' ? element.querySelector('input[type=file]') : element,\n attributeMapping\n );\n\n // merge with options object\n Object.keys(attributeOptions).forEach(function(key) {\n if (isObject(attributeOptions[key])) {\n if (!isObject(mergedOptions[key])) {\n mergedOptions[key] = {};\n }\n Object.assign(mergedOptions[key], attributeOptions[key]);\n } else {\n mergedOptions[key] = attributeOptions[key];\n }\n });\n\n // if parent is a fieldset, get files from parent by selecting all input fields that are not file upload fields\n // these will then be automatically set to the initial files\n mergedOptions.files = (options.files || []).concat(\n Array.from(element.querySelectorAll('input:not([type=file])')).map(function(input) {\n return {\n source: input.value,\n options: {\n type: input.dataset.type,\n },\n };\n })\n );\n\n // build plugin\n var app = createAppObject(mergedOptions);\n\n // add already selected files\n if (element.files) {\n Array.from(element.files).forEach(function(file) {\n app.addFile(file);\n });\n }\n\n // replace the target element\n app.replaceElement(element);\n\n // expose\n return app;\n };\n\n // if an element is passed, we create the instance at that element, if not, we just create an up object\n var createApp$1 = function createApp() {\n return isNode(arguments.length <= 0 ? undefined : arguments[0])\n ? createAppAtElement.apply(void 0, arguments)\n : createAppObject.apply(void 0, arguments);\n };\n\n var PRIVATE_METHODS = ['fire', '_read', '_write'];\n\n var createAppAPI = function createAppAPI(app) {\n var api = {};\n\n copyObjectPropertiesToObject(app, api, PRIVATE_METHODS);\n\n return api;\n };\n\n /**\n * Replaces placeholders in given string with replacements\n * @param string - \"Foo {bar}\"\"\n * @param replacements - { \"bar\": 10 }\n */\n var replaceInString = function replaceInString(string, replacements) {\n return string.replace(/(?:{([a-zA-Z]+)})/g, function(match, group) {\n return replacements[group];\n });\n };\n\n var createWorker = function createWorker(fn) {\n var workerBlob = new Blob(['(', fn.toString(), ')()'], {\n type: 'application/javascript',\n });\n\n var workerURL = URL.createObjectURL(workerBlob);\n var worker = new Worker(workerURL);\n\n return {\n transfer: function transfer(message, cb) {},\n post: function post(message, cb, transferList) {\n var id = getUniqueId();\n\n worker.onmessage = function(e) {\n if (e.data.id === id) {\n cb(e.data.message);\n }\n };\n\n worker.postMessage(\n {\n id: id,\n message: message,\n },\n\n transferList\n );\n },\n terminate: function terminate() {\n worker.terminate();\n URL.revokeObjectURL(workerURL);\n },\n };\n };\n\n var loadImage = function loadImage(url) {\n return new Promise(function(resolve, reject) {\n var img = new Image();\n img.onload = function() {\n resolve(img);\n };\n img.onerror = function(e) {\n reject(e);\n };\n img.src = url;\n });\n };\n\n var renameFile = function renameFile(file, name) {\n var renamedFile = file.slice(0, file.size, file.type);\n renamedFile.lastModifiedDate = file.lastModifiedDate;\n renamedFile.name = name;\n return renamedFile;\n };\n\n var copyFile = function copyFile(file) {\n return renameFile(file, file.name);\n };\n\n // already registered plugins (can't register twice)\n var registeredPlugins = [];\n\n // pass utils to plugin\n var createAppPlugin = function createAppPlugin(plugin) {\n // already registered\n if (registeredPlugins.includes(plugin)) {\n return;\n }\n\n // remember this plugin\n registeredPlugins.push(plugin);\n\n // setup!\n var pluginOutline = plugin({\n addFilter: addFilter,\n utils: {\n Type: Type,\n forin: forin,\n isString: isString,\n isFile: isFile,\n toNaturalFileSize: toNaturalFileSize,\n replaceInString: replaceInString,\n getExtensionFromFilename: getExtensionFromFilename,\n getFilenameWithoutExtension: getFilenameWithoutExtension,\n guesstimateMimeType: guesstimateMimeType,\n getFileFromBlob: getFileFromBlob,\n getFilenameFromURL: getFilenameFromURL,\n createRoute: createRoute,\n createWorker: createWorker,\n createView: createView,\n createItemAPI: createItemAPI,\n loadImage: loadImage,\n copyFile: copyFile,\n renameFile: renameFile,\n createBlob: createBlob,\n applyFilterChain: applyFilterChain,\n text: text,\n getNumericAspectRatioFromString: getNumericAspectRatioFromString,\n },\n\n views: {\n fileActionButton: fileActionButton,\n },\n });\n\n // add plugin options to default options\n extendDefaultOptions(pluginOutline.options);\n };\n\n // feature detection used by supported() method\n var isOperaMini = function isOperaMini() {\n return Object.prototype.toString.call(window.operamini) === '[object OperaMini]';\n };\n var hasPromises = function hasPromises() {\n return 'Promise' in window;\n };\n var hasBlobSlice = function hasBlobSlice() {\n return 'slice' in Blob.prototype;\n };\n var hasCreateObjectURL = function hasCreateObjectURL() {\n return 'URL' in window && 'createObjectURL' in window.URL;\n };\n var hasVisibility = function hasVisibility() {\n return 'visibilityState' in document;\n };\n var hasTiming = function hasTiming() {\n return 'performance' in window;\n }; // iOS 8.x\n var hasCSSSupports = function hasCSSSupports() {\n return 'supports' in (window.CSS || {});\n }; // use to detect Safari 9+\n var isIE11 = function isIE11() {\n return /MSIE|Trident/.test(window.navigator.userAgent);\n };\n\n var supported = (function() {\n // Runs immediately and then remembers result for subsequent calls\n var isSupported =\n // Has to be a browser\n isBrowser() &&\n // Can't run on Opera Mini due to lack of everything\n !isOperaMini() &&\n // Require these APIs to feature detect a modern browser\n hasVisibility() &&\n hasPromises() &&\n hasBlobSlice() &&\n hasCreateObjectURL() &&\n hasTiming() &&\n // doesn't need CSSSupports but is a good way to detect Safari 9+ (we do want to support IE11 though)\n (hasCSSSupports() || isIE11());\n\n return function() {\n return isSupported;\n };\n })();\n\n /**\n * Plugin internal state (over all instances)\n */\n var state = {\n // active app instances, used to redraw the apps and to find the later\n apps: [],\n };\n\n // plugin name\n var name = 'filepond';\n\n /**\n * Public Plugin methods\n */\n var fn = function fn() {};\n exports.Status = {};\n exports.FileStatus = {};\n exports.FileOrigin = {};\n exports.OptionTypes = {};\n exports.create = fn;\n exports.destroy = fn;\n exports.parse = fn;\n exports.find = fn;\n exports.registerPlugin = fn;\n exports.getOptions = fn;\n exports.setOptions = fn;\n\n // if not supported, no API\n if (supported()) {\n // start painter and fire load event\n createPainter(\n function() {\n state.apps.forEach(function(app) {\n return app._read();\n });\n },\n function(ts) {\n state.apps.forEach(function(app) {\n return app._write(ts);\n });\n }\n );\n\n // fire loaded event so we know when FilePond is available\n var dispatch = function dispatch() {\n // let others know we have area ready\n document.dispatchEvent(\n new CustomEvent('FilePond:loaded', {\n detail: {\n supported: supported,\n create: exports.create,\n destroy: exports.destroy,\n parse: exports.parse,\n find: exports.find,\n registerPlugin: exports.registerPlugin,\n setOptions: exports.setOptions,\n },\n })\n );\n\n // clean up event\n document.removeEventListener('DOMContentLoaded', dispatch);\n };\n\n if (document.readyState !== 'loading') {\n // move to back of execution queue, FilePond should have been exported by then\n setTimeout(function() {\n return dispatch();\n }, 0);\n } else {\n document.addEventListener('DOMContentLoaded', dispatch);\n }\n\n // updates the OptionTypes object based on the current options\n var updateOptionTypes = function updateOptionTypes() {\n return forin(getOptions(), function(key, value) {\n exports.OptionTypes[key] = value[1];\n });\n };\n\n exports.Status = Object.assign({}, Status);\n exports.FileOrigin = Object.assign({}, FileOrigin);\n exports.FileStatus = Object.assign({}, ItemStatus);\n\n exports.OptionTypes = {};\n updateOptionTypes();\n\n // create method, creates apps and adds them to the app array\n exports.create = function create() {\n var app = createApp$1.apply(void 0, arguments);\n app.on('destroy', exports.destroy);\n state.apps.push(app);\n return createAppAPI(app);\n };\n\n // destroys apps and removes them from the app array\n exports.destroy = function destroy(hook) {\n // returns true if the app was destroyed successfully\n var indexToRemove = state.apps.findIndex(function(app) {\n return app.isAttachedTo(hook);\n });\n if (indexToRemove >= 0) {\n // remove from apps\n var app = state.apps.splice(indexToRemove, 1)[0];\n\n // restore original dom element\n app.restoreElement();\n\n return true;\n }\n\n return false;\n };\n\n // parses the given context for plugins (does not include the context element itself)\n exports.parse = function parse(context) {\n // get all possible hooks\n var matchedHooks = Array.from(context.querySelectorAll('.' + name));\n\n // filter out already active hooks\n var newHooks = matchedHooks.filter(function(newHook) {\n return !state.apps.find(function(app) {\n return app.isAttachedTo(newHook);\n });\n });\n\n // create new instance for each hook\n return newHooks.map(function(hook) {\n return exports.create(hook);\n });\n };\n\n // returns an app based on the given element hook\n exports.find = function find(hook) {\n var app = state.apps.find(function(app) {\n return app.isAttachedTo(hook);\n });\n if (!app) {\n return null;\n }\n return createAppAPI(app);\n };\n\n // adds a plugin extension\n exports.registerPlugin = function registerPlugin() {\n for (\n var _len = arguments.length, plugins = new Array(_len), _key = 0;\n _key < _len;\n _key++\n ) {\n plugins[_key] = arguments[_key];\n }\n\n // register plugins\n plugins.forEach(createAppPlugin);\n\n // update OptionTypes, each plugin might have extended the default options\n updateOptionTypes();\n };\n\n exports.getOptions = function getOptions$1() {\n var opts = {};\n forin(getOptions(), function(key, value) {\n opts[key] = value[0];\n });\n return opts;\n };\n\n exports.setOptions = function setOptions$1(opts) {\n if (isObject(opts)) {\n // update existing plugins\n state.apps.forEach(function(app) {\n app.setOptions(opts);\n });\n\n // override defaults\n setOptions(opts);\n }\n\n // return new options\n return exports.getOptions();\n };\n }\n\n exports.supported = supported;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n});\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./servicers-onboarding.vue?vue&type=style&index=0&id=42b17c0e&scoped=true&lang=css&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./footer.vue?vue&type=style&index=0&id=049c422e&scoped=true&lang=css&\""],"sourceRoot":""}