(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{1:function(t,e,r){"use strict";r.d(e,"k",(function(){return y})),r.d(e,"m",(function(){return _})),r.d(e,"l",(function(){return C})),r.d(e,"e",(function(){return k})),r.d(e,"b",(function(){return O})),r.d(e,"s",(function(){return $})),r.d(e,"g",(function(){return j})),r.d(e,"h",(function(){return P})),r.d(e,"d",(function(){return E})),r.d(e,"r",(function(){return S})),r.d(e,"j",(function(){return R})),r.d(e,"t",(function(){return A})),r.d(e,"o",(function(){return D})),r.d(e,"q",(function(){return T})),r.d(e,"f",(function(){return I})),r.d(e,"c",(function(){return z})),r.d(e,"i",(function(){return M})),r.d(e,"p",(function(){return B})),r.d(e,"a",(function(){return H})),r.d(e,"u",(function(){return Q})),r.d(e,"n",(function(){return Y}));r(17),r(34),r(42),r(43);var n=r(15),o=r(2),c=r(11),l=r(3),h=(r(21),r(25),r(122),r(16),r(20),r(22),r(35),r(27),r(28),r(23),r(36),r(70),r(123),r(103),r(95),r(96),r(166),r(41),r(37),r(0)),f=r.n(h),d=r(18);function v(object,t){var e=Object.keys(object);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(object);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(object,t).enumerable}))),e.push.apply(e,r)}return e}function m(t){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?v(Object(source),!0).forEach((function(e){Object(c.a)(t,e,source[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(source)):v(Object(source)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(source,e))}))}return t}function w(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(!t)return;if("string"==typeof t)return x(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);"Object"===r&&t.constructor&&(r=t.constructor.name);if("Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return x(t,e)}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var i=0,n=function(){};return{s:n,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,c=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return c=t.done,t},e:function(t){l=!0,o=t},f:function(){try{c||null==r.return||r.return()}finally{if(l)throw o}}}}function x(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,r=new Array(e);i<e;i++)r[i]=t[i];return r}function y(t){f.a.config.errorHandler&&f.a.config.errorHandler(t)}function _(t){return t.then((function(t){return t.default||t}))}function C(t){return t.$options&&"function"==typeof t.$options.fetch&&!t.$options.fetch.length}function k(t){var e,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=t.$children||[],o=w(n);try{for(o.s();!(e=o.n()).done;){var c=e.value;c.$fetch?r.push(c):c.$children&&k(c,r)}}catch(t){o.e(t)}finally{o.f()}return r}function O(t,e){if(e||!t.options.__hasNuxtData){var r=t.options._originDataFn||t.options.data||function(){return{}};t.options._originDataFn=r,t.options.data=function(){var data=r.call(this,this);return this.$ssrContext&&(e=this.$ssrContext.asyncData[t.cid]),m(m({},data),e)},t.options.__hasNuxtData=!0,t._Ctor&&t._Ctor.options&&(t._Ctor.options.data=t.options.data)}}function $(t){return t.options&&t._Ctor===t||(t.options?(t._Ctor=t,t.extendOptions=t.options):(t=f.a.extend(t))._Ctor=t,!t.options.name&&t.options.__file&&(t.options.name=t.options.__file)),t}function j(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"components";return Array.prototype.concat.apply([],t.matched.map((function(t,n){return Object.keys(t[r]).map((function(o){return e&&e.push(n),t[r][o]}))})))}function P(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return j(t,e,"instances")}function E(t,e){return Array.prototype.concat.apply([],t.matched.map((function(t,r){return Object.keys(t.components).reduce((function(n,o){return t.components[o]?n.push(e(t.components[o],t.instances[o],t,o,r)):delete t.components[o],n}),[])})))}function S(t,e){return Promise.all(E(t,function(){var t=Object(o.a)(regeneratorRuntime.mark((function t(r,n,o,c){var l,h;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if("function"!=typeof r||r.options){t.next=11;break}return t.prev=1,t.next=4,r();case 4:r=t.sent,t.next=11;break;case 7:throw t.prev=7,t.t0=t.catch(1),t.t0&&"ChunkLoadError"===t.t0.name&&"undefined"!=typeof window&&window.sessionStorage&&(l=Date.now(),(!(h=parseInt(window.sessionStorage.getItem("nuxt-reload")))||h+6e4<l)&&(window.sessionStorage.setItem("nuxt-reload",l),window.location.reload(!0))),t.t0;case 11:return o.components[c]=r=$(r),t.abrupt("return","function"==typeof e?e(r,n,o,c):r);case 13:case"end":return t.stop()}}),t,null,[[1,7]])})));return function(e,r,n,o){return t.apply(this,arguments)}}()))}function R(t){return L.apply(this,arguments)}function L(){return(L=Object(o.a)(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e){t.next=2;break}return t.abrupt("return");case 2:return t.next=4,S(e);case 4:return t.abrupt("return",m(m({},e),{},{meta:j(e).map((function(t,r){return m(m({},t.options.meta),(e.matched[r]||{}).meta)}))}));case 5:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function A(t,e){return N.apply(this,arguments)}function N(){return(N=Object(o.a)(regeneratorRuntime.mark((function t(e,r){var o,c,h,f;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e.context||(e.context={isStatic:!0,isDev:!1,isHMR:!1,app:e,store:e.store,payload:r.payload,error:r.error,base:e.router.options.base,env:{NUXT_ENV_DEPLOY:"asf"}},r.req&&(e.context.req=r.req),r.res&&(e.context.res=r.res),r.ssrContext&&(e.context.ssrContext=r.ssrContext),e.context.redirect=function(t,path,r){if(t){e.context._redirected=!0;var o=Object(n.a)(path);if("number"==typeof t||"undefined"!==o&&"object"!==o||(r=path||{},path=t,o=Object(n.a)(path),t=302),"object"===o&&(path=e.router.resolve(path).route.fullPath),!/(^[.]{1,2}\/)|(^\/(?!\/))/.test(path))throw path=Object(d.d)(path,r),window.location.replace(path),new Error("ERR_REDIRECT");e.context.next({path:path,query:r,status:t})}},e.context.nuxtState=window.__NUXT__),t.next=3,Promise.all([R(r.route),R(r.from)]);case 3:o=t.sent,c=Object(l.a)(o,2),h=c[0],f=c[1],r.route&&(e.context.route=h),r.from&&(e.context.from=f),e.context.next=r.next,e.context._redirected=!1,e.context._errored=!1,e.context.isHMR=!1,e.context.params=e.context.route.params||{},e.context.query=e.context.route.query||{};case 15:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function D(t,e){return!t.length||e._redirected||e._errored?Promise.resolve():T(t[0],e).then((function(){return D(t.slice(1),e)}))}function T(t,e){var r;return(r=2===t.length?new Promise((function(r){t(e,(function(t,data){t&&e.error(t),r(data=data||{})}))})):t(e))&&r instanceof Promise&&"function"==typeof r.then?r:Promise.resolve(r)}function I(base,t){if("hash"===t)return window.location.hash.replace(/^#\//,"");base=decodeURI(base).slice(0,-1);var path=decodeURI(window.location.pathname);base&&path.startsWith(base)&&(path=path.slice(base.length));var e=(path||"/")+window.location.search+window.location.hash;return Object(d.c)(e)}function z(t,e){return function(t,e){for(var r=new Array(t.length),i=0;i<t.length;i++)"object"===Object(n.a)(t[i])&&(r[i]=new RegExp("^(?:"+t[i].pattern+")$",V(e)));return function(e,n){for(var path="",data=e||{},o=(n||{}).pretty?U:encodeURIComponent,c=0;c<t.length;c++){var l=t[c];if("string"!=typeof l){var h=data[l.name||"pathMatch"],f=void 0;if(null==h){if(l.optional){l.partial&&(path+=l.prefix);continue}throw new TypeError('Expected "'+l.name+'" to be defined')}if(Array.isArray(h)){if(!l.repeat)throw new TypeError('Expected "'+l.name+'" to not repeat, but received `'+JSON.stringify(h)+"`");if(0===h.length){if(l.optional)continue;throw new TypeError('Expected "'+l.name+'" to not be empty')}for(var d=0;d<h.length;d++){if(f=o(h[d]),!r[c].test(f))throw new TypeError('Expected all "'+l.name+'" to match "'+l.pattern+'", but received `'+JSON.stringify(f)+"`");path+=(0===d?l.prefix:l.delimiter)+f}}else{if(f=l.asterisk?G(h):o(h),!r[c].test(f))throw new TypeError('Expected "'+l.name+'" to match "'+l.pattern+'", but received "'+f+'"');path+=l.prefix+f}}else path+=l}return path}}(function(t,e){var r,n=[],o=0,c=0,path="",l=e&&e.delimiter||"/";for(;null!=(r=F.exec(t));){var h=r[0],f=r[1],d=r.index;if(path+=t.slice(c,d),c=d+h.length,f)path+=f[1];else{var v=t[c],m=r[2],w=r[3],x=r[4],y=r[5],_=r[6],C=r[7];path&&(n.push(path),path="");var k=null!=m&&null!=v&&v!==m,O="+"===_||"*"===_,$="?"===_||"*"===_,j=r[2]||l,pattern=x||y;n.push({name:w||o++,prefix:m||"",delimiter:j,optional:$,repeat:O,partial:k,asterisk:Boolean(C),pattern:pattern?K(pattern):C?".*":"[^"+X(j)+"]+?"})}}c<t.length&&(path+=t.substr(c));path&&n.push(path);return n}(t,e),e)}function M(t,e){var r={},n=m(m({},t),e);for(var o in n)String(t[o])!==String(e[o])&&(r[o]=!0);return r}function B(t){var e;if(t.message||"string"==typeof t)e=t.message||t;else try{e=JSON.stringify(t,null,2)}catch(r){e="[".concat(t.constructor.name,"]")}return m(m({},t),{},{message:e,statusCode:t.statusCode||t.status||t.response&&t.response.status||500})}window.onNuxtReadyCbs=[],window.onNuxtReady=function(t){window.onNuxtReadyCbs.push(t)};var F=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function U(t,e){var r=e?/[?#]/g:/[/?#]/g;return encodeURI(t).replace(r,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()}))}function G(t){return U(t,!0)}function X(t){return t.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1")}function K(t){return t.replace(/([=!:$/()])/g,"\\$1")}function V(t){return t&&t.sensitive?"":"i"}function H(t,e,r){t.$options[e]||(t.$options[e]=[]),t.$options[e].includes(r)||t.$options[e].push(r)}var Q=d.b,Y=(d.e,d.a)},102:function(t,e,r){"use strict";var n={gh:{routerBase:"/echarts-handbook",rootPath:"https://apache.github.io/echarts-handbook/",exampleViewPath:"https://echarts.apache.org/examples/${lang}/view.html?c=",exampleEditorPath:"https://echarts.apache.org/examples/${lang}/editor.html?c=",mainSitePath:"https://echarts.apache.org/",optionPath:"https://echarts.apache.org/option.html#",gitRepo:"apache/echarts-handbook"},asf:{routerBase:"/handbook",rootPath:"https://echarts.apache.org/handbook/",exampleViewPath:"https://echarts.apache.org/examples/${lang}/view.html?c=",exampleEditorPath:"https://echarts.apache.org/examples/${lang}/editor.html?c=",mainSitePath:"https://echarts.apache.org/",optionPath:"https://echarts.apache.org/option.html#",gitRepo:"apache/echarts-handbook"},local:{routerBase:"/echarts-handbook/dist",rootPath:"http://localhost/echarts-handbook/dist/",exampleViewPath:"http://localhost/echarts-website/examples/${lang}/view.html?c=",exampleEditorPath:"http://localhost/echarts-website/examples/${lang}/editor.html?c=",mainSitePath:"http://localhost/echarts-website/",optionPath:"http://localhost/echarts-website/option.html#",gitRepo:"apache/echarts-handbook"},localsite:{routerBase:"/echarts-website/handbook",rootPath:"http://localhost/echarts-website/handbook",exampleViewPath:"http://localhost/echarts-website/examples/${lang}/view.html?c=",exampleEditorPath:"http://localhost/echarts-website/examples/${lang}/editor.html?c=",mainSitePath:"http://localhost/echarts-website/",optionPath:"http://localhost/echarts-website/option.html#",gitRepo:"apache/echarts-handbook"}};var o=function(){var t="asf";if(!n.asf)throw"Deploy config ".concat(t," not exits");return n.asf}();e.a=o},124:function(t,e,r){t.exports={}},125:function(t,e,r){t.exports={}},126:function(t,e,r){t.exports={}},127:function(t,e,r){t.exports={}},128:function(t,e,r){t.exports={}},129:function(t,e,r){t.exports={}},134:function(t,e){const r=[[{title:"快速上手",dir:"get-started"},{title:"入门篇",dir:"basics",children:[{title:"获取 ECharts",dir:"download"},{title:"在项目中引入 ECharts",dir:"import"},{title:"资源列表",dir:"resource",draft:!0},{title:"获取灵感",dir:"inspiration"},{title:"寻求帮助",dir:"help"},{title:"版本特性",dir:"release-note",children:[{title:"ECharts 5 特性介绍",dir:"v5-feature"},{title:"ECharts 5 升级指南",dir:"v5-upgrade-guide"},{title:5.2,dir:"5-2-0"}]}]},{title:"概念篇",dir:"concepts",children:[{title:"图表容器及大小",dir:"chart-size"},{title:"配置项",dir:"options",draft:!0},{title:"系列",dir:"series",draft:!0},{title:"样式",dir:"style"},{title:"数据集",dir:"dataset"},{title:"数据转换",dir:"data-transform"},{title:"坐标系",dir:"coordinate",draft:!0},{title:"坐标轴",dir:"axis"},{title:"视觉映射",dir:"visual-map"},{title:"图例",dir:"legend"},{title:"事件与行为",dir:"event"}]},{title:"应用篇",dir:"how-to",children:[{title:"常用图表类型",dir:"chart-types",children:[{title:"柱状图",dir:"bar",children:[{title:"基础柱状图",dir:"basic-bar"},{title:"堆叠柱状图",dir:"stacked-bar"},{title:"动态排序柱状图",dir:"bar-race"},{title:"极坐标系柱状图",dir:"polar-bar",draft:!0},{title:"阶梯瀑布图",dir:"waterfall"},{title:"视觉映射的柱状图",dir:"visual-map",draft:!0}]},{title:"折线图",dir:"line",children:[{title:"基础折线图",dir:"basic-line"},{title:"堆叠折线图",dir:"stacked-line"},{title:"区域面积图",dir:"area-line"},{title:"平滑曲线图",dir:"smooth-line"},{title:"阶梯线图",dir:"step-line"}]},{title:"饼图",dir:"pie",children:[{title:"基础饼图",dir:"basic-pie"},{title:"圆环图",dir:"doughnut"},{title:"南丁格尔图（玫瑰图）",dir:"rose"}]},{title:"散点图",dir:"scatter",children:[{title:"基础散点图",dir:"basic-scatter"}]}]},{title:"移动端优化",dir:"mobile",draft:!0},{title:"跨平台方案",dir:"cross-platform",children:[{title:"百度智能小程序",dir:"baidu-app"},{title:"微信小程序",dir:"wechat-app"},{title:"服务端渲染",dir:"server"}]},{title:"数据处理",dir:"data",children:[{title:"动态的异步数据",dir:"dynamic-data"},{title:"数据下钻",dir:"drilldown",draft:!0}]},{title:"标签",dir:"label",children:[{title:"富文本标签",dir:"rich-text"}]},{title:"交互",dir:"interaction",children:[{title:"拖拽的实现",dir:"drag"},{title:"多图联动",dir:"connect",draft:!0}]}]},{title:"最佳实践",dir:"best-practices",children:[{title:"移动端优化",dir:"mobile",draft:!0},{title:"Canvas vs. SVG",dir:"canvas-vs-svg"},{title:"无障碍访问",dir:"aria"}]},{title:"编辑本文档",dir:"meta",children:[{title:"文档编辑指南",dir:"edit-guide"}]}]];t.exports=r.length<=1?r[0]:r},135:function(t,e){const r=[[{title:"Get Started",dir:"get-started"},{title:"Basics",dir:"basics",children:[{title:"Download ECharts",dir:"download"},{title:"Import ECharts",dir:"import"},{title:"Resources",dir:"resource",draft:!0},{title:"Inspiration",dir:"inspiration"},{title:"Get Help",dir:"help"},{title:"What's New",dir:"release-note",children:[{title:"ECharts 5 Features",dir:"v5-feature"},{title:"ECharts 5 Upgrade Guide",dir:"v5-upgrade-guide"},{title:5.2,dir:"5-2-0"}]}]},{title:"Concepts",dir:"concepts",children:[{title:"Chart Container",dir:"chart-size"},{title:"Chart Option",dir:"options",draft:!0},{title:"Series",dir:"series",draft:!0},{title:"Style",dir:"style"},{title:"Dataset",dir:"dataset"},{title:"Data Transform",dir:"data-transform"},{title:"Coordinate",dir:"coordinate",draft:!0},{title:"Axis",dir:"axis"},{title:"Visual Mapping",dir:"visual-map"},{title:"Legend",dir:"legend"},{title:"Event and Action",dir:"event"}]},{title:"How To Guides",dir:"how-to",children:[{title:"Common Charts",dir:"chart-types",children:[{title:"Bar",dir:"bar",children:[{title:"Basic Bar",dir:"basic-bar"},{title:"Stacked Bar",dir:"stacked-bar"},{title:"Bar Racing",dir:"bar-race"},{title:"Bar Polar",dir:"polar-bar",draft:!0},{title:"Waterfall",dir:"waterfall"}]},{title:"Line",dir:"line",children:[{title:"Basic Line",dir:"basic-line"},{title:"Stacked Line",dir:"stacked-line"},{title:"Area Chart",dir:"area-line"},{title:"Smoothed Line",dir:"smooth-line"},{title:"Step Line",dir:"step-line"}]},{title:"Pie",dir:"pie",children:[{title:"Basic Pie",dir:"basic-pie"},{title:"Ring Style",dir:"doughnut"},{title:"Rose Style",dir:"rose"}]},{title:"Scatter",dir:"scatter",children:[{title:"Basic Scatter",dir:"basic-scatter"}]}]},{title:"Mobile",dir:"mobile",draft:!0},{title:"Cross Platform",dir:"cross-platform",children:[{title:"Server Side Rendering",dir:"server"}]},{title:"Data",dir:"data",children:[{title:"Dynamic Data",dir:"dynamic-data"},{title:"Drilldown",dir:"drilldown",draft:!0}]},{title:"Label",dir:"label",children:[{title:"Rich Text",dir:"rich-text"}]},{title:"Interaction",dir:"interaction",children:[{title:"Drag",dir:"drag"},{title:"Connect",dir:"connect",draft:!0}]}]},{title:"Best Practices",dir:"best-practices",children:[{title:"Mobile Optimization",dir:"mobile",draft:!0},{title:"Canvas vs. SVG",dir:"canvas-vs-svg"},{title:"Aria",dir:"aria"}]},{title:"Edit Handbook",dir:"meta",children:[{title:"Edit Guide",dir:"edit-guide"}]}]];t.exports=r.length<=1?r[0]:r},136:function(t,e,r){"use strict";var n=r(2),o=(r(21),r(16),r(0)),c=r.n(o),l=r(1),h=window.__NUXT__;function f(){if(!this._hydrated)return this.$fetch()}function d(){if((t=this).$vnode&&t.$vnode.elm&&t.$vnode.elm.dataset&&t.$vnode.elm.dataset.fetchKey){var t;this._hydrated=!0,this._fetchKey=this.$vnode.elm.dataset.fetchKey;var data=h.fetch[this._fetchKey];if(data&&data._error)this.$fetchState.error=data._error;else for(var e in data)c.a.set(this.$data,e,data[e])}}function v(){var t=this;return this._fetchPromise||(this._fetchPromise=m.call(this).then((function(){delete t._fetchPromise}))),this._fetchPromise}function m(){return w.apply(this,arguments)}function w(){return(w=Object(n.a)(regeneratorRuntime.mark((function t(){var e,r,n,o=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return this.$nuxt.nbFetching++,this.$fetchState.pending=!0,this.$fetchState.error=null,this._hydrated=!1,e=null,r=Date.now(),t.prev=6,t.next=9,this.$options.fetch.call(this);case 9:t.next=15;break;case 11:t.prev=11,t.t0=t.catch(6),e=Object(l.p)(t.t0);case 15:if(!((n=this._fetchDelay-(Date.now()-r))>0)){t.next=19;break}return t.next=19,new Promise((function(t){return setTimeout(t,n)}));case 19:this.$fetchState.error=e,this.$fetchState.pending=!1,this.$fetchState.timestamp=Date.now(),this.$nextTick((function(){return o.$nuxt.nbFetching--}));case 23:case"end":return t.stop()}}),t,this,[[6,11]])})))).apply(this,arguments)}e.a={beforeCreate:function(){Object(l.l)(this)&&(this._fetchDelay="number"==typeof this.$options.fetchDelay?this.$options.fetchDelay:200,c.a.util.defineReactive(this,"$fetchState",{pending:!1,error:null,timestamp:Date.now()}),this.$fetch=v.bind(this),Object(l.a)(this,"created",d),Object(l.a)(this,"beforeMount",f))}}},141:function(t,e,r){t.exports=r(142)},142:function(t,e,r){"use strict";r.r(e),function(t){r(23),r(17),r(34);var e=r(15),n=r(2),o=(r(114),r(150),r(155),r(157),r(21),r(20),r(25),r(35),r(41),r(37),r(22),r(27),r(16),r(28),r(0)),c=r.n(o),l=r(131),h=r(56),f=r(1),d=r(26),v=r(136),m=r(73);function w(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(!t)return;if("string"==typeof t)return x(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);"Object"===r&&t.constructor&&(r=t.constructor.name);if("Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return x(t,e)}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var i=0,n=function(){};return{s:n,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,c=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return c=t.done,t},e:function(t){l=!0,o=t},f:function(){try{c||null==r.return||r.return()}finally{if(l)throw o}}}}function x(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,r=new Array(e);i<e;i++)r[i]=t[i];return r}c.a.__nuxt__fetch__mixin__||(c.a.mixin(v.a),c.a.__nuxt__fetch__mixin__=!0),c.a.component(m.a.name,m.a),c.a.component("NLink",m.a),t.fetch||(t.fetch=l.a);var y,_,C=[],k=window.__NUXT__||{},O=k.config||{};O._app&&(r.p=Object(f.u)(O._app.cdnURL,O._app.assetsPath)),Object.assign(c.a.config,{silent:!0,performance:!1});var $=c.a.config.errorHandler||console.error;function j(t,e,r){for(var n=function(component){var t=function(component,t){if(!component||!component.options||!component.options[t])return{};var option=component.options[t];if("function"==typeof option){for(var e=arguments.length,r=new Array(e>2?e-2:0),n=2;n<e;n++)r[n-2]=arguments[n];return option.apply(void 0,r)}return option}(component,"transition",e,r)||{};return"string"==typeof t?{name:t}:t},o=r?Object(f.g)(r):[],c=Math.max(t.length,o.length),l=[],h=function(i){var e=Object.assign({},n(t[i])),r=Object.assign({},n(o[i]));Object.keys(e).filter((function(t){return void 0!==e[t]&&!t.toLowerCase().includes("leave")})).forEach((function(t){r[t]=e[t]})),l.push(r)},i=0;i<c;i++)h(i);return l}function P(t,e,r){return E.apply(this,arguments)}function E(){return(E=Object(n.a)(regeneratorRuntime.mark((function t(e,r,n){var o,c,l,h,d=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(this._routeChanged=Boolean(y.nuxt.err)||r.name!==e.name,this._paramChanged=!this._routeChanged&&r.path!==e.path,this._queryChanged=!this._paramChanged&&r.fullPath!==e.fullPath,this._diffQuery=this._queryChanged?Object(f.i)(e.query,r.query):[],(this._routeChanged||this._paramChanged)&&this.$loading.start&&!this.$loading.manual&&this.$loading.start(),t.prev=5,!this._queryChanged){t.next=12;break}return t.next=9,Object(f.r)(e,(function(t,e){return{Component:t,instance:e}}));case 9:o=t.sent,o.some((function(t){var n=t.Component,o=t.instance,c=n.options.watchQuery;return!0===c||(Array.isArray(c)?c.some((function(t){return d._diffQuery[t]})):"function"==typeof c&&c.apply(o,[e.query,r.query]))}))&&this.$loading.start&&!this.$loading.manual&&this.$loading.start();case 12:n(),t.next=26;break;case 15:if(t.prev=15,t.t0=t.catch(5),c=t.t0||{},l=c.statusCode||c.status||c.response&&c.response.status||500,h=c.message||"",!/^Loading( CSS)? chunk (\d)+ failed\./.test(h)){t.next=23;break}return window.location.reload(!0),t.abrupt("return");case 23:this.error({statusCode:l,message:h}),this.$nuxt.$emit("routeChanged",e,r,c),n();case 26:case"end":return t.stop()}}),t,this,[[5,15]])})))).apply(this,arguments)}function S(t,e){return k.serverRendered&&e&&Object(f.b)(t,e),t._Ctor=t,t}function R(t){return Object(f.d)(t,function(){var t=Object(n.a)(regeneratorRuntime.mark((function t(e,r,n,o,c){var l;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if("function"!=typeof e||e.options){t.next=4;break}return t.next=3,e();case 3:e=t.sent;case 4:return l=S(Object(f.s)(e),k.data?k.data[c]:null),n.components[o]=l,t.abrupt("return",l);case 7:case"end":return t.stop()}}),t)})));return function(e,r,n,o,c){return t.apply(this,arguments)}}())}function L(t,e,r){var n=this,o=["nuxti18n"],c=!1;if(void 0!==r&&(o=[],(r=Object(f.s)(r)).options.middleware&&(o=o.concat(r.options.middleware)),t.forEach((function(t){t.options.middleware&&(o=o.concat(t.options.middleware))}))),o=o.map((function(t){return"function"==typeof t?t:("function"!=typeof h.a[t]&&(c=!0,n.error({statusCode:500,message:"Unknown middleware "+t})),h.a[t])})),!c)return Object(f.o)(o,e)}function A(t,e,r){return N.apply(this,arguments)}function N(){return(N=Object(n.a)(regeneratorRuntime.mark((function t(e,r,o){var c,l,h,v,m,x,_,k,O,$,P,E,S,R,A,N=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!1!==this._routeChanged||!1!==this._paramChanged||!1!==this._queryChanged){t.next=2;break}return t.abrupt("return",o());case 2:return!1,e===r?(C=[],!0):(c=[],C=Object(f.g)(r,c).map((function(t,i){return Object(f.c)(r.matched[c[i]].path)(r.params)}))),l=!1,h=function(path){r.path===path.path&&N.$loading.finish&&N.$loading.finish(),r.path!==path.path&&N.$loading.pause&&N.$loading.pause(),l||(l=!0,o(path))},t.next=8,Object(f.t)(y,{route:e,from:r,next:h.bind(this)});case 8:if(this._dateLastError=y.nuxt.dateErr,this._hadError=Boolean(y.nuxt.err),v=[],(m=Object(f.g)(e,v)).length){t.next=27;break}return t.next=15,L.call(this,m,y.context);case 15:if(!l){t.next=17;break}return t.abrupt("return");case 17:return x=(d.a.options||d.a).layout,t.next=20,this.loadLayout("function"==typeof x?x.call(d.a,y.context):x);case 20:return _=t.sent,t.next=23,L.call(this,m,y.context,_);case 23:if(!l){t.next=25;break}return t.abrupt("return");case 25:return y.context.error({statusCode:404,message:"This page could not be found"}),t.abrupt("return",o());case 27:return m.forEach((function(t){t._Ctor&&t._Ctor.options&&(t.options.asyncData=t._Ctor.options.asyncData,t.options.fetch=t._Ctor.options.fetch)})),this.setTransitions(j(m,e,r)),t.prev=29,t.next=32,L.call(this,m,y.context);case 32:if(!l){t.next=34;break}return t.abrupt("return");case 34:if(!y.context._errored){t.next=36;break}return t.abrupt("return",o());case 36:return"function"==typeof(k=m[0].options.layout)&&(k=k(y.context)),t.next=40,this.loadLayout(k);case 40:return k=t.sent,t.next=43,L.call(this,m,y.context,k);case 43:if(!l){t.next=45;break}return t.abrupt("return");case 45:if(!y.context._errored){t.next=47;break}return t.abrupt("return",o());case 47:O=!0,t.prev=48,$=w(m),t.prev=50,$.s();case 52:if((P=$.n()).done){t.next=63;break}if("function"==typeof(E=P.value).options.validate){t.next=56;break}return t.abrupt("continue",61);case 56:return t.next=58,E.options.validate(y.context);case 58:if(O=t.sent){t.next=61;break}return t.abrupt("break",63);case 61:t.next=52;break;case 63:t.next=68;break;case 65:t.prev=65,t.t0=t.catch(50),$.e(t.t0);case 68:return t.prev=68,$.f(),t.finish(68);case 71:t.next=77;break;case 73:return t.prev=73,t.t1=t.catch(48),this.error({statusCode:t.t1.statusCode||"500",message:t.t1.message}),t.abrupt("return",o());case 77:if(O){t.next=80;break}return this.error({statusCode:404,message:"This page could not be found"}),t.abrupt("return",o());case 80:return t.next=82,Promise.all(m.map(function(){var t=Object(n.a)(regeneratorRuntime.mark((function t(n,i){var o,c,l,h,d,m,w,x,p;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n._path=Object(f.c)(e.matched[v[i]].path)(e.params),n._dataRefresh=!1,o=n._path!==C[i],N._routeChanged&&o?n._dataRefresh=!0:N._paramChanged&&o?(c=n.options.watchParam,n._dataRefresh=!1!==c):N._queryChanged&&(!0===(l=n.options.watchQuery)?n._dataRefresh=!0:Array.isArray(l)?n._dataRefresh=l.some((function(t){return N._diffQuery[t]})):"function"==typeof l&&(S||(S=Object(f.h)(e)),n._dataRefresh=l.apply(S[i],[e.query,r.query]))),N._hadError||!N._isMounted||n._dataRefresh){t.next=6;break}return t.abrupt("return");case 6:return h=[],d=n.options.asyncData&&"function"==typeof n.options.asyncData,m=Boolean(n.options.fetch)&&n.options.fetch.length,w=d&&m?30:45,d&&((x=Object(f.q)(n.options.asyncData,y.context)).then((function(t){Object(f.b)(n,t),N.$loading.increase&&N.$loading.increase(w)})),h.push(x)),N.$loading.manual=!1===n.options.loading,m&&((p=n.options.fetch(y.context))&&(p instanceof Promise||"function"==typeof p.then)||(p=Promise.resolve(p)),p.then((function(t){N.$loading.increase&&N.$loading.increase(w)})),h.push(p)),t.abrupt("return",Promise.all(h));case 14:case"end":return t.stop()}}),t)})));return function(e,r){return t.apply(this,arguments)}}()));case 82:l||(this.$loading.finish&&!this.$loading.manual&&this.$loading.finish(),o()),t.next=99;break;case 85:if(t.prev=85,t.t2=t.catch(29),"ERR_REDIRECT"!==(R=t.t2||{}).message){t.next=90;break}return t.abrupt("return",this.$nuxt.$emit("routeChanged",e,r,R));case 90:return C=[],Object(f.k)(R),"function"==typeof(A=(d.a.options||d.a).layout)&&(A=A(y.context)),t.next=96,this.loadLayout(A);case 96:this.error(R),this.$nuxt.$emit("routeChanged",e,r,R),o();case 99:case"end":return t.stop()}}),t,this,[[29,85],[48,73],[50,65,68,71]])})))).apply(this,arguments)}function D(t,r){Object(f.d)(t,(function(t,r,n,o){return"object"!==Object(e.a)(t)||t.options||((t=c.a.extend(t))._Ctor=t,n.components[o]=t),t}))}function T(t){var e=Boolean(this.$options.nuxt.err);this._hadError&&this._dateLastError===this.$options.nuxt.dateErr&&(e=!1);var r=e?(d.a.options||d.a).layout:t.matched[0].components.default.options.layout;"function"==typeof r&&(r=r(y.context)),this.setLayout(r)}function I(t){t._hadError&&t._dateLastError===t.$options.nuxt.dateErr&&t.error()}function z(t,e){var r=this;if(!1!==this._routeChanged||!1!==this._paramChanged||!1!==this._queryChanged){var n=Object(f.h)(t),o=Object(f.g)(t),l=!1;c.a.nextTick((function(){n.forEach((function(t,i){if(t&&!t._isDestroyed&&t.constructor._dataRefresh&&o[i]===t.constructor&&!0!==t.$vnode.data.keepAlive&&"function"==typeof t.constructor.options.data){var e=t.constructor.options.data.call(t);for(var r in e)c.a.set(t.$data,r,e[r]);l=!0}})),l&&window.$nuxt.$nextTick((function(){window.$nuxt.$emit("triggerScroll")})),I(r)}))}}function M(t){window.onNuxtReadyCbs.forEach((function(e){"function"==typeof e&&e(t)})),"function"==typeof window._onNuxtLoaded&&window._onNuxtLoaded(t),_.afterEach((function(e,r){c.a.nextTick((function(){return t.$nuxt.$emit("routeChanged",e,r)}))}))}function B(){return(B=Object(n.a)(regeneratorRuntime.mark((function t(e){var r,n,o,l,h;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return y=e.app,_=e.router,e.store,r=new c.a(y),n=k.layout||"default",t.next=7,r.loadLayout(n);case 7:return r.setLayout(n),o=function(){r.$mount("#__nuxt"),_.afterEach(D),_.afterEach(T.bind(r)),_.afterEach(z.bind(r)),c.a.nextTick((function(){M(r)}))},t.next=11,Promise.all(R(y.context.route));case 11:if(l=t.sent,r.setTransitions=r.$options.nuxt.setTransitions.bind(r),l.length&&(r.setTransitions(j(l,_.currentRoute)),C=_.currentRoute.matched.map((function(t){return Object(f.c)(t.path)(_.currentRoute.params)}))),r.$loading={},k.error&&r.error(k.error),_.beforeEach(P.bind(r)),_.beforeEach(A.bind(r)),!k.serverRendered||!Object(f.n)(k.routePath,r.context.route.path)){t.next=20;break}return t.abrupt("return",o());case 20:return h=function(){D(_.currentRoute,_.currentRoute),T.call(r,_.currentRoute),I(r),o()},t.next=23,new Promise((function(t){return setTimeout(t,0)}));case 23:A.call(r,_.currentRoute,_.currentRoute,(function(path){if(path){var t=_.afterEach((function(e,r){t(),h()}));_.push(path,void 0,(function(t){t&&$(t)}))}else h()}));case 24:case"end":return t.stop()}}),t)})))).apply(this,arguments)}Object(d.b)(null,k.config).then((function(t){return B.apply(this,arguments)})).catch($)}.call(this,r(44))},172:function(t,e,r){"use strict";r(124)},173:function(t,e,r){"use strict";r(125)},177:function(t,e,r){"use strict";r(126)},178:function(t,e,r){"use strict";r(127)},179:function(t,e,r){"use strict";r(128)},180:function(t,e,r){"use strict";r(129)},181:function(t,e,r){"use strict";r.r(e),r.d(e,"state",(function(){return f})),r.d(e,"mutations",(function(){return d})),r.d(e,"actions",(function(){return m}));var n=r(134),o=r.n(n),c=r(135),l=r.n(c),h=r(102),f=function(){return{filled:!1,docVersion:"",ghVersion:"",visibleAffix:!1,homepage:{},adBlocked:!1,focusMode:!1,posts:{zh:o.a,en:l.a},config:h.a}},d={toggle:function(t,e){t[e]=!t[e]},setDocVersion:function(t,e){t.docVersion=e},setGhVersion:function(t,e){t.ghVersion=e},setHomepage:function(t,e){t.homepage=e},setFilled:function(t){t.filled=!0},setAdBlocked:function(t,e){t.adBlocked=e},setFocusMode:function(t,e){t.focusMode=e}},v=null,m={focusMode:function(t){var e=t.commit;v||(v=setTimeout((function(){return e("setFocusMode",!0)}),1300))},clearFocusMode:function(t){var e=t.commit;v&&(clearTimeout(v),v=null),e("setFocusMode",!1)}}},26:function(t,e,r){"use strict";r.d(e,"b",(function(){return he})),r.d(e,"a",(function(){return D}));r(35),r(17),r(25),r(42),r(43);var n=r(2),o=r(11),c=(r(21),r(20),r(22),r(16),r(36),r(0)),l=r.n(c),h=r(59),f=r(58),d=r(98),v=r.n(d),m=r(45),w=r.n(m),x=r(99),y=r(18),_=r(1);function C(object,t){var e=Object.keys(object);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(object);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(object,t).enumerable}))),e.push.apply(e,r)}return e}function k(t){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?C(Object(source),!0).forEach((function(e){Object(o.a)(t,e,source[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(source)):C(Object(source)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(source,e))}))}return t}var O=function(){return Object(_.m)(r.e(3).then(r.bind(null,424)))},$=function(){return Object(_.m)(Promise.all([r.e(6),r.e(2)]).then(r.bind(null,423)))},j=function(){};l.a.use(x.a);var P={mode:"history",base:"/handbook/",linkActiveClass:"nuxt-link-active",linkExactActiveClass:"nuxt-link-exact-active",scrollBehavior:function(t){if(t.hash){var e=t.hash.substr(1),r=document.getElementById(decodeURIComponent(e))||document.getElementById(e);r&&r.scrollIntoView&&r.scrollIntoView({behavior:"smooth"})}},routes:[{path:"/en",component:O,name:"index___en"},{path:"/zh",component:O,name:"index___zh"},{path:"/zh/*",component:$,name:"all___zh"},{path:"/en/*",component:$,name:"all___en"},{path:"/",component:O,name:"index"},{path:"/*",component:$,name:"all"}],fallback:!1};function E(t,e){var base=e._app&&e._app.basePath||P.base,r=new x.a(k(k({},P),{},{base:base})),n=r.push;r.push=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:j,r=arguments.length>2?arguments[2]:void 0;return n.call(this,t,e,r)};var o=r.resolve.bind(r);return r.resolve=function(t,e,r){return"string"==typeof t&&(t=Object(y.c)(t)),o(t,e,r)},r}var S={name:"NuxtChild",functional:!0,props:{nuxtChildKey:{type:String,default:""},keepAlive:Boolean,keepAliveProps:{type:Object,default:void 0}},render:function(t,e){var r=e.parent,data=e.data,n=e.props,o=r.$createElement;data.nuxtChild=!0;for(var c=r,l=r.$nuxt.nuxt.transitions,h=r.$nuxt.nuxt.defaultTransition,f=0;r;)r.$vnode&&r.$vnode.data.nuxtChild&&f++,r=r.$parent;data.nuxtChildDepth=f;var d=l[f]||h,v={};R.forEach((function(t){void 0!==d[t]&&(v[t]=d[t])}));var m={};L.forEach((function(t){"function"==typeof d[t]&&(m[t]=d[t].bind(c))}));var w=m.beforeEnter;if(m.beforeEnter=function(t){if(window.$nuxt.$nextTick((function(){window.$nuxt.$emit("triggerScroll")})),w)return w.call(c,t)},!1===d.css){var x=m.leave;(!x||x.length<2)&&(m.leave=function(t,e){x&&x.call(c,t),c.$nextTick(e)})}var y=o("routerView",data);return n.keepAlive&&(y=o("keep-alive",{props:n.keepAliveProps},[y])),o("transition",{props:v,on:m},[y])}},R=["name","mode","appear","css","type","duration","enterClass","leaveClass","appearClass","enterActiveClass","enterActiveClass","leaveActiveClass","appearActiveClass","enterToClass","leaveToClass","appearToClass"],L=["beforeEnter","enter","afterEnter","enterCancelled","beforeLeave","leave","afterLeave","leaveCancelled","beforeAppear","appear","afterAppear","appearCancelled"],A={name:"NuxtError",props:{error:{type:Object,default:null}},computed:{statusCode:function(){return this.error&&this.error.statusCode||500},message:function(){return this.error.message||"Error"}},head:function(){return{title:this.message,meta:[{name:"viewport",content:"width=device-width,initial-scale=1.0,minimum-scale=1.0"}]}}},N=(r(172),r(7)),D=Object(N.a)(A,(function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",{staticClass:"__nuxt-error-page"},[r("div",{staticClass:"error"},[r("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg",width:"90",height:"90",fill:"#DBE1EC",viewBox:"0 0 48 48"}},[r("path",{attrs:{d:"M22 30h4v4h-4zm0-16h4v12h-4zm1.99-10C12.94 4 4 12.95 4 24s8.94 20 19.99 20S44 35.05 44 24 35.04 4 23.99 4zM24 40c-8.84 0-16-7.16-16-16S15.16 8 24 8s16 7.16 16 16-7.16 16-16 16z"}})]),t._v(" "),r("div",{staticClass:"title"},[t._v(t._s(t.message))]),t._v(" "),404===t.statusCode?r("p",{staticClass:"description"},[void 0===t.$route?r("a",{staticClass:"error-link",attrs:{href:"/"}}):r("NuxtLink",{staticClass:"error-link",attrs:{to:"/"}},[t._v("Back to the home page")])],1):t._e(),t._v(" "),t._m(0)])])}),[function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",{staticClass:"logo"},[r("a",{attrs:{href:"https://nuxtjs.org",target:"_blank",rel:"noopener"}},[t._v("Nuxt")])])}],!1,null,null,null).exports,T=r(3),I=(r(95),r(96),{name:"Nuxt",components:{NuxtChild:S,NuxtError:D},props:{nuxtChildKey:{type:String,default:void 0},keepAlive:Boolean,keepAliveProps:{type:Object,default:void 0},name:{type:String,default:"default"}},errorCaptured:function(t){this.displayingNuxtError&&(this.errorFromNuxtError=t,this.$forceUpdate())},computed:{routerViewKey:function(){if(void 0!==this.nuxtChildKey||this.$route.matched.length>1)return this.nuxtChildKey||Object(_.c)(this.$route.matched[0].path)(this.$route.params);var t=Object(T.a)(this.$route.matched,1)[0];if(!t)return this.$route.path;var e=t.components.default;if(e&&e.options){var r=e.options;if(r.key)return"function"==typeof r.key?r.key(this.$route):r.key}return/\/$/.test(t.path)?this.$route.path:this.$route.path.replace(/\/$/,"")}},beforeCreate:function(){l.a.util.defineReactive(this,"nuxt",this.$root.$options.nuxt)},render:function(t){var e=this;return this.nuxt.err?this.errorFromNuxtError?(this.$nextTick((function(){return e.errorFromNuxtError=!1})),t("div",{},[t("h2","An error occurred while showing the error page"),t("p","Unfortunately an error occurred and while showing the error page another error occurred"),t("p","Error details: ".concat(this.errorFromNuxtError.toString())),t("nuxt-link",{props:{to:"/"}},"Go back to home")])):(this.displayingNuxtError=!0,this.$nextTick((function(){return e.displayingNuxtError=!1})),t(D,{props:{error:this.nuxt.err}})):t("NuxtChild",{key:this.routerViewKey,props:this.$props})}}),z=(r(23),r(34),r(27),r(28),{name:"NuxtLoading",data:function(){return{percent:0,show:!1,canSucceed:!0,reversed:!1,skipTimerCount:0,rtl:!1,throttle:200,duration:5e3,continuous:!1}},computed:{left:function(){return!(!this.continuous&&!this.rtl)&&(this.rtl?this.reversed?"0px":"auto":this.reversed?"auto":"0px")}},beforeDestroy:function(){this.clear()},methods:{clear:function(){clearInterval(this._timer),clearTimeout(this._throttle),this._timer=null},start:function(){var t=this;return this.clear(),this.percent=0,this.reversed=!1,this.skipTimerCount=0,this.canSucceed=!0,this.throttle?this._throttle=setTimeout((function(){return t.startTimer()}),this.throttle):this.startTimer(),this},set:function(t){return this.show=!0,this.canSucceed=!0,this.percent=Math.min(100,Math.max(0,Math.floor(t))),this},get:function(){return this.percent},increase:function(t){return this.percent=Math.min(100,Math.floor(this.percent+t)),this},decrease:function(t){return this.percent=Math.max(0,Math.floor(this.percent-t)),this},pause:function(){return clearInterval(this._timer),this},resume:function(){return this.startTimer(),this},finish:function(){return this.percent=this.reversed?0:100,this.hide(),this},hide:function(){var t=this;return this.clear(),setTimeout((function(){t.show=!1,t.$nextTick((function(){t.percent=0,t.reversed=!1}))}),500),this},fail:function(t){return this.canSucceed=!1,this},startTimer:function(){var t=this;this.show||(this.show=!0),void 0===this._cut&&(this._cut=1e4/Math.floor(this.duration)),this._timer=setInterval((function(){t.skipTimerCount>0?t.skipTimerCount--:(t.reversed?t.decrease(t._cut):t.increase(t._cut),t.continuous&&(t.percent>=100||t.percent<=0)&&(t.skipTimerCount=1,t.reversed=!t.reversed))}),100)}},render:function(t){var e=t(!1);return this.show&&(e=t("div",{staticClass:"nuxt-progress",class:{"nuxt-progress-notransition":this.skipTimerCount>0,"nuxt-progress-failed":!this.canSucceed},style:{width:this.percent+"%",left:this.left}})),e}}),M=(r(173),Object(N.a)(z,undefined,undefined,!1,null,null,null).exports),B=(r(174),r(133)),F=r.n(B),U=(r(140),r(70),l.a.extend({name:"SidebarNavItem",props:{item:{type:Object},parentPath:{type:String},level:{type:Number}},computed:{link:function(){return"/"+this.$i18n.locale+"/"+this.path}},data:function(){var path=this.parentPath?this.parentPath+"/"+this.item.dir:this.item.dir,t=(this.$route.params.post+"").startsWith(path);return{get path(){return path},collapsed:this.level>=2&&!t}},methods:{toggleCollapsed:function(){this.collapsed=!this.collapsed}}})),G=(r(177),Object(N.a)(U,(function(){var t=this,e=t.$createElement,r=t._self._c||e;return t.item.draft?t._e():r("li",{staticClass:"nav-item"},[t.item.children?t.level>1?r("a",{staticClass:"nav-link",on:{click:t.toggleCollapsed}},[r("span",{staticClass:"title"},[t._v(t._s(t.item.title))]),t._v(" "),r("span",{class:["glyphicon",t.collapsed?"glyphicon-menu-down":"glyphicon-menu-up"]})]):r("div",{staticClass:"nav-link"},[r("span",{staticClass:"title"},[t._v(t._s(t.item.title))])]):r("nuxt-link",{staticClass:"nav-link",attrs:{to:t.link}},[r("span",{staticClass:"title"},[t._v(t._s(t.item.title))])]),t._v(" "),r("ul",{directives:[{name:"show",rawName:"v-show",value:!t.item.draft&&t.item.children&&!t.collapsed,expression:"!item.draft && item.children && !collapsed"}],class:["nav","bd-sidenav","level"+t.level]},t._l(t.item.children,(function(e){return r("SidebarNavItem",{key:e.dir,attrs:{parentPath:t.path,item:e,level:t.level+1}})})),1)],1)}),[],!1,null,null,null).exports),X=l.a.extend({components:{SidebarNavItem:G},data:function(){return{sidebarOpen:!1}},watch:{$route:function(t,e){this.sidebarOpen=!1}},mounted:function(){var t=this.$el.querySelector(".actived");t&&F()(t,{time:0,align:{top:0,topOffset:300},isScrollable:function(t){return!!t.className&&t.className.indexOf("bd-sidebar")>=0}}),docsearch({apiKey:"6ade5f1ff34e94690f9ea38cddcc2f55",indexName:"apache_echarts",inputSelector:"#handbook-search-intput",debug:!1})}}),K=(r(178),Object(N.a)(X,(function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",{class:"bd-sidebar col-sm-3 col-md-2  "+(t.sidebarOpen?"":"closed")},[r("div",{staticClass:"sidebar-search"},[r("input",{attrs:{id:"handbook-search-intput",type:"search",placeholder:"Search Handbook"}}),t._v(" "),r("div",{staticClass:"search-icon"},[r("svg",{staticClass:"h-6 w-6",attrs:{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"}},[r("path",{attrs:{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"}})])])]),t._v(" "),r("div",{staticClass:"bd-docs-nav"},[r("ul",{staticClass:"nav bd-sidenav nav-root level0"},t._l(t.$store.state.posts[this.$i18n.locale],(function(t){return r("SidebarNavItem",{key:t.dir,attrs:{item:t,parentPath:"",level:1}})})),1)]),t._v(" "),r("div",{staticClass:"open-sidebar",on:{click:function(e){t.sidebarOpen=!t.sidebarOpen}}},[t.sidebarOpen?r("svg",{staticClass:"h-6 w-6",attrs:{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"}},[r("path",{attrs:{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 19l-7-7 7-7"}})]):r("svg",{staticClass:"h-6 w-6",attrs:{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"}},[r("path",{attrs:{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 5l7 7-7 7"}})])])])}),[],!1,null,null,null).exports),V=Object(N.a)({},(function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("nav",{staticClass:"navbar navbar-default navbar-fixed-top",attrs:{role:"navigation"}},[r("div",{staticClass:"container-fluid"},[t._m(0),r("div",{staticClass:"collapse navbar-collapse",attrs:{id:"navbar-collapse"}},[r("ul",{staticClass:"nav navbar-nav navbar-left"},[t._m(1),t._m(2),t._m(3),t._m(4),t._m(5),r("li",{attrs:{id:"nav-contribute"}},[t._m(6),r("ul",{staticClass:"dropdown-menu"},[t._m(7),t._m(8),t._m(9),t._m(10),t._m(11),t._m(12),r("li",[r("a",{attrs:{href:"https://github.com/apache/echarts",target:"_blank"}},[t._v("源码（GitHub）"),r("svg",{staticClass:"icon-external-link",attrs:{width:"15px",height:"15px",viewbox:"0 0 100 100",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}},[r("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),r("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})])])]),r("li",[r("a",{attrs:{href:"https://github.com/apache/echarts/issues",target:"_blank"}},[t._v("Issues（GitHub）"),r("svg",{staticClass:"icon-external-link",attrs:{width:"15px",height:"15px",viewbox:"0 0 100 100",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}},[r("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),r("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})])])])])]),r("li",{attrs:{id:"nav-others"}},[t._m(13),r("ul",{staticClass:"dropdown-menu"},[r("li",[r("a",{attrs:{href:"https://www.apache.org/",target:"_blank"}},[t._v("Apache Software Foundation"),r("svg",{staticClass:"icon-external-link",attrs:{width:"15px",height:"15px",viewbox:"0 0 100 100",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}},[r("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),r("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})])])]),t._m(14),r("li",[r("a",{attrs:{href:"https://www.apache.org/licenses/",target:"_blank"}},[t._v("版权"),r("svg",{staticClass:"icon-external-link",attrs:{width:"15px",height:"15px",viewbox:"0 0 100 100",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}},[r("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),r("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})])])]),r("li",[r("a",{attrs:{href:"https://www.apache.org/events/current-event",target:"_blank"}},[t._v("活动"),r("svg",{staticClass:"icon-external-link",attrs:{width:"15px",height:"15px",viewbox:"0 0 100 100",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}},[r("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),r("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})])])]),r("li",[r("a",{attrs:{href:"https://www.apache.org/foundation/sponsorship.html",target:"_blank"}},[t._v("捐赠"),r("svg",{staticClass:"icon-external-link",attrs:{width:"15px",height:"15px",viewbox:"0 0 100 100",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}},[r("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),r("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})])])]),r("li",[r("a",{attrs:{href:"https://www.apache.org/foundation/thanks.html",target:"_blank"}},[t._v("鸣谢"),r("svg",{staticClass:"icon-external-link",attrs:{width:"15px",height:"15px",viewbox:"0 0 100 100",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}},[r("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),r("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})])])])])])]),t._m(15)])])])}),[function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",{staticClass:"navbar-header"},[r("button",{staticClass:"navbar-toggle collapsed",attrs:{type:"button","data-toggle":"collapse","data-target":"#navbar-collapse","aria-expanded":"false"}},[r("span",{staticClass:"sr-only"},[t._v("Toggle navigation")]),r("span",{staticClass:"icon-bar"}),r("span",{staticClass:"icon-bar"}),r("span",{staticClass:"icon-bar"})]),r("a",{staticClass:"navbar-brand",attrs:{href:"https://echarts.apache.org/zh/index.html"}},[r("img",{staticClass:"navbar-logo",attrs:{src:"https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/logo.png?_v_=20200710_1",alt:"echarts logo"}})])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",{attrs:{id:"nav-index"}},[r("a",{attrs:{href:"https://echarts.apache.org/zh/index.html"}},[t._v("首页")])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",{staticClass:"dropdown",attrs:{id:"nav-doc"}},[r("a",{staticClass:"dropdown-toggle",attrs:{href:"#","data-toggle":"dropdown"}},[t._v("文档"),r("b",{staticClass:"caret"})]),r("ul",{staticClass:"dropdown-menu"},[r("li",[r("a",{attrs:{href:"https://echarts.apache.org/zh/feature.html"}},[t._v("特性")])]),r("li",[r("a",{attrs:{href:"https://echarts.apache.org/zh/tutorial.html"}},[t._v("教程")])]),r("li",[r("a",{attrs:{href:"https://echarts.apache.org/zh/api.html"}},[t._v("API")])]),r("li",[r("a",{attrs:{href:"https://echarts.apache.org/zh/option.html"}},[t._v("配置项手册")])]),r("li",[r("a",{attrs:{href:"https://echarts.apache.org/zh/changelog.html"}},[t._v("版本记录")])]),r("li",[r("a",{attrs:{href:"https://echarts.apache.org/zh/faq.html"}},[t._v("常见问题")])]),r("li",[r("a",{attrs:{href:"https://echarts.apache.org/zh/tutorial.html#ECharts%205%20升级指南"}},[t._v("v5 升级指南"),r("span",{staticClass:"new"},[t._v("new")])])])])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",{staticClass:"dropdown",attrs:{id:"nav-download"}},[r("a",{staticClass:"dropdown-toggle",attrs:{href:"#","data-toggle":"dropdown"}},[t._v("下载"),r("b",{staticClass:"caret"})]),r("ul",{staticClass:"dropdown-menu"},[r("li",[r("a",{attrs:{href:"https://echarts.apache.org/zh/download.html"}},[t._v("下载")])]),r("li",[r("a",{attrs:{href:"https://echarts.apache.org/zh/download-theme.html"}},[t._v("主题下载")])]),r("li",[r("a",{attrs:{href:"https://echarts.apache.org/zh/download-extension.html"}},[t._v("扩展下载")])])])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",{attrs:{id:"nav-examples"}},[r("a",{attrs:{href:"https://echarts.apache.org/examples/zh/index.html"}},[t._v("示例")])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",{attrs:{id:"nav-resources"}},[r("a",{staticClass:"dropdown-toggle",attrs:{href:"#","data-toggle":"dropdown"}},[t._v("资源"),r("b",{staticClass:"caret"})]),r("ul",{staticClass:"dropdown-menu"},[r("li",[r("a",{attrs:{href:"https://echarts.apache.org/zh/spreadsheet.html"}},[t._v("表格工具")])]),r("li",[r("a",{attrs:{href:"https://echarts.apache.org/zh/theme-builder.html"}},[t._v("主题构建工具")])]),r("li",[r("a",{attrs:{href:"https://echarts.apache.org/zh/cheat-sheet.html"}},[t._v("术语速查手册")])]),r("li",[r("a",{attrs:{href:"https://echarts.apache.org/zh/resources.html"}},[t._v("更多资源")])])])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("a",{staticClass:"dropdown-toggle",attrs:{href:"#","data-toggle":"dropdown"}},[t._v("社区"),r("b",{staticClass:"caret"})])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",[r("a",{attrs:{href:"https://echarts.apache.org/zh/events.html"}},[t._v("活动")])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",[r("a",{attrs:{href:"https://echarts.apache.org/zh/committers.html"}},[t._v("贡献者列表")])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",[r("a",{attrs:{href:"https://echarts.apache.org/zh/maillist.html"}},[t._v("邮件列表")])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",[r("a",{attrs:{href:"https://echarts.apache.org/zh/contributing.html"}},[t._v("如何贡献")])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",[r("a",{attrs:{href:"https://echarts.apache.org/zh/dependencies.html"}},[t._v("依赖项")])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",[r("a",{attrs:{href:"https://echarts.apache.org/zh/coding-standard.html"}},[t._v("代码规范")])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("a",{staticClass:"dropdown-toggle",attrs:{href:"#","data-toggle":"dropdown"}},[t._v("ASF"),r("b",{staticClass:"caret"})])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",[r("a",{attrs:{href:"https://echarts.apache.org/zh/security.html"}},[t._v("安全")])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("ul",{staticClass:"nav navbar-nav navbar-right"},[r("li",{attrs:{id:"nav-homeen"}},[r("a",{attrs:{href:"javascript:;",onclick:"changeLang('en')"}},[t._v("EN")])])])}],!1,null,null,null).exports,H=Object(N.a)({},(function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("nav",{staticClass:"navbar navbar-default navbar-fixed-top",attrs:{role:"navigation"}},[r("div",{staticClass:"container-fluid"},[t._m(0),r("div",{staticClass:"collapse navbar-collapse",attrs:{id:"navbar-collapse"}},[r("ul",{staticClass:"nav navbar-nav navbar-left"},[t._m(1),t._m(2),t._m(3),t._m(4),t._m(5),r("li",{attrs:{id:"nav-contribute"}},[t._m(6),r("ul",{staticClass:"dropdown-menu"},[t._m(7),t._m(8),t._m(9),t._m(10),t._m(11),t._m(12),r("li",[r("a",{attrs:{href:"https://github.com/apache/echarts",target:"_blank"}},[t._v("Source Code (GitHub)"),r("svg",{staticClass:"icon-external-link",attrs:{width:"15px",height:"15px",viewbox:"0 0 100 100",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}},[r("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),r("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})])])]),r("li",[r("a",{attrs:{href:"https://github.com/apache/echarts/issues",target:"_blank"}},[t._v("Issues (GitHub)"),r("svg",{staticClass:"icon-external-link",attrs:{width:"15px",height:"15px",viewbox:"0 0 100 100",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}},[r("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),r("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})])])])])]),r("li",{attrs:{id:"nav-others"}},[t._m(13),r("ul",{staticClass:"dropdown-menu"},[r("li",[r("a",{attrs:{href:"https://www.apache.org/",target:"_blank"}},[t._v("Apache Software Foundation"),r("svg",{staticClass:"icon-external-link",attrs:{width:"15px",height:"15px",viewbox:"0 0 100 100",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}},[r("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),r("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})])])]),t._m(14),r("li",[r("a",{attrs:{href:"https://www.apache.org/licenses/",target:"_blank"}},[t._v("License"),r("svg",{staticClass:"icon-external-link",attrs:{width:"15px",height:"15px",viewbox:"0 0 100 100",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}},[r("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),r("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})])])]),r("li",[r("a",{attrs:{href:"https://www.apache.org/events/current-event",target:"_blank"}},[t._v("Events"),r("svg",{staticClass:"icon-external-link",attrs:{width:"15px",height:"15px",viewbox:"0 0 100 100",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}},[r("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),r("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})])])]),r("li",[r("a",{attrs:{href:"https://www.apache.org/foundation/sponsorship.html",target:"_blank"}},[t._v("Sponsorship"),r("svg",{staticClass:"icon-external-link",attrs:{width:"15px",height:"15px",viewbox:"0 0 100 100",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}},[r("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),r("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})])])]),r("li",[r("a",{attrs:{href:"https://www.apache.org/foundation/thanks.html",target:"_blank"}},[t._v("Thanks"),r("svg",{staticClass:"icon-external-link",attrs:{width:"15px",height:"15px",viewbox:"0 0 100 100",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}},[r("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),r("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})])])])])])]),t._m(15)])])])}),[function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",{staticClass:"navbar-header"},[r("button",{staticClass:"navbar-toggle collapsed",attrs:{type:"button","data-toggle":"collapse","data-target":"#navbar-collapse","aria-expanded":"false"}},[r("span",{staticClass:"sr-only"},[t._v("Toggle navigation")]),r("span",{staticClass:"icon-bar"}),r("span",{staticClass:"icon-bar"}),r("span",{staticClass:"icon-bar"})]),r("a",{staticClass:"navbar-brand",attrs:{href:"https://echarts.apache.org/en/index.html"}},[r("img",{staticClass:"navbar-logo",attrs:{src:"https://echarts.apache.org/en/images/logo.png",alt:"echarts logo"}})])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",{attrs:{id:"nav-index"}},[r("a",{attrs:{href:"https://echarts.apache.org/en/index.html"}},[t._v("Home")])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",{staticClass:"dropdown",attrs:{id:"nav-doc"}},[r("a",{staticClass:"dropdown-toggle",attrs:{href:"#","data-toggle":"dropdown"}},[t._v("Docs"),r("b",{staticClass:"caret"})]),r("ul",{staticClass:"dropdown-menu"},[r("li",[r("a",{attrs:{href:"https://echarts.apache.org/en/feature.html"}},[t._v("Features")])]),r("li",[r("a",{attrs:{href:"https://echarts.apache.org/en/tutorial.html"}},[t._v("Tutorials")])]),r("li",[r("a",{attrs:{href:"https://echarts.apache.org/en/api.html"}},[t._v("API")])]),r("li",[r("a",{attrs:{href:"https://echarts.apache.org/en/option.html"}},[t._v("Chart Configuration")])]),r("li",[r("a",{attrs:{href:"https://echarts.apache.org/en/changelog.html"}},[t._v("Changelog")])]),r("li",[r("a",{attrs:{href:"https://echarts.apache.org/en/faq.html"}},[t._v("FAQ")])]),r("li",[r("a",{attrs:{href:"https://echarts.apache.org/en/tutorial.html#ECharts%205%20Upgrade%20Guide"}},[t._v("V5 Upgrade Guide"),r("span",{staticClass:"new"},[t._v("new")])])])])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",{staticClass:"dropdown",attrs:{id:"nav-download"}},[r("a",{staticClass:"dropdown-toggle",attrs:{href:"#","data-toggle":"dropdown"}},[t._v("Download"),r("b",{staticClass:"caret"})]),r("ul",{staticClass:"dropdown-menu"},[r("li",[r("a",{attrs:{href:"https://echarts.apache.org/en/download.html"}},[t._v("Download")])]),r("li",[r("a",{attrs:{href:"https://echarts.apache.org/en/download-theme.html"}},[t._v("Download Themes")])]),r("li",[r("a",{attrs:{href:"https://echarts.apache.org/en/download-extension.html"}},[t._v("Download Extensions")])])])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",{attrs:{id:"nav-examples"}},[r("a",{attrs:{href:"https://echarts.apache.org/examples/en/index.html"}},[t._v("Examples")])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",{attrs:{id:"nav-resources"}},[r("a",{staticClass:"dropdown-toggle",attrs:{href:"#","data-toggle":"dropdown"}},[t._v("Resources"),r("b",{staticClass:"caret"})]),r("ul",{staticClass:"dropdown-menu"},[r("li",[r("a",{attrs:{href:"https://echarts.apache.org/en/spreadsheet.html"}},[t._v("Spread Sheet Tool")])]),r("li",[r("a",{attrs:{href:"https://echarts.apache.org/en/theme-builder.html"}},[t._v("Theme Builder")])]),r("li",[r("a",{attrs:{href:"https://echarts.apache.org/en/cheat-sheet.html"}},[t._v("Cheat Sheet")])]),r("li",[r("a",{attrs:{href:"https://echarts.apache.org/en/resources.html"}},[t._v("More Resources")])])])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("a",{staticClass:"dropdown-toggle",attrs:{href:"#","data-toggle":"dropdown"}},[t._v("Community"),r("b",{staticClass:"caret"})])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",[r("a",{attrs:{href:"https://echarts.apache.org/en/events.html"}},[t._v("Events")])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",[r("a",{attrs:{href:"https://echarts.apache.org/en/committers.html"}},[t._v("Committers")])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",[r("a",{attrs:{href:"https://echarts.apache.org/en/maillist.html"}},[t._v("Mailing List")])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",[r("a",{attrs:{href:"https://echarts.apache.org/en/contributing.html"}},[t._v("How to Contribute")])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",[r("a",{attrs:{href:"https://echarts.apache.org/en/dependencies.html"}},[t._v("Dependencies")])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",[r("a",{attrs:{href:"https://echarts.apache.org/en/coding-standard.html"}},[t._v("Code Standard")])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("a",{staticClass:"dropdown-toggle",attrs:{href:"#","data-toggle":"dropdown"}},[t._v("ASF"),r("b",{staticClass:"caret"})])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("li",[r("a",{attrs:{href:"https://echarts.apache.org/en/security.html"}},[t._v("Security")])])},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("ul",{staticClass:"nav navbar-nav navbar-right"},[r("li",{attrs:{id:"nav-homeen"}},[r("a",{attrs:{href:"javascript:;",onclick:"changeLang('zh')"}},[t._v("中文")])])])}],!1,null,null,null).exports,Q=l.a.extend({components:{},mounted:function(){var t=this.$i18n.locale;window.changeLang=function(){window.location.href=window.location.href.replace("/".concat(t,"/"),"zh"===t?"/en/":"/zh/")}},computed:{navComponent:function(){return"zh"===this.$i18n.locale?V:H}}}),Y=(r(179),{components:{Sidebar:K,Navbar:Object(N.a)(Q,(function(){var t=this,e=t.$createElement;return(t._self._c||e)(t.navComponent,{tag:"div"})}),[],!1,null,null,null).exports},mounted:function(){var t=location.hash;location.hash="",location.hash=t},computed:{},methods:{}}),J=(r(180),Object(N.a)(Y,(function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",[r("navbar"),t._v(" "),r("div",{staticClass:"page-main"},[r("div",{staticClass:"page-content handbook-content single-page container-fluid row flex-xl-nowrap"},[r("sidebar"),t._v(" "),r("div",{staticClass:"bd-content col-sm-7 pl-sm-2 col-12"},[r("div",{staticClass:"post-content content"},[r("nuxt")],1)])],1),t._v(" "),r("link",{attrs:{rel:"stylesheet",href:"//cdn.jsdelivr.net/npm/highlight.js@9.12.0/styles/github-gist.min.css"}})])],1)}),[],!1,null,null,null).exports);function W(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(!t)return;if("string"==typeof t)return Z(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);"Object"===r&&t.constructor&&(r=t.constructor.name);if("Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Z(t,e)}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var i=0,n=function(){};return{s:n,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,c=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return c=t.done,t},e:function(t){l=!0,o=t},f:function(){try{c||null==r.return||r.return()}finally{if(l)throw o}}}}function Z(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,r=new Array(e);i<e;i++)r[i]=t[i];return r}var tt={_default:Object(_.s)(J)},et={render:function(t,e){var r=t("NuxtLoading",{ref:"loading"}),n=t(this.layout||"nuxt"),o=t("div",{domProps:{id:"__layout"},key:this.layoutName},[n]),c=t("transition",{props:{name:"layout",mode:"out-in"},on:{beforeEnter:function(t){window.$nuxt.$nextTick((function(){window.$nuxt.$emit("triggerScroll")}))}}},[o]);return t("div",{domProps:{id:"__nuxt"}},[r,c])},data:function(){return{isOnline:!0,layout:null,layoutName:"",nbFetching:0}},beforeCreate:function(){l.a.util.defineReactive(this,"nuxt",this.$options.nuxt)},created:function(){this.$root.$options.$nuxt=this,window.$nuxt=this,this.refreshOnlineStatus(),window.addEventListener("online",this.refreshOnlineStatus),window.addEventListener("offline",this.refreshOnlineStatus),this.error=this.nuxt.error,this.context=this.$options.context},mounted:function(){var t=this;return Object(n.a)(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t.$loading=t.$refs.loading;case 1:case"end":return e.stop()}}),e)})))()},watch:{"nuxt.err":"errorChanged"},computed:{isOffline:function(){return!this.isOnline},isFetching:function(){return this.nbFetching>0},isPreview:function(){return Boolean(this.$options.previewData)}},methods:{refreshOnlineStatus:function(){void 0===window.navigator.onLine?this.isOnline=!0:this.isOnline=window.navigator.onLine},refresh:function(){var t=this;return Object(n.a)(regeneratorRuntime.mark((function e(){var r,n;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if((r=Object(_.h)(t.$route)).length){e.next=3;break}return e.abrupt("return");case 3:return t.$loading.start(),n=r.map((function(e){var p=[];if(e.$options.fetch&&e.$options.fetch.length&&p.push(Object(_.q)(e.$options.fetch,t.context)),e.$fetch)p.push(e.$fetch());else{var r,n=W(Object(_.e)(e.$vnode.componentInstance));try{for(n.s();!(r=n.n()).done;){var component=r.value;p.push(component.$fetch())}}catch(t){n.e(t)}finally{n.f()}}return e.$options.asyncData&&p.push(Object(_.q)(e.$options.asyncData,t.context).then((function(t){for(var r in t)l.a.set(e.$data,r,t[r])}))),Promise.all(p)})),e.prev=5,e.next=8,Promise.all(n);case 8:e.next=15;break;case 10:e.prev=10,e.t0=e.catch(5),t.$loading.fail(e.t0),Object(_.k)(e.t0),t.error(e.t0);case 15:t.$loading.finish();case 16:case"end":return e.stop()}}),e,null,[[5,10]])})))()},errorChanged:function(){if(this.nuxt.err){this.$loading&&(this.$loading.fail&&this.$loading.fail(this.nuxt.err),this.$loading.finish&&this.$loading.finish());var t=(D.options||D).layout;"function"==typeof t&&(t=t(this.context)),this.setLayout(t)}},setLayout:function(t){return t&&tt["_"+t]||(t="default"),this.layoutName=t,this.layout=tt["_"+t],this.layout},loadLayout:function(t){return t&&tt["_"+t]||(t="default"),Promise.resolve(tt["_"+t])}},components:{NuxtLoading:M}};l.a.use(h.a);var nt={};(nt=function(t,e){if((t=t.default||t).commit)throw new Error("[nuxt] ".concat(e," should export a method that returns a Vuex instance."));return"function"!=typeof t&&(t=Object.assign({},t)),function(t,e){if(t.state&&"function"!=typeof t.state){console.warn("'state' should be a method that returns an object in ".concat(e));var r=Object.assign({},t.state);t=Object.assign({},t,{state:function(){return r}})}return t}(t,e)}(r(181),"store/index.js")).modules=nt.modules||{};var at=nt instanceof Function?nt:function(){return new h.a.Store(Object.assign({strict:!1},nt))};var ot=r(138),it=(r(41),r(37),r(71),r(56)),st=function(){var t=Object(n.a)(regeneratorRuntime.mark((function t(e){var r,n,o,c,l,h,f;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(r=e.app,!e.isHMR){t.next=3;break}return t.abrupt("return");case 3:return t.next=5,r.i18n.__onNavigate(e.route);case 5:n=t.sent,o=Object(T.a)(n,3),c=o[0],l=o[1],h=o[2],c&&l&&(f=h?e.route.query:void 0,e.redirect(c,l,f));case 11:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}();it.a.nuxti18n=st;var ct={COMPONENT_OPTIONS_KEY:"nuxtI18n",STRATEGIES:{PREFIX:"prefix",PREFIX_EXCEPT_DEFAULT:"prefix_except_default",PREFIX_AND_DEFAULT:"prefix_and_default",NO_PREFIX:"no_prefix"}},lt=!0,ut=void 0,ht={vueI18n:{fallbackLocale:"en",messages:{en:{inThisPage:"In This Page"},zh:{inThisPage:"本页目录"}}},vueI18nLoader:!1,locales:["en","zh"],defaultLocale:"en",defaultDirection:"ltr",routesNameSeparator:"___",defaultLocaleRouteNameSuffix:"default",strategy:"prefix",lazy:!1,langDir:null,rootRedirect:null,detectBrowserLanguage:{alwaysRedirect:!1,cookieCrossOrigin:!1,cookieDomain:null,cookieKey:"i18n_redirected",cookieSecure:!1,fallbackLocale:"",onlyOnNoPrefix:!1,onlyOnRoot:!0,useCookie:!0},differentDomains:!1,seo:!1,baseUrl:"",vuex:{moduleName:"i18n",syncLocale:!1,syncMessages:!1,syncRouteParams:!0},parsePages:!0,pages:{},skipSettingLocaleOnNavigate:!1,beforeLanguageSwitch:function(){return null},onBeforeLanguageSwitch:function(){},onLanguageSwitched:function(){return null},normalizedLocales:[{code:"en"},{code:"zh"}],localeCodes:["en","zh"]},ft=r(15),pt=(r(97),r(103),r(60),r(122),r(182),r(100)),vt=r.n(pt);function mt(object,t){var e=Object.keys(object);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(object);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(object,t).enumerable}))),e.push.apply(e,r)}return e}function gt(t){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?mt(Object(source),!0).forEach((function(e){Object(o.a)(t,e,source[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(source)):mt(Object(source)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(source,e))}))}return t}function bt(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(!t)return;if("string"==typeof t)return wt(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);"Object"===r&&t.constructor&&(r=t.constructor.name);if("Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return wt(t,e)}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var i=0,n=function(){};return{s:n,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,c=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return c=t.done,t},e:function(t){l=!0,o=t},f:function(){try{c||null==r.return||r.return()}finally{if(l)throw o}}}}function wt(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,r=new Array(e);i<e;i++)r[i]=t[i];return r}function xt(text){return"[nuxt-i18n] ".concat(text)}function yt(t,e){var r,n=[],o=[],c=bt(t);try{for(c.s();!(r=c.n()).done;){var l=r.value,code=l.code,h=l.iso||code;o.push({code:code,iso:h})}}catch(t){c.e(t)}finally{c.f()}var f,d=bt(e.entries());try{var v=function(){var t=Object(T.a)(f.value,2),r=t[0],c=t[1],l=o.find((function(t){return t.iso.toLowerCase()===c.toLowerCase()}));if(l)return n.push({code:l.code,score:1-r/e.length}),"break"};for(d.s();!(f=d.n()).done;){if("break"===v())break}}catch(t){d.e(t)}finally{d.f()}var m,w=bt(e.entries());try{var x=function(){var t=Object(T.a)(m.value,2),r=t[0],c=t[1].split("-")[0].toLowerCase(),l=o.find((function(t){return t.iso.split("-")[0].toLowerCase()===c}));if(l)return n.push({code:l.code,score:.999-r/e.length}),"break"};for(w.s();!(m=w.n()).done;){if("break"===x())break}}catch(t){w.e(t)}finally{w.f()}return n.length>1&&n.sort((function(t,e){return t.score===e.score?e.code.length-t.code.length:e.score-t.score})),n.length?n[0].code:void 0}function _t(t,e,r,n){var o=n.differentDomains,c=n.normalizedLocales;if("function"==typeof t)return t(e);if(o&&r){var l=Ct(r,e.req,{normalizedLocales:c});if(l)return l}return t}function Ct(t,e,r){var n,o=r.normalizedLocales.find((function(e){return e.code===t}));if(o&&o.domain)return n=window.location.protocol.split(":")[0],"".concat(n,"://").concat(o.domain);console.warn(xt("Could not find domain name for locale ".concat(t)))}function kt(t,e){var r;if(r=window.location.host){var n=t.find((function(t){return t.domain===r}));if(n)return n.code}return""}function Ot(t){return new RegExp("^/(".concat(t.join("|"),")(?:/|$)"),"i")}function $t(t,e){var r=e.routesNameSeparator,n=e.defaultLocaleRouteNameSuffix,o="(".concat(t.join("|"),")"),c="(?:".concat(r).concat(n,")?"),l=new RegExp("".concat(r).concat(o).concat(c,"$"),"i"),h=Ot(t);return function(t){if(t.name){var e=t.name.match(l);if(e&&e.length>1)return e[1]}else if(t.path){var r=t.path.match(h);if(r&&r.length>1)return r[1]}return""}}function jt(t,e){var r,n=e.useCookie,o=e.cookieKey,c=e.localeCodes;if(n&&((r=vt.a.get(o))&&c.includes(r)))return r}function Pt(t,e,r){var n=r.useCookie,o=r.cookieDomain,c=r.cookieKey,l=r.cookieSecure,h=r.cookieCrossOrigin;if(n){var f=new Date,d={expires:new Date(f.setDate(f.getDate()+365)),path:"/",sameSite:h?"none":"lax",secure:h||l};o&&(d.domain=o),vt.a.set(c,t,d)}}function Et(t,e,r){var n={namespaced:!0,state:function(){return gt(gt(gt({},e.syncLocale?{locale:""}:{}),e.syncMessages?{messages:{}}:{}),e.syncRouteParams?{routeParams:{}}:{})},actions:gt(gt(gt({},e.syncLocale?{setLocale:function(t,e){(0,t.commit)("setLocale",e)}}:{}),e.syncMessages?{setMessages:function(t,e){(0,t.commit)("setMessages",e)}}:{}),e.syncRouteParams?{setRouteParams:function(t,e){(0,t.commit)("setRouteParams",e)}}:{}),mutations:gt(gt(gt({},e.syncLocale?{setLocale:function(t,e){t.locale=e}}:{}),e.syncMessages?{setMessages:function(t,e){t.messages=e}}:{}),e.syncRouteParams?{setRouteParams:function(t,e){t.routeParams=e}}:{}),getters:gt({},e.syncRouteParams?{localeRouteParams:function(t){var e=t.routeParams;return function(t){return e&&e[t]||{}}}}:{})};t.registerModule(e.moduleName,n,{preserveState:!!t.state[e.moduleName]})}function St(t){return Rt.apply(this,arguments)}function Rt(){return(Rt=Object(n.a)(regeneratorRuntime.mark((function t(e){var r,n,o,c=arguments;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(r=c.length>1&&void 0!==c[1]?c[1]:null,n=c.length>2&&void 0!==c[2]?c[2]:null,!(o=c.length>3?c[3]:void 0)||!e){t.next=10;break}if(null===r||!o.syncLocale){t.next=7;break}return t.next=7,e.dispatch(o.moduleName+"/setLocale",r);case 7:if(null===n||!o.syncMessages){t.next=10;break}return t.next=10,e.dispatch(o.moduleName+"/setMessages",n);case 10:case"end":return t.stop()}}),t)})))).apply(this,arguments)}var Lt=["params"];function At(object,t){var e=Object.keys(object);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(object);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(object,t).enumerable}))),e.push.apply(e,r)}return e}function Nt(t){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?At(Object(source),!0).forEach((function(e){Object(o.a)(t,e,source[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(source)):At(Object(source)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(source,e))}))}return t}function Dt(t,e){var r=zt.call(this,t,e);return r?r.route.fullPath:""}function Tt(t,e){var r=zt.call(this,t,e);return r?r.route:void 0}function It(t,e){var r=zt.call(this,t,e);return r?r.location:void 0}function zt(t,e){if(t){var r=this.i18n;if(e=e||r.locale){"string"==typeof t&&(t="/"===t[0]?{path:t}:{name:t});var n=Object.assign({},t);if(n.path&&!n.name){var o=this.router.resolve(n).route,c=this.getRouteBaseName(o);if(c)n={name:Ft(c,e),params:o.params,query:o.query,hash:o.hash};else!(e===ht.defaultLocale&&[ct.STRATEGIES.PREFIX_EXCEPT_DEFAULT,ct.STRATEGIES.PREFIX_AND_DEFAULT].includes(ht.strategy)||ht.strategy===ct.STRATEGIES.NO_PREFIX||r.differentDomains)&&(n.path="/".concat(e).concat(n.path)),n.path=n.path.replace(/\/+$/,"")+(ut?"/":"")||"/"}else{n.name||n.path||(n.name=this.getRouteBaseName()),n.name=Ft(n.name,e);var l=n.params;l&&void 0===l[0]&&l.pathMatch&&(l[0]=l.pathMatch)}var h=this.router.resolve(n);return h.route.name?h:this.router.resolve(t)}}}function Mt(t){var e=this.getRouteBaseName();if(!e)return"";var r=this.i18n,n=this.route,o=this.store,c=n.params,l=Object(ot.a)(n,Lt),h={};ht.vuex&&ht.vuex.syncRouteParams&&o&&(h=o.getters["".concat(ht.vuex.moduleName,"/localeRouteParams")](t));var f=Object.assign({},l,{name:e,params:Nt(Nt(Nt({},c),h),{},{0:c.pathMatch})}),path=this.localePath(f,t);if(r.differentDomains){var d={differentDomains:r.differentDomains,normalizedLocales:ht.normalizedLocales},v=Ct(t,this.req,d);v&&(path=v+path)}return path}function Bt(t){var e=void 0!==t?t:this.route;if(e&&e.name)return e.name.split(ht.routesNameSeparator)[0]}function Ft(t,e){var r=t+(ht.strategy===ct.STRATEGIES.NO_PREFIX?"":ht.routesNameSeparator+e);return e===ht.defaultLocale&&ht.strategy===ct.STRATEGIES.PREFIX_AND_DEFAULT&&(r+=ht.routesNameSeparator+ht.defaultLocaleRouteNameSuffix),r}var Ut=function(t){return function(){var e={getRouteBaseName:this.getRouteBaseName,i18n:this.$i18n,localePath:this.localePath,localeRoute:this.localeRoute,localeLocation:this.localeLocation,req:null,route:this.$route,router:this.$router,store:this.$store};return t.call.apply(t,[e].concat(Array.prototype.slice.call(arguments)))}},qt=function(t,e){return function(){var r=t.app,n=(t.req,t.route),o=t.store,c={getRouteBaseName:r.getRouteBaseName,i18n:r.i18n,localePath:r.localePath,localeLocation:r.localeLocation,localeRoute:r.localeRoute,req:null,route:n,router:r.router,store:o};return e.call.apply(e,[c].concat(Array.prototype.slice.call(arguments)))}},Gt={install:function(t){t.mixin({methods:{localePath:Ut(Dt),localeRoute:Ut(Tt),localeLocation:Ut(It),switchLocalePath:Ut(Mt),getRouteBaseName:Ut(Bt)}})}},Xt=function(t){l.a.use(Gt);var e=t.app,r=t.store;e.localePath=t.localePath=qt(t,Dt),e.localeRoute=t.localeRoute=qt(t,Tt),e.localeLocation=t.localeLocation=qt(t,It),e.switchLocalePath=t.switchLocalePath=qt(t,Mt),e.getRouteBaseName=t.getRouteBaseName=qt(t,Bt),r&&(r.localePath=e.localePath,r.localeRoute=e.localeRoute,r.localeLocation=e.localeLocation,r.switchLocalePath=e.switchLocalePath,r.getRouteBaseName=e.getRouteBaseName)},Kt=r(101),Vt=r(137);r(183);function Ht(object,t){var e=Object.keys(object);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(object);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(object,t).enumerable}))),e.push.apply(e,r)}return e}function Qt(t){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?Ht(Object(source),!0).forEach((function(e){Object(o.a)(t,e,source[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(source)):Ht(Object(source)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(source,e))}))}return t}function Yt(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(!t)return;if("string"==typeof t)return Jt(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);"Object"===r&&t.constructor&&(r=t.constructor.name);if("Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Jt(t,e)}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var i=0,n=function(){};return{s:n,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,c=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return c=t.done,t},e:function(t){l=!0,o=t},f:function(){try{c||null==r.return||r.return()}finally{if(l)throw o}}}}function Jt(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,r=new Array(e);i<e;i++)r[i]=t[i];return r}function Wt(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.addDirAttribute,r=void 0===e||e,n=t.addSeoAttributes,o=void 0!==n&&n;if(!this.$i18n)return{};var c={htmlAttrs:{},link:[],meta:[]},l=this.$i18n.localeProperties,h=l.iso,d=l.dir||ht.defaultDirection;if(r&&(c.htmlAttrs.dir=d),o&&(f.a.hasMetaInfo?f.a.hasMetaInfo(this):this._hasMetaInfo)&&this.$i18n.locale&&this.$i18n.locales&&!1!==this.$options[ct.COMPONENT_OPTIONS_KEY]&&(!this.$options[ct.COMPONENT_OPTIONS_KEY]||!1!==this.$options[ct.COMPONENT_OPTIONS_KEY].seo)){h&&(c.htmlAttrs.lang=h);var v=this.$i18n.locales;m.bind(this)(v,this.$i18n.__baseUrl,c.link),w.bind(this)(this.$i18n.__baseUrl,c.link),x.bind(this)(l,h,c.meta),y.bind(this)(v,h,c.meta)}function m(t,e,link){if(ht.strategy!==ct.STRATEGIES.NO_PREFIX){var r,n=new Map,o=Yt(t);try{for(o.s();!(r=o.n()).done;){var c=r.value,l=c.iso;if(l){var h=l.split("-"),f=Object(T.a)(h,2),d=f[0],v=f[1];d&&v&&(c.isCatchallLocale||!n.has(d))&&n.set(d,c),n.set(l,c)}else console.warn(xt("Locale ISO code is required to generate alternate link"))}}catch(t){o.e(t)}finally{o.f()}var m,w=Yt(n.entries());try{for(w.s();!(m=w.n()).done;){var x=Object(T.a)(m.value,2),y=x[0],_=x[1],k=this.switchLocalePath(_.code);k&&link.push({hid:"i18n-alt-".concat(y),rel:"alternate",href:C(k,e),hreflang:y})}}catch(t){w.e(t)}finally{w.f()}if(ht.defaultLocale){var O=this.switchLocalePath(ht.defaultLocale);O&&link.push({hid:"i18n-xd",rel:"alternate",href:C(O,e),hreflang:"x-default"})}}}function w(t,link){var e=this.localeRoute(Qt(Qt({},this.$route),{},{name:this.getRouteBaseName()})),r=e?e.path:null;r&&link.push({hid:"i18n-can",rel:"canonical",href:C(r,t)})}function x(t,e,meta){t&&e&&meta.push({hid:"i18n-og",property:"og:locale",content:_(e)})}function y(t,e,meta){var r=t.filter((function(t){var r=t.iso;return r&&r!==e}));if(r.length){var n=r.map((function(t){return{hid:"i18n-og-alt-".concat(t.iso),property:"og:locale:alternate",content:_(t.iso)}}));meta.push.apply(meta,Object(Vt.a)(n))}}function _(t){return(t||"").replace(/-/g,"_")}function C(t,e){return t.match(/^https?:\/\//)?t:e+t}return c}function Zt(){return Wt.call(this,{addDirAttribute:!1,addSeoAttributes:!0})}function te(t,e){return ee.apply(this,arguments)}function ee(){return(ee=Object(n.a)(regeneratorRuntime.mark((function t(e,r){var n,o,c;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:n=e.app,(o=n.i18n).loadedLanguages||(o.loadedLanguages=[]),o.loadedLanguages.includes(r)||((c=ht.normalizedLocales.find((function(t){return t.code===r})))?c.file||console.warn(xt("Could not find lang file for locale ".concat(r))):console.warn(xt('Attempted to load messages for non-existant locale code "'.concat(r,'"'))));case 4:case"end":return t.stop()}}),t)})))).apply(this,arguments)}var re=r(46);function ne(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(!t)return;if("string"==typeof t)return ae(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);"Object"===r&&t.constructor&&(r=t.constructor.name);if("Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return ae(t,e)}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var i=0,n=function(){};return{s:n,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,c=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return c=t.done,t},e:function(t){l=!0,o=t},f:function(){try{c||null==r.return||r.return()}finally{if(l)throw o}}}}function ae(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,r=new Array(e);i<e;i++)r[i]=t[i];return r}l.a.use(Kt.a);var oe=function(){var t=Object(n.a)(regeneratorRuntime.mark((function t(e){var r,o,c,h,f,d,v,m,w,x,_,C,k,O,$,j,P,E,S,R,L,A,N,D,I,z,M,B,F,U,G,X,K,V,H,Q,Y,J;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:r=e.app,o=e.route,c=e.store,h=e.req,e.res,f=e.redirect,ht.vuex&&c&&Et(c,ht.vuex,ht.localeCodes),d=ht.lazy,d&&(!0===d||!0!==d.skipNuxtState),t.next=9;break;case 7:v=t.sent.default,e.beforeNuxtRender((function(t){var e=t.nuxtState,n={},o=r.i18n,c=o.fallbackLocale,l=o.locale;if(l&&l!==c){var h=r.i18n._getMessages()[l];if(h)try{v(h),n[l]=h}catch(t){}}e.__i18n={langs:n}}));case 9:if(m=ht.detectBrowserLanguage,w=m.alwaysRedirect,x=m.fallbackLocale,_=m.onlyOnNoPrefix,C=m.onlyOnRoot,k=m.useCookie,O=m.cookieKey,$=m.cookieDomain,j=m.cookieSecure,P=m.cookieCrossOrigin,E=function(){var t=Object(n.a)(regeneratorRuntime.mark((function t(n){var o,l,h,d,v,m,w,x,y,_=arguments;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(o=_.length>1&&void 0!==_[1]?_[1]:{},l=o.initialSetup,h=void 0!==l&&l,n){t.next=3;break}return t.abrupt("return");case 3:if(h||!r.i18n.differentDomains){t.next=5;break}return t.abrupt("return");case 5:if(d=r.i18n.locale,n!==d){t.next=8;break}return t.abrupt("return");case 8:if(!(v=r.i18n.onBeforeLanguageSwitch(d,n,h,e))||!r.i18n.localeCodes.includes(v)){t.next=13;break}if(v!==d){t.next=12;break}return t.abrupt("return");case 12:n=v;case 13:if(h||r.i18n.beforeLanguageSwitch(d,n),k&&r.i18n.setLocaleCookie(n),!ht.langDir){t.next=29;break}if(m=r.i18n.fallbackLocale,!ht.lazy){t.next=27;break}if(!m){t.next=23;break}return w=[],Array.isArray(m)?w=m.map((function(t){return te(e,t)})):"object"===Object(ft.a)(m)?(m[n]&&(w=w.concat(m[n].map((function(t){return te(e,t)})))),m.default&&(w=w.concat(m.default.map((function(t){return te(e,t)}))))):n!==m&&w.push(te(e,m)),t.next=23,Promise.all(w);case 23:return t.next=25,te(e,n);case 25:t.next=29;break;case 27:return t.next=29,Promise.all(ht.localeCodes.map((function(t){return te(e,t)})));case 29:if(r.i18n.locale=n,r.i18n.localeProperties=Object(re.a)(ht.locales.find((function(t){return t.code===n}))||{code:n}),!ht.vuex){t.next=34;break}return t.next=34,St(c,n,r.i18n.getLocaleMessage(n),ht.vuex);case 34:x=e.route,y=R(x,n),h?r.i18n.__redirect=y:(r.i18n.onLanguageSwitched(d,n),y&&f(y));case 37:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),S=$t(ht.localeCodes,{routesNameSeparator:ht.routesNameSeparator,defaultLocaleRouteNameSuffix:ht.defaultLocaleRouteNameSuffix}),R=function(t,e){if(!e||r.i18n.differentDomains||ht.strategy===ct.STRATEGIES.NO_PREFIX)return"";if(S(t)===e&&(!C&&!_||e!==ht.defaultLocale||ht.strategy!==ct.STRATEGIES.PREFIX_AND_DEFAULT))return"";var n=r.switchLocalePath(e);return n||(n=r.localePath(t.fullPath,e)),!n||n===t.fullPath||n.startsWith("//")?"":n},L=function(){var t=Object(n.a)(regeneratorRuntime.mark((function t(n){var o,path,c,l,h;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if("/"!==n.path||!ht.rootRedirect){t.next=5;break}return o=302,path=ht.rootRedirect,"string"!=typeof ht.rootRedirect&&(o=ht.rootRedirect.statusCode,path=ht.rootRedirect.path),t.abrupt("return",[o,"/".concat(path),!0]);case 5:if(!(c=r.i18n.__redirect)){t.next=9;break}return r.i18n.__redirect=null,t.abrupt("return",[302,c]);case 9:if(l={differentDomains:ht.differentDomains,normalizedLocales:ht.normalizedLocales},r.i18n.__baseUrl=_t(ht.baseUrl,e,r.i18n.locale,l),h=ht.detectBrowserLanguage&&I(n)||S(n)||r.i18n.locale||r.i18n.defaultLocale||"",!ht.skipSettingLocaleOnNavigate){t.next=17;break}r.i18n.__pendingLocale=h,r.i18n.__pendingLocalePromise=new Promise((function(t){r.i18n.__resolvePendingLocalePromise=t})),t.next=19;break;case 17:return t.next=19,r.i18n.setLocale(h);case 19:return t.abrupt("return",[null,null]);case 20:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),A=function(){var t=Object(n.a)(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(r.i18n.__pendingLocale){t.next=2;break}return t.abrupt("return");case 2:return t.next=4,r.i18n.setLocale(r.i18n.__pendingLocale);case 4:r.i18n.__resolvePendingLocalePromise(""),r.i18n.__pendingLocale=null;case 6:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),N=function(){var t=Object(n.a)(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!r.i18n.__pendingLocale){t.next=3;break}return t.next=3,r.i18n.__pendingLocalePromise;case 3:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),D=function(){return"undefined"!=typeof navigator&&navigator.languages?yt(ht.normalizedLocales,navigator.languages):h&&void 0!==h.headers["accept-language"]?yt(ht.normalizedLocales,h.headers["accept-language"].split(",").map((function(t){return t.split(";")[0]}))):void 0},I=function(t){if(ht.strategy!==ct.STRATEGIES.NO_PREFIX)if(C){if("/"!==t.path)return""}else if(_&&!w&&t.path.match(Ot(ht.localeCodes)))return"";var e;k&&(e=r.i18n.getLocaleCookie())||(e=D());var n=e||x;return!n||k&&!w&&r.i18n.getLocaleCookie()||n===r.i18n.locale?"":n},z=function(t){t.locales=Object(re.a)(ht.locales),t.localeCodes=Object(re.a)(ht.localeCodes),t.localeProperties=Object(re.a)(ht.normalizedLocales.find((function(e){return e.code===t.locale}))||{code:t.locale}),t.defaultLocale=ht.defaultLocale,t.differentDomains=ht.differentDomains,t.beforeLanguageSwitch=ht.beforeLanguageSwitch,t.onBeforeLanguageSwitch=ht.onBeforeLanguageSwitch,t.onLanguageSwitched=ht.onLanguageSwitched,t.setLocaleCookie=function(t){return Pt(t,0,{useCookie:k,cookieDomain:$,cookieKey:O,cookieSecure:j,cookieCrossOrigin:P})},t.getLocaleCookie=function(){return jt(0,{useCookie:k,cookieKey:O,localeCodes:ht.localeCodes})},t.setLocale=function(t){return E(t)},t.getBrowserLocale=function(){return D()},t.finalizePendingLocaleChange=A,t.waitForPendingLocaleChange=N,t.__baseUrl=r.i18n.__baseUrl,t.__pendingLocale=r.i18n.__pendingLocale,t.__pendingLocalePromise=r.i18n.__pendingLocalePromise,t.__resolvePendingLocalePromise=r.i18n.__resolvePendingLocalePromise},"function"!=typeof ht.vueI18n){t.next=25;break}return t.next=22,ht.vueI18n(e);case 22:t.t0=t.sent,t.next=26;break;case 25:t.t0=Object(re.a)(ht.vueI18n);case 26:if((M=t.t0).componentInstanceCreatedListener=z,r.i18n=e.i18n=new Kt.a(M),r.i18n.locale="",r.i18n.fallbackLocale=M.fallbackLocale||"",z(r.i18n),B={differentDomains:ht.differentDomains,normalizedLocales:ht.normalizedLocales},r.i18n.__baseUrl=_t(ht.baseUrl,e,"",B),r.i18n.__onNavigate=L,l.a.prototype.$nuxtI18nSeo=Zt,l.a.prototype.$nuxtI18nHead=Wt,!c){t.next=58;break}if(c.$i18n=r.i18n,!c.state.localeDomains){t.next=58;break}F=ne(r.i18n.locales),t.prev=41,F.s();case 43:if((U=F.n()).done){t.next=50;break}if("string"!=typeof(G=U.value)){t.next=47;break}return t.abrupt("continue",48);case 47:G.domain=c.state.localeDomains[G.code];case 48:t.next=43;break;case 50:t.next=55;break;case 52:t.prev=52,t.t1=t.catch(41),F.e(t.t1);case 55:return t.prev=55,F.f(),t.finish(55);case 58:return(X=ht.detectBrowserLanguage?I(o):"")||((K=ht.vuex)&&K.syncLocale&&c&&""!==c.state[K.moduleName].locale?X=c.state[K.moduleName].locale:r.i18n.differentDomains?(V=kt(ht.normalizedLocales),X=V):ht.strategy!==ct.STRATEGIES.NO_PREFIX?(H=S(o),X=H):k&&(X=r.i18n.getLocaleCookie())),X||(X=r.i18n.defaultLocale||""),t.next=63,E(X,{initialSetup:!0});case 63:if(!lt){t.next=71;break}return t.next=66,L(e.route);case 66:Q=t.sent,Y=Object(T.a)(Q,2),Y[0],(J=Y[1])&&location.assign(Object(y.b)(e.base,J));case 71:case"end":return t.stop()}}),t,null,[[41,52,55,58]])})));return function(e){return t.apply(this,arguments)}}();function ie(object,t){var e=Object.keys(object);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(object);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(object,t).enumerable}))),e.push.apply(e,r)}return e}function se(t){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?ie(Object(source),!0).forEach((function(e){Object(o.a)(t,e,source[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(source)):ie(Object(source)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(source,e))}))}return t}l.a.component(v.a.name,v.a),l.a.component(w.a.name,se(se({},w.a),{},{render:function(t,e){return w.a._warned||(w.a._warned=!0,console.warn("<no-ssr> has been deprecated and will be removed in Nuxt 3, please use <client-only> instead")),w.a.render(t,e)}})),l.a.component(S.name,S),l.a.component("NChild",S),l.a.component(I.name,I),Object.defineProperty(l.a.prototype,"$nuxt",{get:function(){var t=this.$root.$options.$nuxt;return t||"undefined"==typeof window?t:window.$nuxt},configurable:!0}),l.a.use(f.a,{keyName:"head",attribute:"data-n-head",ssrAttribute:"data-n-head-ssr",tagIDKeyName:"hid"});var ce={name:"page",mode:"out-in",appear:!1,appearClass:"appear",appearActiveClass:"appear-active",appearToClass:"appear-to"},le=h.a.Store.prototype.registerModule;function ue(path,t){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=Array.isArray(path)?!!path.reduce((function(t,path){return t&&t[path]}),this.state):path in this.state;return le.call(this,path,t,se({preserveState:r},e))}function he(t){return fe.apply(this,arguments)}function fe(){return(fe=Object(n.a)(regeneratorRuntime.mark((function t(e){var r,o,c,h,f,d,path,v,m=arguments;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return v=function(t,e){if(!t)throw new Error("inject(key, value) has no key provided");if(void 0===e)throw new Error("inject('".concat(t,"', value) has no value provided"));h[t="$"+t]=e,h.context[t]||(h.context[t]=e),c[t]=h[t];var r="__nuxt_"+t+"_installed__";l.a[r]||(l.a[r]=!0,l.a.use((function(){Object.prototype.hasOwnProperty.call(l.a.prototype,t)||Object.defineProperty(l.a.prototype,t,{get:function(){return this.$root.$options[t]}})})))},r=m.length>1&&void 0!==m[1]?m[1]:{},t.next=4,E(0,r);case 4:return o=t.sent,(c=at(e)).$router=o,c.registerModule=ue,h=se({head:{title:"Handbook - Apache ECharts",meta:[{charset:"utf-8"},{name:"viewport",content:"width=device-width, initial-scale=1"},{hid:"description",name:"description",content:"Apache ECharts Handbook"}],link:[{rel:"icon",type:"image/x-icon",href:"https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/favicon.png"}],style:[],script:[]},store:c,router:o,nuxt:{defaultTransition:ce,transitions:[ce],setTransitions:function(t){return Array.isArray(t)||(t=[t]),t=t.map((function(t){return t=t?"string"==typeof t?Object.assign({},ce,{name:t}):Object.assign({},ce,t):ce})),this.$options.nuxt.transitions=t,t},err:null,dateErr:null,error:function(t){t=t||null,h.context._errored=Boolean(t),t=t?Object(_.p)(t):null;var r=h.nuxt;return this&&(r=this.nuxt||this.$options.nuxt),r.dateErr=Date.now(),r.err=t,e&&(e.nuxt.error=t),t}}},et),c.app=h,f=e?e.next:function(t){return h.router.push(t)},e?d=o.resolve(e.url).route:(path=Object(_.f)(o.options.base,o.options.mode),d=o.resolve(path).route),t.next=14,Object(_.t)(h,{store:c,route:d,next:f,error:h.nuxt.error.bind(h),payload:e?e.payload:void 0,req:e?e.req:void 0,res:e?e.res:void 0,beforeRenderFns:e?e.beforeRenderFns:void 0,ssrContext:e});case 14:return v("config",r),window.__NUXT__&&window.__NUXT__.state&&c.replaceState(window.__NUXT__.state),h.context.enablePreview=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};h.previewData=Object.assign({},t),v("preview",t)},t.next=20,Xt(h.context);case 20:if("function"!=typeof oe){t.next=23;break}return t.next=23,oe(h.context,v);case 23:return h.context.enablePreview=function(){console.warn("You cannot call enablePreview() outside a plugin.")},t.next=26,new Promise((function(t,e){o.replace(h.context.route.fullPath,t,(function(r){if(!r._isRouter)return e(r);if(2!==r.type)return t();var c=o.afterEach(function(){var e=Object(n.a)(regeneratorRuntime.mark((function e(r,n){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=3,Object(_.j)(r);case 3:h.context.route=e.sent,h.context.params=r.params||{},h.context.query=r.query||{},c(),t();case 8:case"end":return e.stop()}}),e)})));return function(t,r){return e.apply(this,arguments)}}())}))}));case 26:return t.abrupt("return",{store:c,app:h,router:o});case 27:case"end":return t.stop()}}),t)})))).apply(this,arguments)}},56:function(t,e,r){"use strict";e.a={}},73:function(t,e,r){"use strict";r(41),r(37),r(22),r(25),r(16),r(23),r(20),r(17),r(34),r(27),r(28);var n=r(0),o=r.n(n);function c(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(!t)return;if("string"==typeof t)return l(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);"Object"===r&&t.constructor&&(r=t.constructor.name);if("Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return l(t,e)}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var i=0,n=function(){};return{s:n,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,c=!0,h=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return c=t.done,t},e:function(t){h=!0,o=t},f:function(){try{c||null==r.return||r.return()}finally{if(h)throw o}}}}function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,r=new Array(e);i<e;i++)r[i]=t[i];return r}var h=window.requestIdleCallback||function(t){var e=Date.now();return setTimeout((function(){t({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-e))}})}),1)},f=window.cancelIdleCallback||function(t){clearTimeout(t)},d=window.IntersectionObserver&&new window.IntersectionObserver((function(t){t.forEach((function(t){var e=t.intersectionRatio,link=t.target;e<=0||!link.__prefetch||link.__prefetch()}))}));e.a={name:"NuxtLink",extends:o.a.component("RouterLink"),props:{prefetch:{type:Boolean,default:!0},noPrefetch:{type:Boolean,default:!1}},mounted:function(){this.prefetch&&!this.noPrefetch&&(this.handleId=h(this.observe,{timeout:2e3}))},beforeDestroy:function(){f(this.handleId),this.__observed&&(d.unobserve(this.$el),delete this.$el.__prefetch)},methods:{observe:function(){d&&this.shouldPrefetch()&&(this.$el.__prefetch=this.prefetchLink.bind(this),d.observe(this.$el),this.__observed=!0)},shouldPrefetch:function(){return this.getPrefetchComponents().length>0},canPrefetch:function(){var t=navigator.connection;return!(this.$nuxt.isOffline||t&&((t.effectiveType||"").includes("2g")||t.saveData))},getPrefetchComponents:function(){return this.$router.resolve(this.to,this.$route,this.append).resolved.matched.map((function(t){return t.components.default})).filter((function(t){return"function"==typeof t&&!t.options&&!t.__prefetched}))},prefetchLink:function(){if(this.canPrefetch()){d.unobserve(this.$el);var t,e=c(this.getPrefetchComponents());try{for(e.s();!(t=e.n()).done;){var r=t.value,n=r();n instanceof Promise&&n.catch((function(){})),r.__prefetched=!0}}catch(t){e.e(t)}finally{e.f()}}}}}}},[[141,4,1,5]]]);