{"version":3,"sources":["webpack:///./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack:///./node_modules/vue-resource/dist/vue-resource.esm.js","webpack:///./node_modules/vue-router/dist/vue-router.esm.js","webpack:///./node_modules/register-service-worker/index.js","webpack:///./node_modules/sortablejs/modular/sortable.esm.js"],"names":["normalizeComponent","scriptExports","render","staticRenderFns","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","options","_compiled","functional","_scopeId","context","this","$vnode","ssrContext","parent","__VUE_SSR_CONTEXT__","call","_registeredComponents","add","_ssrRegister","$root","$options","shadowRoot","_injectStyles","originalRender","h","existing","beforeCreate","concat","exports","RESOLVED","REJECTED","PENDING","Promise$1","executor","state","value","undefined","deferred","promise","x","resolve","r","reject","e","all","iterable","count","result","resolver","i","length","then","race","p","prototype","PromiseObj","Promise","bind","TypeError","called","notify","reason","nextTick","shift","onResolved","onRejected","push","catch","window","p$1","fulfilled","rejected","finally","callback","ntick","ref","hasOwnProperty","ref$1","slice","debug","inBrowser","Util","config","silent","warn","msg","console","error","cb","ctx","trim","str","replace","trimEnd","chars","RegExp","toLower","toLowerCase","toUpper","toUpperCase","isArray","Array","isString","val","isFunction","isObject","obj","isPlainObject","Object","getPrototypeOf","isBlob","Blob","isFormData","FormData","when","arguments","fn","opts","merge","$vm","each","iterator","key","assign","_assign","target","args","forEach","source","_merge","defaults","deep","root","options$$1","next","url","test","query","urlParams","keys","Url","params","indexOf","expand","variables","tmpl","parse","expanded","apply","vars","template","operators","_","expression","literal","operator","values","charAt","substr","split","variable","tmp","exec","getValues","separator","join","encodeReserved","modifier","isDefined","toString","substring","parseInt","encodeValue","isKeyOperator","filter","k","encodeURIComponent","map","part","encodeURI","transform","self","transforms","handler","factory","vm","serialize","scope","hash","array","plain","name","xdrClient","request","xdr","XDomainRequest","type","status","respondWith","responseText","abort","open","method","getUrl","timeout","onload","onabort","onerror","ontimeout","onprogress","send","getBody","escape","el","document","createElement","documentMode","href","protocol","port","host","hostname","pathname","search","SUPPORTS_CORS","XMLHttpRequest","cors","orgUrl","location","reqUrl","crossOrigin","emulateHTTP","client","form","body","headers","delete","emulateJSON","set","json","get","JSON","stringify","response","bodyText","text","isJson","start","match","end","jsonpClient","script","jsonp","jsonpCallback","Math","random","removeChild","setTimeout","src","async","appendChild","before","header","Http","common","custom","has","xhrClient","xhr","event","statusText","getAllResponseHeaders","row","append","responseType","withCredentials","credentials","progress","addEventListener","downloadProgress","upload","uploadProgress","setRequestHeader","nodeClient","resp","statusCode","statusMessage","error$$1","Client","reqHandlers","sendRequest","resHandlers","pop","unshift","use","Headers","this$1","getName","reduce","prev","curr","normalizeName","list","getAll","deleteAll","thisArg","Response","ok","bodyBlob","isBlobText","blobText","reader","FileReader","readAsText","blob","defineProperty","Request","COMMON_HEADERS","JSON_CONTENT_TYPE","interceptors","interceptor","Error","Resource","actions","resource","action","$http","plugin","Vue","installed","http","defineProperties","$url","$resource","$promise","put","post","patch","method$$1","save","update","remove","condition","message","isError","err","isExtendedError","constructor","_name","extend","a","b","View","props","String","default","children","data","routerView","$createElement","route","$route","cache","_routerViewCache","depth","inactive","_routerRoot","vnodeData","keepAlive","_inactive","$parent","routerViewDepth","matched","component","components","registerRouteInstance","current","instances","prepatch","vnode","componentInstance","init","propsToPass","resolveProps","attrs","encodeReserveRE","encodeReserveReplacer","c","charCodeAt","commaRE","encode","decode","decodeURIComponent","resolveQuery","extraQuery","_parseQuery","parsedQuery","parseQuery","res","param","parts","stringifyQuery","val2","trailingSlashRE","createRoute","record","redirectedFrom","router","clone","meta","path","fullPath","getFullPath","formatMatch","freeze","START","_stringifyQuery","isSameRoute","isObjectEqual","aKeys","bKeys","every","aVal","bVal","isIncludedRoute","queryIncludes","resolvePath","relative","base","firstChar","stack","segments","segment","parsePath","hashIndex","queryIndex","cleanPath","isarray","arr","pathToRegexp_1","pathToRegexp","parse_1","compile_1","compile","tokensToFunction_1","tokensToFunction","tokensToRegExp_1","tokensToRegExp","PATH_REGEXP","tokens","index","defaultDelimiter","delimiter","m","escaped","offset","prefix","capture","group","asterisk","partial","repeat","optional","pattern","escapeGroup","escapeString","encodeURIComponentPretty","encodeAsterisk","matches","pretty","token","j","attachKeys","re","flags","sensitive","regexpToRegexp","groups","arrayToRegexp","regexp","stringToRegexp","strict","endsWithDelimiter","regexpCompileCache","create","fillParams","routeMsg","filler","pathMatch","normalizeLocation","raw","_normalized","rawPath","parsedPath","basePath","_Vue","toTypes","eventTypes","noop","Link","to","required","tag","exact","Boolean","activeClass","exactActiveClass","$router","classes","globalActiveClass","linkActiveClass","globalExactActiveClass","linkExactActiveClass","activeClassFallback","exactActiveClassFallback","compareTarget","guardEvent","on","click","class","scopedSlot","$scopedSlots","$hasNormal","navigate","isActive","isExactActive","findAnchor","$slots","isStatic","aData","handler$1","event$1","aAttrs","metaKey","altKey","ctrlKey","shiftKey","defaultPrevented","button","currentTarget","getAttribute","preventDefault","child","install","isDef","v","registerInstance","callVal","_parentVnode","mixin","_router","util","defineReactive","history","destroyed","_route","strats","optionMergeStrategies","beforeRouteEnter","beforeRouteLeave","beforeRouteUpdate","created","createRouteMap","routes","oldPathList","oldPathMap","oldNameMap","pathList","pathMap","nameMap","addRouteRecord","l","splice","matchAs","pathToRegexpOptions","normalizedPath","normalizePath","caseSensitive","regex","compileRouteRegex","redirect","beforeEnter","childMatchAs","alias","aliases","aliasRoute","createMatcher","addRoutes","currentRoute","_createRoute","paramNames","record$1","matchRoute","originalRedirect","resolveRecordPath","resolvedPath","aliasedPath","aliasedMatch","aliasedRecord","len","Time","performance","now","Date","genStateKey","toFixed","_key","getStateKey","setStateKey","positionStore","setupScroll","protocolAndPath","absolutePath","replaceState","saveScrollPosition","handleScroll","from","isPop","app","behavior","scrollBehavior","$nextTick","position","getScrollPosition","shouldScroll","scrollToPosition","pageXOffset","y","pageYOffset","getElementPosition","docEl","documentElement","docRect","getBoundingClientRect","elRect","left","top","isValidPosition","isNumber","normalizePosition","normalizeOffset","hashStartsWithNumberRE","selector","getElementById","querySelector","scrollTo","supportsPushState","ua","navigator","userAgent","pushState","runQueue","queue","step","resolveAsyncComponents","hasAsync","pending","flatMapComponents","def","cid","once","resolvedDef","isESModule","resolved","comp","flatten","hasSymbol","Symbol","toStringTag","__esModule","NavigationDuplicated","normalizedLocation","writable","configurable","__proto__","History","normalizeBase","ready","readyCbs","readyErrorCbs","errorCbs","baseEl","resolveQueue","max","updated","activated","deactivated","extractGuards","records","reverse","guards","instance","guard","extractGuard","extractLeaveGuards","bindGuard","extractUpdateHooks","extractEnterGuards","cbs","isValid","bindEnterGuard","poll","_isBeingDestroyed","listen","onReady","errorCb","onError","transitionTo","onComplete","onAbort","confirmTransition","updateRoute","ensureURL","beforeHooks","postEnterCbs","enterGuards","resolveHooks","afterHooks","HTML5History","expectScroll","supportsScroll","initLocation","getLocation","go","n","fromRoute","getCurrentLocation","decodeURI","HashHistory","fallback","checkFallback","ensureSlash","setupListeners","getHash","replaceHash","pushHash","searchIndex","AbstractHistory","targetIndex","VueRouter","apps","matcher","mode","prototypeAccessors","registerHook","createHref","$once","setupHashListener","beforeEach","beforeResolve","afterEach","back","forward","getMatchedComponents","normalizedTo","version","isLocalhost","register","swUrl","hooks","registrationOptions","emit","checkValidServiceWorker","serviceWorker","registration","registerValidSW","waiting","onupdatefound","installingWorker","installing","onstatechange","controller","fetch","unregister","onLine","_typeof","_defineProperty","enumerable","_extends","_objectSpread","ownKeys","getOwnPropertySymbols","sym","getOwnPropertyDescriptor","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","propertyIsEnumerable","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","arr2","iter","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","passive","off","removeEventListener","msMatchesSelector","webkitMatchesSelector","getParentOrHost","nodeType","parentNode","closest","includeCTX","_throttleTimeout","R_SPACE","toggleClass","classList","className","css","prop","style","defaultView","getComputedStyle","currentStyle","matrix","selfOnly","appliedTransforms","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","find","tagName","getElementsByTagName","getWindowScrollingElement","scrollingElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","container","bottom","right","height","width","innerHeight","innerWidth","containerRect","elMatrix","scaleX","scaleY","d","isScrolledPast","elSide","parentSide","getParentAutoScrollElement","elSideVal","parentSideVal","visible","getChild","childNum","currentChild","display","Sortable","ghost","dragged","draggable","lastChild","last","lastElementChild","previousElementSibling","nodeName","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","scrollLeft","scrollTop","indexOfObject","Number","includeSelf","elem","gotSelf","clientWidth","scrollWidth","clientHeight","scrollHeight","elemCSS","overflowX","overflowY","dst","isRectEqual","rect1","rect2","round","throttle","ms","_this","cancelThrottle","clearTimeout","scrollBy","Polymer","$","jQuery","Zepto","dom","cloneNode","setRect","rect","unsetRect","expando","getTime","AnimationStateManager","animationCallbackId","animationStates","captureAnimationState","animation","fromRect","thisAnimationDuration","childMatrix","f","addAnimationState","removeAnimationState","animateAll","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","calculateRealTime","animate","animationResetTimer","currentRect","duration","translateX","translateY","animatingX","animatingY","repaint","easing","animated","offsetWidth","sqrt","pow","plugins","initializeByDefault","PluginManager","mount","option","pluginEvent","eventName","sortable","evt","eventCanceled","cancel","eventNameGlobal","pluginName","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","dispatchEvent","_ref","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","CustomEvent","createEvent","initEvent","bubbles","cancelable","item","pullMode","lastPutMode","allEventProperties","dragEl","parentEl","ghostEl","nextEl","lastDownEl","cloneHidden","dragStarted","moved","activeSortable","active","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","info","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","cssText","pointerEvents","_detectDirection","elCSS","elWidth","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginLeft","marginRight","secondChildWidth","flexDirection","gridTemplateColumns","touchingSideChild2","clear","_dragElInRowColumn","dragRect","targetRect","vertical","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_detectNearestEmptySortable","ret","some","threshold","emptyInsertThreshold","insideHorizontally","insideVertically","_prepareGroup","toFn","pull","sameGroup","otherGroup","originalGroup","checkPull","checkPut","revertClone","stopPropagation","stopImmediatePropagation","nearestEmptyInsertDetectEvent","touches","nearest","clientX","clientY","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","sort","disabled","store","handle","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","direction","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","setData","dataTransfer","textContent","dropBubble","dragoverBubble","dataIdAttr","delay","delayOnTouchOnly","touchStartThreshold","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","_globalDragOver","dropEffect","_onMove","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_ghostIsLast","spacer","_getSwapDirection","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","_generateId","sum","_saveInputCheckedState","inputs","idx","checked","_nextTick","_cancelNextTick","id","contains","_getDirection","touch","pointerType","originalTarget","composedPath","isContentEditable","criteria","_prepareDragStart","dragStartFn","ownerDocument","nextSibling","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","abs","floor","_onTouchMove","_onDragStart","selection","empty","getSelection","removeAllRanges","_dragStarted","_appendGhost","_nulling","_emulateDragOver","elementFromPoint","inserted","ghostMatrix","relativeScrollOffset","dx","dy","cssMatrix","_hideClone","cloneId","insertBefore","_loopId","setInterval","effectAllowed","_dragStartId","revert","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","changed","targetBeforeFirstSwap","sibling","differentLevel","differentRowCol","side1","scrolledPastTop","scrollBefore","dragIndex","nextElementSibling","after","moveVector","extra","axis","insertion","_showClone","_offMoveEvents","_offUpEvents","clearInterval","handleEvent","toArray","order","items","destroy","querySelectorAll","removeAttribute","utils","is","cancelNextTick","detectDirection","element","_len","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","AutoScrollPlugin","AutoScroll","scroll","scrollSensitivity","scrollSpeed","bubbleScroll","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","_ref2","dragOverBubble","drop","clearPointerElemChangedInterval","clearAutoScrolls","nulling","autoScroll","ogElemScroller","newElem","pid","lastSwapEl","isFallback","scrollCustomFn","sens","speed","scrollThisInstance","scrollFn","layersOut","currentParent","canScrollX","canScrollY","scrollPosX","scrollPosY","vx","vy","layer","scrollOffsetY","scrollOffsetX","toSortable","changedTouches","onSpill","Revert","Remove","SwapPlugin","Swap","swapClass","dragStart","dragOverValid","swap","prevSwapEl","_ref3","swapNodes","swapItem","n1","n2","i1","i2","p1","p2","isEqualNode","startIndex","_ref4","parentSortable","lastMultiDragSelect","multiDragSortable","dragEl$1","clonesFromRect","clonesHidden","multiDragElements","multiDragClones","initialFolding","folding","MultiDragPlugin","MultiDrag","_deselectMultiDrag","_checkKeyDown","_checkKeyUp","selectedClass","multiDragKey","multiDragElement","multiDragKeyDown","isMultiDrag","delayStartGlobal","delayEnded","setupClone","sortableIndex","insertMultiDragClones","showClone","hideClone","_ref5","dragStartGlobal","_ref6","multiDrag","_ref7","_this2","removeMultiDragElements","dragOver","_ref8","_ref9","insertMultiDragElements","_ref10","dragRectAbsolute","clonesHiddenBefore","dragOverAnimationCapture","_ref11","dragMatrix","dragOverAnimationComplete","_ref12","originalEvt","lastIndex","currentIndex","multiDragIndex","nullingGlobal","destroyGlobal","select","deselect","_this3","oldIndicies","newIndicies","clones","clonesInserted","elementsInserted"],"mappings":"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","file":"js/chunk-vendors~678f84af.951db589.js","sourcesContent":["/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","/*!\n * vue-resource v1.5.1\n * https://github.com/pagekit/vue-resource\n * Released under the MIT License.\n */\n\n/**\n * Promises/A+ polyfill v1.1.4 (https://github.com/bramstein/promis)\n */\n\nvar RESOLVED = 0;\nvar REJECTED = 1;\nvar PENDING = 2;\n\nfunction Promise$1(executor) {\n\n this.state = PENDING;\n this.value = undefined;\n this.deferred = [];\n\n var promise = this;\n\n try {\n executor(function (x) {\n promise.resolve(x);\n }, function (r) {\n promise.reject(r);\n });\n } catch (e) {\n promise.reject(e);\n }\n}\n\nPromise$1.reject = function (r) {\n return new Promise$1(function (resolve, reject) {\n reject(r);\n });\n};\n\nPromise$1.resolve = function (x) {\n return new Promise$1(function (resolve, reject) {\n resolve(x);\n });\n};\n\nPromise$1.all = function all(iterable) {\n return new Promise$1(function (resolve, reject) {\n var count = 0, result = [];\n\n if (iterable.length === 0) {\n resolve(result);\n }\n\n function resolver(i) {\n return function (x) {\n result[i] = x;\n count += 1;\n\n if (count === iterable.length) {\n resolve(result);\n }\n };\n }\n\n for (var i = 0; i < iterable.length; i += 1) {\n Promise$1.resolve(iterable[i]).then(resolver(i), reject);\n }\n });\n};\n\nPromise$1.race = function race(iterable) {\n return new Promise$1(function (resolve, reject) {\n for (var i = 0; i < iterable.length; i += 1) {\n Promise$1.resolve(iterable[i]).then(resolve, reject);\n }\n });\n};\n\nvar p = Promise$1.prototype;\n\np.resolve = function resolve(x) {\n var promise = this;\n\n if (promise.state === PENDING) {\n if (x === promise) {\n throw new TypeError('Promise settled with itself.');\n }\n\n var called = false;\n\n try {\n var then = x && x['then'];\n\n if (x !== null && typeof x === 'object' && typeof then === 'function') {\n then.call(x, function (x) {\n if (!called) {\n promise.resolve(x);\n }\n called = true;\n\n }, function (r) {\n if (!called) {\n promise.reject(r);\n }\n called = true;\n });\n return;\n }\n } catch (e) {\n if (!called) {\n promise.reject(e);\n }\n return;\n }\n\n promise.state = RESOLVED;\n promise.value = x;\n promise.notify();\n }\n};\n\np.reject = function reject(reason) {\n var promise = this;\n\n if (promise.state === PENDING) {\n if (reason === promise) {\n throw new TypeError('Promise settled with itself.');\n }\n\n promise.state = REJECTED;\n promise.value = reason;\n promise.notify();\n }\n};\n\np.notify = function notify() {\n var promise = this;\n\n nextTick(function () {\n if (promise.state !== PENDING) {\n while (promise.deferred.length) {\n var deferred = promise.deferred.shift(),\n onResolved = deferred[0],\n onRejected = deferred[1],\n resolve = deferred[2],\n reject = deferred[3];\n\n try {\n if (promise.state === RESOLVED) {\n if (typeof onResolved === 'function') {\n resolve(onResolved.call(undefined, promise.value));\n } else {\n resolve(promise.value);\n }\n } else if (promise.state === REJECTED) {\n if (typeof onRejected === 'function') {\n resolve(onRejected.call(undefined, promise.value));\n } else {\n reject(promise.value);\n }\n }\n } catch (e) {\n reject(e);\n }\n }\n }\n });\n};\n\np.then = function then(onResolved, onRejected) {\n var promise = this;\n\n return new Promise$1(function (resolve, reject) {\n promise.deferred.push([onResolved, onRejected, resolve, reject]);\n promise.notify();\n });\n};\n\np.catch = function (onRejected) {\n return this.then(undefined, onRejected);\n};\n\n/**\n * Promise adapter.\n */\n\nif (typeof Promise === 'undefined') {\n window.Promise = Promise$1;\n}\n\nfunction PromiseObj(executor, context) {\n\n if (executor instanceof Promise) {\n this.promise = executor;\n } else {\n this.promise = new Promise(executor.bind(context));\n }\n\n this.context = context;\n}\n\nPromiseObj.all = function (iterable, context) {\n return new PromiseObj(Promise.all(iterable), context);\n};\n\nPromiseObj.resolve = function (value, context) {\n return new PromiseObj(Promise.resolve(value), context);\n};\n\nPromiseObj.reject = function (reason, context) {\n return new PromiseObj(Promise.reject(reason), context);\n};\n\nPromiseObj.race = function (iterable, context) {\n return new PromiseObj(Promise.race(iterable), context);\n};\n\nvar p$1 = PromiseObj.prototype;\n\np$1.bind = function (context) {\n this.context = context;\n return this;\n};\n\np$1.then = function (fulfilled, rejected) {\n\n if (fulfilled && fulfilled.bind && this.context) {\n fulfilled = fulfilled.bind(this.context);\n }\n\n if (rejected && rejected.bind && this.context) {\n rejected = rejected.bind(this.context);\n }\n\n return new PromiseObj(this.promise.then(fulfilled, rejected), this.context);\n};\n\np$1.catch = function (rejected) {\n\n if (rejected && rejected.bind && this.context) {\n rejected = rejected.bind(this.context);\n }\n\n return new PromiseObj(this.promise.catch(rejected), this.context);\n};\n\np$1.finally = function (callback) {\n\n return this.then(function (value) {\n callback.call(this);\n return value;\n }, function (reason) {\n callback.call(this);\n return Promise.reject(reason);\n }\n );\n};\n\n/**\n * Utility functions.\n */\n\nvar ref = {};\nvar hasOwnProperty = ref.hasOwnProperty;\nvar ref$1 = [];\nvar slice = ref$1.slice;\nvar debug = false, ntick;\n\nvar inBrowser = typeof window !== 'undefined';\n\nfunction Util (ref) {\n var config = ref.config;\n var nextTick = ref.nextTick;\n\n ntick = nextTick;\n debug = config.debug || !config.silent;\n}\n\nfunction warn(msg) {\n if (typeof console !== 'undefined' && debug) {\n console.warn('[VueResource warn]: ' + msg);\n }\n}\n\nfunction error(msg) {\n if (typeof console !== 'undefined') {\n console.error(msg);\n }\n}\n\nfunction nextTick(cb, ctx) {\n return ntick(cb, ctx);\n}\n\nfunction trim(str) {\n return str ? str.replace(/^\\s*|\\s*$/g, '') : '';\n}\n\nfunction trimEnd(str, chars) {\n\n if (str && chars === undefined) {\n return str.replace(/\\s+$/, '');\n }\n\n if (!str || !chars) {\n return str;\n }\n\n return str.replace(new RegExp((\"[\" + chars + \"]+$\")), '');\n}\n\nfunction toLower(str) {\n return str ? str.toLowerCase() : '';\n}\n\nfunction toUpper(str) {\n return str ? str.toUpperCase() : '';\n}\n\nvar isArray = Array.isArray;\n\nfunction isString(val) {\n return typeof val === 'string';\n}\n\nfunction isFunction(val) {\n return typeof val === 'function';\n}\n\nfunction isObject(obj) {\n return obj !== null && typeof obj === 'object';\n}\n\nfunction isPlainObject(obj) {\n return isObject(obj) && Object.getPrototypeOf(obj) == Object.prototype;\n}\n\nfunction isBlob(obj) {\n return typeof Blob !== 'undefined' && obj instanceof Blob;\n}\n\nfunction isFormData(obj) {\n return typeof FormData !== 'undefined' && obj instanceof FormData;\n}\n\nfunction when(value, fulfilled, rejected) {\n\n var promise = PromiseObj.resolve(value);\n\n if (arguments.length < 2) {\n return promise;\n }\n\n return promise.then(fulfilled, rejected);\n}\n\nfunction options(fn, obj, opts) {\n\n opts = opts || {};\n\n if (isFunction(opts)) {\n opts = opts.call(obj);\n }\n\n return merge(fn.bind({$vm: obj, $options: opts}), fn, {$options: opts});\n}\n\nfunction each(obj, iterator) {\n\n var i, key;\n\n if (isArray(obj)) {\n for (i = 0; i < obj.length; i++) {\n iterator.call(obj[i], obj[i], i);\n }\n } else if (isObject(obj)) {\n for (key in obj) {\n if (hasOwnProperty.call(obj, key)) {\n iterator.call(obj[key], obj[key], key);\n }\n }\n }\n\n return obj;\n}\n\nvar assign = Object.assign || _assign;\n\nfunction merge(target) {\n\n var args = slice.call(arguments, 1);\n\n args.forEach(function (source) {\n _merge(target, source, true);\n });\n\n return target;\n}\n\nfunction defaults(target) {\n\n var args = slice.call(arguments, 1);\n\n args.forEach(function (source) {\n\n for (var key in source) {\n if (target[key] === undefined) {\n target[key] = source[key];\n }\n }\n\n });\n\n return target;\n}\n\nfunction _assign(target) {\n\n var args = slice.call(arguments, 1);\n\n args.forEach(function (source) {\n _merge(target, source);\n });\n\n return target;\n}\n\nfunction _merge(target, source, deep) {\n for (var key in source) {\n if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {\n if (isPlainObject(source[key]) && !isPlainObject(target[key])) {\n target[key] = {};\n }\n if (isArray(source[key]) && !isArray(target[key])) {\n target[key] = [];\n }\n _merge(target[key], source[key], deep);\n } else if (source[key] !== undefined) {\n target[key] = source[key];\n }\n }\n}\n\n/**\n * Root Prefix Transform.\n */\n\nfunction root (options$$1, next) {\n\n var url = next(options$$1);\n\n if (isString(options$$1.root) && !/^(https?:)?\\//.test(url)) {\n url = trimEnd(options$$1.root, '/') + '/' + url;\n }\n\n return url;\n}\n\n/**\n * Query Parameter Transform.\n */\n\nfunction query (options$$1, next) {\n\n var urlParams = Object.keys(Url.options.params), query = {}, url = next(options$$1);\n\n each(options$$1.params, function (value, key) {\n if (urlParams.indexOf(key) === -1) {\n query[key] = value;\n }\n });\n\n query = Url.params(query);\n\n if (query) {\n url += (url.indexOf('?') == -1 ? '?' : '&') + query;\n }\n\n return url;\n}\n\n/**\n * URL Template v2.0.6 (https://github.com/bramstein/url-template)\n */\n\nfunction expand(url, params, variables) {\n\n var tmpl = parse(url), expanded = tmpl.expand(params);\n\n if (variables) {\n variables.push.apply(variables, tmpl.vars);\n }\n\n return expanded;\n}\n\nfunction parse(template) {\n\n var operators = ['+', '#', '.', '/', ';', '?', '&'], variables = [];\n\n return {\n vars: variables,\n expand: function expand(context) {\n return template.replace(/\\{([^{}]+)\\}|([^{}]+)/g, function (_, expression, literal) {\n if (expression) {\n\n var operator = null, values = [];\n\n if (operators.indexOf(expression.charAt(0)) !== -1) {\n operator = expression.charAt(0);\n expression = expression.substr(1);\n }\n\n expression.split(/,/g).forEach(function (variable) {\n var tmp = /([^:*]*)(?::(\\d+)|(\\*))?/.exec(variable);\n values.push.apply(values, getValues(context, operator, tmp[1], tmp[2] || tmp[3]));\n variables.push(tmp[1]);\n });\n\n if (operator && operator !== '+') {\n\n var separator = ',';\n\n if (operator === '?') {\n separator = '&';\n } else if (operator !== '#') {\n separator = operator;\n }\n\n return (values.length !== 0 ? operator : '') + values.join(separator);\n } else {\n return values.join(',');\n }\n\n } else {\n return encodeReserved(literal);\n }\n });\n }\n };\n}\n\nfunction getValues(context, operator, key, modifier) {\n\n var value = context[key], result = [];\n\n if (isDefined(value) && value !== '') {\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n value = value.toString();\n\n if (modifier && modifier !== '*') {\n value = value.substring(0, parseInt(modifier, 10));\n }\n\n result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null));\n } else {\n if (modifier === '*') {\n if (Array.isArray(value)) {\n value.filter(isDefined).forEach(function (value) {\n result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null));\n });\n } else {\n Object.keys(value).forEach(function (k) {\n if (isDefined(value[k])) {\n result.push(encodeValue(operator, value[k], k));\n }\n });\n }\n } else {\n var tmp = [];\n\n if (Array.isArray(value)) {\n value.filter(isDefined).forEach(function (value) {\n tmp.push(encodeValue(operator, value));\n });\n } else {\n Object.keys(value).forEach(function (k) {\n if (isDefined(value[k])) {\n tmp.push(encodeURIComponent(k));\n tmp.push(encodeValue(operator, value[k].toString()));\n }\n });\n }\n\n if (isKeyOperator(operator)) {\n result.push(encodeURIComponent(key) + '=' + tmp.join(','));\n } else if (tmp.length !== 0) {\n result.push(tmp.join(','));\n }\n }\n }\n } else {\n if (operator === ';') {\n result.push(encodeURIComponent(key));\n } else if (value === '' && (operator === '&' || operator === '?')) {\n result.push(encodeURIComponent(key) + '=');\n } else if (value === '') {\n result.push('');\n }\n }\n\n return result;\n}\n\nfunction isDefined(value) {\n return value !== undefined && value !== null;\n}\n\nfunction isKeyOperator(operator) {\n return operator === ';' || operator === '&' || operator === '?';\n}\n\nfunction encodeValue(operator, value, key) {\n\n value = (operator === '+' || operator === '#') ? encodeReserved(value) : encodeURIComponent(value);\n\n if (key) {\n return encodeURIComponent(key) + '=' + value;\n } else {\n return value;\n }\n}\n\nfunction encodeReserved(str) {\n return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) {\n if (!/%[0-9A-Fa-f]/.test(part)) {\n part = encodeURI(part);\n }\n return part;\n }).join('');\n}\n\n/**\n * URL Template (RFC 6570) Transform.\n */\n\nfunction template (options) {\n\n var variables = [], url = expand(options.url, options.params, variables);\n\n variables.forEach(function (key) {\n delete options.params[key];\n });\n\n return url;\n}\n\n/**\n * Service for URL templating.\n */\n\nfunction Url(url, params) {\n\n var self = this || {}, options$$1 = url, transform;\n\n if (isString(url)) {\n options$$1 = {url: url, params: params};\n }\n\n options$$1 = merge({}, Url.options, self.$options, options$$1);\n\n Url.transforms.forEach(function (handler) {\n\n if (isString(handler)) {\n handler = Url.transform[handler];\n }\n\n if (isFunction(handler)) {\n transform = factory(handler, transform, self.$vm);\n }\n\n });\n\n return transform(options$$1);\n}\n\n/**\n * Url options.\n */\n\nUrl.options = {\n url: '',\n root: null,\n params: {}\n};\n\n/**\n * Url transforms.\n */\n\nUrl.transform = {template: template, query: query, root: root};\nUrl.transforms = ['template', 'query', 'root'];\n\n/**\n * Encodes a Url parameter string.\n *\n * @param {Object} obj\n */\n\nUrl.params = function (obj) {\n\n var params = [], escape = encodeURIComponent;\n\n params.add = function (key, value) {\n\n if (isFunction(value)) {\n value = value();\n }\n\n if (value === null) {\n value = '';\n }\n\n this.push(escape(key) + '=' + escape(value));\n };\n\n serialize(params, obj);\n\n return params.join('&').replace(/%20/g, '+');\n};\n\n/**\n * Parse a URL and return its components.\n *\n * @param {String} url\n */\n\nUrl.parse = function (url) {\n\n var el = document.createElement('a');\n\n if (document.documentMode) {\n el.href = url;\n url = el.href;\n }\n\n el.href = url;\n\n return {\n href: el.href,\n protocol: el.protocol ? el.protocol.replace(/:$/, '') : '',\n port: el.port,\n host: el.host,\n hostname: el.hostname,\n pathname: el.pathname.charAt(0) === '/' ? el.pathname : '/' + el.pathname,\n search: el.search ? el.search.replace(/^\\?/, '') : '',\n hash: el.hash ? el.hash.replace(/^#/, '') : ''\n };\n};\n\nfunction factory(handler, next, vm) {\n return function (options$$1) {\n return handler.call(vm, options$$1, next);\n };\n}\n\nfunction serialize(params, obj, scope) {\n\n var array = isArray(obj), plain = isPlainObject(obj), hash;\n\n each(obj, function (value, key) {\n\n hash = isObject(value) || isArray(value);\n\n if (scope) {\n key = scope + '[' + (plain || hash ? key : '') + ']';\n }\n\n if (!scope && array) {\n params.add(value.name, value.value);\n } else if (hash) {\n serialize(params, value, key);\n } else {\n params.add(key, value);\n }\n });\n}\n\n/**\n * XDomain client (Internet Explorer).\n */\n\nfunction xdrClient (request) {\n return new PromiseObj(function (resolve) {\n\n var xdr = new XDomainRequest(), handler = function (ref) {\n var type = ref.type;\n\n\n var status = 0;\n\n if (type === 'load') {\n status = 200;\n } else if (type === 'error') {\n status = 500;\n }\n\n resolve(request.respondWith(xdr.responseText, {status: status}));\n };\n\n request.abort = function () { return xdr.abort(); };\n\n xdr.open(request.method, request.getUrl());\n\n if (request.timeout) {\n xdr.timeout = request.timeout;\n }\n\n xdr.onload = handler;\n xdr.onabort = handler;\n xdr.onerror = handler;\n xdr.ontimeout = handler;\n xdr.onprogress = function () {};\n xdr.send(request.getBody());\n });\n}\n\n/**\n * CORS Interceptor.\n */\n\nvar SUPPORTS_CORS = inBrowser && 'withCredentials' in new XMLHttpRequest();\n\nfunction cors (request) {\n\n if (inBrowser) {\n\n var orgUrl = Url.parse(location.href);\n var reqUrl = Url.parse(request.getUrl());\n\n if (reqUrl.protocol !== orgUrl.protocol || reqUrl.host !== orgUrl.host) {\n\n request.crossOrigin = true;\n request.emulateHTTP = false;\n\n if (!SUPPORTS_CORS) {\n request.client = xdrClient;\n }\n }\n }\n\n}\n\n/**\n * Form data Interceptor.\n */\n\nfunction form (request) {\n\n if (isFormData(request.body)) {\n request.headers.delete('Content-Type');\n } else if (isObject(request.body) && request.emulateJSON) {\n request.body = Url.params(request.body);\n request.headers.set('Content-Type', 'application/x-www-form-urlencoded');\n }\n\n}\n\n/**\n * JSON Interceptor.\n */\n\nfunction json (request) {\n\n var type = request.headers.get('Content-Type') || '';\n\n if (isObject(request.body) && type.indexOf('application/json') === 0) {\n request.body = JSON.stringify(request.body);\n }\n\n return function (response) {\n\n return response.bodyText ? when(response.text(), function (text) {\n\n var type = response.headers.get('Content-Type') || '';\n\n if (type.indexOf('application/json') === 0 || isJson(text)) {\n\n try {\n response.body = JSON.parse(text);\n } catch (e) {\n response.body = null;\n }\n\n } else {\n response.body = text;\n }\n\n return response;\n\n }) : response;\n\n };\n}\n\nfunction isJson(str) {\n\n var start = str.match(/^\\s*(\\[|\\{)/);\n var end = {'[': /]\\s*$/, '{': /}\\s*$/};\n\n return start && end[start[1]].test(str);\n}\n\n/**\n * JSONP client (Browser).\n */\n\nfunction jsonpClient (request) {\n return new PromiseObj(function (resolve) {\n\n var name = request.jsonp || 'callback', callback = request.jsonpCallback || '_jsonp' + Math.random().toString(36).substr(2), body = null, handler, script;\n\n handler = function (ref) {\n var type = ref.type;\n\n\n var status = 0;\n\n if (type === 'load' && body !== null) {\n status = 200;\n } else if (type === 'error') {\n status = 500;\n }\n\n if (status && window[callback]) {\n delete window[callback];\n document.body.removeChild(script);\n }\n\n resolve(request.respondWith(body, {status: status}));\n };\n\n window[callback] = function (result) {\n body = JSON.stringify(result);\n };\n\n request.abort = function () {\n handler({type: 'abort'});\n };\n\n request.params[name] = callback;\n\n if (request.timeout) {\n setTimeout(request.abort, request.timeout);\n }\n\n script = document.createElement('script');\n script.src = request.getUrl();\n script.type = 'text/javascript';\n script.async = true;\n script.onload = handler;\n script.onerror = handler;\n\n document.body.appendChild(script);\n });\n}\n\n/**\n * JSONP Interceptor.\n */\n\nfunction jsonp (request) {\n\n if (request.method == 'JSONP') {\n request.client = jsonpClient;\n }\n\n}\n\n/**\n * Before Interceptor.\n */\n\nfunction before (request) {\n\n if (isFunction(request.before)) {\n request.before.call(this, request);\n }\n\n}\n\n/**\n * HTTP method override Interceptor.\n */\n\nfunction method (request) {\n\n if (request.emulateHTTP && /^(PUT|PATCH|DELETE)$/i.test(request.method)) {\n request.headers.set('X-HTTP-Method-Override', request.method);\n request.method = 'POST';\n }\n\n}\n\n/**\n * Header Interceptor.\n */\n\nfunction header (request) {\n\n var headers = assign({}, Http.headers.common,\n !request.crossOrigin ? Http.headers.custom : {},\n Http.headers[toLower(request.method)]\n );\n\n each(headers, function (value, name) {\n if (!request.headers.has(name)) {\n request.headers.set(name, value);\n }\n });\n\n}\n\n/**\n * XMLHttp client (Browser).\n */\n\nfunction xhrClient (request) {\n return new PromiseObj(function (resolve) {\n\n var xhr = new XMLHttpRequest(), handler = function (event) {\n\n var response = request.respondWith(\n 'response' in xhr ? xhr.response : xhr.responseText, {\n status: xhr.status === 1223 ? 204 : xhr.status, // IE9 status bug\n statusText: xhr.status === 1223 ? 'No Content' : trim(xhr.statusText)\n });\n\n each(trim(xhr.getAllResponseHeaders()).split('\\n'), function (row) {\n response.headers.append(row.slice(0, row.indexOf(':')), row.slice(row.indexOf(':') + 1));\n });\n\n resolve(response);\n };\n\n request.abort = function () { return xhr.abort(); };\n\n xhr.open(request.method, request.getUrl(), true);\n\n if (request.timeout) {\n xhr.timeout = request.timeout;\n }\n\n if (request.responseType && 'responseType' in xhr) {\n xhr.responseType = request.responseType;\n }\n\n if (request.withCredentials || request.credentials) {\n xhr.withCredentials = true;\n }\n\n if (!request.crossOrigin) {\n request.headers.set('X-Requested-With', 'XMLHttpRequest');\n }\n\n // deprecated use downloadProgress\n if (isFunction(request.progress) && request.method === 'GET') {\n xhr.addEventListener('progress', request.progress);\n }\n\n if (isFunction(request.downloadProgress)) {\n xhr.addEventListener('progress', request.downloadProgress);\n }\n\n // deprecated use uploadProgress\n if (isFunction(request.progress) && /^(POST|PUT)$/i.test(request.method)) {\n xhr.upload.addEventListener('progress', request.progress);\n }\n\n if (isFunction(request.uploadProgress) && xhr.upload) {\n xhr.upload.addEventListener('progress', request.uploadProgress);\n }\n\n request.headers.forEach(function (value, name) {\n xhr.setRequestHeader(name, value);\n });\n\n xhr.onload = handler;\n xhr.onabort = handler;\n xhr.onerror = handler;\n xhr.ontimeout = handler;\n xhr.send(request.getBody());\n });\n}\n\n/**\n * Http client (Node).\n */\n\nfunction nodeClient (request) {\n\n var client = require('got');\n\n return new PromiseObj(function (resolve) {\n\n var url = request.getUrl();\n var body = request.getBody();\n var method = request.method;\n var headers = {}, handler;\n\n request.headers.forEach(function (value, name) {\n headers[name] = value;\n });\n\n client(url, {body: body, method: method, headers: headers}).then(handler = function (resp) {\n\n var response = request.respondWith(resp.body, {\n status: resp.statusCode,\n statusText: trim(resp.statusMessage)\n });\n\n each(resp.headers, function (value, name) {\n response.headers.set(name, value);\n });\n\n resolve(response);\n\n }, function (error$$1) { return handler(error$$1.response); });\n });\n}\n\n/**\n * Base client.\n */\n\nfunction Client (context) {\n\n var reqHandlers = [sendRequest], resHandlers = [];\n\n if (!isObject(context)) {\n context = null;\n }\n\n function Client(request) {\n while (reqHandlers.length) {\n\n var handler = reqHandlers.pop();\n\n if (isFunction(handler)) {\n\n var response = (void 0), next = (void 0);\n\n response = handler.call(context, request, function (val) { return next = val; }) || next;\n\n if (isObject(response)) {\n return new PromiseObj(function (resolve, reject) {\n\n resHandlers.forEach(function (handler) {\n response = when(response, function (response) {\n return handler.call(context, response) || response;\n }, reject);\n });\n\n when(response, resolve, reject);\n\n }, context);\n }\n\n if (isFunction(response)) {\n resHandlers.unshift(response);\n }\n\n } else {\n warn((\"Invalid interceptor of type \" + (typeof handler) + \", must be a function\"));\n }\n }\n }\n\n Client.use = function (handler) {\n reqHandlers.push(handler);\n };\n\n return Client;\n}\n\nfunction sendRequest(request) {\n\n var client = request.client || (inBrowser ? xhrClient : nodeClient);\n\n return client(request);\n}\n\n/**\n * HTTP Headers.\n */\n\nvar Headers = function Headers(headers) {\n var this$1 = this;\n\n\n this.map = {};\n\n each(headers, function (value, name) { return this$1.append(name, value); });\n};\n\nHeaders.prototype.has = function has (name) {\n return getName(this.map, name) !== null;\n};\n\nHeaders.prototype.get = function get (name) {\n\n var list = this.map[getName(this.map, name)];\n\n return list ? list.join() : null;\n};\n\nHeaders.prototype.getAll = function getAll (name) {\n return this.map[getName(this.map, name)] || [];\n};\n\nHeaders.prototype.set = function set (name, value) {\n this.map[normalizeName(getName(this.map, name) || name)] = [trim(value)];\n};\n\nHeaders.prototype.append = function append (name, value) {\n\n var list = this.map[getName(this.map, name)];\n\n if (list) {\n list.push(trim(value));\n } else {\n this.set(name, value);\n }\n};\n\nHeaders.prototype.delete = function delete$1 (name) {\n delete this.map[getName(this.map, name)];\n};\n\nHeaders.prototype.deleteAll = function deleteAll () {\n this.map = {};\n};\n\nHeaders.prototype.forEach = function forEach (callback, thisArg) {\n var this$1 = this;\n\n each(this.map, function (list, name) {\n each(list, function (value) { return callback.call(thisArg, value, name, this$1); });\n });\n};\n\nfunction getName(map, name) {\n return Object.keys(map).reduce(function (prev, curr) {\n return toLower(name) === toLower(curr) ? curr : prev;\n }, null);\n}\n\nfunction normalizeName(name) {\n\n if (/[^a-z0-9\\-#$%&'*+.^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name');\n }\n\n return trim(name);\n}\n\n/**\n * HTTP Response.\n */\n\nvar Response = function Response(body, ref) {\n var url = ref.url;\n var headers = ref.headers;\n var status = ref.status;\n var statusText = ref.statusText;\n\n\n this.url = url;\n this.ok = status >= 200 && status < 300;\n this.status = status || 0;\n this.statusText = statusText || '';\n this.headers = new Headers(headers);\n this.body = body;\n\n if (isString(body)) {\n\n this.bodyText = body;\n\n } else if (isBlob(body)) {\n\n this.bodyBlob = body;\n\n if (isBlobText(body)) {\n this.bodyText = blobText(body);\n }\n }\n};\n\nResponse.prototype.blob = function blob () {\n return when(this.bodyBlob);\n};\n\nResponse.prototype.text = function text () {\n return when(this.bodyText);\n};\n\nResponse.prototype.json = function json () {\n return when(this.text(), function (text) { return JSON.parse(text); });\n};\n\nObject.defineProperty(Response.prototype, 'data', {\n\n get: function get() {\n return this.body;\n },\n\n set: function set(body) {\n this.body = body;\n }\n\n});\n\nfunction blobText(body) {\n return new PromiseObj(function (resolve) {\n\n var reader = new FileReader();\n\n reader.readAsText(body);\n reader.onload = function () {\n resolve(reader.result);\n };\n\n });\n}\n\nfunction isBlobText(body) {\n return body.type.indexOf('text') === 0 || body.type.indexOf('json') !== -1;\n}\n\n/**\n * HTTP Request.\n */\n\nvar Request = function Request(options$$1) {\n\n this.body = null;\n this.params = {};\n\n assign(this, options$$1, {\n method: toUpper(options$$1.method || 'GET')\n });\n\n if (!(this.headers instanceof Headers)) {\n this.headers = new Headers(this.headers);\n }\n};\n\nRequest.prototype.getUrl = function getUrl () {\n return Url(this);\n};\n\nRequest.prototype.getBody = function getBody () {\n return this.body;\n};\n\nRequest.prototype.respondWith = function respondWith (body, options$$1) {\n return new Response(body, assign(options$$1 || {}, {url: this.getUrl()}));\n};\n\n/**\n * Service for sending network requests.\n */\n\nvar COMMON_HEADERS = {'Accept': 'application/json, text/plain, */*'};\nvar JSON_CONTENT_TYPE = {'Content-Type': 'application/json;charset=utf-8'};\n\nfunction Http(options$$1) {\n\n var self = this || {}, client = Client(self.$vm);\n\n defaults(options$$1 || {}, self.$options, Http.options);\n\n Http.interceptors.forEach(function (handler) {\n\n if (isString(handler)) {\n handler = Http.interceptor[handler];\n }\n\n if (isFunction(handler)) {\n client.use(handler);\n }\n\n });\n\n return client(new Request(options$$1)).then(function (response) {\n\n return response.ok ? response : PromiseObj.reject(response);\n\n }, function (response) {\n\n if (response instanceof Error) {\n error(response);\n }\n\n return PromiseObj.reject(response);\n });\n}\n\nHttp.options = {};\n\nHttp.headers = {\n put: JSON_CONTENT_TYPE,\n post: JSON_CONTENT_TYPE,\n patch: JSON_CONTENT_TYPE,\n delete: JSON_CONTENT_TYPE,\n common: COMMON_HEADERS,\n custom: {}\n};\n\nHttp.interceptor = {before: before, method: method, jsonp: jsonp, json: json, form: form, header: header, cors: cors};\nHttp.interceptors = ['before', 'method', 'jsonp', 'json', 'form', 'header', 'cors'];\n\n['get', 'delete', 'head', 'jsonp'].forEach(function (method$$1) {\n\n Http[method$$1] = function (url, options$$1) {\n return this(assign(options$$1 || {}, {url: url, method: method$$1}));\n };\n\n});\n\n['post', 'put', 'patch'].forEach(function (method$$1) {\n\n Http[method$$1] = function (url, body, options$$1) {\n return this(assign(options$$1 || {}, {url: url, method: method$$1, body: body}));\n };\n\n});\n\n/**\n * Service for interacting with RESTful services.\n */\n\nfunction Resource(url, params, actions, options$$1) {\n\n var self = this || {}, resource = {};\n\n actions = assign({},\n Resource.actions,\n actions\n );\n\n each(actions, function (action, name) {\n\n action = merge({url: url, params: assign({}, params)}, options$$1, action);\n\n resource[name] = function () {\n return (self.$http || Http)(opts(action, arguments));\n };\n });\n\n return resource;\n}\n\nfunction opts(action, args) {\n\n var options$$1 = assign({}, action), params = {}, body;\n\n switch (args.length) {\n\n case 2:\n\n params = args[0];\n body = args[1];\n\n break;\n\n case 1:\n\n if (/^(POST|PUT|PATCH)$/i.test(options$$1.method)) {\n body = args[0];\n } else {\n params = args[0];\n }\n\n break;\n\n case 0:\n\n break;\n\n default:\n\n throw 'Expected up to 2 arguments [params, body], got ' + args.length + ' arguments';\n }\n\n options$$1.body = body;\n options$$1.params = assign({}, options$$1.params, params);\n\n return options$$1;\n}\n\nResource.actions = {\n\n get: {method: 'GET'},\n save: {method: 'POST'},\n query: {method: 'GET'},\n update: {method: 'PUT'},\n remove: {method: 'DELETE'},\n delete: {method: 'DELETE'}\n\n};\n\n/**\n * Install plugin.\n */\n\nfunction plugin(Vue) {\n\n if (plugin.installed) {\n return;\n }\n\n Util(Vue);\n\n Vue.url = Url;\n Vue.http = Http;\n Vue.resource = Resource;\n Vue.Promise = PromiseObj;\n\n Object.defineProperties(Vue.prototype, {\n\n $url: {\n get: function get() {\n return options(Vue.url, this, this.$options.url);\n }\n },\n\n $http: {\n get: function get() {\n return options(Vue.http, this, this.$options.http);\n }\n },\n\n $resource: {\n get: function get() {\n return Vue.resource.bind(this);\n }\n },\n\n $promise: {\n get: function get() {\n var this$1 = this;\n\n return function (executor) { return new Vue.Promise(executor, this$1); };\n }\n }\n\n });\n}\n\nif (typeof window !== 'undefined' && window.Vue) {\n window.Vue.use(plugin);\n}\n\nexport default plugin;\nexport { Url, Http, Resource };\n","/*!\n * vue-router v3.1.3\n * (c) 2019 Evan You\n * @license MIT\n */\n/* */\n\nfunction assert (condition, message) {\n if (!condition) {\n throw new Error((\"[vue-router] \" + message))\n }\n}\n\nfunction warn (condition, message) {\n if (process.env.NODE_ENV !== 'production' && !condition) {\n typeof console !== 'undefined' && console.warn((\"[vue-router] \" + message));\n }\n}\n\nfunction isError (err) {\n return Object.prototype.toString.call(err).indexOf('Error') > -1\n}\n\nfunction isExtendedError (constructor, err) {\n return (\n err instanceof constructor ||\n // _name is to support IE9 too\n (err && (err.name === constructor.name || err._name === constructor._name))\n )\n}\n\nfunction extend (a, b) {\n for (var key in b) {\n a[key] = b[key];\n }\n return a\n}\n\nvar View = {\n name: 'RouterView',\n functional: true,\n props: {\n name: {\n type: String,\n default: 'default'\n }\n },\n render: function render (_, ref) {\n var props = ref.props;\n var children = ref.children;\n var parent = ref.parent;\n var data = ref.data;\n\n // used by devtools to display a router-view badge\n data.routerView = true;\n\n // directly use parent context's createElement() function\n // so that components rendered by router-view can resolve named slots\n var h = parent.$createElement;\n var name = props.name;\n var route = parent.$route;\n var cache = parent._routerViewCache || (parent._routerViewCache = {});\n\n // determine current view depth, also check to see if the tree\n // has been toggled inactive but kept-alive.\n var depth = 0;\n var inactive = false;\n while (parent && parent._routerRoot !== parent) {\n var vnodeData = parent.$vnode && parent.$vnode.data;\n if (vnodeData) {\n if (vnodeData.routerView) {\n depth++;\n }\n if (vnodeData.keepAlive && parent._inactive) {\n inactive = true;\n }\n }\n parent = parent.$parent;\n }\n data.routerViewDepth = depth;\n\n // render previous view if the tree is inactive and kept-alive\n if (inactive) {\n return h(cache[name], data, children)\n }\n\n var matched = route.matched[depth];\n // render empty node if no matched route\n if (!matched) {\n cache[name] = null;\n return h()\n }\n\n var component = cache[name] = matched.components[name];\n\n // attach instance registration hook\n // this will be called in the instance's injected lifecycle hooks\n data.registerRouteInstance = function (vm, val) {\n // val could be undefined for unregistration\n var current = matched.instances[name];\n if (\n (val && current !== vm) ||\n (!val && current === vm)\n ) {\n matched.instances[name] = val;\n }\n }\n\n // also register instance in prepatch hook\n // in case the same component instance is reused across different routes\n ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) {\n matched.instances[name] = vnode.componentInstance;\n };\n\n // register instance in init hook\n // in case kept-alive component be actived when routes changed\n data.hook.init = function (vnode) {\n if (vnode.data.keepAlive &&\n vnode.componentInstance &&\n vnode.componentInstance !== matched.instances[name]\n ) {\n matched.instances[name] = vnode.componentInstance;\n }\n };\n\n // resolve props\n var propsToPass = data.props = resolveProps(route, matched.props && matched.props[name]);\n if (propsToPass) {\n // clone to prevent mutation\n propsToPass = data.props = extend({}, propsToPass);\n // pass non-declared props as attrs\n var attrs = data.attrs = data.attrs || {};\n for (var key in propsToPass) {\n if (!component.props || !(key in component.props)) {\n attrs[key] = propsToPass[key];\n delete propsToPass[key];\n }\n }\n }\n\n return h(component, data, children)\n }\n};\n\nfunction resolveProps (route, config) {\n switch (typeof config) {\n case 'undefined':\n return\n case 'object':\n return config\n case 'function':\n return config(route)\n case 'boolean':\n return config ? route.params : undefined\n default:\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false,\n \"props in \\\"\" + (route.path) + \"\\\" is a \" + (typeof config) + \", \" +\n \"expecting an object, function or boolean.\"\n );\n }\n }\n}\n\n/* */\n\nvar encodeReserveRE = /[!'()*]/g;\nvar encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); };\nvar commaRE = /%2C/g;\n\n// fixed encodeURIComponent which is more conformant to RFC3986:\n// - escapes [!'()*]\n// - preserve commas\nvar encode = function (str) { return encodeURIComponent(str)\n .replace(encodeReserveRE, encodeReserveReplacer)\n .replace(commaRE, ','); };\n\nvar decode = decodeURIComponent;\n\nfunction resolveQuery (\n query,\n extraQuery,\n _parseQuery\n) {\n if ( extraQuery === void 0 ) extraQuery = {};\n\n var parse = _parseQuery || parseQuery;\n var parsedQuery;\n try {\n parsedQuery = parse(query || '');\n } catch (e) {\n process.env.NODE_ENV !== 'production' && warn(false, e.message);\n parsedQuery = {};\n }\n for (var key in extraQuery) {\n parsedQuery[key] = extraQuery[key];\n }\n return parsedQuery\n}\n\nfunction parseQuery (query) {\n var res = {};\n\n query = query.trim().replace(/^(\\?|#|&)/, '');\n\n if (!query) {\n return res\n }\n\n query.split('&').forEach(function (param) {\n var parts = param.replace(/\\+/g, ' ').split('=');\n var key = decode(parts.shift());\n var val = parts.length > 0\n ? decode(parts.join('='))\n : null;\n\n if (res[key] === undefined) {\n res[key] = val;\n } else if (Array.isArray(res[key])) {\n res[key].push(val);\n } else {\n res[key] = [res[key], val];\n }\n });\n\n return res\n}\n\nfunction stringifyQuery (obj) {\n var res = obj ? Object.keys(obj).map(function (key) {\n var val = obj[key];\n\n if (val === undefined) {\n return ''\n }\n\n if (val === null) {\n return encode(key)\n }\n\n if (Array.isArray(val)) {\n var result = [];\n val.forEach(function (val2) {\n if (val2 === undefined) {\n return\n }\n if (val2 === null) {\n result.push(encode(key));\n } else {\n result.push(encode(key) + '=' + encode(val2));\n }\n });\n return result.join('&')\n }\n\n return encode(key) + '=' + encode(val)\n }).filter(function (x) { return x.length > 0; }).join('&') : null;\n return res ? (\"?\" + res) : ''\n}\n\n/* */\n\nvar trailingSlashRE = /\\/?$/;\n\nfunction createRoute (\n record,\n location,\n redirectedFrom,\n router\n) {\n var stringifyQuery = router && router.options.stringifyQuery;\n\n var query = location.query || {};\n try {\n query = clone(query);\n } catch (e) {}\n\n var route = {\n name: location.name || (record && record.name),\n meta: (record && record.meta) || {},\n path: location.path || '/',\n hash: location.hash || '',\n query: query,\n params: location.params || {},\n fullPath: getFullPath(location, stringifyQuery),\n matched: record ? formatMatch(record) : []\n };\n if (redirectedFrom) {\n route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery);\n }\n return Object.freeze(route)\n}\n\nfunction clone (value) {\n if (Array.isArray(value)) {\n return value.map(clone)\n } else if (value && typeof value === 'object') {\n var res = {};\n for (var key in value) {\n res[key] = clone(value[key]);\n }\n return res\n } else {\n return value\n }\n}\n\n// the starting route that represents the initial state\nvar START = createRoute(null, {\n path: '/'\n});\n\nfunction formatMatch (record) {\n var res = [];\n while (record) {\n res.unshift(record);\n record = record.parent;\n }\n return res\n}\n\nfunction getFullPath (\n ref,\n _stringifyQuery\n) {\n var path = ref.path;\n var query = ref.query; if ( query === void 0 ) query = {};\n var hash = ref.hash; if ( hash === void 0 ) hash = '';\n\n var stringify = _stringifyQuery || stringifyQuery;\n return (path || '/') + stringify(query) + hash\n}\n\nfunction isSameRoute (a, b) {\n if (b === START) {\n return a === b\n } else if (!b) {\n return false\n } else if (a.path && b.path) {\n return (\n a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') &&\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query)\n )\n } else if (a.name && b.name) {\n return (\n a.name === b.name &&\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query) &&\n isObjectEqual(a.params, b.params)\n )\n } else {\n return false\n }\n}\n\nfunction isObjectEqual (a, b) {\n if ( a === void 0 ) a = {};\n if ( b === void 0 ) b = {};\n\n // handle null value #1566\n if (!a || !b) { return a === b }\n var aKeys = Object.keys(a);\n var bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) {\n return false\n }\n return aKeys.every(function (key) {\n var aVal = a[key];\n var bVal = b[key];\n // check nested equality\n if (typeof aVal === 'object' && typeof bVal === 'object') {\n return isObjectEqual(aVal, bVal)\n }\n return String(aVal) === String(bVal)\n })\n}\n\nfunction isIncludedRoute (current, target) {\n return (\n current.path.replace(trailingSlashRE, '/').indexOf(\n target.path.replace(trailingSlashRE, '/')\n ) === 0 &&\n (!target.hash || current.hash === target.hash) &&\n queryIncludes(current.query, target.query)\n )\n}\n\nfunction queryIncludes (current, target) {\n for (var key in target) {\n if (!(key in current)) {\n return false\n }\n }\n return true\n}\n\n/* */\n\nfunction resolvePath (\n relative,\n base,\n append\n) {\n var firstChar = relative.charAt(0);\n if (firstChar === '/') {\n return relative\n }\n\n if (firstChar === '?' || firstChar === '#') {\n return base + relative\n }\n\n var stack = base.split('/');\n\n // remove trailing segment if:\n // - not appending\n // - appending to trailing slash (last segment is empty)\n if (!append || !stack[stack.length - 1]) {\n stack.pop();\n }\n\n // resolve relative path\n var segments = relative.replace(/^\\//, '').split('/');\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n if (segment === '..') {\n stack.pop();\n } else if (segment !== '.') {\n stack.push(segment);\n }\n }\n\n // ensure leading slash\n if (stack[0] !== '') {\n stack.unshift('');\n }\n\n return stack.join('/')\n}\n\nfunction parsePath (path) {\n var hash = '';\n var query = '';\n\n var hashIndex = path.indexOf('#');\n if (hashIndex >= 0) {\n hash = path.slice(hashIndex);\n path = path.slice(0, hashIndex);\n }\n\n var queryIndex = path.indexOf('?');\n if (queryIndex >= 0) {\n query = path.slice(queryIndex + 1);\n path = path.slice(0, queryIndex);\n }\n\n return {\n path: path,\n query: query,\n hash: hash\n }\n}\n\nfunction cleanPath (path) {\n return path.replace(/\\/\\//g, '/')\n}\n\nvar isarray = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n/**\n * Expose `pathToRegexp`.\n */\nvar pathToRegexp_1 = pathToRegexp;\nvar parse_1 = parse;\nvar compile_1 = compile;\nvar tokensToFunction_1 = tokensToFunction;\nvar tokensToRegExp_1 = tokensToRegExp;\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g');\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = [];\n var key = 0;\n var index = 0;\n var path = '';\n var defaultDelimiter = options && options.delimiter || '/';\n var res;\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0];\n var escaped = res[1];\n var offset = res.index;\n path += str.slice(index, offset);\n index = offset + m.length;\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1];\n continue\n }\n\n var next = str[index];\n var prefix = res[2];\n var name = res[3];\n var capture = res[4];\n var group = res[5];\n var modifier = res[6];\n var asterisk = res[7];\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path);\n path = '';\n }\n\n var partial = prefix != null && next != null && next !== prefix;\n var repeat = modifier === '+' || modifier === '*';\n var optional = modifier === '?' || modifier === '*';\n var delimiter = res[2] || defaultDelimiter;\n var pattern = capture || group;\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n });\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index);\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path);\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options))\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length);\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$');\n }\n }\n\n return function (obj, opts) {\n var path = '';\n var data = obj || {};\n var options = opts || {};\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n path += token;\n\n continue\n }\n\n var value = data[token.name];\n var segment;\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix;\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j]);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment;\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment;\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys;\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g);\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n });\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = [];\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source);\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options);\n keys = [];\n }\n\n options = options || {};\n\n var strict = options.strict;\n var end = options.end !== false;\n var route = '';\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n route += escapeString(token);\n } else {\n var prefix = escapeString(token.prefix);\n var capture = '(?:' + token.pattern + ')';\n\n keys.push(token);\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*';\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?';\n } else {\n capture = prefix + '(' + capture + ')?';\n }\n } else {\n capture = prefix + '(' + capture + ')';\n }\n\n route += capture;\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/');\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter;\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?';\n }\n\n if (end) {\n route += '$';\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)';\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options);\n keys = [];\n }\n\n options = options || {};\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\npathToRegexp_1.parse = parse_1;\npathToRegexp_1.compile = compile_1;\npathToRegexp_1.tokensToFunction = tokensToFunction_1;\npathToRegexp_1.tokensToRegExp = tokensToRegExp_1;\n\n/* */\n\n// $flow-disable-line\nvar regexpCompileCache = Object.create(null);\n\nfunction fillParams (\n path,\n params,\n routeMsg\n) {\n params = params || {};\n try {\n var filler =\n regexpCompileCache[path] ||\n (regexpCompileCache[path] = pathToRegexp_1.compile(path));\n\n // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }}\n if (params.pathMatch) { params[0] = params.pathMatch; }\n\n return filler(params, { pretty: true })\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, (\"missing param for \" + routeMsg + \": \" + (e.message)));\n }\n return ''\n } finally {\n // delete the 0 if it was added\n delete params[0];\n }\n}\n\n/* */\n\nfunction normalizeLocation (\n raw,\n current,\n append,\n router\n) {\n var next = typeof raw === 'string' ? { path: raw } : raw;\n // named target\n if (next._normalized) {\n return next\n } else if (next.name) {\n return extend({}, raw)\n }\n\n // relative params\n if (!next.path && next.params && current) {\n next = extend({}, next);\n next._normalized = true;\n var params = extend(extend({}, current.params), next.params);\n if (current.name) {\n next.name = current.name;\n next.params = params;\n } else if (current.matched.length) {\n var rawPath = current.matched[current.matched.length - 1].path;\n next.path = fillParams(rawPath, params, (\"path \" + (current.path)));\n } else if (process.env.NODE_ENV !== 'production') {\n warn(false, \"relative params navigation requires a current route.\");\n }\n return next\n }\n\n var parsedPath = parsePath(next.path || '');\n var basePath = (current && current.path) || '/';\n var path = parsedPath.path\n ? resolvePath(parsedPath.path, basePath, append || next.append)\n : basePath;\n\n var query = resolveQuery(\n parsedPath.query,\n next.query,\n router && router.options.parseQuery\n );\n\n var hash = next.hash || parsedPath.hash;\n if (hash && hash.charAt(0) !== '#') {\n hash = \"#\" + hash;\n }\n\n return {\n _normalized: true,\n path: path,\n query: query,\n hash: hash\n }\n}\n\n/* */\n\n// work around weird flow bug\nvar toTypes = [String, Object];\nvar eventTypes = [String, Array];\n\nvar noop = function () {};\n\nvar Link = {\n name: 'RouterLink',\n props: {\n to: {\n type: toTypes,\n required: true\n },\n tag: {\n type: String,\n default: 'a'\n },\n exact: Boolean,\n append: Boolean,\n replace: Boolean,\n activeClass: String,\n exactActiveClass: String,\n event: {\n type: eventTypes,\n default: 'click'\n }\n },\n render: function render (h) {\n var this$1 = this;\n\n var router = this.$router;\n var current = this.$route;\n var ref = router.resolve(\n this.to,\n current,\n this.append\n );\n var location = ref.location;\n var route = ref.route;\n var href = ref.href;\n\n var classes = {};\n var globalActiveClass = router.options.linkActiveClass;\n var globalExactActiveClass = router.options.linkExactActiveClass;\n // Support global empty active class\n var activeClassFallback =\n globalActiveClass == null ? 'router-link-active' : globalActiveClass;\n var exactActiveClassFallback =\n globalExactActiveClass == null\n ? 'router-link-exact-active'\n : globalExactActiveClass;\n var activeClass =\n this.activeClass == null ? activeClassFallback : this.activeClass;\n var exactActiveClass =\n this.exactActiveClass == null\n ? exactActiveClassFallback\n : this.exactActiveClass;\n\n var compareTarget = route.redirectedFrom\n ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router)\n : route;\n\n classes[exactActiveClass] = isSameRoute(current, compareTarget);\n classes[activeClass] = this.exact\n ? classes[exactActiveClass]\n : isIncludedRoute(current, compareTarget);\n\n var handler = function (e) {\n if (guardEvent(e)) {\n if (this$1.replace) {\n router.replace(location, noop);\n } else {\n router.push(location, noop);\n }\n }\n };\n\n var on = { click: guardEvent };\n if (Array.isArray(this.event)) {\n this.event.forEach(function (e) {\n on[e] = handler;\n });\n } else {\n on[this.event] = handler;\n }\n\n var data = { class: classes };\n\n var scopedSlot =\n !this.$scopedSlots.$hasNormal &&\n this.$scopedSlots.default &&\n this.$scopedSlots.default({\n href: href,\n route: route,\n navigate: handler,\n isActive: classes[activeClass],\n isExactActive: classes[exactActiveClass]\n });\n\n if (scopedSlot) {\n if (scopedSlot.length === 1) {\n return scopedSlot[0]\n } else if (scopedSlot.length > 1 || !scopedSlot.length) {\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false,\n (\"RouterLink with to=\\\"\" + (this.props.to) + \"\\\" is trying to use a scoped slot but it didn't provide exactly one child.\")\n );\n }\n return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot)\n }\n }\n\n if (this.tag === 'a') {\n data.on = on;\n data.attrs = { href: href };\n } else {\n // find the first child and apply listener and href\n var a = findAnchor(this.$slots.default);\n if (a) {\n // in case the is a static node\n a.isStatic = false;\n var aData = (a.data = extend({}, a.data));\n aData.on = aData.on || {};\n // transform existing events in both objects into arrays so we can push later\n for (var event in aData.on) {\n var handler$1 = aData.on[event];\n if (event in on) {\n aData.on[event] = Array.isArray(handler$1) ? handler$1 : [handler$1];\n }\n }\n // append new listeners for router-link\n for (var event$1 in on) {\n if (event$1 in aData.on) {\n // on[event] is always a function\n aData.on[event$1].push(on[event$1]);\n } else {\n aData.on[event$1] = handler;\n }\n }\n\n var aAttrs = (a.data.attrs = extend({}, a.data.attrs));\n aAttrs.href = href;\n } else {\n // doesn't have child, apply listener to self\n data.on = on;\n }\n }\n\n return h(this.tag, data, this.$slots.default)\n }\n};\n\nfunction guardEvent (e) {\n // don't redirect with control keys\n if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return }\n // don't redirect when preventDefault called\n if (e.defaultPrevented) { return }\n // don't redirect on right click\n if (e.button !== undefined && e.button !== 0) { return }\n // don't redirect if `target=\"_blank\"`\n if (e.currentTarget && e.currentTarget.getAttribute) {\n var target = e.currentTarget.getAttribute('target');\n if (/\\b_blank\\b/i.test(target)) { return }\n }\n // this may be a Weex event which doesn't have this method\n if (e.preventDefault) {\n e.preventDefault();\n }\n return true\n}\n\nfunction findAnchor (children) {\n if (children) {\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (child.tag === 'a') {\n return child\n }\n if (child.children && (child = findAnchor(child.children))) {\n return child\n }\n }\n }\n}\n\nvar _Vue;\n\nfunction install (Vue) {\n if (install.installed && _Vue === Vue) { return }\n install.installed = true;\n\n _Vue = Vue;\n\n var isDef = function (v) { return v !== undefined; };\n\n var registerInstance = function (vm, callVal) {\n var i = vm.$options._parentVnode;\n if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {\n i(vm, callVal);\n }\n };\n\n Vue.mixin({\n beforeCreate: function beforeCreate () {\n if (isDef(this.$options.router)) {\n this._routerRoot = this;\n this._router = this.$options.router;\n this._router.init(this);\n Vue.util.defineReactive(this, '_route', this._router.history.current);\n } else {\n this._routerRoot = (this.$parent && this.$parent._routerRoot) || this;\n }\n registerInstance(this, this);\n },\n destroyed: function destroyed () {\n registerInstance(this);\n }\n });\n\n Object.defineProperty(Vue.prototype, '$router', {\n get: function get () { return this._routerRoot._router }\n });\n\n Object.defineProperty(Vue.prototype, '$route', {\n get: function get () { return this._routerRoot._route }\n });\n\n Vue.component('RouterView', View);\n Vue.component('RouterLink', Link);\n\n var strats = Vue.config.optionMergeStrategies;\n // use the same hook merging strategy for route hooks\n strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created;\n}\n\n/* */\n\nvar inBrowser = typeof window !== 'undefined';\n\n/* */\n\nfunction createRouteMap (\n routes,\n oldPathList,\n oldPathMap,\n oldNameMap\n) {\n // the path list is used to control path matching priority\n var pathList = oldPathList || [];\n // $flow-disable-line\n var pathMap = oldPathMap || Object.create(null);\n // $flow-disable-line\n var nameMap = oldNameMap || Object.create(null);\n\n routes.forEach(function (route) {\n addRouteRecord(pathList, pathMap, nameMap, route);\n });\n\n // ensure wildcard routes are always at the end\n for (var i = 0, l = pathList.length; i < l; i++) {\n if (pathList[i] === '*') {\n pathList.push(pathList.splice(i, 1)[0]);\n l--;\n i--;\n }\n }\n\n if (process.env.NODE_ENV === 'development') {\n // warn if routes do not include leading slashes\n var found = pathList\n // check for missing leading slash\n .filter(function (path) { return path && path.charAt(0) !== '*' && path.charAt(0) !== '/'; });\n\n if (found.length > 0) {\n var pathNames = found.map(function (path) { return (\"- \" + path); }).join('\\n');\n warn(false, (\"Non-nested routes must include a leading slash character. Fix the following routes: \\n\" + pathNames));\n }\n }\n\n return {\n pathList: pathList,\n pathMap: pathMap,\n nameMap: nameMap\n }\n}\n\nfunction addRouteRecord (\n pathList,\n pathMap,\n nameMap,\n route,\n parent,\n matchAs\n) {\n var path = route.path;\n var name = route.name;\n if (process.env.NODE_ENV !== 'production') {\n assert(path != null, \"\\\"path\\\" is required in a route configuration.\");\n assert(\n typeof route.component !== 'string',\n \"route config \\\"component\\\" for path: \" + (String(\n path || name\n )) + \" cannot be a \" + \"string id. Use an actual component instead.\"\n );\n }\n\n var pathToRegexpOptions =\n route.pathToRegexpOptions || {};\n var normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict);\n\n if (typeof route.caseSensitive === 'boolean') {\n pathToRegexpOptions.sensitive = route.caseSensitive;\n }\n\n var record = {\n path: normalizedPath,\n regex: compileRouteRegex(normalizedPath, pathToRegexpOptions),\n components: route.components || { default: route.component },\n instances: {},\n name: name,\n parent: parent,\n matchAs: matchAs,\n redirect: route.redirect,\n beforeEnter: route.beforeEnter,\n meta: route.meta || {},\n props:\n route.props == null\n ? {}\n : route.components\n ? route.props\n : { default: route.props }\n };\n\n if (route.children) {\n // Warn if route is named, does not redirect and has a default child route.\n // If users navigate to this route by name, the default child will\n // not be rendered (GH Issue #629)\n if (process.env.NODE_ENV !== 'production') {\n if (\n route.name &&\n !route.redirect &&\n route.children.some(function (child) { return /^\\/?$/.test(child.path); })\n ) {\n warn(\n false,\n \"Named Route '\" + (route.name) + \"' has a default child route. \" +\n \"When navigating to this named route (:to=\\\"{name: '\" + (route.name) + \"'\\\"), \" +\n \"the default child route will not be rendered. Remove the name from \" +\n \"this route and use the name of the default child route for named \" +\n \"links instead.\"\n );\n }\n }\n route.children.forEach(function (child) {\n var childMatchAs = matchAs\n ? cleanPath((matchAs + \"/\" + (child.path)))\n : undefined;\n addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs);\n });\n }\n\n if (!pathMap[record.path]) {\n pathList.push(record.path);\n pathMap[record.path] = record;\n }\n\n if (route.alias !== undefined) {\n var aliases = Array.isArray(route.alias) ? route.alias : [route.alias];\n for (var i = 0; i < aliases.length; ++i) {\n var alias = aliases[i];\n if (process.env.NODE_ENV !== 'production' && alias === path) {\n warn(\n false,\n (\"Found an alias with the same value as the path: \\\"\" + path + \"\\\". You have to remove that alias. It will be ignored in development.\")\n );\n // skip in dev to make it work\n continue\n }\n\n var aliasRoute = {\n path: alias,\n children: route.children\n };\n addRouteRecord(\n pathList,\n pathMap,\n nameMap,\n aliasRoute,\n parent,\n record.path || '/' // matchAs\n );\n }\n }\n\n if (name) {\n if (!nameMap[name]) {\n nameMap[name] = record;\n } else if (process.env.NODE_ENV !== 'production' && !matchAs) {\n warn(\n false,\n \"Duplicate named routes definition: \" +\n \"{ name: \\\"\" + name + \"\\\", path: \\\"\" + (record.path) + \"\\\" }\"\n );\n }\n }\n}\n\nfunction compileRouteRegex (\n path,\n pathToRegexpOptions\n) {\n var regex = pathToRegexp_1(path, [], pathToRegexpOptions);\n if (process.env.NODE_ENV !== 'production') {\n var keys = Object.create(null);\n regex.keys.forEach(function (key) {\n warn(\n !keys[key.name],\n (\"Duplicate param keys in route with path: \\\"\" + path + \"\\\"\")\n );\n keys[key.name] = true;\n });\n }\n return regex\n}\n\nfunction normalizePath (\n path,\n parent,\n strict\n) {\n if (!strict) { path = path.replace(/\\/$/, ''); }\n if (path[0] === '/') { return path }\n if (parent == null) { return path }\n return cleanPath(((parent.path) + \"/\" + path))\n}\n\n/* */\n\n\n\nfunction createMatcher (\n routes,\n router\n) {\n var ref = createRouteMap(routes);\n var pathList = ref.pathList;\n var pathMap = ref.pathMap;\n var nameMap = ref.nameMap;\n\n function addRoutes (routes) {\n createRouteMap(routes, pathList, pathMap, nameMap);\n }\n\n function match (\n raw,\n currentRoute,\n redirectedFrom\n ) {\n var location = normalizeLocation(raw, currentRoute, false, router);\n var name = location.name;\n\n if (name) {\n var record = nameMap[name];\n if (process.env.NODE_ENV !== 'production') {\n warn(record, (\"Route with name '\" + name + \"' does not exist\"));\n }\n if (!record) { return _createRoute(null, location) }\n var paramNames = record.regex.keys\n .filter(function (key) { return !key.optional; })\n .map(function (key) { return key.name; });\n\n if (typeof location.params !== 'object') {\n location.params = {};\n }\n\n if (currentRoute && typeof currentRoute.params === 'object') {\n for (var key in currentRoute.params) {\n if (!(key in location.params) && paramNames.indexOf(key) > -1) {\n location.params[key] = currentRoute.params[key];\n }\n }\n }\n\n location.path = fillParams(record.path, location.params, (\"named route \\\"\" + name + \"\\\"\"));\n return _createRoute(record, location, redirectedFrom)\n } else if (location.path) {\n location.params = {};\n for (var i = 0; i < pathList.length; i++) {\n var path = pathList[i];\n var record$1 = pathMap[path];\n if (matchRoute(record$1.regex, location.path, location.params)) {\n return _createRoute(record$1, location, redirectedFrom)\n }\n }\n }\n // no match\n return _createRoute(null, location)\n }\n\n function redirect (\n record,\n location\n ) {\n var originalRedirect = record.redirect;\n var redirect = typeof originalRedirect === 'function'\n ? originalRedirect(createRoute(record, location, null, router))\n : originalRedirect;\n\n if (typeof redirect === 'string') {\n redirect = { path: redirect };\n }\n\n if (!redirect || typeof redirect !== 'object') {\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false, (\"invalid redirect option: \" + (JSON.stringify(redirect)))\n );\n }\n return _createRoute(null, location)\n }\n\n var re = redirect;\n var name = re.name;\n var path = re.path;\n var query = location.query;\n var hash = location.hash;\n var params = location.params;\n query = re.hasOwnProperty('query') ? re.query : query;\n hash = re.hasOwnProperty('hash') ? re.hash : hash;\n params = re.hasOwnProperty('params') ? re.params : params;\n\n if (name) {\n // resolved named direct\n var targetRecord = nameMap[name];\n if (process.env.NODE_ENV !== 'production') {\n assert(targetRecord, (\"redirect failed: named route \\\"\" + name + \"\\\" not found.\"));\n }\n return match({\n _normalized: true,\n name: name,\n query: query,\n hash: hash,\n params: params\n }, undefined, location)\n } else if (path) {\n // 1. resolve relative redirect\n var rawPath = resolveRecordPath(path, record);\n // 2. resolve params\n var resolvedPath = fillParams(rawPath, params, (\"redirect route with path \\\"\" + rawPath + \"\\\"\"));\n // 3. rematch with existing query and hash\n return match({\n _normalized: true,\n path: resolvedPath,\n query: query,\n hash: hash\n }, undefined, location)\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, (\"invalid redirect option: \" + (JSON.stringify(redirect))));\n }\n return _createRoute(null, location)\n }\n }\n\n function alias (\n record,\n location,\n matchAs\n ) {\n var aliasedPath = fillParams(matchAs, location.params, (\"aliased route with path \\\"\" + matchAs + \"\\\"\"));\n var aliasedMatch = match({\n _normalized: true,\n path: aliasedPath\n });\n if (aliasedMatch) {\n var matched = aliasedMatch.matched;\n var aliasedRecord = matched[matched.length - 1];\n location.params = aliasedMatch.params;\n return _createRoute(aliasedRecord, location)\n }\n return _createRoute(null, location)\n }\n\n function _createRoute (\n record,\n location,\n redirectedFrom\n ) {\n if (record && record.redirect) {\n return redirect(record, redirectedFrom || location)\n }\n if (record && record.matchAs) {\n return alias(record, location, record.matchAs)\n }\n return createRoute(record, location, redirectedFrom, router)\n }\n\n return {\n match: match,\n addRoutes: addRoutes\n }\n}\n\nfunction matchRoute (\n regex,\n path,\n params\n) {\n var m = path.match(regex);\n\n if (!m) {\n return false\n } else if (!params) {\n return true\n }\n\n for (var i = 1, len = m.length; i < len; ++i) {\n var key = regex.keys[i - 1];\n var val = typeof m[i] === 'string' ? decodeURIComponent(m[i]) : m[i];\n if (key) {\n // Fix #1994: using * with props: true generates a param named 0\n params[key.name || 'pathMatch'] = val;\n }\n }\n\n return true\n}\n\nfunction resolveRecordPath (path, record) {\n return resolvePath(path, record.parent ? record.parent.path : '/', true)\n}\n\n/* */\n\n// use User Timing api (if present) for more accurate key precision\nvar Time =\n inBrowser && window.performance && window.performance.now\n ? window.performance\n : Date;\n\nfunction genStateKey () {\n return Time.now().toFixed(3)\n}\n\nvar _key = genStateKey();\n\nfunction getStateKey () {\n return _key\n}\n\nfunction setStateKey (key) {\n return (_key = key)\n}\n\n/* */\n\nvar positionStore = Object.create(null);\n\nfunction setupScroll () {\n // Fix for #1585 for Firefox\n // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678\n // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with\n // window.location.protocol + '//' + window.location.host\n // location.host contains the port and location.hostname doesn't\n var protocolAndPath = window.location.protocol + '//' + window.location.host;\n var absolutePath = window.location.href.replace(protocolAndPath, '');\n window.history.replaceState({ key: getStateKey() }, '', absolutePath);\n window.addEventListener('popstate', function (e) {\n saveScrollPosition();\n if (e.state && e.state.key) {\n setStateKey(e.state.key);\n }\n });\n}\n\nfunction handleScroll (\n router,\n to,\n from,\n isPop\n) {\n if (!router.app) {\n return\n }\n\n var behavior = router.options.scrollBehavior;\n if (!behavior) {\n return\n }\n\n if (process.env.NODE_ENV !== 'production') {\n assert(typeof behavior === 'function', \"scrollBehavior must be a function\");\n }\n\n // wait until re-render finishes before scrolling\n router.app.$nextTick(function () {\n var position = getScrollPosition();\n var shouldScroll = behavior.call(\n router,\n to,\n from,\n isPop ? position : null\n );\n\n if (!shouldScroll) {\n return\n }\n\n if (typeof shouldScroll.then === 'function') {\n shouldScroll\n .then(function (shouldScroll) {\n scrollToPosition((shouldScroll), position);\n })\n .catch(function (err) {\n if (process.env.NODE_ENV !== 'production') {\n assert(false, err.toString());\n }\n });\n } else {\n scrollToPosition(shouldScroll, position);\n }\n });\n}\n\nfunction saveScrollPosition () {\n var key = getStateKey();\n if (key) {\n positionStore[key] = {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n }\n}\n\nfunction getScrollPosition () {\n var key = getStateKey();\n if (key) {\n return positionStore[key]\n }\n}\n\nfunction getElementPosition (el, offset) {\n var docEl = document.documentElement;\n var docRect = docEl.getBoundingClientRect();\n var elRect = el.getBoundingClientRect();\n return {\n x: elRect.left - docRect.left - offset.x,\n y: elRect.top - docRect.top - offset.y\n }\n}\n\nfunction isValidPosition (obj) {\n return isNumber(obj.x) || isNumber(obj.y)\n}\n\nfunction normalizePosition (obj) {\n return {\n x: isNumber(obj.x) ? obj.x : window.pageXOffset,\n y: isNumber(obj.y) ? obj.y : window.pageYOffset\n }\n}\n\nfunction normalizeOffset (obj) {\n return {\n x: isNumber(obj.x) ? obj.x : 0,\n y: isNumber(obj.y) ? obj.y : 0\n }\n}\n\nfunction isNumber (v) {\n return typeof v === 'number'\n}\n\nvar hashStartsWithNumberRE = /^#\\d/;\n\nfunction scrollToPosition (shouldScroll, position) {\n var isObject = typeof shouldScroll === 'object';\n if (isObject && typeof shouldScroll.selector === 'string') {\n // getElementById would still fail if the selector contains a more complicated query like #main[data-attr]\n // but at the same time, it doesn't make much sense to select an element with an id and an extra selector\n var el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line\n ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line\n : document.querySelector(shouldScroll.selector);\n\n if (el) {\n var offset =\n shouldScroll.offset && typeof shouldScroll.offset === 'object'\n ? shouldScroll.offset\n : {};\n offset = normalizeOffset(offset);\n position = getElementPosition(el, offset);\n } else if (isValidPosition(shouldScroll)) {\n position = normalizePosition(shouldScroll);\n }\n } else if (isObject && isValidPosition(shouldScroll)) {\n position = normalizePosition(shouldScroll);\n }\n\n if (position) {\n window.scrollTo(position.x, position.y);\n }\n}\n\n/* */\n\nvar supportsPushState =\n inBrowser &&\n (function () {\n var ua = window.navigator.userAgent;\n\n if (\n (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&\n ua.indexOf('Mobile Safari') !== -1 &&\n ua.indexOf('Chrome') === -1 &&\n ua.indexOf('Windows Phone') === -1\n ) {\n return false\n }\n\n return window.history && 'pushState' in window.history\n })();\n\nfunction pushState (url, replace) {\n saveScrollPosition();\n // try...catch the pushState call to get around Safari\n // DOM Exception 18 where it limits to 100 pushState calls\n var history = window.history;\n try {\n if (replace) {\n history.replaceState({ key: getStateKey() }, '', url);\n } else {\n history.pushState({ key: setStateKey(genStateKey()) }, '', url);\n }\n } catch (e) {\n window.location[replace ? 'replace' : 'assign'](url);\n }\n}\n\nfunction replaceState (url) {\n pushState(url, true);\n}\n\n/* */\n\nfunction runQueue (queue, fn, cb) {\n var step = function (index) {\n if (index >= queue.length) {\n cb();\n } else {\n if (queue[index]) {\n fn(queue[index], function () {\n step(index + 1);\n });\n } else {\n step(index + 1);\n }\n }\n };\n step(0);\n}\n\n/* */\n\nfunction resolveAsyncComponents (matched) {\n return function (to, from, next) {\n var hasAsync = false;\n var pending = 0;\n var error = null;\n\n flatMapComponents(matched, function (def, _, match, key) {\n // if it's a function and doesn't have cid attached,\n // assume it's an async component resolve function.\n // we are not using Vue's default async resolving mechanism because\n // we want to halt the navigation until the incoming component has been\n // resolved.\n if (typeof def === 'function' && def.cid === undefined) {\n hasAsync = true;\n pending++;\n\n var resolve = once(function (resolvedDef) {\n if (isESModule(resolvedDef)) {\n resolvedDef = resolvedDef.default;\n }\n // save resolved on async factory in case it's used elsewhere\n def.resolved = typeof resolvedDef === 'function'\n ? resolvedDef\n : _Vue.extend(resolvedDef);\n match.components[key] = resolvedDef;\n pending--;\n if (pending <= 0) {\n next();\n }\n });\n\n var reject = once(function (reason) {\n var msg = \"Failed to resolve async component \" + key + \": \" + reason;\n process.env.NODE_ENV !== 'production' && warn(false, msg);\n if (!error) {\n error = isError(reason)\n ? reason\n : new Error(msg);\n next(error);\n }\n });\n\n var res;\n try {\n res = def(resolve, reject);\n } catch (e) {\n reject(e);\n }\n if (res) {\n if (typeof res.then === 'function') {\n res.then(resolve, reject);\n } else {\n // new syntax in Vue 2.3\n var comp = res.component;\n if (comp && typeof comp.then === 'function') {\n comp.then(resolve, reject);\n }\n }\n }\n }\n });\n\n if (!hasAsync) { next(); }\n }\n}\n\nfunction flatMapComponents (\n matched,\n fn\n) {\n return flatten(matched.map(function (m) {\n return Object.keys(m.components).map(function (key) { return fn(\n m.components[key],\n m.instances[key],\n m, key\n ); })\n }))\n}\n\nfunction flatten (arr) {\n return Array.prototype.concat.apply([], arr)\n}\n\nvar hasSymbol =\n typeof Symbol === 'function' &&\n typeof Symbol.toStringTag === 'symbol';\n\nfunction isESModule (obj) {\n return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module')\n}\n\n// in Webpack 2, require.ensure now also returns a Promise\n// so the resolve/reject functions may get called an extra time\n// if the user uses an arrow function shorthand that happens to\n// return that Promise.\nfunction once (fn) {\n var called = false;\n return function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (called) { return }\n called = true;\n return fn.apply(this, args)\n }\n}\n\nvar NavigationDuplicated = /*@__PURE__*/(function (Error) {\n function NavigationDuplicated (normalizedLocation) {\n Error.call(this);\n this.name = this._name = 'NavigationDuplicated';\n // passing the message to super() doesn't seem to work in the transpiled version\n this.message = \"Navigating to current location (\\\"\" + (normalizedLocation.fullPath) + \"\\\") is not allowed\";\n // add a stack property so services like Sentry can correctly display it\n Object.defineProperty(this, 'stack', {\n value: new Error().stack,\n writable: true,\n configurable: true\n });\n // we could also have used\n // Error.captureStackTrace(this, this.constructor)\n // but it only exists on node and chrome\n }\n\n if ( Error ) NavigationDuplicated.__proto__ = Error;\n NavigationDuplicated.prototype = Object.create( Error && Error.prototype );\n NavigationDuplicated.prototype.constructor = NavigationDuplicated;\n\n return NavigationDuplicated;\n}(Error));\n\n// support IE9\nNavigationDuplicated._name = 'NavigationDuplicated';\n\n/* */\n\nvar History = function History (router, base) {\n this.router = router;\n this.base = normalizeBase(base);\n // start with a route object that stands for \"nowhere\"\n this.current = START;\n this.pending = null;\n this.ready = false;\n this.readyCbs = [];\n this.readyErrorCbs = [];\n this.errorCbs = [];\n};\n\nHistory.prototype.listen = function listen (cb) {\n this.cb = cb;\n};\n\nHistory.prototype.onReady = function onReady (cb, errorCb) {\n if (this.ready) {\n cb();\n } else {\n this.readyCbs.push(cb);\n if (errorCb) {\n this.readyErrorCbs.push(errorCb);\n }\n }\n};\n\nHistory.prototype.onError = function onError (errorCb) {\n this.errorCbs.push(errorCb);\n};\n\nHistory.prototype.transitionTo = function transitionTo (\n location,\n onComplete,\n onAbort\n) {\n var this$1 = this;\n\n var route = this.router.match(location, this.current);\n this.confirmTransition(\n route,\n function () {\n this$1.updateRoute(route);\n onComplete && onComplete(route);\n this$1.ensureURL();\n\n // fire ready cbs once\n if (!this$1.ready) {\n this$1.ready = true;\n this$1.readyCbs.forEach(function (cb) {\n cb(route);\n });\n }\n },\n function (err) {\n if (onAbort) {\n onAbort(err);\n }\n if (err && !this$1.ready) {\n this$1.ready = true;\n this$1.readyErrorCbs.forEach(function (cb) {\n cb(err);\n });\n }\n }\n );\n};\n\nHistory.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) {\n var this$1 = this;\n\n var current = this.current;\n var abort = function (err) {\n // after merging https://github.com/vuejs/vue-router/pull/2771 we\n // When the user navigates through history through back/forward buttons\n // we do not want to throw the error. We only throw it if directly calling\n // push/replace. That's why it's not included in isError\n if (!isExtendedError(NavigationDuplicated, err) && isError(err)) {\n if (this$1.errorCbs.length) {\n this$1.errorCbs.forEach(function (cb) {\n cb(err);\n });\n } else {\n warn(false, 'uncaught error during route navigation:');\n console.error(err);\n }\n }\n onAbort && onAbort(err);\n };\n if (\n isSameRoute(route, current) &&\n // in the case the route map has been dynamically appended to\n route.matched.length === current.matched.length\n ) {\n this.ensureURL();\n return abort(new NavigationDuplicated(route))\n }\n\n var ref = resolveQueue(\n this.current.matched,\n route.matched\n );\n var updated = ref.updated;\n var deactivated = ref.deactivated;\n var activated = ref.activated;\n\n var queue = [].concat(\n // in-component leave guards\n extractLeaveGuards(deactivated),\n // global before hooks\n this.router.beforeHooks,\n // in-component update hooks\n extractUpdateHooks(updated),\n // in-config enter guards\n activated.map(function (m) { return m.beforeEnter; }),\n // async components\n resolveAsyncComponents(activated)\n );\n\n this.pending = route;\n var iterator = function (hook, next) {\n if (this$1.pending !== route) {\n return abort()\n }\n try {\n hook(route, current, function (to) {\n if (to === false || isError(to)) {\n // next(false) -> abort navigation, ensure current URL\n this$1.ensureURL(true);\n abort(to);\n } else if (\n typeof to === 'string' ||\n (typeof to === 'object' &&\n (typeof to.path === 'string' || typeof to.name === 'string'))\n ) {\n // next('/') or next({ path: '/' }) -> redirect\n abort();\n if (typeof to === 'object' && to.replace) {\n this$1.replace(to);\n } else {\n this$1.push(to);\n }\n } else {\n // confirm transition and pass on the value\n next(to);\n }\n });\n } catch (e) {\n abort(e);\n }\n };\n\n runQueue(queue, iterator, function () {\n var postEnterCbs = [];\n var isValid = function () { return this$1.current === route; };\n // wait until async components are resolved before\n // extracting in-component enter guards\n var enterGuards = extractEnterGuards(activated, postEnterCbs, isValid);\n var queue = enterGuards.concat(this$1.router.resolveHooks);\n runQueue(queue, iterator, function () {\n if (this$1.pending !== route) {\n return abort()\n }\n this$1.pending = null;\n onComplete(route);\n if (this$1.router.app) {\n this$1.router.app.$nextTick(function () {\n postEnterCbs.forEach(function (cb) {\n cb();\n });\n });\n }\n });\n });\n};\n\nHistory.prototype.updateRoute = function updateRoute (route) {\n var prev = this.current;\n this.current = route;\n this.cb && this.cb(route);\n this.router.afterHooks.forEach(function (hook) {\n hook && hook(route, prev);\n });\n};\n\nfunction normalizeBase (base) {\n if (!base) {\n if (inBrowser) {\n // respect tag\n var baseEl = document.querySelector('base');\n base = (baseEl && baseEl.getAttribute('href')) || '/';\n // strip full URL origin\n base = base.replace(/^https?:\\/\\/[^\\/]+/, '');\n } else {\n base = '/';\n }\n }\n // make sure there's the starting slash\n if (base.charAt(0) !== '/') {\n base = '/' + base;\n }\n // remove trailing slash\n return base.replace(/\\/$/, '')\n}\n\nfunction resolveQueue (\n current,\n next\n) {\n var i;\n var max = Math.max(current.length, next.length);\n for (i = 0; i < max; i++) {\n if (current[i] !== next[i]) {\n break\n }\n }\n return {\n updated: next.slice(0, i),\n activated: next.slice(i),\n deactivated: current.slice(i)\n }\n}\n\nfunction extractGuards (\n records,\n name,\n bind,\n reverse\n) {\n var guards = flatMapComponents(records, function (def, instance, match, key) {\n var guard = extractGuard(def, name);\n if (guard) {\n return Array.isArray(guard)\n ? guard.map(function (guard) { return bind(guard, instance, match, key); })\n : bind(guard, instance, match, key)\n }\n });\n return flatten(reverse ? guards.reverse() : guards)\n}\n\nfunction extractGuard (\n def,\n key\n) {\n if (typeof def !== 'function') {\n // extend now so that global mixins are applied.\n def = _Vue.extend(def);\n }\n return def.options[key]\n}\n\nfunction extractLeaveGuards (deactivated) {\n return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true)\n}\n\nfunction extractUpdateHooks (updated) {\n return extractGuards(updated, 'beforeRouteUpdate', bindGuard)\n}\n\nfunction bindGuard (guard, instance) {\n if (instance) {\n return function boundRouteGuard () {\n return guard.apply(instance, arguments)\n }\n }\n}\n\nfunction extractEnterGuards (\n activated,\n cbs,\n isValid\n) {\n return extractGuards(\n activated,\n 'beforeRouteEnter',\n function (guard, _, match, key) {\n return bindEnterGuard(guard, match, key, cbs, isValid)\n }\n )\n}\n\nfunction bindEnterGuard (\n guard,\n match,\n key,\n cbs,\n isValid\n) {\n return function routeEnterGuard (to, from, next) {\n return guard(to, from, function (cb) {\n if (typeof cb === 'function') {\n cbs.push(function () {\n // #750\n // if a router-view is wrapped with an out-in transition,\n // the instance may not have been registered at this time.\n // we will need to poll for registration until current route\n // is no longer valid.\n poll(cb, match.instances, key, isValid);\n });\n }\n next(cb);\n })\n }\n}\n\nfunction poll (\n cb, // somehow flow cannot infer this is a function\n instances,\n key,\n isValid\n) {\n if (\n instances[key] &&\n !instances[key]._isBeingDestroyed // do not reuse being destroyed instance\n ) {\n cb(instances[key]);\n } else if (isValid()) {\n setTimeout(function () {\n poll(cb, instances, key, isValid);\n }, 16);\n }\n}\n\n/* */\n\nvar HTML5History = /*@__PURE__*/(function (History) {\n function HTML5History (router, base) {\n var this$1 = this;\n\n History.call(this, router, base);\n\n var expectScroll = router.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll) {\n setupScroll();\n }\n\n var initLocation = getLocation(this.base);\n window.addEventListener('popstate', function (e) {\n var current = this$1.current;\n\n // Avoiding first `popstate` event dispatched in some browsers but first\n // history route not updated since async guard at the same time.\n var location = getLocation(this$1.base);\n if (this$1.current === START && location === initLocation) {\n return\n }\n\n this$1.transitionTo(location, function (route) {\n if (supportsScroll) {\n handleScroll(router, route, current, true);\n }\n });\n });\n }\n\n if ( History ) HTML5History.__proto__ = History;\n HTML5History.prototype = Object.create( History && History.prototype );\n HTML5History.prototype.constructor = HTML5History;\n\n HTML5History.prototype.go = function go (n) {\n window.history.go(n);\n };\n\n HTML5History.prototype.push = function push (location, onComplete, onAbort) {\n var this$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n pushState(cleanPath(this$1.base + route.fullPath));\n handleScroll(this$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HTML5History.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n replaceState(cleanPath(this$1.base + route.fullPath));\n handleScroll(this$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HTML5History.prototype.ensureURL = function ensureURL (push) {\n if (getLocation(this.base) !== this.current.fullPath) {\n var current = cleanPath(this.base + this.current.fullPath);\n push ? pushState(current) : replaceState(current);\n }\n };\n\n HTML5History.prototype.getCurrentLocation = function getCurrentLocation () {\n return getLocation(this.base)\n };\n\n return HTML5History;\n}(History));\n\nfunction getLocation (base) {\n var path = decodeURI(window.location.pathname);\n if (base && path.indexOf(base) === 0) {\n path = path.slice(base.length);\n }\n return (path || '/') + window.location.search + window.location.hash\n}\n\n/* */\n\nvar HashHistory = /*@__PURE__*/(function (History) {\n function HashHistory (router, base, fallback) {\n History.call(this, router, base);\n // check history fallback deeplinking\n if (fallback && checkFallback(this.base)) {\n return\n }\n ensureSlash();\n }\n\n if ( History ) HashHistory.__proto__ = History;\n HashHistory.prototype = Object.create( History && History.prototype );\n HashHistory.prototype.constructor = HashHistory;\n\n // this is delayed until the app mounts\n // to avoid the hashchange listener being fired too early\n HashHistory.prototype.setupListeners = function setupListeners () {\n var this$1 = this;\n\n var router = this.router;\n var expectScroll = router.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll) {\n setupScroll();\n }\n\n window.addEventListener(\n supportsPushState ? 'popstate' : 'hashchange',\n function () {\n var current = this$1.current;\n if (!ensureSlash()) {\n return\n }\n this$1.transitionTo(getHash(), function (route) {\n if (supportsScroll) {\n handleScroll(this$1.router, route, current, true);\n }\n if (!supportsPushState) {\n replaceHash(route.fullPath);\n }\n });\n }\n );\n };\n\n HashHistory.prototype.push = function push (location, onComplete, onAbort) {\n var this$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(\n location,\n function (route) {\n pushHash(route.fullPath);\n handleScroll(this$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n HashHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(\n location,\n function (route) {\n replaceHash(route.fullPath);\n handleScroll(this$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n HashHistory.prototype.go = function go (n) {\n window.history.go(n);\n };\n\n HashHistory.prototype.ensureURL = function ensureURL (push) {\n var current = this.current.fullPath;\n if (getHash() !== current) {\n push ? pushHash(current) : replaceHash(current);\n }\n };\n\n HashHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n return getHash()\n };\n\n return HashHistory;\n}(History));\n\nfunction checkFallback (base) {\n var location = getLocation(base);\n if (!/^\\/#/.test(location)) {\n window.location.replace(cleanPath(base + '/#' + location));\n return true\n }\n}\n\nfunction ensureSlash () {\n var path = getHash();\n if (path.charAt(0) === '/') {\n return true\n }\n replaceHash('/' + path);\n return false\n}\n\nfunction getHash () {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var index = href.indexOf('#');\n // empty path\n if (index < 0) { return '' }\n\n href = href.slice(index + 1);\n // decode the hash but not the search or hash\n // as search(query) is already decoded\n // https://github.com/vuejs/vue-router/issues/2708\n var searchIndex = href.indexOf('?');\n if (searchIndex < 0) {\n var hashIndex = href.indexOf('#');\n if (hashIndex > -1) {\n href = decodeURI(href.slice(0, hashIndex)) + href.slice(hashIndex);\n } else { href = decodeURI(href); }\n } else {\n if (searchIndex > -1) {\n href = decodeURI(href.slice(0, searchIndex)) + href.slice(searchIndex);\n }\n }\n\n return href\n}\n\nfunction getUrl (path) {\n var href = window.location.href;\n var i = href.indexOf('#');\n var base = i >= 0 ? href.slice(0, i) : href;\n return (base + \"#\" + path)\n}\n\nfunction pushHash (path) {\n if (supportsPushState) {\n pushState(getUrl(path));\n } else {\n window.location.hash = path;\n }\n}\n\nfunction replaceHash (path) {\n if (supportsPushState) {\n replaceState(getUrl(path));\n } else {\n window.location.replace(getUrl(path));\n }\n}\n\n/* */\n\nvar AbstractHistory = /*@__PURE__*/(function (History) {\n function AbstractHistory (router, base) {\n History.call(this, router, base);\n this.stack = [];\n this.index = -1;\n }\n\n if ( History ) AbstractHistory.__proto__ = History;\n AbstractHistory.prototype = Object.create( History && History.prototype );\n AbstractHistory.prototype.constructor = AbstractHistory;\n\n AbstractHistory.prototype.push = function push (location, onComplete, onAbort) {\n var this$1 = this;\n\n this.transitionTo(\n location,\n function (route) {\n this$1.stack = this$1.stack.slice(0, this$1.index + 1).concat(route);\n this$1.index++;\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1 = this;\n\n this.transitionTo(\n location,\n function (route) {\n this$1.stack = this$1.stack.slice(0, this$1.index).concat(route);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n AbstractHistory.prototype.go = function go (n) {\n var this$1 = this;\n\n var targetIndex = this.index + n;\n if (targetIndex < 0 || targetIndex >= this.stack.length) {\n return\n }\n var route = this.stack[targetIndex];\n this.confirmTransition(\n route,\n function () {\n this$1.index = targetIndex;\n this$1.updateRoute(route);\n },\n function (err) {\n if (isExtendedError(NavigationDuplicated, err)) {\n this$1.index = targetIndex;\n }\n }\n );\n };\n\n AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n var current = this.stack[this.stack.length - 1];\n return current ? current.fullPath : '/'\n };\n\n AbstractHistory.prototype.ensureURL = function ensureURL () {\n // noop\n };\n\n return AbstractHistory;\n}(History));\n\n/* */\n\n\n\nvar VueRouter = function VueRouter (options) {\n if ( options === void 0 ) options = {};\n\n this.app = null;\n this.apps = [];\n this.options = options;\n this.beforeHooks = [];\n this.resolveHooks = [];\n this.afterHooks = [];\n this.matcher = createMatcher(options.routes || [], this);\n\n var mode = options.mode || 'hash';\n this.fallback = mode === 'history' && !supportsPushState && options.fallback !== false;\n if (this.fallback) {\n mode = 'hash';\n }\n if (!inBrowser) {\n mode = 'abstract';\n }\n this.mode = mode;\n\n switch (mode) {\n case 'history':\n this.history = new HTML5History(this, options.base);\n break\n case 'hash':\n this.history = new HashHistory(this, options.base, this.fallback);\n break\n case 'abstract':\n this.history = new AbstractHistory(this, options.base);\n break\n default:\n if (process.env.NODE_ENV !== 'production') {\n assert(false, (\"invalid mode: \" + mode));\n }\n }\n};\n\nvar prototypeAccessors = { currentRoute: { configurable: true } };\n\nVueRouter.prototype.match = function match (\n raw,\n current,\n redirectedFrom\n) {\n return this.matcher.match(raw, current, redirectedFrom)\n};\n\nprototypeAccessors.currentRoute.get = function () {\n return this.history && this.history.current\n};\n\nVueRouter.prototype.init = function init (app /* Vue component instance */) {\n var this$1 = this;\n\n process.env.NODE_ENV !== 'production' && assert(\n install.installed,\n \"not installed. Make sure to call `Vue.use(VueRouter)` \" +\n \"before creating root instance.\"\n );\n\n this.apps.push(app);\n\n // set up app destroyed handler\n // https://github.com/vuejs/vue-router/issues/2639\n app.$once('hook:destroyed', function () {\n // clean out app from this.apps array once destroyed\n var index = this$1.apps.indexOf(app);\n if (index > -1) { this$1.apps.splice(index, 1); }\n // ensure we still have a main app or null if no apps\n // we do not release the router so it can be reused\n if (this$1.app === app) { this$1.app = this$1.apps[0] || null; }\n });\n\n // main app previously initialized\n // return as we don't need to set up new history listener\n if (this.app) {\n return\n }\n\n this.app = app;\n\n var history = this.history;\n\n if (history instanceof HTML5History) {\n history.transitionTo(history.getCurrentLocation());\n } else if (history instanceof HashHistory) {\n var setupHashListener = function () {\n history.setupListeners();\n };\n history.transitionTo(\n history.getCurrentLocation(),\n setupHashListener,\n setupHashListener\n );\n }\n\n history.listen(function (route) {\n this$1.apps.forEach(function (app) {\n app._route = route;\n });\n });\n};\n\nVueRouter.prototype.beforeEach = function beforeEach (fn) {\n return registerHook(this.beforeHooks, fn)\n};\n\nVueRouter.prototype.beforeResolve = function beforeResolve (fn) {\n return registerHook(this.resolveHooks, fn)\n};\n\nVueRouter.prototype.afterEach = function afterEach (fn) {\n return registerHook(this.afterHooks, fn)\n};\n\nVueRouter.prototype.onReady = function onReady (cb, errorCb) {\n this.history.onReady(cb, errorCb);\n};\n\nVueRouter.prototype.onError = function onError (errorCb) {\n this.history.onError(errorCb);\n};\n\nVueRouter.prototype.push = function push (location, onComplete, onAbort) {\n var this$1 = this;\n\n // $flow-disable-line\n if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n this$1.history.push(location, resolve, reject);\n })\n } else {\n this.history.push(location, onComplete, onAbort);\n }\n};\n\nVueRouter.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1 = this;\n\n // $flow-disable-line\n if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n this$1.history.replace(location, resolve, reject);\n })\n } else {\n this.history.replace(location, onComplete, onAbort);\n }\n};\n\nVueRouter.prototype.go = function go (n) {\n this.history.go(n);\n};\n\nVueRouter.prototype.back = function back () {\n this.go(-1);\n};\n\nVueRouter.prototype.forward = function forward () {\n this.go(1);\n};\n\nVueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) {\n var route = to\n ? to.matched\n ? to\n : this.resolve(to).route\n : this.currentRoute;\n if (!route) {\n return []\n }\n return [].concat.apply([], route.matched.map(function (m) {\n return Object.keys(m.components).map(function (key) {\n return m.components[key]\n })\n }))\n};\n\nVueRouter.prototype.resolve = function resolve (\n to,\n current,\n append\n) {\n current = current || this.history.current;\n var location = normalizeLocation(\n to,\n current,\n append,\n this\n );\n var route = this.match(location, current);\n var fullPath = route.redirectedFrom || route.fullPath;\n var base = this.history.base;\n var href = createHref(base, fullPath, this.mode);\n return {\n location: location,\n route: route,\n href: href,\n // for backwards compat\n normalizedTo: location,\n resolved: route\n }\n};\n\nVueRouter.prototype.addRoutes = function addRoutes (routes) {\n this.matcher.addRoutes(routes);\n if (this.history.current !== START) {\n this.history.transitionTo(this.history.getCurrentLocation());\n }\n};\n\nObject.defineProperties( VueRouter.prototype, prototypeAccessors );\n\nfunction registerHook (list, fn) {\n list.push(fn);\n return function () {\n var i = list.indexOf(fn);\n if (i > -1) { list.splice(i, 1); }\n }\n}\n\nfunction createHref (base, fullPath, mode) {\n var path = mode === 'hash' ? '#' + fullPath : fullPath;\n return base ? cleanPath(base + '/' + path) : path\n}\n\nVueRouter.install = install;\nVueRouter.version = '3.1.3';\n\nif (inBrowser && window.Vue) {\n window.Vue.use(VueRouter);\n}\n\nexport default VueRouter;\n","// Register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\nvar isLocalhost = function () { return Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n); }\n\nexport function register (swUrl, hooks) {\n if ( hooks === void 0 ) hooks = {};\n\n var registrationOptions = hooks.registrationOptions; if ( registrationOptions === void 0 ) registrationOptions = {};\n delete hooks.registrationOptions\n\n var emit = function (hook) {\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n if (hooks && hooks[hook]) {\n hooks[hook].apply(hooks, args)\n }\n }\n\n if ('serviceWorker' in navigator) {\n window.addEventListener('load', function () {\n if (isLocalhost()) {\n // This is running on localhost. Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, emit, registrationOptions)\n navigator.serviceWorker.ready.then(function (registration) {\n emit('ready', registration)\n })\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl, emit, registrationOptions)\n }\n })\n }\n}\n\nfunction registerValidSW (swUrl, emit, registrationOptions) {\n navigator.serviceWorker\n .register(swUrl, registrationOptions)\n .then(function (registration) {\n emit('registered', registration)\n if (registration.waiting) {\n emit('updated', registration)\n return\n }\n registration.onupdatefound = function () {\n emit('updatefound', registration)\n var installingWorker = registration.installing\n installingWorker.onstatechange = function () {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n emit('updated', registration)\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n emit('cached', registration)\n }\n }\n }\n }\n })\n .catch(function (error) {\n emit('error', error)\n })\n}\n\nfunction checkValidServiceWorker (swUrl, emit, registrationOptions) {\n // Check if the service worker can be found.\n fetch(swUrl)\n .then(function (response) {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (response.status === 404) {\n // No service worker found.\n emit('error', new Error((\"Service worker not found at \" + swUrl)))\n unregister()\n } else if (response.headers.get('content-type').indexOf('javascript') === -1) {\n emit('error', new Error(\n \"Expected \" + swUrl + \" to have javascript content-type, \" +\n \"but received \" + (response.headers.get('content-type'))))\n unregister()\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, emit, registrationOptions)\n }\n })\n .catch(function (error) {\n if (!navigator.onLine) {\n emit('offline')\n } else {\n emit('error', error)\n }\n })\n}\n\nexport function unregister () {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(function (registration) {\n registration.unregister()\n })\n }\n}\n","/**!\n * Sortable 1.10.2\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction _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 && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _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\nfunction _extends() {\n _extends = Object.assign || 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\nfunction _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(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}\n\nfunction _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\nfunction _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\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _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\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nvar version = \"1.10.2\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !!\n /*@__PURE__*/\n navigator.userAgent.match(pattern);\n }\n}\n\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\n\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction matches(\n/**HTMLElement*/\nel,\n/**String*/\nselector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n\n return false;\n}\n\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\n\nfunction closest(\n/**HTMLElement*/\nel,\n/**String*/\nselector,\n/**HTMLElement*/\nctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n\n return null;\n}\n\nvar R_SPACE = /\\s+/g;\n\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\n\nfunction css(el, prop, val) {\n var style = el && el.style;\n\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\n\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n\n } while (!selfOnly && (el = el.parentNode));\n }\n\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n\n return matrixFn && new matrixFn(appliedTransforms);\n}\n\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n\n return list;\n }\n\n return [];\n}\n\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\n\n\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n\n if (el !== window && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container\n\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n\n } while (container = container.parentNode);\n }\n }\n\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\n\n\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n /* jshint boss:true */\n\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n\n return false;\n}\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\n\n\nfunction getChild(el, childNum, options) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && children[i] !== Sortable.dragged && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n\n currentChild++;\n }\n\n i++;\n }\n\n return null;\n}\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\n\n\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n\n return last || null;\n}\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\n\n\nfunction index(el, selector) {\n var index = 0;\n\n if (!el || !el.parentNode) {\n return -1;\n }\n /* jshint boss:true */\n\n\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n\n return index;\n}\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\n\n\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n\n return [offsetLeft, offsetTop];\n}\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\n\n\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n\n return -1;\n}\n\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n\n } while (elem = elem.parentNode);\n\n return getWindowScrollingElement();\n}\n\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n\n return dst;\n}\n\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\n\nvar _throttleTimeout;\n\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\n\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\n\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\n\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\n\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\n\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\n\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n\n var fromRect = _objectSpread({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation\n\n\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n\n target.toRect = toRect;\n\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n } // if fromRect != toRect: animate\n\n\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n\n if (!time) {\n time = _this.options.animation;\n }\n\n _this.animate(target, animatingRect, toRect, time);\n }\n\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\n\nfunction repaint(target) {\n return target.offsetWidth;\n}\n\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n\n this.eventCanceled = false;\n\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable\n\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread({\n sortable: sortable\n }, evt));\n } // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n\n\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized; // Add default options from plugin\n\n _extends(defaults, initialized.defaults);\n });\n\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n\n var allEventProperties = _objectSpread({}, extraEventProperties, PluginManager.getEventProperties(name, sortable));\n\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, [\"evt\"]);\n\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\n\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\n\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\nghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n_silent = false,\n savedInputChecked = [];\n/** @const */\n\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\nsupportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return; // false when <= IE11\n\n if (IE11OrLess) {\n return false;\n }\n\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n}(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n},\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n},\n\n/**\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\n * @param {Number} x X position\n * @param {Number} y Y position\n * @return {HTMLElement} Element of the first found nearest Sortable\n */\n_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n if (lastChild(sortable)) return;\n var rect = getRect(sortable),\n threshold = sortable[expando].options.emptyInsertThreshold,\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n\n if (threshold && insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n},\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n\n var group = {};\n var originalGroup = options.group;\n\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n},\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n},\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\n\nif (documentExists) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\n\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n if (nearest) {\n // Create imitation event\n var event = {};\n\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n\n nearest[expando]._onDragOver(event);\n }\n }\n};\n\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n/**\n * @class Sortable\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\n\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n\n this.el = el; // root element\n\n this.options = options = _extends({}, options); // Export instance\n\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults); // Set default options\n\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n\n _prepareGroup(options); // Bind all private methods\n\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n } // Setup drag mode\n\n\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n } // Bind events\n\n\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n\n sortables.push(this.el); // Restore sorting\n\n options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager\n\n _extends(this, AnimationStateManager());\n}\n\nSortable.prototype =\n/** @lends Sortable.prototype */\n{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart(\n /** Event|TouchEvent */\n evt) {\n if (!evt.cancelable) return;\n\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n\n _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\n\n if (dragEl) {\n return;\n }\n\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n } // cancel dnd if original target is content editable\n\n\n if (originalTarget.isContentEditable) {\n return;\n }\n\n target = closest(target, options.draggable, el, false);\n\n if (target && target.animated) {\n return;\n }\n\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n } // Get the index of the dragged element within its parent\n\n\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable); // Check filter\n\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n } // Prepare `dragstart`\n\n\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart(\n /** Event */\n evt,\n /** Touch */\n touch,\n /** HTMLElement */\n target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n _this._onDrop();\n\n return;\n } // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n\n\n _this._disableDelayedDragEvents();\n\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n } // Bind the events: dragstart/dragend\n\n\n _this._triggerDragStart(evt, touch); // Drag start event\n\n\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n }); // Chosen item\n\n\n toggleClass(dragEl, options.chosenClass, true);\n }; // Disable \"draggable\"\n\n\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)\n\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n\n pluginEvent('delayStart', this, {\n evt: evt\n }); // Delay is impossible for native DnD in Edge or IE\n\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n } // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n\n\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(\n /** TouchEvent|PointerEvent **/\n e) {\n var touch = e.touches ? e.touches[0] : e;\n\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart(\n /** Event */\n evt,\n /** Touch */\n touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n\n awaitingDragStarted = false;\n\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n\n var options = this.options; // Apply effect\n\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost(); // Drag start event\n\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n\n _hideGhostForTarget();\n\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n\n target = parent; // store last element\n }\n /* jshint boss:true */\n while (parent = parent.parentNode);\n }\n\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove(\n /**TouchEvent*/\n evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging\n\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n\n this._onDragStart(evt, true);\n }\n\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options; // Position absolutely\n\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl); // Set transform-origin\n\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart(\n /**Event*/\n evt,\n /**boolean*/\n fallback) {\n var _this = this;\n\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n }\n\n pluginEvent('setupClone', this);\n\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n\n this._hideClone();\n\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n } // #1143: IFrame support workaround\n\n\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n\n _this._hideClone();\n\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events\n\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n\n on(document, 'drop', _this); // #1276 fix:\n\n css(dragEl, 'transform', 'translateZ(0)');\n }\n\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver(\n /**Event*/\n evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n\n if (_silent) return;\n\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n } // Capture animation state\n\n\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n\n _this.captureAnimationState();\n\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n } // Return invocation when dragEl is inserted (or completed)\n\n\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n } // Animation\n\n\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n } // Null lastTarget if it is not inside a previously swapped element\n\n\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n } // no bubbling and not fallback\n\n\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted\n\n\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n } // Call when dragEl has been inserted\n\n\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n\n ignoreNextClick = false;\n\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n\n if (revert) {\n parentEl = rootEl; // actualization\n\n capture();\n\n this._hideClone();\n\n dragOverEvent('revert');\n\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n\n return completed(true);\n }\n\n var elLastChild = lastChild(el, options.draggable);\n\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n } // assign target only if condition is true\n\n\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n\n if (target) {\n targetRect = getRect(target);\n }\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n el.appendChild(dragEl);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n } // If dragEl is already beside target: Do not insert\n\n\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n } // Undo chrome's scroll adjustment (has no effect on other browsers)\n\n\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n\n parentEl = dragEl.parentNode; // actualization\n // must be done before animation\n\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n\n changed();\n return completed(true);\n }\n }\n\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop(\n /**Event*/\n evt) {\n var el = this.el,\n options = this.options; // Get the index of the dragged element within its parent\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode; // Get again after plugin event\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n if (Sortable.eventCanceled) {\n this._nulling();\n\n return;\n }\n\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n\n _cancelNextTick(this.cloneId);\n\n _cancelNextTick(this._dragStartId); // Unbind events\n\n\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n\n this._offMoveEvents();\n\n this._offUpEvents();\n\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n\n css(dragEl, 'transform', '');\n\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n\n _disableDraggable(dragEl);\n\n dragEl.style['will-change'] = ''; // Remove classes\n // ghostClass is added in dragStarted\n\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n\n toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event\n\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n }); // Remove event\n\n\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n }); // drag from one list and drop into another\n\n\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n }); // Save sorting\n\n\n this.save();\n }\n }\n }\n\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent(\n /**Event*/\n evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n\n break;\n\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n\n _globalDragOver(evt);\n }\n\n break;\n\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n\n /**\n * Serializes the item into an array of string.\n * @returns {String[]}\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n\n for (; i < n; i++) {\n el = children[i];\n\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n\n return order;\n },\n\n /**\n * Sorts the elements according to the array.\n * @param {String[]} order order of the items\n */\n sort: function sort(order) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n },\n\n /**\n * Save the current sorting\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n\n /**\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n * @param {HTMLElement} el\n * @param {String} [selector] default: `options.draggable`\n * @returns {HTMLElement|null}\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n\n /**\n * Set/get option\n * @param {string} name\n * @param {*} [value]\n * @returns {*}\n */\n option: function option(name, value) {\n var options = this.options;\n\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n\n /**\n * Destroy\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n } // Remove draggable attributes\n\n\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n\n this._onDrop();\n\n this._disableDelayedDragEvents();\n\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n\n return;\n }\n\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return; // show clone at dragEl or original position\n\n if (rootEl.contains(dragEl) && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\n\nfunction _globalDragOver(\n/**Event*/\nevt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n\n evt.cancelable && evt.preventDefault();\n}\n\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal; // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n\n return retVal;\n}\n\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\n\nfunction _unsilent() {\n _silent = false;\n}\n\nfunction _ghostIsLast(evt, vertical, sortable) {\n var rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var spacer = 10;\n return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;\n}\n\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n\n invert = invert || invertSwap;\n\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n\n return 0;\n}\n/**\n * Gets the direction dragEl must be swapped relative to target in order to make it\n * seem that dragEl has been \"inserted\" into that element's position\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\n * @return {Number} Direction dragEl must be swapped\n */\n\n\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n/**\n * Generate id\n * @param {HTMLElement} el\n * @returns {String}\n * @private\n */\n\n\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n\n while (i--) {\n sum += str.charCodeAt(i);\n }\n\n return sum.toString(36);\n}\n\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\n\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\n\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n} // Fixed #973:\n\n\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n} // Export utils\n\n\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n/**\n * Get the Sortable instance of an element\n * @param {HTMLElement} element The element\n * @return {Sortable|undefined} The instance of Sortable\n */\n\nSortable.get = function (element) {\n return element[expando];\n};\n/**\n * Mount a plugin to Sortable\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\n */\n\n\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n\n if (plugin.utils) Sortable.utils = _objectSpread({}, Sortable.utils, plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n/**\n * Create sortable instance\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\n\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n}; // Export\n\n\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\n\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n }; // Bind all private methods\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt; // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n\n if (fallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change\n\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour\n\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\n\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\n\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\n\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn; // New scroll root, set scrollEl\n\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n\n var layersOut = 0;\n var currentParent = scrollEl;\n\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n\n }\n\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\n\nfunction Revert() {}\n\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n\n this.sortable.animateAll();\n\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\n\nfunction Remove() {}\n\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\n\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\n\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\nmultiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\nfolding = false,\n // Folding any other time\ndragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\n\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n\n dataTransfer.setData('Text', data);\n }\n };\n }\n\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n\n sortable._hideClone();\n\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n }); // Sort multi-drag elements\n\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n sortable.captureAnimationState();\n\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n } // Remove all auxiliary multidrag items from el, if sorting enabled\n\n\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n\n initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location\n\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n\n\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n\n activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden\n\n\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children; // Multi-drag selection\n\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvt: evt\n }); // Modifier activated, select from last to dragEl\n\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvt: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvt: evt\n });\n }\n } // Multi-drag drop\n\n\n if (dragStarted && this.isMultiDrag) {\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect; // Prepare unfold animation\n\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n\n\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n\n multiDragIndex++;\n }); // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n\n if (update) {\n dispatchSortableEvent('update');\n }\n }\n } // Must be done after capturing individual rects (scroll bar)\n\n\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n\n multiDragSortable = toSortable;\n } // Remove clones if necessary\n\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return; // Only deselect if selection is in this sortable\n\n if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable\n\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click\n\n if (evt && evt.button !== 0) return;\n\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvt: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n\n multiDragSortable = sortable;\n }\n\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n }); // multiDragElements will already be sorted if folding\n\n var newIndex;\n\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n\n return key;\n }\n }\n });\n}\n\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\n\n\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\n\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n"],"sourceRoot":""}