{"version":3,"sources":["webpack:///./node_modules/vue-router/dist/vue-router.esm.js","webpack:///./node_modules/vue-zoomer/dist/vue-zoomer.esm.js","webpack:///./node_modules/vue-quill-editor/dist/vue-quill-editor.js","webpack:///./node_modules/vue-social-sharing/dist/vue-social-sharing.js"],"names":["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","options","clone","route","name","meta","path","hash","params","fullPath","getFullPath","matched","formatMatch","freeze","START","unshift","parent","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","functional","props","type","default","render","_","children","data","routerView","h","$createElement","$route","cache","_routerViewCache","depth","inactive","_routerRoot","vnodeData","$vnode","keepAlive","_directInactive","_inactive","$parent","routerViewDepth","cachedData","cachedComponent","component","configProps","fillPropsinData","components","registerRouteInstance","vm","hook","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","call","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$1","this","$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","$options","_parentVnode","mixin","beforeCreate","_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","NavigationFailureType","redirected","aborted","cancelled","duplicated","createNavigationRedirectedError","createRouterError","stringifyRoute","createNavigationDuplicatedError","error","createNavigationCancelledError","createNavigationAbortedError","message","Error","_isRouter","propertiesToLog","isError","isNavigationFailure","errorType","runQueue","queue","fn","cb","step","resolveAsyncComponents","hasAsync","pending","flatMapComponents","def","cid","once","resolvedDef","isESModule","resolved","reject","reason","msg","comp","flatten","concat","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","$once","handleInitialScroll","routeOrError","beforeEach","registerHook","beforeResolve","afterEach","Promise","back","forward","getMatchedComponents","createHref","normalizedTo","defineProperties","VueRouter$1","list","version","START_LOCATION","use","global","ce","S","se","getPrototypeOf","ue","be","getOwnPropertyNames","le","getOwnPropertyDescriptor","ge","r","exports","de","enumerable","me","rr","E","pe","N","tr","L","ye","O","nr","G","Te","je","self","Se","Function","w","ir","R","xe","Oe","or","P","ve","qe","$","ar","W","C","M","he","Ie","_e","B","fr","A","ke","Ee","Le","H","cr","F","U","Ne","Ge","Re","we","D","Pe","z","sr","X","We","K","ur","J","Ce","Me","$e","Ae","Z","br","Q","V","Be","Y","Fe","Ue","De","He","Xe","parseInt","ze","valueOf","te","lr","ee","Je","q","Ke","Qe","Ve","min","Ye","u","o","s","g","T","t","f","d","ie","setTimeout","p","oe","k","I","ae","clearTimeout","fe","leading","maxWait","trailing","cancel","flush","ne","Ze","TapDetector","singleTapCallbacks","doubleTapCallbacks","triggerCallbacks","cbList","arg","cbItem","onSingleTap","includes","onDoubleTap","attach","dom","Element","onTouchStart","onTouchMove","onTouchEnd","onMouseDown","onMouseUp","onMouseMove","detach","isTouchMode","lastTapTimestamp","tappedCount","touchMovedLength","lastPointerX","lastPointerY","ev","touches","onPointerDown","clientX","clientY","onPointerUp","onPointerMove","currTimeStamp","deltaX","deltaY","sqrt","script","minScale","Number","maxScale","zoomed","resetTrigger","aspectRatio","backgroundColor","pivot","zoomingElastic","limitTranslation","doubleClickToZoom","mouseWheelToZoom","containerWidth","containerHeight","containerLeft","containerTop","translateX","animTranslateX","translateY","animTranslateY","scale","animScale","lastFullWheelTime","lastWheelTime","lastWheelDirection","isPointerDown","pointerPosX","pointerPosY","twoFingerInitDist","panLocked","raf","tapDetector","computed","transform","watch","$emit","$el","onWindowResize","refreshContainerPos","loop","cancelAnimationFrame","methods","tryToScale","onInteractionEnd","scaleDelta","newScale","log","log2","pow","normMousePosX","normMousePosY","newMousePosX","newMousePosY","pixelDeltaX","pixelDeltaY","limit","translateLimit","calcTranslateLimit","abs","getMarginDirection","imageToContainerRatio","translateLimitY","translateLimitX","containerRatio","reset","styles","getComputedStyle","parseFloat","width","height","setPointerPosCenter","rect","gainOn","requestAnimationFrame","delta","detail","wheelDelta","currTime","onMouseWheelDo","distX","distY","newTwoFingerDist","normalizeComponent","template","scopeId","isFunctionalTemplate","moduleIdentifier","shadowMode","createInjector","createInjectorSSR","createInjectorShadow","staticRenderFns","_compiled","_scopeId","context","ssrContext","__VUE_SSR_CONTEXT__","_registeredComponents","add","_ssrRegister","$root","shadowRoot","originalRender","existing","isOldIE","id","addStyle","HEAD","css","media","ids","Set","has","code","sources","btoa","unescape","element","createElement","setAttribute","head","getElementsByTagName","appendChild","styleSheet","cssText","size","textNode","createTextNode","nodes","childNodes","removeChild","insertBefore","__vue_script__","__vue_render__","_vm","_h","_c","_self","staticClass","mousewheel","onMouseWheel","DOMMouseScroll","mousedown","mouseup","mousemove","mouseout","touchstart","touchend","touchmove","wrapperStyle","_t","__vue_staticRenderFns__","_withStripped","__vue_inject_styles__","inject","__vue_scope_id__","__vue_module_identifier__","__vue_is_functional_template__","__vue_component__","SLIDE_WIDTH_THRESH","script$1","selIndex","animSelIndex","currentZoomed","autoSliding","imageAspectRatios","slideOffsetX","$refs","zoomers","zoomer","zoomIn","zoomOut","factor","slideThresh","paginate","deltaIndex","naturalWidth","naturalHeight","$set","direction","__vue_script__$1","__vue_render__$1","anim","$event","_l","refInFor","leftStyle","middleStyle","rightStyle","swipe","onImageSwipe","staticStyle","src","draggable","load","onImageLoad","dragstart","onImageDragStart","__vue_staticRenderFns__$1","__vue_inject_styles__$1","__vue_scope_id__$1","__vue_module_identifier__$1","__vue_is_functional_template__$1","__vue_component__$1","Zoomer","Gallery","module","quillEditor","Quill","globalOptions","theme","boundary","body","modules","toolbar","header","indent","color","background","font","align","placeholder","readOnly","assign","writable","_options","_content","defaultOptions","content","disabled","mounted","initialize","beforeDestroy","quill","editor","enable","pasteHTML","innerHTML","getText","html","text","setText","_injectStyles","esModule","_v","baidu","buffer","email","evernote","facebook","flipboard","hackernews","instapaper","line","linkedin","messenger","odnoklassniki","pinterest","pocket","quora","reddit","skype","sms","stumbleupon","telegram","tumblr","twitter","viber","vk","weibo","whatsapp","wordpress","xing","yammer","network","title","description","quote","hashtags","twitterUser","popup","popupTop","popupLeft","popupWindow","popupInterval","networks","$SocialSharing","rawLink","shareLink","encodedHashtags","substring","resizePopup","innerWidth","clientWidth","screenX","innerHeight","clientHeight","screenY","screen","availWidth","screenLeft","screenTop","share","clearInterval","close","emit","open","focus","setInterval","closed","touch"],"mappings":"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","file":"js/chunk-vendors~0ac20d75.b1bd4486.js","sourcesContent":["/*!\n * vue-router v3.6.5\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$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$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// 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 runQueue (queue, fn, cb) {\n var step = function (index) {\n if (index >= queue.length) {\n cb();\n } else {\n if (queue[index]) {\n fn(queue[index], function () {\n step(index + 1);\n });\n } else {\n step(index + 1);\n }\n }\n };\n step(0);\n}\n\n/* */\n\nfunction resolveAsyncComponents (matched) {\n return function (to, from, next) {\n var hasAsync = false;\n var pending = 0;\n var error = null;\n\n flatMapComponents(matched, function (def, _, match, key) {\n // if it's a function and doesn't have cid attached,\n // assume it's an async component resolve function.\n // we are not using Vue's default async resolving mechanism because\n // we want to halt the navigation until the incoming component has been\n // resolved.\n if (typeof def === 'function' && def.cid === undefined) {\n hasAsync = true;\n pending++;\n\n var resolve = once(function (resolvedDef) {\n if (isESModule(resolvedDef)) {\n resolvedDef = resolvedDef.default;\n }\n // save resolved on async factory in case it's used elsewhere\n def.resolved = typeof resolvedDef === 'function'\n ? resolvedDef\n : _Vue.extend(resolvedDef);\n match.components[key] = resolvedDef;\n pending--;\n if (pending <= 0) {\n next();\n }\n });\n\n var reject = once(function (reason) {\n var msg = \"Failed to resolve async component \" + key + \": \" + reason;\n process.env.NODE_ENV !== 'production' && warn(false, msg);\n if (!error) {\n error = isError(reason)\n ? reason\n : new Error(msg);\n next(error);\n }\n });\n\n var res;\n try {\n res = def(resolve, reject);\n } catch (e) {\n reject(e);\n }\n if (res) {\n if (typeof res.then === 'function') {\n res.then(resolve, reject);\n } else {\n // new syntax in Vue 2.3\n var comp = res.component;\n if (comp && typeof comp.then === 'function') {\n comp.then(resolve, reject);\n }\n }\n }\n }\n });\n\n if (!hasAsync) { next(); }\n }\n}\n\nfunction flatMapComponents (\n matched,\n fn\n) {\n return flatten(matched.map(function (m) {\n return Object.keys(m.components).map(function (key) { return fn(\n m.components[key],\n m.instances[key],\n m, key\n ); })\n }))\n}\n\nfunction flatten (arr) {\n return Array.prototype.concat.apply([], arr)\n}\n\nvar hasSymbol =\n typeof Symbol === 'function' &&\n typeof Symbol.toStringTag === 'symbol';\n\nfunction isESModule (obj) {\n return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module')\n}\n\n// in Webpack 2, require.ensure now also returns a Promise\n// so the resolve/reject functions may get called an extra time\n// if the user uses an arrow function shorthand that happens to\n// return that Promise.\nfunction once (fn) {\n var called = false;\n return function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (called) { return }\n called = true;\n return fn.apply(this, args)\n }\n}\n\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$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$1.updateRoute(route);\n onComplete && onComplete(route);\n this$1$1.ensureURL();\n this$1$1.router.afterHooks.forEach(function (hook) {\n hook && hook(route, prev);\n });\n\n // fire ready cbs once\n if (!this$1$1.ready) {\n this$1$1.ready = true;\n this$1$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$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$1.ready = true;\n this$1$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$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$1.errorCbs.length) {\n this$1$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$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$1.ensureURL(true);\n abort(createNavigationAbortedError(current, route));\n } else if (isError(to)) {\n this$1$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$1.replace(to);\n } else {\n this$1$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$1.router.resolveHooks);\n runQueue(queue, iterator, function () {\n if (this$1$1.pending !== route) {\n return abort(createNavigationCancelledError(current, route))\n }\n this$1$1.pending = null;\n onComplete(route);\n if (this$1$1.router.app) {\n this$1$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$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$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$1.base);\n if (this$1$1.current === START && location === this$1$1._startLocation) {\n return\n }\n\n this$1$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$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n pushState(cleanPath(this$1$1.base + route.fullPath));\n handleScroll(this$1$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$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n replaceState(cleanPath(this$1$1.base + route.fullPath));\n handleScroll(this$1$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$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$1.current;\n if (!ensureSlash()) {\n return\n }\n this$1$1.transitionTo(getHash(), function (route) {\n if (supportsScroll) {\n handleScroll(this$1$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$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$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$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$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$1 = this;\n\n this.transitionTo(\n location,\n function (route) {\n this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index + 1).concat(route);\n this$1$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$1 = this;\n\n this.transitionTo(\n location,\n function (route) {\n this$1$1.stack = this$1$1.stack.slice(0, this$1$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$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$1.current;\n this$1$1.index = targetIndex;\n this$1$1.updateRoute(route);\n this$1$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$1.index = targetIndex;\n }\n }\n );\n };\n\n AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n var current = this.stack[this.stack.length - 1];\n return current ? current.fullPath : '/'\n };\n\n AbstractHistory.prototype.ensureURL = function ensureURL () {\n // noop\n };\n\n return AbstractHistory;\n}(History));\n\n/* */\n\n\n\nvar VueRouter = function VueRouter (options) {\n if ( options === void 0 ) options = {};\n\n 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$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$1.apps.indexOf(app);\n if (index > -1) { this$1$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$1.app === app) { this$1$1.app = this$1$1.apps[0] || null; }\n\n if (!this$1$1.app) { this$1$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$1.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll && 'fullPath' in routeOrError) {\n handleScroll(this$1$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$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$1 = this;\n\n // $flow-disable-line\n if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n this$1$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$1 = this;\n\n // $flow-disable-line\n if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n this$1$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\nvar VueRouter$1 = VueRouter;\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\n// We cannot remove this as it would be a breaking change\nVueRouter.install = install;\nVueRouter.version = '3.6.5';\nVueRouter.isNavigationFailure = isNavigationFailure;\nVueRouter.NavigationFailureType = NavigationFailureType;\nVueRouter.START_LOCATION = START;\n\nif (inBrowser && window.Vue) {\n window.Vue.use(VueRouter);\n}\n\nvar version = '3.6.5';\n\nexport { NavigationFailureType, Link as RouterLink, View as RouterView, START as START_LOCATION, VueRouter$1 as default, isNavigationFailure, version };\n","// vue-zoomer v0.3.10 - Jarvis Niu\n// https://github.com/jarvisniu/vue-zoomer\n\n/* esm.sh - esbuild bundle(lodash@4.17.20/debounce) esnext production */\nif (typeof global === \"undefined\") var global = window;var ce=Object.create,S=Object.defineProperty,se=Object.getPrototypeOf,ue=Object.prototype.hasOwnProperty,be=Object.getOwnPropertyNames,le=Object.getOwnPropertyDescriptor,ge=e=>S(e,\"__esModule\",{value:!0}),a=(e,r)=>()=>(r||(r={exports:{}},e(r.exports,r)),r.exports),de=(e,r,n)=>{if(ge(e),r&&typeof r==\"object\"||typeof r==\"function\")for(let i of be(r))!ue.call(e,i)&&i!==\"default\"&&S(e,i,{get:()=>r[i],enumerable:!(n=le(r,i))||n.enumerable});return e},me=e=>e&&e.__esModule?e:de(S(e!=null?ce(se(e)):{},\"default\",{value:e,enumerable:!0}),e),x=a((rr,E)=>{function pe(e){var r=typeof e;return e!=null&&(r==\"object\"||r==\"function\")}E.exports=pe;}),N=a((tr,L)=>{var ye=typeof global==\"object\"&&global&&global.Object===Object&&global;L.exports=ye;}),O=a((nr,G)=>{var Te=N(),je=typeof self==\"object\"&&self&&self.Object===Object&&self,Se=Te||je||Function(\"return this\")();G.exports=Se;}),w=a((ir,R)=>{var xe=O(),Oe=function(){return xe.Date.now()};R.exports=Oe;}),v=a((or,P)=>{var ve=O(),qe=ve.Symbol;P.exports=qe;}),$=a((ar,W)=>{var C=v(),M=Object.prototype,he=M.hasOwnProperty,Ie=M.toString,m=C?C.toStringTag:void 0;function _e(e){var r=he.call(e,m),n=e[m];try{e[m]=void 0;var i=!0;}catch(b){}var c=Ie.call(e);return i&&(r?e[m]=n:delete e[m]),c}W.exports=_e;}),B=a((fr,A)=>{var ke=Object.prototype,Ee=ke.toString;function Le(e){return Ee.call(e)}A.exports=Le;}),H=a((cr,F)=>{var U=v(),Ne=$(),Ge=B(),Re=\"[object Null]\",we=\"[object Undefined]\",D=U?U.toStringTag:void 0;function Pe(e){return e==null?e===void 0?we:Re:D&&D in Object(e)?Ne(e):Ge(e)}F.exports=Pe;}),z=a((sr,X)=>{function We(e){return e!=null&&typeof e==\"object\"}X.exports=We;}),K=a((ur,J)=>{var Ce=H(),Me=z(),$e=\"[object Symbol]\";function Ae(e){return typeof e==\"symbol\"||Me(e)&&Ce(e)==$e}J.exports=Ae;}),Z=a((br,Q)=>{var V=x(),Be=K(),Y=0/0,Fe=/^\\s+|\\s+$/g,Ue=/^[-+]0x[0-9a-f]+$/i,De=/^0b[01]+$/i,He=/^0o[0-7]+$/i,Xe=parseInt;function ze(e){if(typeof e==\"number\")return e;if(Be(e))return Y;if(V(e)){var r=typeof e.valueOf==\"function\"?e.valueOf():e;e=V(r)?r+\"\":r;}if(typeof e!=\"string\")return e===0?e:+e;e=e.replace(Fe,\"\");var n=De.test(e);return n||He.test(e)?Xe(e.slice(2),n?2:8):Ue.test(e)?Y:+e}Q.exports=ze;}),te=a((lr,ee)=>{var Je=x(),q=w(),re=Z(),Ke=\"Expected a function\",Qe=Math.max,Ve=Math.min;function Ye(e,r,n){var i,c,b,u,o,s,l=0,h=!1,g=!1,y=!0;if(typeof e!=\"function\")throw new TypeError(Ke);r=re(r)||0,Je(n)&&(h=!!n.leading,g=\"maxWait\"in n,b=g?Qe(re(n.maxWait)||0,r):b,y=\"trailing\"in n?!!n.trailing:y);function T(t){var f=i,d=c;return i=c=void 0,l=t,u=e.apply(d,f),u}function ie(t){return l=t,o=setTimeout(p,r),h?T(t):u}function oe(t){var f=t-s,d=t-l,k=r-f;return g?Ve(k,b-d):k}function I(t){var f=t-s,d=t-l;return s===void 0||f>=r||f<0||g&&d>=b}function p(){var t=q();if(I(t))return _(t);o=setTimeout(p,oe(t));}function _(t){return o=void 0,y&&i?T(t):(i=c=void 0,u)}function ae(){o!==void 0&&clearTimeout(o),l=0,i=s=c=o=void 0;}function fe(){return o===void 0?u:_(q())}function j(){var t=q(),f=I(t);if(i=arguments,c=this,s=t,f){if(o===void 0)return ie(s);if(g)return clearTimeout(o),o=setTimeout(p,r),T(s)}return o===void 0&&(o=setTimeout(p,r)),u}return j.cancel=ae,j.flush=fe,j}ee.exports=Ye;}),ne=me(te()),Ze=ne.default;\n\n/**\n * Detect double tap events\n * # Deals with:\n * - Time intervals between taps\n * - Swipe will stop the taps\n * # Usage:\n * let tapDetector = new TapDetector()\n * tapDetector.attach(this.$el) // in mounted\n * tapDetector.detach(this.$el) // in destroy\n * tapDetector.onSingle(callback)\n * tapDetector.onDouble(callback)\n */\n\nfunction TapDetector () {\n\n // Callbacks -----------------------------------------------------------------\n\n let singleTapCallbacks = [];\n let doubleTapCallbacks = [];\n\n function triggerCallbacks (cbList, arg) {\n cbList.forEach(cbItem => {\n cbItem.call(null, arg);\n });\n }\n\n this.onSingleTap = function (cb) {\n if (typeof cb === 'function' && !singleTapCallbacks.includes(cb)) {\n singleTapCallbacks.push(cb);\n }\n };\n this.onDoubleTap = function (cb) {\n if (typeof cb === 'function' && !doubleTapCallbacks.includes(cb)) {\n doubleTapCallbacks.push(cb);\n }\n };\n\n this.attach = function (dom) {\n if (!(dom instanceof Element)) {\n console.error('TapDetector.attach: arg must be an Element');\n return\n }\n dom.addEventListener('touchstart', onTouchStart);\n dom.addEventListener('touchmove', onTouchMove);\n dom.addEventListener('touchend', onTouchEnd);\n dom.addEventListener('mousedown', onMouseDown);\n dom.addEventListener('mouseup', onMouseUp);\n dom.addEventListener('mousemove', onMouseMove);\n };\n\n this.detach = function (dom) {\n dom.removeEventListener('touchstart', onTouchStart);\n dom.removeEventListener('touchmove', onTouchMove);\n dom.removeEventListener('touchend', onTouchEnd);\n dom.removeEventListener('mousedown', onMouseDown);\n dom.removeEventListener('mouseup', onMouseUp);\n dom.removeEventListener('mousemove', onMouseMove);\n };\n\n // Main logic ----------------------------------------------------------------\n\n // in touch mode mouse events will be disabled. Otherwise touches will\n // trigger both touchend end mouseup, i.e. one touch triggers two onPointerUp.\n let isTouchMode = false;\n let lastTapTimestamp = 0;\n let tappedCount = 0;\n let touchMovedLength = 0;\n let lastPointerX = 0;\n let lastPointerY = 0;\n\n function onTouchStart (ev) {\n isTouchMode = true;\n // console.log('onTouchStart')\n if (ev.touches.length === 1) {\n onPointerDown(ev.touches[0].clientX, ev.touches[0].clientY);\n }\n }\n function onTouchEnd (ev) {\n // console.log('onTouchEnd')\n if (ev.touches.length === 0) {\n onPointerUp();\n }\n }\n function onTouchMove (ev) {\n // console.log('onTouchMove', ev)\n if (ev.touches.length === 1) {\n onPointerMove(ev.touches[0].clientX, ev.touches[0].clientY);\n }\n }\n\n function onMouseDown (ev) {\n if (isTouchMode) return\n\n // console.log('onMouseDown')\n onPointerDown(ev.clientX, ev.clientY);\n }\n function onMouseUp (ev) {\n if (isTouchMode) return\n\n // console.log('onMouseUp')\n onPointerUp();\n }\n function onMouseMove (ev) {\n if (isTouchMode) return\n\n // console.log('onMouseMove', ev)\n if (ev.button === 0) {\n onPointerMove(ev.clientX, ev.clientY);\n }\n }\n\n function onPointerDown (x, y) {\n lastPointerX = x;\n lastPointerY = y;\n touchMovedLength = 0;\n }\n function onPointerUp () {\n let currTimeStamp = Date.now();\n // console.log('touchMovedLength', touchMovedLength)\n if (touchMovedLength < 10) {\n // Only when no sliding two far is considered as a valid tap\n if (currTimeStamp - lastTapTimestamp < 300) {\n tappedCount += 1;\n } else {\n tappedCount = 1;\n }\n lastTapTimestamp = Date.now();\n // console.log('tappedCount', tappedCount)\n triggerCallbacks(singleTapCallbacks, {\n clientX: lastPointerX,\n clientY: lastPointerY,\n });\n if (tappedCount === 2) {\n triggerCallbacks(doubleTapCallbacks, {\n clientX: lastPointerX,\n clientY: lastPointerY,\n });\n tappedCount = 0; // clear count on maximum tap count\n }\n }\n touchMovedLength = 0;\n }\n function onPointerMove (x, y) {\n let deltaX = lastPointerX - x;\n let deltaY = lastPointerY - y;\n let length = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n // console.log('onTouchMove length', length)\n touchMovedLength += length;\n lastPointerX = x;\n lastPointerY = y;\n }\n}\n\n//\n\nvar script = {\n props: {\n minScale: { type: Number, default: 1 },\n maxScale: { type: Number, default: 5 },\n zoomed: { type: Boolean, default: false },\n resetTrigger: { type: Number, default: 1e5 },\n aspectRatio: { type: Number, default: 1 },\n backgroundColor: { type: String, default: 'transparent' },\n pivot: { type: String, default: 'cursor' }, // other options: image-center\n zoomingElastic: { type: Boolean, default: true },\n limitTranslation: { type: Boolean, default: true },\n doubleClickToZoom: { type: Boolean, default: true },\n mouseWheelToZoom: { type: Boolean, default: true },\n },\n data () {\n return {\n // Container sizes, used to determin the initial zoomer size.\n // Need to reactive to window resizing.\n containerWidth: 1,\n containerHeight: 1,\n containerLeft: 0,\n containerTop: 0,\n // Store values: Interactions will at last change these values.\n // After rotation or resize, these values will keep still.\n // These three values are all relative to the container size.\n translateX: 0,\n animTranslateX: 0,\n translateY: 0,\n animTranslateY: 0,\n scale: 1,\n animScale: 1,\n // Mouse states\n lastFullWheelTime: 0,\n lastWheelTime: 0,\n lastWheelDirection: 'y',\n isPointerDown: false,\n pointerPosX: -1,\n pointerPosY: -1,\n twoFingerInitDist: 0,\n panLocked: true,\n // Others\n raf: null,\n tapDetector: null,\n }\n },\n computed: {\n wrapperStyle () {\n let translateX = this.containerWidth * this.animTranslateX;\n let translateY = this.containerHeight * this.animTranslateY;\n return {\n transform: [\n `translate(${ translateX }px, ${ translateY }px)`,\n `scale(${ this.animScale })`,\n ].join(' ')\n }\n },\n },\n watch: {\n scale (val) {\n if (val !== 1) {\n this.$emit('update:zoomed', true);\n this.panLocked = false;\n }\n },\n resetTrigger: 'reset',\n },\n mounted () {\n this.tapDetector = new TapDetector();\n this.tapDetector.attach(this.$el);\n if (this.doubleClickToZoom) {\n this.tapDetector.onDoubleTap(this.onDoubleTap);\n }\n // console.log('container size: ', this.containerWidth, this.containerHeight)\n window.addEventListener('resize', this.onWindowResize);\n this.onWindowResize();\n this.refreshContainerPos();\n this.loop();\n },\n destroyed () {\n this.tapDetector.detach(this.$el);\n window.removeEventListener('resize', this.onWindowResize);\n window.cancelAnimationFrame(this.raf);\n // console.log('destroy')\n },\n methods: {\n // API ---------------------------------------------------------------------\n reset () {\n this.scale = 1;\n this.panLocked = true;\n this.translateX = 0;\n this.translateY = 0;\n },\n zoomIn(scale = 2) {\n this.tryToScale(scale);\n this.onInteractionEnd();\n },\n zoomOut(scale = 0.5) {\n this.tryToScale(scale);\n this.onInteractionEnd();\n },\n // Main Logic --------------------------------------------------------------\n // scale\n // Zoom the image with the point at the pointer(mouse or pinch center) pinned.\n // Simplify: This can be regard as vector pointer to old-image-center scaling.\n tryToScale (scaleDelta) {\n let newScale = this.scale * scaleDelta;\n if (this.zoomingElastic) {\n // damping\n if (newScale < this.minScale || newScale > this.maxScale) {\n let log = Math.log2(scaleDelta);\n log *= 0.2;\n scaleDelta = Math.pow(2, log);\n newScale = this.scale * scaleDelta;\n }\n } else {\n if (newScale < this.minScale) newScale = this.minScale;\n else if (newScale > this.maxScale) newScale = this.maxScale;\n }\n scaleDelta = newScale / this.scale;\n this.scale = newScale;\n if (this.pivot !== 'image-center') {\n let normMousePosX = (this.pointerPosX - this.containerLeft) / this.containerWidth;\n let normMousePosY = (this.pointerPosY - this.containerTop) / this.containerHeight;\n this.translateX = (0.5 + this.translateX - normMousePosX) * scaleDelta + normMousePosX - 0.5;\n this.translateY = (0.5 + this.translateY - normMousePosY) * scaleDelta + normMousePosY - 0.5;\n }\n },\n setPointerPosCenter () {\n this.pointerPosX = this.containerLeft + this.containerWidth / 2;\n this.pointerPosY = this.containerTop + this.containerHeight / 2;\n },\n // pan\n onPointerMove (newMousePosX, newMousePosY) {\n if (this.isPointerDown) {\n let pixelDeltaX = newMousePosX - this.pointerPosX;\n let pixelDeltaY = newMousePosY - this.pointerPosY;\n // console.log('pixelDeltaX, pixelDeltaY', pixelDeltaX, pixelDeltaY)\n if (!this.panLocked) {\n this.translateX += pixelDeltaX / this.containerWidth;\n this.translateY += pixelDeltaY / this.containerHeight;\n }\n }\n this.pointerPosX = newMousePosX;\n this.pointerPosY = newMousePosY;\n },\n onInteractionEnd: Ze(function () {\n this.limit();\n this.panLocked = this.scale === 1;\n this.$emit('update:zoomed', !this.panLocked);\n }, 100),\n // limit the scale between max and min and the translate within the viewport\n limit () {\n // scale\n if (this.scale < this.minScale) {\n this.scale = this.minScale;\n // FIXME this sometimes will not reset when pinching in\n // this.tryToScale(this.minScale / this.scale)\n } else if (this.scale > this.maxScale) {\n this.tryToScale(this.maxScale / this.scale);\n }\n // translate\n if (this.limitTranslation) {\n let translateLimit = this.calcTranslateLimit();\n if (Math.abs(this.translateX) > translateLimit.x) {\n this.translateX *= translateLimit.x / Math.abs(this.translateX);\n }\n if (Math.abs(this.translateY) > translateLimit.y) {\n this.translateY *= translateLimit.y / Math.abs(this.translateY);\n }\n }\n },\n calcTranslateLimit () {\n if (this.getMarginDirection() === 'y') {\n let imageToContainerRatio = this.containerWidth / this.aspectRatio / this.containerHeight;\n let translateLimitY = (this.scale * imageToContainerRatio - 1) / 2;\n if (translateLimitY < 0) translateLimitY = 0;\n return {\n x: (this.scale - 1) / 2,\n y: translateLimitY,\n }\n } else {\n let imageToContainerRatio = this.containerHeight * this.aspectRatio / this.containerWidth;\n let translateLimitX = (this.scale * imageToContainerRatio - 1) / 2;\n if (translateLimitX < 0) translateLimitX = 0;\n return {\n x: translateLimitX,\n y: (this.scale - 1) / 2,\n }\n }\n },\n getMarginDirection () {\n let containerRatio = this.containerWidth / this.containerHeight;\n return containerRatio > this.aspectRatio ? 'x' : 'y'\n },\n onDoubleTap (ev) {\n if (this.scale === 1) {\n if (ev.clientX > 0) {\n this.pointerPosX = ev.clientX;\n this.pointerPosY = ev.clientY;\n }\n this.tryToScale(Math.min(3, this.maxScale));\n } else {\n this.reset();\n }\n this.onInteractionEnd();\n },\n // reactive\n onWindowResize () {\n let styles = window.getComputedStyle(this.$el);\n this.containerWidth = parseFloat(styles.width);\n this.containerHeight = parseFloat(styles.height);\n this.setPointerPosCenter();\n this.limit();\n },\n refreshContainerPos () {\n let rect = this.$el.getBoundingClientRect();\n this.containerLeft = rect.left;\n this.containerTop = rect.top;\n },\n loop () {\n this.animScale = this.gainOn(this.animScale, this.scale);\n this.animTranslateX = this.gainOn(this.animTranslateX, this.translateX);\n this.animTranslateY = this.gainOn(this.animTranslateY, this.translateY);\n this.raf = window.requestAnimationFrame(this.loop);\n // console.log('loop', this.raf)\n },\n gainOn (from, to) {\n let delta = (to - from) * 0.3;\n // console.log('gainOn', from, to, from + delta)\n if (Math.abs(delta) > 1e-5) {\n return from + delta\n } else {\n return to\n }\n },\n // Mouse Events ------------------------------------------------------------\n // Mouse wheel scroll, TrackPad pinch or TrackPad scroll\n onMouseWheel (ev) {\n if (!this.mouseWheelToZoom) return\n // prevent is used to stop the page scroll elastic effects\n ev.preventDefault();\n if (ev.detail) ev.wheelDelta = ev.detail * -10;\n let currTime = Date.now();\n if (Math.abs(ev.wheelDelta) === 120) {\n // Throttle the TouchPad pinch on Mac, or it will be too sensitive\n if (currTime - this.lastFullWheelTime > 50) {\n this.onMouseWheelDo(ev.wheelDelta);\n this.lastFullWheelTime = currTime;\n }\n } else {\n if (currTime - this.lastWheelTime > 50 && typeof ev.deltaX === 'number') {\n this.lastWheelDirection = (ev.detail == 0 && Math.abs(ev.deltaX) > Math.abs(ev.deltaY)) ? 'x' : 'y';\n if (this.lastWheelDirection === 'x') {\n this.$emit('swipe', ev.deltaX > 0 ? 'left' : 'right');\n }\n }\n if (this.lastWheelDirection === 'y') {\n this.onMouseWheelDo(ev.wheelDelta);\n }\n }\n this.lastWheelTime = currTime;\n },\n onMouseWheelDo (wheelDelta) {\n // Value basis: One mouse wheel (wheelDelta=+-120) means 1.25/0.8 scale.\n let scaleDelta = Math.pow(1.25, wheelDelta / 120);\n this.tryToScale(scaleDelta);\n this.onInteractionEnd();\n },\n onMouseDown (ev) {\n this.refreshContainerPos();\n this.isPointerDown = true;\n // Open the context menu then click other place will skip the mousemove events.\n // This will cause the pointerPosX/Y NOT sync, then we will need to fix it on mousedown event.\n this.pointerPosX = ev.clientX;\n this.pointerPosY = ev.clientY;\n // console.log('onMouseDown', ev)\n },\n onMouseUp (ev) {\n this.isPointerDown = false;\n this.onInteractionEnd();\n },\n onMouseMove (ev) {\n this.onPointerMove(ev.clientX, ev.clientY);\n // console.log('onMouseMove client, offset', ev.clientX, ev.clientY)\n },\n // Touch Events ------------------------------------------------------------\n onTouchStart (ev) {\n if (ev.touches.length === 1) {\n this.refreshContainerPos();\n this.pointerPosX = ev.touches[0].clientX;\n this.pointerPosY = ev.touches[0].clientY;\n this.isPointerDown = true;\n } else if (ev.touches.length === 2) {\n this.isPointerDown = true;\n // pos\n this.pointerPosX = (ev.touches[0].clientX + ev.touches[1].clientX) / 2;\n this.pointerPosY = (ev.touches[0].clientY + ev.touches[1].clientY) / 2;\n // dist\n let distX = ev.touches[0].clientX - ev.touches[1].clientX;\n let distY = ev.touches[0].clientY - ev.touches[1].clientY;\n this.twoFingerInitDist = Math.sqrt(distX * distX + distY * distY);\n }\n // console.log('onTouchStart', ev.touches)\n },\n onTouchEnd (ev) {\n if (ev.touches.length === 0) {\n this.isPointerDown = false;\n // Near 1 to set 1\n if (Math.abs(this.scale - 1) < 0.1) this.scale = 1;\n this.onInteractionEnd();\n } else if (ev.touches.length === 1) {\n this.pointerPosX = ev.touches[0].clientX;\n this.pointerPosY = ev.touches[0].clientY;\n }\n // console.log('onTouchEnd', ev.touches.length)\n },\n onTouchMove (ev) {\n if (ev.touches.length === 1) {\n this.onPointerMove(ev.touches[0].clientX, ev.touches[0].clientY);\n } else if (ev.touches.length === 2) {\n // pos\n let newMousePosX = (ev.touches[0].clientX + ev.touches[1].clientX) / 2;\n let newMousePosY = (ev.touches[0].clientY + ev.touches[1].clientY) / 2;\n this.onPointerMove(newMousePosX, newMousePosY);\n this.pointerPosX = newMousePosX;\n this.pointerPosY = newMousePosY;\n // dist\n let distX = ev.touches[0].clientX - ev.touches[1].clientX;\n let distY = ev.touches[0].clientY - ev.touches[1].clientY;\n let newTwoFingerDist = Math.sqrt(distX * distX + distY * distY);\n this.tryToScale(newTwoFingerDist / this.twoFingerInitDist);\n this.twoFingerInitDist = newTwoFingerDist;\n }\n // console.log('onTouchMove', this.pointerPosX, this.pointerPosY)\n },\n },\n};\n\nfunction normalizeComponent(template, style, script, scopeId, isFunctionalTemplate, moduleIdentifier /* server only */, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) {\r\n if (typeof shadowMode !== 'boolean') {\r\n createInjectorSSR = createInjector;\r\n createInjector = shadowMode;\r\n shadowMode = false;\r\n }\r\n // Vue.extend constructor export interop.\r\n const options = typeof script === 'function' ? script.options : script;\r\n // render functions\r\n if (template && template.render) {\r\n options.render = template.render;\r\n options.staticRenderFns = template.staticRenderFns;\r\n options._compiled = true;\r\n // functional template\r\n if (isFunctionalTemplate) {\r\n options.functional = true;\r\n }\r\n }\r\n // scopedId\r\n if (scopeId) {\r\n options._scopeId = scopeId;\r\n }\r\n let hook;\r\n if (moduleIdentifier) {\r\n // server build\r\n hook = function (context) {\r\n // 2.3 injection\r\n context =\r\n context || // cached call\r\n (this.$vnode && this.$vnode.ssrContext) || // stateful\r\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext); // functional\r\n // 2.2 with runInNewContext: true\r\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\r\n context = __VUE_SSR_CONTEXT__;\r\n }\r\n // inject component styles\r\n if (style) {\r\n style.call(this, createInjectorSSR(context));\r\n }\r\n // register component module identifier for async chunk inference\r\n if (context && context._registeredComponents) {\r\n context._registeredComponents.add(moduleIdentifier);\r\n }\r\n };\r\n // used by ssr in case component is cached and beforeCreate\r\n // never gets called\r\n options._ssrRegister = hook;\r\n }\r\n else if (style) {\r\n hook = shadowMode\r\n ? function (context) {\r\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot));\r\n }\r\n : function (context) {\r\n style.call(this, createInjector(context));\r\n };\r\n }\r\n if (hook) {\r\n if (options.functional) {\r\n // register for functional component in vue file\r\n const originalRender = options.render;\r\n options.render = function renderWithStyleInjection(h, context) {\r\n hook.call(context);\r\n return originalRender(h, context);\r\n };\r\n }\r\n else {\r\n // inject component registration as beforeCreate hook\r\n const existing = options.beforeCreate;\r\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook];\r\n }\r\n }\r\n return script;\r\n}\n\nconst isOldIE = typeof navigator !== 'undefined' &&\r\n /msie [6-9]\\\\b/.test(navigator.userAgent.toLowerCase());\r\nfunction createInjector(context) {\r\n return (id, style) => addStyle(id, style);\r\n}\r\nlet HEAD;\r\nconst styles = {};\r\nfunction addStyle(id, css) {\r\n const group = isOldIE ? css.media || 'default' : id;\r\n const style = styles[group] || (styles[group] = { ids: new Set(), styles: [] });\r\n if (!style.ids.has(id)) {\r\n style.ids.add(id);\r\n let code = css.source;\r\n if (css.map) {\r\n // https://developer.chrome.com/devtools/docs/javascript-debugging\r\n // this makes source maps inside style tags work properly in Chrome\r\n code += '\\n/*# sourceURL=' + css.map.sources[0] + ' */';\r\n // http://stackoverflow.com/a/26603875\r\n code +=\r\n '\\n/*# sourceMappingURL=data:application/json;base64,' +\r\n btoa(unescape(encodeURIComponent(JSON.stringify(css.map)))) +\r\n ' */';\r\n }\r\n if (!style.element) {\r\n style.element = document.createElement('style');\r\n style.element.type = 'text/css';\r\n if (css.media)\r\n style.element.setAttribute('media', css.media);\r\n if (HEAD === undefined) {\r\n HEAD = document.head || document.getElementsByTagName('head')[0];\r\n }\r\n HEAD.appendChild(style.element);\r\n }\r\n if ('styleSheet' in style.element) {\r\n style.styles.push(code);\r\n style.element.styleSheet.cssText = style.styles\r\n .filter(Boolean)\r\n .join('\\n');\r\n }\r\n else {\r\n const index = style.ids.size - 1;\r\n const textNode = document.createTextNode(code);\r\n const nodes = style.element.childNodes;\r\n if (nodes[index])\r\n style.element.removeChild(nodes[index]);\r\n if (nodes.length)\r\n style.element.insertBefore(textNode, nodes[index]);\r\n else\r\n style.element.appendChild(textNode);\r\n }\r\n }\r\n}\n\n/* script */\nconst __vue_script__ = script;\n\n/* template */\nvar __vue_render__ = function () {\n var _vm = this;\n var _h = _vm.$createElement;\n var _c = _vm._self._c || _h;\n return _c(\n \"div\",\n {\n staticClass: \"vue-zoomer\",\n style: { backgroundColor: _vm.backgroundColor },\n on: {\n mousewheel: _vm.onMouseWheel,\n DOMMouseScroll: _vm.onMouseWheel,\n mousedown: _vm.onMouseDown,\n mouseup: _vm.onMouseUp,\n mousemove: _vm.onMouseMove,\n mouseout: _vm.setPointerPosCenter,\n touchstart: _vm.onTouchStart,\n touchend: _vm.onTouchEnd,\n touchmove: _vm.onTouchMove,\n },\n },\n [\n _c(\n \"div\",\n { staticClass: \"zoomer\", style: _vm.wrapperStyle },\n [_vm._t(\"default\")],\n 2\n ),\n ]\n )\n};\nvar __vue_staticRenderFns__ = [];\n__vue_render__._withStripped = true;\n\n /* style */\n const __vue_inject_styles__ = function (inject) {\n if (!inject) return\n inject(\"data-v-e532c06e_0\", { source: \"\\n.vue-zoomer[data-v-e532c06e] {\\n overflow: hidden;\\n}\\n.zoomer[data-v-e532c06e] {\\n transform-origin: 50% 50%;\\n width: 100%;\\n height: 100%;\\n}\\n.zoomer > img[data-v-e532c06e] {\\n /* remove the 4px gap below the image */\\n vertical-align: top;\\n user-drag: none;\\n -webkit-user-drag: none;\\n -moz-user-drag: none;\\n}\\n\", map: undefined, media: undefined });\n\n };\n /* scoped */\n const __vue_scope_id__ = \"data-v-e532c06e\";\n /* module identifier */\n const __vue_module_identifier__ = undefined;\n /* functional template */\n const __vue_is_functional_template__ = false;\n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__ = /*#__PURE__*/normalizeComponent(\n { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n __vue_inject_styles__,\n __vue_script__,\n __vue_scope_id__,\n __vue_is_functional_template__,\n __vue_module_identifier__,\n false,\n createInjector,\n undefined,\n undefined\n );\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\nconst SLIDE_WIDTH_THRESH = 50; // in px\n\nvar script$1 = {\n props: {\n value: { type: Number, required: true },\n list: { type: Array, required: true },\n backgroundColor: { type: String, default: '#333' },\n pivot: { type: String, default: 'cursor' },\n zoomingElastic: { type: Boolean, default: true },\n limitTranslation: { type: Boolean, default: true },\n doubleClickToZoom: { type: Boolean, default: true },\n mouseWheelToZoom: { type: Boolean, default: true },\n },\n data () {\n return {\n // env states\n containerWidth: 1,\n containerHeight: 1,\n // main states\n selIndex: this.value,\n animSelIndex: this.value,\n currentZoomed: false,\n autoSliding: false,\n imageAspectRatios: [], // aspect ratio (width / height) of images\n // interaction states\n isPointerDown: false,\n lastPointerX: 0,\n slideOffsetX: 0,\n }\n },\n computed: {\n middleStyle () {\n return {\n left: `${ 0 + this.slideOffsetX }px`,\n }\n },\n leftStyle () {\n return {\n left: `${ -this.containerWidth + this.slideOffsetX }px`,\n }\n },\n rightStyle () {\n return {\n left: `${ this.containerWidth + this.slideOffsetX }px`,\n }\n },\n slideThresh () {\n return Math.max(SLIDE_WIDTH_THRESH, this.containerWidth * 0.1)\n },\n },\n watch: {\n value (val) {\n if (val !== this.animSelIndex) {\n this.selIndex = val;\n this.animSelIndex = val;\n }\n },\n selIndex() {\n this.$nextTick(() => {\n this.$refs.zoomers.forEach(zoomer => {\n zoomer.refreshContainerPos();\n });\n });\n },\n },\n mounted () {\n window.addEventListener('resize', this.onWindowResize);\n this.onWindowResize();\n },\n destroyed () {\n window.removeEventListener('resize', this.onWindowResize);\n },\n methods: {\n // api ---------------------------------------------------------------------\n reset () {\n this.$refs.zoomers.forEach(zoomer => {\n zoomer.reset();\n });\n },\n zoomIn (scale) {\n if (this.$refs.zoomers[1]) this.$refs.zoomers[1].zoomIn(scale);\n },\n zoomOut (scale) {\n if (this.$refs.zoomers[1]) this.$refs.zoomers[1].zoomOut(scale);\n },\n // events ------------------------------------------------------------------\n onWindowResize () {\n let styles = window.getComputedStyle(this.$el);\n this.containerWidth = parseFloat(styles.width);\n this.containerHeight = parseFloat(styles.height);\n },\n onPointerMove (deltaX) {\n if (this.isPointerDown && !this.currentZoomed) {\n let factor = (\n (this.selIndex === 0 && deltaX > 0 && this.slideOffsetX + deltaX > 0) ||\n (this.selIndex === this.list.length - 1 && deltaX < 0 && this.slideOffsetX + deltaX < 0)\n ) ? 0.3 : 1;\n this.slideOffsetX += deltaX * factor;\n }\n },\n onPointerUp () {\n if (this.slideOffsetX < -this.slideThresh) {\n // next page\n this.paginate(1);\n } else if (this.slideOffsetX > this.slideThresh) {\n // prev page\n this.paginate(-1);\n } else {\n // only apply the animation\n this.paginate(0);\n }\n },\n // Stop Firefox dragging the image\n onImageDragStart(ev) {\n ev.preventDefault();\n return false\n },\n paginate (deltaIndex) {\n let targetIndex = this.selIndex + deltaIndex;\n if (targetIndex < 0 || targetIndex >= this.list.length) {\n this.slideOffsetX = 0;\n return\n }\n\n this.slideOffsetX = this.containerWidth * -deltaIndex;\n this.autoSliding = true;\n // update the selIndex before the animation to remove the delay feeling\n this.$emit('input', targetIndex);\n this.animSelIndex = targetIndex;\n setTimeout(() => {\n this.selIndex = targetIndex;\n this.slideOffsetX = 0;\n this.autoSliding = false;\n }, 400);\n },\n onMouseDown (ev) {\n this.isPointerDown = true;\n this.lastPointerX = ev.clientX;\n },\n onMouseUp (ev) {\n this.isPointerDown = false;\n this.onPointerUp();\n },\n onMouseMove (ev) {\n if (this.isPointerDown) {\n this.onPointerMove(ev.clientX - this.lastPointerX);\n this.lastPointerX = ev.clientX;\n }\n },\n onTouchStart (ev) {\n if (ev.touches.length === 1) {\n this.isPointerDown = true;\n this.lastPointerX = ev.touches[0].clientX;\n }\n },\n onTouchEnd (ev) {\n if (ev.touches.length === 0) {\n this.isPointerDown = false;\n this.onPointerUp();\n }\n },\n onTouchMove (ev) {\n if (ev.touches.length === 1) {\n this.onPointerMove(ev.touches[0].clientX - this.lastPointerX);\n this.lastPointerX = ev.touches[0].clientX;\n }\n },\n onImageLoad (index, ev) {\n let aspectRatio = ev.target.naturalWidth / ev.target.naturalHeight;\n this.$set(this.imageAspectRatios, index, aspectRatio);\n },\n onImageSwipe (direction) {\n this.paginate(direction == 'right' ? -1 : 1);\n },\n },\n};\n\n/* script */\nconst __vue_script__$1 = script$1;\n\n/* template */\nvar __vue_render__$1 = function () {\n var _vm = this;\n var _h = _vm.$createElement;\n var _c = _vm._self._c || _h;\n return _c(\n \"div\",\n {\n staticClass: \"vue-zoomer-gallery\",\n class: {\n anim: _vm.autoSliding && !_vm.isPointerDown,\n },\n style: {\n \"background-color\": _vm.backgroundColor,\n },\n on: {\n mousemove: _vm.onMouseMove,\n mousedown: _vm.onMouseDown,\n mouseout: _vm.onMouseUp,\n mouseup: _vm.onMouseUp,\n touchstart: _vm.onTouchStart,\n touchend: _vm.onTouchEnd,\n touchmove: function ($event) {\n $event.preventDefault();\n return _vm.onTouchMove.apply(null, arguments)\n },\n },\n },\n _vm._l(3, function (n, i) {\n return _c(\n \"v-zoomer\",\n {\n key: i + \"-\" + _vm.selIndex,\n ref: \"zoomers\",\n refInFor: true,\n staticClass: \"slide\",\n class: [\"left\", \"middle\", \"right\"][i],\n style: [_vm.leftStyle, _vm.middleStyle, _vm.rightStyle][i],\n attrs: {\n \"max-scale\": 10,\n zoomed: _vm.currentZoomed,\n \"reset-trigger\": i,\n \"aspect-ratio\": _vm.imageAspectRatios[_vm.selIndex + i - 1] || 1,\n pivot: _vm.pivot,\n \"zooming-elastic\": _vm.zoomingElastic,\n \"limit-translation\": _vm.limitTranslation,\n \"double-click-to-zoom\": _vm.doubleClickToZoom,\n \"mouse-wheel-to-zoom\": _vm.mouseWheelToZoom,\n },\n on: {\n \"update:zoomed\": function ($event) {\n _vm.currentZoomed = $event;\n },\n swipe: _vm.onImageSwipe,\n },\n },\n [\n _vm.selIndex + i - 1 > -1 && _vm.selIndex + i - 1 < _vm.list.length\n ? _c(\"img\", {\n staticStyle: {\n \"object-fit\": \"contain\",\n width: \"100%\",\n height: \"100%\",\n },\n attrs: {\n src: _vm.list[_vm.selIndex + i - 1],\n draggable: \"false\",\n },\n on: {\n load: function ($event) {\n return _vm.onImageLoad(_vm.selIndex + i - 1, $event)\n },\n dragstart: _vm.onImageDragStart,\n },\n })\n : _vm._e(),\n ]\n )\n }),\n 1\n )\n};\nvar __vue_staticRenderFns__$1 = [];\n__vue_render__$1._withStripped = true;\n\n /* style */\n const __vue_inject_styles__$1 = function (inject) {\n if (!inject) return\n inject(\"data-v-fc52b35c_0\", { source: \"\\n.vue-zoomer-gallery[data-v-fc52b35c] {\\n position: relative;\\n overflow: hidden;\\n user-select: none;\\n min-width: 100px;\\n min-height: 100px;\\n}\\n.vue-zoomer-gallery > *[data-v-fc52b35c] {\\n display: inline-block;\\n}\\n.vue-zoomer-gallery.anim .slide[data-v-fc52b35c] {\\n transition: left 0.4s;\\n}\\n.slide[data-v-fc52b35c] {\\n position: absolute;\\n top: 0;\\n object-fit: contain;\\n width: 100%;\\n height: 100%;\\n -webkit-user-drag: none;\\n}\\n\", map: undefined, media: undefined });\n\n };\n /* scoped */\n const __vue_scope_id__$1 = \"data-v-fc52b35c\";\n /* module identifier */\n const __vue_module_identifier__$1 = undefined;\n /* functional template */\n const __vue_is_functional_template__$1 = false;\n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__$1 = /*#__PURE__*/normalizeComponent(\n { render: __vue_render__$1, staticRenderFns: __vue_staticRenderFns__$1 },\n __vue_inject_styles__$1,\n __vue_script__$1,\n __vue_scope_id__$1,\n __vue_is_functional_template__$1,\n __vue_module_identifier__$1,\n false,\n createInjector,\n undefined,\n undefined\n );\n\nvar index = {\n install (Vue) {\n Vue.component('VZoomer', __vue_component__);\n Vue.component('VZoomerGallery', __vue_component__$1);\n },\n // for locally register\n Zoomer: __vue_component__,\n Gallery: __vue_component__$1,\n};\n\nexport default index;\n","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e(require(\"quill\")):\"function\"==typeof define&&define.amd?define([\"quill\"],e):\"object\"==typeof exports?exports.VueQuillEditor=e(require(\"quill\")):t.VueQuillEditor=e(t.Quill)}(this,function(t){return function(t){function e(i){if(n[i])return n[i].exports;var l=n[i]={i:i,l:!1,exports:{}};return t[i].call(l.exports,l,l.exports,e),l.l=!0,l.exports}var n={};return e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"/\",e(e.s=2)}([function(e,n){e.exports=t},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var i=n(4),l=n.n(i),o=n(6),r=n(5),u=r(l.a,o.a,!1,null,null,null);e.default=u.exports},function(t,e,n){\"use strict\";function i(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,\"__esModule\",{value:!0}),e.install=e.quillEditor=e.Quill=void 0;var l=n(0),o=i(l),r=n(1),u=i(r),s=window.Quill||o.default,a=function(t,e){e&&(u.default.props.globalOptions.default=function(){return e}),t.component(u.default.name,u.default)},c={Quill:s,quillEditor:u.default,install:a};e.default=c,e.Quill=s,e.quillEditor=u.default,e.install=a},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default={theme:\"snow\",boundary:document.body,modules:{toolbar:[[\"bold\",\"italic\",\"underline\",\"strike\"],[\"blockquote\",\"code-block\"],[{header:1},{header:2}],[{list:\"ordered\"},{list:\"bullet\"}],[{script:\"sub\"},{script:\"super\"}],[{indent:\"-1\"},{indent:\"+1\"}],[{direction:\"rtl\"}],[{size:[\"small\",!1,\"large\",\"huge\"]}],[{header:[1,2,3,4,5,6,!1]}],[{color:[]},{background:[]}],[{font:[]}],[{align:[]}],[\"clean\"],[\"link\",\"image\",\"video\"]]},placeholder:\"Insert text here ...\",readOnly:!1}},function(t,e,n){\"use strict\";function i(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,\"__esModule\",{value:!0});var l=n(0),o=i(l),r=n(3),u=i(r),s=window.Quill||o.default;\"function\"!=typeof Object.assign&&Object.defineProperty(Object,\"assign\",{value:function(t,e){if(null==t)throw new TypeError(\"Cannot convert undefined or null to object\");for(var n=Object(t),i=1;i

\"===l&&(l=\"\"),t._content=l,t.$emit(\"input\",t._content),t.$emit(\"change\",{html:l,text:r,quill:o})}),this.$emit(\"ready\",this.quill))}},watch:{content:function(t,e){this.quill&&(t&&t!==this._content?(this._content=t,this.quill.pasteHTML(t)):t||this.quill.setText(\"\"))},value:function(t,e){this.quill&&(t&&t!==this._content?(this._content=t,this.quill.pasteHTML(t)):t||this.quill.setText(\"\"))},disabled:function(t,e){this.quill&&this.quill.enable(!t)}}}},function(t,e){t.exports=function(t,e,n,i,l,o){var r,u=t=t||{},s=typeof t.default;\"object\"!==s&&\"function\"!==s||(r=t,u=t.default);var a=\"function\"==typeof u?u.options:u;e&&(a.render=e.render,a.staticRenderFns=e.staticRenderFns,a._compiled=!0),n&&(a.functional=!0),l&&(a._scopeId=l);var c;if(o?(c=function(t){t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,t||\"undefined\"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),i&&i.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(o)},a._ssrRegister=c):i&&(c=i),c){var d=a.functional,f=d?a.render:a.beforeCreate;d?(a._injectStyles=c,a.render=function(t,e){return c.call(e),f(t,e)}):a.beforeCreate=f?[].concat(f,c):[c]}return{esModule:r,exports:u,options:a}}},function(t,e,n){\"use strict\";var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n(\"div\",{staticClass:\"quill-editor\"},[t._t(\"toolbar\"),t._v(\" \"),n(\"div\",{ref:\"editor\"})],2)},l=[],o={render:i,staticRenderFns:l};e.a=o}])});","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.VueSocialSharing=e():t.VueSocialSharing=e()}(\"undefined\"!=typeof self?self:this,(function(){return function(t){var e={};function i(r){if(e[r])return e[r].exports;var n=e[r]={i:r,l:!1,exports:{}};return t[r].call(n.exports,n,n.exports,i),n.l=!0,n.exports}return i.m=t,i.c=e,i.d=function(t,e,r){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},i.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var n in t)i.d(r,n,function(e){return t[e]}.bind(null,n));return r},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,\"a\",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p=\"\",i(i.s=0)}([function(t,e,i){t.exports=i(1)},function(t,e,i){\"use strict\";i.r(e),i.d(e,\"ShareNetwork\",(function(){return o}));var r={baidu:\"http://cang.baidu.com/do/add?iu=@u&it=@t\",buffer:\"https://bufferapp.com/add?text=@t&url=@u\",email:\"mailto:?subject=@t&body=@u%0D%0A@d\",evernote:\"https://www.evernote.com/clip.action?url=@u&title=@t\",facebook:\"https://www.facebook.com/sharer/sharer.php?u=@u&title=@t&description=@d"e=@q&hashtag=@h\",flipboard:\"https://share.flipboard.com/bookmarklet/popout?v=2&url=@u&title=@t\",hackernews:\"https://news.ycombinator.com/submitlink?u=@u&t=@t\",instapaper:\"http://www.instapaper.com/edit?url=@u&title=@t&description=@d\",line:\"http://line.me/R/msg/text/?@t%0D%0A@u%0D%0A@d\",linkedin:\"https://www.linkedin.com/sharing/share-offsite/?url=@u\",messenger:\"fb-messenger://share/?link=@u\",odnoklassniki:\"https://connect.ok.ru/dk?st.cmd=WidgetSharePreview&st.shareUrl=@u&st.comments=@t\",pinterest:\"https://pinterest.com/pin/create/button/?url=@u&media=@m&description=@t\",pocket:\"https://getpocket.com/save?url=@u&title=@t\",quora:\"https://www.quora.com/share?url=@u&title=@t\",reddit:\"https://www.reddit.com/submit?url=@u&title=@t\",skype:\"https://web.skype.com/share?url=@t%0D%0A@u%0D%0A@d\",sms:\"sms:?body=@t%0D%0A@u%0D%0A@d\",stumbleupon:\"https://www.stumbleupon.com/submit?url=@u&title=@t\",telegram:\"https://t.me/share/url?url=@u&text=@t%0D%0A@d\",tumblr:\"https://www.tumblr.com/share/link?url=@u&name=@t&description=@d\",twitter:\"https://twitter.com/intent/tweet?text=@t&url=@u&hashtags=@h@tu\",viber:\"viber://forward?text=@t%0D%0A@u%0D%0A@d\",vk:\"https://vk.com/share.php?url=@u&title=@t&description=@d&image=@m&noparse=true\",weibo:\"http://service.weibo.com/share/share.php?url=@u&title=@t&pic=@m\",whatsapp:\"https://api.whatsapp.com/send?text=@t%0D%0A@u%0D%0A@d\",wordpress:\"https://wordpress.com/press-this.php?u=@u&t=@t&s=@d&i=@m\",xing:\"https://www.xing.com/social/share/spi?op=share&url=@u&title=@t\",yammer:\"https://www.yammer.com/messages/new?login=true&status=@t%0D%0A@u%0D%0A@d\"},n=\"undefined\"!=typeof window?window:null;var o={name:\"ShareNetwork\",props:{network:{type:String,required:!0},url:{type:String,required:!0},title:{type:String,required:!0},description:{type:String,default:\"\"},quote:{type:String,default:\"\"},hashtags:{type:String,default:\"\"},twitterUser:{type:String,default:\"\"},media:{type:String,default:\"\"},tag:{type:String,default:\"a\"},popup:{type:Object,default:function(){return{width:626,height:436}}}},data:function(){return{popupTop:0,popupLeft:0,popupWindow:void 0,popupInterval:null}},computed:{networks:function(){return this.$SocialSharing?this.$SocialSharing.options.networks:r},key:function(){return this.network.toLowerCase()},rawLink:function(){var t=navigator.userAgent.toLowerCase();return\"sms\"===this.key&&(t.indexOf(\"iphone\")>-1||t.indexOf(\"ipad\")>-1)?this.networks[this.key].replace(\":?\",\":&\"):this.networks[this.key]},shareLink:function(){var t=this.rawLink;return\"twitter\"===this.key&&(this.hashtags.length||(t=t.replace(\"&hashtags=@h\",\"\")),this.twitterUser.length||(t=t.replace(\"@tu\",\"\"))),t.replace(/@tu/g,\"&via=\"+encodeURIComponent(this.twitterUser)).replace(/@u/g,encodeURIComponent(this.url)).replace(/@t/g,encodeURIComponent(this.title)).replace(/@d/g,encodeURIComponent(this.description)).replace(/@q/g,encodeURIComponent(this.quote)).replace(/@h/g,this.encodedHashtags).replace(/@m/g,encodeURIComponent(this.media))},encodedHashtags:function(){return\"facebook\"===this.key&&this.hashtags.length?\"%23\"+this.hashtags.split(\",\")[0]:this.hashtags}},render:function(t){var e=this;if(!this.networks.hasOwnProperty(this.key))throw new Error(\"Network \"+this.key+\" does not exist\");var i={class:\"share-network-\"+this.key,on:{click:function(){return e[\"http\"===e.rawLink.substring(0,4)?\"share\":\"touch\"]()}}};return\"a\"===this.tag&&(i.attrs={href:\"javascript:void(0)\"}),t(this.tag,i,this.$slots.default)},methods:{resizePopup:function(){var t=n.innerWidth||document.documentElement.clientWidth||n.screenX,e=n.innerHeight||document.documentElement.clientHeight||n.screenY,i=t/n.screen.availWidth;this.popupLeft=(t-this.popup.width)/2/i+(void 0!==n.screenLeft?n.screenLeft:n.screenX),this.popupTop=(e-this.popup.height)/2/i+(void 0!==n.screenTop?n.screenTop:n.screenY)},share:function(){var t=this;this.resizePopup(),this.popupWindow&&this.popupInterval&&(clearInterval(this.popupInterval),this.popupWindow.close(),this.emit(\"change\")),this.popupWindow=n.open(this.shareLink,\"sharer-\"+this.key,\",height=\"+this.popup.height+\",width=\"+this.popup.width+\",left=\"+this.popupLeft+\",top=\"+this.popupTop+\",screenX=\"+this.popupLeft+\",screenY=\"+this.popupTop),this.popupWindow&&(this.popupWindow.focus(),this.popupInterval=setInterval((function(){t.popupWindow&&!t.popupWindow.closed||(clearInterval(t.popupInterval),t.popupWindow=null,t.emit(\"close\"))}),500),this.emit(\"open\"))},touch:function(){window.open(this.shareLink,\"_blank\"),this.emit(\"open\")},emit:function(t){this.$root.$emit(\"share_network_\"+t,this.key,this.url),this.$emit(t,this.key,this.url)}}};e.default={install:function(t,e){t.component(o.name,o),t.prototype.$SocialSharing={options:{networks:e&&e.hasOwnProperty(\"networks\")?Object.assign(r,e.networks):r}}}}}])}));"],"sourceRoot":""}