!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=51)}([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){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 mr}));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(31);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-s-flag"})]):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?n("div",{staticClass:"children"},e._l(e.nodeData.children,(function(t){return e.expanded?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}}):e._e()})),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]},getName:function(e){return e.split(".").pop()}}},Ue=(n(32),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(33),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(34),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(35),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(36),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(37),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(38),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(39),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(40),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=n(25),mn=n.n(dn),vn=(n(41),n(42),n(26)),gn=n.n(vn),_n=n(19),yn=n.n(_n);function bn(e,t){return e===t}function xn(e,t,n,r){e.push(function(e,t,n){var r={cmd:e,idx:t};return"="===e&&(r.idx1=n),r}(t,n,r))}var En=Math.abs;function wn(e,t,n,r,a,i,o,s){var l,c,u,h=n>r,p=a>i,f=En(r-n),d=En(i-a);for(c=0;c<=f;c++)for(u=0;u<=d;u++)if(0===c)s[u]=u;else if(0===u)l=s[u],s[u]=c;else{var m=l+(o(e[h?n-c:c-1+n],t[p?a-u:u-1+a])?0:2),v=s[u]+1,g=s[u-1]+1;l=s[u],s[u]=m<v?m:v,g<s[u]&&(s[u]=g)}return s}var Cn,Sn=function(e,t,n){var r,a;n=n||bn;var i=e.length,o=t.length,s=Math.min(i,o),l=[];for(r=0;r<s&&n(e[r],t[r]);r++)xn(l,"=",r,r);for(a=0;a<s&&n(e[i-a-1],t[o-a-1]);a++);if(i-a>=r||o-a>=r){var c=function e(t,n,r,a,i,o,s,l,c){var u,h,p=[],f=a-r,d=o-i;if(f)if(d)if(1===f){var m=t[r],v=!1;for(h=0;h<d;h++)s(m,n[h+i])&&!v?(v=!0,xn(p,"=",r,h+i)):xn(p,"+",h+i);v||xn(p,"-",r)}else if(1===d){var g=n[i];v=!1;for(u=0;u<f;u++)s(g,t[u+r])&&!v?(v=!0,xn(p,"=",u+r,i)):xn(p,"-",u+r);v||xn(p,"+",i)}else{var _=(f/2|0)+r;wn(t,n,r,_,i,o,s,l),wn(t,n,a,_+1,o,i,s,c);var y,b=1/0,x=0;for(h=0;h<=d;h++)(y=l[h]+c[d-h])<b&&(b=y,x=h);p=e(t,n,r,_,i,x+=i,s,l,c);var E=e(t,n,_,a,x,o,s,l,c);for(u=0;u<E.length;u++)p.push(E[u])}else for(u=0;u<f;u++)xn(p,"-",u+r);else for(h=0;h<d;h++)xn(p,"+",h+i);return p}(e,t,r,i-a,r,o-a,n,[],[]);for(r=0;r<c.length;r++)l.push(c[r]);for(r=0;r<a;r++)xn(l,"=",i-a+r,o-a+r)}return l};function kn(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)(Cn||(Cn=new Promise((function(e){var t=document.createElement("script");t.src="https://cdn.jsdelivr.net/npm/echarts@5.0.0-rc.1/dist/echarts.min.js",t.async=!0,t.onload=function(){e(),Cn=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=Sn(r,a),o=[],s=i.length,l=s-1;l>=0;l--){var c=i[l];"-"===c.cmd&&n.replaceRange("",{line:c.idx,ch:0},{line:c.idx+1,ch:0})}for(var u=0;u<s;u++){var h=i[u];"+"===h.cmd&&(n.replaceRange(a[h.idx]+"\n",{line:h.idx,ch:0}),o.push(h.idx))}return o.forEach((function(e){n.addLineClass(e,"wrap","option-changed")})),s&&setTimeout((function(){n.scrollIntoView({line:o[0],ch:0},n.getWrapperElement().clientHeight-50)}),20),o}(a,i,this.cmInstance)}else this.cmInstance=mn()(this.$el.querySelector(".codemirror-main"),{value:this.formattedOptionCodeStr,mode:"javascript",theme:"dracula",readOnly:!0});this.lastUpdateExampleName=this.shared.currentExampleName}}var On={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:kn,updateOptionThrottled:yn()(kn,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 gn.a.js(this.optionCodeStr.replace(/"(\w+)"\s*:/g,"$1:").replace(/"__functionstart__/g,"").replace(/__functionend__"/g,"").replace(/__newline__/g,"\n"),{indent_size:2})}}},Mn=(n(43),Pe(On,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));Mn.options.__file="src/components/LiveExample.vue";var Nn=Mn.exports,Tn={components:{DocContentItemCard:un,LiveExample:Nn},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)}))}}},In=(n(44),Pe(Tn,Fe,[],!1,null,null,null));In.options.__file="src/components/DocContent.vue";var Rn=In.exports,An=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)};An._withStripped=!0;var Ln={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)}}},Dn=(n(45),Pe(Ln,An,[],!1,null,null,null));Dn.options.__file="src/components/Search.vue";var $n=Dn.exports,Pn=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)};Pn._withStripped=!0;var Vn=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)])};Vn._withStripped=!0;var jn={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}))}},Fn=(n(46),Pe(jn,Vn,[],!1,null,null,null));function zn(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=""}))}Fn.options.__file="src/components/SearchResultItemCard.vue";var Bn={components:{SearchResultItemCard:Fn.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:zn,updateSearchResults:yn()(zn,500,{leading:!1})},watch:{"shared.searchQuery":function(e){this.updateSearchResults(e),Re("/search/"+this.shared.searchQuery)}}},Wn=(n(47),Pe(Bn,Pn,[],!1,null,null,null));Wn.options.__file="src/components/SearchResult.vue";var Un=Wn.exports,Hn=function(){var e=this.$createElement;return(this._self._c||e)("div")};Hn._withStripped=!0;var qn=Pe({},Hn,[],!1,null,null,null);qn.options.__file="src/components/Home.vue";var Gn=qn.exports,Kn={props:["docType"],data:function(){return{shared:ke}},computed:{pagePath:function(){return Oe()}},components:{DocNav:je,DocContent:Rn,Search:$n,SearchResult:Un,LiveExample:Nn,Home:Gn}},Jn=(n(48),Pe(Kn,Z,[],!1,null,null,null));Jn.options.__file="src/App.vue";var Qn=Jn.exports,Xn=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)};Xn._withStripped=!0;var Zn={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:Rn,Search:$n,SearchResult:Un,Home:Gn}},Yn=(n(49),Pe(Zn,Xn,[],!1,null,null,null));Yn.options.__file="src/AppMobile.vue";var er=Yn.exports,tr=n(20),nr=n.n(tr),rr=n(27),ar=n.n(rr),ir=n(28),or=n.n(ir);n(50);function sr(e){e.querySelectorAll("pre code").forEach((function(e){e.classList.contains("hljs")||nr.a.highlightBlock(e)}))}nr.a.registerLanguage("javascript",ar.a),nr.a.registerLanguage("xml",or.a),a.a.directive("highlight",{inserted:function(e){sr(e)},update:function(e){sr(e)}});var lr=n(29),cr=n.n(lr),ur=n(30),hr=n.n(ur);function pr(e,t){function n(){e.__markInstance.mark(t,{diacritics:!0,separateWordSearch:!0})}e.__markInstance?e.__markInstance.unmark({done:function(){n()}}):(e.__markInstance=new cr.a(e),n())}function fr(){window.innerWidth<600?ke.isMobile=!0:ke.isMobile=!1}a.a.directive("mark",{inserted:function(e,t){e.__doMarkDebounced=hr()(pr,500,{trailing:!0,leading:!1}),e.__doMarkDebounced(e,t.value)},update:function(e,t){e.__doMarkDebounced(e,t.value)}});var dr={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 mr(e,t){window.addEventListener("resize",fr),fr();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:dr});new a.a({i18n:r,el:n,render:function(e){return console.log("iMobile: ",ke.isMobile),ke.isMobile?e(er):e(Qn)}})}))}}])}));