{"version":3,"sources":["webpack:////workdir/node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack:////workdir/node_modules/vue-router/dist/vue-router.esm.js","webpack:////workdir/node_modules/vue-lazyload/vue-lazyload.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","extend","a","b","key","encodeReserveRE","encodeReserveReplacer","c","charCodeAt","toString","commaRE","encode","str","encodeURIComponent","replace","decode","decodeURIComponent","err","resolveQuery","query","extraQuery","_parseQuery","parsedQuery","parse","parseQuery","e","value","Array","isArray","map","castQueryParamValue","String","res","trim","split","forEach","param","parts","shift","val","length","join","undefined","push","stringifyQuery","obj","Object","keys","result","val2","filter","x","trailingSlashRE","createRoute","record","location","redirectedFrom","router","clone","route","name","meta","path","hash","params","fullPath","getFullPath","matched","formatMatch","freeze","START","unshift","ref","_stringifyQuery","stringify","isSameRoute","onlyPath","isObjectEqual","aKeys","sort","bKeys","every","i","aVal","bKey","bVal","isIncludedRoute","current","target","indexOf","queryIncludes","handleRouteEntered","instances","instance","cbs","enteredCbs","i$1","_isBeingDestroyed","View","props","type","default","_","children","data","routerView","$createElement","$route","cache","_routerViewCache","depth","inactive","_routerRoot","vnodeData","keepAlive","_directInactive","_inactive","$parent","routerViewDepth","cachedData","cachedComponent","component","configProps","fillPropsinData","components","registerRouteInstance","vm","prepatch","vnode","componentInstance","init","propsToPass","resolveProps","attrs","config","resolvePath","relative","base","append","firstChar","charAt","stack","pop","segments","segment","parsePath","hashIndex","slice","queryIndex","cleanPath","isarray","arr","prototype","pathToRegexp_1","pathToRegexp","parse_1","compile_1","compile","tokensToFunction_1","tokensToFunction","tokensToRegExp_1","tokensToRegExp","PATH_REGEXP","RegExp","tokens","index","defaultDelimiter","delimiter","exec","m","escaped","offset","next","prefix","capture","group","modifier","asterisk","partial","repeat","optional","pattern","escapeGroup","escapeString","substr","encodeURIComponentPretty","encodeURI","toUpperCase","encodeAsterisk","matches","flags","opts","pretty","token","TypeError","JSON","j","test","attachKeys","re","sensitive","regexpToRegexp","groups","source","match","arrayToRegexp","regexp","stringToRegexp","strict","end","endsWithDelimiter","regexpCompileCache","create","fillParams","routeMsg","filler","pathMatch","normalizeLocation","raw","_normalized","params$1","rawPath","parsedPath","basePath","_Vue","toTypes","eventTypes","noop","Link","to","required","tag","custom","Boolean","exact","exactPath","activeClass","exactActiveClass","ariaCurrentValue","event","this$1","$router","resolve","href","classes","globalActiveClass","linkActiveClass","globalExactActiveClass","linkExactActiveClass","activeClassFallback","exactActiveClassFallback","compareTarget","handler","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","Vue","installed","isDef","v","registerInstance","callVal","_parentVnode","mixin","_router","util","defineReactive","history","destroyed","defineProperty","get","_route","strats","optionMergeStrategies","beforeRouteEnter","beforeRouteLeave","beforeRouteUpdate","created","inBrowser","window","createRouteMap","routes","oldPathList","oldPathMap","oldNameMap","parentRoute","pathList","pathMap","nameMap","addRouteRecord","l","splice","matchAs","pathToRegexpOptions","normalizedPath","normalizePath","caseSensitive","regex","compileRouteRegex","alias","redirect","beforeEnter","childMatchAs","aliases","aliasRoute","createMatcher","addRoutes","addRoute","parentOrRoute","getRoutes","currentRoute","_createRoute","paramNames","record$1","matchRoute","originalRedirect","hasOwnProperty","resolveRecordPath","resolvedPath","aliasedPath","aliasedMatch","aliasedRecord","len","Time","performance","now","Date","genStateKey","toFixed","_key","getStateKey","setStateKey","positionStore","setupScroll","scrollRestoration","protocolAndPath","protocol","host","absolutePath","stateCopy","state","replaceState","addEventListener","handlePopState","removeEventListener","handleScroll","from","isPop","app","behavior","scrollBehavior","$nextTick","position","getScrollPosition","shouldScroll","then","scrollToPosition","catch","saveScrollPosition","pageXOffset","y","pageYOffset","getElementPosition","el","docEl","document","documentElement","docRect","getBoundingClientRect","elRect","left","top","isValidPosition","isNumber","normalizePosition","normalizeOffset","hashStartsWithNumberRE","isObject","selector","getElementById","querySelector","style","scrollTo","supportsPushState","ua","navigator","userAgent","pushState","url","runQueue","queue","fn","cb","step","NavigationFailureType","redirected","aborted","cancelled","duplicated","createNavigationRedirectedError","createRouterError","stringifyRoute","createNavigationDuplicatedError","error","createNavigationCancelledError","createNavigationAbortedError","message","Error","_isRouter","propertiesToLog","isError","isNavigationFailure","errorType","resolveAsyncComponents","hasAsync","pending","flatMapComponents","def","cid","once","resolvedDef","isESModule","resolved","reject","reason","msg","comp","flatten","apply","hasSymbol","Symbol","toStringTag","__esModule","called","args","arguments","History","normalizeBase","ready","readyCbs","readyErrorCbs","errorCbs","listeners","baseEl","resolveQueue","max","Math","updated","activated","deactivated","extractGuards","records","bind","reverse","guards","guard","extractGuard","extractLeaveGuards","bindGuard","extractUpdateHooks","extractEnterGuards","bindEnterGuard","listen","onReady","errorCb","onError","transitionTo","onComplete","onAbort","prev","confirmTransition","updateRoute","ensureURL","afterHooks","abort","console","lastRouteIndex","lastCurrentIndex","beforeHooks","iterator","enterGuards","resolveHooks","setupListeners","teardown","cleanupListener","HTML5History","_startLocation","getLocation","__proto__","constructor","expectScroll","supportsScroll","handleRoutingEvent","go","n","fromRoute","getCurrentLocation","pathname","pathLowerCase","toLowerCase","baseLowerCase","search","HashHistory","fallback","checkFallback","ensureSlash","getHash","replaceHash","eventType","pushHash","getUrl","AbstractHistory","targetIndex","VueRouter","apps","matcher","mode","prototypeAccessors","configurable","registerHook","list","createHref","$once","handleInitialScroll","routeOrError","beforeEach","beforeResolve","afterEach","Promise","back","forward","getMatchedComponents","normalizedTo","defineProperties","version","START_LOCATION","use","isPrimitive","isPrimitive$1","__moduleExports","assignSymbols","receiver","objects","getOwnPropertySymbols","isEnumerable","propertyIsEnumerable","provider","names","assignSymbols$1","kindOf","Number","Function","isBuffer","kindOf$1","isPrimitive$2","assignSymbols$2","typeOf","assign","isValidKey","hasOwn","assignDeep","hasIntersectionObserver","checkIntersectionObserver","IntersectionObserverEntry","intersectionRatio","modeType","observer","CustomEvent","Event","bubbles","cancelable","detail","evt","createEvent","initCustomEvent","remove","item","some","has","getBestSelectionFromSrcset","scale","tagName","container","parentNode","containerWidth","offsetWidth","spaceIndex","tmpSrc","tmpWidth","lastIndexOf","parseInt","tmpOption","bestSelectedSrc","find","getDPR","devicePixelRatio","supportWebp","support","elem","createElement","getContext","toDataURL","throttle","action","delay","timeout","movement","lastRun","needRun","elapsed","runCallback","setTimeout","clearTimeout","testSupportsPassive","supportsPassive","func","passive","loadImageAsync","image","Image","src","cors","crossOrigin","onload","naturalHeight","naturalWidth","onerror","prop","getComputedStyle","getPropertyValue","overflow","scrollParent","HTMLElement","body","isObject$1","ObjectKeys","ArrayFrom","arrLike","ImageCache","_caches","free","ReactiveListener","loading","bindType","elRenderer","imageCache","attempt","rect","_imageCache","performanceData","loadStart","loadEnd","initState","dataset","setAttribute","loaded","rendered","oldSrc","getRect","innerHeight","preLoad","bottom","preLoadTop","innerWidth","right","silent","warn","onFinish","log","renderLoading","adapter","time","DEFAULT_URL","DEFAULT_EVENTS","DEFAULT_OBSERVER_OPTIONS","rootMargin","threshold","Lazy","throttleWait","dispatchEvent","listenEvents","hasbind","observerOptions","ListenerQueue","TargetIndex","TargetQueue","ListenEvents","_initEvent","lazyLoadHandler","_lazyLoadHandler","setMode","_addListenerTarget","_observer","observe","$el","binding","update","nextTick","_valueFormatter","modifiers","$refs","newListener","arg","_elRenderer","exist","unobserve","existItem","_removeListenerTarget","$destroy","listener","_initListen","_initIntersectionObserver","childrenCount","id","listened","start","$on","$off","$emit","inCache","freeList","catIn","checkInView","load","IntersectionObserver","_observerHandler","entries","entry","isIntersecting","LazyClass","lazy","isVue2","directive","componentUpdated","unbind","newValue","oldValue","$els","LazyComponent","show","addLazyBox","removeComponent","methods","LazyContainerMananger","lazyContainerMananger","_queue","LazyContainer","clear","defaultOptions","imgs","getImgs","querySelectorAll","lazyContainer","LazyImage","lazyManager","renderSrc","watch","$Lazyload","lazyComponent","lazyImage"],"mappings":"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","file":"static/js/app-559445b2.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 =\n typeof scriptExports === 'function' ? scriptExports.options : 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) {\n // 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 () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\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 functional 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 ? [].concat(existing, hook) : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","/*!\n * vue-router v3.5.4\n * (c) 2022 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 (!condition) {\n typeof console !== 'undefined' && console.warn((\"[vue-router] \" + message));\n }\n}\n\nfunction extend (a, b) {\n for (var key in b) {\n a[key] = b[key];\n }\n return a\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\nfunction decode (str) {\n try {\n return decodeURIComponent(str)\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, (\"Error decoding \\\"\" + str + \"\\\". Leaving it intact.\"));\n }\n }\n return str\n}\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 var value = extraQuery[key];\n parsedQuery[key] = Array.isArray(value)\n ? value.map(castQueryParamValue)\n : castQueryParamValue(value);\n }\n return parsedQuery\n}\n\nvar castQueryParamValue = function (value) { return (value == null || typeof value === 'object' ? value : String(value)); };\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 ? decode(parts.join('=')) : 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\n ? Object.keys(obj)\n .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 })\n .filter(function (x) { return x.length > 0; })\n .join('&')\n : 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, onlyPath) {\n if (b === START) {\n return a === b\n } else if (!b) {\n return false\n } else if (a.path && b.path) {\n return a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && (onlyPath ||\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query))\n } else if (a.name && b.name) {\n return (\n a.name === b.name &&\n (onlyPath || (\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query) &&\n isObjectEqual(a.params, b.params))\n )\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).sort();\n var bKeys = Object.keys(b).sort();\n if (aKeys.length !== bKeys.length) {\n return false\n }\n return aKeys.every(function (key, i) {\n var aVal = a[key];\n var bKey = bKeys[i];\n if (bKey !== key) { return false }\n var bVal = b[key];\n // query values can be null and undefined\n if (aVal == null || bVal == null) { return aVal === bVal }\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\nfunction handleRouteEntered (route) {\n for (var i = 0; i < route.matched.length; i++) {\n var record = route.matched[i];\n for (var name in record.instances) {\n var instance = record.instances[name];\n var cbs = record.enteredCbs[name];\n if (!instance || !cbs) { continue }\n delete record.enteredCbs[name];\n for (var i$1 = 0; i$1 < cbs.length; i$1++) {\n if (!instance._isBeingDestroyed) { cbs[i$1](instance); }\n }\n }\n }\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.routerView) {\n depth++;\n }\n if (vnodeData.keepAlive && parent._directInactive && parent._inactive) {\n inactive = true;\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 var cachedData = cache[name];\n var cachedComponent = cachedData && cachedData.component;\n if (cachedComponent) {\n // #2301\n // pass props\n if (cachedData.configProps) {\n fillPropsinData(cachedComponent, data, cachedData.route, cachedData.configProps);\n }\n return h(cachedComponent, data, children)\n } else {\n // render previous empty view\n return h()\n }\n }\n\n var matched = route.matched[depth];\n var component = matched && matched.components[name];\n\n // render empty node if no matched route or no config component\n if (!matched || !component) {\n cache[name] = null;\n return h()\n }\n\n // cache component\n cache[name] = { component: component };\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 // if the route transition has already been confirmed then we weren't\n // able to call the cbs during confirmation as the component was not\n // registered yet, so we call it here.\n handleRouteEntered(route);\n };\n\n var configProps = matched.props && matched.props[name];\n // save route and configProps in cache\n if (configProps) {\n extend(cache[name], {\n route: route,\n configProps: configProps\n });\n fillPropsinData(component, data, route, configProps);\n }\n\n return h(component, data, children)\n }\n};\n\nfunction fillPropsinData (component, data, route, configProps) {\n // resolve props\n var propsToPass = data.props = resolveProps(route, configProps);\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\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\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(/\\/(?:\\s*\\/)+/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), 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, options) {\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 + ')$', flags(options));\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 && 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 // and fix #3106 so that you can work with location descriptor object having params.pathMatch equal to empty string\n if (typeof params.pathMatch === 'string') { params[0] = params.pathMatch; }\n\n return filler(params, { pretty: true })\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n // Fix #3072 no warn if `pathMatch` is string\n warn(typeof params.pathMatch === 'string', (\"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 next = extend({}, raw);\n var params = next.params;\n if (params && typeof params === 'object') {\n next.params = extend({}, params);\n }\n return next\n }\n\n // relative params\n if (!next.path && next.params && current) {\n next = extend({}, next);\n next._normalized = true;\n var params$1 = extend(extend({}, current.params), next.params);\n if (current.name) {\n next.name = current.name;\n next.params = params$1;\n } else if (current.matched.length) {\n var rawPath = current.matched[current.matched.length - 1].path;\n next.path = fillParams(rawPath, params$1, (\"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 warnedCustomSlot;\nvar warnedTagProp;\nvar warnedEventProp;\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 custom: Boolean,\n exact: Boolean,\n exactPath: Boolean,\n append: Boolean,\n replace: Boolean,\n activeClass: String,\n exactActiveClass: String,\n ariaCurrentValue: {\n type: String,\n default: 'page'\n },\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, this.exactPath);\n classes[activeClass] = this.exact || this.exactPath\n ? classes[exactActiveClass]\n : isIncludedRoute(current, compareTarget);\n\n var ariaCurrentValue = classes[exactActiveClass] ? this.ariaCurrentValue : null;\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 (process.env.NODE_ENV !== 'production' && !this.custom) {\n !warnedCustomSlot && warn(false, 'In Vue Router 4, the v-slot API will by default wrap its content with an element. Use the custom prop to remove this warning:\\n\\n');\n warnedCustomSlot = true;\n }\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 (\" with to=\\\"\" + (this.to) + \"\\\" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.\")\n );\n }\n return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot)\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if ('tag' in this.$options.propsData && !warnedTagProp) {\n warn(\n false,\n \"'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.\"\n );\n warnedTagProp = true;\n }\n if ('event' in this.$options.propsData && !warnedEventProp) {\n warn(\n false,\n \"'s event prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.\"\n );\n warnedEventProp = true;\n }\n }\n\n if (this.tag === 'a') {\n data.on = on;\n data.attrs = { href: href, 'aria-current': ariaCurrentValue };\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 aAttrs['aria-current'] = ariaCurrentValue;\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 parentRoute\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, parentRoute);\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 warn(\n // eslint-disable-next-line no-control-regex\n !/[^\\u0000-\\u007F]+/.test(path),\n \"Route with path \\\"\" + path + \"\\\" contains unencoded characters, make sure \" +\n \"your path is correctly encoded before passing it to the router. Use \" +\n \"encodeURI to encode static segments of your path.\"\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 alias: route.alias\n ? typeof route.alias === 'string'\n ? [route.alias]\n : route.alias\n : [],\n instances: {},\n enteredCbs: {},\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 addRoute (parentOrRoute, route) {\n var parent = (typeof parentOrRoute !== 'object') ? nameMap[parentOrRoute] : undefined;\n // $flow-disable-line\n createRouteMap([route || parentOrRoute], pathList, pathMap, nameMap, parent);\n\n // add aliases of parent\n if (parent && parent.alias.length) {\n createRouteMap(\n // $flow-disable-line route is defined if parent is\n parent.alias.map(function (alias) { return ({ path: alias, children: [route] }); }),\n pathList,\n pathMap,\n nameMap,\n parent\n );\n }\n }\n\n function getRoutes () {\n return pathList.map(function (path) { return pathMap[path]; })\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 addRoute: addRoute,\n getRoutes: getRoutes,\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 if (key) {\n // Fix #1994: using * with props: true generates a param named 0\n params[key.name || 'pathMatch'] = typeof m[i] === 'string' ? decode(m[i]) : m[i];\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 // Prevent browser scroll behavior on History popstate\n if ('scrollRestoration' in window.history) {\n window.history.scrollRestoration = 'manual';\n }\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 // preserve existing history state as it could be overriden by the user\n var stateCopy = extend({}, window.history.state);\n stateCopy.key = getStateKey();\n window.history.replaceState(stateCopy, '', absolutePath);\n window.addEventListener('popstate', handlePopState);\n return function () {\n window.removeEventListener('popstate', handlePopState);\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 handlePopState (e) {\n saveScrollPosition();\n if (e.state && e.state.key) {\n setStateKey(e.state.key);\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 // $flow-disable-line\n if ('scrollBehavior' in document.documentElement.style) {\n window.scrollTo({\n left: position.x,\n top: position.y,\n // $flow-disable-line\n behavior: shouldScroll.behavior\n });\n } else {\n window.scrollTo(position.x, position.y);\n }\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 && typeof window.history.pushState === 'function'\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 // preserve existing history state as it could be overriden by the user\n var stateCopy = extend({}, history.state);\n stateCopy.key = getStateKey();\n history.replaceState(stateCopy, '', 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// When changing thing, also edit router.d.ts\nvar NavigationFailureType = {\n redirected: 2,\n aborted: 4,\n cancelled: 8,\n duplicated: 16\n};\n\nfunction createNavigationRedirectedError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.redirected,\n (\"Redirected when going from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (stringifyRoute(\n to\n )) + \"\\\" via a navigation guard.\")\n )\n}\n\nfunction createNavigationDuplicatedError (from, to) {\n var error = createRouterError(\n from,\n to,\n NavigationFailureType.duplicated,\n (\"Avoided redundant navigation to current location: \\\"\" + (from.fullPath) + \"\\\".\")\n );\n // backwards compatible with the first introduction of Errors\n error.name = 'NavigationDuplicated';\n return error\n}\n\nfunction createNavigationCancelledError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.cancelled,\n (\"Navigation cancelled from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (to.fullPath) + \"\\\" with a new navigation.\")\n )\n}\n\nfunction createNavigationAbortedError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.aborted,\n (\"Navigation aborted from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (to.fullPath) + \"\\\" via a navigation guard.\")\n )\n}\n\nfunction createRouterError (from, to, type, message) {\n var error = new Error(message);\n error._isRouter = true;\n error.from = from;\n error.to = to;\n error.type = type;\n\n return error\n}\n\nvar propertiesToLog = ['params', 'query', 'hash'];\n\nfunction stringifyRoute (to) {\n if (typeof to === 'string') { return to }\n if ('path' in to) { return to.path }\n var location = {};\n propertiesToLog.forEach(function (key) {\n if (key in to) { location[key] = to[key]; }\n });\n return JSON.stringify(location, null, 2)\n}\n\nfunction isError (err) {\n return Object.prototype.toString.call(err).indexOf('Error') > -1\n}\n\nfunction isNavigationFailure (err, errorType) {\n return (\n isError(err) &&\n err._isRouter &&\n (errorType == null || err.type === errorType)\n )\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\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 this.listeners = [];\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;\n // catch redirect option https://github.com/vuejs/vue-router/issues/3201\n try {\n route = this.router.match(location, this.current);\n } catch (e) {\n this.errorCbs.forEach(function (cb) {\n cb(e);\n });\n // Exception should still be thrown\n throw e\n }\n var prev = this.current;\n this.confirmTransition(\n route,\n function () {\n this$1.updateRoute(route);\n onComplete && onComplete(route);\n this$1.ensureURL();\n this$1.router.afterHooks.forEach(function (hook) {\n hook && hook(route, prev);\n });\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 // Initial redirection should not mark the history as ready yet\n // because it's triggered by the redirection instead\n // https://github.com/vuejs/vue-router/issues/3225\n // https://github.com/vuejs/vue-router/issues/3331\n if (!isNavigationFailure(err, NavigationFailureType.redirected) || prev !== START) {\n this$1.ready = true;\n this$1.readyErrorCbs.forEach(function (cb) {\n cb(err);\n });\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 this.pending = route;\n var abort = function (err) {\n // changed after adding errors with\n // https://github.com/vuejs/vue-router/pull/3047 before that change,\n // redirect and aborted navigation would produce an err == null\n if (!isNavigationFailure(err) && isError(err)) {\n if (this$1.errorCbs.length) {\n this$1.errorCbs.forEach(function (cb) {\n cb(err);\n });\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, 'uncaught error during route navigation:');\n }\n console.error(err);\n }\n }\n onAbort && onAbort(err);\n };\n var lastRouteIndex = route.matched.length - 1;\n var lastCurrentIndex = current.matched.length - 1;\n if (\n isSameRoute(route, current) &&\n // in the case the route map has been dynamically appended to\n lastRouteIndex === lastCurrentIndex &&\n route.matched[lastRouteIndex] === current.matched[lastCurrentIndex]\n ) {\n this.ensureURL();\n if (route.hash) {\n handleScroll(this.router, current, route, false);\n }\n return abort(createNavigationDuplicatedError(current, 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 var iterator = function (hook, next) {\n if (this$1.pending !== route) {\n return abort(createNavigationCancelledError(current, route))\n }\n try {\n hook(route, current, function (to) {\n if (to === false) {\n // next(false) -> abort navigation, ensure current URL\n this$1.ensureURL(true);\n abort(createNavigationAbortedError(current, route));\n } else if (isError(to)) {\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(createNavigationRedirectedError(current, route));\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 // wait until async components are resolved before\n // extracting in-component enter guards\n var enterGuards = extractEnterGuards(activated);\n var queue = enterGuards.concat(this$1.router.resolveHooks);\n runQueue(queue, iterator, function () {\n if (this$1.pending !== route) {\n return abort(createNavigationCancelledError(current, route))\n }\n this$1.pending = null;\n onComplete(route);\n if (this$1.router.app) {\n this$1.router.app.$nextTick(function () {\n handleRouteEntered(route);\n });\n }\n });\n });\n};\n\nHistory.prototype.updateRoute = function updateRoute (route) {\n this.current = route;\n this.cb && this.cb(route);\n};\n\nHistory.prototype.setupListeners = function setupListeners () {\n // Default implementation is empty\n};\n\nHistory.prototype.teardown = function teardown () {\n // clean up event listeners\n // https://github.com/vuejs/vue-router/issues/2341\n this.listeners.forEach(function (cleanupListener) {\n cleanupListener();\n });\n this.listeners = [];\n\n // reset current history route\n // https://github.com/vuejs/vue-router/issues/3294\n this.current = START;\n this.pending = null;\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) {\n return extractGuards(\n activated,\n 'beforeRouteEnter',\n function (guard, _, match, key) {\n return bindEnterGuard(guard, match, key)\n }\n )\n}\n\nfunction bindEnterGuard (\n guard,\n match,\n key\n) {\n return function routeEnterGuard (to, from, next) {\n return guard(to, from, function (cb) {\n if (typeof cb === 'function') {\n if (!match.enteredCbs[key]) {\n match.enteredCbs[key] = [];\n }\n match.enteredCbs[key].push(cb);\n }\n next(cb);\n })\n }\n}\n\n/* */\n\nvar HTML5History = /*@__PURE__*/(function (History) {\n function HTML5History (router, base) {\n History.call(this, router, base);\n\n this._startLocation = getLocation(this.base);\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.setupListeners = function setupListeners () {\n var this$1 = this;\n\n if (this.listeners.length > 0) {\n return\n }\n\n var router = this.router;\n var expectScroll = router.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll) {\n this.listeners.push(setupScroll());\n }\n\n var handleRoutingEvent = function () {\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 === this$1._startLocation) {\n return\n }\n\n this$1.transitionTo(location, function (route) {\n if (supportsScroll) {\n handleScroll(router, route, current, true);\n }\n });\n };\n window.addEventListener('popstate', handleRoutingEvent);\n this.listeners.push(function () {\n window.removeEventListener('popstate', handleRoutingEvent);\n });\n };\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 = window.location.pathname;\n var pathLowerCase = path.toLowerCase();\n var baseLowerCase = base.toLowerCase();\n // base=\"/a\" shouldn't turn path=\"/app\" into \"/a/pp\"\n // https://github.com/vuejs/vue-router/issues/3555\n // so we ensure the trailing slash in the base\n if (base && ((pathLowerCase === baseLowerCase) ||\n (pathLowerCase.indexOf(cleanPath(baseLowerCase + '/')) === 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 if (this.listeners.length > 0) {\n return\n }\n\n var router = this.router;\n var expectScroll = router.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll) {\n this.listeners.push(setupScroll());\n }\n\n var handleRoutingEvent = 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 var eventType = supportsPushState ? 'popstate' : 'hashchange';\n window.addEventListener(\n eventType,\n handleRoutingEvent\n );\n this.listeners.push(function () {\n window.removeEventListener(eventType, handleRoutingEvent);\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\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 var prev = this$1.current;\n this$1.index = targetIndex;\n this$1.updateRoute(route);\n this$1.router.afterHooks.forEach(function (hook) {\n hook && hook(route, prev);\n });\n },\n function (err) {\n if (isNavigationFailure(err, NavigationFailureType.duplicated)) {\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\nvar VueRouter = function VueRouter (options) {\n if ( options === void 0 ) options = {};\n\n if (process.env.NODE_ENV !== 'production') {\n warn(this instanceof VueRouter, \"Router must be called with the new operator.\");\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 =\n 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 (raw, current, redirectedFrom) {\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' &&\n 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 if (!this$1.app) { this$1.history.teardown(); }\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 || history instanceof HashHistory) {\n var handleInitialScroll = function (routeOrError) {\n var from = history.current;\n var expectScroll = this$1.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll && 'fullPath' in routeOrError) {\n handleScroll(this$1, routeOrError, from, false);\n }\n };\n var setupListeners = function (routeOrError) {\n history.setupListeners();\n handleInitialScroll(routeOrError);\n };\n history.transitionTo(\n history.getCurrentLocation(),\n setupListeners,\n setupListeners\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(\n [],\n route.matched.map(function (m) {\n return Object.keys(m.components).map(function (key) {\n return m.components[key]\n })\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(to, current, append, this);\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.getRoutes = function getRoutes () {\n return this.matcher.getRoutes()\n};\n\nVueRouter.prototype.addRoute = function addRoute (parentOrRoute, route) {\n this.matcher.addRoute(parentOrRoute, route);\n if (this.history.current !== START) {\n this.history.transitionTo(this.history.getCurrentLocation());\n }\n};\n\nVueRouter.prototype.addRoutes = function addRoutes (routes) {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, 'router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.');\n }\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.5.4';\nVueRouter.isNavigationFailure = isNavigationFailure;\nVueRouter.NavigationFailureType = NavigationFailureType;\nVueRouter.START_LOCATION = START;\n\nif (inBrowser && window.Vue) {\n window.Vue.use(VueRouter);\n}\n\nexport default VueRouter;\n","/*!\n * Vue-Lazyload.js v1.3.4\n * (c) 2021 Awe \n * Released under the MIT License.\n */\n\n/*!\n * is-primitive \n *\n * Copyright (c) 2014-2015, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n// see http://jsperf.com/testing-value-is-primitive/7\n\nvar isPrimitive = function isPrimitive(value) {\n return value == null || typeof value !== 'function' && typeof value !== 'object';\n};\n\nvar isPrimitive$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n 'default': isPrimitive,\n __moduleExports: isPrimitive\n});\n\n/*!\n * assign-symbols \n *\n * Copyright (c) 2015, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\nvar assignSymbols = function (receiver, objects) {\n if (receiver === null || typeof receiver === 'undefined') {\n throw new TypeError('expected first argument to be an object.');\n }\n\n if (typeof objects === 'undefined' || typeof Symbol === 'undefined') {\n return receiver;\n }\n\n if (typeof Object.getOwnPropertySymbols !== 'function') {\n return receiver;\n }\n\n var isEnumerable = Object.prototype.propertyIsEnumerable;\n var target = Object(receiver);\n var len = arguments.length,\n i = 0;\n\n while (++i < len) {\n var provider = Object(arguments[i]);\n var names = Object.getOwnPropertySymbols(provider);\n\n for (var j = 0; j < names.length; j++) {\n var key = names[j];\n\n if (isEnumerable.call(provider, key)) {\n target[key] = provider[key];\n }\n }\n }\n return target;\n};\n\nvar assignSymbols$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n 'default': assignSymbols,\n __moduleExports: assignSymbols\n});\n\nvar toString = Object.prototype.toString;\n\n/**\n * Get the native `typeof` a value.\n *\n * @param {*} `val`\n * @return {*} Native javascript type\n */\n\nvar kindOf = function kindOf(val) {\n var type = typeof val;\n\n // primitivies\n if (type === 'undefined') {\n return 'undefined';\n }\n if (val === null) {\n return 'null';\n }\n if (val === true || val === false || val instanceof Boolean) {\n return 'boolean';\n }\n if (type === 'string' || val instanceof String) {\n return 'string';\n }\n if (type === 'number' || val instanceof Number) {\n return 'number';\n }\n\n // functions\n if (type === 'function' || val instanceof Function) {\n if (typeof val.constructor.name !== 'undefined' && val.constructor.name.slice(0, 9) === 'Generator') {\n return 'generatorfunction';\n }\n return 'function';\n }\n\n // array\n if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) {\n return 'array';\n }\n\n // check for instances of RegExp and Date before calling `toString`\n if (val instanceof RegExp) {\n return 'regexp';\n }\n if (val instanceof Date) {\n return 'date';\n }\n\n // other objects\n type = toString.call(val);\n\n if (type === '[object RegExp]') {\n return 'regexp';\n }\n if (type === '[object Date]') {\n return 'date';\n }\n if (type === '[object Arguments]') {\n return 'arguments';\n }\n if (type === '[object Error]') {\n return 'error';\n }\n if (type === '[object Promise]') {\n return 'promise';\n }\n\n // buffer\n if (isBuffer(val)) {\n return 'buffer';\n }\n\n // es6: Map, WeakMap, Set, WeakSet\n if (type === '[object Set]') {\n return 'set';\n }\n if (type === '[object WeakSet]') {\n return 'weakset';\n }\n if (type === '[object Map]') {\n return 'map';\n }\n if (type === '[object WeakMap]') {\n return 'weakmap';\n }\n if (type === '[object Symbol]') {\n return 'symbol';\n }\n\n if (type === '[object Map Iterator]') {\n return 'mapiterator';\n }\n if (type === '[object Set Iterator]') {\n return 'setiterator';\n }\n if (type === '[object String Iterator]') {\n return 'stringiterator';\n }\n if (type === '[object Array Iterator]') {\n return 'arrayiterator';\n }\n\n // typed arrays\n if (type === '[object Int8Array]') {\n return 'int8array';\n }\n if (type === '[object Uint8Array]') {\n return 'uint8array';\n }\n if (type === '[object Uint8ClampedArray]') {\n return 'uint8clampedarray';\n }\n if (type === '[object Int16Array]') {\n return 'int16array';\n }\n if (type === '[object Uint16Array]') {\n return 'uint16array';\n }\n if (type === '[object Int32Array]') {\n return 'int32array';\n }\n if (type === '[object Uint32Array]') {\n return 'uint32array';\n }\n if (type === '[object Float32Array]') {\n return 'float32array';\n }\n if (type === '[object Float64Array]') {\n return 'float64array';\n }\n\n // must be a plain object\n return 'object';\n};\n\n/**\n * If you need to support Safari 5-7 (8-10 yr-old browser),\n * take a look at https://github.com/feross/is-buffer\n */\n\nfunction isBuffer(val) {\n return val.constructor && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\nvar kindOf$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n 'default': kindOf,\n __moduleExports: kindOf\n});\n\nvar isPrimitive$2 = ( isPrimitive$1 && isPrimitive ) || isPrimitive$1;\n\nvar assignSymbols$2 = ( assignSymbols$1 && assignSymbols ) || assignSymbols$1;\n\nvar typeOf = ( kindOf$1 && kindOf ) || kindOf$1;\n\nfunction assign(target /*, objects*/) {\n target = target || {};\n var len = arguments.length,\n i = 0;\n if (len === 1) {\n return target;\n }\n while (++i < len) {\n var val = arguments[i];\n if (isPrimitive$2(target)) {\n target = val;\n }\n if (isObject(val)) {\n extend(target, val);\n }\n }\n return target;\n}\n\n/**\n * Shallow extend\n */\n\nfunction extend(target, obj) {\n assignSymbols$2(target, obj);\n\n for (var key in obj) {\n if (isValidKey(key) && hasOwn(obj, key)) {\n var val = obj[key];\n if (isObject(val)) {\n if (typeOf(target[key]) === 'undefined' && typeOf(val) === 'function') {\n target[key] = val;\n }\n target[key] = assign(target[key] || {}, val);\n } else {\n target[key] = val;\n }\n }\n }\n return target;\n}\n\n/**\n * Returns true if the object is a plain object or a function.\n */\n\nfunction isObject(obj) {\n return typeOf(obj) === 'object' || typeOf(obj) === 'function';\n}\n\n/**\n * Returns true if the given `key` is an own property of `obj`.\n */\n\nfunction hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\n/**\n * Returns true if the given `key` is a valid key that can be used for assigning properties.\n */\n\nfunction isValidKey(key) {\n return key !== '__proto__' && key !== 'constructor' && key !== 'prototype';\n}\n\n/**\n * Expose `assign`\n */\n\nvar assignDeep = assign;\n\nconst inBrowser = typeof window !== 'undefined' && window !== null;\n\nconst hasIntersectionObserver = checkIntersectionObserver();\n\nfunction checkIntersectionObserver() {\n if (inBrowser && 'IntersectionObserver' in window && 'IntersectionObserverEntry' in window && 'intersectionRatio' in window.IntersectionObserverEntry.prototype) {\n // Minimal polyfill for Edge 15's lack of `isIntersecting`\n // See: https://github.com/w3c/IntersectionObserver/issues/211\n if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {\n Object.defineProperty(window.IntersectionObserverEntry.prototype, 'isIntersecting', {\n get: function () {\n return this.intersectionRatio > 0;\n }\n });\n }\n return true;\n }\n return false;\n}\n\nconst modeType = {\n event: 'event',\n observer: 'observer'\n\n // CustomEvent polyfill for IE\n};const CustomEvent = function () {\n if (!inBrowser) return;\n // not IE\n if (typeof window.CustomEvent === 'function') return window.CustomEvent;\n function CustomEvent(event, params) {\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n }\n CustomEvent.prototype = window.Event.prototype;\n return CustomEvent;\n}();\n\nfunction remove(arr, item) {\n if (!arr.length) return;\n const index = arr.indexOf(item);\n if (index > -1) return arr.splice(index, 1);\n}\n\nfunction some(arr, fn) {\n let has = false;\n for (let i = 0, len = arr.length; i < len; i++) {\n if (fn(arr[i])) {\n has = true;\n break;\n }\n }\n return has;\n}\n\nfunction getBestSelectionFromSrcset(el, scale) {\n if (el.tagName !== 'IMG' || !el.getAttribute('data-srcset')) return;\n\n let options = el.getAttribute('data-srcset');\n const result = [];\n const container = el.parentNode;\n const containerWidth = container.offsetWidth * scale;\n\n let spaceIndex;\n let tmpSrc;\n let tmpWidth;\n\n options = options.trim().split(',');\n\n options.map(item => {\n item = item.trim();\n spaceIndex = item.lastIndexOf(' ');\n if (spaceIndex === -1) {\n tmpSrc = item;\n tmpWidth = 999998;\n } else {\n tmpSrc = item.substr(0, spaceIndex);\n tmpWidth = parseInt(item.substr(spaceIndex + 1, item.length - spaceIndex - 2), 10);\n }\n result.push([tmpWidth, tmpSrc]);\n });\n\n result.sort(function (a, b) {\n if (a[0] < b[0]) {\n return 1;\n }\n if (a[0] > b[0]) {\n return -1;\n }\n if (a[0] === b[0]) {\n if (b[1].indexOf('.webp', b[1].length - 5) !== -1) {\n return 1;\n }\n if (a[1].indexOf('.webp', a[1].length - 5) !== -1) {\n return -1;\n }\n }\n return 0;\n });\n let bestSelectedSrc = '';\n let tmpOption;\n\n for (let i = 0; i < result.length; i++) {\n tmpOption = result[i];\n bestSelectedSrc = tmpOption[1];\n const next = result[i + 1];\n if (next && next[0] < containerWidth) {\n bestSelectedSrc = tmpOption[1];\n break;\n } else if (!next) {\n bestSelectedSrc = tmpOption[1];\n break;\n }\n }\n\n return bestSelectedSrc;\n}\n\nfunction find(arr, fn) {\n let item;\n for (let i = 0, len = arr.length; i < len; i++) {\n if (fn(arr[i])) {\n item = arr[i];\n break;\n }\n }\n return item;\n}\n\nconst getDPR = (scale = 1) => inBrowser ? window.devicePixelRatio || scale : scale;\n\nfunction supportWebp() {\n if (!inBrowser) return false;\n\n let support = true;\n\n try {\n const elem = document.createElement('canvas');\n\n if (elem.getContext && elem.getContext('2d')) {\n support = elem.toDataURL('image/webp').indexOf('data:image/webp') === 0;\n }\n } catch (err) {\n support = false;\n }\n\n return support;\n}\n\nfunction throttle(action, delay) {\n let timeout = null;\n let movement = null;\n let lastRun = 0;\n let needRun = false;\n return function () {\n needRun = true;\n if (timeout) {\n return;\n }\n let elapsed = Date.now() - lastRun;\n let context = this;\n let args = arguments;\n let runCallback = function () {\n lastRun = Date.now();\n timeout = false;\n action.apply(context, args);\n };\n if (elapsed >= delay) {\n runCallback();\n } else {\n timeout = setTimeout(runCallback, delay);\n }\n if (needRun) {\n clearTimeout(movement);\n movement = setTimeout(runCallback, 2 * delay);\n }\n };\n}\n\nfunction testSupportsPassive() {\n if (!inBrowser) return;\n let support = false;\n try {\n let opts = Object.defineProperty({}, 'passive', {\n get: function () {\n support = true;\n }\n });\n window.addEventListener('test', null, opts);\n } catch (e) {}\n return support;\n}\n\nconst supportsPassive = testSupportsPassive();\n\nconst _ = {\n on(el, type, func, capture = false) {\n if (supportsPassive) {\n el.addEventListener(type, func, {\n capture: capture,\n passive: true\n });\n } else {\n el.addEventListener(type, func, capture);\n }\n },\n off(el, type, func, capture = false) {\n el.removeEventListener(type, func, capture);\n }\n};\n\nconst loadImageAsync = (item, resolve, reject) => {\n let image = new Image();\n if (!item || !item.src) {\n const err = new Error('image src is required');\n return reject(err);\n }\n\n image.src = item.src;\n if (item.cors) {\n image.crossOrigin = item.cors;\n }\n\n image.onload = function () {\n resolve({\n naturalHeight: image.naturalHeight,\n naturalWidth: image.naturalWidth,\n src: image.src\n });\n };\n\n image.onerror = function (e) {\n reject(e);\n };\n};\n\nconst style = (el, prop) => {\n return typeof getComputedStyle !== 'undefined' ? getComputedStyle(el, null).getPropertyValue(prop) : el.style[prop];\n};\n\nconst overflow = el => {\n return style(el, 'overflow') + style(el, 'overflow-y') + style(el, 'overflow-x');\n};\n\nconst scrollParent = el => {\n if (!inBrowser) return;\n if (!(el instanceof HTMLElement)) {\n return window;\n }\n\n let parent = el;\n\n while (parent) {\n if (parent === document.body || parent === document.documentElement) {\n break;\n }\n\n if (!parent.parentNode) {\n break;\n }\n\n if (/(scroll|auto)/.test(overflow(parent))) {\n return parent;\n }\n\n parent = parent.parentNode;\n }\n\n return window;\n};\n\nfunction isObject$1(obj) {\n return obj !== null && typeof obj === 'object';\n}\n\nfunction ObjectKeys(obj) {\n if (!(obj instanceof Object)) return [];\n if (Object.keys) {\n return Object.keys(obj);\n } else {\n let keys = [];\n for (let key in obj) {\n if (obj.hasOwnProperty(key)) {\n keys.push(key);\n }\n }\n return keys;\n }\n}\n\nfunction ArrayFrom(arrLike) {\n let len = arrLike.length;\n const list = [];\n for (let i = 0; i < len; i++) {\n list.push(arrLike[i]);\n }\n return list;\n}\n\nfunction noop() {}\n\nclass ImageCache {\n constructor({ max }) {\n this.options = {\n max: max || 100\n };\n this._caches = [];\n }\n\n has(key) {\n return this._caches.indexOf(key) > -1;\n }\n\n add(key) {\n if (this.has(key)) return;\n this._caches.push(key);\n if (this._caches.length > this.options.max) {\n this.free();\n }\n }\n\n free() {\n this._caches.shift();\n }\n}\n\n// el: {\n// state,\n// src,\n// error,\n// loading\n// }\n\nclass ReactiveListener {\n constructor({ el, src, error, loading, bindType, $parent, options, cors, elRenderer, imageCache }) {\n this.el = el;\n this.src = src;\n this.error = error;\n this.loading = loading;\n this.bindType = bindType;\n this.attempt = 0;\n this.cors = cors;\n\n this.naturalHeight = 0;\n this.naturalWidth = 0;\n\n this.options = options;\n\n this.rect = null;\n\n this.$parent = $parent;\n this.elRenderer = elRenderer;\n this._imageCache = imageCache;\n this.performanceData = {\n init: Date.now(),\n loadStart: 0,\n loadEnd: 0\n };\n\n this.filter();\n this.initState();\n this.render('loading', false);\n }\n\n /*\n * init listener state\n * @return\n */\n initState() {\n if ('dataset' in this.el) {\n this.el.dataset.src = this.src;\n } else {\n this.el.setAttribute('data-src', this.src);\n }\n\n this.state = {\n loading: false,\n error: false,\n loaded: false,\n rendered: false\n };\n }\n\n /*\n * record performance\n * @return\n */\n record(event) {\n this.performanceData[event] = Date.now();\n }\n\n /*\n * update image listener data\n * @param {String} image uri\n * @param {String} loading image uri\n * @param {String} error image uri\n * @return\n */\n update({ src, loading, error }) {\n const oldSrc = this.src;\n this.src = src;\n this.loading = loading;\n this.error = error;\n this.filter();\n if (oldSrc !== this.src) {\n this.attempt = 0;\n this.initState();\n }\n }\n\n /*\n * get el node rect\n * @return\n */\n getRect() {\n this.rect = this.el.getBoundingClientRect();\n }\n\n /*\n * check el is in view\n * @return {Boolean} el is in view\n */\n checkInView() {\n this.getRect();\n return this.rect.top < window.innerHeight * this.options.preLoad && this.rect.bottom > this.options.preLoadTop && this.rect.left < window.innerWidth * this.options.preLoad && this.rect.right > 0;\n }\n\n /*\n * listener filter\n */\n filter() {\n ObjectKeys(this.options.filter).map(key => {\n this.options.filter[key](this, this.options);\n });\n }\n\n /*\n * render loading first\n * @params cb:Function\n * @return\n */\n renderLoading(cb) {\n this.state.loading = true;\n loadImageAsync({\n src: this.loading,\n cors: this.cors\n }, data => {\n this.render('loading', false);\n this.state.loading = false;\n cb();\n }, () => {\n // handler `loading image` load failed\n cb();\n this.state.loading = false;\n if (!this.options.silent) console.warn(`VueLazyload log: load failed with loading image(${this.loading})`);\n });\n }\n\n /*\n * try load image and render it\n * @return\n */\n load(onFinish = noop) {\n if (this.attempt > this.options.attempt - 1 && this.state.error) {\n if (!this.options.silent) console.log(`VueLazyload log: ${this.src} tried too more than ${this.options.attempt} times`);\n onFinish();\n return;\n }\n if (this.state.rendered && this.state.loaded) return;\n if (this._imageCache.has(this.src)) {\n this.state.loaded = true;\n this.render('loaded', true);\n this.state.rendered = true;\n return onFinish();\n }\n\n this.renderLoading(() => {\n this.attempt++;\n\n this.options.adapter['beforeLoad'] && this.options.adapter['beforeLoad'](this, this.options);\n this.record('loadStart');\n\n loadImageAsync({\n src: this.src,\n cors: this.cors\n }, data => {\n this.naturalHeight = data.naturalHeight;\n this.naturalWidth = data.naturalWidth;\n this.state.loaded = true;\n this.state.error = false;\n this.record('loadEnd');\n this.render('loaded', false);\n this.state.rendered = true;\n this._imageCache.add(this.src);\n onFinish();\n }, err => {\n !this.options.silent && console.error(err);\n this.state.error = true;\n this.state.loaded = false;\n this.render('error', false);\n });\n });\n }\n\n /*\n * render image\n * @param {String} state to render // ['loading', 'src', 'error']\n * @param {String} is form cache\n * @return\n */\n render(state, cache) {\n this.elRenderer(this, state, cache);\n }\n\n /*\n * output performance data\n * @return {Object} performance data\n */\n performance() {\n let state = 'loading';\n let time = 0;\n\n if (this.state.loaded) {\n state = 'loaded';\n time = (this.performanceData.loadEnd - this.performanceData.loadStart) / 1000;\n }\n\n if (this.state.error) state = 'error';\n\n return {\n src: this.src,\n state,\n time\n };\n }\n\n /*\n * $destroy\n * @return\n */\n $destroy() {\n this.el = null;\n this.src = null;\n this.error = null;\n this.loading = null;\n this.bindType = null;\n this.attempt = 0;\n }\n}\n\nconst DEFAULT_URL = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\nconst DEFAULT_EVENTS = ['scroll', 'wheel', 'mousewheel', 'resize', 'animationend', 'transitionend', 'touchmove'];\nconst DEFAULT_OBSERVER_OPTIONS = {\n rootMargin: '0px',\n threshold: 0\n};\n\nfunction Lazy(Vue) {\n return class Lazy {\n constructor({ preLoad, error, throttleWait, preLoadTop, dispatchEvent, loading, attempt, silent = true, scale, listenEvents, hasbind, filter, adapter, observer, observerOptions }) {\n this.version = '\"1.3.4\"';\n this.mode = modeType.event;\n this.ListenerQueue = [];\n this.TargetIndex = 0;\n this.TargetQueue = [];\n this.options = {\n silent: silent,\n dispatchEvent: !!dispatchEvent,\n throttleWait: throttleWait || 200,\n preLoad: preLoad || 1.3,\n preLoadTop: preLoadTop || 0,\n error: error || DEFAULT_URL,\n loading: loading || DEFAULT_URL,\n attempt: attempt || 3,\n scale: scale || getDPR(scale),\n ListenEvents: listenEvents || DEFAULT_EVENTS,\n hasbind: false,\n supportWebp: supportWebp(),\n filter: filter || {},\n adapter: adapter || {},\n observer: !!observer,\n observerOptions: observerOptions || DEFAULT_OBSERVER_OPTIONS\n };\n this._initEvent();\n this._imageCache = new ImageCache({ max: 200 });\n this.lazyLoadHandler = throttle(this._lazyLoadHandler.bind(this), this.options.throttleWait);\n\n this.setMode(this.options.observer ? modeType.observer : modeType.event);\n }\n\n /**\n * update config\n * @param {Object} config params\n * @return\n */\n config(options = {}) {\n assignDeep(this.options, options);\n }\n\n /**\n * output listener's load performance\n * @return {Array}\n */\n performance() {\n let list = [];\n\n this.ListenerQueue.map(item => {\n list.push(item.performance());\n });\n\n return list;\n }\n\n /*\n * add lazy component to queue\n * @param {Vue} vm lazy component instance\n * @return\n */\n addLazyBox(vm) {\n this.ListenerQueue.push(vm);\n if (inBrowser) {\n this._addListenerTarget(window);\n this._observer && this._observer.observe(vm.el);\n if (vm.$el && vm.$el.parentNode) {\n this._addListenerTarget(vm.$el.parentNode);\n }\n }\n }\n\n /*\n * add image listener to queue\n * @param {DOM} el\n * @param {object} binding vue directive binding\n * @param {vnode} vnode vue directive vnode\n * @return\n */\n add(el, binding, vnode) {\n if (some(this.ListenerQueue, item => item.el === el)) {\n this.update(el, binding);\n return Vue.nextTick(this.lazyLoadHandler);\n }\n\n let { src, loading, error, cors } = this._valueFormatter(binding.value);\n\n Vue.nextTick(() => {\n src = getBestSelectionFromSrcset(el, this.options.scale) || src;\n this._observer && this._observer.observe(el);\n\n const container = Object.keys(binding.modifiers)[0];\n let $parent;\n\n if (container) {\n $parent = vnode.context.$refs[container];\n // if there is container passed in, try ref first, then fallback to getElementById to support the original usage\n $parent = $parent ? $parent.$el || $parent : document.getElementById(container);\n }\n\n if (!$parent) {\n $parent = scrollParent(el);\n }\n\n const newListener = new ReactiveListener({\n bindType: binding.arg,\n $parent,\n el,\n loading,\n error,\n src,\n cors,\n elRenderer: this._elRenderer.bind(this),\n options: this.options,\n imageCache: this._imageCache\n });\n\n this.ListenerQueue.push(newListener);\n\n if (inBrowser) {\n this._addListenerTarget(window);\n this._addListenerTarget($parent);\n }\n\n this.lazyLoadHandler();\n Vue.nextTick(() => this.lazyLoadHandler());\n });\n }\n\n /**\n * update image src\n * @param {DOM} el\n * @param {object} vue directive binding\n * @return\n */\n update(el, binding, vnode) {\n let { src, loading, error } = this._valueFormatter(binding.value);\n src = getBestSelectionFromSrcset(el, this.options.scale) || src;\n\n const exist = find(this.ListenerQueue, item => item.el === el);\n if (!exist) {\n this.add(el, binding, vnode);\n } else {\n exist.update({\n src,\n loading,\n error\n });\n }\n if (this._observer) {\n this._observer.unobserve(el);\n this._observer.observe(el);\n }\n this.lazyLoadHandler();\n Vue.nextTick(() => this.lazyLoadHandler());\n }\n\n /**\n * remove listener form list\n * @param {DOM} el\n * @return\n */\n remove(el) {\n if (!el) return;\n this._observer && this._observer.unobserve(el);\n const existItem = find(this.ListenerQueue, item => item.el === el);\n if (existItem) {\n this._removeListenerTarget(existItem.$parent);\n this._removeListenerTarget(window);\n remove(this.ListenerQueue, existItem);\n existItem.$destroy();\n }\n }\n\n /*\n * remove lazy components form list\n * @param {Vue} vm Vue instance\n * @return\n */\n removeComponent(vm) {\n if (!vm) return;\n remove(this.ListenerQueue, vm);\n this._observer && this._observer.unobserve(vm.el);\n if (vm.$parent && vm.$el.parentNode) {\n this._removeListenerTarget(vm.$el.parentNode);\n }\n this._removeListenerTarget(window);\n }\n\n setMode(mode) {\n if (!hasIntersectionObserver && mode === modeType.observer) {\n mode = modeType.event;\n }\n\n this.mode = mode; // event or observer\n\n if (mode === modeType.event) {\n if (this._observer) {\n this.ListenerQueue.forEach(listener => {\n this._observer.unobserve(listener.el);\n });\n this._observer = null;\n }\n\n this.TargetQueue.forEach(target => {\n this._initListen(target.el, true);\n });\n } else {\n this.TargetQueue.forEach(target => {\n this._initListen(target.el, false);\n });\n this._initIntersectionObserver();\n }\n }\n\n /*\n *** Private functions ***\n */\n\n /*\n * add listener target\n * @param {DOM} el listener target\n * @return\n */\n _addListenerTarget(el) {\n if (!el) return;\n let target = find(this.TargetQueue, target => target.el === el);\n if (!target) {\n target = {\n el: el,\n id: ++this.TargetIndex,\n childrenCount: 1,\n listened: true\n };\n this.mode === modeType.event && this._initListen(target.el, true);\n this.TargetQueue.push(target);\n } else {\n target.childrenCount++;\n }\n return this.TargetIndex;\n }\n\n /*\n * remove listener target or reduce target childrenCount\n * @param {DOM} el or window\n * @return\n */\n _removeListenerTarget(el) {\n this.TargetQueue.forEach((target, index) => {\n if (target.el === el) {\n target.childrenCount--;\n if (!target.childrenCount) {\n this._initListen(target.el, false);\n this.TargetQueue.splice(index, 1);\n target = null;\n }\n }\n });\n }\n\n /*\n * add or remove eventlistener\n * @param {DOM} el DOM or Window\n * @param {boolean} start flag\n * @return\n */\n _initListen(el, start) {\n this.options.ListenEvents.forEach(evt => _[start ? 'on' : 'off'](el, evt, this.lazyLoadHandler));\n }\n\n _initEvent() {\n this.Event = {\n listeners: {\n loading: [],\n loaded: [],\n error: []\n }\n };\n\n this.$on = (event, func) => {\n if (!this.Event.listeners[event]) this.Event.listeners[event] = [];\n this.Event.listeners[event].push(func);\n };\n\n this.$once = (event, func) => {\n const vm = this;\n function on() {\n vm.$off(event, on);\n func.apply(vm, arguments);\n }\n this.$on(event, on);\n };\n\n this.$off = (event, func) => {\n if (!func) {\n if (!this.Event.listeners[event]) return;\n this.Event.listeners[event].length = 0;\n return;\n }\n remove(this.Event.listeners[event], func);\n };\n\n this.$emit = (event, context, inCache) => {\n if (!this.Event.listeners[event]) return;\n this.Event.listeners[event].forEach(func => func(context, inCache));\n };\n }\n\n /**\n * find nodes which in viewport and trigger load\n * @return\n */\n _lazyLoadHandler() {\n const freeList = [];\n this.ListenerQueue.forEach((listener, index) => {\n if (!listener.el || !listener.el.parentNode) {\n freeList.push(listener);\n }\n const catIn = listener.checkInView();\n if (!catIn) return;\n listener.load();\n });\n freeList.forEach(item => {\n remove(this.ListenerQueue, item);\n item.$destroy();\n });\n }\n /**\n * init IntersectionObserver\n * set mode to observer\n * @return\n */\n _initIntersectionObserver() {\n if (!hasIntersectionObserver) return;\n this._observer = new IntersectionObserver(this._observerHandler.bind(this), this.options.observerOptions);\n if (this.ListenerQueue.length) {\n this.ListenerQueue.forEach(listener => {\n this._observer.observe(listener.el);\n });\n }\n }\n\n /**\n * init IntersectionObserver\n * @return\n */\n _observerHandler(entries, observer) {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n this.ListenerQueue.forEach(listener => {\n if (listener.el === entry.target) {\n if (listener.state.loaded) return this._observer.unobserve(listener.el);\n listener.load();\n }\n });\n }\n });\n }\n\n /**\n * set element attribute with image'url and state\n * @param {object} lazyload listener object\n * @param {string} state will be rendered\n * @param {bool} inCache is rendered from cache\n * @return\n */\n _elRenderer(listener, state, cache) {\n if (!listener.el) return;\n const { el, bindType } = listener;\n\n let src;\n switch (state) {\n case 'loading':\n src = listener.loading;\n break;\n case 'error':\n src = listener.error;\n break;\n default:\n src = listener.src;\n break;\n }\n\n if (bindType) {\n el.style[bindType] = 'url(\"' + src + '\")';\n } else if (el.getAttribute('src') !== src) {\n el.setAttribute('src', src);\n }\n\n el.setAttribute('lazy', state);\n\n this.$emit(state, listener, cache);\n this.options.adapter[state] && this.options.adapter[state](listener, this.options);\n\n if (this.options.dispatchEvent) {\n const event = new CustomEvent(state, {\n detail: listener\n });\n el.dispatchEvent(event);\n }\n }\n\n /**\n * generate loading loaded error image url\n * @param {string} image's src\n * @return {object} image's loading, loaded, error url\n */\n _valueFormatter(value) {\n let src = value;\n let loading = this.options.loading;\n let error = this.options.error;\n\n // value is object\n if (isObject$1(value)) {\n if (!value.src && !this.options.silent) console.error('Vue Lazyload warning: miss src with ' + value);\n src = value.src;\n loading = value.loading || this.options.loading;\n error = value.error || this.options.error;\n }\n return {\n src,\n loading,\n error\n };\n }\n };\n}\n\nLazy.install = (Vue, options = {}) => {\n const LazyClass = Lazy(Vue);\n const lazy = new LazyClass(options);\n\n const isVue2 = Vue.version.split('.')[0] === '2';\n if (isVue2) {\n Vue.directive('lazy', {\n bind: lazy.add.bind(lazy),\n update: lazy.update.bind(lazy),\n componentUpdated: lazy.lazyLoadHandler.bind(lazy),\n unbind: lazy.remove.bind(lazy)\n });\n } else {\n Vue.directive('lazy', {\n bind: lazy.lazyLoadHandler.bind(lazy),\n update(newValue, oldValue) {\n assignDeep(this.vm.$refs, this.vm.$els);\n lazy.add(this.el, {\n modifiers: this.modifiers || {},\n arg: this.arg,\n value: newValue,\n oldValue: oldValue\n }, {\n context: this.vm\n });\n },\n unbind() {\n lazy.remove(this.el);\n }\n });\n }\n};\n\nconst LazyComponent = lazy => {\n return {\n props: {\n tag: {\n type: String,\n default: 'div'\n }\n },\n render(h) {\n return h(this.tag, null, this.show ? this.$slots.default : null);\n },\n data() {\n return {\n el: null,\n state: {\n loaded: false\n },\n rect: {},\n show: false\n };\n },\n mounted() {\n this.el = this.$el;\n lazy.addLazyBox(this);\n lazy.lazyLoadHandler();\n },\n beforeDestroy() {\n lazy.removeComponent(this);\n },\n methods: {\n getRect() {\n this.rect = this.$el.getBoundingClientRect();\n },\n checkInView() {\n this.getRect();\n return inBrowser && this.rect.top < window.innerHeight * lazy.options.preLoad && this.rect.bottom > 0 && this.rect.left < window.innerWidth * lazy.options.preLoad && this.rect.right > 0;\n },\n load() {\n this.show = true;\n this.state.loaded = true;\n this.$emit('show', this);\n },\n destroy() {\n return this.$destroy;\n }\n }\n };\n};\n\nLazyComponent.install = function (Vue, options = {}) {\n const LazyClass = Lazy(Vue);\n const lazy = new LazyClass(options);\n Vue.component('lazy-component', LazyComponent(lazy));\n};\n\nclass LazyContainerMananger {\n constructor({ lazy }) {\n this.lazy = lazy;\n lazy.lazyContainerMananger = this;\n this._queue = [];\n }\n\n bind(el, binding, vnode) {\n const container = new LazyContainer({ el, binding, vnode, lazy: this.lazy });\n this._queue.push(container);\n }\n\n update(el, binding, vnode) {\n const container = find(this._queue, item => item.el === el);\n if (!container) return;\n container.update({ el, binding, vnode });\n }\n\n unbind(el, binding, vnode) {\n const container = find(this._queue, item => item.el === el);\n if (!container) return;\n container.clear();\n remove(this._queue, container);\n }\n}\n\nconst defaultOptions = {\n selector: 'img'\n};\n\nclass LazyContainer {\n constructor({ el, binding, vnode, lazy }) {\n this.el = null;\n this.vnode = vnode;\n this.binding = binding;\n this.options = {};\n this.lazy = lazy;\n\n this._queue = [];\n this.update({ el, binding });\n }\n\n update({ el, binding }) {\n this.el = el;\n this.options = assignDeep({}, defaultOptions, binding.value);\n\n const imgs = this.getImgs();\n imgs.forEach(el => {\n this.lazy.add(el, assignDeep({}, this.binding, {\n value: {\n src: 'dataset' in el ? el.dataset.src : el.getAttribute('data-src'),\n error: ('dataset' in el ? el.dataset.error : el.getAttribute('data-error')) || this.options.error,\n loading: ('dataset' in el ? el.dataset.loading : el.getAttribute('data-loading')) || this.options.loading\n }\n }), this.vnode);\n });\n }\n\n getImgs() {\n return ArrayFrom(this.el.querySelectorAll(this.options.selector));\n }\n\n clear() {\n const imgs = this.getImgs();\n imgs.forEach(el => this.lazy.remove(el));\n\n this.vnode = null;\n this.binding = null;\n this.lazy = null;\n }\n}\n\nLazyContainer.install = (Vue, options = {}) => {\n const LazyClass = Lazy(Vue);\n const lazy = new LazyClass(options);\n const lazyContainer = new LazyContainer({ lazy });\n\n const isVue2 = Vue.version.split('.')[0] === '2';\n if (isVue2) {\n Vue.directive('lazy-container', {\n bind: lazyContainer.bind.bind(lazyContainer),\n componentUpdated: lazyContainer.update.bind(lazyContainer),\n unbind: lazyContainer.unbind.bind(lazyContainer)\n });\n } else {\n Vue.directive('lazy-container', {\n update(newValue, oldValue) {\n lazyContainer.update(this.el, {\n modifiers: this.modifiers || {},\n arg: this.arg,\n value: newValue,\n oldValue: oldValue\n }, {\n context: this.vm\n });\n },\n unbind() {\n lazyContainer.unbind(this.el);\n }\n });\n }\n};\n\nconst LazyImage = lazyManager => {\n return {\n props: {\n src: [String, Object],\n tag: {\n type: String,\n default: 'img'\n }\n },\n render(h) {\n return h(this.tag, {\n attrs: {\n src: this.renderSrc\n }\n }, this.$slots.default);\n },\n data() {\n return {\n el: null,\n options: {\n src: '',\n error: '',\n loading: '',\n attempt: lazyManager.options.attempt\n },\n state: {\n loaded: false,\n error: false,\n attempt: 0\n },\n rect: {},\n renderSrc: ''\n };\n },\n watch: {\n src() {\n this.init();\n lazyManager.addLazyBox(this);\n lazyManager.lazyLoadHandler();\n }\n },\n created() {\n this.init();\n this.renderSrc = this.options.loading;\n },\n mounted() {\n this.el = this.$el;\n lazyManager.addLazyBox(this);\n lazyManager.lazyLoadHandler();\n },\n beforeDestroy() {\n lazyManager.removeComponent(this);\n },\n methods: {\n init() {\n const { src, loading, error } = lazyManager._valueFormatter(this.src);\n this.state.loaded = false;\n this.options.src = src;\n this.options.error = error;\n this.options.loading = loading;\n this.renderSrc = this.options.loading;\n },\n getRect() {\n this.rect = this.$el.getBoundingClientRect();\n },\n checkInView() {\n this.getRect();\n return inBrowser && this.rect.top < window.innerHeight * lazyManager.options.preLoad && this.rect.bottom > 0 && this.rect.left < window.innerWidth * lazyManager.options.preLoad && this.rect.right > 0;\n },\n load(onFinish = noop) {\n if (this.state.attempt > this.options.attempt - 1 && this.state.error) {\n if (!lazyManager.options.silent) console.log(`VueLazyload log: ${this.options.src} tried too more than ${this.options.attempt} times`);\n onFinish();\n return;\n }\n const src = this.options.src;\n loadImageAsync({ src }, ({ src }) => {\n this.renderSrc = src;\n this.state.loaded = true;\n }, e => {\n this.state.attempt++;\n this.renderSrc = this.options.error;\n this.state.error = true;\n });\n }\n }\n };\n};\n\nLazyImage.install = (Vue, options = {}) => {\n const LazyClass = Lazy(Vue);\n const lazy = new LazyClass(options);\n Vue.component('lazy-image', LazyImage(lazy));\n};\n\nvar index = {\n /*\n * install function\n * @param {Vue} Vue\n * @param {object} options lazyload options\n */\n install(Vue, options = {}) {\n const LazyClass = Lazy(Vue);\n const lazy = new LazyClass(options);\n const lazyContainer = new LazyContainerMananger({ lazy });\n\n const isVue2 = Vue.version.split('.')[0] === '2';\n\n Vue.prototype.$Lazyload = lazy;\n\n if (options.lazyComponent) {\n Vue.component('lazy-component', LazyComponent(lazy));\n }\n\n if (options.lazyImage) {\n Vue.component('lazy-image', LazyImage(lazy));\n }\n\n if (isVue2) {\n Vue.directive('lazy', {\n bind: lazy.add.bind(lazy),\n update: lazy.update.bind(lazy),\n componentUpdated: lazy.lazyLoadHandler.bind(lazy),\n unbind: lazy.remove.bind(lazy)\n });\n Vue.directive('lazy-container', {\n bind: lazyContainer.bind.bind(lazyContainer),\n componentUpdated: lazyContainer.update.bind(lazyContainer),\n unbind: lazyContainer.unbind.bind(lazyContainer)\n });\n } else {\n Vue.directive('lazy', {\n bind: lazy.lazyLoadHandler.bind(lazy),\n update(newValue, oldValue) {\n assignDeep(this.vm.$refs, this.vm.$els);\n lazy.add(this.el, {\n modifiers: this.modifiers || {},\n arg: this.arg,\n value: newValue,\n oldValue: oldValue\n }, {\n context: this.vm\n });\n },\n unbind() {\n lazy.remove(this.el);\n }\n });\n\n Vue.directive('lazy-container', {\n update(newValue, oldValue) {\n lazyContainer.update(this.el, {\n modifiers: this.modifiers || {},\n arg: this.arg,\n value: newValue,\n oldValue: oldValue\n }, {\n context: this.vm\n });\n },\n unbind() {\n lazyContainer.unbind(this.el);\n }\n });\n }\n }\n};\n\nexport default index;\nexport { Lazy, LazyComponent, LazyContainerMananger as LazyContainer, LazyImage };\n"],"sourceRoot":""}