!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("Vue"),require("CodeMirror"),require("beautifier")):"function"==typeof define&&define.amd?define(["Vue","CodeMirror","beautifier"],t):"object"==typeof exports?exports.echartsDoc=t(require("Vue"),require("CodeMirror"),require("beautifier")):e.echartsDoc=t(e.Vue,e.CodeMirror,e.beautifier)}(window,(function(e,t,n){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)n.d(r,a,function(t){return e[t]}.bind(null,a));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=52)}([function(t,n){t.exports=e},function(e,t){function n(e,t,n){e.self===e?e.scrollTo(t,n):(e.scrollLeft=t,e.scrollTop=n)}function r(e){var t=e._scrollSettings;if(t){var a=t.maxSynchronousAlignments,i=function(e,t){var n,r,a,i,o,s,l,c=e.align,u=e.target.getBoundingClientRect(),h=c&&null!=c.left?c.left:.5,p=c&&null!=c.top?c.top:.5,f=c&&null!=c.leftOffset?c.leftOffset:0,d=c&&null!=c.topOffset?c.topOffset:0,m=h,v=p;if(e.isWindow(t))s=Math.min(u.width,t.innerWidth),l=Math.min(u.height,t.innerHeight),r=u.left+t.pageXOffset-t.innerWidth*m+s*m,a=u.top+t.pageYOffset-t.innerHeight*v+l*v,a-=d,i=(r-=f)-t.pageXOffset,o=a-t.pageYOffset;else{s=u.width,l=u.height,n=t.getBoundingClientRect();var g=u.left-(n.left-t.scrollLeft),_=u.top-(n.top-t.scrollTop);r=g+s*m-t.clientWidth*m,a=_+l*v-t.clientHeight*v,r-=f,a-=d,r=Math.max(Math.min(r,t.scrollWidth-t.clientWidth),0),a=Math.max(Math.min(a,t.scrollHeight-t.clientHeight),0),i=r-t.scrollLeft,o=a-t.scrollTop}return{x:r,y:a,differenceX:i,differenceY:o}}(t,e),o=Date.now()-t.startTime,s=Math.min(1/t.time*o,1);if(t.endIterations>=a)return n(e,i.x,i.y),e._scrollSettings=null,t.end("complete");var l=1-t.ease(s);if(n(e,i.x-i.differenceX*l,i.y-i.differenceY*l),o>=t.time)return t.endIterations++,r(e);!function(e){if("requestAnimationFrame"in window)return window.requestAnimationFrame(e);setTimeout(e,16)}(r.bind(null,e))}}function a(e){return e.self===e}function i(e,t,n,i){var o,s=!t._scrollSettings,l=t._scrollSettings,c=Date.now(),u={passive:!0};function h(e){t._scrollSettings=null,t.parentElement&&t.parentElement._scrollSettings&&t.parentElement._scrollSettings.end(e),n.debug&&console.log("Scrolling ended with type",e,"for",t),i(e),o&&(t.removeEventListener("touchstart",o,u),t.removeEventListener("wheel",o,u))}l&&l.end("canceled");var p=n.maxSynchronousAlignments;null==p&&(p=3),t._scrollSettings={startTime:c,endIterations:0,target:e,time:n.time,ease:n.ease,align:n.align,isWindow:n.isWindow||a,maxSynchronousAlignments:p,end:h},"cancellable"in n&&!n.cancellable||(o=h.bind(null,"canceled"),t.addEventListener("touchstart",o,u),t.addEventListener("wheel",o,u)),s&&r(t)}function o(e){return"pageXOffset"in e||(e.scrollHeight!==e.clientHeight||e.scrollWidth!==e.clientWidth)&&"hidden"!==getComputedStyle(e).overflow}function s(){return!0}function l(e){if(e.assignedSlot)return l(e.assignedSlot);if(e.parentElement)return"BODY"===e.parentElement.tagName?e.parentElement.ownerDocument.defaultView||e.parentElement.ownerDocument.ownerWindow:e.parentElement;if(e.getRootNode){var t=e.getRootNode();if(11===t.nodeType)return t.host}}e.exports=function(e,t,n){if(e){"function"==typeof t&&(n=t,t=null),t||(t={}),t.time=isNaN(t.time)?1e3:t.time,t.ease=t.ease||function(e){return 1-Math.pow(1-e,e/2)};var r=l(e),a=1,c=t.validTarget||s,u=t.isScrollable;for(t.debug&&(console.log("About to scroll to",e),r||console.error("Target did not have a parent, is it mounted in the DOM?"));r;)if(t.debug&&console.log("Scrolling parent node",r),c(r,a)&&(u?u(r,o):o(r))&&(a++,i(e,r,t,h)),!(r=l(r))){h("complete");break}}function h(e){--a||n&&n(e)}}},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){(function(t){var n=/^\s+|\s+$/g,r=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,i=/^0o[0-7]+$/i,o=parseInt,s="object"==typeof t&&t&&t.Object===Object&&t,l="object"==typeof self&&self&&self.Object===Object&&self,c=s||l||Function("return this")(),u=Object.prototype.toString,h=Math.max,p=Math.min,f=function(){return c.Date.now()};function d(e,t,n){var r,a,i,o,s,l,c=0,u=!1,d=!1,g=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function _(t){var n=r,i=a;return r=a=void 0,c=t,o=e.apply(i,n)}function y(e){return c=e,s=setTimeout(x,t),u?_(e):o}function b(e){var n=e-l;return void 0===l||n>=t||n<0||d&&e-c>=i}function x(){var e=f();if(b(e))return E(e);s=setTimeout(x,function(e){var n=t-(e-l);return d?p(n,i-(e-c)):n}(e))}function E(e){return s=void 0,g&&r?_(e):(r=a=void 0,o)}function w(){var e=f(),n=b(e);if(r=arguments,a=this,l=e,n){if(void 0===s)return y(l);if(d)return s=setTimeout(x,t),_(l)}return void 0===s&&(s=setTimeout(x,t)),o}return t=v(t)||0,m(n)&&(u=!!n.leading,i=(d="maxWait"in n)?h(v(n.maxWait)||0,t):i,g="trailing"in n?!!n.trailing:g),w.cancel=function(){void 0!==s&&clearTimeout(s),c=0,r=l=a=s=void 0},w.flush=function(){return void 0===s?o:E(f())},w}function m(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function v(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Symbol]"==u.call(e)}(e))return NaN;if(m(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=m(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(n,"");var s=a.test(e);return s||i.test(e)?o(e.slice(2),s?2:8):r.test(e)?NaN:+e}e.exports=function(e,t,n){var r=!0,a=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return m(n)&&(r="leading"in n?!!n.leading:r,a="trailing"in n?!!n.trailing:a),d(e,t,{leading:r,maxWait:t,trailing:a})}}).call(this,n(22))},function(e,t,n){var r,a,i;a=function(e){var t=[],n=Object.keys,r={},a={},i=!0,o=/^(no-?highlight|plain|text)$/i,s=/\blang(?:uage)?-([\w-]+)\b/i,l=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,c="Could not find the language '{}', did you forget to load/include a language module?",u={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},h="of and for in not or if then".split(" ");function p(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function f(e){return e.nodeName.toLowerCase()}function d(e){return o.test(e)}function m(e){var t,n={},r=Array.prototype.slice.call(arguments,1);for(t in e)n[t]=e[t];return r.forEach((function(e){for(t in e)n[t]=e[t]})),n}function v(e){var t=[];return function e(n,r){for(var a=n.firstChild;a;a=a.nextSibling)3===a.nodeType?r+=a.nodeValue.length:1===a.nodeType&&(t.push({event:"start",offset:r,node:a}),r=e(a,r),f(a).match(/br|hr|img|input/)||t.push({event:"stop",offset:r,node:a}));return r}(e,0),t}function g(e){return e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map((function(t){return m(e,{variants:null},t)}))),e.cached_variants?e.cached_variants:function e(t){return!!t&&(t.endsWithParent||e(t.starts))}(e)?[m(e,{starts:e.starts?m(e.starts):null})]:Object.isFrozen(e)?[m(e)]:[e]}function _(e,t){return t?Number(t):(n=e,-1!=h.indexOf(n.toLowerCase())?0:1);var n}function y(e){function t(e){return e&&e.source||e}function r(n,r){return new RegExp(t(n),"m"+(e.case_insensitive?"i":"")+(r?"g":""))}function a(e){var n,a,i={},o=[],s={},l=1;function c(e,t){i[l]=e,o.push([e,t]),l+=function(e){return new RegExp(e.toString()+"|").exec("").length-1}(t)+1}for(var u=0;u<e.contains.length;u++)c(a=e.contains[u],a.beginKeywords?"\\.?(?:"+a.begin+")\\.?":a.begin);e.terminator_end&&c("end",e.terminator_end),e.illegal&&c("illegal",e.illegal);var h=o.map((function(e){return e[1]}));return n=r(function(e,n){for(var r=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,a=0,i="",o=0;o<e.length;o++){var s=a+=1,l=t(e[o]);for(o>0&&(i+=n),i+="(";l.length>0;){var c=r.exec(l);if(null==c){i+=l;break}i+=l.substring(0,c.index),l=l.substring(c.index+c[0].length),"\\"==c[0][0]&&c[1]?i+="\\"+String(Number(c[1])+s):(i+=c[0],"("==c[0]&&a++)}i+=")"}return i}(h,"|"),!0),s.lastIndex=0,s.exec=function(t){var r;if(0===o.length)return null;n.lastIndex=s.lastIndex;var a=n.exec(t);if(!a)return null;for(var l=0;l<a.length;l++)if(null!=a[l]&&null!=i[""+l]){r=i[""+l];break}return"string"==typeof r?(a.type=r,a.extra=[e.illegal,e.terminator_end]):(a.type="begin",a.rule=r),a},s}if(e.contains&&-1!=e.contains.indexOf("self")){if(!i)throw new Error("ERR: contains `self` is not supported at the top-level of a language.  See documentation.");e.contains=e.contains.filter((function(e){return"self"!=e}))}!function i(o,s){o.compiled||(o.compiled=!0,o.keywords=o.keywords||o.beginKeywords,o.keywords&&(o.keywords=function(e,t){var r={};return"string"==typeof e?a("keyword",e):n(e).forEach((function(t){a(t,e[t])})),r;function a(e,n){t&&(n=n.toLowerCase()),n.split(" ").forEach((function(t){var n=t.split("|");r[n[0]]=[e,_(n[0],n[1])]}))}}(o.keywords,e.case_insensitive)),o.lexemesRe=r(o.lexemes||/\w+/,!0),s&&(o.beginKeywords&&(o.begin="\\b("+o.beginKeywords.split(" ").join("|")+")\\b"),o.begin||(o.begin=/\B|\b/),o.beginRe=r(o.begin),o.endSameAsBegin&&(o.end=o.begin),o.end||o.endsWithParent||(o.end=/\B|\b/),o.end&&(o.endRe=r(o.end)),o.terminator_end=t(o.end)||"",o.endsWithParent&&s.terminator_end&&(o.terminator_end+=(o.end?"|":"")+s.terminator_end)),o.illegal&&(o.illegalRe=r(o.illegal)),null==o.relevance&&(o.relevance=1),o.contains||(o.contains=[]),o.contains=Array.prototype.concat.apply([],o.contains.map((function(e){return g("self"===e?o:e)}))),o.contains.forEach((function(e){i(e,o)})),o.starts&&i(o.starts,s),o.terminators=a(o))}(e)}function b(e,t,n,a){var o=t;function s(e,t){var n=_.case_insensitive?t[0].toLowerCase():t[0];return e.keywords.hasOwnProperty(n)&&e.keywords[n]}function l(e,t,n,r){if(!n&&""===t)return"";if(!e)return t;var a='<span class="'+(r?"":u.classPrefix);return(a+=e+'">')+t+(n?"":"</span>")}function h(){S+=null!=w.subLanguage?function(){var e="string"==typeof w.subLanguage;if(e&&!r[w.subLanguage])return p(O);var t=e?b(w.subLanguage,O,!0,C[w.subLanguage]):x(O,w.subLanguage.length?w.subLanguage:void 0);return w.relevance>0&&(M+=t.relevance),e&&(C[w.subLanguage]=t.top),l(t.language,t.value,!1,!0)}():function(){var e,t,n,r;if(!w.keywords)return p(O);for(r="",t=0,w.lexemesRe.lastIndex=0,n=w.lexemesRe.exec(O);n;)r+=p(O.substring(t,n.index)),(e=s(w,n))?(M+=e[1],r+=l(e[0],p(n[0]))):r+=p(n[0]),t=w.lexemesRe.lastIndex,n=w.lexemesRe.exec(O);return r+p(O.substr(t))}(),O=""}function f(e){S+=e.className?l(e.className,"",!0):"",w=Object.create(e,{parent:{value:w}})}function d(e){var t=e[0],n=e.rule;return n&&n.endSameAsBegin&&(n.endRe=new RegExp(t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),n.skip?O+=t:(n.excludeBegin&&(O+=t),h(),n.returnBegin||n.excludeBegin||(O=t)),f(n),n.returnBegin?0:t.length}function m(e){var t=e[0],n=o.substr(e.index),r=function e(t,n){if(function(e,t){var n=e&&e.exec(t);return n&&0===n.index}(t.endRe,n)){for(;t.endsParent&&t.parent;)t=t.parent;return t}if(t.endsWithParent)return e(t.parent,n)}(w,n);if(r){var a=w;a.skip?O+=t:(a.returnEnd||a.excludeEnd||(O+=t),h(),a.excludeEnd&&(O=t));do{w.className&&(S+="</span>"),w.skip||w.subLanguage||(M+=w.relevance),w=w.parent}while(w!==r.parent);return r.starts&&(r.endSameAsBegin&&(r.starts.endRe=r.endRe),f(r.starts)),a.returnEnd?0:t.length}}var v={};function g(e,t){var r=t&&t[0];if(O+=e,null==r)return h(),0;if("begin"==v.type&&"end"==t.type&&v.index==t.index&&""===r)return O+=o.slice(t.index,t.index+1),1;if(v=t,"begin"===t.type)return d(t);if("illegal"===t.type&&!n)throw new Error('Illegal lexeme "'+r+'" for mode "'+(w.className||"<unnamed>")+'"');if("end"===t.type){var a=m(t);if(null!=a)return a}return O+=r,r.length}var _=k(e);if(!_)throw console.error(c.replace("{}",e)),new Error('Unknown language: "'+e+'"');y(_);var E,w=a||_,C={},S="";for(E=w;E!==_;E=E.parent)E.className&&(S=l(E.className,"",!0)+S);var O="",M=0;try{for(var N,T,I=0;w.terminators.lastIndex=I,N=w.terminators.exec(o);)T=g(o.substring(I,N.index),N),I=N.index+T;for(g(o.substr(I)),E=w;E.parent;E=E.parent)E.className&&(S+="</span>");return{relevance:M,value:S,illegal:!1,language:e,top:w}}catch(t){if(t.message&&-1!==t.message.indexOf("Illegal"))return{illegal:!0,relevance:0,value:p(o)};if(i)return{relevance:0,value:p(o),language:e,top:w,errorRaised:t};throw t}}function x(e,t){t=t||u.languages||n(r);var a={relevance:0,value:p(e)},i=a;return t.filter(k).filter(O).forEach((function(t){var n=b(t,e,!1);n.language=t,n.relevance>i.relevance&&(i=n),n.relevance>a.relevance&&(i=a,a=n)})),i.language&&(a.second_best=i),a}function E(e){return u.tabReplace||u.useBR?e.replace(l,(function(e,t){return u.useBR&&"\n"===e?"<br>":u.tabReplace?t.replace(/\t/g,u.tabReplace):""})):e}function w(e){var n,r,i,o,l,h=function(e){var t,n,r,a,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",n=s.exec(i)){var o=k(n[1]);return o||(console.warn(c.replace("{}",n[1])),console.warn("Falling back to no-highlight mode for this block.",e)),o?n[1]:"no-highlight"}for(t=0,r=(i=i.split(/\s+/)).length;t<r;t++)if(d(a=i[t])||k(a))return a}(e);d(h)||(u.useBR?(n=document.createElement("div")).innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ \/]*>/g,"\n"):n=e,l=n.textContent,i=h?b(h,l,!0):x(l),(r=v(n)).length&&((o=document.createElement("div")).innerHTML=i.value,i.value=function(e,n,r){var a=0,i="",o=[];function s(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset<n[0].offset?e:n:"start"===n[0].event?e:n:e.length?e:n}function l(e){i+="<"+f(e)+t.map.call(e.attributes,(function(e){return" "+e.nodeName+'="'+p(e.value).replace(/"/g,"&quot;")+'"'})).join("")+">"}function c(e){i+="</"+f(e)+">"}function u(e){("start"===e.event?l:c)(e.node)}for(;e.length||n.length;){var h=s();if(i+=p(r.substring(a,h[0].offset)),a=h[0].offset,h===e){o.reverse().forEach(c);do{u(h.splice(0,1)[0]),h=s()}while(h===e&&h.length&&h[0].offset===a);o.reverse().forEach(l)}else"start"===h[0].event?o.push(h[0].node):o.pop(),u(h.splice(0,1)[0])}return i+p(r.substr(a))}(r,v(o),l)),i.value=E(i.value),e.innerHTML=i.value,e.className=function(e,t,n){var r=t?a[t]:n,i=[e.trim()];return e.match(/\bhljs\b/)||i.push("hljs"),-1===e.indexOf(r)&&i.push(r),i.join(" ").trim()}(e.className,h,i.language),e.result={language:i.language,re:i.relevance},i.second_best&&(e.second_best={language:i.second_best.language,re:i.second_best.relevance}))}function C(){if(!C.called){C.called=!0;var e=document.querySelectorAll("pre code");t.forEach.call(e,w)}}var S={disableAutodetect:!0};function k(e){return e=(e||"").toLowerCase(),r[e]||r[a[e]]}function O(e){var t=k(e);return t&&!t.disableAutodetect}return e.highlight=b,e.highlightAuto=x,e.fixMarkup=E,e.highlightBlock=w,e.configure=function(e){u=m(u,e)},e.initHighlighting=C,e.initHighlightingOnLoad=function(){window.addEventListener("DOMContentLoaded",C,!1),window.addEventListener("load",C,!1)},e.registerLanguage=function(t,n){var o;try{o=n(e)}catch(e){if(console.error("Language definition for '{}' could not be registered.".replace("{}",t)),!i)throw e;console.error(e),o=S}r[t]=o,o.rawDefinition=n.bind(null,e),o.aliases&&o.aliases.forEach((function(e){a[e]=t}))},e.listLanguages=function(){return n(r)},e.getLanguage=k,e.requireLanguage=function(e){var t=k(e);if(t)return t;throw new Error("The '{}' language is required, but not loaded.".replace("{}",e))},e.autoDetection=O,e.inherit=m,e.debugMode=function(){i=!1},e.IDENT_RE="[a-zA-Z]\\w*",e.UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",e.NUMBER_RE="\\b\\d+(\\.\\d+)?",e.C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BINARY_NUMBER_RE="\\b(0b[01]+)",e.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BACKSLASH_ESCAPE={begin:"\\\\[\\s\\S]",relevance:0},e.APOS_STRING_MODE={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},e.QUOTE_STRING_MODE={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},e.PHRASAL_WORDS_MODE={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.COMMENT=function(t,n,r){var a=e.inherit({className:"comment",begin:t,end:n,contains:[]},r||{});return a.contains.push(e.PHRASAL_WORDS_MODE),a.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|XXX):",relevance:0}),a},e.C_LINE_COMMENT_MODE=e.COMMENT("//","$"),e.C_BLOCK_COMMENT_MODE=e.COMMENT("/\\*","\\*/"),e.HASH_COMMENT_MODE=e.COMMENT("#","$"),e.NUMBER_MODE={className:"number",begin:e.NUMBER_RE,relevance:0},e.C_NUMBER_MODE={className:"number",begin:e.C_NUMBER_RE,relevance:0},e.BINARY_NUMBER_MODE={className:"number",begin:e.BINARY_NUMBER_RE,relevance:0},e.CSS_NUMBER_MODE={className:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},e.REGEXP_MODE={className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[e.BACKSLASH_ESCAPE]}]},e.TITLE_MODE={className:"title",begin:e.IDENT_RE,relevance:0},e.UNDERSCORE_TITLE_MODE={className:"title",begin:e.UNDERSCORE_IDENT_RE,relevance:0},e.METHOD_GUARD={begin:"\\.\\s*"+e.UNDERSCORE_IDENT_RE,relevance:0},[e.BACKSLASH_ESCAPE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.PHRASAL_WORDS_MODE,e.COMMENT,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.HASH_COMMENT_MODE,e.NUMBER_MODE,e.C_NUMBER_MODE,e.BINARY_NUMBER_MODE,e.CSS_NUMBER_MODE,e.REGEXP_MODE,e.TITLE_MODE,e.UNDERSCORE_TITLE_MODE,e.METHOD_GUARD].forEach((function(e){!function e(t){Object.freeze(t);var n="function"==typeof t;return Object.getOwnPropertyNames(t).forEach((function(r){!t.hasOwnProperty(r)||null===t[r]||"object"!=typeof t[r]&&"function"!=typeof t[r]||n&&("caller"===r||"callee"===r||"arguments"===r)||Object.isFrozen(t[r])||e(t[r])})),t}(e)})),e},i="object"==typeof window&&window||"object"==typeof self&&self,t.nodeType?i&&(i.hljs=a({}),void 0===(r=function(){return i.hljs}.apply(t,[]))||(e.exports=r)):a(t)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.stringSimilarity=function(e,t,n,r){if(void 0===n&&(n=2),void 0===r&&(r=!1),r||(e=e.toLowerCase(),t=t.toLowerCase()),e.length<n||t.length<n)return 0;for(var a=new Map,i=0;i<e.length-(n-1);i++){var o=e.substr(i,n);a.set(o,a.has(o)?a.get(o)+1:1)}for(var s=0,l=0;l<t.length-(n-1);l++){var c=t.substr(l,n),u=a.has(c)?a.get(c):0;u>0&&(a.set(c,u-1),s++)}return 2*s/(e.length+t.length-2*(n-1))},t.default=t.stringSimilarity},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t){e.exports.getDocJSONPVarNname=function(e){return"__EC_DOC_"+(e=e.replace(/\.js$/,"").replace(/\.json$/,"").replace(/[-.\/]/g,"_"))}},function(e,t,n){var r,a;function i(){return(i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}!function(i,s){"object"===o(t)&&void 0!==e?e.exports=s():void 0===(a="function"==typeof(r=s)?r.call(t,n,t,e):r)||(e.exports=a)}(0,(function(){"use strict";var e="undefined"!=typeof window,t=e&&!("onscroll"in window)||"undefined"!=typeof navigator&&/(gle|ing|ro)bot|crawl|spider/i.test(navigator.userAgent),n=e&&"IntersectionObserver"in window,r=e&&"classList"in document.createElement("p"),a={elements_selector:"img",container:t||e?document:null,threshold:300,thresholds:null,data_src:"src",data_srcset:"srcset",data_sizes:"sizes",data_bg:"bg",data_poster:"poster",class_loading:"loading",class_loaded:"loaded",class_error:"error",load_delay:0,auto_unobserve:!0,callback_enter:null,callback_exit:null,callback_reveal:null,callback_loaded:null,callback_error:null,callback_finish:null,use_native:!1},o=function(e,t){var n,r=new e(t);try{n=new CustomEvent("LazyLoad::Initialized",{detail:{instance:r}})}catch(e){(n=document.createEvent("CustomEvent")).initCustomEvent("LazyLoad::Initialized",!1,!1,{instance:r})}window.dispatchEvent(n)},s=function(e,t){return e.getAttribute("data-"+t)},l=function(e,t,n){var r="data-"+t;null!==n?e.setAttribute(r,n):e.removeAttribute(r)},c=function(e){return"true"===s(e,"was-processed")},u=function(e,t){return l(e,"ll-timeout",t)},h=function(e){return s(e,"ll-timeout")},p=function(e,t,n,r){e&&(void 0===r?void 0===n?e(t):e(t,n):e(t,n,r))},f=function(e,t){e.loadingCount+=t,0===e._elements.length&&0===e.loadingCount&&p(e._settings.callback_finish,e)},d=function(e){for(var t,n=[],r=0;t=e.children[r];r+=1)"SOURCE"===t.tagName&&n.push(t);return n},m=function(e,t,n){n&&e.setAttribute(t,n)},v=function(e,t){m(e,"sizes",s(e,t.data_sizes)),m(e,"srcset",s(e,t.data_srcset)),m(e,"src",s(e,t.data_src))},g={IMG:function(e,t){var n=e.parentNode;n&&"PICTURE"===n.tagName&&d(n).forEach((function(e){v(e,t)})),v(e,t)},IFRAME:function(e,t){m(e,"src",s(e,t.data_src))},VIDEO:function(e,t){d(e).forEach((function(e){m(e,"src",s(e,t.data_src))})),m(e,"poster",s(e,t.data_poster)),m(e,"src",s(e,t.data_src)),e.load()}},_=function(e,t){r?e.classList.add(t):e.className+=(e.className?" ":"")+t},y=function(e,t){r?e.classList.remove(t):e.className=e.className.replace(new RegExp("(^|\\s+)"+t+"(\\s+|$)")," ").replace(/^\s+/,"").replace(/\s+$/,"")},b=function(e,t,n){e.addEventListener(t,n)},x=function(e,t,n){e.removeEventListener(t,n)},E=function(e,t,n){x(e,"load",t),x(e,"loadeddata",t),x(e,"error",n)},w=function(e,t,n){var r=n._settings,a=t?r.class_loaded:r.class_error,i=t?r.callback_loaded:r.callback_error,o=e.target;y(o,r.class_loading),_(o,a),p(i,o,n),f(n,-1)},C=["IMG","IFRAME","VIDEO"],S=function(e,t){var n=t._observer;O(e,t),n&&t._settings.auto_unobserve&&n.unobserve(e)},k=function(e){var t=h(e);t&&(clearTimeout(t),u(e,null))},O=function(e,t,n){var r=t._settings;!n&&c(e)||(C.indexOf(e.tagName)>-1&&(function(e,t){var n=function n(a){w(a,!0,t),E(e,n,r)},r=function r(a){w(a,!1,t),E(e,n,r)};!function(e,t,n){b(e,"load",t),b(e,"loadeddata",t),b(e,"error",n)}(e,n,r)}(e,t),_(e,r.class_loading)),function(e,t){var n,r,a=t._settings,i=e.tagName,o=g[i];if(o)return o(e,a),f(t,1),void(t._elements=(n=t._elements,r=e,n.filter((function(e){return e!==r}))));!function(e,t){var n=s(e,t.data_src),r=s(e,t.data_bg);n&&(e.style.backgroundImage='url("'.concat(n,'")')),r&&(e.style.backgroundImage=r)}(e,a)}(e,t),function(e){l(e,"was-processed","true")}(e),p(r.callback_reveal,e,t),p(r.callback_set,e,t))},M=function(e){return!!n&&(e._observer=new IntersectionObserver((function(t){t.forEach((function(t){return function(e){return e.isIntersecting||e.intersectionRatio>0}(t)?function(e,t,n){var r=n._settings;p(r.callback_enter,e,t,n),r.load_delay?function(e,t){var n=t._settings.load_delay,r=h(e);r||(r=setTimeout((function(){S(e,t),k(e)}),n),u(e,r))}(e,n):S(e,n)}(t.target,t,e):function(e,t,n){var r=n._settings;p(r.callback_exit,e,t,n),r.load_delay&&k(e)}(t.target,t,e)}))}),{root:(t=e._settings).container===document?null:t.container,rootMargin:t.thresholds||t.threshold+"px"}),!0);var t},N=["IMG","IFRAME"],T=function(e,t){return function(e){return e.filter((function(e){return!c(e)}))}((n=e||function(e){return e.container.querySelectorAll(e.elements_selector)}(t),Array.prototype.slice.call(n)));var n},I=function(t,n){var r;this._settings=function(e){return i({},a,e)}(t),this.loadingCount=0,M(this),this.update(n),r=this,e&&window.addEventListener("online",(function(e){!function(e){var t=e._settings;t.container.querySelectorAll("."+t.class_error).forEach((function(e){y(e,t.class_error),function(e){l(e,"was-processed",null)}(e)})),e.update()}(r)}))};return I.prototype={update:function(e){var n,r=this,a=this._settings;this._elements=T(e,a),!t&&this._observer?(function(e){return e.use_native&&"loading"in HTMLImageElement.prototype}(a)&&((n=this)._elements.forEach((function(e){-1!==N.indexOf(e.tagName)&&(e.setAttribute("loading","lazy"),O(e,n))})),this._elements=T(e,a)),this._elements.forEach((function(e){r._observer.observe(e)}))):this.loadAll()},destroy:function(){var e=this;this._observer&&(this._elements.forEach((function(t){e._observer.unobserve(t)})),this._observer=null),this._elements=null,this._settings=null},load:function(e,t){O(e,this,t)},loadAll:function(){var e=this;this._elements.forEach((function(t){S(t,e)}))}},e&&function(e,t){if(t)if(t.length)for(var n,r=0;n=t[r];r+=1)o(e,n);else o(e,t)}(I,window.lazyLoadOptions),I}))},function(e,n){e.exports=t},function(e,t){e.exports=n},function(e,t,n){"use strict";function r(e,t,n,r,a){for(var i=t.length,o=n.length,s=e.newPos,l=s-r,c=0;s+1<i&&l+1<o&&a(t[s+1],n[l+1]);)s++,l++,c++;return c&&e.components.push({count:c,added:!1,removed:!1,indices:[]}),e.newPos=s,l}function a(e,t,n){var r=e[e.length-1];r&&r.added===t&&r.removed===n?e[e.length-1]={count:r.count+1,added:t,removed:n,indices:[]}:e.push({count:1,added:t,removed:n,indices:[]})}function i(e){for(var t=0,n=e.length,r=0,a=0;t<n;t++){var i=e[t];if(i.removed){for(s=a;s<a+i.count;s++)i.indices.push(s);a+=i.count}else{for(var o=[],s=r;s<r+i.count;s++)o.push(s);i.indices=o,r+=i.count,i.added||(a+=i.count)}}return e}t.__esModule=!0,t.default=function(e,t,n){return function(e,t,n){n||(n=function(e,t){return e===t}),e=e.slice();var o=(t=t.slice()).length,s=e.length,l=1,c=o+s,u=[{newPos:-1,components:[]}],h=r(u[0],t,e,0,n);if(u[0].newPos+1>=o&&h+1>=s){for(var p=[],f=0;f<t.length;f++)p.push(f);return[{indices:p,count:t.length,added:!1,removed:!1}]}function d(){for(var c=-1*l;c<=l;c+=2){var h,p=u[c-1],f=u[c+1],d=(f?f.newPos:0)-c;p&&(u[c-1]=void 0);var m=p&&p.newPos+1<o,v=f&&0<=d&&d<s;if(m||v){if(!m||v&&p.newPos<f.newPos?a((h={newPos:(g=f).newPos,components:g.components.slice(0)}).components,!1,!0):((h=p).newPos++,a(h.components,!0,!1)),d=r(h,t,e,c,n),h.newPos+1>=o&&d+1>=s)return i(h.components);u[c]=h}else u[c]=void 0}var g;l++}for(;l<=c;){var m=d();if(m)return m}}(e,t,n)}},function(e,t){e.exports=function(e){var t="<>",n="</>",r={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/},a="[A-Za-z$_][0-9A-Za-z$_]*",i={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},o={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:e.C_NUMBER_RE+"n?"}],relevance:0},s={className:"subst",begin:"\\$\\{",end:"\\}",keywords:i,contains:[]},l={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,s],subLanguage:"xml"}},c={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,s],subLanguage:"css"}},u={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,s]};s.contains=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,l,c,u,o,e.REGEXP_MODE];var h=s.contains.concat([e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]);return{aliases:["js","jsx","mjs","cjs"],keywords:i,contains:[{className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},{className:"meta",begin:/^#!/,end:/$/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,l,c,u,e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:a+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,o,{begin:/[{,\n]\s*/,relevance:0,contains:[{begin:a+"\\s*:",returnBegin:!0,relevance:0,contains:[{className:"attr",begin:a,relevance:0}]}]},{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{className:"function",begin:"(\\(.*?\\)|"+a+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:a},{begin:/\(\s*\)/},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:i,contains:h}]}]},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:t,end:n},{begin:r.begin,end:r.end}],subLanguage:"xml",contains:[{begin:r.begin,end:r.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:a}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:h}],illegal:/\[|%/},{begin:/\$[(.]/},e.METHOD_GUARD,{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"constructor get set",end:/\{/,excludeEnd:!0}],illegal:/#(?!!)/}}},function(e,t){e.exports=function(e){var t={className:"symbol",begin:"&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;"},n={begin:"\\s",contains:[{className:"meta-keyword",begin:"#?[a-z_][a-z1-9_-]+",illegal:"\\n"}]},r=e.inherit(n,{begin:"\\(",end:"\\)"}),a=e.inherit(e.APOS_STRING_MODE,{className:"meta-string"}),i=e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),o={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",begin:"[A-Za-z0-9\\._:-]+",relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[t]},{begin:/'/,end:/'/,contains:[t]},{begin:/[^\s"'=<>`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin:"<![a-z]",end:">",relevance:10,contains:[n,i,a,r,{begin:"\\[",end:"\\]",contains:[{className:"meta",begin:"<![a-z]",end:">",contains:[n,r,i,a]}]}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},t,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{begin:/<\?(php)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]},{className:"tag",begin:"<style(?=\\s|>)",end:">",keywords:{name:"style"},contains:[o],starts:{end:"</style>",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:"<script(?=\\s|>)",end:">",keywords:{name:"script"},contains:[o],starts:{end:"<\/script>",returnEnd:!0,subLanguage:["actionscript","javascript","handlebars","xml"]}},{className:"tag",begin:"</?",end:"/?>",contains:[{className:"name",begin:/[^\/><\s]+/,relevance:0},o]}]}}},function(e,t,n){
/*!***************************************************
* mark.js v8.11.1
* https://markjs.io/
* Copyright (c) 2014–2018, Julian Kühnel
* Released under the MIT license https://git.io/vwTVl
*****************************************************/
e.exports=function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a=function(){function e(n){var r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=a,this.iframesTimeout=i}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach((function(t){var n=e.filter((function(e){return e.contains(t)})).length>0;-1!==e.indexOf(t)||n||e.push(t)})),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var a=e.contentWindow;if(r=a.document,!a||!r)throw new Error("iframe inaccessible")}catch(e){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,a=!1,i=null,o=function o(){if(!a){a=!0,clearTimeout(i);try{r.isIframeBlank(e)||(e.removeEventListener("load",o),r.getIframeContents(e,t,n))}catch(e){n()}}};e.addEventListener("load",o),i=setTimeout(o,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(e){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,(function(){return!0}),(function(e){r++,n.waitForIframes(e.querySelector("html"),(function(){--r||t()}))}),(function(e){e||t()}))}},{key:"forEachIframe",value:function(t,n,r){var a=this,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},o=t.querySelectorAll("iframe"),s=o.length,l=0;o=Array.prototype.slice.call(o);var c=function(){--s<=0&&i(l)};s||c(),o.forEach((function(t){e.matches(t,a.exclude)?c():a.onIframeReady(t,(function(e){n(t)&&(l++,r(e)),c()}),c)}))}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:(null===t||e.nextNode())&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var a=!1,i=!1;return r.forEach((function(e,t){e.val===n&&(a=t,i=e.handled)})),this.compareNodeIframe(e,t,n)?(!1!==a||i?!1===a||i||(r[a].handled=!0):r.push({val:n,handled:!0}),!0):(!1===a&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var a=this;e.forEach((function(e){e.handled||a.getIframeContents(e.val,(function(e){a.createInstanceOnIframe(e).forEachNode(t,n,r)}))}))}},{key:"iterateThroughNodes",value:function(e,t,n,r,a){for(var i,o=this,s=this.createIterator(t,e,r),l=[],c=[],u=void 0,h=void 0;i=void 0,i=o.getIteratorNode(s),h=i.prevNode,u=i.node;)this.iframes&&this.forEachIframe(t,(function(e){return o.checkIframeFilter(u,h,e,l)}),(function(t){o.createInstanceOnIframe(t).forEachNode(e,(function(e){return c.push(e)}),r)})),c.push(u);c.forEach((function(e){n(e)})),this.iframes&&this.handleOpenIframes(l,e,n,r),a()}},{key:"forEachNode",value:function(e,t,n){var r=this,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},i=this.getContexts(),o=i.length;o||a(),i.forEach((function(i){var s=function(){r.iterateThroughNodes(e,i,t,n,(function(){--o<=0&&a()}))};r.iframes?r.waitForIframes(i,s):s()}))}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var a=!1;return n.every((function(t){return!r.call(e,t)||(a=!0,!1)})),a}return!1}}]),e}(),i=function(){function i(e){t(this,i),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(i,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createRegExp",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e)}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var a in t)if(t.hasOwnProperty(a)){var i=t[a],o="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(a):this.escapeStr(a),s="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(i):this.escapeStr(i);""!==o&&""!==s&&(e=e.replace(new RegExp("("+this.escapeStr(o)+"|"+this.escapeStr(s)+")","gm"+n),r+"("+this.processSynomyms(o)+"|"+this.processSynomyms(s)+")"+r))}return e}},{key:"processSynomyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,(function(e){return"\\"===e.charAt(0)?"?":""}))).replace(/(?:\\)*\*/g,(function(e){return"\\"===e.charAt(0)?"*":""}))}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,(function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"}))}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"],r=[];return e.split("").forEach((function(a){n.every((function(n){if(-1!==n.indexOf(a)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0}))})),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n=this.opt.accuracy,r="string"==typeof n?n:n.value,a="string"==typeof n?[]:n.limiters,i="";switch(a.forEach((function(e){i+="|"+t.escapeStr(e)})),r){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿")))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach((function(e){t.opt.separateWordSearch?e.split(" ").forEach((function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)})):e.trim()&&-1===n.indexOf(e)&&n.push(e)})),{keywords:n.sort((function(e,t){return t.length-e.length})),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort((function(e,t){return e.start-t.start})).forEach((function(e){var a=t.callNoMatchOnInvalidRanges(e,r),i=a.start,o=a.end;a.valid&&(e.start=i,e.length=o-i,n.push(e),r=o)})),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,a=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?a=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:a}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,a=!0,i=n.length,o=t-i,s=parseInt(e.start,10)-o;return(r=(s=s>i?i:s)+parseInt(e.length,10))>i&&(r=i,this.log("End range automatically set to the max value of "+i)),s<0||r-s<0||s>i||r>i?(a=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(s,r).replace(/\s+/g,"")&&(a=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:s,end:r,valid:a}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,(function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})}),(function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),(function(){e({value:n,nodes:r})}))}},{key:"matchesExclude",value:function(e){return a.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",a=e.splitText(t),i=a.splitText(n-t),o=document.createElement(r);return o.setAttribute("data-markjs","true"),this.opt.className&&o.setAttribute("class",this.opt.className),o.textContent=a.textContent,a.parentNode.replaceChild(o,a),i}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,a){var i=this;e.nodes.every((function(o,s){var l=e.nodes[s+1];if(void 0===l||l.start>t){if(!r(o.node))return!1;var c=t-o.start,u=(n>o.end?o.end:n)-o.start,h=e.value.substr(0,o.start),p=e.value.substr(u+o.start);if(o.node=i.wrapRangeInTextNode(o.node,c,u),e.value=h+p,e.nodes.forEach((function(t,n){n>=s&&(e.nodes[n].start>0&&n!==s&&(e.nodes[n].start-=u),e.nodes[n].end-=u)})),n-=u,a(o.node.previousSibling,o.start),!(n>o.end))return!1;t=o.end}return!0}))}},{key:"wrapMatches",value:function(e,t,n,r,a){var i=this,o=0===t?0:t+1;this.getTextNodes((function(t){t.nodes.forEach((function(t){t=t.node;for(var a=void 0;null!==(a=e.exec(t.textContent))&&""!==a[o];)if(n(a[o],t)){var s=a.index;if(0!==o)for(var l=1;l<o;l++)s+=a[l].length;t=i.wrapRangeInTextNode(t,s,s+a[o].length),r(t.previousSibling),e.lastIndex=0}})),a()}))}},{key:"wrapMatchesAcrossElements",value:function(e,t,n,r,a){var i=this,o=0===t?0:t+1;this.getTextNodes((function(t){for(var s=void 0;null!==(s=e.exec(t.value))&&""!==s[o];){var l=s.index;if(0!==o)for(var c=1;c<o;c++)l+=s[c].length;var u=l+s[o].length;i.wrapRangeInMappedTextNode(t,l,u,(function(e){return n(s[o],e)}),(function(t,n){e.lastIndex=n,r(t)}))}a()}))}},{key:"wrapRangeFromIndex",value:function(e,t,n,r){var a=this;this.getTextNodes((function(i){var o=i.value.length;e.forEach((function(e,r){var s=a.checkWhitespaceRanges(e,o,i.value),l=s.start,c=s.end;s.valid&&a.wrapRangeInMappedTextNode(i,l,c,(function(n){return t(n,e,i.value.substring(l,c),r)}),(function(t){n(t,e)}))})),r()}))}},{key:"unwrapMatches",value:function(e){for(var t=e.parentNode,n=document.createDocumentFragment();e.firstChild;)n.appendChild(e.removeChild(e.firstChild));t.replaceChild(n,e),this.ie?this.normalizeTextNode(t):t.normalize()}},{key:"normalizeTextNode",value:function(e){if(e){if(3===e.nodeType)for(;e.nextSibling&&3===e.nextSibling.nodeType;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}},{key:"markRegExp",value:function(e,t){var n=this;this.opt=t,this.log('Searching with expression "'+e+'"');var r=0,a="wrapMatches";this.opt.acrossElements&&(a="wrapMatchesAcrossElements"),this[a](e,this.opt.ignoreGroups,(function(e,t){return n.opt.filter(t,e,r)}),(function(e){r++,n.opt.each(e)}),(function(){0===r&&n.opt.noMatch(e),n.opt.done(r)}))}},{key:"mark",value:function(e,t){var n=this;this.opt=t;var r=0,a="wrapMatches",i=this.getSeparatedKeywords("string"==typeof e?[e]:e),o=i.keywords,s=i.length,l=this.opt.caseSensitive?"":"i";this.opt.acrossElements&&(a="wrapMatchesAcrossElements"),0===s?this.opt.done(r):function e(t){var i=new RegExp(n.createRegExp(t),"gm"+l),c=0;n.log('Searching with expression "'+i+'"'),n[a](i,1,(function(e,a){return n.opt.filter(a,t,r,c)}),(function(e){c++,r++,n.opt.each(e)}),(function(){0===c&&n.opt.noMatch(t),o[s-1]===t?n.opt.done(r):e(o[o.indexOf(t)+1])}))}(o[0])}},{key:"markRanges",value:function(e,t){var n=this;this.opt=t;var r=0,a=this.checkRanges(e);a&&a.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(a)),this.wrapRangeFromIndex(a,(function(e,t,r,a){return n.opt.filter(e,t,r,a)}),(function(e,t){r++,n.opt.each(e,t)}),(function(){n.opt.done(r)}))):this.opt.done(r)}},{key:"unmark",value:function(e){var t=this;this.opt=e;var n=this.opt.element?this.opt.element:"*";n+="[data-markjs]",this.opt.className&&(n+="."+this.opt.className),this.log('Removal selector "'+n+'"'),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,(function(e){t.unwrapMatches(e)}),(function(e){var r=a.matches(e,n),i=t.matchesExclude(e);return!r||i?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),this.opt.done)}},{key:"opt",set:function(e){this._opt=r({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:function(){},noMatch:function(){},filter:function(){return!0},done:function(){},debug:!1,log:window.console},e)},get:function(){return this._opt}},{key:"iterator",get:function(){return new a(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}}]),i}();return function(e){var t=this,n=new i(e);return this.mark=function(e,r){return n.mark(e,r),t},this.markRegExp=function(e,r){return n.markRegExp(e,r),t},this.markRanges=function(e,r){return n.markRanges(e,r),t},this.unmark=function(e){return n.unmark(e),t},this}}()},function(e,t,n){(function(t){var n=/^\s+|\s+$/g,r=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,i=/^0o[0-7]+$/i,o=parseInt,s="object"==typeof t&&t&&t.Object===Object&&t,l="object"==typeof self&&self&&self.Object===Object&&self,c=s||l||Function("return this")(),u=Object.prototype.toString,h=Math.max,p=Math.min,f=function(){return c.Date.now()};function d(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function m(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Symbol]"==u.call(e)}(e))return NaN;if(d(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=d(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(n,"");var s=a.test(e);return s||i.test(e)?o(e.slice(2),s?2:8):r.test(e)?NaN:+e}e.exports=function(e,t,n){var r,a,i,o,s,l,c=0,u=!1,v=!1,g=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function _(t){var n=r,i=a;return r=a=void 0,c=t,o=e.apply(i,n)}function y(e){return c=e,s=setTimeout(x,t),u?_(e):o}function b(e){var n=e-l;return void 0===l||n>=t||n<0||v&&e-c>=i}function x(){var e=f();if(b(e))return E(e);s=setTimeout(x,function(e){var n=t-(e-l);return v?p(n,i-(e-c)):n}(e))}function E(e){return s=void 0,g&&r?_(e):(r=a=void 0,o)}function w(){var e=f(),n=b(e);if(r=arguments,a=this,l=e,n){if(void 0===s)return y(l);if(v)return s=setTimeout(x,t),_(l)}return void 0===s&&(s=setTimeout(x,t)),o}return t=m(t)||0,d(n)&&(u=!!n.leading,i=(v="maxWait"in n)?h(m(n.maxWait)||0,t):i,g="trailing"in n?!!n.trailing:g),w.cancel=function(){void 0!==s&&clearTimeout(s),c=0,r=l=a=s=void 0},w.flush=function(){return void 0===s?o:E(f())},w}}).call(this,n(22))},function(e,t,n){"use strict";var r=n(2);n.n(r).a},function(e,t,n){"use strict";var r=n(3);n.n(r).a},function(e,t,n){"use strict";var r=n(4);n.n(r).a},function(e,t,n){"use strict";var r=n(5);n.n(r).a},function(e,t,n){"use strict";var r=n(6);n.n(r).a},function(e,t,n){"use strict";var r=n(7);n.n(r).a},function(e,t,n){"use strict";var r=n(8);n.n(r).a},function(e,t,n){"use strict";var r=n(9);n.n(r).a},function(e,t,n){"use strict";var r=n(10);n.n(r).a},function(e,t,n){"use strict";var r=n(11);n.n(r).a},function(e,t,n){},function(e,t,n){},function(e,t,n){"use strict";var r=n(12);n.n(r).a},function(e,t,n){"use strict";var r=n(13);n.n(r).a},function(e,t,n){"use strict";var r=n(14);n.n(r).a},function(e,t,n){"use strict";var r=n(15);n.n(r).a},function(e,t,n){"use strict";var r=n(16);n.n(r).a},function(e,t,n){"use strict";var r=n(17);n.n(r).a},function(e,t,n){"use strict";var r=n(18);n.n(r).a},function(e,t,n){},function(e,t,n){"use strict";n.r(t),n.d(t,"init",(function(){return pr}));var r=n(0),a=n.n(r),i=["style","currency","currencyDisplay","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","localeMatcher","formatMatcher","unit"];function o(e,t){"undefined"!=typeof console&&(console.warn("[vue-i18n] "+e),t&&console.warn(t.stack))}var s=Array.isArray;function l(e){return null!==e&&"object"==typeof e}function c(e){return"string"==typeof e}var u=Object.prototype.toString;function h(e){return"[object Object]"===u.call(e)}function p(e){return null==e}function f(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n=null,r=null;return 1===e.length?l(e[0])||Array.isArray(e[0])?r=e[0]:"string"==typeof e[0]&&(n=e[0]):2===e.length&&("string"==typeof e[0]&&(n=e[0]),(l(e[1])||Array.isArray(e[1]))&&(r=e[1])),{locale:n,params:r}}function d(e){return JSON.parse(JSON.stringify(e))}function m(e,t){return!!~e.indexOf(t)}var v=Object.prototype.hasOwnProperty;function g(e,t){return v.call(e,t)}function _(e){for(var t=arguments,n=Object(e),r=1;r<arguments.length;r++){var a=t[r];if(null!=a){var i=void 0;for(i in a)g(a,i)&&(l(a[i])?n[i]=_(n[i],a[i]):n[i]=a[i])}}return n}function y(e,t){if(e===t)return!0;var n=l(e),r=l(t);if(!n||!r)return!n&&!r&&String(e)===String(t);try{var a=Array.isArray(e),i=Array.isArray(t);if(a&&i)return e.length===t.length&&e.every((function(e,n){return y(e,t[n])}));if(a||i)return!1;var o=Object.keys(e),s=Object.keys(t);return o.length===s.length&&o.every((function(n){return y(e[n],t[n])}))}catch(e){return!1}}var b={beforeCreate:function(){var e=this.$options;if(e.i18n=e.i18n||(e.__i18n?{}:null),e.i18n)if(e.i18n instanceof J){if(e.__i18n)try{var t={};e.__i18n.forEach((function(e){t=_(t,JSON.parse(e))})),Object.keys(t).forEach((function(n){e.i18n.mergeLocaleMessage(n,t[n])}))}catch(e){0}this._i18n=e.i18n,this._i18nWatcher=this._i18n.watchI18nData()}else if(h(e.i18n)){var n=this.$root&&this.$root.$i18n&&this.$root.$i18n instanceof J?this.$root.$i18n:null;if(n&&(e.i18n.root=this.$root,e.i18n.formatter=n.formatter,e.i18n.fallbackLocale=n.fallbackLocale,e.i18n.formatFallbackMessages=n.formatFallbackMessages,e.i18n.silentTranslationWarn=n.silentTranslationWarn,e.i18n.silentFallbackWarn=n.silentFallbackWarn,e.i18n.pluralizationRules=n.pluralizationRules,e.i18n.preserveDirectiveContent=n.preserveDirectiveContent),e.__i18n)try{var r={};e.__i18n.forEach((function(e){r=_(r,JSON.parse(e))})),e.i18n.messages=r}catch(e){0}var a=e.i18n.sharedMessages;a&&h(a)&&(e.i18n.messages=_(e.i18n.messages,a)),this._i18n=new J(e.i18n),this._i18nWatcher=this._i18n.watchI18nData(),(void 0===e.i18n.sync||e.i18n.sync)&&(this._localeWatcher=this.$i18n.watchLocale()),n&&n.onComponentInstanceCreated(this._i18n)}else 0;else this.$root&&this.$root.$i18n&&this.$root.$i18n instanceof J?this._i18n=this.$root.$i18n:e.parent&&e.parent.$i18n&&e.parent.$i18n instanceof J&&(this._i18n=e.parent.$i18n)},beforeMount:function(){var e=this.$options;e.i18n=e.i18n||(e.__i18n?{}:null),e.i18n?(e.i18n instanceof J||h(e.i18n))&&(this._i18n.subscribeDataChanging(this),this._subscribing=!0):(this.$root&&this.$root.$i18n&&this.$root.$i18n instanceof J||e.parent&&e.parent.$i18n&&e.parent.$i18n instanceof J)&&(this._i18n.subscribeDataChanging(this),this._subscribing=!0)},beforeDestroy:function(){if(this._i18n){var e=this;this.$nextTick((function(){e._subscribing&&(e._i18n.unsubscribeDataChanging(e),delete e._subscribing),e._i18nWatcher&&(e._i18nWatcher(),e._i18n.destroyVM(),delete e._i18nWatcher),e._localeWatcher&&(e._localeWatcher(),delete e._localeWatcher)}))}}},x={name:"i18n",functional:!0,props:{tag:{type:[String,Boolean],default:"span"},path:{type:String,required:!0},locale:{type:String},places:{type:[Array,Object]}},render:function(e,t){var n=t.data,r=t.parent,a=t.props,i=t.slots,o=r.$i18n;if(o){var s=a.path,l=a.locale,c=a.places,u=i(),h=o.i(s,l,function(e){var t;for(t in e)if("default"!==t)return!1;return Boolean(t)}(u)||c?function(e,t){var n=t?function(e){0;return Array.isArray(e)?e.reduce(w,{}):Object.assign({},e)}(t):{};if(!e)return n;var r=(e=e.filter((function(e){return e.tag||""!==e.text.trim()}))).every(C);0;return e.reduce(r?E:w,n)}(u.default,c):u),p=a.tag&&!0!==a.tag||!1===a.tag?a.tag:"span";return p?e(p,n,h):h}}};function E(e,t){return t.data&&t.data.attrs&&t.data.attrs.place&&(e[t.data.attrs.place]=t),e}function w(e,t,n){return e[n]=t,e}function C(e){return Boolean(e.data&&e.data.attrs&&e.data.attrs.place)}var S,k={name:"i18n-n",functional:!0,props:{tag:{type:[String,Boolean],default:"span"},value:{type:Number,required:!0},format:{type:[String,Object]},locale:{type:String}},render:function(e,t){var n=t.props,r=t.parent,a=t.data,o=r.$i18n;if(!o)return null;var s=null,u=null;c(n.format)?s=n.format:l(n.format)&&(n.format.key&&(s=n.format.key),u=Object.keys(n.format).reduce((function(e,t){var r;return m(i,t)?Object.assign({},e,((r={})[t]=n.format[t],r)):e}),null));var h=n.locale||o.locale,p=o._ntp(n.value,h,s,u),f=p.map((function(e,t){var n,r=a.scopedSlots&&a.scopedSlots[e.type];return r?r(((n={})[e.type]=e.value,n.index=t,n.parts=p,n)):e.value})),d=n.tag&&!0!==n.tag||!1===n.tag?n.tag:"span";return d?e(d,{attrs:a.attrs,class:a.class,staticClass:a.staticClass},f):f}};function O(e,t,n){T(e,n)&&I(e,t,n)}function M(e,t,n,r){if(T(e,n)){var a=n.context.$i18n;(function(e,t){var n=t.context;return e._locale===n.$i18n.locale})(e,n)&&y(t.value,t.oldValue)&&y(e._localeMessage,a.getLocaleMessage(a.locale))||I(e,t,n)}}function N(e,t,n,r){if(n.context){var a=n.context.$i18n||{};t.modifiers.preserve||a.preserveDirectiveContent||(e.textContent=""),e._vt=void 0,delete e._vt,e._locale=void 0,delete e._locale,e._localeMessage=void 0,delete e._localeMessage}else o("Vue instance does not exists in VNode context")}function T(e,t){var n=t.context;return n?!!n.$i18n||(o("VueI18n instance does not exists in Vue instance"),!1):(o("Vue instance does not exists in VNode context"),!1)}function I(e,t,n){var r,a,i=function(e){var t,n,r,a;c(e)?t=e:h(e)&&(t=e.path,n=e.locale,r=e.args,a=e.choice);return{path:t,locale:n,args:r,choice:a}}(t.value),s=i.path,l=i.locale,u=i.args,p=i.choice;if(s||l||u)if(s){var f=n.context;e._vt=e.textContent=null!=p?(r=f.$i18n).tc.apply(r,[s,p].concat(R(l,u))):(a=f.$i18n).t.apply(a,[s].concat(R(l,u))),e._locale=f.$i18n.locale,e._localeMessage=f.$i18n.getLocaleMessage(f.$i18n.locale)}else o("`path` is required in v-t directive");else o("value type not supported")}function R(e,t){var n=[];return e&&n.push(e),t&&(Array.isArray(t)||h(t))&&n.push(t),n}function A(e){A.installed=!0;(S=e).version&&Number(S.version.split(".")[0]);(function(e){e.prototype.hasOwnProperty("$i18n")||Object.defineProperty(e.prototype,"$i18n",{get:function(){return this._i18n}}),e.prototype.$t=function(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];var r=this.$i18n;return r._t.apply(r,[e,r.locale,r._getMessages(),this].concat(t))},e.prototype.$tc=function(e,t){for(var n=[],r=arguments.length-2;r-- >0;)n[r]=arguments[r+2];var a=this.$i18n;return a._tc.apply(a,[e,a.locale,a._getMessages(),this,t].concat(n))},e.prototype.$te=function(e,t){var n=this.$i18n;return n._te(e,n.locale,n._getMessages(),t)},e.prototype.$d=function(e){for(var t,n=[],r=arguments.length-1;r-- >0;)n[r]=arguments[r+1];return(t=this.$i18n).d.apply(t,[e].concat(n))},e.prototype.$n=function(e){for(var t,n=[],r=arguments.length-1;r-- >0;)n[r]=arguments[r+1];return(t=this.$i18n).n.apply(t,[e].concat(n))}})(S),S.mixin(b),S.directive("t",{bind:O,update:M,unbind:N}),S.component(x.name,x),S.component(k.name,k),S.config.optionMergeStrategies.i18n=function(e,t){return void 0===t?e:t}}var L=function(){this._caches=Object.create(null)};L.prototype.interpolate=function(e,t){if(!t)return[e];var n=this._caches[e];return n||(n=function(e){var t=[],n=0,r="";for(;n<e.length;){var a=e[n++];if("{"===a){r&&t.push({type:"text",value:r}),r="";var i="";for(a=e[n++];void 0!==a&&"}"!==a;)i+=a,a=e[n++];var o="}"===a,s=D.test(i)?"list":o&&$.test(i)?"named":"unknown";t.push({value:i,type:s})}else"%"===a?"{"!==e[n]&&(r+=a):r+=a}return r&&t.push({type:"text",value:r}),t}(e),this._caches[e]=n),function(e,t){var n=[],r=0,a=Array.isArray(t)?"list":l(t)?"named":"unknown";if("unknown"===a)return n;for(;r<e.length;){var i=e[r];switch(i.type){case"text":n.push(i.value);break;case"list":n.push(t[parseInt(i.value,10)]);break;case"named":"named"===a&&n.push(t[i.value]);break;case"unknown":0}r++}return n}(n,t)};var D=/^(?:\d)+/,$=/^(?:\w)+/;var P=[];P[0]={ws:[0],ident:[3,0],"[":[4],eof:[7]},P[1]={ws:[1],".":[2],"[":[4],eof:[7]},P[2]={ws:[2],ident:[3,0],0:[3,0],number:[3,0]},P[3]={ident:[3,0],0:[3,0],number:[3,0],ws:[1,1],".":[2,1],"[":[4,1],eof:[7,1]},P[4]={"'":[5,0],'"':[6,0],"[":[4,2],"]":[1,3],eof:8,else:[4,0]},P[5]={"'":[4,0],eof:8,else:[5,0]},P[6]={'"':[4,0],eof:8,else:[6,0]};var V=/^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;function j(e){if(null==e)return"eof";switch(e.charCodeAt(0)){case 91:case 93:case 46:case 34:case 39:return e;case 95:case 36:case 45:return"ident";case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"ws"}return"ident"}function F(e){var t,n,r,a=e.trim();return("0"!==e.charAt(0)||!isNaN(e))&&(r=a,V.test(r)?(n=(t=a).charCodeAt(0))!==t.charCodeAt(t.length-1)||34!==n&&39!==n?t:t.slice(1,-1):"*"+a)}var z=function(){this._cache=Object.create(null)};z.prototype.parsePath=function(e){var t=this._cache[e];return t||(t=function(e){var t,n,r,a,i,o,s,l=[],c=-1,u=0,h=0,p=[];function f(){var t=e[c+1];if(5===u&&"'"===t||6===u&&'"'===t)return c++,r="\\"+t,p[0](),!0}for(p[1]=function(){void 0!==n&&(l.push(n),n=void 0)},p[0]=function(){void 0===n?n=r:n+=r},p[2]=function(){p[0](),h++},p[3]=function(){if(h>0)h--,u=4,p[0]();else{if(h=0,void 0===n)return!1;if(!1===(n=F(n)))return!1;p[1]()}};null!==u;)if(c++,"\\"!==(t=e[c])||!f()){if(a=j(t),8===(i=(s=P[u])[a]||s.else||8))return;if(u=i[0],(o=p[i[1]])&&(r=void 0===(r=i[2])?t:r,!1===o()))return;if(7===u)return l}}(e))&&(this._cache[e]=t),t||[]},z.prototype.getPathValue=function(e,t){if(!l(e))return null;var n=this.parsePath(t);if(0===n.length)return null;for(var r=n.length,a=e,i=0;i<r;){var o=a[n[i]];if(void 0===o)return null;a=o,i++}return a};var B,W=/<\/?[\w\s="/.':;#-\/]+>/,U=/(?:@(?:\.[a-z]+)?:(?:[\w\-_|.]+|\([\w\-_|.]+\)))/g,H=/^@(?:\.([a-z]+))?:/,q=/[()]/g,G={upper:function(e){return e.toLocaleUpperCase()},lower:function(e){return e.toLocaleLowerCase()},capitalize:function(e){return""+e.charAt(0).toLocaleUpperCase()+e.substr(1)}},K=new L,J=function(e){var t=this;void 0===e&&(e={}),!S&&"undefined"!=typeof window&&window.Vue&&A(window.Vue);var n=e.locale||"en-US",r=!1!==e.fallbackLocale&&(e.fallbackLocale||"en-US"),a=e.messages||{},i=e.dateTimeFormats||{},o=e.numberFormats||{};this._vm=null,this._formatter=e.formatter||K,this._modifiers=e.modifiers||{},this._missing=e.missing||null,this._root=e.root||null,this._sync=void 0===e.sync||!!e.sync,this._fallbackRoot=void 0===e.fallbackRoot||!!e.fallbackRoot,this._formatFallbackMessages=void 0!==e.formatFallbackMessages&&!!e.formatFallbackMessages,this._silentTranslationWarn=void 0!==e.silentTranslationWarn&&e.silentTranslationWarn,this._silentFallbackWarn=void 0!==e.silentFallbackWarn&&!!e.silentFallbackWarn,this._dateTimeFormatters={},this._numberFormatters={},this._path=new z,this._dataListeners=[],this._componentInstanceCreatedListener=e.componentInstanceCreatedListener||null,this._preserveDirectiveContent=void 0!==e.preserveDirectiveContent&&!!e.preserveDirectiveContent,this.pluralizationRules=e.pluralizationRules||{},this._warnHtmlInMessage=e.warnHtmlInMessage||"off",this._postTranslation=e.postTranslation||null,this.getChoiceIndex=function(e,n){var r=Object.getPrototypeOf(t);if(r&&r.getChoiceIndex)return r.getChoiceIndex.call(t,e,n);var a,i;return t.locale in t.pluralizationRules?t.pluralizationRules[t.locale].apply(t,[e,n]):(a=e,i=n,a=Math.abs(a),2===i?a?a>1?1:0:1:a?Math.min(a,2):0)},this._exist=function(e,n){return!(!e||!n)&&(!p(t._path.getPathValue(e,n))||!!e[n])},"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||Object.keys(a).forEach((function(e){t._checkLocaleMessage(e,t._warnHtmlInMessage,a[e])})),this._initVM({locale:n,fallbackLocale:r,messages:a,dateTimeFormats:i,numberFormats:o})},Q={vm:{configurable:!0},messages:{configurable:!0},dateTimeFormats:{configurable:!0},numberFormats:{configurable:!0},availableLocales:{configurable:!0},locale:{configurable:!0},fallbackLocale:{configurable:!0},formatFallbackMessages:{configurable:!0},missing:{configurable:!0},formatter:{configurable:!0},silentTranslationWarn:{configurable:!0},silentFallbackWarn:{configurable:!0},preserveDirectiveContent:{configurable:!0},warnHtmlInMessage:{configurable:!0},postTranslation:{configurable:!0}};J.prototype._checkLocaleMessage=function(e,t,n){var r=function(e,t,n,a){if(h(n))Object.keys(n).forEach((function(i){var o=n[i];h(o)?(a.push(i),a.push("."),r(e,t,o,a),a.pop(),a.pop()):(a.push(i),r(e,t,o,a),a.pop())}));else if(Array.isArray(n))n.forEach((function(n,i){h(n)?(a.push("["+i+"]"),a.push("."),r(e,t,n,a),a.pop(),a.pop()):(a.push("["+i+"]"),r(e,t,n,a),a.pop())}));else if(c(n)){if(W.test(n)){var i="Detected HTML in message '"+n+"' of keypath '"+a.join("")+"' at '"+t+"'. Consider component interpolation with '<i18n>' to avoid XSS. See https://bit.ly/2ZqJzkp";"warn"===e?o(i):"error"===e&&function(e,t){"undefined"!=typeof console&&(console.error("[vue-i18n] "+e),t&&console.error(t.stack))}(i)}}};r(t,e,n,[])},J.prototype._initVM=function(e){var t=S.config.silent;S.config.silent=!0,this._vm=new S({data:e}),S.config.silent=t},J.prototype.destroyVM=function(){this._vm.$destroy()},J.prototype.subscribeDataChanging=function(e){this._dataListeners.push(e)},J.prototype.unsubscribeDataChanging=function(e){!function(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)e.splice(n,1)}}(this._dataListeners,e)},J.prototype.watchI18nData=function(){var e=this;return this._vm.$watch("$data",(function(){for(var t=e._dataListeners.length;t--;)S.nextTick((function(){e._dataListeners[t]&&e._dataListeners[t].$forceUpdate()}))}),{deep:!0})},J.prototype.watchLocale=function(){if(!this._sync||!this._root)return null;var e=this._vm;return this._root.$i18n.vm.$watch("locale",(function(t){e.$set(e,"locale",t),e.$forceUpdate()}),{immediate:!0})},J.prototype.onComponentInstanceCreated=function(e){this._componentInstanceCreatedListener&&this._componentInstanceCreatedListener(e,this)},Q.vm.get=function(){return this._vm},Q.messages.get=function(){return d(this._getMessages())},Q.dateTimeFormats.get=function(){return d(this._getDateTimeFormats())},Q.numberFormats.get=function(){return d(this._getNumberFormats())},Q.availableLocales.get=function(){return Object.keys(this.messages).sort()},Q.locale.get=function(){return this._vm.locale},Q.locale.set=function(e){this._vm.$set(this._vm,"locale",e)},Q.fallbackLocale.get=function(){return this._vm.fallbackLocale},Q.fallbackLocale.set=function(e){this._localeChainCache={},this._vm.$set(this._vm,"fallbackLocale",e)},Q.formatFallbackMessages.get=function(){return this._formatFallbackMessages},Q.formatFallbackMessages.set=function(e){this._formatFallbackMessages=e},Q.missing.get=function(){return this._missing},Q.missing.set=function(e){this._missing=e},Q.formatter.get=function(){return this._formatter},Q.formatter.set=function(e){this._formatter=e},Q.silentTranslationWarn.get=function(){return this._silentTranslationWarn},Q.silentTranslationWarn.set=function(e){this._silentTranslationWarn=e},Q.silentFallbackWarn.get=function(){return this._silentFallbackWarn},Q.silentFallbackWarn.set=function(e){this._silentFallbackWarn=e},Q.preserveDirectiveContent.get=function(){return this._preserveDirectiveContent},Q.preserveDirectiveContent.set=function(e){this._preserveDirectiveContent=e},Q.warnHtmlInMessage.get=function(){return this._warnHtmlInMessage},Q.warnHtmlInMessage.set=function(e){var t=this,n=this._warnHtmlInMessage;if(this._warnHtmlInMessage=e,n!==e&&("warn"===e||"error"===e)){var r=this._getMessages();Object.keys(r).forEach((function(e){t._checkLocaleMessage(e,t._warnHtmlInMessage,r[e])}))}},Q.postTranslation.get=function(){return this._postTranslation},Q.postTranslation.set=function(e){this._postTranslation=e},J.prototype._getMessages=function(){return this._vm.messages},J.prototype._getDateTimeFormats=function(){return this._vm.dateTimeFormats},J.prototype._getNumberFormats=function(){return this._vm.numberFormats},J.prototype._warnDefault=function(e,t,n,r,a,i){if(!p(n))return n;if(this._missing){var o=this._missing.apply(null,[e,t,r,a]);if(c(o))return o}else 0;if(this._formatFallbackMessages){var s=f.apply(void 0,a);return this._render(t,i,s.params,t)}return t},J.prototype._isFallbackRoot=function(e){return!e&&!p(this._root)&&this._fallbackRoot},J.prototype._isSilentFallbackWarn=function(e){return this._silentFallbackWarn instanceof RegExp?this._silentFallbackWarn.test(e):this._silentFallbackWarn},J.prototype._isSilentFallback=function(e,t){return this._isSilentFallbackWarn(t)&&(this._isFallbackRoot()||e!==this.fallbackLocale)},J.prototype._isSilentTranslationWarn=function(e){return this._silentTranslationWarn instanceof RegExp?this._silentTranslationWarn.test(e):this._silentTranslationWarn},J.prototype._interpolate=function(e,t,n,r,a,i,o){if(!t)return null;var s,l=this._path.getPathValue(t,n);if(Array.isArray(l)||h(l))return l;if(p(l)){if(!h(t))return null;if(!c(s=t[n]))return null}else{if(!c(l))return null;s=l}return(s.indexOf("@:")>=0||s.indexOf("@.")>=0)&&(s=this._link(e,t,s,r,"raw",i,o)),this._render(s,a,i,n)},J.prototype._link=function(e,t,n,r,a,i,o){var s=n,l=s.match(U);for(var c in l)if(l.hasOwnProperty(c)){var u=l[c],h=u.match(H),p=h[0],f=h[1],d=u.replace(p,"").replace(q,"");if(m(o,d))return s;o.push(d);var v=this._interpolate(e,t,d,r,"raw"===a?"string":a,"raw"===a?void 0:i,o);if(this._isFallbackRoot(v)){if(!this._root)throw Error("unexpected error");var g=this._root.$i18n;v=g._translate(g._getMessages(),g.locale,g.fallbackLocale,d,r,a,i)}v=this._warnDefault(e,d,v,r,Array.isArray(i)?i:[i],a),this._modifiers.hasOwnProperty(f)?v=this._modifiers[f](v):G.hasOwnProperty(f)&&(v=G[f](v)),o.pop(),s=v?s.replace(u,v):s}return s},J.prototype._render=function(e,t,n,r){var a=this._formatter.interpolate(e,n,r);return a||(a=K.interpolate(e,n,r)),"string"!==t||c(a)?a:a.join("")},J.prototype._appendItemToChain=function(e,t,n){var r=!1;return m(e,t)||(r=!0,t&&(r="!"!==t[t.length-1],t=t.replace(/!/g,""),e.push(t),n&&n[t]&&(r=n[t]))),r},J.prototype._appendLocaleToChain=function(e,t,n){var r,a=t.split("-");do{var i=a.join("-");r=this._appendItemToChain(e,i,n),a.splice(-1,1)}while(a.length&&!0===r);return r},J.prototype._appendBlockToChain=function(e,t,n){for(var r=!0,a=0;a<t.length&&"boolean"==typeof r;a++){var i=t[a];c(i)&&(r=this._appendLocaleToChain(e,i,n))}return r},J.prototype._getLocaleChain=function(e,t){if(""===e)return[];this._localeChainCache||(this._localeChainCache={});var n=this._localeChainCache[e];if(!n){t||(t=this.fallbackLocale),n=[];for(var r,a=[e];s(a);)a=this._appendBlockToChain(n,a,t);(a=c(r=s(t)?t:l(t)?t.default?t.default:null:t)?[r]:r)&&this._appendBlockToChain(n,a,null),this._localeChainCache[e]=n}return n},J.prototype._translate=function(e,t,n,r,a,i,o){for(var s,l=this._getLocaleChain(t,n),c=0;c<l.length;c++){var u=l[c];if(!p(s=this._interpolate(u,e[u],r,a,i,o,[r])))return s}return null},J.prototype._t=function(e,t,n,r){for(var a,i=[],o=arguments.length-4;o-- >0;)i[o]=arguments[o+4];if(!e)return"";var s=f.apply(void 0,i),l=s.locale||t,c=this._translate(n,l,this.fallbackLocale,e,r,"string",s.params);if(this._isFallbackRoot(c)){if(!this._root)throw Error("unexpected error");return(a=this._root).$t.apply(a,[e].concat(i))}return c=this._warnDefault(l,e,c,r,i,"string"),this._postTranslation&&null!=c&&(c=this._postTranslation(c,e)),c},J.prototype.t=function(e){for(var t,n=[],r=arguments.length-1;r-- >0;)n[r]=arguments[r+1];return(t=this)._t.apply(t,[e,this.locale,this._getMessages(),null].concat(n))},J.prototype._i=function(e,t,n,r,a){var i=this._translate(n,t,this.fallbackLocale,e,r,"raw",a);if(this._isFallbackRoot(i)){if(!this._root)throw Error("unexpected error");return this._root.$i18n.i(e,t,a)}return this._warnDefault(t,e,i,r,[a],"raw")},J.prototype.i=function(e,t,n){return e?(c(t)||(t=this.locale),this._i(e,t,this._getMessages(),null,n)):""},J.prototype._tc=function(e,t,n,r,a){for(var i,o=[],s=arguments.length-5;s-- >0;)o[s]=arguments[s+5];if(!e)return"";void 0===a&&(a=1);var l={count:a,n:a},c=f.apply(void 0,o);return c.params=Object.assign(l,c.params),o=null===c.locale?[c.params]:[c.locale,c.params],this.fetchChoice((i=this)._t.apply(i,[e,t,n,r].concat(o)),a)},J.prototype.fetchChoice=function(e,t){if(!e&&!c(e))return null;var n=e.split("|");return n[t=this.getChoiceIndex(t,n.length)]?n[t].trim():e},J.prototype.tc=function(e,t){for(var n,r=[],a=arguments.length-2;a-- >0;)r[a]=arguments[a+2];return(n=this)._tc.apply(n,[e,this.locale,this._getMessages(),null,t].concat(r))},J.prototype._te=function(e,t,n){for(var r=[],a=arguments.length-3;a-- >0;)r[a]=arguments[a+3];var i=f.apply(void 0,r).locale||t;return this._exist(n[i],e)},J.prototype.te=function(e,t){return this._te(e,this.locale,this._getMessages(),t)},J.prototype.getLocaleMessage=function(e){return d(this._vm.messages[e]||{})},J.prototype.setLocaleMessage=function(e,t){"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||this._checkLocaleMessage(e,this._warnHtmlInMessage,t),this._vm.$set(this._vm.messages,e,t)},J.prototype.mergeLocaleMessage=function(e,t){"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||this._checkLocaleMessage(e,this._warnHtmlInMessage,t),this._vm.$set(this._vm.messages,e,_({},this._vm.messages[e]||{},t))},J.prototype.getDateTimeFormat=function(e){return d(this._vm.dateTimeFormats[e]||{})},J.prototype.setDateTimeFormat=function(e,t){this._vm.$set(this._vm.dateTimeFormats,e,t),this._clearDateTimeFormat(e,t)},J.prototype.mergeDateTimeFormat=function(e,t){this._vm.$set(this._vm.dateTimeFormats,e,_(this._vm.dateTimeFormats[e]||{},t)),this._clearDateTimeFormat(e,t)},J.prototype._clearDateTimeFormat=function(e,t){for(var n in t){var r=e+"__"+n;this._dateTimeFormatters.hasOwnProperty(r)&&delete this._dateTimeFormatters[r]}},J.prototype._localizeDateTime=function(e,t,n,r,a){for(var i=t,o=r[i],s=this._getLocaleChain(t,n),l=0;l<s.length;l++){var c=s[l];if(i=c,!p(o=r[c])&&!p(o[a]))break}if(p(o)||p(o[a]))return null;var u=o[a],h=i+"__"+a,f=this._dateTimeFormatters[h];return f||(f=this._dateTimeFormatters[h]=new Intl.DateTimeFormat(i,u)),f.format(e)},J.prototype._d=function(e,t,n){if(!n)return new Intl.DateTimeFormat(t).format(e);var r=this._localizeDateTime(e,t,this.fallbackLocale,this._getDateTimeFormats(),n);if(this._isFallbackRoot(r)){if(!this._root)throw Error("unexpected error");return this._root.$i18n.d(e,n,t)}return r||""},J.prototype.d=function(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];var r=this.locale,a=null;return 1===t.length?c(t[0])?a=t[0]:l(t[0])&&(t[0].locale&&(r=t[0].locale),t[0].key&&(a=t[0].key)):2===t.length&&(c(t[0])&&(a=t[0]),c(t[1])&&(r=t[1])),this._d(e,r,a)},J.prototype.getNumberFormat=function(e){return d(this._vm.numberFormats[e]||{})},J.prototype.setNumberFormat=function(e,t){this._vm.$set(this._vm.numberFormats,e,t),this._clearNumberFormat(e,t)},J.prototype.mergeNumberFormat=function(e,t){this._vm.$set(this._vm.numberFormats,e,_(this._vm.numberFormats[e]||{},t)),this._clearNumberFormat(e,t)},J.prototype._clearNumberFormat=function(e,t){for(var n in t){var r=e+"__"+n;this._numberFormatters.hasOwnProperty(r)&&delete this._numberFormatters[r]}},J.prototype._getNumberFormatter=function(e,t,n,r,a,i){for(var o=t,s=r[o],l=this._getLocaleChain(t,n),c=0;c<l.length;c++){var u=l[c];if(o=u,!p(s=r[u])&&!p(s[a]))break}if(p(s)||p(s[a]))return null;var h,f=s[a];if(i)h=new Intl.NumberFormat(o,Object.assign({},f,i));else{var d=o+"__"+a;(h=this._numberFormatters[d])||(h=this._numberFormatters[d]=new Intl.NumberFormat(o,f))}return h},J.prototype._n=function(e,t,n,r){if(!J.availabilities.numberFormat)return"";if(!n)return(r?new Intl.NumberFormat(t,r):new Intl.NumberFormat(t)).format(e);var a=this._getNumberFormatter(e,t,this.fallbackLocale,this._getNumberFormats(),n,r),i=a&&a.format(e);if(this._isFallbackRoot(i)){if(!this._root)throw Error("unexpected error");return this._root.$i18n.n(e,Object.assign({},{key:n,locale:t},r))}return i||""},J.prototype.n=function(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];var r=this.locale,a=null,o=null;return 1===t.length?c(t[0])?a=t[0]:l(t[0])&&(t[0].locale&&(r=t[0].locale),t[0].key&&(a=t[0].key),o=Object.keys(t[0]).reduce((function(e,n){var r;return m(i,n)?Object.assign({},e,((r={})[n]=t[0][n],r)):e}),null)):2===t.length&&(c(t[0])&&(a=t[0]),c(t[1])&&(r=t[1])),this._n(e,r,a,o)},J.prototype._ntp=function(e,t,n,r){if(!J.availabilities.numberFormat)return[];if(!n)return(r?new Intl.NumberFormat(t,r):new Intl.NumberFormat(t)).formatToParts(e);var a=this._getNumberFormatter(e,t,this.fallbackLocale,this._getNumberFormats(),n,r),i=a&&a.formatToParts(e);if(this._isFallbackRoot(i)){if(!this._root)throw Error("unexpected error");return this._root.$i18n._ntp(e,t,n,r)}return i||[]},Object.defineProperties(J.prototype,Q),Object.defineProperty(J,"availabilities",{get:function(){if(!B){var e="undefined"!=typeof Intl;B={dateTimeFormat:e&&void 0!==Intl.DateTimeFormat,numberFormat:e&&void 0!==Intl.NumberFormat}}return B}}),J.install=A,J.version="8.18.2";var X=J,Z=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("el-container",{class:["ec-doc","ec-doc-"+e.shared.docType,"ec-doc-locale-"+e.shared.locale]},[n("el-aside",{staticStyle:{height:"100%"},attrs:{width:"300px"}},[n("div",{staticClass:"doc-type-nav"},[n("a",{class:{selected:"option"===e.shared.docType},attrs:{href:"option.html#title"}},[e._v(e._s(e.$t("nav.option")))]),e._v(" "),n("a",{class:{selected:"api"===e.shared.docType},attrs:{href:"api.html#echarts"}},[e._v(e._s(e.$t("nav.API")))]),e._v(" "),n("a",{class:{selected:"tutorial"===e.shared.docType},attrs:{href:"tutorial.html"}},[e._v(e._s(e.$t("nav.tutorial")))]),e._v(" "),n("a",{class:{selected:"option-gl"===e.shared.docType},attrs:{href:"option-gl.html"}},[e._v(e._s(e.$t("nav.optionGL")))])]),e._v(" "),n("Search"),e._v(" "),n("DocNav")],1),e._v(" "),n("el-main",[e.shared.fuzzySearch?n("SearchResult"):n("DocContent",{key:e.pagePath})],1)],1)};Z._withStripped=!0;var Y=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticClass:"doc-nav"},[e.isOption?n("h3",[e._v(e._s(e.title))]):e._e(),e._v(" "),n("div",{staticClass:"toolbox"},[e.isOption?n("span",{staticClass:"item",on:{click:e.collapseAll}},[n("i",{staticClass:"el-icon-s-fold"}),e._v(e._s(e.$t("nav.collapseAll")))]):e._e()]),e._v(" "),n("el-tree",{ref:"tree",attrs:{"node-key":"path","empty-text":"",props:e.props,lazy:"","default-expanded-keys":e.expandedKeys,indent:10,"expand-on-click-node":!1,load:e.loadTreeNode,data:e.treeData,"current-node-key":e.initialSelectedNode},on:{"current-change":e.onSelectNode},scopedSlots:e._u([{key:"default",fn:function(t){var r=t.node,a=t.data;return"tutorial"!==e.shared.docType?n("div",{staticClass:"doc-nav-item"},[n("span",[e._v(e._s(r.expanded&&a.labelExpanded||a.label))]),e._v(" "),null!=a.defaultValue?n("span",{staticClass:"default-value"},[e._v(e._s(a.defaultValue))]):r.isLeaf?n("span",{staticClass:"default-value"},[e._v("...")]):e._e(),e._v(" "),a.isRoot||r.expanded?e._e():n("span",[e._v(",")])]):n("div",{staticClass:"doc-nav-item"},[n("span",[e._v(e._s(a.label))])])}}],null,!0)})],1)};Y._withStripped=!0;var ee,te,ne,re,ae=n(21),ie=n(23);function oe(e){return(oe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var se,le,ce={},ue={},he=[];function pe(e){return new Promise((function(t,n){var r=Object(ie.getDocJSONPVarNname)(e),a="".concat(ee,"/").concat(e,"?").concat(ne),i=document.createElement("script");i.async=!0,i.onload=function(){window[r]?t(window[r]):n("Load failed. ".concat(r))},i.src=a,document.body.appendChild(i)}))}function fe(e){return"doc-content-"+e.replace(/[\. <>]/g,"-")}function de(){if(!re)throw new Error("Preload json with url first");return re}function me(e,t,n,r){return e,ee=t,te=n,ne=r||"1",re||(re=pe("".concat(te,"-outline.js")).then((function(e){return function(e){function t(e,t,n){return e?e+n+t:t}function n(e,r){e.type||(e.type=oe(e.default)),e.type instanceof Array||(e.type=[e.type]);for(var a=0;a<e.type.length;a++)"*"===e.type[a]&&(e.type[a]="any");if(e.arrayItemType?e.path=t(r.path,e.arrayItemType,"-"):e.path=t(r.path,e.prop,"."),e.children){e.path.indexOf(".")<0&&!e.children[0].arrayItemType&&(se[e.path]=e);for(var i=0;i<e.children.length;i++)n(e.children[i],e)}ue[e.path]=e}e,se={};for(var r=0;r<e.children.length;r++)n(e.children[r],{});return e.isRoot=!0,he=Object.keys(ue),e}(e)}))),re}function ve(e){if(!se)throw new Error("Outline data is not loaded.");var t=e.split(".")[0],n=se[t]&&e?te+"."+t:te;if(!ce[n]){var r=pe("".concat(n,".js"));ce[n]={fetcher:r},r.then((function(e){ce[n].indexer=function(e,t){var n,r=[];for(var a in e)r.push({path:t?t+"."+a:a,content:e[a].desc,text:(n=e[a].desc,n.replace(/<[^>]*>?/gm,""))});return{search:function(e){var t=[],n=e.split(/[ +,]/).filter((function(e){return!!e})).map((function(e){return new RegExp(e,"i")}));if(!n.length)return t;for(var a=0;a<r.length;a++){for(var i=!0,o=0;o<n.length;o++)if(!n[o].test(r[a].text)&&!n[o].test(r[a].path)){i=!1;break}i&&t.push(r[a])}return t}}}(e,t)}))}return ce[n]}function ge(e){return ve(e).fetcher}function _e(e){return ue[e]}function ye(e){if(!e)return Object.keys(se)[0];if(_e(e.replace("[i]","")))return e.replace("[i]","");var t,n=e.split(".").map((function(e){var t=_e(e),n=t&&t.children&&t&&t.children[0];return n&&n.arrayItemType?e+"-"+n.arrayItemType:e}));if(_e(n.join(".")))return n.join(".");for(var r=-1/0,a=0;a<he.length;a++){var i=he[a],o=Object(ae.stringSimilarity)(e,i);o>r&&(r=o,t=i)}return t}function be(e){return(be="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var xe=["auto","top","bottom","right"];function Ee(e){ke.computedOptionExampleLayout="auto"===e?window.innerWidth<1400?"bottom":"right":e,ke.optionExampleLayout=e,window.localStorage&&window.localStorage.setItem("_ec_option_example_layout",e)}var we,Ce,Se=(we={},!(Ce=window.localStorage&&window.localStorage.getItem("_ec_option_example_layout"))||"auto"===Ce||xe.indexOf(Ce)<0?(we.mode="auto",we.computedMode=window.innerWidth<1400?"bottom":"right"):we.mode=we.computedMode=Ce,we),ke={docType:"",currentPath:"",fuzzySearch:!1,searchQuery:"",isMobile:!1,locale:"zh",showOptionExample:!1,allOptionExamples:null,cleanMode:!1,currentExampleName:"",currentExampleOption:"",optionExampleLayout:Se.mode,computedOptionExampleLayout:Se.computedMode};function Oe(){if(ke.isMobile){var e=ke.currentPath.split("."),t=_e(ke.currentPath);return t&&(!t.children||!t.children.length)&&e.length>1&&e.pop(),e.join(".")}return ke.currentPath.split(".")[0]}function Me(){return"option"===ke.docType||"option-gl"===ke.docType}var Ne=["markPoint","markLine","markArea","tooltip","axisPointer"];function Te(e,t,n){function r(e,t,a,i){var o=t.shift();if(i=(i?i+".":"")+o,"data"!==a||"object"===be(e)&&!Array.isArray(e)||(e={value:e}),e=Object.assign({},e),!t.length)return void 0===n?(delete e[o],e):(e[o]=n,e);var s=o.split("-"),l=s[0],c=s[1];if(null==e[l]){var u=_e(i);e[l]=function(e){return"markPoint"===e?{data:[{type:"max"}]}:"markLine"===e?{data:[{type:"average"}]}:"markArea"===e?{data:[[{type:"min"},{type:"max"}]]}:void 0}(l)||(u&&u.isArray?[]:{})}var h=e[l];return Array.isArray(h)?"series"===l?e[l]=h.map((function(e,n){return c&&e.type!==c?e:r(e,t.slice(),l,i)})):(e[l]=h.slice(),e[l][0]=r(e[l][0]||{},t.slice(),l,i)):(c&&h.type!==c&&(e[l]=h),e[l]=r(h,t.slice(),l,i)),e}var a=t.split(".")[0];return"timeline"===a&&e.baseOption?Object.assign({},e,{baseOption:r(e.baseOption,t.split("."),"","")}):Ne.indexOf(a)>=0?function e(n,a){if(n[a])return r(n,t.split("."),"","");if(Array.isArray(n)){for(var i=[],o=0;o<n.length;o++)i.push(e(n[o],a));return i}if("object"===be(n)){var s={};for(var l in n)n.hasOwnProperty(l)&&(s[l]=e(n[l],a));return s}return n}(e,a):r(e,t.split("."),"","")}function Ie(){var e=decodeURIComponent(window.location.hash.slice(1));if(e.startsWith("/search/")){var t=e.substr("/search/".length);ke.fuzzySearch=!0,ke.searchQuery=t}else e&&(ke.currentPath=e,ke.fuzzySearch=!1)}function Re(e){window.location.hash="#"+encodeURIComponent(e)}var Ae=n(1),Le=n.n(Ae);function De(e,t){var n=[];return t.children&&t.children.forEach((function(e){var t,r;n.push(((r={path:(t=e).path}).path=t.path,t.arrayItemType?(r.label="{type: ".concat(t.arrayItemType,", ...}"),r.labelExpanded="{"):null!=t.default?(r.defaultValue=t.default,r.label=t.prop+": ",r.leaf=!0):t.isArray?(r.label=t.prop+": [{...}]",r.labelExpanded=t.prop+": [{"):t.isObject?(r.label=t.prop+": {...}",r.labelExpanded=t.prop+": {"):(r.label=t.prop,r.leaf=!0),r.$source=Object.freeze(t),r))})),n}var $e={data:function(){return{props:{isLeaf:"leaf"},title:"setOption({",treeData:[],expandedKeys:[],loading:!0,shared:ke,initialSelectedNode:ke.currentPath}},created:function(){this.updateTreeSelectionAndExpand()},computed:{isOption:function(){return Me()}},methods:{updateTreeSelectionAndExpand:function(){this.expandedKeys=[];for(var e,t=this.shared.currentPath;(e=t.lastIndexOf("."))>=0||(e=t.lastIndexOf("-"))>=0;)t=t.substr(0,e),this.expandedKeys.push(t)},loadTreeNode:function(e,t){var n=this;0===e.level?(this.loading=!1,de().then((function(r){t(De(e.data,r)),setTimeout((function(){n.scrollToCurrentTreeNode()}),200)}))):e.data.children&&e.data.children.length?t(e.data.children):e.data.$source?t(De(e.data,e.data.$source)):t([])},onSelectNode:function(e,t){this.shared.currentPath=e.path},scrollToCurrentTreeNode:function(){var e=this.$el.querySelector(".el-tree-node.is-current");if(e){var t=e.getBoundingClientRect(),n=this.$el.getBoundingClientRect();(t.top>n.bottom||t.bottom<n.top)&&Le()(e,{time:500,align:{top:.1}})}},manualSelectNode:function(e){var t=this;this.updateTreeSelectionAndExpand(),setTimeout((function(){t.$refs.tree.setCurrentKey(null),t.$refs.tree.setCurrentKey(e),setTimeout((function(){t.scrollToCurrentTreeNode()}),200)}),50)},collapseAll:function(){for(var e in this.$refs.tree.store.nodesMap)this.$refs.tree.store.nodesMap[e].expanded=!1}},watch:{"shared.currentPath":function(e){Re(e),this.manualSelectNode(e)}}};n(32);function Pe(e,t,n,r,a,i,o,s){var l,c="function"==typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),r&&(c.functional=!0),i&&(c._scopeId="data-v-"+i),o?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),a&&a.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(o)},c._ssrRegister=l):a&&(l=s?function(){a.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:a),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var h=c.beforeCreate;c.beforeCreate=h?[].concat(h,l):[l]}return{exports:e,options:c}}var Ve=Pe($e,Y,[],!1,null,null,null);Ve.options.__file="src/components/DocNav.vue";var je=Ve.exports,Fe=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticClass:"doc-main"},[n("div",{ref:"docContentDom",class:["doc-content",e.shared.showOptionExample?"option-example-actived":"","option-example-"+e.shared.computedOptionExampleLayout+"-layout"]},[n("h2",{attrs:{id:e.pageId}},[e._v(e._s(e.pageTitle))]),e._v(" "),e.pageDesc?n("div",{directives:[{name:"highlight",rawName:"v-highlight"}],staticClass:"page-description",domProps:{innerHTML:e._s(e.pageDesc)}}):e._e(),e._v(" "),e.pageDisplayOutline.children&&e.pageDisplayOutline.children&&1<=e.maxDepth?n("div",[n("h3",[e._v(e._s(e.$t("content.properties")))]),e._v(" "),e._l(e.pageDisplayOutline.children,(function(t){return n("DocContentItemCard",{key:t.path,attrs:{"node-data":t,"desc-map":e.pageDescMap,"max-depth":e.maxDepth,depth:1},on:{"scroll-to-self":e.scrollTo,"toggle-expanded":e.handleCardExpandToggle}})}))],2):e._e()]),e._v(" "),e.showLiveExample?[e.shared.showOptionExample?n("LiveExample",{ref:"liveExample"}):n("div",{staticClass:"open-option-example",on:{click:e.openOptionExample}},[n("i",{staticClass:"el-icon-data-line"}),e._v(" "+e._s(e.$t("example.titleShort"))+"\n        ")])]:e._e()],2)};Fe._withStripped=!0;var ze=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:["doc-content-item-card","level-"+e.depth,e.isLeaf?"leaf":"",e.shared.currentPath===e.nodeData.path?"current":""],attrs:{id:e.itemId}},[e.expanded?n("div",{staticClass:"hierarchy-line"}):e._e(),e._v(" "),n("h4",[e.depth>1?n("span",{staticClass:"guider"}):e._e(),e._v(" "),e.supportsExpandable?n("i",{staticClass:"expand-toggle",class:e.expanded?"el-icon-remove-outline":"el-icon-circle-plus-outline",on:{click:e.toggleExpanded}}):e._e(),e._v(" "),e.shared.isMobile?e._e():n("span",{staticClass:"path-parent"},e._l(e.parentPath,(function(t){return n("a",{key:t.link,attrs:{href:"#"+t.link}},[e._v(e._s(t.text)+".")])})),0),e._v(" "),n("span",{staticClass:"path-base"},[n("a",{attrs:{href:"#"+e.baseName.link}},[e._v(e._s(e.baseName.text))])]),e._v(" "),e.shared.currentPath===e.nodeData.path?n("span",{staticClass:"current-flag"},[n("i",{staticClass:"el-icon-caret-left"})]):e._e(),e._v(" "),e.nodeData.default&&"*"!==e.nodeData.default?n("span",{staticClass:"default-value"},[e._v(" = "+e._s(e.nodeData.default))]):e._e(),e._v(" "),e.uiControl&&e.shared.allOptionExamples&&!e.shared.isMobile?n("span",{class:["control-toggle",e.enableUIControl?"active":""],on:{click:e.toggleUIControl}},[n("i",[e._v("")]),e._v(" "+e._s(e.$t("example.tryDesc"))+"\n            ")]):e._e()]),e._v(" "),n("div",{staticClass:"prop-types"},e._l(e.nodeData.type,(function(t){return n("span",{key:t,class:["prop-type","prop-type-"+t.toLowerCase()]},[e._v(e._s(t))])})),0),e._v(" "),e.enableUIControl?n("OptionControl",{attrs:{controlConfig:e.uiControl,optionPath:e.nodeData.path}}):e._e(),e._v(" "),n("div",{directives:[{name:"highlight",rawName:"v-highlight"}],staticClass:"item-description",domProps:{innerHTML:e._s(e.desc)}}),e._v(" "),e.supportsExpandable&&e.expanded?n("div",{staticClass:"children"},e._l(e.nodeData.children,(function(t){return n("DocContentItemCard",{key:t.path,attrs:{"node-data":t,"desc-map":e.descMap,depth:e.depth+1,"max-depth":e.maxDepth},on:{"toggle-expanded":e.bubbleEventToggleExapndedEvent,"scroll-to-self":e.bubbleScrollToSelfEvent}})})),1):e._e(),e._v(" "),e.expanded&&!e.shared.isMobile||e.isLeaf?e._e():n("PropertiesList",{attrs:{nodeData:e.nodeData,descMap:e.descMap}})],1)};ze._withStripped=!0;var Be=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"properties-list-panel"},[n("h5",[e._v(e._s(e.$t("content.properties")))]),e._v(" "),n("div",{staticClass:"properties-list"},[e._v("\n        {\n        "),e._l(e.displayedProperties,(function(t,r){return n("span",{key:t.path},[e.shared.isMobile?n("span",[n("a",{attrs:{slot:"reference",href:"#"+t.path},slot:"reference"},[e._v(e._s(e.getName(t.path)))])]):n("el-popover",{attrs:{title:e.getName(t.path),"close-delay":400,"open-delay":200,placement:"top",trigger:"hover"}},[n("div",{directives:[{name:"highlight",rawName:"v-highlight"}],staticClass:"property-popup-desc",domProps:{innerHTML:e._s(e.getDesc(t.path))}}),e._v(" "),n("a",{attrs:{slot:"reference",href:"#"+t.path},slot:"reference"},[e._v(e._s(e.getName(t.path)))])]),e._v(" "),r<e.displayedProperties.length-1?n("span",[e._v(", ")]):e._e()],1)})),e._v("\n        }\n    ")],2)])};Be._withStripped=!0;var We={props:["nodeData","descMap"],data:function(){return{shared:ke}},computed:{displayedProperties:function(){return this.nodeData.children}},methods:{getDesc:function(e){return this.descMap[e]&&this.descMap[e].desc},getName:function(e){return e.split(".").pop()}}},Ue=(n(33),Pe(We,Be,[],!1,null,null,null));Ue.options.__file="src/components/PropertiesList.vue";var He=Ue.exports,qe=function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"option-control"},[t(this.uiComponent,this._b({tag:"component",attrs:{value:this.defaultValue},on:{change:this.onValueChange}},"component",this.uiAttrs,!1))],1)};qe._withStripped=!0;var Ge=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"control-color"},[n("el-color-picker",{attrs:{"show-alpha":!0},on:{change:e.onValueChange,"active-change":e.onActiveChange},model:{value:e.innerValue,callback:function(t){e.innerValue=t},expression:"innerValue"}}),e._v(" "),n("span",{style:{color:e.innerValue||"#aaa"}},[e._v("\n    "+e._s(e.innerValue||e.$t("example.defaultColor"))+"\n")])],1)};Ge._withStripped=!0;var Ke={props:["value"],data:function(){return{innerValue:this.value}},watch:{value:function(e){this.innerValue=e}},methods:{onValueChange:function(){this.$emit("change",this.innerValue)},onActiveChange:function(e){}}},Je=(n(34),Pe(Ke,Ge,[],!1,null,null,null));Je.options.__file="src/controls/ControlColor.vue";var Qe=Je.exports,Xe=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"control-boolean"},[n("el-switch",{attrs:{"active-text":e.$t("example.booleanDesc")},on:{change:e.onValueChange},model:{value:e.innerValue,callback:function(t){e.innerValue=t},expression:"innerValue"}})],1)};Xe._withStripped=!0;var Ze=Pe({props:["value"],data:function(){return{innerValue:"true"===this.value}},watch:{value:function(e){this.innerValue=e}},methods:{onValueChange:function(){this.$emit("change",this.innerValue)}}},Xe,[],!1,null,null,null);Ze.options.__file="src/controls/ControlBoolean.vue";var Ye=Ze.exports,et=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"control-number"},[n("el-input-number",{attrs:{"controls-position":"right",min:null==e.min?-1e4:+e.min,max:null==e.max?1e4:+e.max,step:null==e.step?1:+e.step,size:"mini"},on:{change:e.onValueChange},model:{value:e.innerValue,callback:function(t){e.innerValue=t},expression:"innerValue"}})],1)};et._withStripped=!0;var tt={props:["value","min","max","step"],data:function(){return{innerValue:this.value}},watch:{value:function(e){this.innerValue=e}},methods:{onValueChange:function(){this.$emit("change",this.innerValue)}}},nt=(n(35),Pe(tt,et,[],!1,null,null,null));nt.options.__file="src/controls/ControlNumber.vue";var rt=nt.exports,at=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"control-vector"},[n("el-switch",{attrs:{"active-text":e.$t("example.vectorSetSeparate")},model:{value:e.innerSeparate,callback:function(t){e.innerSeparate=t},expression:"innerSeparate"}}),e._v(" "),e.innerSeparate?n("div",{staticClass:"control-vector-group"},e._l(e.dimsArr,(function(t,r){return n("div",{key:r},[n("label",[e._v(e._s(t))]),e._v(" "),n("el-input-number",{attrs:{"controls-position":"right",min:null==e.min?-1e4:+e.min,max:null==e.max?1e4:+e.max,step:null==e.step?1:+e.step,size:"mini"},on:{change:e.onValueChange},model:{value:e.innerValueArr[r],callback:function(t){e.$set(e.innerValueArr,r,t)},expression:"innerValueArr[index]"}})],1)})),0):n("el-input-number",{attrs:{"controls-position":"right",size:"mini",min:null==e.min?-1e4:+e.min,max:null==e.max?1e4:+e.max,step:null==e.step?1:+e.step},on:{change:e.onValueChange},model:{value:e.innerValueArr[0],callback:function(t){e.$set(e.innerValueArr,0,t)},expression:"innerValueArr[0]"}})],1)};at._withStripped=!0;var it={props:["value","separate","min","max","step","dims"],data:function(){return{innerSeparate:"true"===this.separate,innerValueArr:this.value.split(",").map((function(e){return+e.trim()}))}},computed:{dimsArr:function(){return this.dims.split(",").map((function(e){return e.trim()}))}},watch:{value:function(e){this.innerValueArr=this.value.split(",").map((function(e){return+e.trim()}))}},methods:{onValueChange:function(){if(!this.innerSeparate)for(var e=1;e<this.innerValueArr.length;e++)this.innerValueArr[e]=this.innerValueArr[0];this.$emit("change",this.innerValueArr.slice())}}},ot=(n(36),Pe(it,at,[],!1,null,null,null));ot.options.__file="src/controls/ControlVector.vue";var st=ot.exports,lt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"control-enum"},[n("el-select",{attrs:{size:"mini"},on:{change:e.onValueChange},model:{value:e.innerValue,callback:function(t){e.innerValue=t},expression:"innerValue"}},e._l(e.optionsArr,(function(t){return n("el-option",{key:t,class:{"control-enum-special":null!=e.specialValues[t]},attrs:{value:t}},[e._v(e._s(t))])})),1)],1)};lt._withStripped=!0;var ct={true:!0,false:!1},ut={props:["value","options"],computed:{optionsArr:function(){return this.options.split(",").map((function(e){return e.trim()}))},specialValues:function(){return ct}},data:function(){return{innerValue:this.value}},watch:{value:function(e){this.innerValue=e}},methods:{onValueChange:function(){this.$emit("change",ct.hasOwnProperty(this.innerValue)?ct[this.innerValue]:this.innerValue)}}},ht=(n(37),Pe(ut,lt,[],!1,null,null,null));ht.options.__file="src/controls/ControlEnum.vue";var pt=ht.exports,ft=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"control-percent"},[n("el-radio-group",{attrs:{size:"mini"},model:{value:e.mode,callback:function(t){e.mode=t},expression:"mode"}},[n("el-radio-button",{attrs:{label:"absolute"}},[e._v(e._s(e.$t("example.absoluteMode")))]),e._v(" "),n("el-radio-button",{attrs:{label:"percent"}},[e._v(e._s(e.$t("example.percentMode")))])],1),e._v(" "),"absolute"===e.mode?n("el-input-number",{attrs:{"controls-position":"right",size:"mini",min:null==e.min?-1e4:+e.min,max:null==e.max?1e4:+e.max,step:null==e.step?1:+e.step},on:{change:e.onValueChange},model:{value:e.absoluteValue,callback:function(t){e.absoluteValue=t},expression:"absoluteValue"}}):n("div",[n("el-slider",{attrs:{min:0,max:100,step:1,"format-tooltip":e.formatTooltip},on:{change:e.onValueChange},model:{value:e.percentValue,callback:function(t){e.percentValue=t},expression:"percentValue"}}),e._v(" "),n("el-input-number",{attrs:{"controls-position":"right",size:"mini",min:0,max:100,step:1},on:{change:e.onValueChange},model:{value:e.percentValue,callback:function(t){e.percentValue=t},expression:"percentValue"}})],1)],1)};ft._withStripped=!0;var dt={props:["value","min","max","step"],data:function(){var e=this.value.indexOf("%")<0;return{percentValue:e?50:+this.value.replace("%",""),absoluteValue:e?+this.value:0,mode:e?"absolute":"percent"}},watch:{value:function(e){"absolute"===this.mode?this.absoluteValue=+e:this.percentValue=+e.replace("%","")},mode:function(){this.onValueChange()}},methods:{onValueChange:function(){this.$emit("change","absolute"===this.mode?this.absoluteValue:this.percentValue+"%")},formatTooltip:function(e){return e+"%"}}},mt=(n(38),Pe(dt,ft,[],!1,null,null,null));mt.options.__file="src/controls/ControlPercent.vue";var vt=mt.exports,gt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"control-percent-vector"},e._l(e.dimsArr,(function(t,r){return n("div",{key:r},[n("label",[e._v(e._s(t))]),e._v(" "),n("ControlPercent",{attrs:{value:e.innerValueArr[r],"controls-position":"right",min:null==e.min?-1e4:+e.min,max:null==e.max?1e4:+e.max,step:null==e.step?1:+e.step},on:{change:function(t){return e.onValueChange(r,t)}}})],1)})),0)};gt._withStripped=!0;var _t={components:{ControlPercent:vt},props:["value","min","max","step","dims"],data:function(){return{innerValueArr:this.value.split(",").map((function(e){return e.trim()}))}},computed:{dimsArr:function(){return this.dims.split(",").map((function(e){return e.trim()}))}},watch:{value:function(e){this.innerValueArr=this.value.split(",").map((function(e){return e.trim()}))}},methods:{onValueChange:function(e,t){this.innerValueArr[e]=t,this.$emit("change",this.innerValueArr.slice())}}},yt=(n(39),Pe(_t,gt,[],!1,null,null,null));yt.options.__file="src/controls/ControlPercentVector.vue";var bt=yt.exports,xt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"control-text"},[n("el-input",{attrs:{size:"mini",placeholder:e.$t("example.inputPlaceholder")},on:{change:e.onValueChange},model:{value:e.innerValue,callback:function(t){e.innerValue=t},expression:"innerValue"}})],1)};xt._withStripped=!0;var Et=Pe({props:["value"],data:function(){return{innerValue:this.value}},watch:{value:function(e){this.innerValue=e}},methods:{onValueChange:function(){this.$emit("change",this.innerValue)}}},xt,[],!1,null,null,null);Et.options.__file="src/controls/ControlText.vue";var wt=Et.exports,Ct=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"control-icon"},[n("el-select",{attrs:{size:"mini"},on:{change:e.onValueChange},model:{value:e.innerValue,callback:function(t){e.innerValue=t},expression:"innerValue"}},e._l(e.optionsArr,(function(t){return n("el-option",{key:t,attrs:{value:t}},[e._v(e._s(t))])})),1),e._v(" "),n("el-button",{attrs:{size:"mini",type:"primary"},on:{click:e.chooseFile}},[e._v(e._s(e.$t("example.upload")))])],1)};function St(e){return(St="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Ct._withStripped=!0,SVGElement.prototype.getTransformToElement=SVGElement.prototype.getTransformToElement||function(e){return e.getScreenCTM().inverse().multiply(this.getScreenCTM())};var kt=/,?([achlmqrstvxz]),?/gi,Ot=function(e){return e.join(",").replace(kt,"$1")};function Mt(e,t,n,r,a){if(e)if(void 0===r&&(r=!1),void 0===t&&(t=!1),void 0===n&&(n=!1),void 0===a&&(a=!1),e&&e.children&&e.children.length){for(var i=0,o=e.children.length;i<o;i++)Mt(e.children[i],t,n,r,a);e.removeAttribute("transform")}else if(e instanceof SVGCircleElement||e instanceof SVGRectElement||e instanceof SVGEllipseElement||e instanceof SVGLineElement||e instanceof SVGPolygonElement||e instanceof SVGPolylineElement||e instanceof SVGPathElement){var s,l=function(e,t){if(!e)return;for(var n=document.createElementNS(e.ownerSVGElement.namespaceURI,"path"),r=["requiredFeatures","requiredExtensions","systemLanguage","id","xml:base","xml:lang","xml:space","onfocusin","onfocusout","onactivate","onclick","onmousedown","onmouseup","onmouseover","onmousemove","onmouseout","onload","alignment-baseline","baseline-shift","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cursor","direction","display","dominant-baseline","enable-background","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","glyph-orientation-horizontal","glyph-orientation-vertical","image-rendering","kerning","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","mask","opacity","overflow","pointer-events","shape-rendering","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-anchor","text-decoration","text-rendering","unicode-bidi","visibility","word-spacing","writing-mode","class","style","externalResourcesRequired","transform","d","pathLength"],a=0,i=r.length;a<i;a++){var o,s=r[a];(o=e.getAttribute(s))&&n.setAttribute(s,o)}var l="",c=function(e){return!("number"!=typeof e||e==1/0||e<0)},u=1.81,h=e.tagName;switch(h){case"ellipse":case"circle":var p=+e.getAttribute("rx"),f=+e.getAttribute("ry"),d=+e.getAttribute("cx"),m=+e.getAttribute("cy");"circle"==h&&(p=f=+e.getAttribute("r")),l+=Ot([["M",d-p,m],["C",d-p,m-f/u,d-p/u,m-f,d,m-f],["C",d+p/u,m-f,d+p,m-f/u,d+p,m],["C",d+p,m+f/u,d+p/u,m+f,d,m+f],["C",d-p/u,m+f,d-p,m+f/u,d-p,m],["Z"]]);break;case"path":l=e.getAttribute("d");break;case"line":var v=e.getAttribute("x1"),g=e.getAttribute("y1");x2=e.getAttribute("x2"),y2=e.getAttribute("y2"),l="M"+v+","+g+"L"+x2+","+y2;break;case"polyline":l="M"+e.getAttribute("points");break;case"polygon":l="M"+e.getAttribute("points")+"Z";break;case"rect":p=+e.getAttribute("rx"),f=+e.getAttribute("ry");var _=e.getBBox(),y=_.x,b=_.y,x=_.width,E=_.height;if(c(p)||c(f)?c(p)&&!c(f)?f=p:c(f)&&!c(p)?p=f:(p>x/2&&(p=x/2),f>E/2&&(f=E/2)):p=f=0,p||f)if(t)l+=Ot([["M",y+p,b],["H",y+x-p],["A",p,f,0,0,1,y+x,b+f],["V",b+E-f],["A",p,f,0,0,1,y+x-p,b+E],["H",y+p],["A",p,f,0,0,1,y,b+E-f],["V",b+f],["A",p,f,0,0,1,y+p,b]]);else{f||(f=p),l+=Ot([["M",y,b+f],["C",y,b+f/(u=2.19),y+p/u,b,y+p,b],["L",y+x-p,b],["C",y+x-p/u,b,y+x,b+f/u,y+x,b+f],["L",y+x,b+E-f],["C",y+x,b+E-f/u,y+x-p/u,b+E,y+x-p,b+E],["L",y+p,b+E],["C",y+p/u,b+E,y,b+E-f/u,y,b+E-f],["L",y,b+f],["Z"]])}else l+=Ot([["M",y,b],["L",y+x,b],["L",y+x,b+E],["L",y,b+E],["L",y,b],["Z"]])}l&&n.setAttribute("d",l);return e.parentNode.replaceChild(n,e),n}(e,r);if(!l||""==l.getAttribute(u))return"M 0 0";a||0===a?a>15?a=15:a<0&&(a=0):a=!1;var c=l,u=c.getAttribute("d").trim();if(t)h=s=Yt(u);else{var h=s=Gt(u);s=Kt(s)}var p,f,d=c.ownerSVGElement,m=c.getTransformToElement(d),v=(i=0,s.length),g="",_="",y=0,b=0,x=[],E=d.createSVGPoint(),w={},C=0,S=0;for(w.x=null,w.y=null;i<v;i++){if(g=s[i][0].toUpperCase(),_=h[i][0],x[i]=[],x[i][0]=s[i][0],"A"==g)y=s[i][6],b=s[i][7],E.x=s[i][6],E.y=s[i][7],x[i]=Nt(s[i][1],s[i][2],s[i][3],s[i][4],s[i][5],E,m),x[i][1]=x[i][1],x[i][2]=x[i][2],x[i][3]=x[i][3],x[i][6]=x[i][6],x[i][7]=x[i][7];else if("Z"!=g)for(p=1;p<s[i].length;p+=2)"V"==g?b=s[i][p]:"H"==g?y=s[i][p]:(y=s[i][p],b=s[i][p+1]),E.x=y,E.y=b,f=E.matrixTransform(m),"V"==g||"H"==g?(x[i][0]="L",x[i][p]=f.x,x[i][p+1]=f.y):(x[i][p]=f.x,x[i][p+1]=f.y);("Z"!=g&&null===w.x||"M"==g)&&(w.x=y,w.y=b),"Z"==g&&(y=w.x,b=w.y)}var k=0,O=0;for(w.x="",i=0;i<x.length;i++){if("A"==(_=h[i][0])||"M"==_||"L"==_||"C"==_||"S"==_||"Q"==_||"T"==_||"H"==_||"V"==_){var M=N=x[i].length;if("A"==_)x[i][6]=T(x[i][6]),x[i][7]=T(x[i][7]);else for(M--;--M;)x[i][M]=T(x[i][M]);C=x[i][N-2],S=x[i][N-1]}else if("a"==_)k=x[i][6],O=x[i][7],x[i][0]=_,x[i][6]=T(x[i][6]-C),x[i][7]=T(x[i][7]-S),C=k,S=O;else if("m"==_||"l"==_||"c"==_||"s"==_||"q"==_||"t"==_||"h"==_||"v"==_){var N=x[i].length;for(k=x[i][N-2],O=x[i][N-1],p=1;p<N;p+=2)x[i][0]="h"==_||"v"==_?"l":_,x[i][p]=T(x[i][p]-C),x[i][p+1]=T(x[i][p+1]-S);C=k,S=O}("z"!=_.toLowerCase()&&""==w.x||"m"==_.toLowerCase())&&(w.x=C,w.y=S),"z"==_.toLowerCase()&&(C=w.x,S=w.y)}n&&(x=Kt(x)),l.setAttribute("d",Ot(x)),l.removeAttribute("transform")}function T(e){return!1!==a?Math.round(e*Math.pow(10,a))/Math.pow(10,a):e}}function Nt(e,t,n,r,a,i,o,s){function l(e){return Math.abs(e)<1e-16}var c,u,h,p,f,d,m,v,g,_,y,b=[];if(c=e,u=t,h=n*=Math.PI/180,p=parseFloat(Math.sin(h)),f=parseFloat(Math.cos(h)),b[0]=o.a*+c*f+o.c*c*p,b[1]=o.b*+c*f+o.d*c*p,b[2]=o.a*-u*p+o.c*u*f,b[3]=o.b*-u*p+o.d*u*f,g=(d=b[0]*b[0]+b[2]*b[2])-(v=b[1]*b[1]+b[3]*b[3]),l(m=2*(b[0]*b[1]+b[2]*b[3])))n=0,_=d,y=v;else if(l(g))_=d+.5*m,y=d-.5*m,n=Math.PI/4;else{var x=1+m*m/(g*g);_=.5*(d+v+(x=x<0?0:Math.sqrt(x))*g),y=.5*(d+v-x*g),n=.5*Math.atan2(m,g)}return _=_<0?0:Math.sqrt(_),y=y<0?0:Math.sqrt(y),g<=0?(t=_,e=y):(t=y,e=_),o.a*o.d-o.b*o.c<0&&(a=a?0:1),i=i.matrixTransform(o),["A",e,t,n=180*n/Math.PI,r,a,i.x,i.y]}var Tt={},It="hasOwnProperty",Rt=String,At={NaN:1,Infinity:1,"-Infinity":1},Lt=Rt.prototype.toLowerCase,Dt=Rt.prototype.toUpperCase,$t=Object.prototype.toString,Pt="concat",Vt=Math,jt=Vt.max,Ft=(Vt.min,Vt.abs,Vt.pow,Vt.PI),zt=(Vt.round,parseFloat),Bt=(parseInt,kt=/,?([achlmqrstvxz]),?/gi,/([achlmrqstvz])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/gi),Wt=/(-?\d*\.?\d*(?:e[\-+]?\d+)?)[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/gi;Tt.is=function(e,t){return"finite"==(t=Lt.call(t))?!At[It](+e):"array"==t?e instanceof Array:"null"==t&&null===e||t==St(e)&&null!==e||"object"==t&&e===Object(e)||"array"==t&&Array.isArray&&Array.isArray(e)||$t.call(e).slice(8,-1).toLowerCase()==t},Tt._path2string=function(){return this.join(",").replace(kt,"$1")};var Ut=function(e){var t=function e(t){if(Object(t)!==t)return t;var n=new t.constructor;for(var r in t)t[It](r)&&(n[r]=e(t[r]));return n}(e);return t.toString=Tt._path2string,t},Ht=function e(t){var n=e.ps=e.ps||{};return n[t]?n[t].sleep=100:n[t]={sleep:100},setTimeout((function(){for(var e in n)n[It](e)&&e!=t&&(n[e].sleep--,!n[e].sleep&&delete n[e])})),n[t]};function qt(e,t){for(var n=[],r=0,a=e.length;a-2*!t>r;r+=2){var i=[{x:+e[r-2],y:+e[r-1]},{x:+e[r],y:+e[r+1]},{x:+e[r+2],y:+e[r+3]},{x:+e[r+4],y:+e[r+5]}];t?r?a-4==r?i[3]={x:+e[0],y:+e[1]}:a-2==r&&(i[2]={x:+e[0],y:+e[1]},i[3]={x:+e[2],y:+e[3]}):i[0]={x:+e[a-2],y:+e[a-1]}:a-4==r?i[3]=i[2]:r||(i[0]={x:+e[r],y:+e[r+1]}),n.push(["C",(-i[0].x+6*i[1].x+i[2].x)/6,(-i[0].y+6*i[1].y+i[2].y)/6,(i[1].x+6*i[2].x-i[3].x)/6,(i[1].y+6*i[2].y-i[3].y)/6,i[2].x,i[2].y])}return n}var Gt=function(e){if(!e)return null;var t=Ht(e);if(t.arr)return Ut(t.arr);var n={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},r=[];return Tt.is(e,"array")&&Tt.is(e[0],"array")&&(r=Ut(e)),r.length||Rt(e).replace(Bt,(function(e,t,a){var i=[],o=t.toLowerCase();if(a.replace(Wt,(function(e,t){t&&i.push(+t)})),"m"==o&&i.length>2&&(r.push([t][Pt](i.splice(0,2))),o="l",t="m"==t?"l":"L"),"r"==o)r.push([t][Pt](i));else for(;i.length>=n[o]&&(r.push([t][Pt](i.splice(0,n[o]))),n[o]););})),r.toString=Tt._path2string,t.arr=Ut(r),r};var Kt=Jt((function(e){if(Tt.is(e,"array")&&Tt.is(e&&e[0],"array")||(e=Gt(e)),!e||!e.length)return[["M",0,0]];var t=[],n=0,r=0,a=0,i=0,o=0;"M"==e[0][0]&&(a=n=+e[0][1],i=r=+e[0][2],o++,t[0]=["M",n,r]);for(var s,l,c=3==e.length&&"M"==e[0][0]&&"R"==e[1][0].toUpperCase()&&"Z"==e[2][0].toUpperCase(),u=o,h=e.length;u<h;u++){if(t.push(s=[]),(l=e[u])[0]!=Dt.call(l[0]))switch(s[0]=Dt.call(l[0]),s[0]){case"A":s[1]=l[1],s[2]=l[2],s[3]=l[3],s[4]=l[4],s[5]=l[5],s[6]=+(l[6]+n),s[7]=+(l[7]+r);break;case"V":s[1]=+l[1]+r;break;case"H":s[1]=+l[1]+n;break;case"R":for(var p=[n,r][Pt](l.slice(1)),f=2,d=p.length;f<d;f++)p[f]=+p[f]+n,p[++f]=+p[f]+r;t.pop(),t=t[Pt](qt(p,c));break;case"M":a=+l[1]+n,i=+l[2]+r;default:for(f=1,d=l.length;f<d;f++)s[f]=+l[f]+(f%2?n:r)}else if("R"==l[0])p=[n,r][Pt](l.slice(1)),t.pop(),t=t[Pt](qt(p,c)),s=["R"][Pt](l.slice(-2));else for(var m=0,v=l.length;m<v;m++)s[m]=l[m];switch(s[0]){case"Z":n=a,r=i;break;case"H":n=s[1];break;case"V":r=s[1];break;case"M":a=s[s.length-2],i=s[s.length-1];default:n=s[s.length-2],r=s[s.length-1]}}return t.toString=Tt._path2string,t}));function Jt(e,t,n){return function r(){var a=Array.prototype.slice.call(arguments,0),i=a.join("␀"),o=r.cache=r.cache||{},s=r.count=r.count||[];if(o.hasOwnProperty(i)){for(var l=0,c=s.length;l<c;l++)s[l]===i&&s.push(s.splice(l,1)[0]);return n?n(o[i]):o[i]}return s.length>=1e3&&delete o[s.shift()],s.push(i),o[i]=e.apply(t,a),n?n(o[i]):o[i]}}var Qt=function(e,t,n,r){return[e,t,n,r,n,r]},Xt=function(e,t,n,r,a,i){return[1/3*e+2/3*n,1/3*t+2/3*r,1/3*a+2/3*n,1/3*i+2/3*r,a,i]},Zt=Jt((function(e,t,n,r,a,i,o,s,l,c){var u,h=120*Ft/180,p=Ft/180*(+a||0),f=[],d=Jt((function(e,t,n){return{x:e*Math.cos(n)-t*Math.sin(n),y:e*Math.sin(n)+t*Math.cos(n)}}));if(c)w=c[0],C=c[1],x=c[2],E=c[3];else{e=(u=d(e,t,-p)).x,t=u.y,s=(u=d(s,l,-p)).x,l=u.y;Math.cos(Ft/180*a),Math.sin(Ft/180*a);var m=(e-s)/2,v=(t-l)/2,g=m*m/(n*n)+v*v/(r*r);g>1&&(n*=g=Math.sqrt(g),r*=g);var _=n*n,y=r*r,b=(i==o?-1:1)*Math.sqrt(Math.abs((_*y-_*v*v-y*m*m)/(_*v*v+y*m*m))),x=b*n*v/r+(e+s)/2,E=b*-r*m/n+(t+l)/2,w=Math.asin(((t-E)/r).toFixed(9)),C=Math.asin(((l-E)/r).toFixed(9));(w=e<x?Ft-w:w)<0&&(w=2*Ft+w),(C=s<x?Ft-C:C)<0&&(C=2*Ft+C),o&&w>C&&(w-=2*Ft),!o&&C>w&&(C-=2*Ft)}var S=C-w;if(Math.abs(S)>h){var k=C,O=s,M=l;C=w+h*(o&&C>w?1:-1),s=x+n*Math.cos(C),l=E+r*Math.sin(C),f=Zt(s,l,n,r,a,0,o,O,M,[C,k,x,E])}S=C-w;var N=Math.cos(w),T=Math.sin(w),I=Math.cos(C),R=Math.sin(C),A=Math.tan(S/4),L=4/3*n*A,D=4/3*r*A,$=[e,t],P=[e+L*T,t-D*N],V=[s+L*R,l-D*I],j=[s,l];if(P[0]=2*$[0]-P[0],P[1]=2*$[1]-P[1],c)return[P,V,j].concat(f);for(var F=[],z=0,B=(f=[P,V,j].concat(f).join().split(",")).length;z<B;z++)F[z]=z%2?d(f[z-1],f[z],p).y:d(f[z],f[z+1],p).x;return F})),Yt=Jt((function(e,t){var n=!t&&Ht(e);if(!t&&n.curve)return Ut(n.curve);for(var r=Kt(e),a=t&&Kt(t),i={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},o={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},s=function(e,t,n){var r,a;if(!e)return["C",t.x,t.y,t.x,t.y,t.x,t.y];switch(!(e[0]in{T:1,Q:1})&&(t.qx=t.qy=null),e[0]){case"M":t.X=e[1],t.Y=e[2];break;case"A":e=["C"][Pt](Zt.apply(0,[t.x,t.y][Pt](e.slice(1))));break;case"S":"C"==n||"S"==n?(r=2*t.x-t.bx,a=2*t.y-t.by):(r=t.x,a=t.y),e=["C",r,a][Pt](e.slice(1));break;case"T":"Q"==n||"T"==n?(t.qx=2*t.x-t.qx,t.qy=2*t.y-t.qy):(t.qx=t.x,t.qy=t.y),e=["C"][Pt](Xt(t.x,t.y,t.qx,t.qy,e[1],e[2]));break;case"Q":t.qx=e[1],t.qy=e[2],e=["C"][Pt](Xt(t.x,t.y,e[1],e[2],e[3],e[4]));break;case"L":e=["C"][Pt](Qt(t.x,t.y,e[1],e[2]));break;case"H":e=["C"][Pt](Qt(t.x,t.y,e[1],t.y));break;case"V":e=["C"][Pt](Qt(t.x,t.y,t.x,e[1]));break;case"Z":e=["C"][Pt](Qt(t.x,t.y,t.X,t.Y))}return e},l=function(e,t){if(e[t].length>7){e[t].shift();for(var n=e[t];n.length;)u[t]="A",a&&(h[t]="A"),e.splice(t++,0,["C"][Pt](n.splice(0,6)));e.splice(t,1),m=jt(r.length,a&&a.length||0)}},c=function(e,t,n,i,o){e&&t&&"M"==e[o][0]&&"M"!=t[o][0]&&(t.splice(o,0,["M",i.x,i.y]),n.bx=0,n.by=0,n.x=e[o][1],n.y=e[o][2],m=jt(r.length,a&&a.length||0))},u=[],h=[],p="",f="",d=0,m=jt(r.length,a&&a.length||0);d<m;d++){r[d]&&(p=r[d][0]),"C"!=p&&(u[d]=p,d&&(f=u[d-1])),r[d]=s(r[d],i,f),"A"!=u[d]&&"C"==p&&(u[d]="C"),l(r,d),a&&(a[d]&&(p=a[d][0]),"C"!=p&&(h[d]=p,d&&(f=h[d-1])),a[d]=s(a[d],o,f),"A"!=h[d]&&"C"==p&&(h[d]="C"),l(a,d)),c(r,a,i,o,d),c(a,r,o,i,d);var v=r[d],g=a&&a[d],_=v.length,y=a&&g.length;i.x=v[_-2],i.y=v[_-1],i.bx=zt(v[_-4])||i.x,i.by=zt(v[_-3])||i.y,o.bx=a&&(zt(g[y-4])||o.x),o.by=a&&(zt(g[y-3])||o.y),o.x=a&&g[y-2],o.y=a&&g[y-1]}return a||(n.curve=Ut(r)),a?[r,a]:r}),null,Ut);var en=Pe({props:["value"],computed:{optionsArr:function(){return["circle","rect","roundRect","triangle","diamond","pin","arrow","none"]}},data:function(){return{innerValue:this.value}},watch:{value:function(e){this.innerValue=e}},methods:{onValueChange:function(){this.$emit("change",this.innerValue)},chooseFile:function(){var e=this,t=document.createElement("input");t.type="file",t.accept=".jpg, .jpeg, .png, .svg",t.addEventListener("change",(function(t){var n=t.target.files[0];if(n)if(n.name.endsWith(".svg")){var r=new FileReader;r.addEventListener("load",(function(){var t=function(e){var t=(new DOMParser).parseFromString(e,"text/xml");for(9===t.nodeType&&(t=t.firstChild);"svg"!==t.nodeName.toLowerCase()||1!==t.nodeType;)t=t.nextSibling;return t}(r.result);try{Mt(t)}catch(e){console.error("Unexpected error happens when handling the SVG."),console.error(e.toString())}for(var n=t.querySelectorAll("path"),a=[],i=0;i<n.length;i++)a.push(n[i].getAttribute("d"));e.$emit("change","path://"+a.join(" "))})),r.readAsText(n)}else{var a=new FileReader;a.addEventListener("load",(function(){e.$emit("change","image://"+a.result)})),a.readAsDataURL(n)}})),t.click()}}},Ct,[],!1,null,null,null);en.options.__file="src/controls/ControlIcon.vue";var tn={boolean:Ye,color:Qe,number:rt,vector:st,enum:pt,angle:rt,percent:vt,percentvector:bt,text:wt,icon:en.exports},nn={boolean:function(){return!1},color:function(){return null},number:function(){return 0},angle:function(){return 0},percent:function(){return"50"},enum:function(e){return e.options.split(",")[0].trim()},vector:function(e){if(!e.dims)throw new Error("Must specify dims in vector");return e.dims.split(",").map((function(e){return 0})).join(",")},percentvector:function(e){if(!e.dims)throw new Error("Must specify dims in vector");return e.dims.split(",").map((function(e){return"50%"})).join(",")}};var rn={name:"OptionControl",props:["controlConfig","optionPath"],data:function(){return{shared:ke}},computed:{uiComponent:function(){return tn[this.controlConfig.type]},uiAttrs:function(){return function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&"type"!==n&&"default"!==n&&(t[n]=e[n]);return t}(this.controlConfig)},defaultValue:function(){var e=this.controlConfig;return null!=e.default?e.default:nn[e.type]&&nn[e.type](e)}},methods:{onValueChange:function(e){this.shared.cleanMode=this.controlConfig.clean,this.shared.currentExampleOption&&(this.shared.currentExampleOption=Object.freeze(Te(this.shared.currentExampleOption,this.optionPath,e)))}}},an=(n(40),Pe(rn,qe,[],!1,null,null,null));an.options.__file="src/components/OptionControl.vue";var on=an.exports,sn=["data","markPoint","markLine","markArea","tooltip"],ln={name:"DocContentItemCard",props:["nodeData","descMap","maxDepth","depth"],components:{PropertiesList:He,OptionControl:on},data:function(){return{manualExpanded:null,enableUIControl:!1,shared:ke}},watch:{enableUIControl:function(e){e?(this.shared.showOptionExample||this.$emit("scroll-to-self",this.nodeData.path,300,100),this.shared.showOptionExample=!0):this.shared.currentExampleOption=Object.freeze(Te(this.shared.currentExampleOption,this.nodeData.path,void 0))},"shared.currentExampleName":function(e,t){e&&t&&(this.enableUIControl=!1)}},computed:{itemId:function(){return fe(this.nodeData.path)},expanded:function(){if(this.isLeaf)return!1;if(null!=this.manualExpanded)return this.manualExpanded;var e=this.nodeData.path.split(".");return this.depth<2&&sn.indexOf(e.pop())<0||ke.currentPath.indexOf(this.nodeData.path)>=0},isLeaf:function(){return!(this.nodeData.children&&this.nodeData.children.length)},supportsExpandable:function(){return this.depth+1<=this.maxDepth&&!this.isLeaf},desc:function(){var e=this.descMap[this.nodeData.path];return e&&e.desc},uiControl:function(){var e=this.descMap[this.nodeData.path];return e&&e.uiControl},parentPath:function(){for(var e=this.nodeData.path.split("."),t=[],n="",r=0;r<e.length-1;r++)n+=n?"."+e[r]:e[r],t.push({text:e[r],link:n});return t},baseName:function(){return{text:this.nodeData.path.split(".").pop(),link:this.nodeData.path}}},methods:{bubbleEventToggleExapndedEvent:function(){this.$emit("toggle-expanded")},toggleExpanded:function(){this.manualExpanded=!this.expanded,this.$emit("toggle-expanded")},toggleUIControl:function(){this.enableUIControl=!this.enableUIControl},bubbleScrollToSelfEvent:function(e,t,n){this.$emit("scroll-to-self",e,t,n)}}},cn=(n(41),Pe(ln,ze,[],!1,null,null,null));cn.options.__file="src/components/DocContentItemCard.vue";var un=cn.exports,hn=n(24),pn=n.n(hn),fn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:e.shared.computedOptionExampleLayout+"-layout",attrs:{id:"example-panel"}},[n("h2",[e._v(e._s(e.$t("example.title")))]),e._v(" "),n("p",{staticClass:"intro"},[e._v(e._s(e.shared.allOptionExamples?e.$t("example.intro"):e.$t("example.noExample")))]),e._v(" "),e.shared.currentExampleOption?n("div",{staticClass:"preview-and-code"},[n("div",{staticClass:"preview-main"}),e._v(" "),e._m(0),e._v(" "),e.hasError?n("el-alert",{attrs:{title:e.$t("example.setOptionError"),type:"error"}}):e._e()],1):e._e(),e._v(" "),n("div",{staticClass:"toolbar"},[e.shared.allOptionExamples?n("el-select",{staticClass:"example-list",attrs:{size:"mini","popper-append-to-body":!1},model:{value:e.shared.currentExampleName,callback:function(t){e.$set(e.shared,"currentExampleName",t)},expression:"shared.currentExampleName"}},e._l(e.shared.allOptionExamples,(function(t){return n("el-option",{key:t.name,attrs:{value:t.name,label:"en"===e.shared.locale?t["title-en"]:t.title}})})),1):e._e(),e._v(" "),e.shared.currentExampleOption?n("el-button",{attrs:{type:"primary",icon:"el-icon-refresh",size:"mini",title:e.$t("example.refresh")},on:{click:e.refreshForce}}):e._e(),e._v(" "),n("el-button",{directives:[{name:"popover",rawName:"v-popover:changeLayoutPopover",arg:"changeLayoutPopover"}],staticStyle:{"margin-left":"0"},attrs:{type:"primary",icon:"el-icon-s-operation",size:"mini",title:e.$t("example.changeLayout")}}),e._v(" "),n("el-button",{attrs:{size:"mini",circle:"",icon:"el-icon-close"},on:{click:e.closeExamplePanel}})],1),e._v(" "),n("el-popover",{ref:"changeLayoutPopover",attrs:{placement:"bottom",trigger:"click"},model:{value:e.showChangeLayoutPopover,callback:function(t){e.showChangeLayoutPopover=t},expression:"showChangeLayoutPopover"}},[n("div",{staticClass:"example-change-layout"},[n("div",{staticClass:"layout-title"},[n("i",{staticClass:"el-icon-s-operation"}),e._v(e._s(e.$t("example.changeLayout")))]),e._v(" "),n("div",{staticClass:"layout-mode"},[n("el-radio-group",{attrs:{size:"mini"},on:{change:e.changeLayout},model:{value:e.shared.optionExampleLayout,callback:function(t){e.$set(e.shared,"optionExampleLayout",t)},expression:"shared.optionExampleLayout"}},e._l(e.optionExampleLayouts,(function(t){return n("el-radio-button",{key:t,attrs:{label:t}},[e._v(e._s(e.$t("example.layout."+t)))])})),1)],1)])])],1)};fn._withStripped=!0;var dn,mn=n(25),vn=n.n(mn),gn=(n(42),n(43),n(26)),_n=n.n(gn),yn=n(19),bn=n.n(yn),xn=n(27),En=n.n(xn);function wn(e,t){var n=this;if(this.shared.currentExampleName!==this.lastUpdateExampleName)return this.lastUpdateExampleName=this.shared.currentExampleName,void this.refreshForce();var r=this.$el.querySelector(".preview-main");if(r){if(this.hasError=!1,"undefined"==typeof echarts)(dn||(dn=new Promise((function(e){var t=document.createElement("script");t.src="https://cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js",t.async=!0,t.onload=function(){e(),dn=null},document.body.appendChild(t)})))).then((function(){n.echartsInstance||(n.chartInstance=echarts.init(r)),n.shared.cleanMode&&n.chartInstance.clear(),n.chartInstance.setOption(e,!0)}));else{this.echartsInstance||(this.chartInstance=echarts.init(r));try{this.shared.cleanMode&&this.chartInstance.clear(),this.chartInstance.setOption(e,!0)}catch(e){console.error(e),this.hasError=!0}}if(this.cmInstance){var a=this.cmInstance.getValue(),i=this.formattedOptionCodeStr;this.oldHighlightedLines&&this.oldHighlightedLines.forEach((function(e){n.cmInstance.removeLineClass(e,"wrap","option-changed")})),t?(this.cmInstance.setValue(i),this.oldHighlightedLines=[]):this.oldHighlightedLines=function(e,t,n){for(var r=e.split(/\n/),a=t.split(/\n/),i=En()(r,a),o=[],s=i.length-1;s>=0;s--){var l=i[s];if(l.removed)for(var c=l.count-1;c>=0;c--){var u=l.indices[c];n.replaceRange("",{line:u,ch:0},{line:u+1,ch:0})}}for(var h=0;h<i.length;h++){var p=i[h];if(p.added)for(var f=0;f<p.count;f++){var d=p.indices[f];n.replaceRange(a[d]+"\n",{line:d,ch:0}),o.push(d)}}return o.forEach((function(e){n.addLineClass(e,"wrap","option-changed")})),i.length&&setTimeout((function(){n.scrollIntoView({line:o[0],ch:0},n.getWrapperElement().clientHeight-50)}),20),o}(a,i,this.cmInstance)}else this.cmInstance=vn()(this.$el.querySelector(".codemirror-main"),{value:this.formattedOptionCodeStr,mode:"javascript",theme:"dracula",readOnly:!0});this.lastUpdateExampleName=this.shared.currentExampleName}}var Cn={data:function(){return{shared:ke,hasError:!1,lastUpdateExampleName:"",oldHighlightedLines:[],showChangeLayoutPopover:!1,optionExampleLayouts:xe}},mounted:function(){this.resize=this.resize.bind(this),window.addEventListener("resize",this.resize),this.resize(),this.shared.currentExampleOption&&this.updateOptionThrottled(this.shared.currentExampleOption),this.shared.allOptionExamples?this.shared.currentExampleName=this.shared.allOptionExamples[0].name:this.shared.currentExampleName=""},destroyed:function(){this.chartInstance&&(this.chartInstance.dispose(),this.chartInstance=null),window.removeEventListener("resize",this.resize)},watch:{"shared.currentExampleOption":function(e){e&&this.updateOptionThrottled(e)},"shared.allOptionExamples":function(e){this.shared.currentExampleName=e?e[0].name:""},"shared.currentExampleName":function(e){this.changeExample(e)}},methods:{updateOption:wn,updateOptionThrottled:bn()(wn,300,{leading:!1}),resize:function(){var e=this.$el;e.querySelector(".preview-main");"right"!==this.shared.computedOptionExampleLayout?(e.style.height=.5*window.innerHeight-60+"px",e.style.width="auto"):(e.style.width=.45*e.parentNode.clientWidth+"px",e.style.height="auto"),this.chartInstance&&this.chartInstance.resize()},refreshForce:function(){this.shared.currentExampleOption&&(this.chartInstance&&(this.chartInstance.dispose(),this.chartInstance=null),this.updateOption(this.shared.currentExampleOption,!0))},closeExamplePanel:function(){this.shared.showOptionExample=!1},changeExample:function(e){var t=this.shared.allOptionExamples&&this.shared.allOptionExamples.find((function(t){return t.name===e}));if(!t)return this.shared.currentExampleOption=null,!1;var n=t.code;try{var r=new Function(n+"\n return option");this.shared.currentExampleOption=Object.freeze(r())}catch(e){console.error(e),console.log(n)}},changeLayout:function(e){var t=this;this.showChangeLayoutPopover=!1,Ee(e),this.$nextTick((function(){t.resize()}))}},computed:{optionCodeStr:function(){var e=JSON.stringify(this.shared.currentExampleOption,(function(e,t){return"function"==typeof t?"__functionstart__"+t.toString().replace(/\n/g,"__newline__")+"__functionend__":t}));return"option = ".concat(e)},formattedOptionCodeStr:function(){return _n.a.js(this.optionCodeStr.replace(/"(\w+)"\s*:/g,"$1:").replace(/"__functionstart__/g,"").replace(/__functionend__"/g,"").replace(/__newline__/g,"\n"),{indent_size:2})}}},Sn=(n(44),Pe(Cn,fn,[function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"example-code"},[t("div",{staticClass:"codemirror-main"})])}],!1,null,null,null));Sn.options.__file="src/components/LiveExample.vue";var kn=Sn.exports,On={components:{DocContentItemCard:un,LiveExample:kn},data:function(){return{loading:!1,pagePath:"",shared:ke,maxDepth:1/0,rootPageDescMap:{},pageOutline:{},pageDescMap:{}}},computed:{pageTitle:function(){return this.pagePath},pageId:function(){return fe(this.pagePath)},pageDesc:function(){var e=this.rootPageDescMap[this.pagePath]||this.pageDescMap[this.pagePath];return e&&e.desc},pageExamples:function(){var e=this.rootPageDescMap[this.pagePath]||this.pageDescMap[this.pagePath];return e&&e.exampleBaseOptions||[]},pageDisplayOutline:function(){return this.shared.isMobile?_e(Oe()):this.pageOutline},showLiveExample:function(){return!this.shared.isMobile&&Me()},needScrollOffset:function(){return this.shared.showOptionExample&&!this.shared.isMobile&&"top"===this.shared.computedOptionExampleLayout}},created:function(){var e=this;ge("").then((function(t){e.rootPageDescMap=Object.freeze(t)})),this._lazyload=new pn.a({elements_selector:"iframe",load_delay:300}),this.updateCurrentPath(this.shared.currentPath,!0),this.resize=this.resize.bind(this),window.addEventListener("resize",this.resize),this.resize()},destroyed:function(){window.removeEventListener("resize",this.resize)},methods:{resize:function(){var e=this;"auto"===this.shared.optionExampleLayout&&Ee("auto"),a.a.nextTick((function(){e.updateDocContentMargin()}))},updateLazyload:function(){var e=this;a.a.nextTick((function(){e._lazyload.update()}))},handleCardExpandToggle:function(){this.updateLazyload()},scrollTo:function(e,t,n){var r=this;setTimeout((function(){var n=ke.isMobile?100:20;r.needScrollOffset&&(n+=r.$refs.liveExample.$el.offsetHeight),Le()(document.getElementById(fe(e)),{time:t||400,align:{top:0,topOffset:n}})}),n||0)},updateCurrentPath:function(e,t){var n=this;if(e)if(_e(e)){var r,a,i=Oe();if(i!==this.pagePath)this.loading=!0,this.pagePath=i,(r=e,a=r.split(".")[0],de().then((function(){return se[a]||de()}))).then((function(r){return r.isRoot?n.maxDepth=0:n.shared.isMobile?n.maxDepth=1:n.maxDepth=1/0,ge(e).then((function(a){n.pageOutline=Object.freeze(Object.assign({},r));var i={},o=e.split(".")[0];for(var s in a)i[o+"."+s]=a[s];n.pageDescMap=Object.freeze(i),n.loading=!1,n.scrollTo(e,600,t?300:50),n.updateLazyload()}))})).catch((function(e){n.pageOutline={},n.loading=!1}));else this.scrollTo(e)}else Re(ye(e));else Re(ye())},openOptionExample:function(){this.shared.showOptionExample=!0},updateDocContentMargin:function(e){if((this.$refs.liveExample||e)&&(this.$refs.docContentDom.style.margin="",!e)){var t=this.shared.computedOptionExampleLayout;if("right"!==t){var n="margin"+t[0].toUpperCase()+t.slice(1),r=this.$refs.liveExample.$el.clientHeight;this.$refs.docContentDom.style[n]=r+"px"}}}},watch:{"shared.currentPath":function(e){var t=this;this.updateCurrentPath(e),a.a.nextTick((function(){t.updateDocContentMargin()}))},pageExamples:function(e){e&&e.length?this.shared.allOptionExamples=Object.freeze(e):this.shared.allOptionExamples=null},"shared.computedOptionExampleLayout":function(){var e=this;a.a.nextTick((function(){e.updateDocContentMargin()}))},"shared.showOptionExample":function(e){var t=this;a.a.nextTick((function(){t.updateDocContentMargin(!e)}))}}},Mn=(n(45),Pe(On,Fe,[],!1,null,null,null));Mn.options.__file="src/components/DocContent.vue";var Nn=Mn.exports,Tn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"doc-search"},[n("el-autocomplete",{staticClass:"search-input",attrs:{"popper-class":"search-input-popper",size:"small","fetch-suggestions":e.searchOptions,debounce:200,placeholder:e.$t("search.placeholder")},on:{select:e.selectPath},nativeOn:{keyup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.fuzzySearch(t)}},scopedSlots:e._u([{key:"default",fn:function(t){var r=t.item;return[n("div",{staticClass:"doc-path-suggestion-item"},[e._v(e._s(r.path))])]}}]),model:{value:e.queryString,callback:function(t){e.queryString=t},expression:"queryString"}},[e._v(" "),n("el-button",{attrs:{slot:"append",icon:"el-icon-search",type:"primary"},on:{click:e.fuzzySearch},slot:"append"})],1)],1)};Tn._withStripped=!0;var In={data:function(){return{queryString:ke.searchQuery,shared:ke}},computed:{},methods:{searchOptions:function(e,t){e?function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:50;return de().then((function(){for(var n=[],r=0;r<he.length;r++){if(n.length>=t)return n;var a=he[r];a.indexOf(e)>=0&&n.push(_e(a))}if(n.length<t){le||(le=new Uint8Array(he.length));for(var i=0,o=0;o<he.length;o++)le[o]=255*Object(ae.stringSimilarity)(he[o],e),le[o]>50&&i++;for(var s={},l=0;n.length<t&&i>0;){for(var c=0,u=void 0,h=0;h<le.length;h++)le[h]>c&&!s[h]&&(u=h,c=le[h]);if(c>50&&(s[u]=!0,n.push(_e(he[u])),i--),++l>200)break}}return n}))}(e,100).then((function(e){t(e)})):t([])},selectPath:function(e){this.shared.currentPath=e.path},fuzzySearch:function(){this.shared.searchQuery=this.queryString,Re("/search/"+this.shared.searchQuery)}}},Rn=(n(46),Pe(In,Tn,[],!1,null,null,null));Rn.options.__file="src/components/Search.vue";var An=Rn.exports,Ln=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"doc-search-result"},[n("h3",[e._v(e._s(e.$t("search.resultTitle")))]),e._v(" "),n("el-input",{attrs:{"prefix-icon":"el-icon-search"},model:{value:e.shared.searchQuery,callback:function(t){e.$set(e.shared,"searchQuery",t)},expression:"shared.searchQuery"}}),e._v(" "),n("div",{staticClass:"result-summary"},[e._v("\n        "+e._s(e.$t("search.foundCountBrief").replace("${searchResultCount}",e.searchResultCount))+",\n        "),e.searchToken?n("span",{staticClass:"searching"},[e._v("\n            搜索中"),n("i",{staticClass:"el-icon-loading"})]):n("span",[e._v("\n            "+e._s(e.$t("search.displayCountBrief").replace("${displayResultCount}",e.displayResultCount))+"\n        ")])]),e._v(" "),e._l(e.searchResult,(function(t){return n("SearchResultItemCard",{key:t.path,attrs:{"item-data":t,"search-query":e.shared.searchQuery}})}))],2)};Ln._withStripped=!0;var Dn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:{"doc-search-result-item-card":!0,"needs-show-more":e.needsShowMoreDesc}},[n("h4",{directives:[{name:"mark",rawName:"v-mark",value:e.searchQuery,expression:"searchQuery"}]},[n("a",{staticClass:"path",attrs:{href:"#"+e.itemData.path}},[e._v(e._s(e.itemData.path))])]),e._v(" "),e.itemData.similarPaths.length>0?n("div",{staticClass:"other-result"},e._l(e.itemData.similarPaths,(function(t){return n("div",{key:t},[n("a",{attrs:{href:"#"+t}},[e._v(e._s(t))])])})),0):e._e(),e._v(" "),n("div",{staticClass:"item-description"},[n("div",{directives:[{name:"mark",rawName:"v-mark",value:e.searchQuery,expression:"searchQuery"}],domProps:{innerHTML:e._s(e.itemData.content)}})]),e._v(" "),n("div",{staticClass:"show-more-button"},[n("el-button",{attrs:{icon:"el-icon-more",size:"mini"},on:{click:e.showMore}},[e._v(e._s(e.$t("search.showMore")))])],1)])};Dn._withStripped=!0;var $n={props:["itemData","searchQuery"],data:function(){return{needsShowMoreDesc:!0}},methods:{showMore:function(){this.needsShowMoreDesc=!1}},mounted:function(){var e=this;a.a.nextTick((function(){var t=e.$el.querySelector(".item-description");e.needsShowMoreDesc=t.scrollHeight!==t.clientHeight}))}},Pn=(n(47),Pe($n,Dn,[],!1,null,null,null));function Vn(e){var t=this;console.log("Searching, ",e),this.searchResult=[],this.searchResultCount=0,this.displayResultCount=0,this.static.searchResult.cache={},this.searchToken=Date.now()+"";var n,r,a=this.searchToken;(n=e,r=function(e){if(a===t.searchToken){if(!t.noLimit&&t.displayResultCount<=t.limitedResultCount){for(var n=0;n<e.length;n++){var r=e[n].text,i=t.static.searchResult.cache[r];if(i)i.similarPaths.push(e[n].path);else{var o=Object.freeze({path:e[n].path,content:e[n].content,similarPaths:[]});t.searchResult.push(o),t.static.searchResult.cache[r]=o}}t.displayResultCount+=e.length}t.searchResultCount+=e.length}},de().then((function(){return new Promise((function(e){var t=0;function a(){--t||e()}function i(e){var i=ve(e);i.indexer?r(i.indexer.search(n)):(t++,i.fetcher.then((function(){r(i.indexer.search(n)),a()})).catch((function(e){a()})))}for(var o in i(""),se)i(o);t||e()}))}))).then((function(){t.searchToken=""})).catch((function(){t.searchToken=""}))}Pn.options.__file="src/components/SearchResultItemCard.vue";var jn={components:{SearchResultItemCard:Pn.exports},data:function(){return{searchResult:[],searchResultCount:0,displayResultCount:0,noLimit:!1,limitedResultCount:200,searchToken:"",static:Object.freeze({searchResult:{cache:null}}),shared:ke}},created:function(){this.updateSearchResultsImmediate(this.shared.searchQuery)},methods:{updateSearchResultsImmediate:Vn,updateSearchResults:bn()(Vn,500,{leading:!1})},watch:{"shared.searchQuery":function(e){this.updateSearchResults(e),Re("/search/"+this.shared.searchQuery)}}},Fn=(n(48),Pe(jn,Ln,[],!1,null,null,null));Fn.options.__file="src/components/SearchResult.vue";var zn=Fn.exports,Bn=function(){var e=this.$createElement;return(this._self._c||e)("div")};Bn._withStripped=!0;var Wn=Pe({},Bn,[],!1,null,null,null);Wn.options.__file="src/components/Home.vue";var Un=Wn.exports,Hn={props:["docType"],data:function(){return{shared:ke}},computed:{pagePath:function(){return Oe()}},components:{DocNav:je,DocContent:Nn,Search:An,SearchResult:zn,LiveExample:kn,Home:Un}},qn=(n(49),Pe(Hn,Z,[],!1,null,null,null));qn.options.__file="src/App.vue";var Gn=qn.exports,Kn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:["ec-doc-mobile","ec-doc-"+e.shared.docType]},[n("div",{staticClass:"top-bar"},[n("div",{staticClass:"doc-type-nav"},[n("a",{class:{selected:"option"===e.shared.docType},attrs:{href:"option.html#title"}},[e._v(e._s(e.$t("nav.option")))]),e._v(" "),n("a",{class:{selected:"api"===e.shared.docType},attrs:{href:"api.html#echarts"}},[e._v(e._s(e.$t("nav.API")))]),e._v(" "),n("a",{class:{selected:"tutorial"===e.shared.docType},attrs:{href:"tutorial.html"}},[e._v(e._s(e.$t("nav.tutorial")))]),e._v(" "),n("a",{class:{selected:"option-gl"===e.shared.docType},attrs:{href:"option-gl.html"}},[e._v(e._s(e.$t("nav.optionGL")))])]),e._v(" "),n("div",{staticClass:"doc-mobile-toolbar"},[n("el-button",{staticClass:"open-nav",attrs:{icon:"el-icon-menu",size:"mini"},on:{click:e.showNav}}),e._v(" "),n("Search")],1)]),e._v(" "),n("el-drawer",{attrs:{direction:"ltr",size:"80%",visible:e.navShown,"show-close":!1},on:{"update:visible":function(t){e.navShown=t}}},[n("DocNav")],1),e._v(" "),n("transition",[e.shared.fuzzySearch?n("SearchResult"):n("DocContent",{key:e.pagePath})],1),e._v(" "),e.pagePathParts.length>1?n("div",{staticClass:"doc-breadcrumb"},e._l(e.pagePathParts,(function(t){return n("a",{key:t.link,attrs:{href:"#"+t.link}},[e._v(e._s(t.text))])})),0):e._e()],1)};Kn._withStripped=!0;var Jn={props:["docType"],data:function(){return{navShown:!1,shared:ke}},computed:{pagePath:function(){return Oe()},pagePathParts:function(){for(var e=this.pagePath.split("."),t=[],n="",r=0;r<e.length;r++)n+=n?"."+e[r]:e[r],t.push({text:e[r]+(r===e.length-1?"":"."),link:n});return t}},methods:{showNav:function(){this.navShown=!0}},watch:{"shared.currentPath":function(e){this.navShown=!1}},components:{DocNav:je,DocContent:Nn,Search:An,SearchResult:zn,Home:Un}},Qn=(n(50),Pe(Jn,Kn,[],!1,null,null,null));Qn.options.__file="src/AppMobile.vue";var Xn=Qn.exports,Zn=n(20),Yn=n.n(Zn),er=n(28),tr=n.n(er),nr=n(29),rr=n.n(nr);n(51);function ar(e){e.querySelectorAll("pre code").forEach((function(e){e.classList.contains("hljs")||Yn.a.highlightBlock(e)}))}Yn.a.registerLanguage("javascript",tr.a),Yn.a.registerLanguage("xml",rr.a),a.a.directive("highlight",{inserted:function(e){ar(e)},update:function(e){ar(e)}});var ir=n(30),or=n.n(ir),sr=n(31),lr=n.n(sr);function cr(e,t){function n(){e.__markInstance.mark(t,{diacritics:!0,separateWordSearch:!0})}e.__markInstance?e.__markInstance.unmark({done:function(){n()}}):(e.__markInstance=new or.a(e),n())}function ur(){window.innerWidth<600?ke.isMobile=!0:ke.isMobile=!1}a.a.directive("mark",{inserted:function(e,t){e.__doMarkDebounced=lr()(cr,500,{trailing:!0,leading:!1}),e.__doMarkDebounced(e,t.value)},update:function(e,t){e.__doMarkDebounced(e,t.value)}});var hr={en:{nav:{option:"Option",API:"API",tutorial:"Tutorial",optionGL:"GL",collapseAll:"Collapse All"},search:{placeholder:"Search document",resultTitle:"Search Result",showMore:"Show more",foundCountBrief:"Found ${searchResultCount} items",displayCountBrief:"${displayResultCount} displayed"},content:{properties:"Properties"},example:{title:"Preview",titleShort:"Preview",intro:"Try different values of the option and preview!",noExample:"No example available for current component.",tryDesc:"Try It",defaultColor:"Default Color",booleanDesc:"Enable",vectorSetSeparate:"SEPARATE",absoluteMode:"ABSOLUTE",percentMode:"PERCENT",inputPlaceholder:"Input to change the text content",builtin:"Builtin",upload:"Upload SVG or PNG",setOptionError:"Something Unexpected Happerns. Click refresh to try again!",refresh:"Refresh",close:"Close",changeLayout:"Change Layout",layout:{auto:"Auto",right:"Right",top:"Top",bottom:"Bottom"}}},zh:{nav:{option:"配置项",API:"API",tutorial:"教程",optionGL:"GL配置",collapseAll:"收起所有"},search:{placeholder:"搜索文档，回车查看更多结果",resultTitle:"文档搜索结果",showMore:"显示更多",foundCountBrief:"找到 ${searchResultCount} 条配置项",displayCountBrief:"显示 ${displayResultCount} 条"},content:{properties:"所有属性"},example:{title:"配置项效果预览",titleShort:"预览",intro:"调节控件可预览配置项不同取值的效果",noExample:"当前组件暂无可用示例",tryDesc:"试一试",defaultColor:"默认颜色",booleanDesc:"开启",vectorSetSeparate:"分别设置",absoluteMode:"绝对值",percentMode:"百分比",inputPlaceholder:"输入改变文本",builtin:"内置",upload:"上传 SVG 或 PNG",setOptionError:"发生了一些意料之外的错误，点击刷新再试试！",refresh:"刷新",close:"关闭",changeLayout:"切换布局",layout:{auto:"自动",right:"右侧",top:"顶部",bottom:"底部"}}}};function pr(e,t){window.addEventListener("resize",ur),ur();var n=t.cdnRoot||t.baseUrl;me(t.baseUrl,n,t.docType,t.version).then((function(){if(window.addEventListener("hashchange",(function(e){Ie()})),Ie(),ke.docType=t.docType,ke.locale=t.locale,"string"==typeof e&&(e=document.querySelector(e)),!e)throw new Error("Can't find el.");var n=document.createElement("div");e.appendChild(n);var r=new X({locale:t.locale,fallbackLocale:"en",messages:hr});new a.a({i18n:r,el:n,render:function(e){return console.log("iMobile: ",ke.isMobile),ke.isMobile?e(Xn):e(Gn)}})}))}}])}));